ó
    Û“,jNÆ  ã                   ó°  • S r / SQrSSKrSSKrSSKrSSKrSSKJr  SSK	r
SSKrSSKrSSKrSSKJr  SSKJr  SSKJrJrJrJr  SSKrSSKJr  SS	KJr  S
rS
rS r\R<                  " 5       rS r \R<                  " 5       r!S r"\R<                  " 5       r#S r$ " S S\%5      r& " S S\%5      r'\(" \'RR                  RU                  5       5      \'l+         " S S\'5      r,S r- " S S\'5      r. " S S\'5      r/ " S S\'5      r0SSK17  SSK1Jr2  \\2-  rSSK37  SSK3J4r4  SSK3Jr5  \\5-  rSSK6J7r7  SS K6J8r9  \S!S"/-  r " S# S$\'5      r:S% r;\<S&:X  a  \;" 5         gg)'zR
Author(s): Matthew Loper

See LICENCE.txt for licensing and contact information.
)ÚChÚ
depends_onÚ
MatVecMultÚChHandleÚChLambdaé    N)Úwraps)ÚLinearOperatoré   )ÚrowÚcolÚtimerÚ%convert_inputs_to_sparse_if_necessary)Údeepcopy©ÚreduceFc                 óv   • [         (       d  [        (       a#  [        R                  R	                  U S-   5        g g ©NÚ
)ÚDEBUGÚVERBOSEÚsysÚstdoutÚwrite)Úmsgs    Ú—C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\chumpy/ch.pyÚpifr       s&   € ç‚u—’Ü�
‰
×Ñ˜˜t™Õ$ð ó    c                 ó¨   • U [         ;  a;  [        [        R                  " U S 5       Vs/ s H  oS   PM	     sn5      [         U '   [         U    $ s  snf )Nc                 ó"   • [        U [        5      $ ©N©Ú
isinstanceÚproperty©Úxs    r   Ú<lambda>Ú_props_for.<locals>.<lambda>(   s   € ÔU_Ð`aÔckÔUlr   r   )Ú_props_for_dictÚsetÚinspectÚ
getmembers©ÚclsÚps     r   Ú
_props_forr/   &   sK   € Ø
”/Ó!Ü"´'×2DÒ2DÀSÑJlÔ2mÓ#nÒ2m¨Q a¤DÑ2mÑ#nÓoŒ˜ÑÜ˜3ÑÐùò $os   ªAc                 óÒ   • U [         ;  aP  [        R                  " U S 5       Vs/ s H%  n[        US   R                  S5      (       d  M#  UPM'     sn[         U '   [         U    $ s  snf )Nc                 ó"   • [        U [        5      $ r    r!   r$   s    r   r&   Ú _dep_props_for.<locals>.<lambda>.   s   € ÔR\Ð]^Ô`hÔRir   r
   Údeps)Ú_dep_props_for_dictr*   r+   ÚhasattrÚfgetr,   s     r   Ú_dep_props_forr7   ,   sl   € Ø
Ô%Ó%Ü/6×/AÒ/AÀ#ÑGiÔ/jó  $JÒ/j¨!ÔnuÐvwÐxyÑvz×vÑvð  BH÷  oI§AÑ/jñ  $JÔ˜CÑ Ü˜sÑ#Ð#ùò $Js   ¥"A$ÁA$c                 ó<  • U [         ;  a[  [        R                  R                  [	        U R
                  5      R                  [	        U R                  5      5      5      [         U '   [         U    (       a)  [        S[        U 5      < S[        [        5      < 35      eg )Nz	In class z/, don't use reserved keywords in terms/dterms: )Ú_kw_conflict_dictr   Ú_reserved_kwÚintersectionr)   ÚtermsÚunionÚdtermsÚ	ExceptionÚstrÚkw_conflict)r-   s    r   Ú_check_kw_conflictrB   3   sp   € Ø
Ô#Ó#Ü!#§¡×!=Ñ!=¼cÀ#Ç)Á)»n×>RÑ>RÔSVÐWZ×WaÑWaÓSbÓ>cÓ!dÔ˜#ÑÜ˜×ÝÔZ]Ð^aÖZbÔdgÔhsÕdtÐvÓwÐwð r   c                   ó"   • \ rS rSrSrSS jrSrg)ÚTermé:   r   Nc                 ó„   • Xl         X l        X0l        [        R                  U l        [        =R                  S-  sl        g ©Nr
   )ÚdefaultÚdescÚdrrD   Úcreation_counter)ÚselfrH   rI   rJ   s       r   Ú__init__ÚTerm.__init__<   s2   € ØŒØŒ	ØŒô !%× 5Ñ 5ˆÔÜ×Ò Ñ"Ör   )rK   rH   rI   rJ   )NNT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rK   rM   Ú__static_attributes__© r   r   rD   rD   :   s   † ØÐ÷#r   rD   c                   ó4  ^ • \ rS rSr/ rS/rSr0 r0 rSSS.r	Sr
SrSrU 4S jr\S	 5       r\S
 5       r\S 5       r\S 5       rS rS rS r\S 5       r\S 5       r\S 5       r\S 5       rS`S jrSaS jrS rS rS r\S 5       r \S 5       r!S r"S r#S r$S r%S r&S  r'S! r(SbS" jr)S# r*SbS$ jr+SbS% jr,S& r-S' r.S( r/S) r0S* r1SbS+ jr2S, r3S- r4S. r5S/ r6S0 r7\S1 5       r8S2 r9SbS3 jr:SbS4 jr;SbS5 jr<S6 r=\S7 5       r>SbS8 jr?S9 r@S: rAS; rBS< rCScS= jrDS> rE\S? 5       rFS@ rGSbSA jrHSB rI\JR–                  4SC jrLSdSD jrMSE rNSF rOSG rPSbSH jrQSbSI jrRSbSJ jrSSK rTSL rUSM rVSN rWSO rXSP rYSQ rZSR r[SS r\ST r]SU r^SV r_SW r`SX raSY rbSZ rcS[ rdS\ reS] rfS^ rgS_rhU =ri$ )er   éG   r%   g       @F)Ú
make_denseÚmake_sparseÚ	undefinedNc           	      óZ  >• [        U5      S:”  a"  [        US   5      [        S 5      :X  a  [        n [        [        U ]  U 5      nU R                  5         [        R                  US[        5       5        [        R                  USS 5        [        R                  US[        R                  " 5       5        [        R                  USS [        R                  " 5       S.5        [        (       a.  [        R                  US0 5        [        R                  US	S
5        [        U R                  R                  5       5       H7  u  pE[        R                  USU-  UR!                  XE5      5        XB;   d  M5  X$	 M9     [#        U 5      n0 nU H)  nUS   n	US   R$                  R&                  n
U
S SS.Xy'   M+     [        R                  USU5        U [        :w  a&  [)        U5       H  u  p¼XÂU R*                  U   '   M     O:[        U5      S:”  a+  [,        R.                  " US   [,        R0                  5      US'   U R3                  5        Vs0 s H1  oˆR4                  c  M  UR6                  [9        UR4                  5      _M3     nnUR;                  U5        UR                  " S0 UD6  U$ s  snf )Nr   c                  ó   • g)Nr   rT   rT   r   r   r&   ÚCh.__new__.<locals>.<lambda>X   s   € ¸Ar   Ú_dirty_varsÚ_itrÚ_parentsÚ_cache©ÚrÚdrsÚ_cache_infoÚ_statusÚnewz_%sr
   T)r3   ÚvalueÚout_of_dateÚ_depends_on_depsr%   rT   )ÚlenÚtyper   Úsuperr   Ú__new__Úsetup_termsÚobjectÚ__setattr__r)   ÚweakrefÚWeakKeyDictionaryr   ÚlistÚ_default_kwargsÚitemsÚgetr7   r6   r3   Ú	enumerateÚ
term_orderÚnpÚasarrayÚfloat64Úparm_declarationsrH   Únamer   Úupdate)r-   ÚargsÚkwargsÚresultr}   Údefault_valÚpropsÚcpdr.   Ú	func_namer3   ÚidxÚaÚdefsÚ	__class__s                 €r   rm   Ú
Ch.__new__V   s   ø€ äˆt‹9�q‹=œT $ q¡'›]¬d±:Ó.>Ó>ÜˆCô ”r˜3Ñ'¨Ó,ˆà�‰Ôä×Ñ˜6 =´#³%Ô8Ü×Ñ˜6 6¨4Ô0Ü×Ñ˜6 :¬w×/HÒ/HÓ/JÔKÜ×Ñ˜6 8°4Ä×@YÒ@YÓ@[Ñ-\Ô]çŠ5Ü×Ñ˜v }°bÔ9Ü×Ñ˜v y°%Ô8ä!% c×&9Ñ&9×&?Ñ&?Ó&AÖ!BÑˆDÜ×Ñ˜v u¨t¡|°V·Z±ZÀÓ5RÔSØ�~Ø’Lñ "Cô ˜sÓ#ˆØˆÛˆAØ˜!™ˆIØ�Q‘4—9‘9—>‘>ˆDØ&*°TÈ$ÑOˆC‹Nñ ô
 	×Ñ˜6Ð#5°sÔ;à”"‹9Ü# Dž/‘�Ø./�s—~‘~ cÑ*Ó+ò *ä�‹Y�q‹[ÜŸ*š* T¨!¡W¬b¯j©jÓ9ˆF�3‰Kà69×6KÑ6KÔ6MÓgÒ6M°×QZÑQZÓ,�—‘œ !§)¡)Ó,Ò,Ñ6MˆÐgØ�‰�FÔØ�
Š
Ñ�TÒàˆùò	 hs   É	J(É$J(c                 ó.  • U R                   U R                  ;  ac  [        R                  " 5       n[        R
                  " U S 5      n[        US S9 H  u  p4X4l        XAU'   M     XR                  U R                   '   U R                  U R                      $ )Nc                 ó"   • [        U [        5      $ r    )r"   rD   r$   s    r   r&   Ú&Ch.parm_declarations.<locals>.<lambda>‰   s   € ¼:ÀaÌÔ;Nr   c                 ó    • U S   R                   $ rG   )rK   r$   s    r   r&   r�   Š   s   € ¸qÀ¹t×?TÒ?Tr   )Úkey)rO   Ú_cached_parmsÚcollectionsÚOrderedDictr*   r+   Úsortedr}   )r-   Úparameter_declarationsÚ
parametersr}   Údecls        r   r|   ÚCh.parm_declarations…   s‚   € à�<‰<˜s×0Ñ0Ó0Ü%0×%<Ò%<Ó%>Ð"Ü ×+Ò+¨CÑ1NÓOˆJÜ$ ZÑ5TÔU‘
�Ø ”	Ø/3 tÓ,ñ Vð /E×Ñ˜cŸl™lÑ+Ø× Ñ  §¡Ñ.Ð.r   c                 óD  • [        U 5      U R                  ;   a  g U [        :X  a  g U R                  5       nU R                  [        R                  L a  / U l        O1[        U R                  [        5      (       a  U R                  4U l        U R                  [        R                  L a  / U l        O1[        U R                  [        5      (       a  U R                  4U l        [        U R                  5      [        U R                  5      -   n[        U5      S:”  a’  US:X  d   eU Vs/ s H  o3R                  PM     snU l
        U Vs/ s H!  o3R                  (       d  M  UR                  PM#     snU l        U Vs/ s H!  o3R                  (       a  M  UR                  PM#     snU l        OA[        U S5      (       d0  [        U R                  5      [        U R                  5      -   U l
        [        U 5        SU R                  [        U 5      '   g s  snf s  snf s  snf )Nr   rx   T)ÚidÚ_setup_termsr   r|   r>   r"   r@   r<   rj   r}   rx   rJ   r5   rs   rB   )r-   r|   Úlen_oldstyle_parmsÚts       r   rn   ÚCh.setup_terms�   s‚  € äˆc‹7�c×&Ñ&Ó&¨à”"‹9Øà×1Ñ1Ó3Ðà�:‰:œŸ™Ò"ØˆC�JÜ˜Ÿ
™
¤C×(Ñ(ØŸ*™*˜ˆCŒJØ�9‰9œŸ™Ò ØˆC�IÜ˜Ÿ	™	¤3×'Ñ'ØŸ™˜ˆCŒIô ! §¡›_¬S°·±«^Ñ;ÐÜÐ Ó! AÓ%Ø% qÓ(Ð)Ð(Ù.?Ó@Ò.?¨ŸfœfÑ.?Ñ@ˆCŒNÙ*;ÓDÒ*; Q¿t½t›&˜!Ÿ&œ&Ñ*;ÑDˆCŒJÙ):ÓGÒ): AÇ$Å$›˜ŸœÑ):ÑGˆC�Iä˜3 ×-Ñ-Ü!% c§i¡i£´4¸¿
¹
Ó3CÑ!C�”ä˜3ÔØ$(ˆ×Ñœ˜C›Ò!ùò AùÚDùÚGs   Ä(HÅ	HÅ!HÅ=HÆHc                 óh   • [        U S5      (       a  U R                  $ U R                  R                  $ )NÚlabel)r5   rŸ   r‰   rO   ©rL   s    r   Ú
short_nameÚCh.short_name´   s'   € ä$ T¨7×3Ñ3ˆt�z‰zÐP¸¿¹×9PÑ9PÐPr   c                 ó$  • [        U R                  5      [        U R                  5      -   nUR                  5         U R                  [        U Vs/ s H.  o"U R                  ;   d  M  U[        U R                  U   5      4PM0     sn5      4$ s  snf )zSemantic id.)rs   r<   r>   Úsortr‰   ÚtupleÚ__dict__r™   )rL   ÚpnamesÚks      r   ÚsidÚCh.sid¸   sq   € ô �d—j‘jÓ!¤$ t§{¡{Ó"3Ñ3ˆØ�‰ŒØ—‘¤É&Ó&gÊ&ÀQÐY]×YfÑYfÑTfÓ'@¨¬2¨d¯m©m¸AÑ.>Ó+?Ó'@É&Ñ&gÓ hÐiÐiùÒ&gs   ÁB
Á'B
c                 óB   • [        U [        U5      S:”  a  US9$ US   S9$ )Nr
   r   ©r‡   Únewshape)Úreshaperj   ©rL   r   s     r   r®   Ú
Ch.reshapeÀ   s%   € Ü˜´°D³	¸!³¨ÑIÐIÀÀaÁÑIÐIr   c                 ó   • [        U SS9$ )Néÿÿÿÿr¬   )r®   r    s    r   ÚravelÚCh.ravelÃ   s   € Ü˜¨Ñ-Ð-r   c                 ó   • [        U 5      $ r    )r™   r    s    r   Ú__hash__ÚCh.__hash__Æ   s   € Ü�$‹xˆr   c                 ó.   • U R                   R                  $ r    )rb   Úndimr    s    r   r¹   ÚCh.ndimÉ   ó   € à�v‰v�{‰{Ðr   c                 ó.   • U R                   R                  $ r    )rb   Úflatr    s    r   r½   ÚCh.flatÍ   r»   r   c                 ó.   • U R                   R                  $ r    )rb   Údtyper    s    r   rÀ   ÚCh.dtypeÑ   ó   € à�v‰v�|‰|Ðr   c                 ó.   • U R                   R                  $ r    )rb   Úitemsizer    s    r   rÄ   ÚCh.itemsizeÕ   s   € à�v‰v�‰Ðr   c                 ó˜  • US :X  a  0 nU R                   nSn[        U R                  5       H{  nU R                  U   n[	        US5      (       d  M%  UR
                  nXq;  a  XaU'   O'U R                  U   X   La  X   U R                  U'   SnUR                  USS9(       d  My  SnM}     U(       d  gU(       a  U R                  USS9  gg)NFr>   T)Úiterate)rb   rs   r>   r¦   r5   r©   Úremove_redundancy)rL   ÚcacherÇ   Ú_Úreplacement_occurredÚpropnameÚpropr©   s           r   rÈ   ÚCh.remove_redundancyÝ   sÍ   € à�D‹=ØˆEØ—‘ˆAà$ÐÜ˜TŸ[™[Ö)ˆHØ—=‘= Ñ*ˆDä˜4 ×*Ñ*ÙØ—(‘(ˆCØÓØ!�c’
Ø—‘˜xÑ(°±
Ò:Ø*/©*�—‘˜hÑ'Ø'+Ð$Ø×%Ñ% e°UÐ%×;Ð;Ø'+Ò$ñ *ö $ØæØ×&Ñ& u°dÐ&Ñ;Øàr   c                 ó  • Uc  [         R                  n[        U S5      (       aP  UR                  S[	        U5      -   S-   U R
                  [        R                  " U R                  S-  5      4-  5        U R                   H1  n[        X5      n[        US5      (       d  M!  UR                  SUS9  M3     U(       aF  UR                  S[	        U5      -   S	-   [        R                  " U R                  S-  5      4-  5        g g )
NrŸ   z%s: %.ze | é   r>   F)Úprint_newlineÚwhere_to_printz%.ze
)r   Ústderrr5   r   r@   rŸ   ry   Úsumrb   r>   ÚgetattrÚprint_labeled_residuals)rL   rÑ   Únum_decimalsrÒ   ÚdtermÚdts         r   rÖ   ÚCh.print_labeled_residualsý   sÛ   € àÑ!Ü ŸZ™ZˆNÜ�4˜×!Ñ!Ø× Ñ  (¬S°Ó->Ñ">ÀÑ"GÈDÏJÉJÔXZ×X^ÒX^Ð_c×_eÑ_eÐghÑ_hÓXiÐKjÑ!jÔkØ—[”[ˆEÜ˜Ó%ˆBÜ�r˜8×$Ó$Ø×*Ñ*¸È~Ð*Ó^ñ !ö Ø× Ñ  $¬¨\Ó):Ñ":¸UÑ"BÄrÇvÂvÈdÏfÉfÐVWÉiÓGXÐFZÑ!ZÕ[ð r   c                 ó   • U R                   $ )ú@Default method for objects that just contain a number or ndarrayr$   r    s    r   Ú	compute_rÚCh.compute_r  s   € à�v‰vˆr   c                 óŠ   • XL a?  [         R                  " U R                  R                  U R                  R                  5      $ g)rÜ   N)ÚspÚeyer%   Úsize©rL   Úwrts     r   Úcompute_dr_wrtÚCh.compute_dr_wrt  s+   € àŠ;Ü—6’6˜$Ÿ&™&Ÿ+™+ t§v¡v§{¡{Ó3Ð3àr   c                 ó   • U R                  5         U R                  U5      nUb  U$  Un[        UR                  [        5      (       aG  UR
                  nX0L a  g U R                  U5      nUb  O![        UR                  [        5      (       a  MG  Uc  g UR                  5         UR                  U5      R                  nU R                  X$5      $ r    )Ú_call_on_changedrå   Ú
issubclassr‰   ÚPermuter‡   ÚTÚ	_superdot)rL   rä   r�   ÚinnerÚjacs        r   Ú_compute_dr_wrt_slicedÚCh._compute_dr_wrt_sliced  s¾   € Ø×ÑÔð
 ×$Ñ$ SÓ)ˆØÑØˆMð ØˆEÜ˜UŸ_™_¬g×6Ñ6ØŸ™�Ø’=ØØ×,Ñ,¨UÓ3�àÑ%Øô ˜UŸ_™_¬g×6Ó6ð ‰~Øà× Ñ Ô"à×$Ñ$ UÓ+×-Ñ-ˆCà—>‘> &Ó.Ð.r   c                 ó.   • U R                   R                  $ r    )rb   Úshaper    s    r   rò   ÚCh.shape;  rÂ   r   c                 óB   • [         R                  " U R                  5      $ r    )ry   Úprodrò   r    s    r   râ   ÚCh.size?  s   € ô �wŠw�t—z‘zÓ"Ð"r   c                 ó,   • [        U R                  5      $ r    )rj   rb   r    s    r   Ú__len__Ú
Ch.__len__D  ó   € Ü�4—6‘6‹{Ðr   c                 ó:   • SSK Jn  UR                  " U /UQ70 UD6$ )Nr
   )Úoptimization)Ú rü   Úminimize)rL   r   r€   rü   s       r   rþ   ÚCh.minimizeG  s    € Ý"Ø×$Ò$ TÐ;¨DÒ;°FÑ;Ð;r   c                 ó   • U R                   $ r    )rb   r¯   s     r   Ú	__array__ÚCh.__array__K  s   € Ø�v‰vˆr   c                 ó|   • [        [        [        U R                  5      U/-   5      5      U l        [        XU5        g r    )rs   r)   r>   Úsetattr)rL   Ú
dterm_namerØ   s      r   Ú	add_dtermÚCh.add_dtermQ  s-   € Üœ3œt D§K¡KÓ0°J°<Ñ?Ó@ÓAˆŒÜ� %Õ(r   c                 ó   • [        U 5      $ r    )Úcopyr    s    r   r	  ÚCh.copyU  ó   € Ü�D‹zÐr   c                 óR   • [         R                  " U R                  5      nUS	 US	 U$ )Nr_   r`   )Úexternal_copyr	  r¦   ©rL   r�   s     r   Ú__getstate__ÚCh.__getstate__X  s+   € ä×#Ò# D§M¡MÓ2ˆØ�:ÐØ�8ÐØˆr   c                 ób  • [         R                  " 5       US'   S [         R                  " 5       S.US'   [        R                  U SU5        [	        U R
                  5      R                  [	        U R                  R                  5       5      5       H  n[        XU R                  U   5        M     g )Nr_   ra   r`   r¦   )
rq   rr   ro   rp   r)   r>   r;   r¦   Úkeysr  )rL   Údr¨   s      r   Ú__setstate__ÚCh.__setstate___  sƒ   € ä×1Ò1Ó3ˆˆ*‰Ø ¬×)BÒ)BÓ)DÑEˆˆ(‰Ü×Ñ˜4 ¨QÔ/ô �T—[‘[Ó!×.Ñ.¬s°4·=±=×3EÑ3EÓ3GÓ/HÖIˆAÜ�D˜TŸ]™]¨1Ñ-Ö.ò Jr   c                 óè  • [        U 5      [        :X  aI  US:X  a,  U R                  R                  U5        U R	                  U5        [
        R                  XU5        g XR                  ;   nXR                  ;   nU[        U R                  5      ;   nU(       aù  U(       dò  [        U 5      [        :w  aß  [        US5      (       d  [        U5      n[        X5      (       ag  [        X5      nXR                  ;   aM  UR                  U    S   R                  U5        [        UR                  U    S   5      S:X  a  UR                  U 	 XR                  ;  a  S[!        U/5      0UR                  U '   O!UR                  U    S   R                  U5        U(       d  U(       a>  U R                  R                  U5        U R#                  U/5        U R	                  U5        [
        R                  XU5        g )Nr%   r>   Úvarnamesr   )rk   r   r]   ÚaddÚclear_cachero   rp   r>   r<   r/   r‰   r5   rÕ   r_   Úremoverj   r)   Ú_invalidate_cacheprop_names)rL   r}   rg   ÚitrÚname_in_dtermsÚname_in_termsÚname_in_propsÚterms           r   rp   ÚCh.__setattr__i  s�  € ô
 �‹:œÓØ�s‹{Ø× Ñ ×$Ñ$ TÔ*Ø× Ñ  Ô%ô
 ×Ñ˜t¨5Ô1Øà§¡Ñ,ˆØ§
¡
Ñ*ˆØ¤
¨4¯>©>Ó :Ñ:ˆæ¦-´D¸³JÄ"Ó4DÜ˜5 (×+Ñ+Ü˜5›	�ô �t×"Ñ"Ü˜tÓ*�ØŸ=™=Ó(Ø—M‘M $Ñ'¨
Ñ3×:Ñ:¸4Ô@Ü˜4Ÿ=™=¨Ñ.¨zÑ:Ó;¸qÓ@Ø ŸM™M¨$Ð/ð Ÿ>™>Ó)Ø(2´C¸¸³KÐ'@�—‘˜tÒ$à—‘˜tÑ$ ZÑ0×4Ñ4°TÔ:æž]Ø×Ñ× Ñ  Ô&Ø×,Ñ,¨d¨VÔ4ð ×Ñ˜SÔ!ä×Ñ˜4 uÕ-r   c                 óÂ   • [        U5      n[        U R                  R                  5       5       H-  u  p4[	        UR                  US   5      5      S:”  d  M(  SUS'   M/     g )Nr3   r   Trh   )r)   rs   ri   ru   rj   r;   )rL   ÚnamesÚnamesetr…   Úvs        r   r  ÚCh._invalidate_cacheprop_names™  sR   € Ü�e“*ˆÜ  ×!6Ñ!6×!<Ñ!<Ó!>Ö?‰LˆIÜ�7×'Ñ'¨¨&©	Ó2Ó3°aÕ7Ø#'��-Ó ò @r   c           	      óz  • U /n[        / 5      nSn[        U5      S:”  Ga  US-  nUR                  5       nUb  XR                  :X  a  M9  [	        U5      U;  aÐ  S UR
                  S'   UR
                  S   R                  5         Xl        [        UR                  R                  5       5       H]  u  pg[        R                  USUR                  R                  US   5      5        UR                  US   5        UR                  U5        M_     UR!                  [	        U5      5        [        U5      S:”  a  GM  U$ )Nr   r
   rb   rc   r]   r  )r)   rj   Úpopr^   r™   r`   Úclearrs   r_   ru   ro   rp   r]   r=   r  Úappendr  )rL   r  ÚtodoÚdoneÚnodes_visitedÚnextÚparentÚparent_dicts           r   r  ÚCh.clear_cache   s  € ØˆvˆÜ�2‹wˆØˆÜ�$‹i˜!ŒmØ˜QÑˆMØ—8‘8“:ˆDØ‰ 3¯	©	£>ÙÜ�$‹x˜tÓ#Ø#'�—‘˜CÑ Ø—‘˜EÑ"×(Ñ(Ô*Ø”	ä+/°·±×0CÑ0CÓ0EÖ+FÑ'�FÜ×&Ñ& v¨}¸f×>PÑ>P×>VÑ>VÐWbÐcmÑWnÓ>oÔpØ×6Ñ6°{À:Ñ7NÔOØ—K‘K Ö'ñ ,Gð —‘œ˜D›Ô"ô �$‹i˜!Žmð Ðr   c           	      ód  • XR                   S   ;   a  S U R                   S   U'   [        U S5      (       a  XR                  ;   a  S U R                  U'   Ub  X R                  :w  a´  [	        U R
                  R                  5       5       H�  u  p4XR                   S   ;   d   [        US5      (       a  XR                  ;   a  UR                  XS9  [        R                  USUR                  R                  US   5      5        UR                  US   5        M�     [        R                  U SU5        g )Nrc   Ú	dr_cached)rä   r  r]   r  r^   )r`   r5   r3  r^   rs   r_   ru   Úclear_cache_wrtro   rp   r]   r=   r  )rL   rä   r  r/  r0  s        r   r4  ÚCh.clear_cache_wrt¶  sÿ   € Ø—+‘+˜eÑ$Ó$Ø&*ˆD�K‰K˜Ñ˜sÑ#ä�4˜×%Ñ%¨#·±Ó*?Ø"&ˆD�N‰N˜3Ñà‰;˜#§¡Ó*Ü'+¨D¯M©M×,?Ñ,?Ó,AÖ'BÑ#�ØŸ-™-¨Ñ.Ó.´7¸6À;×3OÑ3OÐTW×[kÑ[kÓTkØ×*Ñ*¨sÐ*Ñ<Ü×"Ñ" 6¨=¸&×:LÑ:L×:RÑ:RÐS^Ð_iÑSjÓ:kÔlØ×2Ñ2°;¸zÑ3JÖKñ	 (Cô 	×Ñ˜4 ¨Õ-r   c                 ó†  • [        US5      [        US5      :w  a  [        S5      e[        U R                  5      [        U R                  5      -    Vs/ s H  n[        X5      (       d  M  UPM     sn HD  n[        X5      nXQL a  [        XU5        M   [        US5      (       d  M3  UR                  X5        MF     U$ s  snf )Nr>   zGEither "old" and "new" must both be "Ch", or they must both be neither.)r5   r?   rs   r>   r<   rÕ   r  Úreplace)rL   Úoldrf   rœ   Ú	term_namer   s         r   r7  Ú
Ch.replaceÆ  sž   € Ü�C˜Ó"¤g¨c°8Ó&<Ó<ÜÐeÓfÐfä%)¨$¯+©+Ó%6´t¸D¿J¹JÓ7GÒ%GÓ\Ò%G Ì7ÐSW×K[Ÿ!Ñ%GÔ\ˆIÜ˜4Ó+ˆDØŠ{Ü˜¨Ö-Ü˜˜x×(Ó(Ø—‘˜SÖ&ñ ]ð ˆ
ùò ]s   ÁB>Á+B>c                 ój  • [        U R                  5      n[        UR                  5       5      nUR	                  U5      nUR                  U5      n[        U5      [        U5      -   n[        U5      S:”  a=  US S  H  nU R                  XqU   S5        M     U R                  US   XS      S 5        g g )Nr   r²   i'  )	r/   r‰   r)   r  r;   Ú
differencers   rj   rp   )rL   r€   rƒ   Ú
kwarg_keysÚkwsecondÚkwfirstÚkwallr¨   s           r   r)   ÚCh.setÓ  s§   € ô ˜4Ÿ>™>Ó*ˆÜ˜Ÿ™›Ó'ˆ
Ø×*Ñ*¨5Ó1ˆØ×'Ñ'¨Ó1ˆÜ�W“¤ X£Ñ.ˆô ˆu‹:˜‹>Ø˜3˜B“Z�Ø× Ñ  ¨1¡I¨tÖ4ñ  à×Ñ˜U 2™Y¨°R©yÑ(9¸4Õ@ð r   c                 ó  • [        U 5      [        :X  a  XL $ U R                   Vs/ s H   n[        X5      (       d  M  [	        X5      PM"     nnX;   =(       d*    [        U Vs/ s H  oDR                  U5      PM     sn5      $ s  snf s  snf r    )rk   r   r>   r5   rÕ   ÚanyÚ	is_dr_wrt)rL   rä   rØ   Údterms_we_haver  s        r   rD  ÚCh.is_dr_wrtå  sp   € Ü�‹:œÓØ�;ÐØ<@¿KºKÓ`ºK°5Ì7ÐSW×K_Ó.œ' $Ö.¹KˆÐ`ØÑ$×W¬Á~Ó,VÂ~À!¯[©[¸Ö-=Á~Ñ,VÓ(WÐWùò aùÚ,Vs   ¥B½BÁ"Bc                 ó&   • U R                   [        L $ r    )r‰   r   r    s    r   Úis_ch_baseclassÚCh.is_ch_baseclassì  s   € Ø�~‰~¤Ð#Ð#r   c                 óö   • U R                   n[        R                  " [        R                  " U5      5      R	                  U5      R                  U5      nUR                  5       nUR                   n[        XUS9$ )N)r‡   ÚidxsÚpreferred_shape)rò   ry   Úarangerõ   r®   Ú__getitem__r³   ÚSelect)rL   r�   rò   ÚtmprK  r­   s         r   rN  ÚCh.__getitem__ó  sX   € Ø—
‘
ˆÜ�iŠiœŸš ›Ó'×/Ñ/°Ó6×BÑBÀ3ÓGˆØ�y‰y‹{ˆØ—9‘9ˆÜ˜¸ÑBÐBr   c                 óH  • [        US5      (       a  [        S5      e[        U 5      [        :X  aB  [        R
                  " U R                  5      nUR                  X5        U R                  SXCS9  g U nUR                  5       (       dN  [        UR                  [        5      (       a  UR                  nO[        S5      eUR                  5       (       d  MN  X   n U R                  U5      nUR                  nUR                   nU R#                  U[        R$                  " U5      R'                  5       5      n	U R#                  XpR#                  XeR                  R'                  5       5      5      n
[(        R*                  " U	5      (       a$  [        R,                  " U	R/                  5       5      n	[(        R*                  " U
5      (       a$  [        R,                  " U
R/                  5       5      n
UR                  U	R1                  U5      -   U
R1                  U5      -
  Ul        g )Nr>   z1Can't assign a Ch objects as a subset of another.r%   )r  z+Can't set array that is function of arrays.)r5   r?   rk   r   ry   Ú
atleast_1dr%   Ú__setitem__rp   rH  ré   r‰   rê   r‡   Údr_wrtrë   rò   rì   rz   r³   rà   ÚissparseÚarrayÚtodenser®   )rL   r�   rg   r  Údatarí   rJ   Údr_revÚinner_shapeÚt1Út2s              r   rT  ÚCh.__setitem__ú  s}  € ä�5˜(×#Ñ#ÜÐOÓPÐPÜ�‹:œÓÜ—=’= §¡Ó(ˆDØ×Ñ˜SÔ(Ø×Ñ˜S $ÐÑ0Øð ˆEØ×+Ñ+×-Ñ-Ü˜eŸo™o¬w×7Ñ7Ø!ŸG™G‘Eä#Ð$QÓRÐRð	 ×+Ñ+×-Ó-ð ‘9ˆDØ—‘˜UÓ#ˆBØ—T‘TˆFàŸ+™+ˆKà—‘ ¬¯
ª
°5Ó(9×(?Ñ(?Ó(AÓBˆBØ—‘ ¯©°r¿7¹7¿=¹=»?Ó(KÓLˆBÜ�{Š{˜2�‰¤R§X¢X¨b¯j©j«lÓ%; Ü�{Š{˜2�‰¤R§X¢X¨b¯j©j«lÓ%; à—g‘g §
¡
¨;Ó 7Ñ7¸"¿*¹*À[Ó:QÑQˆE�Gr   c                 ó,   • [        U R                  5      $ r    )r@   rb   r    s    r   Ú__str__Ú
Ch.__str__%  rú   r   c                 ó^   • [         R                  U 5      S-   [        U R                  5      -   $ r   )ro   Ú__repr__r@   rb   r    s    r   rc  ÚCh.__repr__(  s#   € Ü�‰˜tÓ$ tÑ+¬c°$·&±&«kÑ9Ð9r   c                 ó6   • U R                   R                  5       $ r    )rb   Ú	__float__r    s    r   rf  ÚCh.__float__+  s   € Ø�v‰v×ÑÓ!Ð!r   c                 ó6   • U R                   R                  5       $ r    )rb   Ú__int__r    s    r   ri  Ú
Ch.__int__.  s   € Ø�v‰v�~‰~ÓÐr   c                 ó   • g r    rT   )rL   r<   s     r   Ú
on_changedÚCh.on_changed1  s   € Ør   c                 ó   • [        U 5      $ r    ©Ú	transposer    s    r   rë   ÚCh.T4  s   € ä˜‹Ðr   c                 ó   • [        U /UQ76 $ r    ro  )rL   Úaxess     r   rp  ÚCh.transpose8  s   € Ü˜Ð% Ò%Ð%r   c                 ó   • [        X5      $ r    )Úsqueeze©rL   Úaxiss     r   rv  Ú
Ch.squeeze;  s   € Ü�tÓ"Ð"r   c                 ó   • [        XS9$ ©N)rx  )Úmeanrw  s     r   r|  ÚCh.mean>  s   € Ü�DÑ$Ð$r   c                 ó   • [        XS9$ r{  )rÔ   rw  s     r   rÔ   ÚCh.sumA  s   € Ü�4Ñ#Ð#r   c                 ó>  • [        U S5      (       a   U R                  5       u  pU(       d   U5       e[        U S5      (       a  SU l        [        U R                  5      S:”  a;  U R                  U R                  5        [        R                  U S[        5       5        g g )NÚis_validre   rf   r   r]   )	r5   r�  re   rj   r]   rl  ro   rp   r)   )rL   Úvalidityr   s      r   rè   ÚCh._call_on_changedD  s{   € ä�4˜×$Ñ$Ø ŸM™M›O‰MˆHÞÐ ˜SÓ �8Ü�4˜×#Ñ#Ø ˆDŒLäˆt×ÑÓ  1Ó$Ø�O‰O˜D×,Ñ,Ô-Ü×Ñ˜t ]´C³EÕ:ð %r   c                 ó–  • U R                  5         U R                  S   c›  [        R                  " [        R                  " U R                  5       5      [        R                  SS9U R                  S'   U R                  S   R                  5       U R                  S'   SU R                  S   R                  l	        U R                  S   $ )Nrb   ÚC)rÀ   ÚorderÚrviewF)
rè   r`   ry   rz   rS  rÝ   r{   ÚviewÚflagsÚ	writeabler    s    r   rb   ÚCh.rP  s–   € à×ÑÔØ�;‰;�sÑÑ#Ü!Ÿzšz¬"¯-ª-¸¿¹Ó8HÓ*IÔQS×Q[ÑQ[ÐcfÑgˆD�K‰K˜ÑØ#'§;¡;¨sÑ#3×#8Ñ#8Ó#:ˆD�K‰K˜Ñ Ø38ˆD�K‰K˜Ñ ×&Ñ&Ô0à�{‰{˜7Ñ#Ð#r   c                 ó&  ^^•  Tc  g Tc  g [        T[        R                  5      (       a#  TR                  S:X  a  TR	                  5       S   m[        T[        R                  5      (       a#  TR                  S:X  a  TR	                  5       S   m[        T[
        R                  5      (       d  [        T[
        R                  5      (       a  TT-  $ [        T[        5      (       a-  [        TR                  S   TR                  S   4UU4S j5      $ [        T[        5      (       aY  [        R                  " T5      (       a-  [        TR                  S   TR                  S   4UU4S j5      $ TR                  T5      $ [        5       n[        TT5      u  mmU" 5       S:”  a  [        SR                  U" 5       5      5        [        R                  " T5      (       dJ  [        R                  " T5      (       a/  TR                   R                  TR                   5      R                   $ TR                  T5      $ ! ["         aJ  nSS KnSS KnUR)                  UR*                  S9  [,        (       a  SS KoˆR1                  5          S nAg e S nAff = f)Nr
   r   c                 óD   >• TR                  TR                  U 5      5      $ r    ©Údot©r%   ÚlhsÚrhss    €€r   r&   ÚCh._superdot.<locals>.<lambda>l  s   ø€ ÈsÏwÉwÐWZ×W^ÑW^Ð_`ÓWaÔObr   c                 óD   >• TR                  TR                  U 5      5      $ r    rŽ  r�  s    €€r   r&   r“  p  s   ø€ ÐSV×SZÑSZÐ[^×[bÑ[bÐcdÓ[eÔSfr   çš™™™™™¹?z.convert_inputs_to_sparse_if_necessary in {}sec)Úfile)r"   ry   Úndarrayrâ   r³   ÚnumbersÚNumberr	   rò   rà   rV  r�  r   r   r   Úformatrë   r?   r   Ú	tracebackÚ	print_excr   r   ÚpdbÚpost_mortem)	rL   r‘  r’  ÚprofilerÚtm_maybe_sparseÚer   r›  r�  s	    ``      r   rì   ÚCh._superdotZ  sÖ  ù€ ð)	Ø‰{ØØ‰{Øä˜#œrŸz™z×*Ñ*¨s¯x©x¸«{Ø—i‘i“k !‘n�ä˜#œrŸz™z×*Ñ*¨s¯x©x¸«{Ø—i‘i“k !‘n�ä˜#œwŸ~™~×.Ñ.´*¸SÄ'Ç.Á.×2QÑ2QØ˜S‘yÐ ä˜#œ~×.Ñ.Ü% s§y¡y°¡|°S·Y±Y¸q±\Ð&BÕDbÓcÐcä˜#œ~×.Ñ.Ü—;’;˜s×#Ñ#Ü)¨3¯9©9°Q©<¸¿¹À1¹Ð*FÕHfÓgÐgð Ÿ7™7 3›<Ð'ô $›gˆOÜ<¸SÀ#ÓF‰HˆC�ÙÓ  3Ó&ÜÐD×KÑKÉOÓL]Ó^Ô_ä—;’;˜s×#Ñ#¬¯ª°C×(8Ñ(8Ø—u‘u—y‘y §¡Ó'×)Ñ)Ð)Ø—7‘7˜3“<ÐøÜó 	ß!Ø×Ñ S§Z¡ZÐÑ0ßŠuÛŸO™O×-Ñ-àûð	úsI   „H< ˆH< ŒCH< ÃAH< ÄAH< Å2H< ÆB'H< È+H< È<
JÉ?JÊ
JÊJc           	      ó¦  • Uc  g U R                  5         / nU R                  U5      nUS :w  a   UR                  U R                  X5      5        [	        U R
                  5       H´  nU R                  U   n[        US5      (       d  M%  XbLd  M+  UR                  U5      (       d  MC  [        U[        5      (       d  [        S5        [        S5      eUR                  U R                  XR                  U5      5      U5      nUc  M£  UR                  U5        M¶     [        U5      S:X  a  S nU$ [        U5      S:X  a  US   nU$ [        S U5      nU$ )Nr>   zBROKEN!zBroken Should be Ch objectr   r
   c                 ó
   • X-   $ r    rT   ©r%   Úys     r   r&   ÚCh.lmult_wrt.<locals>.<lambda>§  ó   € ¨ªr   )rè   rï   r*  rì   r)   r>   r¦   r5   rD  r"   r   Úprintr?   Ú	lmult_wrtrj   r   )	rL   r‘  rä   rc   Ú	direct_drr¨   r.   Úindirect_drr�   s	            r   rª  ÚCh.lmult_wrt‡  s+  € Ø‰;Øà×ÑÔàˆà×/Ñ/°Ó4ˆ	à˜ÓØ�J‰J�t—~‘~ cÓ5Ô6ä�T—[‘[Ö!ˆAØ—‘˜aÑ ˆAä�q˜(×#Ó#¨¬¸¿¹ÀS×9IÓ9IÜ! !¤R×(Ñ(Ü˜)Ô$Ü#Ð$@ÓAÐAàŸk™k¨$¯.©.¸×>YÑ>YÐZ[Ó>\Ó*]Ð_bÓc�ØÓ*Ø—J‘J˜{Ö+ñ "ô ˆs‹8�Q‹;ØˆFð ˆô �‹X�q‹[Ø˜‘VˆFð
 ˆô Ñ,¨cÓ2ˆFàˆr   c                 óš   • U R                  U5      nUc  g [        U[        5      (       d  U R                  X#5      $ UR	                  U5      $ r    )rï   r"   r	   rì   Úmatmat)rL   rä   r‘  rJ   s       r   Úcompute_lopÚCh.compute_lop¬  sF   € Ø×(Ñ(¨Ó-ˆØ‰:˜dÜ.8¸¼n×.MÑ.Mˆt�~‰~˜cÓ&ÐaÐSV×S]ÑS]Ð^`ÓSaÐar   c                 óv  • U R                  5         / nU R                  X5      nUb  UR                  U5        [        U R                  5       Hd  n[        X5      n[        US5      (       d  M!  XaLd  M'  U R                  Xb5      nUc  M=  UR                  X5      nUc  MS  UR                  U5        Mf     [        [        U5      5       H6  n[        R                  " X5   5      (       d  M"  X5   R                  5       X5'   M8     [        U5      S:X  a  S n	U	$ [        U5      S:X  a  US   n	U	$ [        S U5      n	U	$ )Nr>   r   r
   c                 ó
   • X-   $ r    rT   r¥  s     r   r&   ÚCh.lop.<locals>.<lambda>Î  r¨  r   )rè   r°  r*  r)   r>   rÕ   r5   ÚlopÚrangerj   rà   rV  rX  r   )
rL   rä   r‘  rc   r«  r¨   r.   Úlhs_for_childr¬  r�   s
             r   rµ  ÚCh.lop²  s  € Ø×ÑÔàˆØ×$Ñ$ SÓ.ˆ	ØÑ Ø�J‰J�yÔ!ä�T—[‘[Ö!ˆAÜ˜Ó ˆAÜ�q˜(×#Ó#¨¬Ø $× 0Ñ 0°Ó 8�Ø Ó,Ø"#§%¡%¨Ó";�KØ"Ó.ØŸ
™
 ;Ö/ñ "ô ”s˜3“x–ˆAÜ�{Š{˜3™6×"Ó"Ø™Ÿ™Ó)�“ñ !ô ˆs‹8�Q‹;ØˆFð ˆô �‹X�q‹[Ø˜‘VˆFð ˆô Ñ,¨cÓ2ˆFð ˆr   c                 óN   • U R                  U5      nUc  g U R                  X25      $ r    )rï   rì   )rL   rä   r’  rJ   s       r   Úcompute_ropÚCh.compute_ropÓ  s(   € Ø×(Ñ(¨Ó-ˆØ‰:˜dà�~‰~˜bÓ&Ð&r   c           
      óv
  ^• [        5       nSU l        U R                  5         / mXR                  S   ;   aY  [        (       a<  XR
                  ;  a  SU R
                  U'   U R
                  U==   S-  ss'   SU l        U R                  S   U   $ U R                  U5      nUb  TR                  U5        [        (       a  SU l        [        [        U R                  5      5      n[        U R                  5      R                  UR                  [        U R                  R!                  5       5      5      5       GH  n[#        X5      n[%        US5      (       d  M"  X�Ld  M(  S n	U(       aƒ  U R                  U5      n
['        U
[(        5      (       aK  UR+                  5         UR-                  U5      nUR/                  5         US :w  a  U
R1                  U5      OS n	OSUR3                  X¡5      n	OAUR+                  5         UR-                  XS9nUR/                  5         Ub  U R5                  X‹S	9n	U	c  Mú  TR                  U	5        GM     [7        T5      S:X  a  S nOz[7        T5      S:X  a  TS   nOe[8        R:                  " T Vs/ s H  n['        U[(        5      PM     sn5      (       d  [=        S
 T5      nO[)        TS   R>                  U4S j5      nUbë  [@        RB                  " U5      (       dÐ  [        5       n[8        RD                  " U5      nU" 5       S:”  a  [G        SRI                  U" 5       5      5        US:X  d-  [%        US5      (       ao  URJ                  [M        U5      -  S:¼  aS  [        5       n[@        RN                  " U5      nSS K(nURS                  5         [G        SRI                  U" 5       5      5        UbF  [@        RB                  " U5      (       d+  ['        U[(        5      (       d  [8        RT                  " U5      n[7        [W        U RX                  R!                  5       5      5      S:w  a  XÀR                  S   U'   [        (       a  SU l        [#        U SS5      (       a+  [@        RB                  " U5      (       a  UR[                  5       n[#        U SS5      (       a1  [@        RB                  " U5      (       d  [@        RN                  " U5      nU" 5       S:”  aJ  [G        SRI                  U R\                  UR\                  U" 5       [@        RB                  " U5      5      5        U$ s  snf )NTrc   r   r
   ÚcachedÚpendingr>   )rŸ  )r’  c                 ó
   • X-   $ r    rT   r¥  s     r   r&   ÚCh.dr_wrt.<locals>.<lambda>  s   € ¨QªSr   c                 ó&   >^ • [        U 4S jT5      $ )Nc                 óJ   >• U R                  T5      UR                  T5      -   $ r    rŽ  )r‡   Úbr%   s     €r   r&   Ú-Ch.dr_wrt.<locals>.<lambda>.<locals>.<lambda>  s$   ø€ ÐUV×UZÑUZÐ[\ÓU]Ð^_×^cÑ^cÐdeÓ^fÒUfr   r   )r%   rc   s   `€r   r&   rÀ    s   ù€ ÄÔHfÐgjÔAkr   r•  zcount_nonzero in {}secrâ   g      $@z$converting result to sparse in {}secr,  Ú_make_denseFÚ_make_sparsez$dx of {} wrt {} in {}sec, sparse: {})/r   Úcalled_dr_wrtrè   r`   r   rd   re   rï   r*  r)   r/   r‰   r>   r;   r=   r¦   r  rÕ   r5   r"   r	   ÚpauserU  Úresumer¯  rª  rº  rj   ry   rC  r   rò   rà   rV  Úcount_nonzeror   rš  râ   ÚfloatÚ
csc_matrixÚgcÚcollectÚ
atleast_2drs   r_   rX  r¡   )rL   rä   Úreverse_moderŸ  Ú	tm_dr_wrtr«  Ú	propnamesr¨   r.   r¬  r‘  Údr2r�   r‡   Ú
tm_nonzeroÚnonzeroÚtm_convert_to_sparserÍ  rc   s                     @r   rU  Ú	Ch.dr_wrtÙ  s  ø€ Ü“Gˆ	Ø!ˆÔØ×ÑÔàˆà—+‘+˜eÑ$Ó$ßŠuØ×.Ñ.Ó.Ø,-�D×$Ñ$ SÑ)Ø× Ñ  Ó%¨Ñ)Ó%Ø'�”Ø—;‘;˜uÑ% cÑ*Ð*à×/Ñ/°Ó4ˆ	àÑ Ø�J‰J�yÔ!çŠ5Ø$ˆDŒLäœ
 4§>¡>Ó2Ó3ˆ	Ü�T—[‘[Ó!×.Ñ.¨y¯©¼sÀ4Ç=Á=×CUÑCUÓCWÓ?XÓ/Y×ZˆAä˜Ó ˆAä�q˜(×#Ó#¨¬à"�æØ×5Ñ5°aÓ8�CÜ! #¤~×6Ñ6Ø!Ÿ™Ô)ØŸh™h s›m˜Ø!×(Ñ(Ô*Ø9<À» c§j¡j°¤oÈ$™à&'§k¡k°#Ó&;™à—O‘OÔ%ØŸ(™( 3˜(Ð:�CØ×$Ñ$Ô&Ø‘Ø&*×&6Ñ&6°qÐ&6Ð&B˜àÓ*Ø—J‘J˜{×+ñ3 [ô6 ˆs‹8�Q‹;Ø‰FÜ�‹X�q‹[Ø˜‘V‰Fô —6’6Á#ÓFÂ#¸Qœ: a¬Ö8Á#ÑF×GÑGÜÑ 0°#Ó6‘ä'¨¨A©¯©Ô6kÓl�ð Ñ¤b§k¢k°&×&9Ñ&9Ü›ˆJÜ×&Ò& vÓ.ˆGÙ‹|˜cÓ!ÜÐ,×3Ñ3±J³LÓAÔBØ˜!‹|œw v¨v×6Ñ6¸6¿;¹;ÌÈwËÑ;WÐ[_Ó;_Ü',£wÐ$ÜŸš vÓ.�ÛØ—
‘
”ÜÐ:×AÑAÑBVÓBXÓYÔZàÑ¬¯ª°V×)<Ñ)<ÄzÐRXÔZh×GiÑGiÜ—]’] 6Ó*ˆFô Œt�D—M‘M×&Ñ&Ó(Ó)Ó*¨aÓ/Ø&,�K‰K˜Ñ˜sÑ#çŠ5Ø!ˆDŒLä�4˜¨×.Ñ.´2·;²;¸v×3FÑ3FØ—^‘^Ó%ˆFÜ�4˜¨×/Ñ/¼¿ºÀF×8KÑ8KÜ—]’] 6Ó*ˆFá‹;˜ÓÜÐ6×=Ñ=¸d¿o¹oÈsÏ~É~Ñ_hÓ_jÔln×lwÒlwÐx~Óló  Aô  Bàˆùò_ Gs   ÊT6c                 ó>   • U R                   " S0 UD6  U R                  $ )NrT   )r)   rb   )rL   r€   s     r   Ú__call__ÚCh.__call__E  s   € Ø�ŠÑ�6ÒØ�v‰vˆr   c                 ó   • S $ )z 
Used as fn in loop_children_do
c                 ó   • [        U SS5      $ )NrÇ  F)r  r$   s    r   r&   ÚCh.reset_flag.<locals>.<lambda>R  s   € œ  O°UÔ;r   rT   r    s    r   Ú
reset_flagÚCh.reset_flagM  s
   € ñ
 <Ð;r   c                 ó  • U" U 5        U R                    Hh  n[        X5      (       d  M  [        X5      n[        US5      (       d  [        US5      (       d  MD  [        US5      (       d  MW  UR                  U5        Mj     g )Nr>   r<   Úloop_children_do)r>   r5   rÕ   rá  )rL   ÚfnrØ   Údtvals       r   rá  ÚCh.loop_children_doT  sa   € Ù
ˆ4ŒØ—[”[ˆEÜ�t×#Ó#Ü Ó,�Ü˜5 (×+Ñ+¬w°u¸g×/FÓ/FÜ˜uÐ&8×9Ó9Ø×.Ñ.¨rÖ2ò !r   c                 ó  ^^• SSK nSSKnSSKn[        (       d   S5       eUR                  R                  S5      nUU4S jmSSR                  [        [        T" U S5      5      5      5      -  nUR                  R                  Xa5      nUR                  R                  XaS	-   5      n	[        US
5       n
[        U	S
5       nU
R                  U5        U
R                  5         UR                  S	SS9nUR                  SSSUR                  U
R                  /5        SSS5        SSS5        SSKnUR                  SWR                  -   5        U R!                  U R"                  5        g! , (       d  f       NT= f! , (       d  f       N]= f)z‚
Show tree and cache info with color represent _status
Optionally accpet current_node arg to highlight the current node we are in
r   Nú8Please use dr tree visualization functions in debug modeÚprofilesc           
      óŠ  >• SSSSS.n[        U S5      (       a  U R                  nU< S[        U R                  R                  5      < S3n/ n[        U S	5      (       d  U$ U R
                   GHÐ  n[        X5      (       d  M  [        X5      n[        US	5      (       d  [        US
5      (       d  ME  [        US5      (       a  [        US5      OUnU< S[        UR                  R                  5      < S3nS[        U 5      -  nS[        U5      -  nSn	[        US5      (       a  X%R                     OSn
UT:X  a  Sn
[        U[        5      (       aÂ  [        UR                  5      S:”  a©  Sn	UR                  R                  5        Hˆ  u  p¼Uc  M
  [        R                  " U5      nUR                   nU(       a5  UR"                  S   UR"                  S   -  n[        UR$                  5      nO[&        R(                  " U5      nU	SXÞU4-  -  n	MŠ     Oï[        UR*                  S   5      S:”  aÓ  Sn	UR*                  S   R                  5        H°  u  p¼Uc  M
  [        R                  " U5      nUR                   nU(       a5  UR"                  S   UR"                  S   -  n[        UR$                  5      nO[&        R(                  " U5      nU	SXÞU4-  -  n	[        US5      (       d  M›  U	SUR,                  U   -  -  n	M²     X7< SU< S3/-  nUU< SU< SU	< SU
< S3/-  nUT" [        X5      U5      -  nGMÓ     U$ )NÚgreyÚredÚyellowÚgreen)rf   r¾  r½  r,  rŸ   ú (Ú)r>   r<   úaaa%drý   re   Úbluer   z
dr_cached
r
   z!
sparse: %s
size: %d
nonzero: %d
rc   z_cache
rd   z
cache hit:%s
ú -> Ú;ú	 [label="r   z

", color=z, style=filled];)r5   rŸ   r@   r‰   rO   r>   rÕ   r™   re   r"   ÚConcatenaterj   r3  ru   rà   rV  râ   rò   rY  ry   rÊ  r`   rd   )rL   Úmy_nameÚcolor_mappingr�   rØ   rã  Úchild_labelÚsrcÚdstÚsÚcolorr¨   r%  rV  râ   rÕ  Úcurrent_nodeÚ
string_fors                   €€r   rý  Ú&Ch.show_tree_cache.<locals>.string_forj  sá  ø€ à%+°uÀxÐY`ÑaˆMÜ�t˜W×%Ñ%ØŸ*™*�Û#*¬C°·±×0GÑ0GÖ,HÐIˆGØˆFÜ˜4 ×*Ñ*Ø�ØŸ��Ü˜4×'Ó'Ü# DÓ0�EÜ˜u h×/Ñ/´7¸5À'×3JÓ3JÜAHÈÐPW×AXÑAX¤g¨e°WÔ&=Ð^c˜Û3>ÄÀEÇOÁO×D\ÑD\Ö@]Ð&^˜Ø%¬¨D«Ñ2˜Ø%¬¨E«Ñ3˜à˜Ü@GÈÈy×@YÑ@Y ¯m©mÒ <Ð_e˜Ø  LÓ0Ø$*˜EÜ% e¬[×9Ñ9¼cÀ%Ç/Á/Ó>RÐUVÓ>VØ -˜AØ(-¯©×(=Ñ(=Ö(?¡ Ø#$£=Ü/1¯{ª{¸1«~ HØ+,¯6©6 DÞ'/Ø/0¯w©w°q©z¸A¿G¹GÀA¹JÑ/F¨Ü25°a·f±f³+©ä24×2BÒ2BÀ1Ó2E¨Ø$%Ð)PÐT\ÐdkÐSlÑ)lÑ$l¢Aò )@ô ! §¡¨eÑ!4Ó5¸Ó9Ø *˜Aà(-¯©°UÑ(;×(AÑ(AÖ(C¡ Ø#$£=Ü/1¯{ª{¸1«~ HØ+,¯6©6 DÞ'/Ø/0¯w©w°q©z¸A¿G¹GÀA¹JÑ/F¨Ü25°a·f±f³+©ä24×2BÒ2BÀ1Ó2E¨à$%Ð)PÐT\ÐdkÐSlÑ)lÑ$l AÜ'.¨u°m×'DÓ'DØ()Ð-?À%×BSÑBSÐTUÑBVÑ-VÑ(Vªñ )Dð$ ²#³sÐ#;Ð"<Ñ<˜ð Û$'«³a»ð$@ð #Añ A˜à¡*¬W°TÓ-AÀ5Ó"IÑI›ñq %ðr ˆMr   údigraph G {
%s
}r   Úrootú.pngÚwF©ÚsuffixÚdeleter�  ú-Tpngú-oúfile://)ÚosÚtempfileÚ
subprocessr   ÚpathÚabspathÚjoinrs   r)   Úopenr   ÚflushÚNamedTemporaryFileÚcallr}   Ú
webbrowserrá  rÞ  )rL   rŸ   rü  r	  r
  r  Ú
cache_pathÚdot_file_contentsÚdot_file_nameÚpng_file_nameÚdot_fileÚpng_filer  rý  s     `          @r   Úshow_tree_cacheÚCh.show_tree_cache^  s3  ù€ ó
 	ÛÛçŠuÐPÐPÓPˆuà—W‘W—_‘_ ZÓ0ˆ
öB	ðJ 1°4·9±9¼TÄ#ÁjÐQUÐW]ÓF^ÓB_Ó=`Ó3aÑaÐØŸ™Ÿ™ ZÓ7ˆØŸ™Ÿ™ Z°v±Ó>ˆÜ�- Ô%¨Ü�m SÔ)¨XØ—‘Ð0Ô1Ø—‘Ô à#×6Ñ6¸fÈUÐ6ÐS�Ø—‘ ¨°°x·}±}ÀhÇmÁmÐ TÔU÷ *÷ &ó 	Ø�‰˜	 H§M¡MÑ1Ô2à×Ñ˜dŸo™oÕ.÷ *Õ)ú÷ &Õ%ús%   Â5E=ÃAE,ÄE=Å,
E:	Å6E=Å=
Fc                 ó¼  ^• SS K nSS Kn[        (       d   S5       eU4S jmSSR                  [	        [        T" U SU5      5      5      5      -  nUR                  5       nUR                  U5        UR                  5         UR                  SSS	9nUR                  S
SSUR                  UR                  /5        SS KnUR                  SUR                  -   5        g )Nr   ræ  c                 óÖ  >• [        U S5      (       a  U R                  nU< S[        U R                  R                  5      < S3n/ n[        U S5      (       d  U$ U R
                   GH}  n[        X5      (       d  M  [        X5      n[        US5      (       d  [        US5      (       d  ME  [        US5      (       a  [        US5      OUnU< S[        UR                  R                  5      < S3nS[        U 5      -  nS[        U5      -  nX7< SU< S3/-  nX7< S	U< S
3/-  nX%R                  S   ;   aˆ  UR                  S   U   bu  [        R                  " UR                  S   U   5      n	UR                  S   U   R                  n
[        R                  " UR                  S   U   5      nUSX†XšU4-  /-  nOX8< S	U< S
3/-  nUT" [        X5      XB5      -  nGM€     U$ )NrŸ   rí  rî  r>   r<   rï  rñ  rò  ró  ú"];rc   z4%s [label="%s
 is_sparse: %s
size: %d
nonzero: %d"];)r5   rŸ   r@   r‰   rO   r>   rÕ   r™   r`   rà   rV  râ   ry   rÊ  )rL   rõ  rä   r�   rØ   rã  r÷  rø  rù  rV  râ   rÕ  rý  s               €r   rý  Ú$Ch.show_tree_wrt.<locals>.string_forÅ  sÄ  ø€ Ü�t˜W×%Ñ%ØŸ*™*�Û#*¬C°·±×0GÑ0GÖ,HÐIˆGØˆFÜ˜4 ×*Ñ*Ø�ØŸ��Ü˜4×'Ó'Ü# DÓ0�EÜ˜u h×/Ñ/´7¸5À'×3JÓ3JÜAHÈÐPW×AXÑAX¤g¨e°WÔ&=Ð^c˜Û3>ÄÀEÇOÁO×D\ÑD\Ö@]Ð&^˜Ø%¬¨D«Ñ2˜Ø%¬¨E«Ñ3˜Ø²#³sÐ#;Ð"<Ñ<˜Øº»gÐ#FÐ"GÑG˜Ø§,¡,¨uÑ"5Ó5¸%¿,¹,ÀuÑ:MÈcÑ:RÑ:^Ü')§{¢{°5·<±<ÀÑ3FÀsÑ3KÓ'L˜HØ#(§<¡<°Ñ#6°sÑ#;×#@Ñ#@˜DÜ&(×&6Ò&6°u·|±|ÀEÑ7JÈ3Ñ7OÓ&P˜GØ"Ð'`Ø(+¸(Ø(/ð(1ñ(1ð '2ñ 2™Fð #ºSÃ+Ð'NÐ&OÑO˜FØ¡*¬W°TÓ-AÀ5Ó"NÑN›ñ' %ð( ˆMr   rÿ  r   r   r  Fr  r�  r  r  r  )r
  r  r   r  rs   r)   r  r   r  r  r}   r  r  )	rL   rä   r
  r  r  r  r  r  rý  s	           @r   Úshow_tree_wrtÚCh.show_tree_wrt¿  s»   ø€ ÛÛçŠuÐPÐPÓPˆuõ	ð< 1°4·9±9¼TÄ#ÁjÐQUÐW]Ð_bÓFcÓBdÓ=eÓ3fÑfÐØ×.Ñ.Ó0ˆØ�‰Ð(Ô)Ø�‰ÔØ×.Ñ.°fÀUÐ.ÐKˆØ�‰˜ ¨¨x¯}©}¸h¿m¹mÐLÔMÛØ�‰˜	 H§M¡MÑ1Õ2r   c                 óÒ  ^^• SSK nSSKn[        (       d   S5       eUU4S jmSSR                  [	        [        T" U S5      5      5      5      -  nT[        R                  :w  añ  SSKnUR                  SXER                  5      n[        U5      S:”  aÂ  [        R                  " [        R                  " U Vs/ s H  n[        U5      PM     sn5      5      nU Hx  n	[        U	5      U-  n
[        U	5      nS	nUS
:”  a  US-  nSnUS
:”  a  US-  nSnUS
:”  a  US-  nSnUS
:”  a  US-  nSnUR!                  SU	-  SU
S-  SSU
-
  S-  X¼4-  U5      nMz     UR#                  5       nUR%                  U5        UR'                  5         UR#                  SSS9nUR)                  SSSUR*                  UR*                  /5        SSKnUR/                  SUR*                  -   5        gs  snf )z^Cachelim is in Mb. For any cached jacobians above cachelim, they are also added to the graph. r   Nræ  c                 ó<  >• [        U S5      (       a  U R                  nU< S[        U R                  R                  5      < S3n/ n[        U S5      (       d  U$ U R
                   Hâ  n[        X5      (       d  M  [        X5      n[        US5      (       d  [        US5      (       d  MD  [        US5      (       a  [        US5      OUnU< S[        UR                  R                  5      < S3nS[        U 5      -  nS[        U5      -  nX&< SU< S3/-  nX&< S	U< S
3/-  nX'< S	U< S
3/-  nUT" [        X5      U5      -  nMä     T[        R                  :w  a²  [        U S5      (       a¡  SU R                  ;   a‘  SSKJn  [        U R                  S   R                  5       5       Ha  u  pIS[        U 5      -  nS[        U5      -  n [        R                   " UR#                  U	S5      5      n
U
TS-  S-  :”  d  MV  USXgU
4-  /-  nMc     U$ !   Sn
 N%= f)NrŸ   rí  rî  r>   r<   rï  rñ  rò  ró  r  r`   rc   r   )ÚcPickler²   é   z)%s -> %s [style=dotted,color="<<<%d>>>"];)r5   rŸ   r@   r‰   rO   r>   rÕ   r™   ry   Úinfr`   Ú	six.movesr$  rs   ru   r   Ú	getsizeofÚdumps)rL   rõ  r�   rØ   rã  r÷  rø  rù  Úpicklerî   ÚszÚcachelimrý  s              €€r   rý  Ú Ch.show_tree.<locals>.string_foró  sê  ø€ Ü�t˜W×%Ñ%ØŸ*™*�Û#*¬C°·±×0GÑ0GÖ,HÐIˆGØˆFÜ˜4 ×*Ñ*Ø�ØŸœ�Ü˜4×'Ó'Ü# DÓ0�EÜ˜u h×/Ñ/´7¸5À'×3JÓ3JÜAHÈÐPW×AXÑAX¤g¨e°WÔ&=Ð^c˜Û3>ÄÀEÇOÁO×D\ÑD\Ö@]Ð&^˜Ø%¬¨D«Ñ2˜Ø%¬¨E«Ñ3˜Ø²#³sÐ#;Ð"<Ñ<˜Øº»gÐ#FÐ"GÑG˜Øº»kÐ#JÐ"KÑK˜Ø¡*¬W°TÓ-AÀ5Ó"IÑIšñ %ð œ2Ÿ6™6Ó!¤g¨d°H×&=Ñ&=À%È4Ï;É;ÓBVÝ7Ü"& t§{¡{°5Ñ'9×'?Ñ'?Ó'AÖ"B‘J�Eð "¤R¨£XÑ.�CØ!¤R¨£YÑ/�CðÜ Ÿ]š]¨6¯<©<¸¸RÓ+@ÓA˜ð
 ˜X¨™_¨tÑ3Õ4ØÐ#NÐRUÐ\^ÐQ_Ñ#_Ð"`Ñ`šñ #Cð& ˆMøðØšús   Ç&HÈHrÿ  r   r   z<<<(\d+)>>>rÃ  g      �@r%  ÚKÚMÚGrë   z<<<%s>>>z#%02x%02x%02x",label="%d%séÿ   r
   r  Fr  r�  r  r  r  )r
  r  r   r  rs   r)   ry   r&  ÚreÚfindallÚDOTALLrj   ÚmaxrW  ÚintrË  Úsubr  r   r  r  r}   r  r  )rL   r,  r
  r  r  r2  Ústrsr  Úthe_maxrú  Úszpctr+  Úunitr  r  r  rý  s    `              @r   Ú	show_treeÚCh.show_treeì  sà  ù€ ãÛçŠuÐPÐPÓPˆuö)	ðV 1°4·9±9¼TÄ#ÁjÐQUÐW]ÓF^ÓB_Ó=`Ó3aÑaÐØ”r—v‘vÓÛØ—:‘:˜nÐ.?ÇÁÓKˆDÜ�4‹y˜1‹}ÜŸ&š&¤§¢¹4Ó*@º4°a¬3¨q®6¹4Ñ*@Ó!AÓB�Û�AÜ! !›H WÑ,�EÜ˜q›�BØ�DØ˜E“zØ˜d™
˜Ø"˜Ø˜E“zØ˜d™
˜Ø"˜Ø˜E“zØ˜d™
˜Ø"˜Ø˜E“zØ˜d™
˜Ø"˜à(*¯©¨z¸A©~Ð?[Ð_dÐehÑ_hÐjkÐnoÐpuÑnuÐwzÑmzÐ|~ð  _Fñ  @Fð  HYó  )ZÒ%ñ# ð& ×.Ñ.Ó0ˆØ�‰Ð(Ô)Ø�‰ÔØ×.Ñ.°fÀUÐ.ÐKˆØ�‰˜ ¨¨x¯}©}¸h¿m¹mÐLÔMÛØ�‰˜	 H§M¡MÑ1Õ2ùò5 +As   Â8G$c              #   óÀ  #   • Uc
  [        5       nX;  aÈ  U(       a&  [        U[        5      (       a  UR                  U 5        UR	                  U 5        U v •  [        U S5      (       d  Sv •  U R                   H`  n[        X5      (       d  M  [        X5      n[        US5      (       d  [        US5      (       d  MD  UR                  U5       H  nUv •  M	     Mb     gg7f)zK
Generator function that traverse the dr tree start from this node (self).
Nr>   r<   )	r)   r"   rs   r*  r  r5   r>   rÕ   Útree_iterator)rL   Úvisitedr  rØ   ÚchildÚnodes         r   r?  ÚCh.tree_iterator@  s±   é € ð ‰?Ü“eˆGàÓÞœ
 4¬×.Ñ.Ø—‘˜DÔ!à�K‰K˜ÔØŠJä˜4 ×*Ñ*ÛàŸœ�Ü˜4×'Ó'Ü# DÓ0�EÜ˜u h×/Ñ/´7¸5À'×3JÓ3JØ$)×$7Ñ$7¸Ö$@˜DØ"&œJó %Aò	 %ð ùs   ‚BCÂ+CÂ<"Cc                 ó   • [        U 5      $ r    )Úfloorr    s    r   rE  ÚCh.floorX  s   € Ü�T‹{Ðr   c                 ó   • [        U 5      $ r    )Úceilr    s    r   rH  ÚCh.ceil[  r  r   c                 ó   • [        X5      $ r    rŽ  ©rL   Úothers     r   r�  ÚCh.dot^  s   € Ü�4ÓÐr   c                 ó   • [        XS9$ ©N)r‡   rx  )Úcumsumrw  s     r   rP  Ú	Ch.cumsuma  s   € Ü˜Ñ(Ð(r   c                 ó   • [        XS9$ rO  )Úaminrw  s     r   ÚminÚCh.mind  ó   € Ü�dÑ&Ð&r   c                 ó   • [        XS9$ rO  )Úamaxrw  s     r   r5  ÚCh.maxg  rV  r   c                 ó   • U $ r    rT   r    s    r   Ú__pos__Ú
Ch.__pos__m  s   € ˜d�{r   c                 ó   • [        U 5      $ r    )Únegativer    s    r   Ú__neg__Ú
Ch.__neg__n  s   € œh t›nÐ,r   c                 ó   • [        XS9$ ©N)r‡   rÃ  ©r  rK  s     r   Ú__add__Ú
Ch.__add__p  s   € ¤c¨DÑ&:Ð:r   c                 ó   • [        XS9$ rb  rc  rK  s     r   Ú__radd__ÚCh.__radd__q  s   € ¤c¨EÑ&:Ð:r   c                 ó   • [        XS9$ rb  ©ÚsubtractrK  s     r   Ú__sub__Ú
Ch.__sub__s  ó   € ¤h°Ñ&?Ð?r   c                 ó   • [        XS9$ rb  rj  rK  s     r   Ú__rsub__ÚCh.__rsub__t  ó   € ¤h°Ñ&?Ð?r   c                 ó   • [        XS9$ rb  ©ÚmultiplyrK  s     r   Ú__mul__Ú
Ch.__mul__v  rn  r   c                 ó   • [        XS9$ rb  rt  rK  s     r   Ú__rmul__ÚCh.__rmul__w  rr  r   c                 ó   • [        XS9$ ©N)Úx1Úx2©ÚdividerK  s     r   Ú__div__Ú
Ch.__div__y  s   € ¤f°Ñ&?Ð?r   c                 ó   • [        XS9$ r|  r  rK  s     r   Ú__truediv__ÚCh.__truediv__z  s   € ¬&°DÑ*CÐ#Cr   c                 ó   • [        XS9$ r|  r  rK  s     r   Ú__rdiv__ÚCh.__rdiv__{  s   € ¤f°Ñ&?Ð?r   c                 ó   • [        XS9$ ©N)r%   Úpow©ÚpowerrK  s     r   Ú__pow__Ú
Ch.__pow__}  s   € ¤e¨dÑ&>Ð>r   c                 ó   • [        XS9$ rŠ  rŒ  rK  s     r   Ú__rpow__ÚCh.__rpow__~  s   € ¤e¨eÑ&>Ð>r   c                 ó$   • U R                  U5      $ r    )Ú__and__rK  s     r   Ú__rand__ÚCh.__rand__€  s   €  d§l¡l°5Ó&9Ð9r   c                 ó   • [        U 5      $ r    )Úabsr    s    r   Ú__abs__Ú
Ch.__abs__‚  s   € œs 4›yÐ(r   c                 ó   • [        X5      $ r    )ÚgreaterrK  s     r   Ú__gt__Ú	Ch.__gt__„  s   € ¤G¨DÓ$8Ð8r   c                 ó   • [        X5      $ r    )Úgreater_equalrK  s     r   Ú__ge__Ú	Ch.__ge__…  s   € ¤M°$Ó$>Ð>r   c                 ó   • [        X5      $ r    )ÚlessrK  s     r   Ú__lt__Ú	Ch.__lt__‡  s   € ¤D¨Ó$5Ð5r   c                 ó   • [        X5      $ r    )Ú
less_equalrK  s     r   Ú__le__Ú	Ch.__le__ˆ  s   € ¤J¨tÓ$;Ð;r   c                 ó   • [        X5      $ r    )Ú	not_equalrK  s     r   Ú__ne__Ú	Ch.__ne__Š  s   € ¤I¨dÓ$:Ð:r   )re   rÇ  r>   )NT)TrÐ   Nr    )FN)NN)jrO   rP   rQ   rR   r<   r>   Ú__array_priority__r�   rš   rt   re   rÇ  rŸ  rm   Úclassmethodr|   rn   r#   r¡   r©   r®   r³   r¶   r¹   r½   rÀ   rÄ   rÈ   rÖ   rÝ   rå   rï   rò   râ   rø   rþ   r  r  r	  r  r  rp   r  r  r4  r7  r)   rD  rH  rN  rT  r`  rc  rf  ri  rl  rë   rp  rv  r|  rÔ   rè   rb   rì   rª  r°  rµ  rº  rU  rÙ  rÞ  rá  r  r   ry   r&  r<  r?  rE  rH  r�  rP  rT  r5  r[  r_  rd  rg  rl  rp  rv  ry  r�  r„  r‡  rŽ  r‘  r•  r™  r�  r¡  r¥  r©  r­  rS   Ú__classcell__©r‰   s   @r   r   r   G   s¯  ø† Ø€EØˆU€FØÐØ€MØ€LØ&+¸UÑC€OØ€Gà€MØ€Hõ
-ð^ ñ/ó ð/ð ñ)ó ð)ðF ñQó ðQð ñjó ðjòJò.òð ñó ðð ñó ðð ñó ðð ñó ðôô@\ò$òò/ð@ ñó ðð ñ#ó ð#òò<òò)òòò/ô..ò`(ôô,.ò 
òAò$Xò$òCô'RòVò:ò"ò òð ñó ðò&ô#ô%ô$ò
;ð ñ$ó ð$ô+òZ"òJbòòB'ôiòXð ñ<ó ð<ò3ô_/òB+3ðZ "$§¡ô Q3ôh'ò0òò ô)ô'ô'ò #Ú,â:Ú:â?Ú?â?Ú?â?ÚCÚ?â>Ú>â9â(â8Ú>â5Ú;ç:Ð:r   r   c                   ó(   • \ rS rSrSrSrS rS rSrg)r   i“  ÚmtxÚvecc                 ó¾  • U R                   R                  [        U R                  R                  R                  5       5      5      R                  5       n[        U R                  R                  R                  5      S:”  a[  U R                  R                  R                  S   S:”  a4  UR                  SU R                  R                  R                  S   45      nU$ )Nr
   r²   )	r´  r�  r   rµ  rb   r³   rj   rò   r®   r  s     r   rÝ   ÚMatVecMult.compute_r–  s“   € Ø—‘—‘œc $§(¡(§*¡*×"2Ñ"2Ó"4Ó5Ó6×<Ñ<Ó>ˆÜˆt�x‰x�z‰z×ÑÓ  1Ó$¨¯©¯©×)9Ñ)9¸!Ñ)<¸qÓ)@Ø—^‘^ R¨¯©¯
©
×(8Ñ(8¸Ñ(;Ð$<Ó=ˆFØˆr   c                 ó`   • XR                   L a   [        R                  " U R                  5      $ g r    )rµ  rà   rÌ  r´  rã   s     r   rå   ÚMatVecMult.compute_dr_wrtœ  s#   € Ø—(‘(Š?Ü—=’= §¡Ó*Ð*ð r   rT   N)	rO   rP   rQ   rR   r<   r>   rÝ   rå   rS   rT   r   r   r   r   “  s   † Ø€EØ€Fòõ+r   r   c                  óÖ   ^• [        5       mU  HL  n[        U[        5      (       a  TR                  U5        M+  U Vs/ s H  nTR                  U5      PM       nMN     U4S jnU$ s  snf )Nc                 ó    >^ ^• S[         R                  " T 5      R                  ;   m[        T 5      U U4S j5       nTUl        [        U5      nU$ )NÚoutc                 óœ   >• TR                   nU R                  U   nUS   S:X  a#  T(       a  US   US'   T" U /UQ70 UD6US'   SUS'   US   $ )Nrh   Trg   r¼  F)rO   ri   )rL   r   r€   r…   ÚsdfÚfuncÚwant_outs        €€r   Úwith_cachingÚ5depends_on.<locals>._depends_on.<locals>.with_cachingµ  se   ø€ àŸ™ˆIØ×'Ñ'¨	Ñ2ˆCØ�=Ñ! TÓ)æØ$'¨¡L�F˜5‘MÙ# DÐ:¨4Ò:°6Ñ:��G‘Ø%*��MÑ"à�w‘<Ðr   )r*   Úgetfullargspecr   r   r3   r#   )r¿  rÁ  r�   rÀ  r3   s   `  @€r   Ú_depends_onÚdepends_on.<locals>._depends_on²  sM   ú€ ØœG×2Ò2°4Ó8×=Ñ=Ñ=ˆä	ˆt‹õ
	 ó 
ð
	 ð !ˆÔÜ˜,Ó'ˆØˆr   )r)   r"   r@   r  )ÚdependenciesÚdepr  rÄ  r3   s       @r   r   r   ª  sX   ø€ Ü‹5€DÛˆÜ�cœ3×ÑØ�H‰H�SŽMá"%Ó&¢#˜QˆT�X‰X�aŽ[¡#Ó&ñ	 õð$ Ðùò) 's   ½A&c                   ó$   • \ rS rSrSrS rS rSrg)r   iÈ  r$   c                 óP   • U R                   U Ld   eU R                   R                  $ r    )r%   rb   r    s    r   rÝ   ÚChHandle.compute_rË  s!   € Ø�v‰v˜TÒ!Ð"Ð!Ø�v‰v�x‰xˆr   c                 ó"   • XR                   L a  gg rG   r$   rã   s     r   rå   ÚChHandle.compute_dr_wrtÏ  s   € Ø—&‘&Š=Øð r   rT   N©rO   rP   rQ   rR   r>   rÝ   rå   rS   rT   r   r   r   r   È  s   † Ø€Fòõr   r   c                   óX   ^ • \ rS rSrSS/r/ rSS/rS rS
S jrU 4S jr	S r
S rS	rU =r$ )r   iÔ  ÚlmbÚinitial_argsc                 óÂ   • [        U5      R                  [        U R                  R                  5       5      5       H   n[	        X5      U R                  U   l        M"     g r    )r)   r;   r   r  rÕ   r%   ©rL   ÚwhichÚargnames      r   rl  ÚChLambda.on_changedÙ  sB   € Ü˜5“z×.Ñ.¬s°4·9±9·>±>Ó3CÓ/DÖEˆGÜ#*¨4Ó#9ˆD�I‰I�gÑÖ ò Fr   c           
      óL  • [         R                  " U5      R                  n[        U5       VVs0 s H  u  pEU[	        [        U5      S9_M     nnnUb  U H  nXv;   d  M
  X'   Xg   l        M     U" S0 UD6n[        UR                  5       5       Hs  u  pYUR                  U	R                  5      (       a  U R                  XYR                  5        MB  U R                  R                  U5        [        XU	R                  5        Mu     X`l        U R                  SU5        g s  snnf )Nr$   Ú_resultrT   )r*   rÃ  r   rw   r   r   r%   rs   ru   rD  r  r<   r*  r  )
rL   rÏ  rÐ  Úargspec_argsr†   rÔ  r   Úinitial_argr�   Úargs
             r   rM   ÚChLambda.__init__Ý  së   € Ü×-Ò-¨cÓ2×7Ñ7ˆÜAJÈ<ÔAXÔYÒAX±°�œ¤B s£GÑ,Ò,ÑAXˆÑYØÑ#Û+�ØÕ&Ø*6Ñ*C�DÑ%Ö'ñ  ,ñ ‘�t‘ˆÜ  §¡£Ö.‰LˆGØ×Ñ §¡×&Ñ&Ø—‘˜w¯©Ö.à—
‘
×!Ñ! 'Ô*Ü˜ s§u¡uÖ-ñ /ð Œ	Ø�‰�y &Õ)ùó Zs   ¯D c                 ód   >• [        U S5      (       a  S U l        [        U R                  U ]  5       $ )NrÏ  )r5   rÏ  rl   r‰   r  )rL   r‰   s    €r   r  ÚChLambda.__getstate__î  s+   ø€ ä�4˜×ÑØˆDŒHÜ�T—^‘^ TÑ7Ó9Ð9r   c                 ó.   • U R                   R                  $ r    ©r×  rb   r    s    r   rÝ   ÚChLambda.compute_rõ  ó   € Ø�|‰|�~‰~Ðr   c                 ó"   • XR                   L a  gg rG   )r×  rã   s     r   rå   ÚChLambda.compute_dr_wrtø  s   € Ø—,‘,ÒØð r   )r   rÏ  r    )rO   rP   rQ   rR   r<   r>   rx   rl  rM   r  rÝ   rå   rS   r±  r²  s   @r   r   r   Ô  s:   ø† Ø�NÐ#€EØ€FØ˜Ð(€Jò:ô*õ":ò÷ð r   r   c                   ó@   • \ rS rSrSS/r/ rSS/rS rS rS r	S r
Srg	)
ÚChGroupi   r�   r   c                 ó  • [        U5      R                  [        U R                  R                  5       5      5       HG  nU R                  U   R                  [        X5      Ld  M*  [        X5      U R                  U   l        MI     g r    )r)   r;   r   r  r%   rÕ   rÒ  s      r   rl  ÚChGroup.on_changed  s^   € Ü˜5“z×.Ñ.¬s°4·9±9·>±>Ó3CÓ/DÖEˆGØ—9‘9˜WÑ%×'Ñ'¬7°4Ó+AÔAÜ'.¨tÓ'=�—	‘	˜'Ñ"Ö$ò Fr   c           	      óÞ  • [        UR                  5       5       VVs0 s H  u  p4U[        US9_M     snnU l        [        U R                  R                  5       5       H  u  p4[	        XU5        UR                  UR                  5      (       a  U R                  X4R                  5        MN  U R                  R                  U5        [	        XUR                  5        M�     Xl
        g s  snnf )Nr$   )rs   ru   r   r   r  rD  r%   r  r<   r*  r×  )rL   r�   r   rÔ  rÚ  s        r   rM   ÚChGroup.__init__  s¨   € ÜCGÈÏ
É
ËÔCUÔWÒCU±<°7�gœx¨#™Ò.ÑCUÒWˆŒ	Ü  §¡§¡Ó!2Ö3‰LˆGÜ�F SÔ)Ø×Ñ §¡×&Ñ&Ø—‘˜w¯©Ö.à—
‘
×!Ñ! 'Ô*Ü˜ s§u¡uÖ-ñ 4ð �ùó Xs   �C)c                 ó.   • U R                   R                  $ r    rß  r    s    r   rÝ   ÚChGroup.compute_r  rá  r   c                 ó8   • U R                   R                  U5      $ r    )r×  rU  rã   s     r   rå   ÚChGroup.compute_dr_wrt  s   € Ø�|‰|×"Ñ" 3Ó'Ð'r   )r×  r   N)rO   rP   rQ   rR   r<   r>   rx   rl  rM   rÝ   rå   rS   rT   r   r   rå  rå     s/   † Ø�vÐ€EØ€FØ˜FÐ#€Jò>ò	òõ(r   rå  )Ú*)Ú__all__)rê   )Úlinalg)Ú	ch_randomrð  Úrandomc                   ó(   • \ rS rSr/ SQrS rS rSrg)Útsti0  )r‡   rÃ  Úcc                 óŠ   • U R                   R                  U R                  R                  -   U R                  R                  -   $ r    )r‡   rb   rÃ  rõ  r    s    r   rÝ   Útst.compute_r3  s*   € Ø�v‰v�x‰x˜$Ÿ&™&Ÿ(™(Ñ" T§V¡V§X¡XÑ-Ð-r   c                 ó   • grG   rT   rã   s     r   rå   Útst.compute_dr_wrt6  s   € Ør   rT   NrÍ  rT   r   r   rô  rô  0  s   † Ú€Fò.õr   rô  c                  óV  • [         n [        S5      n[        S5      n[        S5      n[        S 5      n[        UR	                  UR
                  5      5        SS KoUR                  5         [        XU5      n[        UR                  5        [        U 5        SS KoUR                  5         g )Né
   é   é   c                 óN   • [        S5      [        S5      [        S5      -  -   S-   $ )Nr
   rÐ   é   é   )r   )r%   r¦  Úzs      r   r&   Úmain.<locals>.<lambda>@  s   € ¤2 a£5¬2¨a«5´2°a³5©=Ñ#8¸1Ò#<r   r   )	rô  r   r   r©  rU  r%   r�  Ú	set_tracerb   )ÚfooÚx10Úx20Úx30rP  r�  Úblahs          r   Úmainr	  9  sv   € Ü
€Cä
ˆR‹&€CÜ
ˆR‹&€CÜ
ˆR‹&€Cä
Ñ<Ó
=€CÜ	ˆ#�*‰*�S—U‘UÓ
ÔÛ—‘”ô ˆs˜Ó€Dä	ˆ$�&‰&„Mô 
ˆ#„Jã—‘•r   Ú__main__)=Ú__doc__rï  r	  r   Útimer*   Úscipy.sparseÚsparserà   Únumpyry   r˜  rq   r	  r  Ú	functoolsr   Úscipy.sparse.linalg.interfacer	   Úutilsr   r   r   r   r‘   r   r   r   r   r   rr   r(   r/   r4   r7   r9   rB   ro   rD   r   r)   r¦   r  r:   r   r   r   r   rå  Úch_opsÚ
all_ch_opsÚ
reorderingrê   Úall_reorderingrý   rð  rñ  rò  rô  r	  rO   rT   r   r   Ú<module>r     s_  ðñò E€ç Ó Û Ý Û Û Û Û Ý Ý 8ß IÓ IÛ Ý Ý ð
 	€à
€ò%ð
 ×+Ò+Ó-€ò ð
 ×/Ò/Ó1Ð ò$ð ×-Ò-Ó/Ð òxô
#ˆ6ô 
#ôC;ˆô C;ñR" �b—k‘k×&Ñ&Ó(Ó)€„ô+�ô +ò.ô<	ˆrô 	ô&ˆrô &ôX(ˆbô (ô< Ý )Ø ˆ:Ñ €ä Ý Ý 1Ø ˆ>Ñ €õ Ý !Ø ˆH�hÐÑ €ôˆ"ô ò ð8 ˆzÓÙ…Fð r   