a
    ze?"                 ,   @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZ d dlmZ zd dlZW n ey   dZY n0 d dlmZ d dlmZmZmZmZmZmZmZmZm Z m!Z! d dlm"Z" z4e!  d dl#Z$W d   n1 s$0    Y  W n eyH   dZ$Y n0 e%ej&dk dZ'e(ej)d	 Z*d
d Z+dd Z,dd Z-G dd dej.Z/G dd de0Z1G dd dZ2G dd dZ3G dd de3Z4G dd de3Z5G dd dZ6G dd dZ7d dl8Z8e3e8_3d e3_9e4e8_4d e4_9e5e8_5d e5_9G d!d" d"e:Z;G d#d$ d$e3Z<G d%d& d&e=Z>G d'd( d(e0e>d)Z?G d*d+ d+e=Z@d,d- ZAG d.d/ d/eBZCG d0d1 d1eDZEedurG d2d3 d3ZFd4ZGd5ZHd6ZId7ZJd8ZKd9ZLd:ZMd;ZNd<ZOd=ZPd>ZQd?ZRd@ZSdAZTeUeVeWeXeYeZe[e\e]e^e_e`eaebeecedeeefegeheiejekelemeneoepeqereseteuevewexeyeze{e|e}e~ef,ZdBZdCZdDdE ZG dFdG dGZG dHdI dIZG dJdK dKZG dLdM dMe0ZG dNdO dOe0ZG dPdQ dQe0ZG dRdS dSe0ZG dTdU dUe0ZG dVdW dWe0ZG dXdY dYe0ZG dZd[ d[e0ZG d\d] d]e:ZG d^d_ d_eZG d`da daeZG dbdc dceZG ddde deeZG dfdg dgeZG dhdi dieZG djdk dkeZG dldm dmeZG dndo doeZeeeeeeeeeeg
ZG dpdq dqe:ZG drds dseZG dtdu dueZG dvdw dwe:aG dxdy dytZG dzd{ d{tZG d|d} d}ZG d~d dZG dd dZG dd dZG dd dZdZG dd de0ZG dd de0Zdd ZG dd dZG dd dZG dd dZed krd dlmZ e Ze(ej)d	 D ]ZeeeZede e(d eedD ](ZeBeeed  Zede qed e  ede ede ee ed e  qdS )    N)dedent)SimpleCookie)support)

TestFailedTESTFNrun_with_locale
no_tracing_2G_4G
bigmemtestreap_threadsforgetsave_restore_warnings_filters)bytes_typesl        z(test is only meaningful on 32-bit builds   c                 C   s0   t |D ] \}}}|j| dkr
 dS q
dS )Nlatin-1TFpickletoolsgenopscodedecode)r   pickleopdummy r   '/usr/lib/python3.9/test/pickletester.pyopcode_in_pickle5   s    r   c                 C   s6   d}t |D ]"\}}}|j| dkr|d7 }q|S )Nr   r   r   r   )r   r   nr   r   r   r   r   count_opcode<   s
    
r   c                 C   s   | S Nr   xr   r   r   identityD   s    r"   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
UnseekableIOc                 G   s   t d S r   )NotImplementedErrorselfargsr   r   r   peekI   s    zUnseekableIO.peekc                 C   s   dS )NFr   r&   r   r   r   seekableL   s    zUnseekableIO.seekablec                 G   s
   t jd S r   ioUnsupportedOperationr%   r   r   r   seekO   s    zUnseekableIO.seekc                 C   s
   t jd S r   r+   r)   r   r   r   tellR   s    zUnseekableIO.tellN)__name__
__module____qualname__r(   r*   r.   r/   r   r   r   r   r#   H   s   r#   c                   @   s   e Zd Zdd ZdS )	MinimalIOc                 G   s8   t j| | _| jj| _| jj| _| jj| _| jj| _d S r   )r,   BytesIOZ_biogetvaluereadreadlinewriter%   r   r   r   __init__Z   s
    


zMinimalIO.__init__Nr0   r1   r2   r9   r   r   r   r   r3   V   s   r3   c                   @   s   e Zd Zdd Zdd ZdS )ExtensionSaverc                 C   sB   || _ |tjv r8tj| | _t| jd | jd | nd | _d S Nr   r   )r   copyreg_inverted_registrypairremove_extension)r&   r   r   r   r   r9   o   s
    
zExtensionSaver.__init__c                 C   sX   | j }tj|}|d ur0t|d |d | | j}|d urTt|d |d | d S r<   )r   r=   r>   getr@   r?   add_extension)r&   r   Zcurpairr?   r   r   r   restorex   s    zExtensionSaver.restoreN)r0   r1   r2   r9   rC   r   r   r   r   r;   l   s   	r;   c                   @   s   e Zd Zdd ZdS )Cc                 C   s   | j |j kS r   )__dict__r&   otherr   r   r   __eq__   s    zC.__eq__N)r0   r1   r2   rH   r   r   r   r   rD      s   rD   c                   @   s   e Zd Zdd ZdS )Dc                 C   s   d S r   r   )r&   argr   r   r   r9      s    z
D.__init__Nr:   r   r   r   r   rI      s   rI   c                   @   s   e Zd Zdd ZdS )Ec                 C   s   dS Nr   r   r)   r   r   r   __getinitargs__   s    zE.__getinitargs__N)r0   r1   r2   rM   r   r   r   r   rK      s   rK   c                   @   s   e Zd ZdS )ObjectNr0   r1   r2   r   r   r   r   rN      s   rN   c                   @   s   e Zd Zdd Zdd ZdS )Kc                 C   s
   || _ d S r   )value)r&   rQ   r   r   r   r9      s    z
K.__init__c                 C   s   t | jffS r   )rP   rQ   r)   r   r   r   
__reduce__   s    zK.__reduce__N)r0   r1   r2   r9   rR   r   r   r   r   rP      s   rP   __main__c                   @   s   e Zd Zdd ZdS )myintc                 C   s   t || _ d S r   str)r&   r!   r   r   r   r9      s    zmyint.__init__Nr:   r   r   r   r   rT      s   rT   c                   @   s   e Zd Zdd Zdd ZdS )initargc                 C   s   || _ || _d S r   ab)r&   rY   rZ   r   r   r   r9      s    zinitarg.__init__c                 C   s   | j | jfS r   rX   r)   r   r   r   rM      s    zinitarg.__getinitargs__N)r0   r1   r2   r9   rM   r   r   r   r   rW      s   rW   c                   @   s   e Zd ZdS )	metaclassNrO   r   r   r   r   r[      s   r[   c                   @   s   e Zd ZdS )use_metaclassNrO   r   r   r   r   r\      s   r\   )r[   c                   @   s   e Zd Zdd Zdd ZdS )pickling_metaclassc                 C   s   t | t |ko| j|jkS r   )typereduce_argsrF   r   r   r   rH      s    
zpickling_metaclass.__eq__c                 C   s
   t | jfS r   )create_dynamic_classr_   r)   r   r   r   rR      s    zpickling_metaclass.__reduce__N)r0   r1   r2   rH   rR   r   r   r   r   r]      s   r]   c                 C   s   t | |t }| |f|_|S r   )r]   dictr_   )namebasesresultr   r   r   r`      s    
r`   c                   @   s<   e Zd ZdZdZdZdZdd Zdd ZeZ	e
dd ZdS )	ZeroCopyBytesTc                 C   s8   |dkr t | jt| fd fS t | jt| ffS d S N   r^   _reconstructr   PickleBufferbytesr&   protocolr   r   r   __reduce_ex__   s    zZeroCopyBytes.__reduce_ex__c                 C   s   d | jjt| S Nz{}({!r})format	__class__r0   rk   r)   r   r   r   __repr__   s    zZeroCopyBytes.__repr__c                 C   sf   t |J}|j}t|| u r.|W  d    S | |W  d    S W d    n1 sX0    Y  d S r   
memoryviewobjr^   clsrv   mr   r   r   ri      s
    
zZeroCopyBytes._reconstructNr0   r1   r2   readonlyc_contiguousf_contiguouszero_copy_reconstructrn   rs   __str__classmethodri   r   r   r   r   re      s   re   c                   @   s<   e Zd ZdZdZdZdZdd Zdd ZeZ	e
dd Zd	S )
ZeroCopyBytearrayFTc                 C   s8   |dkr t | jt| fd fS t | jt| ffS d S rf   rh   rl   r   r   r   rn      s    zZeroCopyBytearray.__reduce_ex__c                 C   s   d | jjt| S ro   rp   r)   r   r   r   rs      s    zZeroCopyBytearray.__repr__c                 C   sf   t |J}|j}t|| u r.|W  d    S | |W  d    S W d    n1 sX0    Y  d S r   rt   rw   r   r   r   ri      s
    
zZeroCopyBytearray._reconstructNrz   r   r   r   r   r      s   r   c                   @   sp   e Zd ZdZdd Zdd Zedd Zedd	 Zed
d Z	dd Z
dd Zdd Zdd Zedd ZdS )PicklableNDArrayFc                 O   s   t j|i || _d S r   )_testbufferZndarrayarrayr&   r'   kwargsr   r   r   r9     s    zPicklableNDArray.__init__c                 C   s"   t | }||}| j| |_|S r   )r^   __new__r   )r&   idxrx   newr   r   r   __getitem__  s    
zPicklableNDArray.__getitem__c                 C   s   | j jS r   )r   r{   r)   r   r   r   r{     s    zPicklableNDArray.readonlyc                 C   s   | j jS r   )r   r|   r)   r   r   r   r|     s    zPicklableNDArray.c_contiguousc                 C   s   | j jS r   )r   r}   r)   r   r   r   r}     s    zPicklableNDArray.f_contiguousc                 C   sb   t |tstS |jj| jjko`|jj| jjko`|jj| jjko`|jj| jjko`|j | j kS r   )	
isinstancer   NotImplementedr   rq   shapestridesr{   tobytesrF   r   r   r   rH     s    
zPicklableNDArray.__eq__c                 C   s   t |tstS | |k S r   )r   r   r   rF   r   r   r   __ne__!  s    
zPicklableNDArray.__ne__c                 C   s.   t |  d| jj d| jj d| j  dS )Nz(shape=z	,strides=z, bytes=))r^   r   r   r   r   r)   r   r   r   rs   &  s
    zPicklableNDArray.__repr__c                 C   s   | j jstd| j j| j j| j j| jr,dntjd}t	
| j }|dkr\t| j||ffS | &}t| j| |ffW  d    S 1 s0    Y  d S )Nz>Reconstructing a non-contiguous ndarray does not seem possibler   )r   r   rq   flagsrg   )r   
contiguousr$   r   r   rq   r{   r   ND_WRITABLEr   rj   r^   ri   rawr   )r&   rm   Zndarray_kwargspbry   r   r   r   rn   +  s"    


