aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/deepdiff/operator.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/deepdiff/operator.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/deepdiff/operator.py')
-rw-r--r--.venv/lib/python3.12/site-packages/deepdiff/operator.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/deepdiff/operator.py b/.venv/lib/python3.12/site-packages/deepdiff/operator.py
new file mode 100644
index 00000000..018fa3c6
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/deepdiff/operator.py
@@ -0,0 +1,69 @@
+import re
+from typing import Any, Optional, List
+from abc import ABCMeta, abstractmethod
+from deepdiff.helper import convert_item_or_items_into_compiled_regexes_else_none
+
+
+
+class BaseOperatorPlus(metaclass=ABCMeta):
+
+ @abstractmethod
+ def match(self, level) -> bool:
+ """
+ Given a level which includes t1 and t2 in the tree view, is this operator a good match to compare t1 and t2?
+ If yes, we will run the give_up_diffing to compare t1 and t2 for this level.
+ """
+ pass
+
+ @abstractmethod
+ def give_up_diffing(self, level, diff_instance: float) -> bool:
+ """
+ Given a level which includes t1 and t2 in the tree view, and the "distance" between l1 and l2.
+ do we consider t1 and t2 to be equal or not. The distance is a number between zero to one and is calculated by DeepDiff to measure how similar objects are.
+ """
+
+ @abstractmethod
+ def normalize_value_for_hashing(self, parent: Any, obj: Any) -> Any:
+ """
+ You can use this function to normalize values for ignore_order=True
+
+ For example, you may want to turn all the words to be lowercase. Then you return obj.lower()
+ """
+ pass
+
+
+
+class BaseOperator:
+
+ def __init__(self, regex_paths:Optional[List[str]]=None, types:Optional[List[type]]=None):
+ if regex_paths:
+ self.regex_paths = convert_item_or_items_into_compiled_regexes_else_none(regex_paths)
+ else:
+ self.regex_paths = None
+ self.types = types
+
+ def match(self, level) -> bool:
+ if self.regex_paths:
+ for pattern in self.regex_paths:
+ matched = re.search(pattern, level.path()) is not None
+ if matched:
+ return True
+ if self.types:
+ for type_ in self.types:
+ if isinstance(level.t1, type_) and isinstance(level.t2, type_):
+ return True
+ return False
+
+ def give_up_diffing(self, level, diff_instance) -> bool:
+ raise NotImplementedError('Please implement the diff function.')
+
+
+class PrefixOrSuffixOperator:
+
+ def match(self, level) -> bool:
+ return level.t1 and level.t2 and isinstance(level.t1, str) and isinstance(level.t2, str)
+
+ def give_up_diffing(self, level, diff_instance) -> bool:
+ t1 = level.t1
+ t2 = level.t2
+ return t1.startswith(t2) or t2.startswith(t1)