3
rY]Ð             ,   @   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mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ e	jejdk dZeejd	 Zd
d Zdd ZG dd dej Z!G dd dZ"G dd dZ#G dd de#Z$G dd de#Z%G dd de&Z'G dd de&Z(d dl)Z)e#e)_#de#_*e$e)_$de$_*e%e)_%de%_*e'e)_'de'_*e(e)_(de(_*G dd de+Z,G dd  d e#Z-G d!d" d"e.Z/G d#d$ d$e&e/d%Z0G d&d' d'e.Z1d(d) Z2d*Z3d+Z4d,Z5d-Z6d.Z7d/Z8d0Z9d1Z:d2Z;d3Z<d4Z=d5Z>d6Z?d7Z@eAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe[e\e]e^e_e`eaebecedeeefegeheiejekelf,Zmd8Znd9Zod:d; ZpG d<d= d=e	jqZrG d>d? d?e	jqZsG d@dA dAe	jqZtG dBdC dCe&ZuG dDdE dEe&ZvG dFdG dGe&ZwG dHdI dIe&ZxG dJdK dKe&ZyG dLdM dMe&ZzG dNdO dOe&Z{G dPdQ dQe+Z|G dRdS dSe}Z~G dTdU dUeZG dVdW dWeZG dXdY dYeZG dZd[ d[eZG d\d] d]eZG d^d_ d_eZG d`da daeZG dbdc dceZe|e~eeeeeeeeg
ZG ddde deeZG dfdg dge+aG dhdi ditZG djdk dktZG dldm dmZG dndo doe	jqZG dpdq dqe	jqZG drds dse	jqZG dtdu due	jqZdvZG dwdx dxe&ZG dydz dze&ZG d{d| d|e	jqZedkrzd d}lmZ ep Zxeejd	 D ]ZejeeZed~je x<ed eedD ](Zeeeed  Zedje qW ed e  edje edje ee ed e  qW dS )    N)SimpleCookie)support)
TestFailedTESTFNrun_with_locale
no_tracing_2G_4G
bigmemtest)bytes_types       z(test is only meaningful on 32-bit builds   c             C   s2   x,t j|D ]\}}}|j| jdkrdS qW dS )Nzlatin-1TF)pickletoolsgenopscodedecode)r   pickleopdummy r   "lib/python3.6/test/pickletester.pyopcode_in_pickle    s    r   c             C   s:   d}x0t j|D ]"\}}}|j| jdkr|d7 }qW |S )Nr   zlatin-1r   )r   r   r   r   )r   r   nr   r   r   r   r   count_opcode'   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 )N)NotImplementedError)selfargsr   r   r   peek0   s    zUnseekableIO.peekc             C   s   dS )NFr   )r   r   r   r   seekable3   s    zUnseekableIO.seekablec             G   s
   t jd S )N)ioUnsupportedOperation)r   r   r   r   r   seek6   s    zUnseekableIO.seekc             C   s
   t jd S )N)r!   r"   )r   r   r   r   tell9   s    zUnseekableIO.tellN)__name__
__module____qualname__r   r    r#   r$   r   r   r   r   r   /   s   r   c               @   s   e Zd Zdd Zdd ZdS )ExtensionSaverc             C   sB   || _ |tjkr8tj| | _tj| jd | jd | nd | _d S )Nr   r   )r   copyreg_inverted_registrypairremove_extension)r   r   r   r   r   __init__J   s
    
zExtensionSaver.__init__c             C   sX   | j }tjj|}|d k	r0tj|d |d | | j}|d k	rTtj|d |d | d S )Nr   r   )r   r)   r*   getr,   r+   add_extension)r   r   Zcurpairr+   r   r   r   restoreS   s    zExtensionSaver.restoreN)r%   r&   r'   r-   r0   r   r   r   r   r(   G   s   	r(   c               @   s   e Zd Zdd ZdS )Cc             C   s   | j |j kS )N)__dict__)r   otherr   r   r   __eq__]   s    zC.__eq__N)r%   r&   r'   r4   r   r   r   r   r1   \   s   r1   c               @   s   e Zd Zdd ZdS )Dc             C   s   d S )Nr   )r   argr   r   r   r-   a   s    z
D.__init__N)r%   r&   r'   r-   r   r   r   r   r5   `   s   r5   c               @   s   e Zd Zdd ZdS )Ec             C   s   f S )Nr   )r   r   r   r   __getinitargs__e   s    zE.__getinitargs__N)r%   r&   r'   r8   r   r   r   r   r7   d   s   r7   c               @   s   e Zd ZdS )HN)r%   r&   r'   r   r   r   r   r9   h   s   r9   c               @   s   e Zd Zdd Zdd ZdS )Kc             C   s
   || _ d S )N)value)r   r;   r   r   r   r-   m   s    z
K.__init__c             C   s   t | jffS )N)r:   r;   )r   r   r   r   
__reduce__p   s    zK.__reduce__N)r%   r&   r'   r-   r<   r   r   r   r   r:   l   s   r:   __main__c               @   s   e Zd Zdd ZdS )myintc             C   s   t || _ d S )N)str)r   xr   r   r   r-      s    zmyint.__init__N)r%   r&   r'   r-   r   r   r   r   r>      s   r>   c               @   s   e Zd Zdd Zdd ZdS )initargc             C   s   || _ || _d S )N)ab)r   rB   rC   r   r   r   r-      s    zinitarg.__init__c             C   s   | j | jfS )N)rB   rC   )r   r   r   r   r8      s    zinitarg.__getinitargs__N)r%   r&   r'   r-   r8   r   r   r   r   rA      s   rA   c               @   s   e Zd ZdS )	metaclassN)r%   r&   r'   r   r   r   r   rD      s   rD   c               @   s   e Zd ZdS )use_metaclassN)r%   r&   r'   r   r   r   r   rE      s   rE   )rD   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 )N)typereduce_args)r   r3   r   r   r   r4      s    zpickling_metaclass.__eq__c             C   s
   t | jfS )N)create_dynamic_classrH   )r   r   r   r   r<      s    zpickling_metaclass.__reduce__N)r%   r&   r'   r4   r<   r   r   r   r   rF      s   rF   c             C   s   t | |t }| |f|_|S )N)rF   dictrH   )namebasesresultr   r   r   rI      s    
rI   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| _ddddg}d}d}d	}|jdd|| | d || | d || | d g d
d
| | f}|j| |j| |jd |S )Nr   r   r   g       @g      @y                   i  iabc   y      @        )r1   foobarextendappend)cr@   Zuint1maxZuint2maxZint4maxyr   r   r   create_data  s     