zPicklableNDArray.__reduce_ex__c                 C   sD   t |}t| }W d    n1 s*0    Y  | |fi |S r   )ru   listr   )rx   rv   r   ry   itemsr   r   r   ri   >  s    
*zPicklableNDArray._reconstructN)r0   r1   r2   r~   r9   r   propertyr{   r|   r}   rH   r   rs   rn   r   ri   r   r   r   r   r      s   


	r   s;  (lp0
L0L
aL1L
aF2.0
ac__builtin__
complex
p1
(F3.0
F0.0
tp2
Rp3
aL1L
aL-1L
aL255L
aL-255L
aL-256L
aL65535L
aL-65535L
aL-65536L
aL2147483647L
aL-2147483647L
aL-2147483648L
a(Vabc
p4
g4
ccopy_reg
_reconstructor
p5
(c__main__
C
p6
c__builtin__
object
p7
Ntp8
Rp9
(dp10
Vfoo
p11
L1L
sVbar
p12
L2L
sbg9
tp13
ag13
aL5L
a.an      0: (    MARK
    1: l        LIST       (MARK at 0)
    2: p    PUT        0
    5: L    LONG       0
    9: a    APPEND
   10: L    LONG       1
   14: a    APPEND
   15: F    FLOAT      2.0
   20: a    APPEND
   21: c    GLOBAL     '__builtin__ complex'
   42: p    PUT        1
   45: (    MARK
   46: F        FLOAT      3.0
   51: F        FLOAT      0.0
   56: t        TUPLE      (MARK at 45)
   57: p    PUT        2
   60: R    REDUCE
   61: p    PUT        3
   64: a    APPEND
   65: L    LONG       1
   69: a    APPEND
   70: L    LONG       -1
   75: a    APPEND
   76: L    LONG       255
   82: a    APPEND
   83: L    LONG       -255
   90: a    APPEND
   91: L    LONG       -256
   98: a    APPEND
   99: L    LONG       65535
  107: a    APPEND
  108: L    LONG       -65535
  117: a    APPEND
  118: L    LONG       -65536
  127: a    APPEND
  128: L    LONG       2147483647
  141: a    APPEND
  142: L    LONG       -2147483647
  156: a    APPEND
  157: L    LONG       -2147483648
  171: a    APPEND
  172: (    MARK
  173: V        UNICODE    'abc'
  178: p        PUT        4
  181: g        GET        4
  184: c        GLOBAL     'copy_reg _reconstructor'
  209: p        PUT        5
  212: (        MARK
  213: c            GLOBAL     '__main__ C'
  225: p            PUT        6
  228: c            GLOBAL     '__builtin__ object'
  248: p            PUT        7
  251: N            NONE
  252: t            TUPLE      (MARK at 212)
  253: p        PUT        8
  256: R        REDUCE
  257: p        PUT        9
  260: (        MARK
  261: d            DICT       (MARK at 260)
  262: p        PUT        10
  266: V        UNICODE    'foo'
  271: p        PUT        11
  275: L        LONG       1
  279: s        SETITEM
  280: V        UNICODE    'bar'
  285: p        PUT        12
  289: L        LONG       2
  293: s        SETITEM
  294: b        BUILD
  295: g        GET        9
  298: t        TUPLE      (MARK at 172)
  299: p    PUT        13
  303: a    APPEND
  304: g    GET        13
  308: a    APPEND
  309: L    LONG       5
  313: a    APPEND
  314: .    STOP
highest protocol among opcodes = 0
s   ]q (K KG@       c__builtin__
complex
q(G@      G        tqRqKJKJJ MJ J  JJ  J   (X   abcqhccopy_reg
_reconstructor
q(c__main__
C
qc__builtin__
object
qNtqRq	}q
(X   fooqKX   barqKubh	tqhKe.a      0: ]    EMPTY_LIST
    1: q    BINPUT     0
    3: (    MARK
    4: K        BININT1    0
    6: K        BININT1    1
    8: G        BINFLOAT   2.0
   17: c        GLOBAL     '__builtin__ complex'
   38: q        BINPUT     1
   40: (        MARK
   41: G            BINFLOAT   3.0
   50: G            BINFLOAT   0.0
   59: t            TUPLE      (MARK at 40)
   60: q        BINPUT     2
   62: R        REDUCE
   63: q        BINPUT     3
   65: K        BININT1    1
   67: J        BININT     -1
   72: K        BININT1    255
   74: J        BININT     -255
   79: J        BININT     -256
   84: M        BININT2    65535
   87: J        BININT     -65535
   92: J        BININT     -65536
   97: J        BININT     2147483647
  102: J        BININT     -2147483647
  107: J        BININT     -2147483648
  112: (        MARK
  113: X            BINUNICODE 'abc'
  121: q            BINPUT     4
  123: h            BINGET     4
  125: c            GLOBAL     'copy_reg _reconstructor'
  150: q            BINPUT     5
  152: (            MARK
  153: c                GLOBAL     '__main__ C'
  165: q                BINPUT     6
  167: c                GLOBAL     '__builtin__ object'
  187: q                BINPUT     7
  189: N                NONE
  190: t                TUPLE      (MARK at 152)
  191: q            BINPUT     8
  193: R            REDUCE
  194: q            BINPUT     9
  196: }            EMPTY_DICT
  197: q            BINPUT     10
  199: (            MARK
  200: X                BINUNICODE 'foo'
  208: q                BINPUT     11
  210: K                BININT1    1
  212: X                BINUNICODE 'bar'
  220: q                BINPUT     12
  222: K                BININT1    2
  224: u                SETITEMS   (MARK at 199)
  225: b            BUILD
  226: h            BINGET     9
  228: t            TUPLE      (MARK at 112)
  229: q        BINPUT     13
  231: h        BINGET     13
  233: K        BININT1    5
  235: e        APPENDS    (MARK at 3)
  236: .    STOP
highest protocol among opcodes = 1
s   ]q (K KG@       c__builtin__
complex
qG@      G        qRqKJKJJ MJ J  JJ  J   (X   abcqhc__main__
C
q)q}q(X   fooqKX   barq	Kubhtq
h
Ke.u      0:  PROTO      2
    2: ]    EMPTY_LIST
    3: q    BINPUT     0
    5: (    MARK
    6: K        BININT1    0
    8: K        BININT1    1
   10: G        BINFLOAT   2.0
   19: c        GLOBAL     '__builtin__ complex'
   40: q        BINPUT     1
   42: G        BINFLOAT   3.0
   51: G        BINFLOAT   0.0
   60:      TUPLE2
   61: q        BINPUT     2
   63: R        REDUCE
   64: q        BINPUT     3
   66: K        BININT1    1
   68: J        BININT     -1
   73: K        BININT1    255
   75: J        BININT     -255
   80: J        BININT     -256
   85: M        BININT2    65535
   88: J        BININT     -65535
   93: J        BININT     -65536
   98: J        BININT     2147483647
  103: J        BININT     -2147483647
  108: J        BININT     -2147483648
  113: (        MARK
  114: X            BINUNICODE 'abc'
  122: q            BINPUT     4
  124: h            BINGET     4
  126: c            GLOBAL     '__main__ C'
  138: q            BINPUT     5
  140: )            EMPTY_TUPLE
  141:          NEWOBJ
  142: q            BINPUT     6
  144: }            EMPTY_DICT
  145: q            BINPUT     7
  147: (            MARK
  148: X                BINUNICODE 'foo'
  156: q                BINPUT     8
  158: K                BININT1    1
  160: X                BINUNICODE 'bar'
  168: q                BINPUT     9
  170: K                BININT1    2
  172: u                SETITEMS   (MARK at 147)
  173: b            BUILD
  174: h            BINGET     6
  176: t            TUPLE      (MARK at 113)
  177: q        BINPUT     10
  179: h        BINGET     10
  181: K        BININT1    5
  183: e        APPENDS    (MARK at 5)
  184: .    STOP
highest protocol among opcodes = 2
s   ]q (K KG@       cbuiltins
complex
qG@      G        qRqKJKJJ MJ J  JJ  J   (X   abcqhc__main__
C
q)q}q(X   barqKX   fooq	Kubhtq
h
Ke.u      0:  PROTO      3
    2: ]    EMPTY_LIST
    3: q    BINPUT     0
    5: (    MARK
    6: K        BININT1    0
    8: K        BININT1    1
   10: G        BINFLOAT   2.0
   19: c        GLOBAL     'builtins complex'
   37: q        BINPUT     1
   39: G        BINFLOAT   3.0
   48: G        BINFLOAT   0.0
   57:      TUPLE2
   58: q        BINPUT     2
   60: R        REDUCE
   61: q        BINPUT     3
   63: K        BININT1    1
   65: J        BININT     -1
   70: K        BININT1    255
   72: J        BININT     -255
   77: J        BININT     -256
   82: M        BININT2    65535
   85: J        BININT     -65535
   90: J        BININT     -65536
   95: J        BININT     2147483647
  100: J        BININT     -2147483647
  105: J        BININT     -2147483648
  110: (        MARK
  111: X            BINUNICODE 'abc'
  119: q            BINPUT     4
  121: h            BINGET     4
  123: c            GLOBAL     '__main__ C'
  135: q            BINPUT     5
  137: )            EMPTY_TUPLE
  138:          NEWOBJ
  139: q            BINPUT     6
  141: }            EMPTY_DICT
  142: q            BINPUT     7
  144: (            MARK
  145: X                BINUNICODE 'bar'
  153: q                BINPUT     8
  155: K                BININT1    2
  157: X                BINUNICODE 'foo'
  165: q                BINPUT     9
  167: K                BININT1    1
  169: u                SETITEMS   (MARK at 144)
  170: b            BUILD
  171: h            BINGET     6
  173: t            TUPLE      (MARK at 110)
  174: q        BINPUT     10
  176: h        BINGET     10
  178: K        BININT1    5
  180: e        APPENDS    (MARK at 5)
  181: .    STOP
highest protocol among opcodes = 2
s          ](K KG@       builtinscomplexG@      G        RKJKJJ MJ J  JJ  J   (abch__main__C)}(barKfooKubh
thKe.u      0:  PROTO      4
    2:  FRAME      168
   11: ]    EMPTY_LIST
   12:  MEMOIZE
   13: (    MARK
   14: K        BININT1    0
   16: K        BININT1    1
   18: G        BINFLOAT   2.0
   27:      SHORT_BINUNICODE 'builtins'
   37:      MEMOIZE
   38:      SHORT_BINUNICODE 'complex'
   47:      MEMOIZE
   48:      STACK_GLOBAL
   49:      MEMOIZE
   50: G        BINFLOAT   3.0
   59: G        BINFLOAT   0.0
   68:      TUPLE2
   69:      MEMOIZE
   70: R        REDUCE
   71:      MEMOIZE
   72: K        BININT1    1
   74: J        BININT     -1
   79: K        BININT1    255
   81: J        BININT     -255
   86: J        BININT     -256
   91: M        BININT2    65535
   94: J        BININT     -65535
   99: J        BININT     -65536
  104: J        BININT     2147483647
  109: J        BININT     -2147483647
  114: J        BININT     -2147483648
  119: (        MARK
  120:          SHORT_BINUNICODE 'abc'
  125:          MEMOIZE
  126: h            BINGET     6
  128:          SHORT_BINUNICODE '__main__'
  138:          MEMOIZE
  139:          SHORT_BINUNICODE 'C'
  142:          MEMOIZE
  143:          STACK_GLOBAL
  144:          MEMOIZE
  145: )            EMPTY_TUPLE
  146:          NEWOBJ
  147:          MEMOIZE
  148: }            EMPTY_DICT
  149:          MEMOIZE
  150: (            MARK
  151:              SHORT_BINUNICODE 'bar'
  156:              MEMOIZE
  157: K                BININT1    2
  159:              SHORT_BINUNICODE 'foo'
  164:              MEMOIZE
  165: K                BININT1    1
  167: u                SETITEMS   (MARK at 150)
  168: b            BUILD
  169: h            BINGET     10
  171: t            TUPLE      (MARK at 119)
  172:      MEMOIZE
  173: h        BINGET     14
  175: K        BININT1    5
  177: e        APPENDS    (MARK at 13)
  178: .    STOP
highest protocol among opcodes = 4
s%   c__builtin__
set
q ]q(KKeqRq.s%   c__builtin__
xrange
q K KKqRq.s   cCookie
SimpleCookie
q )qUkeyqcCookie
Morsel
q)q(UcommentqU qUdomainqhUsecureqhUexpiresq	hUmax-ageq
hUversionqhUpathqhUhttponlyqhu}q(Ucoded_valueqUvalueqhhhhubs}qb.s"   c__builtin__
set
q ]qKaqRq.s   cexceptions
?
q )Rq.sI   cexceptions
UnicodeEncodeError
q (UasciiqX   fooqK KUbadqtqRq.c                  C   s   t  } d| _d| _g d}d}d}d}|dd|| | d || | d || | d g dd| | f}|| || |d	 |S )
Nr      )r   r   g       @y      @             abcrg   )rD   foobarextendappend)cr!   Zuint1maxZuint2maxZint4maxyr   r   r   create_data&  s"    


r   c                   @   s  e Zd Ze Zd\ddZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zed$d% Zed&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zed2d3 Zed4d5 Zed6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%edBdC Z&dDdE Z'dFdG Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1e2dZd[ Z3dS )]AbstractUnpickleTestsNc                 C   s   |d u rd ||}| j|||d | jt|t||d t|drn| j|j|j|d | j|j|j|d t|dr| j|j	|j	|d |j	D ]@}| jt||t|||d | jt
||d t
||d |d qd S )Nz{!r} is not a copy of {!r})msgrE   	__slots__)rq   assertEqualassertIsr^   hasattrZassertDictEqualrE   assertIsNotZassertListEqualr   getattr)r&   rv   Zobjcopyr   Zslotr   r   r   assert_is_copy@  s     


