Archived
saving dependency work
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
|
||||
# Copyright (c) 2008-2016 California Institute of Technology.
|
||||
# Copyright (c) 2016-2022 The Uncertainty Quantification Foundation.
|
||||
# License: 3-clause BSD. The full license text is available at:
|
||||
# - https://github.com/uqfoundation/dill/blob/master/LICENSE
|
||||
"""
|
||||
testing some selected object types
|
||||
"""
|
||||
|
||||
import dill
|
||||
dill.settings['recurse'] = True
|
||||
|
||||
verbose = False
|
||||
|
||||
def test_dict_contents():
|
||||
c = type.__dict__
|
||||
for i,j in c.items():
|
||||
#try:
|
||||
ok = dill.pickles(j)
|
||||
#except Exception:
|
||||
# print ("FAIL: %s with %s" % (i, dill.detect.errors(j)))
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(j), j))
|
||||
assert ok
|
||||
if verbose: print ("")
|
||||
|
||||
def _g(x): yield x;
|
||||
|
||||
def _f():
|
||||
try: raise
|
||||
except Exception:
|
||||
from sys import exc_info
|
||||
e, er, tb = exc_info()
|
||||
return er, tb
|
||||
|
||||
class _d(object):
|
||||
def _method(self):
|
||||
pass
|
||||
|
||||
from dill import objects
|
||||
from dill import load_types
|
||||
load_types(pickleable=True,unpickleable=False)
|
||||
_newclass = objects['ClassObjectType']
|
||||
# some clean-up #FIXME: should happen internal to dill
|
||||
objects['TemporaryFileType'].close()
|
||||
objects['TextWrapperType'].close()
|
||||
objects['BufferedRandomType'].close()
|
||||
objects['BufferedReaderType'].close()
|
||||
objects['BufferedWriterType'].close()
|
||||
objects['FileType'].close()
|
||||
del objects
|
||||
|
||||
# getset_descriptor for new-style classes (fails on '_method', if not __main__)
|
||||
def test_class_descriptors():
|
||||
d = _d.__dict__
|
||||
for i in d.values():
|
||||
ok = dill.pickles(i)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(i), i))
|
||||
assert ok
|
||||
if verbose: print ("")
|
||||
od = _newclass.__dict__
|
||||
for i in od.values():
|
||||
ok = dill.pickles(i)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(i), i))
|
||||
assert ok
|
||||
if verbose: print ("")
|
||||
|
||||
# (__main__) class instance for new-style classes
|
||||
def test_class():
|
||||
o = _d()
|
||||
oo = _newclass()
|
||||
ok = dill.pickles(o)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(o), o))
|
||||
assert ok
|
||||
ok = dill.pickles(oo)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(oo), oo))
|
||||
assert ok
|
||||
if verbose: print ("")
|
||||
|
||||
# frames, generators, and tracebacks (all depend on frame)
|
||||
def test_frame_related():
|
||||
g = _g(1)
|
||||
f = g.gi_frame
|
||||
e,t = _f()
|
||||
_is = lambda ok: ok
|
||||
ok = dill.pickles(f)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(f), f))
|
||||
assert not ok
|
||||
ok = dill.pickles(g)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(g), g))
|
||||
assert _is(not ok) #XXX: dill fails
|
||||
ok = dill.pickles(t)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(t), t))
|
||||
assert not ok #XXX: dill fails
|
||||
ok = dill.pickles(e)
|
||||
if verbose: print ("%s: %s, %s" % (ok, type(e), e))
|
||||
assert ok
|
||||
if verbose: print ("")
|
||||
|
||||
def test_typing():
|
||||
import typing
|
||||
x = typing.Any
|
||||
assert x == dill.copy(x)
|
||||
x = typing.Dict[int, str]
|
||||
assert x == dill.copy(x)
|
||||
x = typing.List[int]
|
||||
assert x == dill.copy(x)
|
||||
x = typing.Tuple[int, str]
|
||||
assert x == dill.copy(x)
|
||||
x = typing.Tuple[int]
|
||||
assert x == dill.copy(x)
|
||||
x = typing.Tuple[()]
|
||||
assert x == dill.copy(x)
|
||||
x = typing.Tuple[()].copy_with(())
|
||||
assert x == dill.copy(x)
|
||||
return
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_frame_related()
|
||||
test_dict_contents()
|
||||
test_class()
|
||||
test_class_descriptors()
|
||||
test_typing()
|
||||
Reference in New Issue
Block a user