rX   c               @   s`  e Zd Ze ZdPd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ed0d1 Zed2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#ed>d? Z$d@dA Z%dBdC Z&dDdE Z'dFdG Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dS )QAbstractUnpickleTestsNc             C   s   |dkrdj ||}| j|||d | jt|t||d t|drn| j|j|j|d | j|j|j|d t|dr| j|j	|j	|d xJ|j	D ]@}| jt||t|||d | jt
||dt
||d|d qW dS )zKUtility method to verify if two objects are copies of each others.
        Nz{!r} is not a copy of {!r})msgr2   	__slots__)formatassertEqualassertIsrG   hasattrZassertDictEqualr2   ZassertIsNotZassertListEqualr[   getattr)r   objZobjcopyrZ   Zslotr   r   r   assert_is_copy  s    

z$AbstractUnpickleTests.assert_is_copyc             C   s   | j |dp | j|Z y| j| W nD tk
rl } z(tjdkrZtd||jj|f   W Y d d }~X nX W d Q R X W d Q R X d S )N)datar   z%-32r - %s: %s)	subTestassertRaisesloadsBaseExceptionr   verboseprint	__class__r%   )r   errorsrc   excr   r   r   check_unpickling_error  s    
z,AbstractUnpickleTests.check_unpickling_errorc             C   s   | j | j| jt d S )N)rb   	_testdatarf   DATA0)r   r   r   r   test_load_from_data0  s    z*AbstractUnpickleTests.test_load_from_data0c             C   s   | j | j| jt d S )N)rb   rn   rf   DATA1)r   r   r   r   test_load_from_data1  s    z*AbstractUnpickleTests.test_load_from_data1c             C   s   | j | j| jt d S )N)rb   rn   rf   DATA2)r   r   r   r   test_load_from_data2  s    z*AbstractUnpickleTests.test_load_from_data2c             C   s   | j | j| jt d S )N)rb   rn   rf   DATA3)r   r   r   r   test_load_from_data3  s    z*AbstractUnpickleTests.test_load_from_data3c             C   s   | j | j| jt d S )N)rb   rn   rf   DATA4)r   r   r   r   test_load_from_data4  s    z*AbstractUnpickleTests.test_load_from_data4c             C   s   xt f ftdftf fgD ]z\}}|jjd}djd|}| j|| | j| djd|}| j|| | j| djd|}| j|| | j| qW d S )Nr@   asciis   (i__main__
X
p0
(dp1
b.   Xs   (c__main__
X
q oq}qb.s   (c__main__
X
q oq}qb.)r@   )r1   r5   r7   r%   encodereplacerb   rf   )r   Xr   ZxnameZpickle0Zpickle1Zpickle2r   r   r   test_load_classic_instance  s     z0AbstractUnpickleTests.test_load_classic_instancec             C   sV   d}dt |jd d }| j|}| j|| dt |jd d }| jt| d S )	Nr   ?      Iry   s   
.s   JUNK
.l            l    )r?   r{   rf   rb   rm   
ValueError)r   Zmaxint64rc   gotr   r   r   test_maxint64  s    
z#AbstractUnpickleTests.test_maxint64c             C   s\  | j t}| j|tddg | j t}| jt|ttd | jt|ttd | j t}| jt|t	 | jt|j
 dg | j|d jd x:tD ]2}tjd|jjd}| j |}| jt|| qW | j tjdd	}| jt|t | j t}| jt|t | j|jd
 | j|jd | j|jd | j|jd | j|jd d S )Nr   r   r   rP   keyr;      ?ry   s   StandardErrorrR   Zbad)rf   DATA_SETr]   setDATA_XRANGErG   rangelistDATA_COOKIEr   keysr;   python2_exceptions_without_argsexception_pickler|   r%   r{   r^   	Exception
DATA_UEERRUnicodeEncodeErrorobjectencodingstartendreason)r   loadedrl   rc   r   r   r   test_unpickle_from_2x  s,    





z+AbstractUnpickleTests.test_unpickle_from_2xc             C   sF   | j | jdddd | j | jdddd | j | jdddd d S )Ns   S'a\x00\xa0'
.bytes)r   s   a s   Ua .s   Ua .)r]   rf   )r   r   r   r   test_load_python2_str_as_bytes&  s    


z4AbstractUnpickleTests.test_load_python2_str_as_bytesc             C   sF   | j | jdddd | j | jdddd | j | jdddd d S )Ns	   V\u03c0
.r   )r   u   πs   X   π.s
   X   π.)r]   rf   )r   r   r   r    test_load_python2_unicode_as_str1  s    


z6AbstractUnpickleTests.test_load_python2_unicode_as_strc             C   s:   | j | jtjtjdd dd  tj dddd  d S )Nz<Ii,     xr   )r   )r]   rf   r   Z	BINSTRINGstructpackSTOP)r   r   r   r   #test_load_long_python2_str_as_bytes<  s    z9AbstractUnpickleTests.test_load_long_python2_str_as_bytesc             C   s\   | j | jd | j| jdd | j| jdd | j| jdd | j| jdd d S )Ns   N.s   .Ts   .Fs   I01
.s   I00
.)ZassertIsNonerf   r^   )r   r   r   r   test_constantsC  s
    z$AbstractUnpickleTests.test_constantsc             C   s   | j ddd}| j|d d S )Ns   U q .zkoi8-r)r    )rf   r]   )r   emptyr   r   r   test_empty_bytestringJ  s    z+AbstractUnpickleTests.test_empty_bytestringc             C   s   d}| j | j|d d S )Ns	   C€ .s   € )r]   rf   )r   dumpedr   r   r   test_short_binbytesO  s    z)AbstractUnpickleTests.test_short_binbytesc             C   s   d}| j | j|d d S )Ns   B   € .s   € )r]   rf   )r   r   r   r   r   test_binbytesS  s    z#AbstractUnpickleTests.test_binbytesc             C   s   d}| j tjtf| d S )Ns   Bxyzq .)rm   r   UnpicklingErrorOverflowError)r   r   r   r   r   test_negative_32b_binbytesW  s    z0AbstractUnpickleTests.test_negative_32b_binbytesc             C   s   d}| j tjtf| d S )Ns   Xxyzq .)rm   r   r   r   )r   r   r   r   r   test_negative_32b_binunicode^  s    z2AbstractUnpickleTests.test_negative_32b_binunicodec             C   s   d}| j | j|d d S )Ns	   € .u   € )r]   rf   )r   r   r   r   r   test_short_binunicodee  s    z+AbstractUnpickleTests.test_short_binunicodec             C   s&   | j td | jddg| jd d S )Ns   g0
p0d   s   ((Kdtp0
h l.)))r   )r   )rm   KeyErrorrb   rf   )r   r   r   r   test_misc_geti  s    
z#AbstractUnpickleTests.test_misc_getc             C   s   d}| j | j|d d S )Ns          € .s   € )r]   rf   )r   r   r   r   r   test_binbytes8n  s    z$AbstractUnpickleTests.test_binbytes8c             C   s   d}| j | j|d d S )Ns          € .u   € )r]   rf   )r   r   r   r   r   test_binunicode8r  s    z&AbstractUnpickleTests.test_binunicode8c             C   s   d}| j tjtf| d S )Ns         € .)rm   r   r   r   )r   r   r   r   r   test_large_32b_binbytes8v  s    z.AbstractUnpickleTests.test_large_32b_binbytes8c             C   s   d}| j tjtf| d S )Ns         € .)rm   r   r   r   )r   r   r   r   r   test_large_32b_binunicode8|  s    z0AbstractUnpickleTests.test_large_32b_binunicode8c             C   s8   d}| j |}| j|g fd  | j|d |d  d S )Ns   ((lp100000
g100000
t.r   r   r   )rf   r]   r^   )r   pickled	unpickledr   r   r   test_get  s    
zAbstractUnpickleTests.test_getc             C   s8   d}| j |}| j|g fd  | j|d |d  d S )Ns   (]qht.r   r   r   )rf   r]   r^   )r   r   r   r   r   r   test_binget  s    
z!AbstractUnpickleTests.test_bingetc             C   s8   d}| j |}| j|g fd  | j|d |d  d S )Ns   (]r   j   t.r   r   r   )rf   r]   r^   )r   r   r   r   r   r   test_long_binget  s    
z&AbstractUnpickleTests.test_long_bingetc             C   s8   d}| j |}| j|g fd  | j|d |d  d S )Ns   ((l2t.r   r   r   )rf   r]   r^   )r   r   r   r   r   r   test_dup  s    
zAbstractUnpickleTests.test_dupc             C   s   d}| j t| d S )Ns   Va
p-1
.)rm   r   )r   r   r   r   r   test_negative_put  s    z'AbstractUnpickleTests.test_negative_putc             C   s   d}| j t| d S )Ns   X   ar.)rm   r   )r   r   r   r   r   test_negative_32b_binput  s    z.AbstractUnpickleTests.test_negative_32b_binputc             C   s   | j td d S )Ns   S'\'
.)rm   r   )r   r   r   r   test_badly_escaped_string  s    z/AbstractUnpickleTests.test_badly_escaped_stringc             C   s>   ddddddddd	d
dddg}x|D ]}| j tj| q$W d S )Ns   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.)rm   r   r   )r   
badpicklespr   r   r   test_badly_quoted_string  s    
z.AbstractUnpickleTests.test_badly_quoted_stringc             C   s4   ddd	d
g}x"|D ]\}}| j | j|| qW d S )N   S''
.r      S""
.   S"\n"
.
   S'\n'
.)r   r   )r   r   )r   r   )r   r   )r]   rf   )r   Zgoodpicklesr   expectedr   r   r   test_correctly_quoted_string  s    z2AbstractUnpickleTests.test_correctly_quoted_stringc             C   s   d}| j | j|d d S )Ns          I42
.*   )r]   rf   )r   r   r   r   r   test_frame_readline  s    z)AbstractUnpickleTests.test_frame_readlinec             C   s  d}| j |}| jt|t | j|tdd | jt|ddddddg d	}| j| j |tj d
}| j| j |tj	 xBdD ]:}d| d }| j |}| jt|t
 | jt|d qW xJdD ]B}d| d }| j |}| jt|tj | j|tjddi qW d S )Ns   c__builtin__
xrange
KKKR.r      r         rP      s   c__builtin__
reduce
.s   cwhichdb
whichdb
.	   Exception   StandardErrors   cexceptions
s	   
UughR.Zugh   UserDict   IterableUserDicts   (cUserDict
s   
o}Udata}KKssb.)r   r   )r   r   )rf   r^   rG   r   r]   r   	functoolsreducedbmwhichdbr   r?   collectionsUserDict)r   r   r   rK   r   r   r   test_compat_unpickle  s(    




z*AbstractUnpickleTests.test_compat_unpicklec          ,   C   s|   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,}x|D ]}| j | j| qbW 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
   )rm   bad_stack_errors)r   r   r   r   r   r   test_bad_stack  s\    
z$AbstractUnpickleTests.test_bad_stackc             C   s`   ddddddddd	d
ddddddddddddddddddddg}x|D ]}| j | j| qFW d S )Ns   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()rm   r   )r   r   r   r   r   r   test_bad_mark  s@    
z#AbstractUnpickleTests.test_bad_markc          Q   C   s   | j td | j td ddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSgQ}x|D ]}| j | j| qW d S )TN       N   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   Vabcrz   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
          N)rm   EOFErrorZtruncated_errors)r   r   r   r   r   r   test_truncated_data>  s    
z)AbstractUnpickleTests.test_truncated_data)N)-r%   r&   r'   rX   rn   rb   rm   rp   rr   rt   rv   rx   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   r   r   rY     sP   
9
2'rY   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
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d,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%e&d@dAdBdCdD Z'dEdF Z(dGdH Z)dIdJ Z*dKdL Z+dMdN Z,dOdP Z-dQdR Z.dSdT Z/dUdV Z0dWdX Z1dYdZ Z2d[d\ Z3d]d^ Z4d_d` Z5dadb Z6dcdd Z7dedf Z8dgdh Z9didj Z:dkdl Z;dmdn Z<dodp Z=dqdr Z>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCd}d~ ZDdd ZEdd ZFdd ZGdd ZHdd ZIeJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dS )AbstractPickleTestsFc             C   s   d S )Nr   )r   r   r   r   setUp  s    zAbstractPickleTests.setUpc             C   s   xt D ]}td}| j||}| j|}| j|| df f}| j||}| j|}| j|| td|}| j||}| j|}| j|| qW d S )Nr   r   )	protocolsr>   dumpsrf   rb   rA   )r   protor@   srW   r   r   r   	test_misc  s    