z$AbstractUnpickleTests.assert_is_copyc                 C   s   | j |d | |f z| | W nF tyn } z.tjdkrXtd||jj|f   W Y d }~n
d }~0 0 W d    n1 s0    Y  W d    n1 s0    Y  d S )N)datar   z%-32r - %s: %s)	subTestassertRaisesloadsBaseExceptionr   verboseprintrr   r0   )r&   errorsr   excr   r   r   check_unpickling_errorR  s    
z,AbstractUnpickleTests.check_unpickling_errorc                 C   s   |  | j| t d S r   )r   	_testdatar   DATA0r)   r   r   r   test_load_from_data0]  s    z*AbstractUnpickleTests.test_load_from_data0c                 C   s   |  | j| t d S r   )r   r   r   DATA1r)   r   r   r   test_load_from_data1`  s    z*AbstractUnpickleTests.test_load_from_data1c                 C   s   |  | j| t d S r   )r   r   r   DATA2r)   r   r   r   test_load_from_data2c  s    z*AbstractUnpickleTests.test_load_from_data2c                 C   s   |  | j| t d S r   )r   r   r   DATA3r)   r   r   r   test_load_from_data3f  s    z*AbstractUnpickleTests.test_load_from_data3c                 C   s   |  | j| t d S r   )r   r   r   DATA4r)   r   r   r   test_load_from_data4i  s    z*AbstractUnpickleTests.test_load_from_data4c                 C   s   t dftdftdffD ]z\}}|jd}dd|}| || | | dd|}| || | | dd|}| || | | qd S )Nr   r    asciis   (i__main__
X
p0
(dp1
b.   Xs   (c__main__
X
q oq}qb.s   (c__main__
X
q oq}qb.)rD   rI   rK   r0   encodereplacer   r   )r&   Xr'   ZxnameZpickle0Zpickle1Zpickle2r   r   r   test_load_classic_instancel  s    z0AbstractUnpickleTests.test_load_classic_instancec                 C   sV   d}dt |d d }| |}| || dt |d d }| t| d S )Nl       Ir      
.s   JUNK
.)rV   r   r   r   r   
ValueError)r&   Zmaxint64r   gotr   r   r   test_maxint64  s    
z#AbstractUnpickleTests.test_maxint64c                 C   sX  |  t}| |tddg |  t}| t|ttd | t|ttd |  t}| t|t	 | t|
 dg | |d jd tD ]2}td|jd}|  |}| t|| q|  tdd	}| t|t |  t}| t|t | |jd
 | |jd | |jd | |jd | |jd d S )Nr   r   r   rg   keyrQ      ?r      StandardErrorr   Zbad)r   DATA_SETr   setDATA_XRANGEr^   ranger   DATA_COOKIEr   keysrQ   python2_exceptions_without_argsexception_pickler   r0   r   r   	Exception
DATA_UEERRUnicodeEncodeErrorobjectencodingstartendreason)r&   loadedr   r   r   r   r   test_unpickle_from_2x  s,    




z+AbstractUnpickleTests.test_unpickle_from_2xc                 C   sF   |  | jdddd |  | jdddd |  | jdddd d S )Ns   S'a\x00\xa0'
.rk   r   s   a s   Ua .s   Ua .r   r   r)   r   r   r   test_load_python2_str_as_bytes  s    


z4AbstractUnpickleTests.test_load_python2_str_as_bytesc                 C   sF   |  | jdddd |  | jdddd |  | jdddd d S )Ns	   V\u03c0
.rk   r   u   πs   X   π.s
   X   π.r   r)   r   r   r    test_load_python2_unicode_as_str  s    


z6AbstractUnpickleTests.test_load_python2_unicode_as_strc                 C   s2   |  | jtjtdd d tj ddd d S )N<Ii,  s,  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrk   r   )r   r   r   	BINSTRINGstructpackSTOPr)   r   r   r   #test_load_long_python2_str_as_bytes  s    
z9AbstractUnpickleTests.test_load_long_python2_str_as_bytesc                 C   s\   |  | d | | dd | | dd | | dd | | dd d S )Ns   N.s   .Ts   .Fs   I01
.s   I00
.)assertIsNoner   r   r)   r   r   r   test_constants  s
    z$AbstractUnpickleTests.test_constantsc                 C   s   | j ddd}| |d d S )Ns   U q .zkoi8-rr    )r   r   )r&   emptyr   r   r   test_empty_bytestring  s    z+AbstractUnpickleTests.test_empty_bytestringc                 C   s   d}|  | |d d S )Ns	   C€ .   € r   r&   dumpedr   r   r   test_short_binbytes  s    z)AbstractUnpickleTests.test_short_binbytesc                 C   s   d}|  | |d d S )Ns   B   € .r   r   r   r   r   r   test_binbytes  s    z#AbstractUnpickleTests.test_binbytesc                 C   s   d}|  tjtf| d S )Ns   Bxyzq .r   r   UnpicklingErrorOverflowErrorr   r   r   r   test_negative_32b_binbytes  s    z0AbstractUnpickleTests.test_negative_32b_binbytesc                 C   s   d}|  tjtf| d S )Ns   Xxyzq .r   r   r   r   r   test_negative_32b_binunicode  s    z2AbstractUnpickleTests.test_negative_32b_binunicodec                 C   s   d}|  | |d d S )Ns	   € .   € r   r   r   r   r   test_short_binunicode  s    z+AbstractUnpickleTests.test_short_binunicodec                 C   sD   |  tjd |  tjd |  tjd | ddg| d d S )Ns   g0
p0s   jens:s   hens:)d   s   ((Kdtp0
h l.)))r   r   r   r   r   r)   r   r   r   test_misc_get  s    
z#AbstractUnpickleTests.test_misc_getc                 C   s   d}|  | |d d S )Ns          € .r   r   r   r   r   r   test_binbytes8  s    z$AbstractUnpickleTests.test_binbytes8c                 C   s   d}|  | |d d S )Ns          € .r   r   r   r   r   r   test_binunicode8  s    z&AbstractUnpickleTests.test_binunicode8c                 C   s   d}|  | |td d S )Ns          xxx.s   xxx)r   r   	bytearrayr   r   r   r   test_bytearray8  s    z%AbstractUnpickleTests.test_bytearray8c                 C   s   d}|  tjtf| d S )Ns         € .r   r   r   r   r   test_large_32b_binbytes8#  s    z.AbstractUnpickleTests.test_large_32b_binbytes8c                 C   s   d}|  tjtf| d S )Ns         € .r   r   r   r   r   test_large_32b_bytearray8)  s    z/AbstractUnpickleTests.test_large_32b_bytearray8c                 C   s   d}|  tjtf| d S )Ns         € .r   r   r   r   r   test_large_32b_binunicode8/  s    z0AbstractUnpickleTests.test_large_32b_binunicode8c                 C   s8   d}|  |}| |g fd  | |d |d  d S )Ns   ((lp100000
g100000
t.r   r   r   r   r   r   r&   pickled	unpickledr   r   r   test_get5  s    
zAbstractUnpickleTests.test_getc                 C   s8   d}|  |}| |g fd  | |d |d  d S )Ns   (]qht.r   r   r   r	  r
  r   r   r   test_binget;  s    
z!AbstractUnpickleTests.test_bingetc                 C   s8   d}|  |}| |g fd  | |d |d  d S )Ns   (]r   j   t.r   r   r   r	  r
  r   r   r   test_long_bingetA  s    
z&AbstractUnpickleTests.test_long_bingetc                 C   s8   d}|  |}| |g fd  | |d |d  d S )Ns   ((l2t.r   r   r   r	  r
  r   r   r   test_dupG  s    
zAbstractUnpickleTests.test_dupc                 C   s   d}|  t| d S )Ns   Va
p-1
.r   r   r   r   r   r   test_negative_putM  s    z'AbstractUnpickleTests.test_negative_putc                 C   s   d}|  t| d S )Ns   X   ar.r  r   r   r   r   test_negative_32b_binputR  s    z.AbstractUnpickleTests.test_negative_32b_binputc                 C   s   |  td d S )Ns   S'\'
.r  r)   r   r   r   test_badly_escaped_stringX  s    z/AbstractUnpickleTests.test_badly_escaped_stringc                 C   s$   g d}|D ]}|  tj| qd S )N)s   S'
.s   S"
.s   S' 
.s   S" 
.s   S'"
.s   S"'
.s   S' ' 
.s   S" " 
.s   S ''
.s   S ""
.s   S 
.s   S
.s   S.)r   r   r   r&   Z
badpicklespr   r   r   test_badly_quoted_string[  s    z.AbstractUnpickleTests.test_badly_quoted_stringc                 C   s,   g d}|D ]\}}|  | || qd S )N))s   S''
.r   )s   S""
.r   )s   S"\n"
.
)s   S'\n'
.r  r   )r&   Zgoodpicklesr  expectedr   r   r   test_correctly_quoted_stringm  s    z2AbstractUnpickleTests.test_correctly_quoted_stringc                 C   s   d}|  | |d d S )Ns          I42
.*   r   )r&   r  r   r   r   test_frame_readlineu  s    z)AbstractUnpickleTests.test_frame_readlinec                 C   s   d}|  |}| t|t | |tdd | t|g d d}| |  |tj d}| |  |tj	 dD ]:}d| d	 }|  |}| t|t
 | t|d
 qxdD ]B}d| d }|  |}| t|tj | |tddi qd S )Ns   c__builtin__
xrange
KKKR.r      )r   r         rg      s   c__builtin__
reduce
.s   cwhichdb
whichdb
.)s	   Exceptionr   s   cexceptions
s	   
UughR.Zugh)s   UserDicts   IterableUserDicts   (cUserDict
s   
o}Udata}KKssb.r   )r   r   r^   r   r   r   	functoolsreducedbmwhichdbr   rV   collectionsUserDict)r&   r  r  rb   r   r   r   test_compat_unpickle}  s*    


z*AbstractUnpickleTests.test_compat_unpicklec                 C   s.   |  | dd | td | td d S )Ns   cbuiltins
int
)R.r   s   N)R.s   cbuiltins
int
NR.)r   r   r   	TypeErrorr)   r   r   r   test_bad_reduce  s    z%AbstractUnpickleTests.test_bad_reducec                 C   s8   t jtf}| | dd | |d | |d d S )Ns   cbuiltins
int
).r   s   cbuiltins
len
).s   cbuiltins
int
N.r   r   r(  r   r   r   r&   errorr   r   r   test_bad_newobj  s    
z%AbstractUnpickleTests.test_bad_newobjc                 C   sD   t jtf}| | dd | |d | |d | |d d S )Ns   cbuiltins
int
)}.r   s   cbuiltins
len
)}.s   cbuiltins
int
N}.s   cbuiltins
int
)N.r*  r+  r   r   r   test_bad_newobj_ex  s
    
z(AbstractUnpickleTests.test_bad_newobj_exc                 C   s$   g d}|D ]}|  | j| qd S )N),   .   0   1   2s   (2   Rs   )R   as   Na   bs   Nb   d   es   (es   ibuiltins
list
   l   os   (os   p1
s   q s   r       ss   Nss   NNs   t   us   (us   }(Nu   s   )      s   N   s   Ns   NN   s   (      s   )}   s   Vlist
   r   Zbad_stack_errorsr  r   r   r   test_bad_stack  s    .z$AbstractUnpickleTests.test_bad_stackc                 C   s$   g d}|D ]}|  | j| qd S )N)s   N(.s   N(2s   cbuiltins
list
)(Rs   cbuiltins
list
()Rs   ]N(as   cbuiltins
ValueError
)R}(bs   cbuiltins
ValueError
)R(}bs   (Nds   N(p1
s   N(q s   N(r    s   }NN(ss   }N(Nss   }(NNss   }((us   cbuiltins
list
)(s   cbuiltins
list
()s   N(s   NN(s   N(Ns   NNN(s   NN(Ns   N(NNs   ]((s   cbuiltins
list
)}(s   cbuiltins
list
)(}s   cbuiltins
list
()}s   Vbuiltins
(Vlist
s   Vbuiltins
Vlist
(s   N(rF  r  r   r   r   test_bad_mark  s    #z#AbstractUnpickleTests.test_bad_markc                 C   s<   |  td |  td g d}|D ]}|  | j| q$d S )N       N)U   Bs   B  s   B   s   B   ab   Cs   Cs   Cab   Fs   F0.0s   F0.00   Gs   G       r   s   I0   Js   J      K   Ls   L0s   L10s   L0Ls   L10L   Ms   M    Ss   S'abc'   Ts   T  s   T   s   T   ab   Us   Us   Uab   Vs   Vabcr   s   X  s   X   s   X   abs   (cs
   (cbuiltinss   (cbuiltins
s   (cbuiltins
lists   Ngs   Ng0s   (is
   (ibuiltinss   (ibuiltins
s   (ibuiltins
lists   Nhs   Njs   Nj   s   Nps   Np0s   Nqs   Nrs   Nr            s      s           s         s   s   ab   s         s	          s          ab   s         s	          s          ab   s         s	          s          ab   s         s	          s
          N)r   EOFErrorZtruncated_errorsr  r   r   r   test_truncated_data  s
    Yz)AbstractUnpickleTests.test_truncated_datac           	         s  t d}t d}tt | tjt tj	dt | tjj
t ttjtdd }||d W d    n1 s0    Y  ttjtdd }||d W d    n1 s0    Y  | td | td	 dd l}d
g td  fdd}tj|d}tj|d}|  |     |j  |  |  ddlm} | dd D |gd  d S )NzI
        import threading
        barrier = threading.Barrier(2)
        zs
        import locker
        locker.barrier.wait()
        class ToBeUnpickled(object):
            pass
        r   z	locker.pywbutf-8zlocking_import.pylockerlocking_imports'   clocking_import
ToBeUnpickled
q )q.r  c                      s       t d S r   )waitr   r   r   r   barrierZpickle_bytesresultsr   r   t  s    z:AbstractUnpickleTests.test_unpickle_module_race.<locals>.t)target)ToBeUnpickledc                 S   s   g | ]}t |qS r   )r^   .0r!   r   r   r   
<listcomp>  rI  zCAbstractUnpickleTests.test_unpickle_module_race.<locals>.<listcomp>r   )r   osmkdirr   Z
addCleanupshutilrmtreesyspathinsertremoveopenjoinr8   r   r   rf  	threadingBarrierThreadr   rh  rj  rg  rn  r   )	r&   Zlocker_moduleZlocking_import_modulefrf  rl  t1t2rn  r   ri  r   test_unpickle_module_raceb  s>    
..

z/AbstractUnpickleTests.test_unpickle_module_race)N)4r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_32br   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r)  r-  r.  rG  rH  rc  r   r  r   r   r   r   r   ;  sj   
9






2'_r   c                   @   s  e Zd ZdZejZdd ZejZdd Zdd Z	dd	 Z
ed
fddZdd Zdd Zdd Zed
fddZdd Zdd Zdd Zed
fddZdd Zdd  Zd!d" Zed
fd#d$Zd%d& Zd'd( Zd)d* Zed
fd+d,Zd-d. Zd/d0 Zd1d2 Zed
fd3d4Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9dgdh Z:e;didjdkdldm Z<dndo Z=dpdq Z>drds Z?dtdu Z@dvdw ZAdxdy ZBdzd{ ZCd|d} ZDd~d ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_e`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd ZgddÄ Zhddń ZiddǄ ZjdZkdZldd˄ Zmenjodd̈́ Zpddτ Zqddф Zrenjoddӄ ZsddՄ Ztddׄ Zuddل Zvddۄ Zwdd݄ Zxdd߄ Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zeedu ddd ZdS )AbstractPickleTestsFc                 C   s   d S r   r   r)   r   r   r   setUp  s    zAbstractPickleTests.setUpc                 C   s   t D ]}td}| ||}| |}| || d}| ||}| |}| || td|}| ||}| |}| || qd S )Nr  )r   r   r   )	protocolsrT   dumpsr   r   rW   r&   protor!   sr   r   r   r   	test_misc  s    



zAbstractPickleTests.test_miscc                 C   s6   | j }tD ]&}| ||}| |}| || q
d S r   )r   r  r  r   r   )r&   r  r  r  r   r   r   r   test_roundtrip_equality  s
    
z+AbstractPickleTests.test_roundtrip_equalityc                 C   sj   ddl m} ddlm} dtfdtffD ]<\}}| | j|}| }|||d | }| 	|| q(d S )Nr   )StringIOdisr   )out)
r,   r  r   r  	DATA0_DIS	DATA1_DISr  r   r5   r   )r&   r  r  r  r  r  Zfileliker   r   r   r   dont_test_disassembly  s    z)AbstractPickleTests.dont_test_disassemblyr   c           	      C   st   | }| | t|tjd D ]N}| ||}| |}| || ||}| t|d | 	|d | q d S Nr   r   )
r   r   r   HIGHEST_PROTOCOLr  r   assertIsInstancer   lenr   )	r&   rx   aslistminprotocollr  r  r!   r   r   r   r   _test_recursive_list  s    

z(AbstractPickleTests._test_recursive_listc                 C   s   |  t d S r   )r  r   r)   r   r   r   test_recursive_list  s    z'AbstractPickleTests.test_recursive_listc                 C   s   | j tdd d S Nr   )r  )r  MyListr)   r   r   r   test_recursive_list_subclass  s    z0AbstractPickleTests.test_recursive_list_subclassc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   r   r    r   r   r   <lambda>  rI  z>AbstractPickleTests.test_recursive_list_like.<locals>.<lambda>r  )r  REX_sixr)   r   r   r   test_recursive_list_like  s    z,AbstractPickleTests.test_recursive_list_likec           	      C   s,  | f}|d  | t|tjd D ]r}| ||}| |}| |t | t	|d | |d | ||d }| t	|d | 
|d | q&|\}t|tjd D ]v}| ||}| |}| || ||}| t	|d | |d t | t	|d d | 
|d d | qd S r<   )r   r   r   r  r  r   r  tupler   r  r   )	r&   rx   r  r  rl  r  r  r!   r   r   r   r   _test_recursive_tuple_and_list  s*    

z2AbstractPickleTests._test_recursive_tuple_and_listc                 C   s   |  t d S r   )r  r   r)   r   r   r   test_recursive_tuple_and_list  s    z1AbstractPickleTests.test_recursive_tuple_and_listc                 C   s   | j tdd d S r  )r  r  r)   r   r   r   &test_recursive_tuple_and_list_subclass
  s    z:AbstractPickleTests.test_recursive_tuple_and_list_subclassc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   r  r    r   r   r   r    rI  zHAbstractPickleTests.test_recursive_tuple_and_list_like.<locals>.<lambda>r  )r  r  r)   r   r   r   "test_recursive_tuple_and_list_like  s    z6AbstractPickleTests.test_recursive_tuple_and_list_likec           	      C   sx   | }||d< t |tjd D ]T}| ||}| |}| || ||}| t| dg | 	|d | qd S Nr   )
