From 959f81de3554de540c3067fd5011385d8d319ac3 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 7 Nov 2023 10:56:31 -0600 Subject: [PATCH] PersistentHashWalkMapper: doc fixes, add test --- pymbolic/mapper/__init__.py | 2 +- pymbolic/mapper/persistent_hash.py | 2 +- test/test_persistent_hash.py | 38 ++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 test/test_persistent_hash.py diff --git a/pymbolic/mapper/__init__.py b/pymbolic/mapper/__init__.py index 7ff87b3f..34589b96 100644 --- a/pymbolic/mapper/__init__.py +++ b/pymbolic/mapper/__init__.py @@ -711,7 +711,7 @@ class WalkMapper(RecursiveMapper): visited subexpression. ``map_...`` methods are required to call :meth:`visit` *before* - descending to visit their chidlren. + descending to visit their children. .. method:: visit(expr, *args, **kwargs) diff --git a/pymbolic/mapper/persistent_hash.py b/pymbolic/mapper/persistent_hash.py index 6b8ffa26..aacf48a4 100644 --- a/pymbolic/mapper/persistent_hash.py +++ b/pymbolic/mapper/persistent_hash.py @@ -25,7 +25,7 @@ class PersistentHashWalkMapper(WalkMapper): - """A subclass of :class:`loopy.symbolic.WalkMapper` for constructing + """A subclass of :class:`pymbolic.mapper.WalkMapper` for constructing persistent hash keys for use with :class:`pytools.persistent_dict.PersistentDict`. """ diff --git a/test/test_persistent_hash.py b/test/test_persistent_hash.py new file mode 100644 index 00000000..08c22ef6 --- /dev/null +++ b/test/test_persistent_hash.py @@ -0,0 +1,38 @@ +__copyright__ = "Copyright (C) 2023 University of Illinois Board of Trustees" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + + +from pymbolic.mapper.persistent_hash import PersistentHashWalkMapper + + +def test_persistent_hash_simple() -> None: + from testlib import generate_random_expression + import hashlib + expr = generate_random_expression(seed=(333)) + + key_hash = hashlib.sha256() + + phwm = PersistentHashWalkMapper(key_hash) + phwm(expr) + + assert key_hash.hexdigest() == \ + "1a1cd91483015333f2a9b06ab049a8edabc72aafc1f9b6d7cd831a39068e50da"