zAbstractPickleTests.test_miscc             C   s:   | j }x.tD ]&}| j||}| j|}| j|| qW d S )N)rn   r  r  rf   rb   )r   r   r  r  r   r   r   r   test_roundtrip_equality  s
    

z+AbstractPickleTests.test_roundtrip_equalityc             C   sn   ddl m} ddlm} xPdtfdtffD ]<\}}| j| j|}| }|||d |j }| j	|| q*W d S )Nr   )StringIO)disr   )out)
r!   r  r   r  	DATA0_DIS	DATA1_DISr  rn   getvaluer]   )r   r  r  r  r   r  Zfileliker   r   r   r   dont_test_disassembly  s    z)AbstractPickleTests.dont_test_disassemblyc             C   sb   g }|j | xNtD ]F}| j||}| j|}| j|t | jt|d | j|d | qW d S )Nr   r   )	rU   r  r  rf   assertIsInstancer   r]   lenr^   )r   lr  r  r@   r   r   r   test_recursive_list  s    


z'AbstractPickleTests.test_recursive_listc             C   s   g f}|d j | xvtD ]n}| j||}| j|}| j|t | jt|d | j|d t | jt|d d | j	|d d | qW d S )Nr   r   )
rU   r  r  rf   r  tupler]   r  r   r^   )r   tr  r  r@   r   r   r   test_recursive_tuple_and_list  s    

z1AbstractPickleTests.test_recursive_tuple_and_listc             C   sf   i }||d< xTt D ]L}| j||}| j|}| j|t | jt|j dg | j|d | qW d S )Nr   )	r  r  rf   r  rJ   r]   r   r   r^   )r   dr  r  r@   r   r   r   test_recursive_dict  s    

z'AbstractPickleTests.test_recursive_dictc             C   s   i }t |}d||< xttD ]l}| j||}| j|}| j|t | jt|j d | jt	|j d t  | j
t	|j d j| qW d S )Nr   r   )r:   r  r  rf   r  rJ   r]   r  r   r   r^   r;   )r   r#  kr  r  r@   r   r   r   test_recursive_dict_key  s    

z+AbstractPickleTests.test_recursive_dict_keyc             C   s   t  }t|}|j| xttdtjd D ]`}| j||}| j|}| j|t  | j	t
|d | jt|d t | jt|d j| q*W d S )Nr   r   r   )r   r:   addr   r   HIGHEST_PROTOCOLr  rf   r  r]   r  r   r^   r;   )r   rW   r%  r  r  r@   r   r   r   test_recursive_set  s    

z&AbstractPickleTests.test_recursive_setc             C   sp   t  }|j| xZtdtjd D ]F}| j||}| j|}| j|t  | jt	|d | j
|d | q"W d S )Nr   r   r   )MyListrU   r   r   r(  r  rf   r  r]   r  r^   )r   rW   r  r  r@   r   r   r   test_recursive_list_subclass
  s    

z0AbstractPickleTests.test_recursive_list_subclassc             C   st   t  }||d< x`tdtjd D ]L}| j||}| j|}| j|t  | jt|j	 dg | j
|d | q W d S )Nr   r   )MyDictr   r   r(  r  rf   r  r]   r   r   r^   )r   r#  r  r  r@   r   r   r   test_recursive_dict_subclass  s    
z0AbstractPickleTests.test_recursive_dict_subclassc             C   s   t  }t|}d||< xtdtjd D ]p}| j||}| j|}| j|t  | jt	t
|j d | jt
|j d t | jt
|j d j| q(W d S )Nr   r   r   )r,  r:   r   r   r(  r  rf   r  r]   r  r   r   r^   r;   )r   r#  r%  r  r  r@   r   r   r    test_recursive_dict_subclass_key  s    
z4AbstractPickleTests.test_recursive_dict_subclass_keyc             C   sb   t  }||_xPtD ]H}| j||}| j|}| j|t  | jt|t| | j|j| qW d S )N)	r1   attrr  r  rf   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  }||_|j| xtD ]}| j||}| j|}| j|t | jt	|d | jt
|d t
| | jt|d jj dg | j|d jd |k q(W d S )Nr   r   )r1   r/  rU   r  r  rf   r  r   r]   r  r0  r   
assertTrue)r   r  r#  r1  r  r  r@   r   r   r   test_recursive_multi4  s    


z(AbstractPickleTests.test_recursive_multic             C   s   t  }||g}||_xltD ]d}| j||}| j|}| j|t| | jt|d | jt	|d t  | j
t	|d j| qW d S )Nr   r   )r9   r/  r  r  rf   r  rG   r]   r  r   r^   )r   factoryhrW   r  r  r@   r   r   r   #check_recursive_collection_and_instC  s    


z7AbstractPickleTests.check_recursive_collection_and_instc             C   s   | j t d S )N)r7  r   )r   r   r   r   test_recursive_list_and_instO  s    z0AbstractPickleTests.test_recursive_list_and_instc             C   s   | j t d S )N)r7  r   )r   r   r   r   test_recursive_tuple_and_instR  s    z1AbstractPickleTests.test_recursive_tuple_and_instc             C   s   | j tj d S )N)r7  rJ   fromkeys)r   r   r   r   test_recursive_dict_and_instU  s    z0AbstractPickleTests.test_recursive_dict_and_instc             C   s   | j t d S )N)r7  r   )r   r   r   r   test_recursive_set_and_instX  s    z/AbstractPickleTests.test_recursive_set_and_instc             C   s   | j t d S )N)r7  	frozenset)r   r   r   r   !test_recursive_frozenset_and_inst[  s    z5AbstractPickleTests.test_recursive_frozenset_and_instc             C   s   | j t d S )N)r7  r*  )r   r   r   r   %test_recursive_list_subclass_and_inst^  s    z9AbstractPickleTests.test_recursive_list_subclass_and_instc             C   s   | j t d S )N)r7  MyTuple)r   r   r   r   &test_recursive_tuple_subclass_and_insta  s    z:AbstractPickleTests.test_recursive_tuple_subclass_and_instc             C   s   | j tj d S )N)r7  r,  r:  )r   r   r   r   %test_recursive_dict_subclass_and_instd  s    z9AbstractPickleTests.test_recursive_dict_subclass_and_instc             C   s   | j t d S )N)r7  MySet)r   r   r   r   $test_recursive_set_subclass_and_instg  s    z8AbstractPickleTests.test_recursive_set_subclass_and_instc             C   s   | j t d S )N)r7  MyFrozenSet)r   r   r   r   *test_recursive_frozenset_subclass_and_instj  s    z>AbstractPickleTests.test_recursive_frozenset_subclass_and_instc             C   sT   dddddddg}x<t D ]4}x.|D ]&}| j||}| j|}| j|| q"W qW d S )Nr   z<\u>u   <\ሴ>z<
>z<\>u   <\𒍅>u   <>)r  r  rf   rb   )r   Zendcasesr  ur   Zu2r   r   r   test_unicodem  s    


z AbstractPickleTests.test_unicodec             C   s8   d}x.t D ]&}| j||}| j|}| j|| q
W d S )Nu   𒍅)r  r  rf   rb   )r   r!  r  r   Zt2r   r   r   test_unicode_high_planex  s
    