r   r   r  r  r   r  r   r   r   r   	r&   rx   asdictr  dr  r  r!   r   r   r   r   _test_recursive_dict  s    
z(AbstractPickleTests._test_recursive_dictc                 C   s   |  t d S r   )r  ra   r)   r   r   r   test_recursive_dict  s    z'AbstractPickleTests.test_recursive_dictc                 C   s   | j tdd d S r  )r  MyDictr)   r   r   r   test_recursive_dict_subclass  s    z0AbstractPickleTests.test_recursive_dict_subclassc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   tabler    r   r   r   r  #  rI  z>AbstractPickleTests.test_recursive_dict_like.<locals>.<lambda>r  )r  	REX_sevenr)   r   r   r   test_recursive_dict_like"  s    z,AbstractPickleTests.test_recursive_dict_likec           	      C   s.  | f}||d d< t |tjd D ]t}| ||}| |}| |t | t|d | |d | ||d }| t	|dg | 
|d | q$|\}t |tjd D ]x}| ||}| |}| || ||}| t	|dg | |d t | t|d d | 
|d d | qd S r<   )r   r   r  r  r   r  r  r   r  r   r   	r&   rx   r  r  rl  r  r  r!   r   r   r   r   _test_recursive_tuple_and_dict%  s*    

z2AbstractPickleTests._test_recursive_tuple_and_dictc                 C   s   |  t d S r   )r  ra   r)   r   r   r   test_recursive_tuple_and_dict?  s    z1AbstractPickleTests.test_recursive_tuple_and_dictc                 C   s   | j tdd d S r  )r  r  r)   r   r   r   &test_recursive_tuple_and_dict_subclassB  s    z:AbstractPickleTests.test_recursive_tuple_and_dict_subclassc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   r  r    r   r   r   r  F  rI  zHAbstractPickleTests.test_recursive_tuple_and_dict_like.<locals>.<lambda>r  )r  r  r)   r   r   r   "test_recursive_tuple_and_dict_likeE  s    z6AbstractPickleTests.test_recursive_tuple_and_dict_likec           	      C   s   | }d|t |< t|tjd D ]t}| ||}| |}| || ||}| t|	 d | t
|	 d t  | t
|	 d j| q"d S r  )rP   r   r   r  r  r   r  r   r  r   r   r   rQ   r  r   r   r   _test_recursive_dict_keyH  s    
z,AbstractPickleTests._test_recursive_dict_keyc                 C   s   |  t d S r   )r  ra   r)   r   r   r   test_recursive_dict_keyV  s    z+AbstractPickleTests.test_recursive_dict_keyc                 C   s   | j tdd d S r  )r  r  r)   r   r   r    test_recursive_dict_subclass_keyY  s    z4AbstractPickleTests.test_recursive_dict_subclass_keyc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   r  r    r   r   r   r  ]  rI  zBAbstractPickleTests.test_recursive_dict_like_key.<locals>.<lambda>r  )r  r  r)   r   r   r   test_recursive_dict_like_key\  s    z0AbstractPickleTests.test_recursive_dict_like_keyc           	      C   sN  | f}d|d t |< t|tjd D ]}| ||}| |}| |t | t	|d | |d | ||d }| t	|d | t
| d t  | t
| d j| q(|\}t|tjd D ]t}| ||}| |}| || ||}| t	|d | t
| d t  | t
| d jd | qd S r  )rP   r   r   r  r  r   r  r  r   r  r   r   r   rQ   r  r   r   r   "_test_recursive_tuple_and_dict_key_  s*    

z6AbstractPickleTests._test_recursive_tuple_and_dict_keyc                 C   s   |  t d S r   )r  ra   r)   r   r   r   !test_recursive_tuple_and_dict_key{  s    z5AbstractPickleTests.test_recursive_tuple_and_dict_keyc                 C   s   | j tdd d S r  )r  r  r)   r   r   r   *test_recursive_tuple_and_dict_subclass_key~  s    z>AbstractPickleTests.test_recursive_tuple_and_dict_subclass_keyc                 C   s   | j tdd d d S )Nc                 S   s   | j S r   r  r    r   r   r   r    rI  zLAbstractPickleTests.test_recursive_tuple_and_dict_like_key.<locals>.<lambda>r  )r  r  r)   r   r   r   &test_recursive_tuple_and_dict_like_key  s    z:AbstractPickleTests.test_recursive_tuple_and_dict_like_keyc                 C   s   t  }|t| tdtjd D ]`}| ||}| |}| |t  | 	t
|d | t|d t | t|d j| q$|\}tdtjd D ]\}| ||}| |}| |t | |jt  | 	t
|jd | t|jd | qd S )Nr  r   r   )r   addrP   r   r   r  r  r   r  r   r  r   r   rQ   r&   r   r  r  r!   r   r   r   test_recursive_set  s"    

z&AbstractPickleTests.test_recursive_setc                 C   s^   t  }||_tD ]H}| ||}| |}| |t  | t|t| | |j| qd S r   )	rN   attrr  r  r   r  r   dirr   )r&   ir  r  r!   r   r   r   test_recursive_inst  s    
z'AbstractPickleTests.test_recursive_instc                 C   s   g }d|i}t  }||_|| tD ]}| ||}| |}| |t | t	|d | t
|d t
| | t|d j dg | |d jd | q&d S r  )rN   r  r   r  r  r   r  r   r   r  r  r   r   )r&   r  r  r  r  r  r!   r   r   r   test_recursive_multi  s    

z(AbstractPickleTests.test_recursive_multic                 C   s   t  }||g|_t|j}tD ]f}| ||}| |}| |j| | t|jd | t	|jd t  | 
t	|jd | q |j}tD ]`}| ||}| |}| || | t|d | t	|d t  | 
t	|d j| qd S r  )rN   r  r^   r  r  r   r  r   r  r   r   )r&   factoryorl  r  r  r!   r   r   r   #_test_recursive_collection_and_inst  s$    


z7AbstractPickleTests._test_recursive_collection_and_instc                 C   s   |  t d S r   )r  r   r)   r   r   r   test_recursive_list_and_inst  s    z0AbstractPickleTests.test_recursive_list_and_instc                 C   s   |  t d S r   )r  r  r)   r   r   r   test_recursive_tuple_and_inst  s    z1AbstractPickleTests.test_recursive_tuple_and_instc                 C   s   |  tj d S r   )r  ra   fromkeysr)   r   r   r   test_recursive_dict_and_inst  s    z0AbstractPickleTests.test_recursive_dict_and_instc                 C   s   |  t d S r   )r  r   r)   r   r   r   test_recursive_set_and_inst  s    z/AbstractPickleTests.test_recursive_set_and_instc                 C   s   |  t d S r   )r  	frozensetr)   r   r   r   !test_recursive_frozenset_and_inst  s    z5AbstractPickleTests.test_recursive_frozenset_and_instc                 C   s   |  t d S r   )r  r  r)   r   r   r   %test_recursive_list_subclass_and_inst  s    z9AbstractPickleTests.test_recursive_list_subclass_and_instc                 C   s   |  t d S r   )r  MyTupler)   r   r   r   &test_recursive_tuple_subclass_and_inst  s    z:AbstractPickleTests.test_recursive_tuple_subclass_and_instc                 C   s   |  tj d S r   )r  r  r  r)   r   r   r   %test_recursive_dict_subclass_and_inst  s    z9AbstractPickleTests.test_recursive_dict_subclass_and_instc                 C   s   |  t d S r   )r  MySetr)   r   r   r   $test_recursive_set_subclass_and_inst  s    z8AbstractPickleTests.test_recursive_set_subclass_and_instc                 C   s   |  t d S r   )r  MyFrozenSetr)   r   r   r   *test_recursive_frozenset_subclass_and_inst  s    z>AbstractPickleTests.test_recursive_frozenset_subclass_and_instc                 C   sJ   t  }||_tD ]4}| ||}| |}| |t  | |j| qd S r   )	REX_statestater  r  r   r  r   r  r   r   r   test_recursive_inst_state  s    
z-AbstractPickleTests.test_recursive_inst_statec                 C   s   t  f}||d _tD ]X}| ||}| |}| |t | t|d | |d t  | 	|d j| q|\}tD ]X}| ||}| |}| |t  | |jt | t|jd | 	|jd | qzd S r<   )
r  r  r  r  r   r  r  r   r  r   )r&   rl  r  r  r!   r   r   r   #test_recursive_tuple_and_inst_state  s"    


z7AbstractPickleTests.test_recursive_tuple_and_inst_statec                 C   sB   g d}t D ]0}|D ]&}| ||}| |}| || qqd S )N)r   z<\u>u   <\ሴ>z<
>z<\>u   <\𒍅>u   <>r  r  r   r   )r&   Zendcasesr  ur  u2r   r   r   test_unicode  s    
z AbstractPickleTests.test_unicodec                 C   s4   d}t D ]&}| ||}| |}| || qd S )Nu   𒍅r  )r&   rl  r  r  r  r   r   r   test_unicode_high_plane  s
    
z+AbstractPickleTests.test_unicode_high_planec                 C   s   t D ]}dD ]"}| ||}| || | qdd tdD D ]"}| ||}| || | qBdd tdD D ]"}| ||}| || | qxqd S )NrI     xyzs,  xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzc                 S   s   g | ]}t |gqS r   rk   rp  r  r   r   r   rq  "  rI  z2AbstractPickleTests.test_bytes.<locals>.<listcomp>   c                 S   s   g | ]}t ||gqS r   r  r  r   r   r   rq  %  rI  )r  r  r   r   r   )r&   r  r  r  r   r   r   
test_bytes  s    zAbstractPickleTests.test_bytesc                 C   s   t D ]}dD ]}t|}| ||}| |}| || | || |dkrn| d| | tt	j
| q|dkr| d| | tt	j| q|dkr| d| | tt	j| qqd S )Nr  r  s	   bytearrayr  rg   )r  r  r  r   r   r   assertIn
assertTruer   r   GLOBALSTACK_GLOBALassertNotIn
BYTEARRAY8)r&   r  r  rZ   r  Zbbr   r   r   test_bytearray)  s     
z"AbstractPickleTests.test_bytearrayc                 C   sT   t D ]J}tj}|r| |fD ]&}| ||}| |}| || q|d? }qqd S r  )r  rv  maxsizer  r   r   )r&   r  r   r  r  Zn2r   r   r   	test_ints<  s    
zAbstractPickleTests.test_intsc           	      C   s   t D ]`}dD ]V}d|> }|d ||d fD ]6}|| fD ]&}| ||}| |}| || q8q*qqtdd}||d> 7 }|| fD ]6}| |d}| |}| t|t | || qd S )N)r      i  i     i  r   Zdeadbeeffeedface   i@B r   )r  r  r   r   intr   r^   r   )	r&   r  ZnbitsZnbaseZnposr   r   r   r  r   r   r   	test_longF  s    


zAbstractPickleTests.test_longc                 C   sT   g d}|dd |D  }t D ]0}|D ]&}| ||}| |}| || q&qd S )N)g        g       g+ph  gZ*) g_D9g?g      ?gQ	@gm"wp@gWTDgꌠ9Y>)Fc                 S   s   g | ]
}| qS r   r   ro  r   r   r   rq  `  rI  z2AbstractPickleTests.test_float.<locals>.<listcomp>r  )r&   Ztest_valuesr  rQ   r   r   r   r   r   
test_float]  s    
zAbstractPickleTests.test_floatLC_ALLde_DEfr_FRc                 C   s    |  | dddd d d S )Ng333333?r   r  s   F1.)r   r  r)   r   r   r   test_float_formatg  s    z%AbstractPickleTests.test_float_formatc                 C   s6   t D ],}t }| ||}| |}| |t qd S r   )r  AAAr  r   r   REDUCE_Ar&   r  instr   r   r   r   r   test_reducel  s
    
zAbstractPickleTests.test_reducec                 C   s:   t D ]0}tdd}| ||}| |}| || qd S )Nr   r   )r  rW   r  r   r   r  r   r   r   test_getinitargss  s
    

z$AbstractPickleTests.test_getinitargsc                 C   s:   t  }tD ]*}| ||}| |}| |j|j q
d S r   )r\   r  r  r   r   rr   r&   rY   r  r  rZ   r   r   r   test_metaclassz  s
    
z"AbstractPickleTests.test_metaclassc                 C   s^   t dtf}tttj tD ]:}| ||}| |}| 	|| | 
t|t| qd S )NZmy_dynamic_class)r`   r   r=   r   r]   rR   r  r  r   r   r   r^   r  r   r   r   test_dynamic_class  s    
z&AbstractPickleTests.test_dynamic_classc                 C   s   dd l }dd l}| }tD ]}| ||}| |}| || ||j}| ||}| |}| || t	|dr|
|j}| ||}| |}| || qd S )Nr   statvfs)timerr  	localtimer  r  r   r   statcurdirr   r	  )r&   r
  rr  rl  r  r  r  r   r   r   test_structseq  s     



z"AbstractPickleTests.test_structseqc                 C   s0   t D ]&}| d|}| |}| d| qd S N.)r  r  r   r   r&   r  r  r  r   r   r   test_ellipsis  s    
z!AbstractPickleTests.test_ellipsisc                 C   s0   t D ]&}| t|}| |}| t| qd S r   )r  r  r   r   r   r  r   r   r   test_notimplemented  s    
z'AbstractPickleTests.test_notimplementedc                 C   sL   d dt g}|D ]8}tD ].}| t||}| |}| t|| qqd S r  )r   r  r  r^   r   r   )r&   Z
singletonsZ	singletonr  r  r  r   r   r   test_singleton_types  s    

z(AbstractPickleTests.test_singleton_typesc              
   C   s   t D ]N}| d |}|dkr>tjt|g }| || q| ttj|d qt d d }tj	tj
 }tjt|g | }z| | W n4 ty } z| dt| W Y d }~nd }~0 0 | d d S )Nr   r   r   r   zunsupported pickle protocolz0expected bad protocol number to raise ValueError)r  r  r   PROTOrk   r  
startswithr   r   NONEr   r   r   r  rV   Zfail)r&   r  r  Zproto_headerZoobZ
build_noneZ	badpickleerrr   r   r   
test_proto  s    &zAbstractPickleTests.test_protoc                 C   sL   d}t D ]>}| ||}| |}| || | ttj||dk qd S )N   UJ^w,3|	 r   )r  r  r   r   r   r   r   LONG1r&   r!   r  r  r   r   r   r   
test_long1  s    
zAbstractPickleTests.test_long1c                 C   sP   dd> }t D ]>}| ||}| |}| || | ttj||dk qd S )Nr  r  r   )r  r  r   r   r   r   r   LONG4r  r   r   r   
test_long4  s    
zAbstractPickleTests.test_long4c                 C   s   t jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jd}d}d}d}d}d}tD ]`}|||||fD ]L}| ||}	| |	}
| 	||
 |t
