def test_memorized_pickling(): for func in (MemorizedFunc(f, env['dir']), NotMemorizedFunc(f)): filename = os.path.join(env['dir'], 'pickling_test.dat') result = func.call_and_shelve(2) with open(filename, 'wb') as fp: pickle.dump(result, fp) with open(filename, 'rb') as fp: result2 = pickle.load(fp) nose.tools.assert_equal(result2.get(), result.get()) os.remove(filename)
def test_memorized_pickling(tmpdir): for func in (MemorizedFunc(f, tmpdir.strpath), NotMemorizedFunc(f)): filename = tmpdir.join('pickling_test.dat').strpath result = func.call_and_shelve(2) with open(filename, 'wb') as fp: pickle.dump(result, fp) with open(filename, 'rb') as fp: result2 = pickle.load(fp) assert result2.get() == result.get() os.remove(filename)
def test_check_call_in_cache(tmpdir): for func in (MemorizedFunc(f, tmpdir.strpath), Memory(location=tmpdir.strpath, verbose=0).cache(f)): result = func.check_call_in_cache(2) assert not result assert isinstance(result, bool) assert func(2) == 5 result = func.check_call_in_cache(2) assert result assert isinstance(result, bool) func.clear()
def test_call_and_shelve(tmpdir): # Test MemorizedFunc outputting a reference to cache. for func, Result in zip(( MemorizedFunc(f, tmpdir.strpath), NotMemorizedFunc(f), Memory(location=tmpdir.strpath, verbose=0).cache(f), Memory(location=None).cache(f), ), (MemorizedResult, NotMemorizedResult, MemorizedResult, NotMemorizedResult)): assert func(2) == 5 result = func.call_and_shelve(2) assert isinstance(result, Result) assert result.get() == 5 result.clear() with raises(KeyError): result.get() result.clear() # Do nothing if there is no cache.
def test_call_and_shelve(): """Test MemorizedFunc outputting a reference to cache. """ for func, Result in zip(( MemorizedFunc(f, env['dir']), NotMemorizedFunc(f), Memory(cachedir=env['dir']).cache(f), Memory(cachedir=None).cache(f), ), (MemorizedResult, NotMemorizedResult, MemorizedResult, NotMemorizedResult)): nose.tools.assert_equal(func(2), 5) result = func.call_and_shelve(2) nose.tools.assert_true(isinstance(result, Result)) nose.tools.assert_equal(result.get(), 5) result.clear() nose.tools.assert_raises(KeyError, result.get) result.clear() # Do nothing if there is no cache.
def __call__(self, *args, **kwargs): original_result = MemorizedFunc.__call__(self, *args, **kwargs) if self.func not in _FUNCTION_HASHES: # Also store in the in-memory store of function hashes if PY3_OR_LATER: is_named_callable = (hasattr(self.func, '__name__') and self.func.__name__ != '<lambda>') else: is_named_callable = (hasattr(self.func, 'func_name') and self.func.func_name != '<lambda>') if is_named_callable: # Don't do this for lambda functions or strange callable # objects, as it ends up being too fragile func_hash = self._hash_func() try: _FUNCTION_HASHES[self.func] = func_hash except TypeError: # Some callable are not hashable pass return original_result
def test_memorized_repr(tmpdir): func = MemorizedFunc(f, tmpdir.strpath) result = func.call_and_shelve(2) func2 = MemorizedFunc(f, tmpdir.strpath) result2 = func2.call_and_shelve(2) assert result.get() == result2.get() assert repr(func) == repr(func2) # Smoke test with NotMemorizedFunc func = NotMemorizedFunc(f) repr(func) repr(func.call_and_shelve(2)) # Smoke test for message output (increase code coverage) func = MemorizedFunc(f, tmpdir.strpath, verbose=11, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, tmpdir.strpath, verbose=11) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, tmpdir.strpath, verbose=5, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, tmpdir.strpath, verbose=5) result = func.call_and_shelve(11) result.get()
def test_memorized_repr(): func = MemorizedFunc(f, env["dir"]) result = func.call_and_shelve(2) func2 = MemorizedFunc(f, env["dir"]) result2 = func2.call_and_shelve(2) nose.tools.assert_equal(result.get(), result2.get()) nose.tools.assert_equal(repr(func), repr(func2)) # Smoke test on deprecated methods func.format_signature(2) func.format_call(2) # Smoke test with NotMemorizedFunc func = NotMemorizedFunc(f) repr(func) repr(func.call_and_shelve(2)) # Smoke test for message output (increase code coverage) func = MemorizedFunc(f, env["dir"], verbose=11, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env["dir"], verbose=11) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env["dir"], verbose=5, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env["dir"], verbose=5) result = func.call_and_shelve(11) result.get()
def test_memorized_repr(): func = MemorizedFunc(f, env['dir']) result = func.call_and_shelve(2) func2 = MemorizedFunc(f, env['dir']) result2 = func2.call_and_shelve(2) nose.tools.assert_equal(result.get(), result2.get()) nose.tools.assert_equal(repr(func), repr(func2)) # Smoke test on deprecated methods func.format_signature(2) func.format_call(2) # Smoke test with NotMemorizedFunc func = NotMemorizedFunc(f) repr(func) repr(func.call_and_shelve(2)) # Smoke test for message output (increase code coverage) func = MemorizedFunc(f, env['dir'], verbose=11, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env['dir'], verbose=11) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env['dir'], verbose=5, timestamp=time.time()) result = func.call_and_shelve(11) result.get() func = MemorizedFunc(f, env['dir'], verbose=5) result = func.call_and_shelve(11) result.get()