Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
§ Ìß]j¦Xãó—ddlmZmZddlmZmZddlmZddlZddl m Z d„Z dZ e dz Z e e ¦«Zd „Zd „ZGd „d e¦«ZGd „de¬¦«Zedegg¦«Ze e¦«eje¦«eje¦«dd„Z ddlZej d¦«reZn,ddlmZe ee¦«¦«¦«n #e$reZYnwxYwd„ZdS)é)ÚabstractmethodÚABCMeta)ÚSequenceÚHashable)ÚIntegralN©Ú transformcóF—t|¦« d¦«S)NÚ1)ÚbinÚcount)Úvals úJ/opt/imunify360/venv/lib64/python3.11/site-packages/pyrsistent/_pvector.pyÚ _bitcountrs€Ý ˆs‰8Œ8�>Š>˜#Ñ Ô Ðóé écó�—|| ¦«t|t¦«r| ¦«n|¦«S©N)ÚtolistÚ isinstanceÚPVector)ÚvÚotherÚoperators rÚcompare_pvectorrs8€Ø ˆ8�A—H’H‘J”Jµ*¸UÅGÑ2LÔ2LÐ W § ¢ ¡¤ ÐRWÑ XÔ XÐXrcó*—|€|St||¦«Sr)Úslice)ÚindexÚstops rÚ_index_or_slicer!s€Ø €|؈ å �˜Ñ Ô Ðrcó0‡—eZdZdZdZˆfd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„ZeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZGd„de¦«Zd„Zd„Zd„Ze d„¦«Z!d„Z"d„Z#d „Z$d!„Z%d"„Z&d#„Z'd$„Z(d%„Z)d&„Z*d'„Z+d+d)„Z,d*„Z-ˆxZ.S),Ú PythonPVectorzd Support structure for PVector that implements structural sharing for vectors using a trie. )Ú_countÚ_shiftÚ_rootÚ_tailÚ _tail_offsetÚ __weakref__cóÒ•—tt|¦« |¦«}||_||_||_||_|jt|j¦«z |_|Sr) Úsuperr#Ú__new__r$r%r&r'Úlenr()Úclsr ÚshiftÚrootÚtailÚselfÚ __class__s €rr,zPythonPVector.__new__!sZø€Ý•] CÑ(Ô(×0Ò0°Ñ5Ô5ˆØˆŒ ؈Œ ؈Œ ؈Œ ð!œK­#¨d¬j©/¬/Ñ9ˆÔ؈ rcó—|jSr)r$©r2s rÚ__len__zPythonPVector.__len__,s €ØŒ{Ðrcó0—t|t¦«rI|j€|j€ |j€|St  | ¦«|¦«S|dkr ||jz }t  ||¦«|tzS©Nr) rrÚstartr ÚstepÚ_EMPTY_PVECTORÚextendrr$r#Ú _node_forÚBIT_MASK©r2rs rÚ __getitem__zPythonPVector.__getitem__/s‰€Ý �e�UÑ #Ô #ð ?ðŒ{Ð" u¤zÐ'9¸e¼jÐ>PØ� õ"×(Ò(¨¯ª©¬°uÔ)=Ñ>Ô>Ð >à �1Š9ˆ9Ø �T”[Ñ ˆEå×&Ò& t¨UÑ3Ô3°E½HÑ4DÔEÐErcó,—| |¦«Sr)r<©r2rs rÚ__add__zPythonPVector.__add__?s€Ø�{Š{˜5Ñ!Ô!Ð!rcój—d t| ¦«¦«¦«S)Nz pvector({0}))ÚformatÚstrrr5s rÚ__repr__zPythonPVector.__repr__Bs&€Ø×$Ò$¥S¨¯ª©¬Ñ%7Ô%7Ñ8Ô8Ð8rcó*—| ¦«Sr)rGr5s rÚ__str__zPythonPVector.__str__Es€Ø�}Š}‰ŒÐrcóD—t| ¦«¦«Sr)Úiterrr5s rÚ__iter__zPythonPVector.__iter__Hs€õ�D—K’K‘M”MÑ"Ô"Ð"rcó.—| |¦« Sr)Ú__eq__rBs rÚ__ne__zPythonPVector.__ne__Ms€Ø—;’;˜uÑ%Ô%Ð%Ð%rcó�—||upBt|d¦«o2|jt|¦«kot||tj¦«S)Nr6)Úhasattrr$r-rrÚeqrBs rrNzPythonPVector.__eq__Ps_€Ø�uˆ}ðH¥¨° Ñ!:Ô!:Ð!X¸t¼{ÍcÐRWÉjÌjÒ?Xð!HÕ^mÐnrÐtyõ|Dô|Gñ_Hô_Hð Hrcó8—t||tj¦«Sr)rrÚgtrBs rÚ__gt__zPythonPVector.__gt__Só€Ý˜t U­H¬KÑ8Ô8Ð8rcó8—t||tj¦«Sr)rrÚltrBs rÚ__lt__zPythonPVector.__lt__VrVrcó8—t||tj¦«Sr)rrÚgerBs rÚ__ge__zPythonPVector.__ge__YrVrcó8—t||tj¦«Sr)rrÚlerBs rÚ__le__zPythonPVector.__le__\rVrcóœ—|dks |turtS|dkr|St || ¦«z¦«S©Nrr)r;r<r©r2Útimess rÚ__mul__zPythonPVector.__mul___sJ€Ø �AŠ:ˆ:˜¥Ð/Ð/Ý!Ð !à �AŠ:ˆ:؈Kå×$Ò$ U¨T¯[ª[©]¬]Ñ%:Ñ;Ô;Ð;rcó„—|r(|tz}|D]}| |||¦«ŒdS| |¦«dSr)ÚSHIFTÚ _fill_listr<)r2Únoder/Úthe_listÚns rrgzPythonPVector._fill_listjs_€Ø ð "Ø •U‰NˆEØð 4ð 4�Ø—’  5¨(Ñ3Ô3Ð3Ð3ð 4ð 4ð �OŠO˜DÑ !Ô !Ð !Ð !Ð !rcó€—g}| |j|j|¦«| |j¦«|S)zK The fastest way to convert the vector into a python list. )rgr&r%r<r')r2ris rrzPythonPVector.tolistrs<€ðˆØ �Š˜œ  D¤K°Ñ:Ô:Ð:Ø�Š˜œ Ñ#Ô#Ð#؈rcóD—t| ¦«¦«S)z8 Returns the content as a python tuple. )Útuplerr5s rÚ_totuplezPythonPVector._totuple{s€õ�T—[’[‘]”]Ñ#Ô#Ð#rcóD—t| ¦«¦«Sr)Úhashrnr5s rÚ__hash__zPythonPVector.__hash__�s€å�D—M’M‘O”OÑ$Ô$Ð$rcó"—t||¦«Srr©r2Útransformationss rr zPythonPVector.transform…s€Ý˜˜Ñ/Ô/Ð/rcó:—t| ¦«ffSr)Úpvectorrr5s rÚ __reduce__zPythonPVector.__reduce__ˆs€å˜Ÿš™œÐ(Ð(Ð(rcóþ—t|¦«dzrtd¦«‚| ¦«}tdt|¦«d¦«D]}||dz|||<Œ| ¦«S)Néz)mset expected an even number of argumentsrr)r-Ú TypeErrorÚevolverÚrangeÚ persistent)r2Úargsr{Úis rÚmsetzPythonPVector.msetŒs}€Ý ˆt‰9Œ9�q‰=ð IÝÐGÑHÔHÐ Hà—,’,‘.”.ˆÝ�q�#˜d™)œ) QÑ'Ô'ð )ð )ˆAØ# A a¡CœyˆG�D˜”GÑ Ð à×!Ò!Ñ#Ô#Ð#rcó`—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„ZdS)úPythonPVector.Evolver) r$r%r&r'r(Ú _dirty_nodesÚ _extra_tailÚ _cached_leafsÚ _orig_pvectorcó0—| |¦«dSr)Ú_reset©r2rs rÚ__init__zPythonPVector.Evolver.__init__šs€Ø �KŠK˜‰NŒNˆNˆNˆNrcó˜—t|t¦«s$tdt|¦«jz¦«‚|dkr||jt |j¦«zz }|j|cxkr |jt |j¦«zkrnn|j||jz St  ||¦«|tzS)Nú-'%s' object cannot be interpreted as an indexr) rrrzÚtypeÚ__name__r$r-r„r#r=r>r?s rr@z!PythonPVector.Evolver.__getitem__�sƀݘe¥XÑ.Ô.ð hÝÐ OÕRVÐW\ÑR]ÔR]ÔRfÑ fÑgÔgÐgà�qŠyˆyؘœ¥s¨4Ô+;Ñ'<Ô'<Ñ<Ñ<�àŒ{˜eÐIÐIÒIÐI d¤kµC¸Ô8HÑ4IÔ4IÑ&IÒIÐIÐIÐIÐIØÔ'¨°´ Ñ(;Ô<Ð<å ×*Ò*¨4°Ñ7Ô7¸ÅÑ8HÔIÐ Ircó¶—|j|_|j|_|j|_|j|_|j|_i|_i|_g|_||_dSr) r$r%r&r'r(rƒr…r„r†r‰s rrˆzPythonPVector.Evolver._reset©sV€Øœ(ˆDŒKØœ(ˆDŒKØœˆDŒJØœˆDŒJØ !¤ˆDÔ Ø "ˆDÔ Ø!#ˆDÔ Ø!ˆDÔ Ø!"ˆDÔ Ð Ð rcó:—|j |¦«|Sr)r„Úappend)r2Úelements rr‘zPythonPVector.Evolver.append´s€Ø Ô × #Ò # GÑ ,Ô ,Ð ,؈Krcó:—|j |¦«|Sr)r„r<)r2Úiterables rr<zPythonPVector.Evolver.extend¸s€Ø Ô × #Ò # HÑ -Ô -Ð -؈Krcó—|||<|Sr©)r2rrs rÚsetzPythonPVector.Evolver.set¼s€ØˆD�‰K؈KrcóΗt|t¦«s$tdt|¦«jz¦«‚|dkr||jt |j¦«zz }d|cxkr |jkrånnâ|j  |tz ¦«}|r|||tz<dS||j kr{t|j¦«|jvrLt!|j¦«|_d|jt|j¦«<|j|j|tz <||j|tz<dS| |j|j||¦«|_dS|j|cxkr |jt |j¦«zkrnn||j||jz <dS||jt |j¦«zkr|j |¦«dSt+d|›�¦«‚)NrŒrTúIndex out of range: )rrrzr�rŽr$r-r„r…Úgetrfr>r(Úidr'rƒÚlistÚ_do_setr%r&r‘Ú IndexError)r2rrrhs rÚ __setitem__z!PythonPVector.Evolver.__setitem__Àsë€Ý˜e¥XÑ.Ô.ð hÝÐ OÕRVÐW\ÑR]ÔR]ÔRfÑ fÑgÔgÐgà�qŠyˆyؘœ¥s¨4Ô+;Ñ'<Ô'<Ñ<Ñ<�à�EÐ'Ð'Ò'Ð'˜DœKÒ'Ð'Ð'Ð'Ð'ØÔ)×-Ò-¨eµu©nÑ=Ô=�Øð SØ-0�D˜¥Ñ)Ñ*Ð*Ð*ؘdÔ/Ò/Ð/ݘ$œ*‘~”~¨TÔ->Ð>Ð>Ý%)¨$¬*Ñ%5Ô%5˜œ Ø<@˜Ô)­"¨T¬Z©.¬.Ñ9Ø=A¼Z˜Ô*¨5µE©>Ñ:Ø36�D”J˜u¥xÑ/Ñ0Ð0Ð0à!%§¢¨d¬k¸4¼:ÀuÈcÑ!RÔ!R�D”J�J�JØ” ÐKÐKÒKÐK¨¬ µc¸$Ô:JÑ6KÔ6KÑ(KÒKÐKÐKÐKÐKØ8;�Ô  ¨¬Ñ!4Ñ5Ð5Ð5ؘ$œ+­¨DÔ,<Ñ(=Ô(=Ñ=Ò=Ð=ØÔ ×'Ò'¨Ñ,Ô,Ð,Ð,Ð,å �j¸U¸UÐ!DÑEÔEÐErcó<—t|¦«|jvr|}n&t|¦«}d|jt|¦«<|dkr |||tz<||j|t z <n6||z tz}| |t z ||||¦«||<|S)NTr)r›rƒrœr>r…rfr�©r2ÚlevelrhrrÚretÚ sub_indexs rr�zPythonPVector.Evolver._do_setÚs�€Ý�$‰xŒx˜4Ô,Ð,Ð,Ø��å˜4‘j”j�Ø-1�Ô!¥" S¡'¤'Ñ*à˜ŠzˆzØ$'��A�‘LÑ!Ø14�Ô" 1­¡:Ñ.Ð.à %™Z­8Ñ3� Ø!%§¢¨eµe©m¸TÀ)¼_ÈaÐQTÑ!UÔ!U��I‘àˆJrcó —||=|Srr–r?s rÚdeletezPythonPVector.Evolver.deleteês€Ø�U� ؈Krcó —|jrst|j|j|j|j¦« ¦«}| |j¦«|  t¦«||_|j|=dSr) r†r#r$r%r&r'rr<r„rˆr;)r2ÚkeyÚls rÚ __delitem__z!PythonPVector.Evolver.__delitem__îst€ØÔ!ð %å! $¤+¨t¬{¸D¼JÈÌ ÑSÔS×ZÒZÑ\Ô\�Ø—’˜Ô)Ñ*Ô*Ð*Ø— ’ �NÑ+Ô+Ð+Ø#$�Ô àÔ  Ð%Ð%Ð%rcóâ—|j}| ¦«rSt|j|j|j|j¦« |j¦«}|  |¦«|Sr) r†Úis_dirtyr#r$r%r&r'r<r„rˆ)r2Úresults rr}z PythonPVector.Evolver.persistentøs^€ØÔ'ˆFØ�}Š}‰Œð $Ý& t¤{°D´KÀÄÈTÌZÑXÔX×_Ò_Ð`dÔ`pÑqÔq�Ø— ’ ˜FÑ#Ô#Ð#àˆMrcó:—|jt|j¦«zSr)r$r-r„r5s rr6zPythonPVector.Evolver.__len__s€Ø”;¥ TÔ%5Ñ!6Ô!6Ñ6Ð 6rcó8—t|jp|j¦«Sr)Úboolrƒr„r5s rr¬zPythonPVector.Evolver.is_dirtys€Ý˜Ô)Ð=¨TÔ-=Ñ>Ô>Ð >rN)rŽÚ __module__Ú __qualname__Ú __slots__rŠr@rˆr‘r<r—rŸr�r¦rªr}r6r¬r–rrÚEvolverr‚–s倀€€€ðFˆ ð ð ð ð Jð Jð Jð #ð #ð #ð ð ð ð ð ð ð ð ð ð Fð Fð Fð4 ð ð ð  ð ð ð &ð &ð &ð ð ð ð 7ð 7ð 7ð ?ð ?ð ?ð ?ð ?rr´có6—t |¦«Sr)r#r´r5s rr{zPythonPVector.evolvers€Ý×$Ò$ TÑ*Ô*Ð*rc ó>—t|t¦«s$tdt|¦«jz¦«‚|dkr ||jz }d|cxkr |jkr‘nnŽ||jkrBt|j¦«}|||tz<t|j|j |j |¦«St|j|j |  |j |j ||¦«|j¦«S||jkr| |¦«Std|›�¦«‚)NrŒrr™)rrrzr�rŽr$r(rœr'r>r#r%r&r�r‘rž)r2rrÚnew_tails rr—zPythonPVector.set s€õ ˜!�XÑ&Ô&ð `ÝÐKÍdÐSTÉgÌgÔN^Ñ^Ñ_Ô_Ð _à ˆqŠ5ˆ5Ø �”Ñ ˆAà �Ð Ð Ò Ð �D”KÒ Ð Ð Ð Ð Ø�DÔ%Ò%Ð%Ý ¤ Ñ+Ô+�Ø),�˜�X™Ñ&Ý$ T¤[°$´+¸t¼zÈ8ÑTÔTÐTå  ¤¨d¬k¸4¿<º<ÈÌ ÐUYÔU_ÐabÐdgÑ;hÔ;hÐjnÔjtÑuÔuÐ uà �” Ò Ð Ø—;’;˜sÑ#Ô#Ð #åˆj°Q°QÐ8Ñ9Ô9Ð9rcó¸—t|¦«}|dkr|||tz<n6||z tz}| |tz ||||¦«||<|Sr8)rœr>r�rfr¡s rr�zPythonPVector._do_set!s]€Ý�4‰jŒjˆØ �AŠ:ˆ:Ø #ˆC�•H‘ Ñ Ð à˜e™¥xÑ/ˆIØ!Ÿ\š\¨%µ%©-¸¸i¼È!ÈSÑQÔQˆC� ‰Nàˆ rcóê—d|cxkr |jkrPnnM||jkr|jS|j}t |jdt ¦«D]}|||z tz}Œ|Std|›�¦«‚)Nrr™) r$r(r'r&r|r%rfr>rž)Ú pvector_likerrhr¢s rr=zPythonPVector._node_for+s•€à �Ð 'Ð 'Ò 'Ð '�LÔ'Ò 'Ð 'Ð 'Ð 'Ð 'Ø�LÔ-Ò-Ð-Ø#Ô)Ð)àÔ%ˆDݘ|Ô2°A½°vÑ>Ô>ð 5ð 5�ؘQ %™Z­8Ñ3Ô4��àˆKåˆj°Q°QÐ8Ñ9Ô9Ð9rcóþ—|j}|jtz d|jzkr2|j| |j|j¦«g}|tz }n&| |j|j|j¦«}||fS©Nr)r%r$rfr&Ú _new_pathr'Ú _push_tail)r2Ú new_shiftÚnew_roots rÚ_create_new_rootzPythonPVector._create_new_root9st€Ø”Kˆ ð ŒK�5Ñ  Q¨$¬+Ñ%5Ò 6Ð 6Øœ  D§N¢N°4´;ÀÄ Ñ$KÔ$KÐLˆHØ �Ñ ˆIˆIà—’ t¤{°D´JÀÄ ÑKÔKˆHà˜Ð"Ð"rcó:—t|j¦«tkrMt|j¦«}| |¦«t |jdz|j|j|¦«S|  ¦«\}}t |jdz|||g¦«Sr¼) r-r'Ú BRANCH_FACTORrœr‘r#r$r%r&rÁ)r2rr·rÀr¿s rr‘zPythonPVector.appendEsˆ€Ý ˆtŒz‰?Œ?�]Ò *Ð *ݘDœJÑ'Ô'ˆHØ �OŠO˜CÑ Ô Ð Ý  ¤¨q¡°$´+¸t¼zÈ8ÑTÔTÐ Tð#×3Ò3Ñ5Ô5ш�)ݘTœ[¨1™_¨i¸ÀCÀ5ÑIÔIÐIrcóP—|dkr|S| |tz |¦«gSr8)r½rf)r2r¢rhs rr½zPythonPVector._new_pathOs+€Ø �AŠ:ˆ:؈Kà—’˜u¥u™}¨dÑ3Ô3Ð4Ð4rcóV—| ¦«\|_|_g|_dSr)rÁr&r%r'r5s rÚ_mutating_insert_tailz#PythonPVector._mutating_insert_tailUs'€Ø"&×"7Ò"7Ñ"9Ô"9шŒ �D”K؈Œ ˆ ˆ rcóЗtt|j¦«z }||||z…}|j |¦«t|¦«}|xj|z c_||zSr)rÃr-r'r<r$)r2ÚoffsetÚsequenceÚ max_delta_lenÚdeltaÚ delta_lens rÚ_mutating_fill_tailz!PythonPVector._mutating_fill_tailYsd€Ý%­¨D¬J©¬Ñ7ˆ ؘ ¨Ñ 6Ð6Ô7ˆØ Œ ×Ò˜%Ñ Ô Ð Ý˜‘J”Jˆ Ø ˆ Œ �yÑ ˆ Œ ؘ Ñ!Ð!rcó—d}t|¦«}||krM| ||¦«}t|j¦«tkr| ¦«||k°M|jt|j¦«z |_dSr8)r-rÍr'rÃrÆr$r()r2rÉrÈÚ sequence_lens rÚ_mutating_extendzPythonPVector._mutating_extendasƒ€ØˆÝ˜8‘}”}ˆ Ø�|Ò#Ð#Ø×-Ò-¨f°hÑ?Ô?ˆFÝ�4”:‰Œ¥-Ò/Ð/Ø×*Ò*Ñ,Ô,Ð,ð�|Ò#Ð#ð !œK­#¨d¬j©/¬/Ñ9ˆÔÐÐrcóî—t|t¦«r| ¦«nt|¦«}|r:| |d¦«}| |dd…¦«|S|Sra)rr#rrœr‘rÐ)r2Úobjr©Ú new_vectors rr<zPythonPVector.extendksn€õ' s­MÑ:Ô:Ð IˆC�JŠJ‰LŒLˆLÅÀSÁ Ä ˆØ ð ØŸš Q q¤TÑ*Ô*ˆJØ × 'Ò '¨¨!¨"¨"¬Ñ .Ô .Ð .ØÐ àˆ rcón—t|¦«}|tkr| |¦«|S|jdz |z tz}t |¦«|kr*| |tz |||¦«||<|S| | |tz |¦«¦«|S)zï if parent is leaf, insert node, else does it map to an existing child? -> node_to_insert = push node one more level else alloc new path return node_to_insert placed in copy of parent r)rœrfr‘r$r>r-r¾r½)r2r¢ÚparentÚ tail_noder£r¤s rr¾zPythonPVector._push_tailvs¥€õ�6‰lŒlˆà •EŠ>ˆ>Ø �JŠJ�yÑ !Ô !Ð !؈Jà”k A‘o¨%Ñ/µ8Ñ;ˆ Ý ˆv‰;Œ;˜Ò "Ð "Ø!Ÿ_š_¨UµU©]¸FÀ9Ô’> %­%¡-°Ñ;Ô;Ñ<Ô<Ð<؈ rcóH—| ¦«j|g|¢Ri|¤ŽSr)rr©r2Úvaluer~Úkwargss rrzPythonPVector.index�s-€Ø"ˆt�{Š{‰}Œ}Ô" 5Ð:¨4Ð:Ð:Ð:°6Ð:Ð:Ð:rcóP—| ¦« |¦«Sr)rr ©r2rÙs rr zPythonPVector.count�s€Ø�{Š{‰}Œ}×"Ò" 5Ñ)Ô)Ð)rNcó€—| ¦«}|t||¦«=t |¦«Sr)rr!r;r<)r2rr r©s rr¦zPythonPVector.delete“s5€Ø �KŠK‰MŒMˆØ �o˜e TÑ*Ô*Ð +Ý×$Ò$ QÑ'Ô'Ð'rcóˆ—| ¦«}| |¦«t |¦«Sr)rÚremover;r<)r2rÙr©s rrßzPythonPVector.remove˜s2€Ø �KŠK‰MŒMˆØ �Š�‰ŒˆÝ×$Ò$ QÑ'Ô'Ð'rr)/rŽr±r²Ú__doc__r³r,r6r@rCrGrIrLrOrNrUrYr\r_rdÚ__rmul__rgrrnrqr rwr€Úobjectr´r{r—r�Ú staticmethodr=rÁr‘r½rÆrÍrÐr<r¾rr r¦rßÚ __classcell__)r3s@rr#r#sºø€€€€€ðððV€Ið ð ð ð ð ððððFðFðFð "ð"ð"ð9ð9ð9ðððð#ð#ð#ð &ð&ð&ðHðHðHð9ð9ð9ð9ð9ð9ð9ð9ð9ð9ð9ð9ð<ð<ð<ð€Hð"ð"ð"ðððð$ð$ð$ð %ð%ð%ð0ð0ð0ð)ð)ð)ð$ð$ð$ðn?ðn?ðn?ðn?ðn?�&ñn?ôn?ðn?ð`+ð+ð+ð:ð:ð:ð0ðððð :ð :ñ„\ð :ð #ð #ð #ðJðJðJð5ð5ð5ð ððð"ð"ð"ð:ð:ð:ð ð ð ðððð.;ð;ð;ð*ð*ð*ð(ð(ð(ð(ð (ð(ð(ð(ð(ð(ð(rr#có^—eZdZdZed„¦«Zed„¦«Zed„¦«Zed„¦«Zed„¦«Z ed„¦«Z ed„¦«Z ed „¦«Z ed „¦«Z ed „¦«Zed „¦«Zed „¦«Zed„¦«Zedd„¦«Zed„¦«ZdS)ra Persistent vector implementation. Meant as a replacement for the cases where you would normally use a Python list. Do not instantiate directly, instead use the factory functions :py:func:`v` and :py:func:`pvector` to create an instance. Heavily influenced by the persistent vector available in Clojure. Initially this was more or less just a port of the Java code for the Clojure vector. It has since been modified and to some extent optimized for usage in Python. The vector is organized as a trie, any mutating method will return a new vector that contains the changes. No updates are done to the original vector. Structural sharing between vectors are applied where possible to save space and to avoid making complete copies. This structure corresponds most closely to the built in list type and is intended as a replacement. Where the semantics are the same (more or less) the same function names have been used but for some cases it is not possible, for example assignments. The PVector implements the Sequence protocol and is Hashable. Inserts are amortized O(1). Random access is log32(n) where n is the size of the vector. The following are examples of some common operations on persistent vectors: >>> p = v(1, 2, 3) >>> p2 = p.append(4) >>> p3 = p2.extend([5, 6, 7]) >>> p pvector([1, 2, 3]) >>> p2 pvector([1, 2, 3, 4]) >>> p3 pvector([1, 2, 3, 4, 5, 6, 7]) >>> p3[5] 6 >>> p.set(1, 99) pvector([1, 99, 3]) >>> có—dS)z/ >>> len(v(1, 2, 3)) 3 Nr–r5s rr6zPVector.__len__Çó€€€rcó—dS)z£ Get value at index. Full slicing support. >>> v1 = v(5, 6, 7, 8) >>> v1[2] 7 >>> v1[1:3] pvector([6, 7]) Nr–r?s rr@zPVector.__getitem__Îrçrcó—dS)zm >>> v1 = v(1, 2) >>> v2 = v(3, 4) >>> v1 + v2 pvector([1, 2, 3, 4]) Nr–rBs rrCzPVector.__add__Úrçrcó—dS)zY >>> v1 = v(1, 2) >>> 3 * v1 pvector([1, 2, 1, 2, 1, 2]) Nr–rbs rrdzPVector.__mul__ãrçrcó—dS)zo >>> v1 = v(1, 2, 3) >>> v2 = v(1, 2, 3) >>> hash(v1) == hash(v2) True Nr–r5s rrqzPVector.__hash__ërçrcó—dS)a~ Create a new evolver for this pvector. The evolver acts as a mutable view of the vector with "transaction like" semantics. No part of the underlying vector i updated, it is still fully immutable. Furthermore multiple evolvers created from the same pvector do not interfere with each other. You may want to use an evolver instead of working directly with the pvector in the following cases: * Multiple updates are done to the same vector and the intermediate results are of no interest. In this case using an evolver may be a more efficient and easier to work with. * You need to pass a vector into a legacy function or a function that you have no control over which performs in place mutations of lists. In this case pass an evolver instance instead and then create a new pvector from the evolver once the function returns. The following example illustrates a typical workflow when working with evolvers. It also displays most of the API (which i kept small by design, you should not be tempted to use evolvers in excess ;-)). Create the evolver and perform various mutating updates to it: >>> v1 = v(1, 2, 3, 4, 5) >>> e = v1.evolver() >>> e[1] = 22 >>> _ = e.append(6) >>> _ = e.extend([7, 8, 9]) >>> e[8] += 1 >>> len(e) 9 The underlying pvector remains the same: >>> v1 pvector([1, 2, 3, 4, 5]) The changes are kept in the evolver. An updated pvector can be created using the persistent() function on the evolver. >>> v2 = e.persistent() >>> v2 pvector([1, 22, 3, 4, 5, 6, 7, 8, 10]) The new pvector will share data with the original pvector in the same way that would have been done if only using operations on the pvector. Nr–r5s rr{zPVector.evolverôrçrcó—dS)aY Return a new vector with elements in specified positions replaced by values (multi set). Elements on even positions in the argument list are interpreted as indexes while elements on odd positions are considered values. >>> v1 = v(1, 2, 3) >>> v1.mset(0, 11, 2, 33) pvector([11, 2, 33]) Nr–)r2r~s rr€z PVector.mset$rçrcó—dS)aÇ Return a new vector with element at position i replaced with val. The original vector remains unchanged. Setting a value one step beyond the end of the vector is equal to appending. Setting beyond that will result in an IndexError. >>> v1 = v(1, 2, 3) >>> v1.set(1, 4) pvector([1, 4, 3]) >>> v1.set(3, 4) pvector([1, 2, 3, 4]) >>> v1.set(-1, 4) pvector([1, 2, 4]) Nr–)r2rrs rr—z PVector.set1rçrcó—dS)z† Return a new vector with val appended. >>> v1 = v(1, 2) >>> v1.append(3) pvector([1, 2, 3]) Nr–)r2rs rr‘zPVector.appendBrçrcó—dS)zâ Return a new vector with all values in obj appended to it. Obj may be another PVector or any other Iterable. >>> v1 = v(1, 2, 3) >>> v1.extend([4, 5]) pvector([1, 2, 3, 4, 5]) Nr–)r2rÒs rr<zPVector.extendLrçrcó—dS)zø Return first index of value. Additional indexes may be supplied to limit the search to a sub range of the vector. >>> v1 = v(1, 2, 3, 4, 3) >>> v1.index(3) 2 >>> v1.index(3, 3, 5) 4 Nr–rØs rrz PVector.indexWrçrcó—dS)z� Return the number of times that value appears in the vector. >>> v1 = v(1, 4, 3, 4) >>> v1.count(4) 2 Nr–rÜs rr z PVector.countdrçrcó—dS)aÿ Transform arbitrarily complex combinations of PVectors and PMaps. A transformation consists of two parts. One match expression that specifies which elements to transform and one transformation function that performs the actual transformation. >>> from pyrsistent import freeze, ny >>> news_paper = freeze({'articles': [{'author': 'Sara', 'content': 'A short article'}, ... {'author': 'Steve', 'content': 'A slightly longer article'}], ... 'weather': {'temperature': '11C', 'wind': '5m/s'}}) >>> short_news = news_paper.transform(['articles', ny, 'content'], lambda c: c[:25] + '...' if len(c) > 25 else c) >>> very_short_news = news_paper.transform(['articles', ny, 'content'], lambda c: c[:15] + '...' if len(c) > 15 else c) >>> very_short_news.articles[0].content 'A short article' >>> very_short_news.articles[1].content 'A slightly long...' When nothing has been transformed the original data structure is kept >>> short_news is news_paper True >>> very_short_news is news_paper False >>> very_short_news.articles[0] is news_paper.articles[0] True Nr–rss rr zPVector.transformnrçrNcó—dS)zÔ Delete a portion of the vector by index or range. >>> v1 = v(1, 2, 3, 4, 5) >>> v1.delete(1) pvector([1, 3, 4, 5]) >>> v1.delete(1, 3) pvector([1, 4, 5]) Nr–)r2rr s rr¦zPVector.deleteŠrçrcó—dS)zë Remove the first occurrence of a value from the vector. >>> v1 = v(1, 2, 3, 2, 1) >>> v2 = v1.remove(1) >>> v2 pvector([2, 3, 2, 1]) >>> v2.remove(1) pvector([2, 3, 2]) Nr–rÜs rrßzPVector.remove–rçrr)rŽr±r²ràrr6r@rCrdrqr{r€r—r‘r<rr r r¦rßr–rrrr�sº€€€€€ð'ð'ðRð ð ñ„^ð ð ð  ð  ñ„^ð  ðð ð ñ„^ð ðð ð ñ„^ð ðð ð ñ„^ð ðð- ð- ñ„^ð- ð^ð  ð  ñ„^ð  ðð ð ñ„^ð ð ð ð ñ„^ð ðð ð ñ„^ð ðð  ð  ñ„^ð  ðð ð ñ„^ð ðð ð ñ„^ð ð6ð  ð  ð  ñ„^ð  ðð  ð  ñ„^ð  ð  ð  rr)Ú metaclassr–có6—t |¦«S)z� Create a new persistent vector containing the elements in iterable. >>> v1 = pvector([1, 2, 3]) >>> v1 pvector([1, 2, 3]) )r;r<)r”s rÚpython_pvectorrø©s€õ × Ò  Ñ *Ô *Ð*rÚPYRSISTENT_NO_C_EXTENSION©rvcó —t|¦«S)z� Create a new persistent vector containing all parameters to this function. >>> v1 = v(1, 2, 3) >>> v1 pvector([1, 2, 3]) rú)Úelementss rrr¿s€õ �8Ñ Ô Ðr)r–)ÚabcrrÚcollections.abcrrÚnumbersrrÚpyrsistent._transformationsr rrÃr>rfrr!râr#rr;ÚregisterrøÚosÚenvironršrvÚpvectorcr�Ú ImportErrorrr–rrúrs!ðØ'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐÐÐÐÐØ€€€Ø1Ð1Ð1Ð1Ð1Ð1ðððð€ Ø ˜1Ñ €Øˆ �(ÑÔ€ðYðYðYðððð@(ð@(ð@(ð@(ð@(�Fñ@(ô@(ð@(ðD D ðD ðD ðD ðD ˜ðD ñD ôD ðD ðN�˜q %¨¨RÑ0Ô0€Ø×Ò�ÑÔÐØ€Ô�'ÑÔÐØ€Ô�'ÑÔÐð+ð+ð+ð+ð à €I€I€IØ „z‡~‚~Ð1Ñ2Ô2ð*Ø ˆˆà$Ð$Ð$Ð$Ð$Ð$Ø×Ò˜˜˜g˜g™iœi™œÑ)Ô)Ð)øøØðððØ€G€G€GðøøøðððððsÂ!A C/Ã/C9Ã8C9