|dt|f }| t||	 qqnd S )N))r   r   )r   r   )r   r   )r   r  )r   r  )r   r   )r   r   r   r   )r   r  r   r  )r   r   r   r   )r   r   )r   r  )r   r  )r  r   )r  r   )r  r   )r  r  r  r  r   )r   r  r   r   r  )r   r   r  r  r  )r   TUPLEEMPTY_TUPLETUPLE1TUPLE2TUPLE3r  r  r   r   minr  r  r   )r&   expected_opcoderY   rZ   r   r  er  r!   r  r   r  r   r   r   test_short_tuples  sB    
z%AbstractPickleTests.test_short_tuplesc                 C   s   t jt jt jt jt jt jt jt jt jt jt jt jd}tD ]^}dD ]T}| ||}| |}| ||u ||||f |t	|d|f }| t
|| qBq:d S )N))r   N)r   N)r   N)r  N)r   T)r   T)r   T)r  T)r   F)r   F)r   F)r  F)NFTr  )r   r  INTNEWTRUENEWFALSEr  r  r   r  r)  r   )r&   r*  r  r!   r  r   r  r   r   r   test_singletons  s(    
z#AbstractPickleTests.test_singletonsc                 C   sH   t g d}d|_d|_tD ]&}| ||}| |}| || qd S Nr#  r  hello)r  r   r   r  r  r   r   r  r   r   r   test_newobj_tuple  s    
z%AbstractPickleTests.test_newobj_tuplec                 C   sH   t g d}d|_d|_tD ]&}| ||}| |}| || qd S r1  )r  r   r   r  r  r   r   r  r   r   r   test_newobj_list   s    
z$AbstractPickleTests.test_newobj_listc              	   C   s   t D ]}tD ]x}|j}||j}d|_| ||}| |}|||||t|f}| || | 	||||| | 	|j
|j
| qqd S Nr  )r  	myclasses__base__sampler   r  r   r^   r   r   rE   )r&   r  rD   Br!   r  r   detailr   r   r   test_newobj_generic)  s    

z'AbstractPickleTests.test_newobj_genericc              	   C   s   t d d  }ttfD ]}|| qtD ]}|D ]}|j}||j}d|_t	|}| 
||}| |}	| t|	t| |||||	t|	f}
| ||||	|
 | |j|	j|
 q0q(d S r5  )r6  MyIntr  ry  r  r7  r8  r   weakrefproxyr  r   r   r^   rE   )r&   classesr   r  rD   r9  r!   r  r  r   r:  r   r   r   test_newobj_proxies6  s    


z'AbstractPickleTests.test_newobj_proxiesc                 C   s`   t D ]V}td}d|_| ||}| |}| t|t | t|d | |jd qd S )Nr   r  )	r  MyIntWithNew2r   r  r   r   r^   r   r  r  r   r   r   test_newobj_overridden_newI  s    
z.AbstractPickleTests.test_newobj_overridden_newc                 C   sH   t }t t }| |d}z"da | ttjf| j| W |a n|a 0 d S )Nr  r  )SimpleNewObjr   r  r   r(  r   r   r   )r&   saver  rZ   r   r   r   test_newobj_not_classT  s    
z)AbstractPickleTests.test_newobj_not_classc                 C   s   t |}zttd| tg d}d|_d|_| |d}| t	d| | d| | 
t|| | |}| || | |d}| t	d| | d| | t||d	t| | |}| || W |  n
|  0 d S )
Nr  r#  r  r2  r   re  s   MyListr   T)r;   r=   rB   r0   r  r   r   r  r  r   assertFalser   r   r   r  r   reprrC   )r&   Zextcodeopcoder+  r!   s1r   s2r   r   r   produce_global_extd  s&    

z&AbstractPickleTests.produce_global_extc                 C   s    |  dtj |  dtj d S )Nr   r   )rK  r   EXT1r)   r   r   r   test_global_ext1  s    z$AbstractPickleTests.test_global_ext1c                 C   s.   |  dtj |  dtj |  dtj d S )Nr  r   iͫ  )rK  r   EXT2r)   r   r   r   test_global_ext2  s    z$AbstractPickleTests.test_global_ext2c                 C   s.   |  dtj |  dtj |  dtj d S )N   r   iͫ)rK  r   EXT4r)   r   r   r   test_global_ext4  s    z$AbstractPickleTests.test_global_ext4c                 C   s   d}t t|}tD ]B}| ||}| |}| || ttj|}| 	||dk qd}t t|}tD ]V}| ||}| |}| || ttj|}|dkr| 	|d ql| 
|dk qld S N
   r   	  r   )r   r   r  r  r   r   r   r   APPENDSr   r  )r&   r   r!   r  r  r   Znum_appendsr   r   r   test_list_chunking  s$    

z&AbstractPickleTests.test_list_chunkingc                 C   s   d}t t|}tD ]N}| ||}| |t | |}| || t	t
j|}| ||dk qd}t t|}tD ]V}| ||}| |}| || t	t
j|}|dkr| |d q|| |dk q|d S rS  )ra   r  r   r  r  r  r   r   r   r   r   SETITEMSr   r  )r&   r   r!   r  r  r   Znum_setitemsr   r   r   test_dict_chunking  s&    

z&AbstractPickleTests.test_dict_chunkingc                 C   s   d}t t|}tD ]T}| ||}| |}| || ttj|}|dk r\| 	|d q| 	|d qd}t t|}tD ]T}| ||}| |}| || ttj|}|dk r| 	|d q~| 
|d q~d S )NrT  r  r   r   rU  r   )r   r   r  r  r   r   r   r   ADDITEMSr   assertGreaterEqual)r&   r   r!   r  r  r   Znum_additemsr   r   r   test_set_chunking  s(    

z%AbstractPickleTests.test_set_chunkingc              	   C   s   t t d}d|_tD ]}| j|d~ | ||}|dk rJ| d| n| d| | tt	j
|d|k | tt	j| | |}| || W d    q1 s0    Y  qd S )N    r  r      
I64206   Mr   )rC  r   r   r  r   r  r  r   r   r   NEWOBJrF  	NEWOBJ_EXr   r   r  r   r   r   test_simple_newobj  s    
z&AbstractPickleTests.test_simple_newobjc              	   C   s   t t d}d|_tD ]}| j|d | ||}|dk rJ| d| n8|dk r`| d| n"|dk rv| d	| n| d
| | tt	j
|d|k | tt	j| | |}| || W d    q1 s0    Y  qd S Nr]  r^  r_  r   r`  r   ra  r  s	   X   FACEs   FACE)ComplexNewObjr   r   r  r   r  r  r   r   r   rb  rF  rc  r   r   r  r   r   r   test_complex_newobj  s$    
z'AbstractPickleTests.test_complex_newobjc              	   C   s   t t d}d|_tD ]}| j|d | ||}|dk rJ| d| n8|dk r`| d| n"|dk rv| d	| n| d
| | tt	j
| | tt	j|d|k | |}| || W d    q1 s0    Y  qd S re  )ComplexNewObjExr   r   r  r   r  r  rF  r   r   rb  r   rc  r   r   r  r   r   r   test_complex_newobj_ex  s$    
z*AbstractPickleTests.test_complex_newobj_exc                 C   s>   t g d}d|_d|_| |d}| |}| || d S )Nr#  r  r2  r   )SlotListr   r   r  r   r   )r&   r!   r  r   r   r   r   test_newobj_list_slots	  s    
z*AbstractPickleTests.test_newobj_list_slotsc                 C   sT   t D ]J}t }| |jd | ||}| |jd | |}| |jd qd S r<   )r  REX_oner   _reduce_calledr  r   r  r   r   r   'test_reduce_overrides_default_reduce_ex	  s    
z;AbstractPickleTests.test_reduce_overrides_default_reduce_exc                 C   sT   t D ]J}t }| |jd  | ||}| |j| | |}| |jd  qd S r   )r  REX_twor   _protor  r   r  r   r   r   test_reduce_ex_called	  s    
z)AbstractPickleTests.test_reduce_ex_calledc                 C   sT   t D ]J}t }| |jd  | ||}| |j| | |}| |jd  qd S r   )r  	REX_threer   rp  r  r   r  r   r   r   test_reduce_ex_overrides_reduce&	  s    
z3AbstractPickleTests.test_reduce_ex_overrides_reducec                 C   sT   t D ]J}t }| |jd  | ||}| |j| | |}| |j| qd S r   )r  REX_fourr   rp  r  r   r  r   r   r   test_reduce_ex_calls_base/	  s    
z-AbstractPickleTests.test_reduce_ex_calls_basec                 C   sT   t D ]J}t }| |jd | ||}| |jd | |}| |jd qd S r<   )r  REX_fiver   rm  r  r   r  r   r   r   test_reduce_calls_base8	  s    
z*AbstractPickleTests.test_reduce_calls_basec              	   C   sN   t  }tD ]>}t " | t| j|| W d    q
1 s>0    Y  q
d S r   )
BadGetattrr  r   Zinfinite_recursionr   RuntimeErrorr  )r&   r!   r  r   r   r   test_bad_getattrA	  s    
z$AbstractPickleTests.test_bad_getattrc              	   C   s~   G dd dt }G dd dt }tD ]T}z| | | W n tjyN   Y n0 z| | | W q$ tjyv   Y q$0 q$d S )Nc                   @   s   e Zd Zdd ZdS )z7AbstractPickleTests.test_reduce_bad_iterator.<locals>.Cc                 S   s   t dd g d fS rL   )r   r)   r   r   r   rR   M	  s    zBAbstractPickleTests.test_reduce_bad_iterator.<locals>.C.__reduce__Nr0   r1   r2   rR   r   r   r   r   rD   L	  s   rD   c                   @   s   e Zd Zdd ZdS )z7AbstractPickleTests.test_reduce_bad_iterator.<locals>.Dc                 S   s   t dd d g fS rL   )ra   r)   r   r   r   rR   Q	  s    zBAbstractPickleTests.test_reduce_bad_iterator.<locals>.D.__reduce__Nr{  r   r   r   r   rI   P	  s   rI   )r   r  r  r   PicklingError)r&   rD   rI   r  r   r   r   test_reduce_bad_iteratorI	  s    z,AbstractPickleTests.test_reduce_bad_iteratorc              	   C   s   dd t dD }tdd |D }t|t|t|g}tD ]R}| j|d2 | ||}| |}| || W d    q>1 s0    Y  q>d S )Nc                 s   s   | ]}d t | V  qdS )ZaaaNrU   r  r   r   r   	<genexpr>c	  rI  z>AbstractPickleTests.test_many_puts_and_gets.<locals>.<genexpr>r   c                 s   s   | ]}|g d fV  qdS ))r  rg   r   Nr   )rp  kr   r   r   r~  d	  rI  r_  )r   ra   r  r   r  r   r   )r&   r   Z
large_dictrv   r  r   r   r   r   r   test_many_puts_and_gets`	  s    
z+AbstractPickleTests.test_many_puts_and_getsc           	      C   sj   t D ]`}t }d|_d|_| ||}| |}t|j}t|j}t||D ]\}}| 	|| qNqd S )Nr  r2  )
r  rD   r   r   r  r   sortedrE   zipr   )	r&   r  r!   r  r   Zx_keysZy_keysZx_keyZy_keyr   r   r   test_attribute_name_interningm	  s    


z1AbstractPickleTests.test_attribute_name_interningc                 C   s>   |  tdd}| |t |  tdgd}| |t d S )Nrg   r   r  )r  r   r   r   r   	DATA_SET2r   r   r   r   test_pickle_to_2x{	  s    z%AbstractPickleTests.test_pickle_to_2xc                 C   sT   t D ]J}dtdd tf}| ||}| |}| t|t| | || qd S )Nr   s   xyi x  )r  r)  r  r  r   r   )r&   r  r   r   r   r   r   r   test_large_pickles	  s    
z&AbstractPickleTests.test_large_picklesc              	      s   t D ] j dj  fddtdD }ttt|}t||  dkrp|D ]}t	t
j| qXW d    q1 s0    Y  qd S )Nr_  c                    s   g | ]} d |  qS r   r  )rp  r   r  r&   r   r   rq  	  rI  zDAbstractPickleTests.test_int_pickling_efficiency.<locals>.<listcomp>F   r   )r  r   r   r   mapr  r   r  rF  r   r   LONG)r&   ZpicklesZsizesr  r   r  r   test_int_pickling_efficiency	  s    z0AbstractPickleTests.test_int_pickling_efficiencyc                 C   s6   |  ||}| t|| | |}| || d S r   )r  r  r   r   r   )r&   rv   rH  r  r  r  r   r   r   _check_pickling_with_opcode	  s    
z/AbstractPickleTests._check_pickling_with_opcodec                 C   sD   t g d}tD ].}|dkr.| |tj| q| |tj| qd S )Nr#  r   )r  r  r  r   APPENDrV  r&   rv   r  r   r   r   test_appends_on_non_lists	  s
    z-AbstractPickleTests.test_appends_on_non_listsc                 C   sH   t dddd}tD ].}|dkr2| |tj| q| |tj| qd S )Nr   r#  r   )r  r  r  r   SETITEMrX  r  r   r   r   test_setitems_on_non_dicts	  s
    z.AbstractPickleTests.test_setitems_on_non_dictsr  rP  c                 C   s6  d  }}h d}t |D ]\}}}|d urD| || ||krDd }|d urx| |jd |j|v r| t|| j nX|jdks|j|v rt|| jkr|d ur| || | j d }n|d u r|jdkr|}|jdkr| 	|| j |d | }qt|}|d ur| 
|| n|d ur2| || | j d S )N>   	BINBYTES8BINBYTESr  BINUNICODE8
BINUNICODEFRAMEr  	   )r   r   assertLessEqualassertNotEqualrb   r  FRAME_SIZE_TARGET
assertLessFRAME_SIZE_MINr[  r   )r&   r  Z	frame_endZframeless_startZframeless_opcodesr   rJ   posr   r   r   check_frame_opcodes	  s>    





z'AbstractPickleTests.check_frame_opcodesc              	   C   s   t td}tdtjd D ]}| j|dt | ||}| |}| || t|t	tj
| }| || jd  | || jd  | | W d    q1 s0    Y  qd S )Ni r  r   r_  r   )r   r   r   r  r   r  r   r   r  r   r  assertGreaterr  r  r  )r&   rv   r  r  r  Zbytes_per_framer   r   r   test_framing_many_objects	  s     

z-AbstractPickleTests.test_framing_many_objectsc              
   C   s8  d}dd t dD }d| g|d| d| }t dtjd	 D ]}d
