aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/deepdiff/anyset.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/anyset.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-4a52a71956a8d46fcb7294ac71734504bb09bcc2.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/deepdiff/anyset.py')
-rw-r--r--.venv/lib/python3.12/site-packages/deepdiff/anyset.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/deepdiff/anyset.py b/.venv/lib/python3.12/site-packages/deepdiff/anyset.py
new file mode 100644
index 00000000..cd87ac38
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/deepdiff/anyset.py
@@ -0,0 +1,65 @@
+from deepdiff.deephash import DeepHash
+from deepdiff.helper import dict_, SetOrdered
+
+
+class AnySet:
+ """
+ Any object can be in this set whether hashable or not.
+ Note that the current implementation has memory leak and keeps
+ traces of objects in itself even after popping.
+ However one the AnySet object is deleted, all those traces will be gone too.
+ """
+ def __init__(self, items=None):
+ self._set = SetOrdered()
+ self._hashes = dict_()
+ self._hash_to_objects = dict_()
+ if items:
+ for item in items:
+ self.add(item)
+
+ def add(self, item):
+ try:
+ self._set.add(item)
+ except TypeError:
+ hashes_obj = DeepHash(item, hashes=self._hashes)
+ hash_ = hashes_obj[item]
+ if hash_ not in self._hash_to_objects:
+ self._hash_to_objects[hash_] = item
+
+ def __contains__(self, item):
+ try:
+ result = item in self._set
+ except TypeError:
+ hashes_obj = DeepHash(item, hashes=self._hashes)
+ hash_ = hashes_obj[item]
+ result = hash_ in self._hash_to_objects
+ return result
+
+ def pop(self):
+ if self._set:
+ return self._set.pop()
+ else:
+ return self._hash_to_objects.pop(next(iter(self._hash_to_objects)))
+
+ def __eq__(self, other):
+ set_part, hashes_to_objs_part = other
+ return (self._set == set_part and self._hash_to_objects == hashes_to_objs_part)
+
+ __req__ = __eq__
+
+ def __repr__(self):
+ return "< AnySet {}, {} >".format(self._set, self._hash_to_objects)
+
+ __str__ = __repr__
+
+ def __len__(self):
+ return len(self._set) + len(self._hash_to_objects)
+
+ def __iter__(self):
+ for item in self._set:
+ yield item
+ for item in self._hash_to_objects.values():
+ yield item
+
+ def __bool__(self):
+ return bool(self._set or self._hash_to_objects)