z+AbstractPickleTests.test_unicode_high_planec             C   s   xt D ]}x4dddd fD ]"}| j||}| j|| j| qW x8dd tdD D ]"}| j||}| j|| j| qTW x8dd tdD D ]"}| j||}| j|| j| qW qW d S )Nr   s   xyzr   c             S   s   g | ]}t |gqS r   )r   ).0r1  r   r   r   
<listcomp>  s    z2AbstractPickleTests.test_bytes.<locals>.<listcomp>   c             S   s   g | ]}t ||gqS r   )r   )rJ  r1  r   r   r   rK    s    )r  r  rb   rf   r   )r   r  r  r   r   r   r   
test_bytes  s    
zAbstractPickleTests.test_bytesc             C   s`   xZt D ]R}tj}xF|rVx4| |fD ]&}| j||}| j|}| j|| q"W |d? }qW qW d S )Nr   )r  sysmaxsizer  rf   rb   )r   r  r   r   r  Zn2r   r   r   	test_ints  s    

zAbstractPickleTests.test_intsc       	      C   s   xtt D ]l}xfdD ]^}d|> }xP|d ||d fD ]:}x4|| fD ]&}| j||}| j|}| j|| q@W q0W qW qW tdd}||d	> 7 }xD|| fD ]6}| j|d
}| j|}| jt|t | j|| qW d S )Nr         rN   rL  i  Zdeadbeeffeedface   i@B r            )r   rQ  rT  rU  rV  rW  )r  r  rf   rb   intr^   rG   r]   )	r   r  ZnbitsZnbaseZnposr   r   r   r   r   r   r   	test_long  s    




zAbstractPickleTests.test_longc             C   sn   ddddddddd	d
dg}|dd |D  }x<t D ]4}x.|D ]&}| j||}| j|}| j|| q<W q2W d S )Ng        g       g+ph  gZ*) g_D9g?g      ?gQ	@gm"wp@gWTDgꌠ9Y>)Fc             S   s   g | ]
}| qS r   r   )rJ  r@   r   r   r   rK    s    z2AbstractPickleTests.test_float.<locals>.<listcomp>)r  r  rf   rb   )r   Ztest_valuesr  r;   r   r   r   r   r   
test_float  s    


zAbstractPickleTests.test_floatLC_ALLZde_DEZfr_FRc             C   s    | j | jdddd d d S )Ng333333?r   r   s   F1.)r]   r  )r   r   r   r   test_float_format  s    z%AbstractPickleTests.test_float_formatc             C   s:   x4t D ],}t }| j||}| j|}| j|t qW d S )N)r  AAAr  rf   r]   REDUCE_A)r   r  instr   r   r   r   r   test_reduce  s
    

zAbstractPickleTests.test_reducec             C   s>   x8t D ]0}tdd}| j||}| j|}| j|| qW d S )Nr   r   )r  rA   r  rf   rb   )r   r  r_  r   r   r   r   r   test_getinitargs  s
    


z$AbstractPickleTests.test_getinitargsc             C   s>   t  }x2tD ]*}| j||}| j|}| j|j|j qW d S )N)rE   r  r  rf   r]   rj   )r   rB   r  r  rC   r   r   r   test_metaclass  s
    

z"AbstractPickleTests.test_metaclassc             C   sb   t dtf}tjttj xBtD ]:}| j||}| j|}| j	|| | j
t|t| q W d S )NZmy_dynamic_class)rI   r   r)   r   rF   r<   r  r  rf   r]   r^   rG   )r   rB   r  r  rC   r   r   r   test_dynamic_class  s    

z&AbstractPickleTests.test_dynamic_classc             C   s   dd l }dd l}|j }xtD ]}| j||}| j|}| j|| t|dr||j|j	}| j||}| j|}| j|| t|dr|j
|j	}| j||}| j|}| j|| qW d S )Nr   statstatvfs)timeosZ	localtimer  r  rf   rb   r_   rd  curdirre  )r   rf  rg  r!  r  r  rG  r   r   r   test_structseq  s"    





z"AbstractPickleTests.test_structseqc             C   s4   x.t D ]&}| jd|}| j|}| jd| qW d S )N.)r  r  rf   r^   )r   r  r  rG  r   r   r   test_ellipsis  s    

z!AbstractPickleTests.test_ellipsisc             C   s4   x.t D ]&}| jt|}| j|}| jt| qW d S )N)r  r  NotImplementedrf   r^   )r   r  r  rG  r   r   r   test_notimplemented  s    

z'AbstractPickleTests.test_notimplementedc             C   sT   d dt g}xD|D ]<}x6tD ].}| jt||}| j|}| jt|| qW qW d S )N.)rk  r  r  rG   rf   r^   )r   Z
singletonsZ	singletonr  r  rG  r   r   r   test_singleton_types  s    



z(AbstractPickleTests.test_singleton_typesc             C   s   xVt D ]N}| jd |}|dkr@tjt|g }| j|j| q| jttj|d qW t d d }tj	tj
 }tjt|g | }y| j| W n2 tk
r } z| jdt| W Y d d }~X nX | jd d S )Nr   r   r   zunsupported pickle protocolz0expected bad protocol number to raise ValueErrorrQ   )r  r  r   ZPROTOr   r3  
startswithr]   r   NONEr   rf   r   assertInr?   Zfail)r   r  r   Zproto_headerZoobZ
build_noneZ	badpickleerrr   r   r   
test_proto  s    
"zAbstractPickleTests.test_protoc             C   sP   d}xFt D ]>}| j||}| j|}| j|| | jttj||dk q
W d S )Nl   UJ^w,3|	 r   )r  r  rf   rb   r]   r   r   ZLONG1)r   r@   r  r  rW   r   r   r   
test_long1  s    

zAbstractPickleTests.test_long1c             C   sT   dd> }xFt D ]>}| j||}| j|}| j|| | jttj||dk qW d S )Nl   UJ^w,3|	 rL  rQ  r   i   )r  r  rf   rb   r]   r   r   ZLONG4)r   r@   r  r  rW   r   r   r   
test_long4  s    

zAbstractPickleTests.test_long4c          (   C   s  dt jdt jdt jd	t jd
t jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt jdt ji}f }d}d}d}d}xntD ]f}x`|||||fD ]N}| j||}	| j|	}
| j	||
 |t
|dt|f }| jt||	  qW qW 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   )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   ZTUPLEZEMPTY_TUPLEZTUPLE1ZTUPLE2ZTUPLE3r  r  rf   rb   minr  r3  r   )r   expected_opcoderB   rC   rV   r#  er  r@   r  rW   r   r   r   r   test_short_tuples'  s@    


z%AbstractPickleTests.test_short_tuplesc             C   s   dt jdt jd	t jd
t jdt jdt jdt jdt jdt jdt jdt jdt ji}xjtD ]b}x\dD ]T}| j||}| j|}| j||k||||f |t	|d|f }| jt
|| q\W qRW d S )Nr   r   r   r   TF)r   N)r   N)r   N)r   N)r   T)r   T)r   T)r   T)r   F)r   F)r   F)r   F)NFT)r   ro  ZINTZNEWTRUEZNEWFALSEr  r  rf   r3  ru  r   )r   rv  r  r@   r  rW   r   r   r   r   test_singletonsN  s&    



z#AbstractPickleTests.test_singletonsc             C   sN   t dddg}d|_d|_x.tD ]&}| j||}| j|}| j|| q W d S )Nr   r   r   r   hello)r@  rR   rS   r  r  rf   rb   )r   r@   r  r  rW   r   r   r   test_newobj_tupleg  s    

z%AbstractPickleTests.test_newobj_tuplec             C   sN   t dddg}d|_d|_x.tD ]&}| j||}| j|}| j|| q W d S )Nr   r   r   r   rz  )r*  rR   rS   r  r  rf   rb   )r   r@   r  r  rW   r   r   r   test_newobj_listp  s    

z$AbstractPickleTests.test_newobj_listc          	   C   s   xt D ]}xtD ]x}|j}||j}d|_| j||}| j|}|||||t|f}| j|| | j	||||| | j	|j
|j
| qW qW d S )Nr   )r  	myclasses__base__samplerR   r  rf   rG   rb   r]   r2   )r   r  r1   Br@   r  rW   detailr   r   r   test_newobj_genericy  s    



z'AbstractPickleTests.test_newobj_genericc          	   C   s   t d d  }xttfD ]}|j| qW xtD ]}x|D ]}|j}||j}d|_tj	|}| j
||}| j|}	| jt|	t| |||||	t|	f}
| j||||	|
 | j|j|	j|
 q8W q.W d S )Nr   )r}  MyIntr@  remover  r~  r  rR   weakrefproxyr  rf   r]   rG   r2   )r   classesrV   r  r1   r  r@   r   r  rW   r  r   r   r   test_newobj_proxies  s    




z'AbstractPickleTests.test_newobj_proxiesc          
   C   sD   t }t jt }| j|d}zda | jttjf| j| W d |a X d S )Nr   r   )SimpleNewObj__new__r  re   	TypeErrorr   r   rf   )r   ZsaveorC   r   r   r   test_newobj_not_class  s    
z)AbstractPickleTests.test_newobj_not_classc             C   s   t |}ztjtd| tdddg}d|_d|_| j|d}| jtj	d| | jd| | j
t|| | j|}| j|| | j|d}| jtj	d| | jd| | jt||d	t| | j|}| j|| W d |j  X d S )
Nr*  r   r   r   r   rz  zutf-8s   MyListT)r(   r)   r/   r%   r*  rR   rS   r  rp  r{   assertFalser   rf   rb   ZassertNotInr]   reprr0   )r   Zextcodeopcoderw  r@   s1rW   s2r   r   r   produce_global_ext  s&    

z&AbstractPickleTests.produce_global_extc             C   s    | j dtj | j dtj d S )Nr   rN   )r  r   ZEXT1)r   r   r   r   test_global_ext1  s    z$AbstractPickleTests.test_global_ext1c             C   s.   | j dtj | j dtj | j dtj d S )NrL  i  iͫ  )r  r   ZEXT2)r   r   r   r   test_global_ext2  s    z$AbstractPickleTests.test_global_ext2c             C   s.   | j dtj | j dtj | j dtj d S )Ni   iiͫ)r  r   ZEXT4)r   r   r   r   test_global_ext4  s    z$AbstractPickleTests.test_global_ext4c             C   s   d}t t|}xJtD ]B}| j||}| j|}| j|| ttj|}| j	||dk qW d}t t|}x^tD ]V}| j||}| j|}| j|| ttj|}|dkr| j	|d qr| j
|dk qrW d S )N
   r   i	  r   )r   r   r  r  rf   rb   r   r   APPENDSr]   r3  )r   r   r@   r  r  rW   Znum_appendsr   r   r   test_list_chunking  s$    



z&AbstractPickleTests.test_list_chunkingc             C   s   d}t jt|}xVtD ]N}| j||}| j|t | j|}| j|| t	t
j|}| j||dk qW d}t jt|}x^tD ]V}| j||}| j|}| j|| t	t
j|}|dkr| j|d q| j|dk qW d S )Nr  r   i	  r   )rJ   r:  r   r  r  r  r   rf   rb   r   r   SETITEMSr]   r3  )r   r   r@   r  r  rW   Znum_setitemsr   r   r   test_dict_chunking  s&    



z&AbstractPickleTests.test_dict_chunkingc             C   s   d}t t|}x\tD ]T}| j||}| j|}| j|| ttj|}|dk r^| j	|d q| j	|d qW d}t t|}x\tD ]T}| j||}| j|}| j|| ttj|}|dk r| j	|d q| j
|d qW d S )Nr  r   r   r   i	  r   )r   r   r  r  rf   rb   r   r   ZADDITEMSr]   assertGreaterEqual)r   r   r@   r  r  rW   Znum_additemsr   r   r   test_set_chunking   s(    



z%AbstractPickleTests.test_set_chunkingc             C   s   t jt d}d|_xtD ]}| j|dt | j||}|dk rL| jd| n| jd| | jtt	j
|d|k | jtt	j| | j|}| j|| W d Q R X qW d S )Ni  i  )r  r   s   
L64206s   Mr   )r  r  rO   r  rd   r  rp  r]   r   r   NEWOBJr  	NEWOBJ_EXrf   rb   )r   r@   r  r  rW   r   r   r   test_simple_newobj  s    