D ]}| j||d |sr| ||}nFt| dsW d    qLt }| j||d}||_	|
| | }| |}	| dd |D dd |	D  | ||	 ttj|}
| |
d	 | | W d    qL1 s&0    Y  qLqDd S )Ni   c                 S   s   g | ]
}|gqS r   r   r  r   r   r   rq  	  rI  zBAbstractPickleTests.test_framing_large_objects.<locals>.<listcomp>rT     x   yzr  r   )FT)r  fastpicklerrm   c                 S   s   g | ]}t |qS r   r  ro  r   r   r   rq  
  rI  c                 S   s   g | ]}t |qS r   r  ro  r   r   r   rq  
  rI  )r   r   r  r   r  r   r,   r4   r  r  dumpr5   r   r   r   r  r  )r&   NZsmall_itemsrv   r  r  r  bufr  r  n_framesr   r   r   test_framing_large_objects	  s.    


z.AbstractPickleTests.test_framing_large_objectsc                    s   t jdk rd S ddd}| jd}ttfD ]  fddt|D }tdt jd D ]z}| ||}||}| tt j	|d | || 
| ||d	d
 }| tt j	|tt j	| | || 
| qVq*d S )Nr  c           
      S   s   g }d}t | D ]\}}}|jdkr|| qt }d}t|D ].\}	}|rZ||	rZqD|| || 7 }|| }qD|| |d  7 }|S )Nr  r  r   )r   r   rb   r   r  	enumerate)
r  Z
keep_frameZframe_startsZframe_opcode_sizerH  _r  Z	newpickleZlast_frame_endr  r   r   r   remove_frames
  s    

z?AbstractPickleTests.test_optional_frames.<locals>.remove_frames   c                    s   i | ]}| |g qS r   r   r  Z
bytes_type
frame_sizer   r   
<dictcomp>2
  rI  z<AbstractPickleTests.test_optional_frames.<locals>.<dictcomp>r   r   c                 S   s   | d S )Nr   r   )r  r   r   r   r  ;
  rI  z:AbstractPickleTests.test_optional_frames.<locals>.<lambda>)N)r   r  r  rk   r  r   r  r   r   r  r   r  )r&   r  Z
num_framesrv   r  r  Zframeless_pickleZsome_frames_pickler   r  r   test_optional_frames
  s"    


z(AbstractPickleTests.test_optional_framesc                    s  G dd d}t dtjd D ]Z}dd t tdD }|d jd	 d   | } ||| | } 	|} 
||  t|jd ~t   
| | t|d  j d } t|j|  t|jd
| d  dd |jD } fdd|D }	 fdd|D }
dd |D }|	D ]} |d
 j | q< t|t|	t|
 d | qd S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zYAbstractPickleTests.test_framed_write_sizes_with_delayed_writer.<locals>.ChunkAccumulatorc                 S   s
   g | _ d S r   )chunksr)   r   r   r   r9   D
  s    zbAbstractPickleTests.test_framed_write_sizes_with_delayed_writer.<locals>.ChunkAccumulator.__init__c                 S   s   | j | d S r   )r  r   )r&   chunkr   r   r   r8   F
  s    z_AbstractPickleTests.test_framed_write_sizes_with_delayed_writer.<locals>.ChunkAccumulator.writec                 S   s   d | jS )NrI  )r{  r  r)   r   r   r   concatenate_chunksH
  s    zlAbstractPickleTests.test_framed_write_sizes_with_delayed_writer.<locals>.ChunkAccumulator.concatenate_chunksN)r0   r1   r2   r9   r8   r  r   r   r   r   ChunkAccumulatorB
  s   r  r  r   c                 S   s,   g | ]$}t |d |d dt |ifqS )r   r  r  )rV   r   r  r   r   r   rq  L
  s   zSAbstractPickleTests.test_framed_write_sizes_with_delayed_writer.<locals>.<listcomp>g     @Z0123456789abcdefr  r   r  c                 S   s   g | ]}t |qS r   r  )rp  r   r   r   r   rq  p
  rI  c                    s   g | ]}| j kr|qS r   r  rp  r  r)   r   r   rq  q
  s   
c                    s*   g | ]"}d |  k r j k rn q|qS r  r  r  r)   r   r   rq  s
  s   c                 S   s   g | ]}|d kr|qS r  r   r  r   r   r   rq  u
  rI  )r   r   r  r  r   r  r  r  r  r   r   r  r  r  r   
gc_collectr[  r  r  )r&   r  r  Zobjectswriterr  Zreconstructedr  Zchunk_sizesZlarge_sizesZmedium_sizesZsmall_sizesZ
chunk_sizer   r)   r   +test_framed_write_sizes_with_delayed_writer@
  s@    	


z?AbstractPickleTests.test_framed_write_sizes_with_delayed_writerc              
   C   s   G dd da ttjd D ]l}t jt jjt jjjfD ]P}| j||d. | | 	||}| 
|| W d    q61 s|0    Y  q6qd S )Nc                   @   s   e Zd ZG dd dZdS )Nestedc                   @   s   e Zd ZG dd dZdS )zNested.Ac                   @   s   e Zd ZG dd dZdS )z
Nested.A.Bc                   @   s   e Zd ZdS )zNested.A.B.CNrO   r   r   r   r   rD   
  s   rD   N)r0   r1   r2   rD   r   r   r   r   r9  
  s   r9  N)r0   r1   r2   r9  r   r   r   r   A
  s   r  N)r0   r1   r2   r  r   r   r   r   r  
  s   r  r   )r  rv   )r  r   r   r  r  r9  rD   r   r   r  r   )r&   r  rv   r  r   r   r   test_nested_names
  s    z%AbstractPickleTests.test_nested_namesc              	   C   s   G dd da tjt j t _dt _ttjd D ]N}| j	|d. | 
| t |}| |t  W d    q01 st0    Y  q0t `d S )Nc                   @   s   e Zd ZdS )	RecursiveNrO   r   r   r   r   r  
  s   r  zRecursive.mod.Recursiver   r_  )r  rv  modulesr1   modr2   r   r   r  r   r   r  r   )r&   r  r  r   r   r   test_recursive_nested_names
  s    ,z/AbstractPickleTests.test_recursive_nested_namesc              
   C   s(  G dd da t jt jt  jt jjt jjt  jf}t jt ft jjt jff}tt	j
d D ]}|D ]T}| j||d2 | | ||}| | |  W d    qb1 s0    Y  qb|D ]d\}}| }| j||d6 | | ||}| |||| W d    q1 s0    Y  qqZd S )Nc                   @   s:   e Zd Zedd Zedd Zdd ZG dd dZd	S )
PyMethodsTestc                   S   s   dS )Ncheeser   r   r   r   r   r  
  s    zPyMethodsTest.cheesec                 S   s   dS )Nwiner   rx   r   r   r   r  
  s    zPyMethodsTest.winec                 S   s   dS )Nbiscuitsr   r)   r   r   r   r  
  s    zPyMethodsTest.biscuitsc                   @   s,   e Zd Zedd Zedd Zdd ZdS )zPyMethodsTest.Nestedc                   S   s   dS )Nketchupr   r   r   r   r   r  
  s    zPyMethodsTest.Nested.ketchupc                 S   s   dS )Nmapler   r  r   r   r   r  
  s    zPyMethodsTest.Nested.maplec                 S   s   dS )Npier   r)   r   r   r   r  
  s    zPyMethodsTest.Nested.pieN)r0   r1   r2   staticmethodr  r   r  r  r   r   r   r   r  
  s
   

r  N)	r0   r1   r2   r  r  r   r  r  r  r   r   r   r   r  
  s   

r  r   r  method)r  r  r  r  r  r  r  r  r   r   r  r   r   r  r   )r&   Z
py_methodsZpy_unbound_methodsr  r  r  rx   rv   r   r   r   test_py_methods
  s*    	0z#AbstractPickleTests.test_py_methodsc                 C   s,  G dd dt adjdftjdfg djdftjg dffdd	hjd
ftjdd	hd	fftj	dft
jdftg djd
ftjtg dd	fftdjdftjjtddfff}ttjd D ]h}|D ]^\}}| j||d6 | | ||}| || ||  W d    q1 s0    Y  qqd S )Nc                   @   s   e Zd ZG dd deZdS )Subclassc                   @   s   e Zd ZdS )zSubclass.NestedNrO   r   r   r   r   r  
  s   r  N)r0   r1   r2   rV   r  r   r   r   r   r  
  s   r  abcd)r   )r  r   r#  r   r   r   r  ))rY   r   )rZ   r   )s   abcr  )r   r   r   Zsweet)r+  r+  r  )r  r  indexrV   __len__r   __contains__r   ra   r  r  	maketranscountr  r   r   r  r   r   r  r   )r&   Z	c_methodsr  r  r'   r  r   r   r   test_c_methods
  s&    z"AbstractPickleTests.test_c_methodsc              
   C   s   t ddddfttdddftjddftjd	d	ft d
dft	 ddft
 ddft ddfg}|D ]\}}}t dD ]t}| jt||dN | ||}| d||f  | | t| |t| W d    qx1 s0    Y  qxqfd S )Nr   r  __builtin__xrangeZ123	itertoolsimapr"  r$  
exceptionsr   r&  IterableUserDictUserListr%  defaultdictr  )r^   r  zc%s
%s)r   r  r  r!  r"  r#  r$  r   r%  r&  r  r  r   r^   r  r  r   r   r   )r&   Ztestsvalr  rb   r  r  r   r   r   test_compat_pickle
  s    



z&AbstractPickleTests.test_compat_picklec              	   C   s"  dd }t dtjd D ]F}| ttjf" t| || W d    q1 sT0    Y  q|`	t dtjd D ]F}| ttjf" t| || W d    qt1 s0    Y  qt|j
|_t dtjd D ]H}| ttjf" t| || W d    q1 s0    Y  qd S )Nc                   S   s   d S r   r   r   r   r   r   r    s    z6AbstractPickleTests.test_local_lookup_error.<locals>.fr   r   )r   r   r  r   AttributeErrorr|  r   r  r  r1   r2   r0   r&   r  r  r   r   r   test_local_lookup_error  s    22z+AbstractPickleTests.test_local_lookup_errorc                 c   s   d}t |V  t|V  td urt|}tj|dd}dtjfD ]>}t|dd|dV  t|ddd	|d
V  t|ddd|d
V  q@d S )N   abcdefghlittle)	byteorderr   r9  )r  )rq   r   r   )r  r   r!  )rq   r   r   r   r   )re   r   r   r   r  
from_bytesr   r   )r&   Z
bytestringr   rQ   r   r   r   r   buffer_like_objects  s"    

z'AbstractPickleTests.buffer_like_objectsc                 C   s   |   D ]}tdtjd D ]}| ||}|jrF|dkrF| d| | ttj	|d |dkr| ttj
||jrzdnd | ttj||jrdnd dd }| j|||d}| || | |}| || | t|t| | || qqd S )Nr   r   rg   r  c                 S   s   dS NTr   rv   r   r   r   buffer_callback>  s    zAAbstractPickleTests.test_in_band_buffers.<locals>.buffer_callbackr  )r  r   r   r  r  r|   r  r   r   NEXT_BUFFERSHORT_BINBYTESr{   r  r   r   r   r^   )r&   rv   r  r   r  data2r   r   r   r   test_in_band_buffers.  s,    
z(AbstractPickleTests.test_in_band_buffersc              
      s  |   D ]}tddD ]@}| t" | j||g jd W d    q1 sN0    Y  qtdtjd D ]j}g   fdd}| j|||d}| d| | 	t
tj|d | 	t
tj|d | 	t
tj|d | 	t
tj||jrdnd |jr| 	t d d | tj | | W d    n1 s@0    Y  | j| d}|jrn| || n | t|t| | 	|| | j|t d}|jr| || qj| t|t| | 	|| qjqd S )	Nr   rg   r  r   c                    s     |  S r   )r   r   )r   buffersr   r   r  W  rI  z6AbstractPickleTests.test_oob_buffers.<locals>.<lambda>r  r  )r  r   r   r   r  r   r   r  r  r   r   r  r  r  READONLY_BUFFERr{   r|   rk   r   r   r~   r   r^   iter)r&   rv   r  r  r   r   r   r  r   test_oob_buffersM  sB    &*z$AbstractPickleTests.test_oob_buffersc                 C   st   t d}tdtjd D ]V}g }|j}| j|||d}tt|}| j||d}| 	t
|t
| | || qd S N   foobarrg   r   r  r  )re   r   r   r  r   r  r  r  r   r   r^   r   )r&   rv   r  r  r  r   r   r   r   r   %test_oob_buffers_writable_to_readonlyw  s    
z9AbstractPickleTests.test_oob_buffers_writable_to_readonlyc              	   C   sV   t d}tddD ]<}| t j | || W d    q1 sF0    Y  qd S )Nr  r   rg   )r   rj   r   r   PickleErrorr  )r&   r   r  r   r   r   test_picklebuffer_error  s    
z+AbstractPickleTests.test_picklebuffer_errorc                 C   sP   dd }t d}| t  | j|d|d W d    n1 sB0    Y  d S )Nc                 S   s   dd  d S r  r   r  r   r   r   r    s    zGAbstractPickleTests.test_buffer_callback_error.<locals>.buffer_callbackr  rg   r  )r   rj   r   ZeroDivisionErrorr  )r&   r  r   r   r   r   test_buffer_callback_error  s    
z.AbstractPickleTests.test_buffer_callback_errorc              	   C   s   t d}tdt jd D ]}| j||g jd}| t  | j|t	 d W d    n1 s`0    Y  | t j
 | j|g d W d    q1 s0    Y  qd S r  )r   rj   r   r  r  r   r   r(  r   r   r   )r&   r   r  r   r   r   r   test_buffers_error  s    
.z&AbstractPickleTests.test_buffers_errorc                 C   s8   t dtjd D ]"}| jd|d d}| j|d d}qd S )Nrg   r   r  r  )r   r   r  r  r   )r&   r  Zdata_pickledr   r   r   r   +test_inband_accept_default_buffers_argument  s    z?AbstractPickleTests.test_inband_accept_default_buffers_argumentNzTest needs Numpyc                    s   fddfdd  fdd}t d}|| ||d d d  t d	d
}|| ||j ||d d d  d S )Nc                    s&   t j| |  | jj|jj d S r   )nptestingassert_equalr   ctypesr   r!   r   r)   r   r   check_no_copy  s    z=AbstractPickleTests.test_buffers_numpy.<locals>.check_no_copyc                    s&   t j| |  | jj|jj d S r   )r  r  r  r  r	  r   r
  r)   r   r   
check_copy  s    z:AbstractPickleTests.test_buffers_numpy.<locals>.check_copyc                    s   t dtjd D ]$}| |}|} | | qt dtjd D ]0}dd }j| ||d}|} | | qFt dtjd D ]R}g }|j}j| ||d}j||d}| jjs| jjrЈ| | q | | qd S )Nr   r   rg   c                 S   s   dS r  r   )r  r   r   r   r    rI  zMAbstractPickleTests.test_buffers_numpy.<locals>.check_array.<locals>.<lambda>r  r  )	r   r   r  r  r   r   r   r|   r}   )arrr  r   r   r  r  r  r  r&   r   r   check_array  s"    

z;AbstractPickleTests.test_buffers_numpy.<locals>.check_arrayr   r      r"  )r  ZarangeZreshapeT)r&   r  r  r   r  r   test_buffers_numpy  s    

z&AbstractPickleTests.test_buffers_numpy)r0   r1   r2   Z	optimizedr   r   r  r   r  r  r  r"   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r,  r0  r3  r4  r;  r@  rB  rE  rK  rM  rO  rR  rW  rY  r\  rd  rg  ri  rk  rn  rq  rs  ru  rw  r   rz  r}  r  r  r  r  r  r  r  r  r  r  r  r   Zskip_if_pgo_taskr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  unittestZskipIfr  r  r   r   r   r   r    s   




	'							


	
/
 *
A1#*r  c                   @   sz   e Zd Zeeddddd Zeeddddd Zeedddd	d
 Zeeddddd Z	eeddddd Z
dS )BigmemPickleTestsg@F)sizeZmemusedry_runc              
   C   s   dd| > }zt D ]v}|dk r q| j|dL | ttf | j||d W d    n1 s`0    Y  W d    q1 s~0    Y  qW d }nd }0 d S )Nr   r  r   r_  r  )r  r   r   r   r   r  )r&   r  r   r  r   r   r   test_huge_long_32b  s    Nz$BigmemPickleTests.test_huge_long_32bg      @c              	   C   s   d|d  }zt D ]}|dk r q| j|dj zR| j||d}tjtdt| }||}| 	|||t| |  W d }nd }0 W d    q1 s0    Y  qW d }nd }0 d S )N   abcdr  r  r_  r  r   )
