a zeK@s@ddlmZmZmZmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZzddlZdZWneydZYn0GdddeejZ GdddeejZ!GdddeejZ"GdddeeeejZ#Gddde$Z%Gdddee%ejZ&Gdddee%ejZ'GdddeejZ(Gd d!d!eejZ)Gd"d#d#eejZ*Gd$d%d%eejZ+erGd&d'd'eejZ,Gd(d)d)e!Z-Gd*d+d+e"Z.Gd,d-d-e&Z/Gd.d/d/e'Z0Gd0d1d1e"Z1Gd2d3d3e"Z2Gd4d5d5eejZ3Gd6d7d7eejZ4Gd8d9d9eejZ5Gd:d;d;eejZ6ej7GdZ9hd?Z:d@dAZ;dBdCZdHdIZ?GdJdKdKejZ@dLdMZAeBdNkrs   zPyPicklerTests.dumpscKs$t|}|j|fi|}|Sr&r'r+r#r#r$rEs zPyPicklerTests.loads)N) rrrrrr=r!r*rrr#r#r#r$r;9s r;c@sBeZdZejefZejeee e j ee fZ dddZddZdZdS)InMemoryPickleTestsNcKstj||fi|Sr&)rr)r,rAprotocolrCr#r#r$rSszInMemoryPickleTests.dumpscKstj|fi|Sr&)rr)r,r-r.r#r#r$rVszInMemoryPickleTests.loads)N)rrrrr3r1r2r4r5r6r7r8r9r:rrZ+test_framed_write_sizes_with_delayed_writerr#r#r#r$rEKs  rEc@seZdZdddZddZdS)PersistentPicklerUnpicklerMixinNcs:Gfdddj}t}|||}|||S)NcseZdZfddZdS)z:PersistentPicklerUnpicklerMixin.dumps..PersPicklercs |Sr&) persistent_idsubselfobjr,r#r$rH`szHPersistentPicklerUnpicklerMixin.dumps..PersPickler.persistent_idNrrrrHr#rLr#r$ PersPickler_srN)r=r(r)rgetvalue)r,rArBrNr/rDr#rLr$r^s   z%PersistentPicklerUnpicklerMixin.dumpsc s8Gfdddj}t|}||fi|}|S)NcseZdZfddZdS)z.PersUnpicklercs |Sr&)persistent_loadrIrLr#r$rPiszLPersistentPicklerUnpicklerMixin.loads..PersUnpickler.persistent_loadNrrrrPr#rLr#r$ PersUnpicklerhsrR)r*r(r)r)r,r-r.rRr/r0r#rLr$rgs z%PersistentPicklerUnpicklerMixin.loads)N)rrrrrr#r#r#r$rG\s rGc@seZdZejZejZdS)PyPersPicklerTestsN)rrrrrr=r!r*r#r#r#r$rSpsrSc@s4eZdZejZejZej ddZ ej ddZ dS)PyIdPersPicklerTestscs^fdd}Gdddj}||Gdddj}||Gdddj}||dS)NcsttjdD]6}t}|||}|d|dq|t}| ddt |}~ |dSNabcdef) rangerHIGHEST_PROTOCOLr(r)r assertEqualrrOrHweakrefref assertIsNone)r rBr/r=rrLr#r$checks    z@PyIdPersPicklerTests.test_pickler_reference_cycle..checkc@seZdZddZdS)FPyIdPersPicklerTests.test_pickler_reference_cycle..PersPicklercSs|Sr&r#rIr#r#r$rHsTPyIdPersPicklerTests.test_pickler_reference_cycle..PersPickler.persistent_idNrMr#r#r#r$rNsrNc@seZdZeddZdS)racSs|Sr&r#)clsrKr#r#r$rHsrbN)rrr classmethodrHr#r#r#r$rNsc@seZdZeddZdS)racSs|Sr&r#)rKr#r#r$rHsrbN)rrrrrHr#r#r#r$rNs)r=)r,r`rNr#rLr$test_pickler_reference_cycle}s z1PyIdPersPicklerTests.test_pickler_reference_cyclecs^fdd}Gdddj}||Gdddj}||Gdddj}||dS)NcstttjdD]*}|td|}|dq|t}|ddt |}~ |dSrU) rYrrZr(r)rr[rrPr\r]r^)r"rBr*r_rLr#r$r`s  zBPyIdPersPicklerTests.test_unpickler_reference_cycle..checkc@seZdZddZdS)JPyIdPersPicklerTests.test_unpickler_reference_cycle..PersUnpicklercSs|Sr&r#)rJpidr#r#r$rPsZPyIdPersPicklerTests.test_unpickler_reference_cycle..PersUnpickler.persistent_loadNrQr#r#r#r$rRsrRc@seZdZeddZdS)rfcSs|Sr&r#)rcrgr#r#r$rPsrhN)rrrrdrPr#r#r#r$rRsc@seZdZeddZdS)rfcSs|Sr&r#)rgr#r#r$rPsrhN)rrrrrPr#r#r#r$rRs)r*)r,r`rRr#rLr$test_unpickler_reference_cycles z3PyIdPersPicklerTests.test_unpickler_reference_cycleN) rrrrrr=r!r*r cpython_onlyrerir#r#r#r$rTws  rTc@seZdZejZejZdS)PyPicklerUnpicklerObjectTestsN)rrrrr pickler_classr!unpickler_classr#r#r#r$rksrkc@seZdZejZddZdS)PyDispatchTableTestscCs tjSr&rdispatch_tablecopyrLr#r#r$get_dispatch_tablesz'PyDispatchTableTests.get_dispatch_tableNrrrrrrlrrr#r#r#r$rnsrnc@seZdZejZddZdS)PyChainDispatchTableTestscCstitjSr& collectionsChainMaprrprLr#r#r$rrsz,PyChainDispatchTableTests.get_dispatch_tableNrsr#r#r#r$rtsrtc@s$eZdZGdddejeZeZdS)PyPicklerHookTestsc@s eZdZdS)z'PyPicklerHookTests.CustomPyPicklerClassNrrrr#r#r#r$CustomPyPicklerClasssrzN)rrrrrrrzrlr#r#r#r$rxsrxc@s,eZdZddlmZmZmZmZmZm Z dS) CPickleTestsr)rrrrr r"N) rrr_picklerrrrr r"r#r#r#r$r{sr{c@s"eZdZejZejfZejfZ dS)CUnpicklerTestsN) rrrr|r"r*rr3r2r:r#r#r#r$r}sr}c@seZdZejZejZdS) CPicklerTestsNrrrr|r r=r"r*r#r#r#r$r~sr~c@seZdZejZejZdS)CPersPicklerTestsNrr#r#r#r$rsrc@seZdZejZejZdS)CIdPersPicklerTestsNrr#r#r#r$rsrc@seZdZejZejZdS)CDumpPickle_LoadPickleN) rrrr|r r=rr!r*r#r#r#r$rsrc@seZdZejZejZdS)DumpPickle_CLoadPickleN) rrrrrr=r|r"r*r#r#r#r$rsrc@s eZdZejZejZddZdS)CPicklerUnpicklerObjectTestscCs|t}|tt|_Wdn1s40Y|tddi|_Wdn1sh0Yddi|_dS)NrV)rmr(r)Z assertRaises TypeErrorobjectmemor6)r,r*r#r#r$test_issue18339s  $ (z,CPicklerUnpicklerObjectTests.test_issue18339N) rrrr|r rlr"rmrr#r#r#r$rsrc@seZdZejZddZdS)CDispatchTableTestscCs tjSr&rorLr#r#r$rrsz&CDispatchTableTests.get_dispatch_tableNrrrrr rlrrr#r#r#r$rsrc@seZdZejZddZdS)CChainDispatchTableTestscCstitjSr&rurLr#r#r$rrsz+CChainDispatchTableTests.get_dispatch_tableNrr#r#r#r$rsrc@s$eZdZGdddejeZeZdS)CPicklerHookTestsc@s eZdZdS)z%CPicklerHookTests.CustomCPicklerClassNryr#r#r#r$CustomCPicklerClass srN)rrrr|r rrrlr#r#r#r$r src@s"eZdZejZddZddZdS) SizeofTestscCstd}tt}|t||t d}t d}|j }||||d|t dtdD]}|t|ql||||d|ddS) NZ 7P2n3i2n3i2PZ3nP0nZPn0Psxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx r)r calcobjsizer|r r(r)r[r __sizeof__r7calcsize check_sizeofsys getsizeofrYrchr)r,basesizerDZMT_sizeZME_sizer`ir#r#r$ test_picklers,    zSizeofTests.test_picklercstd}tjtdtd|jdD]\}dD]R}t||d}| t ||||dt |dt |dq6q.|t d dt d dfd d }|d dd |d gddd|ddt dDdddd}||d dd ||ddd||ddd||ddd||dddttdd d d d}||ddddS)Nz2P2n2P 2P2n2i5P 2P3n8P2n2iPn)ASCIIzUTF-16zlatin-1)strictreplaceencodingerrorsrrVrrcsDt|}t|ddd}||||dS)Nrrr)rrr(r)r)dataZ memo_sizeZ marks_sizerr0rr`rZstdsizer*r#r$check_unpickler5s   z3SizeofTests.test_unpickler..check_unpicklerrdcSsg|] }t|qSr#)r).0rr#r#r$ @z.SizeofTests.test_unpickler..cSsd}t|D] }||g}q |Sr<)rY)Zdeeprrr#r#r$recurseAs  z+SizeofTests.test_unpickler..recurse2@<a)rrr|r"r7rrr(r)r[rrlenrYrrr)r,rrrr0rrr#rr$test_unpickler%sL     zSizeofTests.test_unpicklerN)rrrrrrrr#r#r#r$rsr>)cPickler) _elementtreezxml.etree.ElementTree) cStringIOr()StringIOr(>) exceptions StandardErrorbuiltins Exception) __builtin__ basestringrstr)UserDictrrvr)socket _socketobjectr SocketTypecCs6||ftvrt||f\}}n|tvr.t|}||fSr&)rrmodulenamer#r#r$mapping`s  rcCs6||ftvrt||f\}}n|tvr.t|}||fSr&)rrrr#r#r$reverse_mappinggs  rc Csz tj|WStyzNt2tjr0dnd}t|tt |Wdn1s\0YWnpt y}z&tjrt d||ft WYd}~nrz0CompatPickleTests.test_import..cSsh|] \}}|qSr#r#rr#r#r$rr)setrvaluesrrrrr9)r,rrr#r#r$ test_imports    zCompatPickleTests.test_importc CstD]\}}|||f\z t|Wnty>Yn0|dddkrl||t|t||Wdq1s0YqdS)NrV_)ritemssubTestrr9ZassertInrr[)r,module3module2r#r#r$test_import_mappings   z%CompatPickleTests.test_import_mappingc Cs tD]\\}}\}}|||f||ff||fdkrXt||}|t|tn||fdkrt||}|t|tnft||\}}|dddkr| ||f||fzt||}WntyYn0| t|||Wdq1s0YqdS)NrOSErrorrr9rVr) rrrrZ assertTruerrr9rr[)r,rname3rname2rrrr#r#r$test_name_mappings      z#CompatPickleTests.test_name_mappingc CstD]\}}|||fz t|Wn2ty^}ztjrJt|WYd}~n d}~00||ftvrt |d|krt D]$\\}}\}}||f||fkrqq| d||ft ||}t ||}| ||Wdq1s0YqdS)Nz No reverse mapping from %r to %r)rrrrr9rrrALT_IMPORT_MAPPINGrgetrZfailr[) r,rrrZm3Zn3Zm2Zn2rr#r#r$test_reverse_import_mappings&    z-CompatPickleTests.test_reverse_import_mappingc CstD]\\}}\}}|||f||ffzt||}WntyPYn0t||\}}||||ftvr|||f||ft||\}}|||f||fWdq1s0YqdSr&) rrrrr9rALT_NAME_MAPPINGr[r)r,rrrrrrrr#r#r$test_reverse_name_mappings z+CompatPickleTests.test_reverse_name_mappingc CsH|tddd|tddd|tddd|tddd|tddd ttD]\}}|||tttt fvrWdqb|t urt |t r|td|d nh|t urt |t r|td|d |td|d|fn,|td|d|f|td|d|fWdqb1s80YqbdS) Nrr)rrrr)rrr)rrrr) r[rrrrrBlockingIOErrorResourceWarningStopAsyncIterationRecursionErrorrrr9)r,rrr#r#r$test_exceptionssP           z!CompatPickleTests.test_exceptionsc Csvtd}t|D]^\}}||<|td|d|f|td|d|fWdq1sf0YqdS)Nzmultiprocessing.contextmultiprocessing)r import_modulerrr[rr)r,rrrr#r#r$test_multiprocessing_exceptionss    z1CompatPickleTests.test_multiprocessing_exceptionsN) rrrrrrrrrrr#r#r#r$rs   !rcCs|t|Sr&)ZaddTestdoctestZ DocTestSuite)loaderZtestspatternr#r#r$ load_testssr__main__)D_compat_picklerrrrrrr(rvr7rrr\rZunittesttestrZtest.pickletesterrrr r r r r rrrr|Zhas_c_implementationr9ZTestCaserr%r;rErrGrSrTrkrnrtrxr{r}r~rrrrrrrrrjrrrrrrrrrrrmainr#r#r#r$s               C Aw