z&AbstractPickleTests.test_simple_newobjc             C   s   t jt d}d|_xtD ]}| j|d | j||}|dk rL| jd| n8|dk rb| jd| n"|dk rx| jd	| n| jd
| | jtt	j
|d|k | jtt	j| | j|}| j|| W d Q R X qW d S )Ni  i  )r  r   s   
L64206r   s   Mr   s	   X   FACEs   FACE)ComplexNewObjr  rO   r  rd   r  rp  r]   r   r   r  r  r  rf   rb   )r   r@   r  r  rW   r   r   r   test_complex_newobj)  s"    


z'AbstractPickleTests.test_complex_newobjc             C   s   t jt d}d|_xtD ]}| j|d | j||}|dk rL| jd| n8|dk rb| jd| n"|dk rx| jd	| n| jd
| | jtt	j
| | jtt	j|d|k | j|}| j|| W d Q R X qW d S )Ni  i  )r  r   s   
L64206r   s   Mr   s	   X   FACEs   FACE)ComplexNewObjExr  rO   r  rd   r  rp  r  r   r   r  r]   r  rf   rb   )r   r@   r  r  rW   r   r   r   test_complex_newobj_ex=  s"    


z*AbstractPickleTests.test_complex_newobj_exc             C   s@   t dddg}d|_d|_| j|d}| j|}| j|| d S )Nr   r   r   r   rz  )SlotListrR   rS   r  rf   rb   )r   r@   r  rW   r   r   r   test_newobj_list_slotsQ  s    
z*AbstractPickleTests.test_newobj_list_slotsc             C   sX   xRt D ]J}t }| j|jd | j||}| j|jd | j|}| j|jd qW d S )Nr   r   )r  REX_oner]   _reduce_calledr  rf   )r   r  r@   r  rW   r   r   r   'test_reduce_overrides_default_reduce_exY  s    

z;AbstractPickleTests.test_reduce_overrides_default_reduce_exc             C   sX   xRt D ]J}t }| j|jd  | j||}| j|j| | j|}| j|jd  qW d S )N)r  REX_twor]   _protor  rf   )r   r  r@   r  rW   r   r   r   test_reduce_ex_calledb  s    

z)AbstractPickleTests.test_reduce_ex_calledc             C   sX   xRt D ]J}t }| j|jd  | j||}| j|j| | j|}| j|jd  qW d S )N)r  	REX_threer]   r  r  rf   )r   r  r@   r  rW   r   r   r   test_reduce_ex_overrides_reducek  s    

z3AbstractPickleTests.test_reduce_ex_overrides_reducec             C   sX   xRt D ]J}t }| j|jd  | j||}| j|j| | j|}| j|j| qW d S )N)r  REX_fourr]   r  r  rf   )r   r  r@   r  rW   r   r   r   test_reduce_ex_calls_baset  s    

z-AbstractPickleTests.test_reduce_ex_calls_basec             C   sX   xRt D ]J}t }| j|jd | j||}| j|jd | j|}| j|jd qW d S )Nr   r   )r  REX_fiver]   r  r  rf   )r   r  r@   r  rW   r   r   r   test_reduce_calls_base}  s    