r  r   r  r   r  r   r   r  r  r   r&   r  r   r  r  headerZ
data_startr   r   r   test_huge_bytes_32b  s$    
.z%BigmemPickleTests.test_huge_bytes_32bc              
   C   s  d|d  }zt D ]}|dk r q| j|d |dkr| ttf | j||d W d    n1 sh0    Y  W d    qzR| j||d}tjt	dt
| }||}| |||t
| |  W d }nd }0 W d    q1 s0    Y  qW d }nd }0 d S )Ns   acbdr  r  r_  r  <Q)r  r   r   r   r   r  r   r  r   r   r  r  r   r  r   r   r   test_huge_bytes_64b  s,    ,
.z%BigmemPickleTests.test_huge_bytes_64br  c              	   C   s   d|d  }zt D ]}|dkr q| j|d zz| j||d}tjtdt| }|d}| 	|||t| |  | 	|
dtd |d t| W d }nd }0 W d    q1 s0    Y  qW d }nd }0 d S )Nr  r  r   r_  r  r   r  )r  r   r  r   r  r   r   r  r  r   rindexr  r   r   r   test_huge_str_32b  s.    
.z#BigmemPickleTests.test_huge_str_32bc              
   C   s:  d|d  }z t D ]}|dkr$q| j|d |dk r| ttf | j||d W d    n1 sl0    Y  W d    qzz| j||d}tjt	dt
| }|d}| |||t
| |  | |dt
d |d t
| W d }nd }0 W d    q1 s0    Y  qW d }nd }0 d S )Nr  r  r   r_  r  r  r  )r  r   r   r   r   r  r   r  r   r   r  r  r   r  r  r   r   r   test_huge_str_64b3  s6    
,
0z#BigmemPickleTests.test_huge_str_64bN)r0   r1   r2   r   r	   r  r  r
   r  r  r   r   r   r   r   r    s   



r  c                   @   s   e Zd ZdZdd ZdS )rl  r   c                 C   s   d| _ tdfS )Nr   r   )rm  rl  r)   r   r   r   rR   T  s    zREX_one.__reduce__Nr0   r1   r2   rm  rR   r   r   r   r   rl  Q  s   rl  c                   @   s   e Zd ZdZdd ZdS )ro  Nc                 C   s   || _ tdfS rL   rp  ro  r&   r  r   r   r   rn   [  s    zREX_two.__reduce_ex__r0   r1   r2   rp  rn   r   r   r   r   ro  X  s   ro  c                   @   s    e Zd ZdZdd Zdd ZdS )rr  Nc                 C   s   || _ tdfS rL   r"  r#  r   r   r   rn   a  s    zREX_three.__reduce_ex__c                 C   s   t dd S )Nz#This __reduce__ shouldn't be called)r   r)   r   r   r   rR   d  s    zREX_three.__reduce__)r0   r1   r2   rp  rn   rR   r   r   r   r   rr  _  s   rr  c                   @   s   e Zd ZdZdd ZdS )rt  Nc                 C   s   || _ t| |S r   )rp  r   rn   r#  r   r   r   rn   j  s    zREX_four.__reduce_ex__r$  r   r   r   r   rt  g  s   rt  c                   @   s   e Zd ZdZdd ZdS )rv  r   c                 C   s   d| _ t| S r  )rm  r   rR   r)   r   r   r   rR   q  s    zREX_five.__reduce__Nr!  r   r   r   r   rv  n  s   rv  c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r  Nc                 C   s   |d ur|ng | _ d S r   r  )r&   r   r   r   r   r9   y  s    zREX_six.__init__c                 C   s   t | t |u o| j|jkS r   )r^   r   rF   r   r   r   rH   {  s    zREX_six.__eq__c                 C   s   | j | d S r   )r   r   )r&   itemr   r   r   r   }  s    zREX_six.appendc                 C   s   t | dd t| jd fS rL   )r^   r  r   r)   r   r   r   rR     s    zREX_six.__reduce__)N)r0   r1   r2   r9   rH   r   rR   r   r   r   r   r  u  s   
r  c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r  Nc                 C   s   |d ur|ni | _ d S r   r  )r&   r  r   r   r   r9     s    zREX_seven.__init__c                 C   s   t | t |u o| j|jkS r   )r^   r  rF   r   r   r   rH     s    zREX_seven.__eq__c                 C   s   || j |< d S r   r  )r&   r   rQ   r   r   r   __setitem__  s    zREX_seven.__setitem__c                 C   s   t | dd d t| j fS rL   )r^   r  r  r   r)   r   r   r   rR     s    zREX_seven.__reduce__)N)r0   r1   r2   r9   rH   r&  rR   r   r   r   r   r    s   
r  c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r  Nc                 C   s
   || _ d S r   r  r&   r  r   r   r   r9     s    zREX_state.__init__c                 C   s   t | t |u o| j|jkS r   r^   r  rF   r   r   r   rH     s    zREX_state.__eq__c                 C   s
   || _ d S r   r'  r(  r   r   r   __setstate__  s    zREX_state.__setstate__c                 C   s   t | d| jfS rL   r)  r)   r   r   r   rR     s    zREX_state.__reduce__)N)r0   r1   r2   r9   rH   r*  rR   r   r   r   r   r    s   
r  c                   @   s   e Zd ZdZdS )r<  r   Nr0   r1   r2   r8  r   r   r   r   r<    s   r<  c                   @   s   e Zd ZdZdS )MyFloatg      ?Nr+  r   r   r   r   r,    s   r,  c                   @   s   e Zd ZdZdS )	MyComplexy      ?        Nr+  r   r   r   r   r-    s   r-  c                   @   s   e Zd ZdZdS )MyStrr2  Nr+  r   r   r   r   r.    s   r.  c                   @   s   e Zd ZdZdS )	MyUnicodeu	   hello ሴNr+  r   r   r   r   r/    s   r/  c                   @   s   e Zd ZdZdS )r  r#  Nr+  r   r   r   r   r    s   r  c                   @   s   e Zd Zg dZdS )r  r#  Nr+  r   r   r   r   r    s   r  c                   @   s   e Zd ZdddZdS )r  r   r   rX   Nr+  r   r   r   r   r    s   r  c                   @   s   e Zd ZddhZdS )r  rY   rZ   Nr+  r   r   r   r   r    s   r  c                   @   s   e Zd ZeddhZdS )r  rY   rZ   N)r0   r1   r2   r  r8  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )MyIntWithNewc                 C   s   t d S r   )AssertionError)rx   rQ   r   r   r   r     s    zMyIntWithNew.__new__N)r0   r1   r2   r   r   r   r   r   r0    s   r0  c                   @   s   e Zd ZejZdS )rA  N)r0   r1   r2   r  r   r   r   r   r   rA    s   rA  c                   @   s   e Zd ZdgZdS )rj  r   N)r0   r1   r2   r   r   r   r   r   rj    s   rj  c                   @   s   e Zd Zdd Zdd ZdS )rC  c                 O   s   t dd S )Nz3SimpleNewObj.__init__() didn't expect to get called)r(  r   r   r   r   r9     s    zSimpleNewObj.__init__c                 C   s   t | t |ko| j|jkS r   )r  rE   rF   r   r   r   rH     s    zSimpleNewObj.__eq__N)r0   r1   r2   r9   rH   r   r   r   r   rC    s   rC  c                   @   s   e Zd Zdd ZdS )rf  c                 C   s   d|  dfS )N%Xr  r   r)   r   r   r   __getnewargs__  s    zComplexNewObj.__getnewargs__N)r0   r1   r2   r3  r   r   r   r   rf    s   rf  c                   @   s   e Zd Zdd ZdS )rh  c                 C   s   d|  fddifS )Nr2  baser  r   r)   r   r   r   __getnewargs_ex__  s    z!ComplexNewObjEx.__getnewargs_ex__N)r0   r1   r2   r5  r   r   r   r   rh    s   rh  c                   @   s   e Zd Zdd ZdS )rx  c                 C   s
   | j  d S r   )r   )r&   r   r   r   r   __getattr__  s    zBadGetattr.__getattr__N)r0   r1   r2   r6  r   r   r   r   rx    s   rx  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )AbstractPickleModuleTestsc              	   C   sD   t td}z(|  | t| jd| W tt ntt 0 d S Nrd  {   rz  r   closer   r   r  r   unlinkr&   r  r   r   r   test_dump_closed_file  s
    
z/AbstractPickleModuleTests.test_dump_closed_filec              	   C   sD   t td}z(|  | t| jd| W tt ntt 0 d S r8  r:  r=  r   r   r   test_load_closed_file  s
    
z/AbstractPickleModuleTests.test_load_closed_filec                 C   sB   t  }di dg}| || |d | |}| || d S )Nr9  |   r   )r,   r4   r  r.   loadr   )r&   streamr   r  r   r   r   test_load_from_and_dump_to_file  s    


z9AbstractPickleModuleTests.test_load_from_and_dump_to_filec                 C   s   |  tjd d S rf   )r   r   r  r)   r   r   r   test_highest_protocol  s    z/AbstractPickleModuleTests.test_highest_protocolc                 C   s^   t  }| d|d | jd|dd | dd | jddd | |d | j|dd d S )Nr9  r   )filerm   r  )r,   r4   r  r  Picklerr=  r   r   r   test_callapi  s    z&AbstractPickleModuleTests.test_callapic              	   C   sX   t td}z4tD ]}| t| jd|| qW |  tt n|  tt 0 d S )Nwr9  )	rz  r   r  r   r(  r  r;  r   r<  r  r   r   r   test_dump_text_file	  s    
z-AbstractPickleModuleTests.test_dump_text_filec                 C   s(   t d}| ttjtjf| j| d S )Ns   X''.)	r,   r4   r   rb  r   r,  r   r   rA  )r&   r  r   r   r   test_incomplete_input  s    
z/AbstractPickleModuleTests.test_incomplete_inputc                 C   sN   G dd d| j }G dd d| j}| tj| jd | tj| j d S )Nc                   @   s   e Zd Zdd ZdS )z;AbstractPickleModuleTests.test_bad_init.<locals>.BadPicklerc                 S   s   d S r   r   r)   r   r   r   r9     rI  zDAbstractPickleModuleTests.test_bad_init.<locals>.BadPickler.__init__Nr:   r   r   r   r   
BadPickler  s   rK  c                   @   s   e Zd Zdd ZdS )z=AbstractPickleModuleTests.test_bad_init.<locals>.BadUnpicklerc                 S   s   d S r   r   r)   r   r   r   r9     rI  zFAbstractPickleModuleTests.test_bad_init.<locals>.BadUnpickler.__init__Nr:   r   r   r   r   BadUnpickler  s   rL  r   )rF  	Unpicklerr   r   r|  r  r   rA  )r&   rK  rL  r   r   r   test_bad_init  s    z'AbstractPickleModuleTests.test_bad_initc           	   	   C   s   t d}tddD ]>}| t  |||g jd W d    q1 sF0    Y  qtdtjd D ]}g }|j}||||d}| d| | t	|d d | tj
 || W d    n1 s0    Y  |||d}| || qbd S )Ns   foor   rg   )rm   r  r   r  )re   r   r   r   r   r   r  r  r   rk   r   r   )	r&   r  r   rv   r  r  r  r   r   r   r   r   check_dumps_loads_oob_buffers"  s$    &&z7AbstractPickleModuleTests.check_dumps_loads_oob_buffersc                 C   s   |  | j| j d S r   )rO  r  r   r)   r   r   r   test_dumps_loads_oob_buffers:  s    z6AbstractPickleModuleTests.test_dumps_loads_oob_buffersc                    s(    fdd} fdd}  || d S )Nc                    s$   t  } j| |fi | | S r   )r,   r4   r  r5   )rv   r   r  r)   r   r   r  @  s    zCAbstractPickleModuleTests.test_dump_load_oob_buffers.<locals>.dumpsc                    s   t | } j|fi |S r   )r,   r4   rA  )r   r   r  r)   r   r   r   E  s    
zCAbstractPickleModuleTests.test_dump_load_oob_buffers.<locals>.loads)rO  )r&   r  r   r   r)   r   test_dump_load_oob_buffers>  s    z4AbstractPickleModuleTests.test_dump_load_oob_buffersN)r0   r1   r2   r>  r?  rC  rD  rG  rI  rJ  rN  rO  rP  rQ  r   r   r   r   r7    s   
	r7  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AbstractPersistentPicklerTestsc                 C   sN   t |tr,|d dkr,|  jd7  _t|S |dkrF|  jd7  _dS d S d S )Nr   r   r   test_false_valuer   )r   r  id_countrV   false_count)r&   r   r   r   r   persistent_idR  s    z,AbstractPersistentPicklerTests.persistent_idc                 C   s4   |s|  j d7  _ dS |  jd7  _t|}|S d S )Nr   rS  )load_false_count
