Improve hashing algorithm

This commit is contained in:
YishiMichael 2022-02-15 21:38:22 +08:00
parent 3756605a45
commit 6f9df8db26
No known key found for this signature in database
GPG key ID: EC615C0C5A86BC80
2 changed files with 13 additions and 2 deletions

View file

@ -17,6 +17,7 @@ from manimlib.mobject.types.vectorized_mobject import VMobject
from manimlib.utils.config_ops import digest_config
from manimlib.utils.directories import get_mobject_data_dir
from manimlib.utils.images import get_full_vector_image_path
from manimlib.utils.iterables import hash_obj
from manimlib.logger import log
@ -63,8 +64,7 @@ class SVGMobject(VMobject):
self.move_into_position()
def init_svg_mobject(self):
hasher = hashlib.sha256(str(self.hash_seed).encode())
hash_val = hasher.hexdigest()
hash_val = hash_obj(self.hash_seed)
if hash_val in SVG_HASH_TO_MOB_MAP:
mob = SVG_HASH_TO_MOB_MAP[hash_val].copy()
self.add(*mob)

View file

@ -139,3 +139,14 @@ def remove_nones(sequence):
def concatenate_lists(*list_of_lists):
return [item for l in list_of_lists for item in l]
def hash_obj(obj):
if isinstance(obj, dict):
new_obj = {k: hash_obj(v) for k, v in obj.items()}
return hash(tuple(frozenset(sorted(new_obj.items()))))
if isinstance(obj, (set, tuple, list)):
return hash(tuple([hash_obj(e) for e in obj]))
return hash(obj)