z*AbstractPickleTests.test_reduce_calls_basec             C   s*   t  }xtD ]}| jt| j|| qW d S )N)
BadGetattrr  re   RuntimeErrorr  )r   r@   r  r   r   r   test_bad_getattr  s    
z$AbstractPickleTests.test_bad_getattrc             C   s   G dd dt }G dd dt }x`tD ]X}y| j| | W n tjk
rR   Y nX y| j| | W q& tjk
r|   Y q&X q&W d S )Nc               @   s   e Zd Zdd ZdS )z7AbstractPickleTests.test_reduce_bad_iterator.<locals>.Cc             S   s   t f d g d fS )N)r   )r   r   r   r   r<     s    zBAbstractPickleTests.test_reduce_bad_iterator.<locals>.C.__reduce__N)r%   r&   r'   r<   r   r   r   r   r1     s   r1   c               @   s   e Zd Zdd ZdS )z7AbstractPickleTests.test_reduce_bad_iterator.<locals>.Dc             S   s   t f d d g fS )N)rJ   )r   r   r   r   r<     s    zBAbstractPickleTests.test_reduce_bad_iterator.<locals>.D.__reduce__N)r%   r&   r'   r<   r   r   r   r   r5     s   r5   )r   r  r  r   PicklingError)r   r1   r5   r  r   r   r   test_reduce_bad_iterator  s    
z,AbstractPickleTests.test_reduce_bad_iteratorc             C   s   dd t dD }tdd |D }t|t|t|g}xFtD ]>}| j|d( | j||}| j|}| j|| W d Q R X q@W d S )Nc             s   s   | ]}d t | V  qdS )ZaaaN)r?   )rJ  r1  r   r   r   	<genexpr>  s    z>AbstractPickleTests.test_many_puts_and_gets.<locals>.<genexpr>r   c             s   s   | ]}|d ddgfV  qdS )r   rP   r   Nr   )rJ  r%  r   r   r   r    s    )r  )r   rJ   r  rd   r  rf   rb   )r   r   Z
large_dictra   r  r   r   r   r   r   test_many_puts_and_gets  s    

z+AbstractPickleTests.test_many_puts_and_getsc       	      C   sr   xlt D ]d}t }d|_d|_| j||}| j|}t|j}t|j}x"t||D ]\}}| j	|| qRW qW d S )Nr   rz  )
r  r1   rR   rS   r  rf   sortedr2   zipr^   )	r   r  r@   r  rW   Zx_keysZy_keysZx_keyZy_keyr   r   r   test_attribute_name_interning  s    



z1AbstractPickleTests.test_attribute_name_interningc             C   s>   | j tdd}| j|t | j tdgd}| j|t d S )NrP   r   r   )r  r   r]   r   r   	DATA_SET2)r   r   r   r   r   test_pickle_to_2x  s    z%AbstractPickleTests.test_pickle_to_2xc             C   sX   xRt D ]J}dtdd tf}| j||}| j|}| jt|t| | j|| qW d S )Nr   s   xy   i   i x  )r  ru  r  r  rf   r]   )r   r  rc   r   r   r   r   r   test_large_pickles  s    

z&AbstractPickleTests.test_large_picklesc                s   xt D ]z j dd  fddtdD }ttt|}jt||  dkrvx|D ]}jt	t
j| q\W W d Q R X qW d S )N)r  c                s   g | ]}j d |  qS )r   )r  )rJ  r   )r  r   r   r   rK    s    zDAbstractPickleTests.test_int_pickling_efficiency.<locals>.<listcomp>F   r   )r  rd   r   r   mapr  r]   r  r  r   r   ZLONG)r   ZpicklesZsizesr   r   )r  r   r   test_int_pickling_efficiency  s    

z0AbstractPickleTests.test_int_pickling_efficiencyc             C   s6   | j ||}| jt|| | j|}| j|| d S )N)r  r3  r   rf   r]   )r   ra   r  r  r   r   r   r   r   _check_pickling_with_opcode  s    
z/AbstractPickleTests._check_pickling_with_opcodec             C   sJ   t dddg}x6tD ].}|dkr2| j|tj| q| j|tj| qW d S )Nr   r   r   r   )REX_sixr  r  r   ZAPPENDr  )r   ra   r  r   r   r   test_appends_on_non_lists  s
    
z-AbstractPickleTests.test_appends_on_non_listsc             C   sL   t dddd}x6tD ].}|dkr4| j|tj| q| j|tj| qW d S )	Nr   r   r   )r   r   r   r   rQ   )	REX_sevenr  r  r   ZSETITEMr  )r   ra   r  r   r   r   test_setitems_on_non_dicts  s
    
z.AbstractPickleTests.test_setitems_on_non_dicts@   i   c       	      C   s|   d}d }}xNt j|D ]@\}}}|jdkr.q|dk	rN|| | }| j|| || }}qW t|| | }| j|| dS )zO
        Check the arguments of FRAME opcodes in a protocol 4+ pickle.
        	   NFRAME)r   r   rK   r]   r  )	r   r   frame_opcode_sizeZlast_argZlast_posr   r6   pos
frame_sizer   r   r   check_frame_opcodes  s    
z'AbstractPickleTests.check_frame_opcodesc             C   s   t td}xtdtjd D ]}| j|dj | j||}| j|}| j|| t|t	tj
| }| j|| jd  | j|| jd  | j| W d Q R X qW d S )Nr  rP   r   r   )r  r   i )r   r   r   r(  rd   r  rf   r]   r  r   r  ZassertGreaterFRAME_SIZE_TARGETZassertLessEqualr  )r   ra   r  r   r   Zbytes_per_framer   r   r   test_framing_many_objects  s    
z-AbstractPickleTests.test_framing_many_objectsc             C   s   d}d| d| d| g}xxt dtjd D ]d}| j|dN | j||}| j|}| j|| ttj|}| j	|t
| | j| W d Q R X q,W d S )	Ni   r      y   zr   r   )r  i   )r   r   r(  rd   r  rf   r]   r   r  r  r  r  )r   Nra   r  r   r   Z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} fddt|D }xtdt jd D ]z}| j||}||}| jtt j|d | j|| j| ||d	d
 }| j	tt j|tt j| | j|| j| qJW d S )Nr   c       
      S   s   g }d}x,t j| D ]\}}}|jdkr|j| qW t }d}x:t|D ].\}	}|r`||	r`qJ|| || 7 }|| }qJW || |d 7 }|S )z+Remove frame opcodes from the given pickle.r  r  r   N)r   r   rK   rU   	bytearray	enumerate)
r   Z
keep_frameZframe_startsr  r  _r  Z	newpickleZlast_frame_endr1  r   r   r   remove_frames-  s    
z?AbstractPickleTests.test_optional_frames.<locals>.remove_frames   c                s   g | ]}t |g  qS r   )r   )rJ  r1  )r  r   r   rK  B  s    z<AbstractPickleTests.test_optional_frames.<locals>.<listcomp>r   r   c             S   s   | d S )Nr   r   )r1  r   r   r   <lambda>K  s    z:AbstractPickleTests.test_optional_frames.<locals>.<lambda>)N)
r   r(  r  r   r  r]   r   r  rf   Z
assertLess)r   r  Z
num_framesra   r  r   Zframeless_pickleZsome_frames_pickler   )r  r   test_optional_frames)  s    

z(AbstractPickleTests.test_optional_framesc             C   s   G dd da xnttjd D ]\}xVt jt jjt jjjgD ]<}| j||d$ | j| j	||}| j
|| W d Q R X q:W qW 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.CN)r%   r&   r'   r   r   r   r   r1   U  s   r1   N)r%   r&   r'   r1   r   r   r   r   r  T  s   r  N)r%   r&   r'   r  r   r   r   r   AS  s   r  N)r%   r&   r'   r  r   r   r   r   r  R  s   r  r   )r  ra   )r  r   r   r(  r  r  r1   rd   rf   r  r^   )r   r  ra   r   r   r   r   test_nested_namesP  s    z%AbstractPickleTests.test_nested_namesc             C   sx   G dd da tjt j t _dt _xLttjd D ]:}| j	|d$ | j
| jt |}| j|t  W d Q R X q2W t `d S )Nc               @   s   e Zd ZdS )	RecursiveN)r%   r&   r'   r   r   r   r   r  _  s   r  zRecursive.mod.Recursiver   )r  )r  rN  modulesr&   modr'   r   r   r(  rd   rf   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 jf}t jt ft jjt jff}xtt	j
d D ]}xH|D ]@}| j||d( | j| j||}| j| |  W d Q R X qfW xV|D ]N\}}| }| j||d, | j| j||}| j|||| W d Q R X qW q\W d 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  l  s    zPyMethodsTest.cheesec             S   s   | t kstdS )Nwine)r  AssertionError)clsr   r   r   r  o  s    zPyMethodsTest.winec             S   s   t | tstdS )Nbiscuits)
isinstancer  r  )r   r   r   r   r  s  s    zPyMethodsTest.biscuitsc               @   s0   e Zd ZdZedd Zedd Zdd ZdS )	zPyMethodsTest.NestedzNested classc               S   s   dS )Nketchupr   r   r   r   r   r  x  s    zPyMethodsTest.Nested.ketchupc             S   s   | t jkstdS )Nmaple)r  r  r  )r  r   r   r   r  {  s    zPyMethodsTest.Nested.maplec             S   s   t | tjstdS )Npie)r  r  r  r  )r   r   r   r   r    s    zPyMethodsTest.Nested.pieN)	r%   r&   r'   __doc__staticmethodr  classmethodr  r  r   r   r   r   r  v  s   r  N)	r%   r&   r'   r  r  r  r  r  r  r   r   r   r   r  k  s   r  r   )r  method)r  r  r  r  r  r  r  r  r   r   r(  rd   rf   r  r]   )r   Z
py_methodsZpy_unbound_methodsr  r  r   r  ra   r   r   r   test_py_methodsi  s&    
z#AbstractPickleTests.test_py_methodsc             C   s&  G dd dt adjdftjdfdddgjf ftjdddg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dddgjdftjtdddgdfftjdjdftjjtjddfff}xhttjd D ]V}xP|D ]H\}}| j||d, | j| j||}| j|| ||  W d Q R X qW qW d 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.NestedN)r%   r&   r'   r   r   r   r   r    s   r  N)r%   r&   r'   r?   r  r   r   r   r   r    s   r  abcdrV   r   r   r   rB   rC      abc   xyzZsweetrw  )r  r  )rV   )r  rV   )r   rB   r   rC   r   )r  r  )r  r  )r   )rw  )r   r  indexr?   __len__r   __contains__r   rJ   r:  r  	maketranscountr  r   r   r(  rd   rf   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j	 ddftj
 ddftj ddfg}x|D ]x\}}}xlt dD ]`}| jt||dD | j||}| jd||f j | | jt| j|t| W d Q R X q|W qhW d S )Nr   r   Z__builtin__ZxrangeZ123	itertoolsZimapr   r   
exceptionsr   r   ZIterableUserDictUserListr   defaultdictr   )rG   r  zc%s
%s)r   r  rX  r   r   r   r   r   r   r   r  r  rd   rG   r  rp  r{   r^   rf   )r   Ztestsvalr  rK   r  r   r   r   r   test_compat_pickle  s    


z&AbstractPickleTests.test_compat_picklec             C   s   dd }xFt dtjd D ]2}| jttjf tj| j|| W d Q R X qW |`	xFt dtjd D ]2}| jttjf tj| j|| W d Q R X qfW |j
|_xFt dtjd D ]2}| jttjf tj| j|| W d Q R X qW d S )Nc               S   s   d S )Nr   r   r   r   r   f  s    z6AbstractPickleTests.test_local_lookup_error.<locals>.fr   r   )r   r   r(  re   AttributeErrorr  r   r  r  r&   r'   r%   )r   r  r  r   r   r   test_local_lookup_error  s      z+AbstractPickleTests.test_local_lookup_errorNi   )`r%   r&   r'   Z	optimizedrY   rn   r  rb   r  r  r  r  r"  r$  r&  r)  r+  r-  r.  r2  r4  r7  r8  r9  r;  r<  r>  r?  rA  rB  rD  rF  rH  rI  rM  rP  rY  rZ  r   r\  r`  ra  rb  rc  ri  rj  rl  rm  rr  rs  rt  rx  ry  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    s   






	'							

	
'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memuseZdry_runc             C   st   dd| > }z\xVt D ]N}|dk r"q| j|d. | jttf | j||d W d Q R X W d Q R X qW W d d }X d S )Nr   rQ  r   )r  )protocol)r  rd   re   r   r   r  )r   r  rc   r  r   r   r   test_huge_long_32b  s    
*z$BigmemPickleTests.test_huge_long_32bg      @c             C   s   d|d  }zxt D ]|}|dk r"q| j|d\ zN| j||d}tjtjdt| }|j|}| j	|||t| |  W d d }X W d Q R X qW W d d }X d S )Ns   abcdr   r   )r  )r  z<I)
r  rd   r  r   ZBINBYTESr   r   r  r  r]   )r   r  rc   r  r   header
data_startr   r   r   test_huge_bytes_32b  s     

z%BigmemPickleTests.test_huge_bytes_32bc          !   C   s   d|d  }zxt D ]}|dk r"q| j|d |dkrb| jttf | j||d W d Q R X wzN| j||d}tjtj	dt
| }|j|}| j|||t
| |  W d d }X W d Q R X qW W d d }X d S )Ns   acbdr   r   )r  )r  z<Q)r  rd   re   r   r   r  r   Z	BINBYTES8r   r   r  r  r]   )r   r  rc   r  r   r  r  r   r   r   test_huge_bytes_64b	  s(    

z%BigmemPickleTests.test_huge_bytes_64brQ  c             C   s   d|d  }zxt D ]}|dkr"q| j|d zv| j||d}tjtjdt| }|jd}| j	|||t| |  | j	|j
dtd |jd t| W d d }X W d Q R X qW W d d }X d S )Nr  r   r   )r  )r  z<Is   abcd)r  rd   r  r   Z
BINUNICODEr   r   r  r  r]   rindex)r   r  rc   r  r   r  r  r   r   r   test_huge_str_32b-	  s$    

z#BigmemPickleTests.test_huge_str_32bc          !   C   s   d|d  }zxt D ]}|dkr"q| j|d |dk rb| jttf | j||d W d Q R X wzv| j||d}tjtj	dt
| }|jd}| j|||t
| |  | j|jdt
d |jd t
| W d d }X W d Q R X qW W d d }X d S )Nr  r   r   )r  )r  z<Qs   abcd)r  rd   re   r   r   r  r   ZBINUNICODE8r   r   r  r  r]   r  )r   r  rc   r  r   r  r  r   r   r   test_huge_str_64bH	  s,    

