Ñò §ÚêLc @ sØ d Z d d k l Z d d d d d g Z h Z d d „ Z d „ Z y e Wn e j o n Xd „ Z e e e e ƒ d „ Z d Z d „ Z d „ Z d „ Z h Z h Z h Z d „ Z d „ Z d „ Z d S( s¬ Helper to provide extensibility for pickle/cPickle. This is only useful to add pickle support for extension types defined in C, not for instances of user-defined classes. iÿÿÿÿ( t ClassTypet picklet constructort add_extensiont remove_extensiont clear_extension_cachec C sl t | ƒ t j o t d ƒ ‚ n t | d ƒ p t d ƒ ‚ n | t | <| d j o t | ƒ n d S( Ns- copy_reg is not intended for use with classest __call__s$ reduction functions must be callable( t typet _ClassTypet TypeErrort hasattrt dispatch_tablet NoneR ( t ob_typet pickle_functiont constructor_ob( ( s /usr/lib64/python2.6/copy_reg.pyR s c C s$ t | d ƒ p t d ƒ ‚ n d S( NR s constructors must be callable( R R ( t object( ( s /usr/lib64/python2.6/copy_reg.pyR s c C s t | i | i f f S( N( t complext realt imag( t c( ( s /usr/lib64/python2.6/copy_reg.pyt pickle_complex' s c C s] | t j o t i | ƒ } n: | i | | ƒ } | i t i j o | i | | ƒ n | S( N( R t __new__t __init__( t clst baset statet obj( ( s /usr/lib64/python2.6/copy_reg.pyt _reconstructor. s i i c C s5 x> | i i D]* } t | d ƒ o | i t @o Pq q Wt } | t j o d } n1 | | i j o t d | i ‚ n | | ƒ } | i | | f } y | i } Wn_ t j oS t | d d ƒ o t d ƒ ‚ n y | i } Wqt j o d } qXn X| ƒ } | o t | | f St | f Sd S( Nt __flags__s can't pickle %s objectst __slots__sN a class that defines __slots__ without defining __getstate__ cannot be pickled( t __class__t __mro__R R t _HEAPTYPER R R t __name__t __getstate__t AttributeErrort getattrt __dict__R ( t selft protoR R t argst getstatet dict( ( s /usr/lib64/python2.6/copy_reg.pyt _reduce_ex; s0 c G s | i | | Œ S( N( R ( R R) ( ( s /usr/lib64/python2.6/copy_reg.pyt __newobj__\ s c C s | i i d ƒ } | d j o | Sg } t | d ƒ p nÄ xÀ | i D]µ } d | i j oŸ | i d } t | t ƒ o | f } n xr | D]f } | d j o q q | i d ƒ o/ | i d ƒ o | i d | i | f ƒ q | i | ƒ q WqH qH Wy | | _ Wn n X| S( s› Return a list of slot names for a given class. This needs to find slots defined by the class and its bases, so we can't simply return the __slots__ attribute. We must walk down the Method Resolution Order and concatenate the __slots__ of each class found there. (This assumes classes don't modify their __slots__ attribute to misrepresent their slots after the class is defined.) t __slotnames__R R&