This works.
This seems to lose some information.
>>>dumps(List[int])
---------------------------------------------------------------------------TypeErrorTraceback (mostrecentcalllast)
<ipython-input-15-f02da844db1c>in<module>()
---->1dumps(List[int])
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycindumps(obj, protocol)
600601cp=CloudPickler(file,protocol)
-->602cp.dump(obj)
603604returnfile.getvalue()
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycindump(self, obj)
105self.inject_addons()
106try:
-->107returnPickler.dump(self, obj)
108exceptRuntimeErrorase:
109if'recursion'ine.args[0]:
/Users/rkn/anaconda/lib/python2.7/pickle.pycindump(self, obj)
222ifself.proto>=2:
223self.write(PROTO+chr(self.proto))
-->224self.save(obj)
225self.write(STOP)
226/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
298issc=0299ifissc:
-->300self.save_global(obj)
301return302/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
298issc=0299ifissc:
-->300self.save_global(obj)
301return302/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
298issc=0299ifissc:
-->300self.save_global(obj)
301return302/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
566write(MARK)
567forelementinobj:
-->568save(element)
569570ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
298issc=0299ifissc:
-->300self.save_global(obj)
301return302/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
298issc=0299ifissc:
-->300self.save_global(obj)
301return302/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_dict(self, obj)
653654self.memoize(obj)
-->655self._batch_setitems(obj.iteritems())
656657dispatch[DictionaryType] =save_dict/Users/rkn/anaconda/lib/python2.7/pickle.pycin_batch_setitems(self, items)
685fork, vintmp:
686save(k)
-->687save(v)
688write(SETITEMS)
689elifn:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
329330# Save the reduce() output and finally memoize the object-->331self.save_reduce(obj=obj, *rv)
332333defpersistent_id(self, obj):
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
527528ifstateisnotNone:
-->529save(state)
530write(pickle.BUILD)
531/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_dict(self, obj)
653654self.memoize(obj)
-->655self._batch_setitems(obj.iteritems())
656657dispatch[DictionaryType] =save_dict/Users/rkn/anaconda/lib/python2.7/pickle.pycin_batch_setitems(self, items)
685fork, vintmp:
686save(k)
-->687save(v)
688write(SETITEMS)
689elifn:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_function(self, obj, name)
197klass=getattr(themodule, name, None)
198ifklassisNoneorklassisnotobj:
-->199self.save_function_tuple(obj)
200return201/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_function_tuple(self, func)
240# save the rest of the func data needed by _fill_function241save(f_globals)
-->242save(defaults)
243save(dct)
244write(pickle.TUPLE)
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
329330# Save the reduce() output and finally memoize the object-->331self.save_reduce(obj=obj, *rv)
332333defpersistent_id(self, obj):
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
494"args[0] from __newobj__ args has the wrong class")
495args=args[1:]
-->496save(cls)
497498#Don't pickle transient entries/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_global(self, obj, name, pack)
351d['__new__'] =obj.__new__352-->353self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
354else:
355raisepickle.PicklingError("Can't pickle %r"%obj)
/Users/rkn/anaconda/lib/python2.7/site-packages/cloudpickle/cloudpickle.pycinsave_reduce(self, func, args, state, listitems, dictitems, obj)
509else:
510save(func)
-->511save(args)
512write(pickle.REDUCE)
513/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_tuple(self, obj)
552ifn<=3andproto>=2:
553forelementinobj:
-->554save(element)
555# Subtle. Same as in the big comment below.556ifid(obj) inmemo:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
284f=self.dispatch.get(t)
285iff:
-->286f(self, obj) # Call unbound method with explicit self287return288/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave_dict(self, obj)
653654self.memoize(obj)
-->655self._batch_setitems(obj.iteritems())
656657dispatch[DictionaryType] =save_dict/Users/rkn/anaconda/lib/python2.7/pickle.pycin_batch_setitems(self, items)
685fork, vintmp:
686save(k)
-->687save(v)
688write(SETITEMS)
689elifn:
/Users/rkn/anaconda/lib/python2.7/pickle.pycinsave(self, obj)
304reduce=getattr(obj, "__reduce_ex__", None)
305ifreduce:
-->306rv=reduce(self.proto)
307else:
308reduce=getattr(obj, "__reduce__", None)
TypeError: can'tpicklewrapper_descriptorobjects
Also
Hi, I'm trying to pickle some stuff in the
typingmodule. I'm curious if there are fundamental limitations here or if this is out of scope for cloudpickle. Thanks for your help!This works.
This seems to lose some information.
This doesn't work