z#BigmemPickleTests.test_huge_str_64bN)r%   r&   r'   r
   r   r  r  r	   r  r  r  r   r   r   r   r
    s
   r
  c               @   s   e Zd ZdZdZdd ZdS )r  z4No __reduce_ex__ here, but inheriting it from objectr   c             C   s   d| _ tf fS )Nr   )r  r  )r   r   r   r   r<   i	  s    zREX_one.__reduce__N)r%   r&   r'   r  r  r<   r   r   r   r   r  f	  s   r  c               @   s   e Zd ZdZdZdd ZdS )r  z1No __reduce__ here, but inheriting it from objectNc             C   s   || _ tf fS )N)r  r  )r   r  r   r   r   __reduce_ex__p	  s    zREX_two.__reduce_ex__)r%   r&   r'   r  r  r  r   r   r   r   r  m	  s   r  c               @   s    e Zd ZdZdd Zdd ZdS )r  Nc             C   s   || _ tf fS )N)r  r  )r   r  r   r   r   r  v	  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   r<   y	  s    zREX_three.__reduce__)r%   r&   r'   r  r  r<   r   r   r   r   r  t	  s   r  c               @   s   e Zd ZdZdZdd ZdS )r  z(Calling base class method should succeedNc             C   s   || _ tj| |S )N)r  r   r  )r   r  r   r   r   r  	  s    zREX_four.__reduce_ex__)r%   r&   r'   r  r  r  r   r   r   r   r  |	  s   r  c               @   s   e Zd ZdZdZdd ZdS )r  z-This one used to fail with infinite recursionr   c             C   s   d| _ tj| S )Nr   )r  r   r<   )r   r   r   r   r<   	  s    zREX_five.__reduce__N)r%   r&   r'   r  r  r<   r   r   r   r   r  	  s   r  c               @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )r  z]This class is used to check the 4th argument (list iterator) of
    the reduce protocol.
    Nc             C   s   |d k	r|ng | _ d S )N)items)r   r  r   r   r   r-   	  s    zREX_six.__init__c             C   s   t | t |ko| j|jkS )N)rG   r  )r   r3   r   r   r   r4   	  s    zREX_six.__eq__c             C   s   | j j| d S )N)r  rU   )r   itemr   r   r   rU   	  s    zREX_six.appendc             C   s   t | f d t| jd fS )N)rG   iterr  )r   r   r   r   r<   	  s    zREX_six.__reduce__)N)r%   r&   r'   r  r-   r4   rU   r<   r   r   r   r   r  	  s
   
r  c               @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )r  z]This class is used to check the 5th argument (dict iterator) of
    the reduce protocol.
    Nc             C   s   |d k	r|ni | _ d S )N)table)r   r  r   r   r   r-   	  s    zREX_seven.__init__c             C   s   t | t |ko| j|jkS )N)rG   r  )r   r3   r   r   r   r4   	  s    zREX_seven.__eq__c             C   s   || j |< d S )N)r  )r   r   r;   r   r   r   __setitem__	  s    zREX_seven.__setitem__c             C   s   t | f d d t| jj fS )N)rG   r  r  r  )r   r   r   r   r<   	  s    zREX_seven.__reduce__)N)r%   r&   r'   r  r-   r4   r  r<   r   r   r   r   r  	  s
   
r  c               @   s   e Zd ZdZdS )r  r   N)r%   r&   r'   r  r   r   r   r   r  	  s   r  c               @   s   e Zd ZdZdS )MyFloatg      ?N)r%   r&   r'   r  r   r   r   r   r  	  s   r  c               @   s   e Zd ZdZdS )	MyComplexg      ?y                Ny      ?        )r%   r&   r'   r  r   r   r   r   r  	  s   r  c               @   s   e Zd ZdZdS )MyStrrz  N)r%   r&   r'   r  r   r   r   r   r  	  s   r  c               @   s   e Zd ZdZdS )	MyUnicodeu	   hello ሴN)r%   r&   r'   r  r   r   r   r   r  	  s   r  c               @   s   e Zd ZdZdS )r@  r   r   r   N)r   r   r   )r%   r&   r'   r  r   r   r   r   r@  	  s   r@  c               @   s   e Zd ZdddgZdS )r*  r   r   r   N)r%   r&   r'   r  r   r   r   r   r*  	  s   r*  c               @   s   e Zd ZdddZdS )r,  r   r   )rB   rC   N)r%   r&   r'   r  r   r   r   r   r,  	  s   r,  c               @   s   e Zd ZddhZdS )rC  rB   rC   N)r%   r&   r'   r  r   r   r   r   rC  	  s   rC  c               @   s   e Zd ZeddhZdS )rE  rB   rC   N)r%   r&   r'   r=  r  r   r   r   r   rE  	  s   rE  c               @   s   e Zd ZdgZdS )r  rR   N)r%   r&   r'   r[   r   r   r   r   r  	  s   r  c               @   s   e Zd Zdd Zdd ZdS )r  c             O   s   t dd S )Nz3SimpleNewObj.__init__() didn't expect to get called)r  )r   r   kwargsr   r   r   r-   	  s    zSimpleNewObj.__init__c             C   s   t | t |ko| j|jkS )N)rX  r2   )r   r3   r   r   r   r4   	  s    zSimpleNewObj.__eq__N)r%   r&   r'   r-   r4   r   r   r   r   r  	  s   r  c               @   s   e Zd Zdd ZdS )r  c             C   s   d|  dfS )Nz%XrS  r   )r   r   r   r   __getnewargs__	  s    zComplexNewObj.__getnewargs__N)r%   r&   r'   r   r   r   r   r   r  	  s   r  c               @   s   e Zd Zdd ZdS )r  c             C   s   d|  fddifS )Nz%XbaserS  r   )r   r   r   r   __getnewargs_ex__	  s    z!ComplexNewObjEx.__getnewargs_ex__N)r%   r&   r'   r"  r   r   r   r   r  	  s   r  c               @   s   e Zd Zdd ZdS )r  c             C   s
   | j  d S )N)rR   )r   r   r   r   r   __getattr__	  s    zBadGetattr.__getattr__N)r%   r&   r'   r#  r   r   r   r   r  	  s   r  c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )AbstractPickleModuleTestsc             C   sB   dd l }ttd}z|j  | jt| jd| W d |jt X d S )Nr   wb{   )rg  openr   closere   r   dumpr  )r   rg  r  r   r   r   test_dump_closed_file	  s    
z/AbstractPickleModuleTests.test_dump_closed_filec             C   sB   dd l }ttd}z|j  | jt| jd| W d |jt X d S )Nr   r%  r&  )rg  r'  r   r(  re   r   r)  r  )r   rg  r  r   r   r   test_load_closed_file	  s    
z/AbstractPickleModuleTests.test_load_closed_filec             C   sB   t j }di dg}| j|| |jd | j|}| j|| d S )Nr&  |   r   )r!   BytesIOr)  r#   loadr]   )r   streamrc   r   r   r   r   test_load_from_and_dump_to_file	  s    


z9AbstractPickleModuleTests.test_load_from_and_dump_to_filec             C   s   | j tjd d S )Nr   )r]   r   r(  )r   r   r   r   test_highest_protocol	  s    z/AbstractPickleModuleTests.test_highest_protocolc             C   s^   t j }| jd|d | jd|dd | jdd | jddd | j|d	 | j|d
d d S )Nr&  r   )filer  )r  rQ   rQ   rQ   rQ   rQ   rQ   )r!   r-  r)  r  Pickler)r   r  r   r   r   test_callapi
  s    z&AbstractPickleModuleTests.test_callapic             C   sN   G dd d| j }G dd d| j}| jtj| jd | j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 )Nr   )r   r   r   r   r-   
  s    zDAbstractPickleModuleTests.test_bad_init.<locals>.BadPickler.__init__N)r%   r&   r'   r-   r   r   r   r   
BadPickler
  s   r5  c               @   s   e Zd Zdd ZdS )z=AbstractPickleModuleTests.test_bad_init.<locals>.BadUnpicklerc             S   s   d S )Nr   )r   r   r   r   r-   
  s    zFAbstractPickleModuleTests.test_bad_init.<locals>.BadUnpickler.__init__N)r%   r&   r'   r-   r   r   r   r   BadUnpickler
  s   r6  r   )r3  Z	Unpicklerre   r   r  r)  r   r.  )r   r5  r6  r   r   r   test_bad_init
  s    z'AbstractPickleModuleTests.test_bad_initN)	r%   r&   r'   r*  r+  r0  r1  r4  r7  r   r   r   r   r$  	  s   		
r$  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  rX  id_countr?   false_count)r   r   r   r   r   persistent_id
  s    z,AbstractPersistentPicklerTests.persistent_idc             C   sD   |s|  j d7  _ dS |  jd7  _t|}|d dks<t|S d S )Nr   r9  r   r   )load_false_count
load_countrX  r  )r   Zoidr   r   r   r   persistent_load)
  s    z.AbstractPersistentPicklerTests.persistent_loadc             C   s   t tddg }xvtD ]n}d| _d| _d| _d| _| j| j| j	||| | j| jd | j| jd | j| jd | j| jd qW d S )Nr  r9  r   rP   r   )
r   r   r  r:  r;  r=  r>  r]   rf   r  )r   Lr  r   r   r   test_persistence3
  s    
z/AbstractPersistentPicklerTests.test_persistenceN)r%   r&   r'   r<  r?  rA  r   r   r   r   r8  
  s   

r8  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 )Nr   )r   ra   r   r   r   r<  C
  s    z4AbstractIdentityPersistentPicklerTests.persistent_idc             C   s   |S )Nr   )r   pidr   r   r   r?  F
  s    z6AbstractIdentityPersistentPicklerTests.persistent_loadc             C   s2   | j | j||}| j|t| | j|| d S )N)rf   r  r  rG   r]   )r   ra   r  r   r   r   r   _check_return_correct_typeI
  s    zAAbstractIdentityPersistentPicklerTests._check_return_correct_typec             C   sL   xFt D ]>}|dkr | jdd qx"dddd
tgD ]}| j|| q0W qW d S )Nr   rO   s   abc
zabc
r   g?g?rQ   gg*\()r  rD  r?   )r   r  ra   r   r   r   test_return_correct_typeN
  s
    