load_countr  )r&   Zoidr   r   r   r   persistent_load\  s    z.AbstractPersistentPicklerTests.persistent_loadc              	   C   s   t tddg }tD ]n}d| _d| _d| _d| _| | | 	||| | | jd | | jd | | jd | | jd qd S )NrT  rS  r   rg   r   )
r   r   r  rT  rU  rW  rX  r   r   r  )r&   Lr  r   r   r   test_persistencef  s    z/AbstractPersistentPicklerTests.test_persistenceN)r0   r1   r2   rV  rY  r[  r   r   r   r   rR  L  s   

rR  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )&AbstractIdentityPersistentPicklerTestsc                 C   s   |S r   r   )r&   rv   r   r   r   rV  v  s    z4AbstractIdentityPersistentPicklerTests.persistent_idc                 C   s   |S r   r   )r&   pidr   r   r   rY  y  s    z6AbstractIdentityPersistentPicklerTests.persistent_loadc                 C   s2   |  | ||}| |t| | || d S r   )r   r  r  r^   r   )r&   rv   r  r  r   r   r   _check_return_correct_type|  s    zAAbstractIdentityPersistentPicklerTests._check_return_correct_typec                 C   sD   t D ]:}|dkr| dd qddddtfD ]}| || q,qd S )Nr   r   s   abc
zabc
r   g*\()r  r^  rV   )r&   r  rv   r   r   r   test_return_correct_type  s
    z?AbstractIdentityPersistentPicklerTests.test_return_correct_typec                 C   sB   d}|  tj| j|d tj|d d }|  tj| j| d S )Nu   ∅r   re  r   )r   r   r|  r  PERSIDr   r   r   )r&   Znon_ascii_strr  r   r   r   test_protocol0_is_ascii_only  s    zCAbstractIdentityPersistentPicklerTests.test_protocol0_is_ascii_onlyN)r0   r1   r2   rV  rY  r^  r_  ra  r   r   r   r   r\  t  s
   	r\  c                   @   sj   e Zd ZdZdZdd Zdd Zdd Zdd	 Zd
d Z	ddddZ
dd Zdd Zdd Zdd ZdS )#AbstractPicklerUnpicklerObjectTestsNc                 C   s   d S r   r   r)   r   r   r   r    s    z)AbstractPicklerUnpicklerObjectTests.setUpc                 C   s   g d}t D ]}t }| ||}|| | }|d |  || | }|  |d |  || | }| 	|| | 
|| qd S )Nabcdefgrd  ,   r   )r  r,   r4   pickler_classr  r5   r.   truncate
clear_memor  r   )r&   r   r  r  r  first_pickledZsecond_pickledZthird_pickledr   r   r   test_clear_pickler_memo  s"    




z;AbstractPicklerUnpicklerObjectTests.test_clear_pickler_memoc                 C   sh   g d}t  }| |}|| | }t  }| |}|j|_|| | }| || d S Nrc  )r,   r4   rf  r  r5   memor  )r&   r   r  r  ri  primedprimed_pickledr   r   r   test_priming_pickler_memo  s    



z=AbstractPicklerUnpicklerObjectTests.test_priming_pickler_memoc           
      C   s   g d}t  }| |}|| | }t  }| |}|j|_|| | }| t |}| }| || | t |}|j|_| }	|j	  | |	| | 
|	|u  d S rk  )r,   r4   rf  r  r5   rl  unpickler_classrA  r   clearr  )
r&   r   r  r  ri  rm  rn  	unpicklerZunpickled_data1Zunpickled_data2r   r   r   test_priming_unpickler_memo  s&    




z?AbstractPicklerUnpicklerObjectTests.test_priming_unpickler_memoc                 C   s   g d}t  }| |}|| | }g d}t  }| |}|| | }t  }|| |d | |}| |	 | |d |
  || |d | |	 | d S )Nrc  )rd  re  re  r   )r,   r4   rf  r  r5   r8   r.   rp  r   rA  rg  )r&   data1r  r  Zpickled1r  Zpickled2rr  r   r   r   test_reusing_unpickler_objects  s(    









zBAbstractPicklerUnpicklerObjectTests.test_reusing_unpickler_objectsTr*   c             	   C   s   t D ]}| j|d dd tdD dtg }| }| j||d}|| | }d}||| }| |}	t|D ]<}
|r| }| 	|	
 | |rx| 	| |t|  qx| t|	j
 W d    q1 s0    Y  qd S )Nr_  c                 S   s   g | ]}|t |fqS r   rU   ro  r   r   r   rq    rI  zSAbstractPicklerUnpicklerObjectTests._check_multiple_unpicklings.<locals>.<listcomp>i  s   abcder  rg   )r  r   r   r  rf  r  r5   rp  r/   r   rA  r   rb  )r&   Zioclassr*   r  rt  r  r  r  r  rr  r  r  r   r   r   _check_multiple_unpicklings  s"    

z?AbstractPicklerUnpicklerObjectTests._check_multiple_unpicklingsc                 C   s   |  tj d S r   )rw  r,   r4   r)   r   r   r   "test_multiple_unpicklings_seekable  s    zFAbstractPicklerUnpicklerObjectTests.test_multiple_unpicklings_seekablec                 C   s   | j tdd d S NFrv  )rw  r#   r)   r   r   r   $test_multiple_unpicklings_unseekable  s    zHAbstractPicklerUnpicklerObjectTests.test_multiple_unpicklings_unseekablec                 C   s   | j tdd d S ry  )rw  r3   r)   r   r   r   !test_multiple_unpicklings_minimal  s    zEAbstractPicklerUnpicklerObjectTests.test_multiple_unpicklings_minimalc                 C   sx   t td}tD ]b}tddD ]R}tjt |d}| j||d}|| |d | 	|}| 
| | qqd S )NrT  r      )Zbuffer_sizer  r   )r   r   r  r,   BufferedRandomr4   rf  r  r.   rp  r   rA  )r&   r   r  Zbuf_sizer  r  rr  r   r   r   "test_unpickling_buffering_readline"  s    


zFAbstractPicklerUnpicklerObjectTests.test_unpickling_buffering_readline)r0   r1   r2   rf  rp  r  rj  ro  rs  ru  rw  rx  rz  r{  r~  r   r   r   r   rb    s    rb  Zreduce_Ac                   @   s   e Zd Zdd ZdS )r   c                 C   s
   t tffS r   )rV   r  r)   r   r   r   rR   5  s    zAAA.__reduce__Nr{  r   r   r   r   r   4  s   r   c                   @   s   e Zd Zdd Zdd ZdS )BBBc                 C   s
   d| _ d S )Nzsome attributerY   r)   r   r   r   r9   9  s    zBBB.__init__c                 C   s
   d| _ d S )NBBB.__setstate__r  r(  r   r   r   r*  >  s    r  N)r0   r1   r2   r9   r*  r   r   r   r   r  8  s   r  c                 C   s
   d| _ d S )Ncustom state_setterr  )rv   r  r   r   r   setstate_bbbB  s    	r  c                   @   s   e Zd Zdd ZdS )AbstractCustomPicklerClassc                 C   sL   t |dd }|dkrtdfS |dkr,tdfS |dkr8dS |dkrHtd	tS )
Nr0   r  )rg   MyClass)some strgFhThe reducer just failed)r   r  rV   r   r   )r&   rv   Zobj_namer   r   r   reducer_overrideQ  s    z+AbstractCustomPicklerClass.reducer_overrideN)r0   r1   r2   r  r   r   r   r   r  O  s   r  c                   @   s"   e Zd Zdd Zejdd ZdS )AbstractHookTestsc              
   C   s>  dd }dd }dd }G dd d}t d	tjd
 D ] }| j|d t }| ||}|||tj	g t
| \}}	}
| |d | |	d | |
tj	 | tj || W d    n1 s0    Y  | td || W d    n1 s0    Y  W d    q61 s.0    Y  q6d S )Nc                   S   s   d S r   r   r   r   r   r   r  m  s    z.AbstractHookTests.test_pickler_hook.<locals>.fc                   S   s   d S r   r   r   r   r   r   r  p  s    z.AbstractHookTests.test_pickler_hook.<locals>.gc                   S   s   d S r   r   r   r   r   r   r  s  s    z.AbstractHookTests.test_pickler_hook.<locals>.hc                   @   s   e Zd ZdS )z4AbstractHookTests.test_pickler_hook.<locals>.MyClassNrO   r   r   r   r   r  v  s   r  r   r   r_  rg   r  r  )r   r   r  r   r,   r4   rf  r  mathlogr   r5   r   r   r   r|  ZassertRaisesRegexr   )r&   r  r  r  r  r  bior  new_fZsome_strZmath_logr   r   r   test_pickler_hookh  s&    (z#AbstractHookTests.test_pickler_hookc              	   C   s   t dtjd D ]~}| j|d^ dd }t|}t }| ||}|	| t
| }~~| |  W d    q1 s0    Y  qd S )Nr   r   r_  c                   S   s   d S r   r   r   r   r   r   r    s    zEAbstractHookTests.test_reducer_override_no_reference_cycle.<locals>.f)r   r   r  r   r=  refr,   r4   rf  r  r   r5   r   )r&   r  r  wrr  r  r  r   r   r   (test_reducer_override_no_reference_cycle  s    

z:AbstractHookTests.test_reducer_override_no_reference_cycleN)r0   r1   r2   r  r   Zcpython_onlyr  r   r   r   r   r  g  s   (r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
AbstractDispatchTableTestsc                 C   sX   t  }| |d}| t |j W d    n1 s:0    Y  | t|d d S )Nr   dispatch_table)r,   r4   rf  r   r  r  rF  r   )r&   r  r  r   r   r   test_default_dispatch_table  s
    $z6AbstractDispatchTableTests.test_default_dispatch_tablec                    s@     G fdddj d fdd	}| d S )Nc                       s   e Zd Z ZdS )zGAbstractDispatchTableTests.test_class_dispatch_table.<locals>.MyPicklerN)r0   r1   r2   r  r   )dtr   r   	MyPickler  s   r  c                    s2   t  } ||}|j ||  | S r   )r,   r4   r   r  r  r5   rv   rm   r  r  r  r  r&   r   r   r    s
    

zCAbstractDispatchTableTests.test_class_dispatch_table.<locals>.dumps)N)get_dispatch_tablerf  _test_dispatch_tabler&   r  r   r  r   test_class_dispatch_table  s    z4AbstractDispatchTableTests.test_class_dispatch_tablec                    s(      d fdd	}|  d S )Nc                    s:   t  }||} |_|j  ||  | S r   )r,   r4   rf  r  r   r  r5   r  r  r&   r   r   r    s    
zFAbstractDispatchTableTests.test_instance_dispatch_table.<locals>.dumps)N)r  r  r  r   r  r   test_instance_dispatch_table  s    z7AbstractDispatchTableTests.test_instance_dispatch_tablec                    s  fdd}dd }d}|  ||| |  ||| d  fdd}||t< |  ||  |  ||| t }t }|  ||t | ||t |  ||t | ||t ||t< |  ||t |  ||  |  ||t | ||t d	fd
d}	|	|t< |t= |  || | ||t |  ||t | ||t |  ||jd dd }
|
|t< |  ||jd d S )Nc                    s   t  | dS Nr   )r   r   r  r  r   r   custom_load_dump  s    zIAbstractDispatchTableTests._test_dispatch_table.<locals>.custom_load_dumpc                 S   s   t t | dS r  )r   r   r  r  r   r   r   default_load_dump  s    zJAbstractDispatchTableTests._test_dispatch_table.<locals>.default_load_dumpy      ?       @reduce_1c                    s
   t  ffS r   rU   r  )REDUCE_1r   r   r    s    zAAbstractDispatchTableTests._test_dispatch_table.<locals>.reduce_1reduce_2c                    s
   t  ffS r   rU   r  )REDUCE_2r   r   r    s    zAAbstractDispatchTableTests._test_dispatch_table.<locals>.reduce_2r  c                 S   s   t d| jd d tfS rL   )r  rE   r  r  r   r   r   
reduce_bbb
  s    zCAbstractDispatchTableTests._test_dispatch_table.<locals>.reduce_bbbr  )r   complexr   r  r  r  rY   )r&   r  r  r  r  r  r  rY   rZ   r  r  r   )r  r  r  r   r    sB    
z/AbstractDispatchTableTests._test_dispatch_tableN)r0   r1   r2   r  r  r  r  r   r   r   r   r    s   r  r  zDATA{0} = (r  z	    {0!r}r   z# Disassembly of DATA{0}zDATA{0}_DIS = """\z""")r%  r=   r#  r,   r!  rr  r  r   r   rt  r   rv  r|  r  r=  textwrapr   Zhttp.cookiesr   r   ImportErrortestr   Ztest.supportr   r   r   r   r	   r
   r   r   r   r   r   Znumpyr  Z
skipUnlessr  r  r   r  r  r   r   r"   r4   r#   r   r3   r;   rD   rI   rK   rN   rP   rS   r1   r  rT   rW   r^   r[   r\   r]   r`   rk   re   r  r   r   r   r  r   r  r   Z	DATA2_DISr   Z	DATA3_DISr   Z	DATA4_DISr   r   r   r  ArithmeticErrorr1  r  r   BufferErrorBytesWarningDeprecationWarningrb  EnvironmentErrorr   FloatingPointErrorFutureWarningGeneratorExitIOErrorImportWarningIndentationError
IndexErrorKeyErrorKeyboardInterruptLookupErrorMemoryError	NameErrorr$   OSErrorr   PendingDeprecationWarningReferenceErrorry  RuntimeWarningStopIterationSyntaxErrorSyntaxWarningSystemError
SystemExitTabErrorr(  UnboundLocalErrorUnicodeErrorUnicodeWarningUserWarningr   Warningr  r   r   r   r   r   r  r  rl  ro  rr  rt  rv  r  r  r  r<  floatr,  r  r-  rV   r.  r/  r  r  r   r  ra   r  r   r  r  r  r6  r0  rA  rj  rC  rf  rh  rx  r7  rR  r\  rb  r  r   r  r  r  r  r  r0   r  r!   r  r  r  r   rq   r  jrZ   r   r   r   r   <module>   s  
0,
	
NSA::C0    i            < 
k( "
Bk