z?AbstractIdentityPersistentPicklerTests.test_return_correct_typec             C   sB   d}| j tj| j|d tj|jd d }| j tj| j| d S )Nu   ∅r   zutf-8s   
.)re   r   r  r  ZPERSIDr{   r   rf   )r   Znon_ascii_strr   r   r   r   test_protocol0_is_ascii_onlyW
  s    zCAbstractIdentityPersistentPicklerTests.test_protocol0_is_ascii_onlyN)r%   r&   r'   r<  r?  rD  rE  rF  r   r   r   r   rB  A
  s
   	rB  c               @   s\   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 Z
dd Zdd Zdd ZdS )#AbstractPicklerUnpicklerObjectTestsNc             C   s   | j s
t| jstd S )N)pickler_classr  unpickler_class)r   r   r   r   r  c
  s    
z)AbstractPicklerUnpicklerObjectTests.setUpc             C   s   dddg}xt D ]}tj }| j||}|j| |j }|jd |j  |j| |j }|j  |jd |j  |j| |j }| j	|| | j
|| qW d S )Nabcdefg,   r   )r  r!   r-  rH  r)  r  r#   truncateZ
clear_memoassertNotEqualr]   )r   rc   r  r  picklerfirst_pickledZsecond_pickledZthird_pickledr   r   r   test_clear_pickler_memog
  s"    






z;AbstractPicklerUnpicklerObjectTests.test_clear_pickler_memoc             C   sj   dddg}t j }| j|}|j| |j }t j }| j|}|j|_|j| |j }| j|| d S )NrJ  rK  )r!   r-  rH  r)  r  memorM  )r   rc   r  rN  rO  primedprimed_pickledr   r   r   test_priming_pickler_memo
  s    




z=AbstractPicklerUnpicklerObjectTests.test_priming_pickler_memoc       
      C   s   dddg}t j }| j|}|j| |j }t j }| j|}|j|_|j| |j }| jt j|}|j }| j|| | jt j|}|j|_|j }	|jj	  | j|	| | j
|	|k d S )NrJ  rK  )r!   r-  rH  r)  r  rQ  rI  r.  r]   clearr3  )
r   rc   r  rN  rO  rR  rS  	unpicklerZunpickled_data1Zunpickled_data2r   r   r   test_priming_unpickler_memo
  s&    





z?AbstractPicklerUnpicklerObjectTests.test_priming_unpickler_memoc             C   s   dddg}t j }| j|}|j| |j }dddg}t j }| j|}|j| |j }t j }|j| |jd | j|}| j|j	 | |jd |j
  |j| |jd | j|j	 | d S )NrJ  rK  r   )r!   r-  rH  r)  r  writer#   rI  r]   r.  rL  )r   data1r  rN  Zpickled1Zdata2Zpickled2rV  r   r   r   test_reusing_unpickler_objects
  s(    











zBAbstractPicklerUnpicklerObjectTests.test_reusing_unpickler_objectsc             C   s   xt D ]}| j|d dd tdD dtg }| }| j||d}|j| |j }d}||| }| j|}xPt|D ]D}	|j r|j	 }
| j
|j | |j r|| j
|j	 |
t|  q|W | jt|j W d Q R X qW d S )N)r  c             S   s   g | ]}|t |fqS r   )r?   )rJ  r@   r   r   r   rK  
  s    zSAbstractPicklerUnpicklerObjectTests._check_multiple_unpicklings.<locals>.<listcomp>i  s   abcde)r  rP   )r  rd   r   r  rH  r)  r  rI  r    r$   r]   r.  re   r
  )r   Zioclassr  rY  r  rN  r   r  rV  r1  r  r   r   r   _check_multiple_unpicklings
  s"    


z?AbstractPicklerUnpicklerObjectTests._check_multiple_unpicklingsc             C   s   | j tj d S )N)r[  r!   r-  )r   r   r   r   "test_multiple_unpicklings_seekable
  s    zFAbstractPicklerUnpicklerObjectTests.test_multiple_unpicklings_seekablec             C   s   | j t d S )N)r[  r   )r   r   r   r   $test_multiple_unpicklings_unseekable
  s    zHAbstractPicklerUnpicklerObjectTests.test_multiple_unpicklings_unseekablec             C   s   t td}xntD ]f}x`tddD ]R}tjtj |d}| j||d}|j| |jd | j	|}| j
|j | q"W qW d S )Nr  r      )buffer_size)r  r   )r   r   r  r!   BufferedRandomr-  rH  r)  r#   rI  r]   r.  )r   rc   r  Zbuf_sizer  rN  rV  r   r   r   "test_unpickling_buffering_readline
  s    



zFAbstractPicklerUnpicklerObjectTests.test_unpickling_buffering_readline)r%   r&   r'   rH  rI  r  rP  rT  rW  rZ  r[  r\  r]  ra  r   r   r   r   rG  ^
  s    rG  Zreduce_Ac               @   s   e Zd Zdd ZdS )r]  c             C   s
   t tffS )N)r?   r^  )r   r   r   r   r<   
  s    zAAA.__reduce__N)r%   r&   r'   r<   r   r   r   r   r]  
  s   r]  c               @   s   e Zd ZdS )BBBN)r%   r&   r'   r   r   r   r   rb     s   rb  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
AbstractDispatchTableTestsc             C   sD   t j }| j|d}| jt |j W d Q R X | jt|d d S )Nr   dispatch_table)r!   r-  rH  re   r  rd  r  r_   )r   r  r   r   r   r   test_default_dispatch_table  s
    z6AbstractDispatchTableTests.test_default_dispatch_tablec                s@   j  G fdddj d fdd	}j| d S )Nc                   s   e Zd Z ZdS )zGAbstractDispatchTableTests.test_class_dispatch_table.<locals>.MyPicklerN)r%   r&   r'   rd  r   )dtr   r   	MyPickler  s   rg  c                s2   t j } ||}j|j |j|  |j S )N)r!   r-  r]   rd  r)  r  )ra   r  r  r   )rg  rf  r   r   r   r    s
    

zCAbstractDispatchTableTests.test_class_dispatch_table.<locals>.dumps)N)get_dispatch_tablerH  _test_dispatch_table)r   r  r   )rg  rf  r   r   test_class_dispatch_table  s    z4AbstractDispatchTableTests.test_class_dispatch_tablec                s(   j   d fdd	}j|  d S )Nc                s:   t j }j||} |_j|j  |j|  |j S )N)r!   r-  rH  rd  r]   r)  r  )ra   r  r  r   )rf  r   r   r   r  !  s    
zFAbstractDispatchTableTests.test_instance_dispatch_table.<locals>.dumps)N)rh  ri  )r   r  r   )rf  r   r   test_instance_dispatch_table  s    z7AbstractDispatchTableTests.test_instance_dispatch_tablec       
         sf  fdd}dd }d}| j ||| | j ||| d  fdd	}||t< | j ||  | j ||| t }t }| j ||t | j||t | j ||t | j||t ||t< | j ||t | j ||  | j ||t | j||t d
fdd}	|	|t< |t= | j || | j||t | j ||t | j||t d S )Nc                s   t j | dS )Nr   )r   rf   )ra   )r  r   r   custom_load_dump,  s    zIAbstractDispatchTableTests._test_dispatch_table.<locals>.custom_load_dumpc             S   s   t jt j| dS )Nr   )r   rf   r  )ra   r   r   r   default_load_dump/  s    zJAbstractDispatchTableTests._test_dispatch_table.<locals>.default_load_dumpr   y               @reduce_1c                s
   t  ffS )N)r?   )ra   )REDUCE_1r   r   rn  :  s    zAAbstractDispatchTableTests._test_dispatch_table.<locals>.reduce_1reduce_2c                s
   t  ffS )N)r?   )ra   )REDUCE_2r   r   rp  Q  s    zAAbstractDispatchTableTests._test_dispatch_table.<locals>.reduce_2y      ?       @)r]   complexr]  rb  r^  r  )
r   r  rd  rl  rm  zrn  rB   rC   rp  r   )ro  rq  r  r   ri  +  s:    z/AbstractDispatchTableTests._test_dispatch_tableN)r%   r&   r'   re  rj  rk  ri  r   r   r   r   rc    s   rc  )r  zDATA{0} = (r  z	    {0!r})z# Disassembly of DATA{0}zDATA{0}_DIS = """\z"""l        )r   r)   r   r!   r   r   r   r   rN  Zunittestr  Zhttp.cookiesr   Ztestr   Ztest.supportr   r   r   r   r   r	   r
   r   Z
skipUnlessrO  r  r   r(  r  r   r   r-  r   r(   r1   r5   r7   r   r9   r:   r=   r&   rX  r>   rA   rG   rD   rE   rF   rI   ro   r  rq   r  rs   Z	DATA2_DISru   Z	DATA3_DISrw   Z	DATA4_DISr   r   r   r  ArithmeticErrorr  r  rg   BufferErrorBytesWarningDeprecationWarningr
  EnvironmentErrorr   FloatingPointErrorFutureWarningGeneratorExitIOErrorImportErrorImportWarningIndentationError
IndexErrorr   KeyboardInterruptLookupErrorMemoryError	NameErrorr   OSErrorr   PendingDeprecationWarningReferenceErrorr  RuntimeWarningStopIterationSyntaxErrorSyntaxWarningSystemError
SystemExitTabErrorr  UnboundLocalErrorUnicodeErrorUnicodeWarningUserWarningr   WarningZeroDivisionErrorr   r   r   rX   ZTestCaserY   r  r
  r  r  r  r  r  r  r  r  floatr  rr  r  r?   r  r  r   r@  r   r*  rJ   r,  r   rC  r=  rE  r}  r  r  r  r  r  r$  r8  rB  rG  r^  r]  rb  rc  r%   r  r@   r1  r  r   ri   r\   r  jr   rC   r   r   r   r   <module>   sV  $		cMDDL    
        S 7( X
