§
    OŠtj\S  ã                   óH  — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	  ej
        d¦  «        Ze                     ej        ¦  «          ed¦  «        Ze                     ej        ¦  «         erRddlZej        ZddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlm Z  d„ dD ¦   «         \  Z!Z"Z#d„ dD ¦   «         \  Z$Z%Z&ndZ'ddl(Z)ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddlm1Z1m2Z2m3Z3 d„ dD ¦   «         \  Z4Z5Z6  e)j7        d¦  «        e0¦  «        Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@ed „ ¦   «         ZAd!„ ZBd"„ ZCd#„ ZDd$„ ZEd%„ ZFd&„ ZGd'„ ZHd(„ ZId)„ ZJd*„ ZKd+„ ZLd,„ ZMd-„ ZNd.„ ZOd/„ ZPd0„ ZQd1„ ZRd2„ ZSd3„ ZTd4„ ZUd5„ ZVd6„ ZWd7„ ZXd8„ ZYd9„ ZZed:„ ¦   «         Z[d;„ Z\d<„ Z]d=„ Z^d>„ Z_d?„ Z`d@„ ZadA„ ZbdB„ ZcdC„ ZddD„ ZedS )Eaˆ  
Important note on tests in this module - the Aesara printing functions use a
global cache by default, which means that tests using it will modify global
state and thus not be independent from each other. Instead of using the "cache"
keyword argument each time, this module uses the aesara_code_ and
aesara_function_ functions defined below which default to using a new, empty
cache instead.
é    N)Úimport_module)ÚraisesÚSKIPÚwarns_deprecated_sympy)Úignore_warningszaesara.configdefaultsÚaesara)Ú
ScalarType)ÚVariable)ÚTensorVariable)ÚElemwiseÚ
DimShuffle)ÚDot)Útrue_dividec                 óD   — g | ]}t                                |d ¦  «        ‘ŒS )ÚfloatX)ÚaetÚscalar)Ú.0Únames     úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/tests/test_aesaracode.pyú
<listcomp>r   #   s&   € Ð?Ð?Ð?°•#—*’*˜T 8Ñ,Ô,Ð?Ð?Ð?ó    Úxyzc                 óH   — g | ]}t                                d d|¬¦  «        ‘Œ S )r   ©FF©r   )r   Útensor©r   Úns     r   r   r   $   s*   € ÐNÐNÐNÀ1•#—*’*˜X ~¸A�*Ñ>Ô>ÐNÐNÐNr   ÚXYZT)ÚS)ÚxÚyÚzÚt)Úaesara_codeÚdim_handlingÚaesara_functionc                 ó:   — g | ]}t          j        |d d ¦  «        ‘ŒS )é   ©ÚsyÚMatrixSymbolr   s     r   r   r   2   s&   € Ð
3Ð
3Ð
3¨�2Œ?˜1˜a Ñ#Ô#Ð
3Ð
3Ð
3r   Úfc                 ó˜   — |                      di ¦  «         t          ¦   «         5  t          | fi |¤Žcddd¦  «         S # 1 swxY w Y   dS )zB Wrapper for aesara_code that uses a new, empty cache by default. ÚcacheN)Ú
setdefaultr   r&   )ÚexprÚkwargss     r   Úaesara_code_r4   8   s›   € à
×Ò�g˜rÑ"Ô"Ð"Ý	Ñ	!Ô	!ð +ð +Ý˜4Ð*Ð* 6Ð*Ð*ð+ð +ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   ¥?¿AÁAc                 óš   — |                      di ¦  «         t          ¦   «         5  t          | |fi |¤Žcddd¦  «         S # 1 swxY w Y   dS )zF Wrapper for aesara_function that uses a new, empty cache by default. r0   N)r1   r   r(   )ÚinputsÚoutputsr3   s      r   Úaesara_function_r8   >   s�   € à
×Ò�g˜rÑ"Ô"Ð"Ý	Ñ	!Ô	!ð :ð :Ý˜v wÐ9Ð9°&Ð9Ð9ð:ð :ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :s   ¥A Á AÁAc                  óB  — t          t          t          | ¦  «        ¦  «        }t          t          j        j                             |¦  «        ¦  «        }t          j        j                             ||¦  «        \  }}t          j        j         	                    ||¦  «        S )z¸ Transform SymPy expressions into Aesara Computation.

    Parameters
    ==========
    exprs
        SymPy expressions

    Returns
    =======
    aesara.graph.fg.FunctionGraph
    )
ÚlistÚmapr4   r   ÚgraphÚbasicÚgraph_inputsÚcloneÚfgÚFunctionGraph)ÚexprsÚoutsÚinss      r   Ú	fgraph_ofrE   E   ss   € õ ••L %Ñ(Ô(Ñ)Ô)€DÝ
�vŒ|Ô!×.Ò.¨tÑ4Ô4Ñ
5Ô
5€CÝ”Ô"×(Ò(¨¨dÑ3Ô3�I€CˆÝŒ<Œ?×(Ò(¨¨dÑ3Ô3Ð3r   c                 óÄ   — t           j                             ¦   «                              d¦  «        }|                      ¦   «         } |j                             | ¦  «         | S )z© Simplify a Aesara Computation.

    Parameters
    ==========
    fgraph : aesara.graph.fg.FunctionGraph

    Returns
    =======
    aesara.graph.fg.FunctionGraph
    Úfusion)r   ÚcompileÚget_default_modeÚ	excludingr?   Ú	optimizerÚrewrite)ÚfgraphÚmodes     r   Úaesara_simplifyrO   W   sM   € õ Œ>×*Ò*Ñ,Ô,×6Ò6°xÑ@Ô@€DØ�\Š\‰^Œ^€FØ„N×Ò˜6Ñ"Ô"Ð"Ø€Mr   c                 óî  — t           t          t          j        f}t	          | |¦  «        }t	          ||¦  «        }|s|r|r|sdS | |k    S t	          | t
          t          f¦  «        }t	          |t
          t          f¦  «        }|s|rl|r"|r t          | ¦  «        t          |¦  «        k    rdS t          t          t          | ¦  «        ¦  «        t          t          t          |¦  «        ¦  «        k    S t          j                             | d¬¦  «        }t          j                             |d¬¦  «        }d| |fd||ffD ]2\  }	}
}|dk    r&t          d|	›d|	›d	t          |
¦  «        ›d
�¦  «        ‚Œ3||k    S )aæ   Test two Aesara objects for equality.

    Also accepts numeric types and lists/tuples of supported types.

    Note - debugprint() has a bug where it will accept numeric types but does
    not respect the "file" argument and in this case and instead prints the number
    to stdout and returns an empty string. This can lead to tests passing where
    they should fail because any two numbers will always compare as equal. To
    prevent this we treat numbers as a separate case.
    FÚstr)ÚfileÚaÚbÚ zaesara.printing.debugprint(z) returned empty string (z is instance of ú))ÚintÚfloatÚnpÚnumberÚ
isinstanceÚtupler:   Útyper;   Útheqr   ÚprintingÚ
debugprintÚ	TypeError)rS   rT   Únumeric_typesÚa_is_numÚb_is_numÚa_is_seqÚb_is_seqÚastrÚbstrÚargnameÚargvalÚargstrs               r   r^   r^   h   s—  € õ �%¥¤Ð+€MÝ˜!˜]Ñ+Ô+€HÝ˜!˜]Ñ+Ô+€Hð ð �8ð Øð 	˜Xð 	Ø�5à�AŠvˆõ ˜!�e¥T˜]Ñ+Ô+€HÝ˜!�e¥T˜]Ñ+Ô+€Hàð 8�8ð 8Øð 	˜Xð 	­$¨q©'¬'µT¸!±W´WÒ*<Ð*<Ø�5å•C�˜a‘L”LÑ!Ô!¥T­#­d°A©,¬,Ñ%7Ô%7Ò7Ð7õ Œ?×%Ò% a¨eÐ%Ñ4Ô4€DÝŒ?×%Ò% a¨eÐ%Ñ4Ô4€Dð &)¨!¨T N°S¸!¸T°NÐ#Cð ð Ñˆ�˜Ø�RŠ<ˆ<Ý�)ð �7�7˜G˜G˜G¥T¨&¡\¤\ \ \ð3ñô ð ð ð �4Š<Ðr   c                  óò  — t          t          t          t          ¦  «        ¦  «        sJ ‚t          t          t          t
          ¦  «        ¦  «        sJ ‚t          t          t          t          ¦  «        ¦  «        sJ ‚t          t          t          t          ¦  «        ¦  «        sJ ‚t          t          t          t          ¦  «        ¦  «        sJ ‚t          t          t          t          ¦  «        ¦  «        sJ ‚dS )z‰
    Check that the example symbols in this module print to their Aesara
    equivalents, as many of the other tests depend on this.
    N)r^   Úxtr4   r"   Úytr#   Úztr$   ÚXtÚXÚYtÚYÚZtÚZ© r   r   Útest_example_symbolsrw   ˜   s²   € õ
 ••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ý••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ý••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ý••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ý••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ý••L¥‘O”OÑ$Ô$Ð$Ð$Ð$Ð$Ð$r   c                  ó&  — t          t          ¦  «        } t          | t          ¦  «        sJ ‚| j        dk    sJ ‚| j        t          j        k    sJ ‚t          t          t          di¬¦  «        }|j        dk    sJ ‚|j        t          j        k    sJ ‚dS )z. Test printing a Symbol to a aesara variable. rv   ©F©ÚbroadcastablesN)r4   r"   r[   r
   Úbroadcastabler   )ÚxxÚxx2s     r   Útest_Symbolr   ¥   s‘   € å	•a‰Œ€BÝ�b�(Ñ#Ô#Ð#Ð#Ð#ØÔ˜rÒ!Ð!Ð!Ð!ØŒ7•a”fÒÐÐÐå
•q­!¨X¨Ð
7Ñ
7Ô
7€CØÔ Ò(Ð(Ð(Ð(ØŒ8•q”vÒÐÐÐÐÐr   c                  óv   — t          t          ¦  «        } t          | t          ¦  «        sJ ‚| j        dk    sJ ‚dS )z4 Test printing a MatrixSymbol to a aesara variable. r   N)r4   rq   r[   r   r|   )ÚXXs    r   Útest_MatrixSymbolr‚   °   s=   € å	•a‰Œ€BÝ�b�.Ñ)Ô)Ð)Ð)Ð)ØÔ˜~Ò-Ð-Ð-Ð-Ð-Ð-r   c                  óª   — g d¢} | D ]K}t          t          ¦  «        5  t          t          t          |i¬¦  «         ddd¦  «         n# 1 swxY w Y   ŒLdS )z/ Test MatrixSymbol with invalid broadcastable. )rv   ry   ©T©TF©FT)TTrz   N)r   Ú
ValueErrorr4   rq   )ÚbcsÚbcs     r   Útest_MatrixSymbol_wrong_dimsrŠ   ¶   s¤   € ð OÐ
NÐ
N€CØð 4ð 4ˆÝ•JÑÔð 	4ð 	4Ý�­A¨r¨7Ð3Ñ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4øð4ð 4s   �AÁA	ÁA	c                  ó�   — t          t          ¦  «        } t          | t          ¦  «        sJ ‚| j        dk    sJ ‚| j        dk    sJ ‚dS )zG Test printing AppliedUndef instance, which works similarly to Symbol. rv   Úf_tN)r4   rŒ   r[   r   r|   r   )Úftts    r   Útest_AppliedUndefrŽ   ¾   sR   € å
•sÑ
Ô
€CÝ�c�>Ñ*Ô*Ð*Ð*Ð*ØÔ Ò"Ð"Ð"Ð"ØŒ8�uÒÐÐÐÐÐr   c                  ó„   — t           t          z   } t          | ¦  «        }|j        j        t
          j        j        k    sJ ‚d S ©N)r"   r#   r4   ÚownerÚopr   r   Úadd©r2   Úcomps     r   Útest_addr–   Æ   s8   € Ý�q‰5€DÝ˜ÑÔ€DØŒ:Œ=�FœMÔ-Ò-Ð-Ð-Ð-Ð-Ð-r   c                  óR  — t          t          t          j        t          ¦  «        ¦  «        t
                               t          ¦  «        ¦  «        sJ ‚t          t          t          j        t          ¦  «        ¦  «        t
                               t          ¦  «        ¦  «        sJ ‚d S r�   )r^   r4   r,   Úsinr"   r   rm   Útanrv   r   r   Ú	test_trigrš   Ë   sh   € Ý•�RœV¥A™YœYÑ'Ô'­¯ªµ©¬Ñ5Ô5Ð5Ð5Ð5Ý•�RœV¥A™YœYÑ'Ô'­¯ªµ©¬Ñ5Ô5Ð5Ð5Ð5Ð5Ð5r   c                  ó¸  — t          j        t          dz  t          j        t          ¦  «        z   ¦  «        t          j        dt          z  ¦  «        z  } t          | ¦  «        }t                               t          dz  t                               t          ¦  «        z   ¦  «        t                               dt          z  ¦  «        z  }t          ||¦  «        sJ ‚dS )z; Test printing a complex expression with multiple symbols. é   N)r,   Úexpr"   Úcosr#   Úlogr$   r4   r   rm   rn   ro   r^   )r2   r•   Úexpecteds      r   Ú	test_manyr¡   Ï   s“   € åŒ6•!�Q‘$�œ¥™œÑ"Ñ#Ô#¥b¤f¨Q­q©S¡k¤kÑ1€DÝ˜ÑÔ€DÝ�wŠw•r˜1‘u�sŸwšw¥r™{œ{Ñ*Ñ+Ô+­c¯gªg°a½±d©m¬mÑ;€HÝ��hÑÔÐÐÐÐÐr   c                  ó˜  — dD ]/} t          t          t          | i¬¦  «        j        j        | k    sJ ‚Œ0t          t          t          di¬¦  «        j        j        dv sJ ‚t          t          dz   t          di¬¦  «        j        j        dk    sJ ‚t          t          t          z   t          dt          di¬¦  «        j        j        dk    sJ ‚dS )	zA Test specifying specific data types through the dtype argument. )Úfloat32Úfloat64Úint8Úint16Úint32Úint64©Údtypesr   )r£   r¤   é   r£   r¤   N)r4   r"   r]   Údtyper#   )r¬   s    r   Ú
test_dtyper­   ×   sÏ   € àJð Fð FˆÝ�A¥q¨% jÐ1Ñ1Ô1Ô6Ô<ÀÒEÐEÐEÐEÐEõ �¥1 h -Ð0Ñ0Ô0Ô5Ô;Ð?UÐUÐUÐUÐUõ �˜A™¥q¨) nÐ5Ñ5Ô5Ô:Ô@ÀIÒMÐMÐMÐMÝ��A™¥q¨)µQ¸	Ð&BÐCÑCÔCÔHÔNÐR[Ò[Ð[Ð[Ð[Ð[Ð[r   c                  ón   — t           t          fD ]%} dD ] }t          | | |i¬¦  «        j        |k    sJ ‚Œ!Œ&dS )zG Test the "broadcastables" argument when printing symbol-like objects. )rv   ry   r„   r   r…   rz   N)r"   rŒ   r4   r|   )Úsr‰   s     r   Útest_broadcastablesr°   ä   sd   € õ •ˆXð Oð OˆØHð 	Oð 	OˆBÝ °1°b°'Ð:Ñ:Ô:ÔHÈBÒNÐNÐNÐNÐNð	OðOð Or   c                  ó°   — t           t          z   } g d¢g d¢g d¢g d¢g d¢g}|D ]2\  }}}t          | t           |t          |i¬¦  «        }|j        |k    sJ ‚Œ3dS )zG Test "broadcastable" attribute after applying element-wise binary op. )rv   rv   rv   )ry   ry   ry   )r„   ry   ry   )r†   r   r   )r…   r   r   rz   N)r"   r#   r4   r|   )r2   ÚcasesÚbc1Úbc2Úbc3r•   s         r   Útest_broadcastingr¶   î   s”   € õ �q‰5€Dð 	ˆˆØ&Ð&Ð&Ø%Ð%Ð%Ø7Ð7Ð7Ø7Ð7Ð7ð€Eð ð )ð )‰ˆˆS�#Ý˜Dµ!°S½!¸SÐ1AÐBÑBÔBˆØÔ! SÒ(Ð(Ð(Ð(Ð(ð)ð )r   c                  ó"  — t           t          z  t          z  } t          | ¦  «        }t	          |j        j        t          ¦  «        sJ ‚t          |t           
                    t          ¦  «         
                    t          ¦  «        ¦  «        sJ ‚d S r�   )rq   rs   ru   r4   r[   r‘   r’   r   r^   rp   Údotrr   rt   )r2   Úexpr_ts     r   Útest_MatMulrº      sh   € Ý�Q‰3�q‰5€DÝ˜$ÑÔ€FÝ�f”l”o¥sÑ+Ô+Ð+Ð+Ð+Ý��Ÿš�r™
œ
Ÿš¥rÑ*Ô*Ñ+Ô+Ð+Ð+Ð+Ð+Ð+r   c                  óv   — t          t          t          j        ¦  «        j        j        t          ¦  «        sJ ‚d S r�   )r[   r4   rq   ÚTr‘   r’   r   rv   r   r   Útest_Transposer½     s.   € Ý•l¥1¤3Ñ'Ô'Ô-Ô0µ*Ñ=Ô=Ð=Ð=Ð=Ð=Ð=r   c                  ó�   — t           t          z   t          z   } t          t	          | ¦  «        j        j        t          ¦  «        sJ ‚d S r�   )rq   rs   ru   r[   r4   r‘   r’   r   ©r2   s    r   Útest_MatAddrÀ   	  s9   € Ý�Q‰3�q‰5€DÝ•l 4Ñ(Ô(Ô.Ô1µ8Ñ<Ô<Ð<Ð<Ð<Ð<Ð<r   c                  óø   — t          t          t          j        d¦  «        dz  ¦  «        t	          dd¦  «        ¦  «        sJ ‚t          t          t
          j        ¦  «        t	          dd¦  «        ¦  «        sJ ‚d S )Nrœ   é   r«   )r^   r4   r,   ÚIntegerr   r!   ÚHalfrv   r   r   Útest_RationalsrÅ     sg   € Ý•�RœZ¨™]œ]¨QÑ.Ñ/Ô/µ¸QÀÑ1BÔ1BÑCÔCÐCÐCÐCÝ•�QœVÑ$Ô$¥k°!°QÑ&7Ô&7Ñ8Ô8Ð8Ð8Ð8Ð8Ð8r   c                  óT   — t          t          j        d¦  «        ¦  «        dk    sJ ‚d S )NrÂ   )r4   r,   rÃ   rv   r   r   Útest_IntegersrÇ     s)   € Ý�œ
 1™œÑ&Ô&¨!Ò+Ð+Ð+Ð+Ð+Ð+r   c                  ót   — t          j        d¦  «        } t          t          j        | ¦  «        ¦  «        sJ ‚d S )Nr   )r,   ÚSymbolr4   Ú	factorial)r   s    r   Útest_factorialrË     s1   € Ý
Œ	�#‰Œ€AÝ�œ Q™œÑ(Ô(Ð(Ð(Ð(Ð(Ð(r   c                  ó¢  — t          t          ¦  «        5  d„ } t           | t          t	          j        t	          j        t          ¦  «        t          d¬¦  «        ¦  «        ¦  «         | t           	                    t                               t          ¦  «        t          ¦  «        ¦  «        ¦  «        sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó:   — t          t          | ¦  «        ¦  «        S r�   )rO   rE   r¿   s    r   ú<lambda>z!test_Derivative.<locals>.<lambda>  s   € �O­I°d©O¬OÑ<Ô<€ r   F©Úevaluate)r   ÚUserWarningr^   r4   r,   Ú
Derivativer˜   r"   r   Úgradr   rm   )Úsimps    r   Útest_DerivativerÕ     sï   € Ý	�Ñ	%Ô	%ð 8ð 8Ø<Ð<ˆÝ�D�D�¥b¤mµB´F½1±I´I½qÈ5Ð&QÑ&QÔ&QÑRÔRÑSÔSØ�D�Ÿš¥S§W¢W­R¡[¤[µ"Ñ5Ô5Ñ6Ô6ñ8ô 8ð 	8ð 	8ð 8ð 	8ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8s   •B!CÃCÃCc                  ó~   — t          t          t          gt          t          z   g¦  «        }  | dd¦  «        dk    sJ ‚dS )z, Test aesara_function() with single output. rœ   rÂ   é   N©r8   r"   r#   )r.   s    r   Útest_aesara_function_simplerÙ      s6   € å�!�Q˜¥!¥A¡# Ñ'Ô'€AØˆ1ˆQ�‰7Œ7�aŠ<ˆ<ˆ<ˆ<ˆ<ˆ<r   c                  ó´   — t          t          t          gt          t          z   t          t          z
  g¦  «        }  | dd¦  «        \  }}|dk    sJ ‚|dk    sJ ‚dS )z/ Test aesara_function() with multiple outputs. rœ   rÂ   r×   éÿÿÿÿNrØ   )r.   Úo1Úo2s      r   Útest_aesara_function_multirÞ   %  sR   € å�!�Q˜¥!¥A¡#¥q­¡s Ñ,Ô,€AØˆQˆq�!‰WŒW�F€BˆØ�Š7ˆ7ˆ7ˆ7Ø�Š8ˆ8ˆ8ˆ8ˆ8ˆ8r   c            	      ó¶  — t          t          t          gt          t          z   gdt          dt          di¬¦  «        } t          j                              | ddgddg¦  «        t          j        ddg¦  «        z
  ¦  «        dk     sJ ‚t          t          t          gt          t          z   gt          dt          did¬	¦  «        } t          j        d¦  «                             d¦  «        }dt          j        d¦  «                             d¦  «        z  }t          j                              | ||¦  «        dt          j        d¦  «        z  z
  ¦  «        dk     sJ ‚d
S )z1 Test aesara_function() vs Numpy implementation. r«   r¤   )Údimrª   rœ   rÂ   r*   é   ç•Ö&è.>)rª   rà   N)	r8   r"   r#   rY   ÚlinalgÚnormÚasarrayÚarangeÚastype)r.   r}   Úyys      r   Útest_aesara_function_numpyré   ,  s#  € å�!�Q˜¥!¥A¡# ¨AÝ!" I­q°)Ð <ð	>ñ 	>ô 	>€AåŒ9�>Š>˜!˜!˜Q ˜F Q¨ FÑ+Ô+­b¬j¸!¸Q¸Ñ.@Ô.@Ñ@ÑAÔAÀDÒHÐHÐHÐHå�!�Q˜¥!¥A¡# µ°9½aÀÐ/KØð	 ñ 	 ô 	 €Aå	Œ�1‰Œ×	Ò	˜YÑ	'Ô	'€BØ	
�2Œ9�Q‰<Œ<×Ò˜yÑ)Ô)Ñ	)€BÝŒ9�>Š>˜!˜!˜B ™)œ) a­¬	°!©¬¡nÑ4Ñ5Ô5¸Ò<Ð<Ð<Ð<Ð<Ð<r   c                  óR  — t          j        t          t          gt          t          t          z   t          z   gg¦  «        } t          j        ddgddgg¦  «        }t          t          t          t          g| g¦  «        }t
          j         	                     |ddd¦  «        |¦  «         t          t          t          t          g| gd¬¦  «        }t
          j         	                     |ddd¦  «        |¦  «         t          t          t          t          g| | g¦  «        }t           |ddd¦  «        t          g ¦  «        ¦  «        sJ ‚t
          j         	                     |ddd¦  «        d         |¦  «         t
          j         	                     |ddd¦  «        d         |¦  «         d S )	Nç      ð?ç       @g      @g      @T)r   r   r«   )r,   ÚMatrixr"   r#   r$   rY   Úarrayr8   ÚtestingÚassert_allcloser[   r]   )Úmr    r.   s      r   Útest_aesara_function_matrixrò   9  sa  € Ý
Œ	•A•q�6�A�q¥1™u¥q™y˜>Ð*Ñ+Ô+€AÝŒx˜#˜s˜ c¨?Ð%;Ð<Ñ=Ô=€HÝ�!�Q¥˜ Q CÑ(Ô(€AÝ„J×Ò˜q˜q  c¨3Ñ/Ô/°Ñ:Ô:Ð:Ý�!�Q¥˜ Q C°Ð5Ñ5Ô5€AÝ„J×Ò˜q˜q  c¨3Ñ/Ô/°Ñ:Ô:Ð:Ý�!�Q¥˜ Q¨ FÑ+Ô+€AÝ�a�a˜˜S #Ñ&Ô&­¨R©¬Ñ1Ô1Ð1Ð1Ð1Ý„J×Ò˜q˜q  c¨3Ñ/Ô/°Ô2°HÑ=Ô=Ð=Ý„J×Ò˜q˜q  c¨3Ñ/Ô/°Ô2°HÑ=Ô=Ð=Ð=Ð=r   c                  ó"  — t          t          gd¬¦  «        t          dik    sJ ‚t          t          t          gt          dt          di¬¦  «        t          dt          dik    sJ ‚t          t          gt          di¬¦  «        t          dik    sJ ‚d S )	Nrœ   )rà   r   r«   )Údimsr†   ry   rz   )r'   r"   r#   rv   r   r   Útest_dim_handlingrõ   E  s˜   € Ý�˜ Ð#Ñ#Ô#­¨>Ð':Ò:Ð:Ð:Ð:Ý��A˜¥a¨­A¨q \Ð2Ñ2Ô2µq¸-Ý78¸.ð7Jò Jð Jð Jð Jå�˜­Q°¨MÐ:Ñ:Ô:½qÀ(¸mÒKÐKÐKÐKÐKÐKr   c                  ó  — ddl } t          t          t          t          gt          t          z   gddt          dt          dt          di¬¦  «        }| j                              |ddgdd	gddg¦  «         | j        d	d
g¦  «        z
  ¦  «        dk     sJ ‚t          t          t          t          gt          t          z   gt          dt          dt          didd¬¦  «        } | j        d¦  «         	                    d¦  «        }d | j        d¦  «         	                    d¦  «        z  }d | j        d¦  «         	                    d¦  «        z  }| j                              ||||¦  «        d | j        d¦  «        z  z
  ¦  «        dk     sJ ‚dS )zU
    Test passing additional kwargs from aesara_function() to aesara.function().
    r   Nr«   Úignorer¤   )rà   Úon_unused_inputrª   rœ   rÂ   r*   rá   râ   )rª   rà   rø   )
Únumpyr8   r"   r#   r$   rã   rä   rå   ræ   rç   )rY   r.   r}   rè   Úzzs        r   Útest_aesara_function_kwargsrû   K  sv  € ð ÐÐÐÝ�!�Q¥˜¥Q¥q¡S E¨qÀ(Ý�y¥! Yµ°9Ð=ð	?ñ 	?ô 	?€AàŒ9�>Š>˜!˜!˜Q ˜F Q¨ F¨Q°¨FÑ3Ô3°j°b´jÀ!ÀQÀÑ6HÔ6HÑHÑIÔIÈDÒPÐPÐPÐPå�!�Q¥˜¥Q¥q¡S EÝ ! 9­a°½A¸yÐIØ¨xð	9ñ 	9ô 	9€Að 
ˆŒ�1‰Œ×	Ò	˜YÑ	'Ô	'€BØ	
ˆ9ˆ2Œ9�Q‰<Œ<×Ò˜yÑ)Ô)Ñ	)€BØ	
ˆ9ˆ2Œ9�Q‰<Œ<×Ò˜yÑ)Ô)Ñ	)€BØŒ9�>Š>˜!˜!˜B  B™-œ-¨!¨I¨B¬I°a©L¬L©.Ñ8Ñ9Ô9¸DÒ@Ð@Ð@Ð@Ð@Ð@r   c            	      óª  — ddl m}  t          t          gt          t          z   gddgft          t
          gt          t
          z   gddgft          t          gt          t          z   gt          dt          didgft          t          gt          t          z   t          t          z
  gdddgft          t          t          t
          gt          t          z   t          t
          z   gdddgfg}|D ]ï\  }}}}dD ]å}t          ||||¬¦  «        }t          |j        | ¦  «        sJ ‚d„ |j        j	        D ¦   «         } ||Ž }	t          |	t          ¦  «        s|	g}	t          |¦  «        t          |	¦  «        k    sJ ‚t          ||	¦  «        D ]S\  }
}|r#|
dk    rt          |t          j        ¦  «        sJ ‚Œ*t          |t          j        ¦  «        sJ ‚|j        |
k    sJ ‚ŒTŒæŒðdS )	z2 Test the "scalar" argument to aesara_function(). r   )ÚFunctionNrœ   r«   r†   )rô   r   c                 ó^   — g | ]*}t          j        d „ |j        j        D ¦   «         ¦  «        ‘Œ+S )c                 ó   — g | ]}|rd nd‘Œ	S )r«   r×   rv   )r   r‰   s     r   r   z:test_aesara_function_scalar.<locals>.<listcomp>.<listcomp>s  s    € ÐGÐGÐG¨B˜b˜˜˜ aÐGÐGÐGr   )rY   Úonesr]   r|   )r   Úis     r   r   z/test_aesara_function_scalar.<locals>.<listcomp>r  sF   € ð ð ð àõ ”ÐGÐG°!´&Ô2FÐGÑGÔGÑHÔHðð ð r   )Úaesara.compile.function.typesrý   r"   r#   rq   rs   r8   r[   r(   Úinput_storager:   ÚlenÚziprY   rZ   ÚndarrayÚndim)rý   Úargsr6   r7   Úin_dimsÚout_dimsr   r.   Ú	in_valuesÚ
out_valuesÚdÚvalues               r   Útest_aesara_function_scalarr  \  sû  € à6Ð6Ð6Ð6Ð6Ð6õ �Qˆ•!•a‘%�˜$  Ð$Ý
�Qˆ•!•a‘%�˜$  Ð$Ý
�Qˆ•!•a‘%��1˜a¥ A˜,¨¨Ð,Ý
�Qˆ•!•a‘%��Q™� ¨¨1 vÐ.Ý
�Q••1ˆ��A™�q¥1™u�~ t¨a°¨VÐ4ð€Dð /3ð +ð +Ñ*ˆ�˜ (Ø#ð 	+ð 	+ˆFå  ¨°wÀvÐNÑNÔNˆAõ ˜aÔ/°Ñ:Ô:Ð:Ð:Ð:ðð àÔ*Ô8ðñ ô ˆIð ˜˜I˜ˆJÝ˜j­$Ñ/Ô/ð *Ø(˜\�
õ �x‘=”=¥C¨
¡O¤OÒ3Ð3Ð3Ð3Ý ¨*Ñ5Ô5ð 	+ð 	+‘��5àð +˜a 1šf˜få% e­R¬YÑ7Ô7Ð7Ð7Ð7Ð7õ & e­R¬ZÑ8Ô8Ð8Ð8Ð8Ø œ:¨š?˜?˜?˜?˜?ð	+ð%	+ð+ð +r   c                  ó2   — t          t          d„ ¦  «         dS )za
    Passing an unknown keyword argument to aesara_function() should raise an
    exception.
    c                  óD   — t          t          gt          dz   gd¬¦  «        S )Nr«   rÂ   )Úfoobar)r8   r"   rv   r   r   rÎ   z0test_aesara_function_bad_kwarg.<locals>.<lambda>Œ  s   € Õ/µ°µa¸±c°UÀ1ÐEÑEÔE€ r   N)r   Ú	Exceptionrv   r   r   Útest_aesara_function_bad_kwargr  ‡  s   € õ
 �9ÐEÐEÑFÔFÐFÐFÐFr   c            	      ó¶  — t          t          ddd¦  «        ¦  «        t          ddd¦  «        k    sJ ‚d„ } t          dt          di} | t          t          t          t          ¦  «        |¬¦  «        t          t          t
          ¦  «        ¦  «        sJ ‚ | t          t          dt          d¦  «        |¬¦  «        t          dt          d¦  «        ¦  «        sJ ‚d S )Nr«   rœ   rÂ   c                 óŽ   — dD ]A}t          | |¦  «        }t          ||¦  «        }|�|€|�|� dS Œ.t          ||¦  «        s dS ŒBdS )N)ÚstartÚstopÚstepFT)Úgetattrr^   )Ús1Ús2ÚattrÚa1Úa2s        r   Ú
theq_sliceztest_slice.<locals>.theq_slice’  sj   € Ø-ð 	ð 	ˆDÝ˜˜TÑ"Ô"ˆBÝ˜˜TÑ"Ô"ˆBØˆz˜R˜ZØ˜
 b jØ ˜5˜5øÝ˜"˜b‘\”\ð Ø�u�uðàˆtr   r§   r©   )r4   Úslicer"   r#   rm   rn   )r   rª   s     r   Ú
test_slicer"  �  sÃ   € Ý�˜a  A™œÑ'Ô'­5°°A°q©>¬>Ò9Ð9Ð9Ð9ð	ð 	ð 	õ ��!˜WÐ%€FØˆ:•l¥5­­A¡;¤;°vÐ>Ñ>Ô>ÅÅbÍ"ÁÄÑNÔNÐNÐNÐNØˆ:•l¥5¨­A¨q¡>¤>¸&ÐAÑAÔAÅ5ÈÍBÐPQÁ?Ä?ÑSÔSÐSÐSÐSÐSÐSr   c                  óŠ  ‡	— i } t          j        dd¬¦  «        }t          j        d||¦  «        }|ddd…dd	d
…f         }t          || ¬¦  «        Š	t	          d¦  «        }t          ‰	j        j        j        ¦  «        t          |||¦  «        t          |||¦  «        fk    sJ ‚‰	j        j
        d         t          || ¬¦  «        k    sJ ‚t          ˆ	fd„t          dd¦  «        D ¦   «         ¦  «        sJ ‚t          j        d¦  «        }t          ||di¬¦  «         d|d}}}||||…         }t          ||d|di¬¦  «        Š	d S )Nr   T©Úintegerrq   r«   rœ   rÂ   r*   r×   rá   ©r0   r¨   r   c              3   óN   •K  — | ]}‰j         j        |         j        |k    V — Œ d S r�   )r‘   r6   Údata)r   r  rr   s     €r   ú	<genexpr>z#test_MatrixSlice.<locals>.<genexpr>¯  s4   øè è € ÐAÐA°ˆrŒxŒ˜qÔ!Ô&¨!Ò+ÐAÐAÐAÐAÐAÐAr   é   Úkr§   r©   )r,   rÉ   r-   r4   r	   r\   r‘   r’   Úidx_listr!  r6   ÚallÚrange)
r0   r   rq   rs   r¯   r+  r  r  r  rr   s
            @r   Útest_MatrixSlicer/  ¡  sZ  ø€ Ø€Eå
Œ	�#˜tÐ$Ñ$Ô$€AÝ
Œ˜˜Q Ñ"Ô"€Aà	ˆ!ˆAˆaˆ%��1�Q�ˆ,Œ€AÝ	�a˜uÐ	%Ñ	%Ô	%€Bå�7ÑÔ€AÝ�””Ô%Ñ&Ô&­5°°A°q©>¬>½5ÀÀAÀq¹>¼>Ð*JÒJÐJÐJÐJØŒ8Œ?˜1Ô¥¨a°uÐ!=Ñ!=Ô!=Ò=Ð=Ð=Ð=õ ÐAÐAÐAÐAµU¸1¸a±[´[ÐAÑAÔAÑAÔAÐAÐAÐAå
Œ	�#‰Œ€AÝ�˜A˜w˜<Ð(Ñ(Ô(Ð(Ø˜1˜a�ˆ4€EØ	ˆ%��Tˆ/Ô€AÝ	�a  G¨Q°Ð 8Ð	9Ñ	9Ô	9€B€B€Br   c            
      ód  ‡
‡— t          j        dd¬¦  «        Šˆfd„dD ¦   «         \  } }}}t          t          | |||f¦  «        \  }}}}t          j        | |g||gg¦  «        }t          |¦  «        Š
t
                               dt
                               d||¦  «        t
                               d||¦  «        ¦  «        t
                               dt
                               d||¦  «        t
                               d||¦  «        ¦  «        g}	t          ˆ
fd„|	D ¦   «         ¦  «        sJ ‚d S )	Nr   Tr$  c                 ó<   •— g | ]}t          j        |‰‰¦  «        ‘ŒS rv   r+   )r   r   r   s     €r   r   z$test_BlockMatrix.<locals>.<listcomp>º  s'   ø€ ÐAÐAÐA°$•"”/ $¨¨1Ñ-Ô-ÐAÐAÐAr   ÚABCDr   r«   c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r�   )r^   )r   ÚsolutionÚBlockts     €r   r)  z#test_BlockMatrix.<locals>.<genexpr>À  s-   øè è € Ð@Ð@¨(�t�F˜HÑ%Ô%Ð@Ð@Ð@Ð@Ð@Ð@r   )r,   rÉ   r;   r4   ÚBlockMatrixr   ÚjoinÚany)ÚAÚBÚCÚDÚAtÚBtÚCtÚDtÚBlockÚ	solutionsr5  r   s             @@r   Útest_BlockMatrixrC  ¸  s  øø€ Ý
Œ	�#˜tÐ$Ñ$Ô$€AØAÐAÐAÐA¸&ÐAÑAÔA�J€A€qˆ!ˆQÝ�¨¨1¨a° |Ñ4Ô4�N€BˆˆB�ÝŒN˜Q ˜F Q¨ FÐ+Ñ,Ô,€EÝ˜%Ñ Ô €FÝ—’˜!�SŸXšX a¨¨RÑ0Ô0µ#·(²(¸1¸bÀ"Ñ2EÔ2EÑFÔFÝ—’˜!�SŸXšX a¨¨RÑ0Ô0µ#·(²(¸1¸bÀ"Ñ2EÔ2EÑFÔFðH€IåÐ@Ð@Ð@Ð@°iÐ@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@r   c            	      ó¬  ‡‡— d\  } }dŠt          j        d|| ¦  «        }t          j        d||¦  «        }||f}|j        |z  }||dz  |dz  f| dz  | dz  fg||dz  |dz  f|dz  |dz  fgiŠˆfd„|D ¦   «         }|                     t	          t          ||¦  «        ¦  «        ¦  «        }t	          t          |‰gt          |¦  «        z  ¦  «        ¦  «        }t          ||g|i ¬¦  «        }	t          |t          j        |¦  «        g|i ¬¦  «        }
ˆfd„|D ¦   «         }t          j
        || z  ¦  «                             |j        ¦  «                             ‰¦  «        t          j        |¦  «                             ‰¦  «        g}|d	xx         t          j        |j        ¦  «        d
z  z  cc<   t          j         |	|Ž  |
|Ž d
¬¦  «        sJ ‚d S )N)rœ   r*   r£   r9  r:  rœ   c                 ó@   •— g | ]}t          j        |g‰|         ¢R Ž ‘ŒS rv   )r,   Úblockcut)r   r  Úcutsizess     €r   r   z6test_BlockMatrix_Inverse_execution.<locals>.<listcomp>Í  s/   ø€ Ð>Ð>Ð>°!•”˜QÐ- ¨!¤Ð-Ð-Ð-Ð>Ð>Ð>r   )rª   r0   c                 óf   •— g | ]-}t          j        j        |j        Ž                      ‰¦  «        ‘Œ.S rv   )rY   ÚrandomÚrandÚshaperç   )r   r"   r¬   s     €r   r   z6test_BlockMatrix_Inverse_execution.<locals>.<listcomp>Õ  s2   ø€ ÐFÐFÐF¸!�rŒyŒ~˜qœwÐ'×.Ò.¨uÑ5Ô5ÐFÐFÐFr   r«   gñhãˆµøä>)Úrtol)r,   r-   ÚIÚsubsÚdictr  r  r8   Úblock_collapserY   ræ   ÚreshaperK  rç   Úeyer   Úallclose)r+  r   r9  r:  r6   ÚoutputÚ	cutinputsÚ	cutoutputrª   r.   ÚfblockedÚninputsrG  r¬   s               @@r   Ú"test_BlockMatrix_Inverse_executionrY  Â  sú  øø€ à�D€A€qØ€EÝ
Œ˜˜Q Ñ"Ô"€AÝ
Œ˜˜Q Ñ"Ô"€AØ�ˆT€FØŒS�‰U€Fà�Q˜‘T˜1˜a™4�L 1 a¡4¨¨A© ,Ð/Ø�Q˜‘T˜1˜a™4�L 1 a¡4¨¨A© ,Ð/ð1€Hà>Ð>Ð>Ð>°vÐ>Ñ>Ô>€IØ—’�D¥ V¨YÑ!7Ô!7Ñ8Ô8Ñ9Ô9€Iå•#�f˜u˜g¥c¨&¡k¤kÑ1Ñ2Ô2Ñ3Ô3€FÝ˜ & °&ÀÐCÑCÔC€AÝ ­Ô):¸9Ñ)EÔ)EÐ(FØ'-°Rð9ñ 9ô 9€Hð GÐFÐFÐF¸vÐFÑFÔF€GÝŒy˜˜1™‰~Œ~×%Ò% a¤gÑ.Ô.×5Ò5°eÑ<Ô<ÝŒv�a‰yŒy×Ò Ñ&Ô&ð(€GàˆA€J€J„J•"”'˜!œ'Ñ"Ô" 4Ñ'Ñ'€J€J�JåŒ;�q�q˜'�{ H H¨gÐ$6¸TÐBÑBÔBÐBÐBÐBÐBÐBr   c                  ó¨  — ddl m}  t          j        d¦  «        }t          j        t          j        fD ]ž} |t          j        |¦  «        t          j        |¦  «         gt          j        |¦  «        t          j        |¦  «        gg¦  «        }t          |¦  «        }t          |t          ¦  «        sJ ‚t          |j        j        | ¦  «        sJ ‚ŒŸd S )Nr   )ÚJoinÚtheta)Úaesara.tensor.basicr[  r,   rÉ   rí   ÚImmutableMatrixrž   r˜   r4   r[   r   r‘   r’   )r[  r%   Ú
MatrixTyperq   ÚtXs        r   Útest_DenseMatrixra  Ü  sÄ   € Ø(Ð(Ð(Ð(Ð(Ð(å
Œ	�'ÑÔ€AÝ”y¥"Ô"4Ð5ð -ð -ˆ
ØˆJ�œ ™œ¥R¤V¨A¡Y¤Y JÐ/µ"´&¸±)´)½R¼VÀA¹Y¼YÐ1GÐHÑIÔIˆÝ˜!‰_Œ_ˆÝ˜"�nÑ-Ô-Ð-Ð-Ð-Ý˜"œ(œ+ tÑ,Ô,Ð,Ð,Ð,Ð,ð	-ð -r   c                  ó   — t           t          j        d¦  «        ft          t          j        dgt          j        ¢R Ž ft           t          j        d¦  «        t          j        d¦  «        ¦  «        fg} | D ]W\  }}i }t          ||¬¦  «        }t          ||¬¦  «        |u sJ ‚t          |i ¬¦  «        |usJ ‚t          ||¬¦  «        |u sJ ‚ŒXdS )zH Test single symbol-like objects are cached when printed by themselves. r"   rq   r.   r%   r&  N)	r"   r,   rÉ   rq   r-   rK  rŒ   rý   r4   )Úpairsr  r  r0   Ústs        r   Útest_cache_basicre  ç  sõ   € õ
 
�BŒI�c‰NŒNÐÝ	
�BŒO˜CÐ*¥!¤'Ð*Ð*Ð*Ð+Ý	Ð�bŒk˜#ÑÔ�rœy¨™~œ~Ñ.Ô.Ð/ð€Eð ð 3ð 3‰ˆˆBØˆÝ˜" EÐ*Ñ*Ô*ˆõ ˜B eÐ,Ñ,Ô,°Ð2Ð2Ð2Ð2õ ˜B bÐ)Ñ)Ô)°Ð3Ð3Ð3Ð3õ ˜B eÐ,Ñ,Ô,°Ð2Ð2Ð2Ð2Ð2ð3ð 3r   c                  óz  — ddl m}  t          | ¦  «        }	 |                      ¦   «          t          t
          t          fD ]K}t          ¦   «         5  t          |¦  «        }t          |¦  «        |u sJ ‚	 ddd¦  «         n# 1 swxY w Y   ŒL	 |  	                    |¦  «         dS # |  	                    |¦  «         w xY w)z Test use of the global cache. r   )Úglobal_cacheN)
Úsympy.printing.aesaracoderg  rO  Úclearr"   rq   rŒ   r   r&   Úupdate)rg  Úbackupr¯   rd  s       r   Útest_global_cacherl  þ  s  € à6Ð6Ð6Ð6Ð6Ð6å�,ÑÔ€Fð$à×ÒÑÔÐå•Q��ð 	,ð 	,ˆAÝ'Ñ)Ô)ð ,ð ,Ý  ‘^”^�Ý" 1‘~”~¨Ð+Ð+Ð+Ð+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,øð	,ð 	×Ò˜FÑ#Ô#Ð#Ð#Ð#øˆ×Ò˜FÑ#Ô#Ð#Ð#øøøs/   —8B# Á#A?Á3B# Á?B	ÂB# ÂB	ÂB# Â#B:c            	      ó(  — t          j        d¦  «        t          j        ddd¦  «        t          g} i }i }| D ]0}t	          ||¬¦  «        }||                     ¦   «         vsJ ‚|||<   Œ1t          t          t          t          |                     ¦   «         ¦  «        ¦  «        ¦  «        t          | ¦  «        k    sJ ‚| 
                    ¦   «         D ]A\  }}t          ¦   «         5  t          ||¬¦  «        |u sJ ‚	 ddd¦  «         n# 1 swxY w Y   ŒBdS )z§
    Test that symbol-like objects of different types (Symbol, MatrixSymbol,
    AppliedUndef) are distinguished by the cache even if they have the same
    name.
    rŒ   r*   r&  N)r,   rÉ   r-   rŒ   r4   Úvaluesr  Úsetr;   ÚidÚitemsr   r&   )Úsymbolsr0   Úprintedr¯   rd  s        r   Útest_cache_types_distinctrt    s`  € õ Œy˜ÑÔ¥¤°¸¸1Ñ!=Ô!=½sÐC€Gà€EØ€Gàð ð ˆÝ˜! 5Ð)Ñ)Ô)ˆØ˜ŸšÑ)Ô)Ð)Ð)Ð)Ð)Øˆ�‰
ˆ
õ �s•3•r˜7Ÿ>š>Ñ+Ô+Ñ,Ô,Ñ-Ô-Ñ.Ô.µ#°g±,´,Ò>Ð>Ð>Ð>ð —’‘”ð 5ð 5‰ˆˆ2Ý#Ñ%Ô%ð 	5ð 	5Ý˜q¨Ð.Ñ.Ô.°"Ð4Ð4Ð4Ð4Ð4ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5øð5ð 5s   Ã#DÄD
	ÄD
	c                  óü   — t          j        t          t          d¬¦  «        } t          | ¦  «        }t	          |t
          t
          z   ¦  «        sJ ‚t	          |t
          t          t          ¦  «        z   ¦  «        rJ ‚dS )zf
    Test that a symbol is cached and reused when it appears in an expression
    more than once.
    FrÏ   N)r,   ÚAddr"   r4   r^   rm   r”   s     r   Útest_symbols_are_created_oncerw  (  sh   € õ
 Œ6•!•Q Ð'Ñ'Ô'€DÝ˜ÑÔ€Då�•b�2‘gÑÔÐÐÐÝ�D�"�|­A™œÑ.Ñ/Ô/Ð/Ð/Ð/Ð/Ð/r   c                  ó$  — t           dz  t          t          j        t           ¦  «        z
  t          j        t
          t           t          z  z
  ¦  «        z  z   } d„ | j        D ¦   «         }t          | ¦  «        }t          ¦   «         }t          j
        j                             |g¦  «        D ]]}|j        €Tt          |t          j
        j        j        ¦  «        s0|j        |v sJ ‚|j        |vsJ ‚|                     |j        ¦  «         Œ^||k    sJ ‚dS )zf
    Test caching on a complicated expression with multiple symbols appearing
    multiple times.
    rœ   c                 ó   — h | ]	}|j         ’Œ
S rv   r   )r   r¯   s     r   ú	<setcomp>z%test_cache_complex.<locals>.<setcomp>9  s   € Ð6Ð6Ð6˜q�A”FÐ6Ð6Ð6r   N)r"   r#   r,   r�   r˜   r$   Úfree_symbolsr4   ro  r   r<   r=   Ú	ancestorsr‘   r[   ÚConstantr   r“   )r2   Úsymbol_namesr¹   ÚseenÚvs        r   Útest_cache_complexr�  3  sø   € õ
 �‰6•Q�œ¥™œ‘]¥b¤f­QµµQ±©YÑ&7Ô&7Ñ7Ñ7€DØ6Ð6 DÔ$5Ð6Ñ6Ô6€LÝ˜$ÑÔ€Fõ ‰5Œ5€DÝŒ\Ô×)Ò)¨6¨(Ñ3Ô3ð ð ˆàŒ7ˆ?¥:¨aµ´Ô1CÔ1LÑ#MÔ#Mˆ?à”6˜\Ð)Ð)Ð)Ð)Ø”6 Ð%Ð%Ð%Ð%Ø�HŠH�Q”VÑÔÐøð �<ÒÐÐÐÐÐr   c                  ó¶  — t          j        dt          dk     ft          t          dk     fd¦  «        } t          | ¦  «        }|j        j        t          j        k    sJ ‚t                               t          dk     dt                               t          dk     t          d¦  «        ¦  «        }t          ||¦  «        sJ ‚t          j        t          t          dk     f¦  «        } t          | ¦  «        }t                               t          dk     t          t          j        ¦  «        }t          ||¦  «        sJ ‚t          j        dt          j        t          dk    t          dk     ¦  «        ft          t          j        t          dk    t          dk     ¦  «        f¦  «        } t          | ¦  «        }t                               t                               t          dk    t          dk     ¦  «        dt                               t                               t          dk    t          dk     ¦  «        t          t          j        ¦  «        ¦  «        }t          ||¦  «        sJ ‚d S )Nr   rœ   )r«   Tr«   )r,   Ú	Piecewiser"   r4   r‘   r’   r   Úswitchrm   r^   rY   ÚnanÚAndÚOrÚand_Úor_)r2   Úresultr    s      r   Útest_Piecewiser‹  K  s¨  € åŒ<˜�A˜ašC˜¥1¥a¨¢c (¨IÑ6Ô6€DÝ˜$ÑÔ€FØŒ<Œ?�cœjÒ(Ð(Ð(Ð(å�zŠz�"˜Qš$ ¥3§:¢:­b°ªdµB¸Ñ#:Ô#:Ñ;Ô;€HÝ�˜Ñ!Ô!Ð!Ð!Ð!åŒ<��A šE˜
Ñ#Ô#€DÝ˜$ÑÔ€FÝ�zŠz�"˜qš&¥"¥b¤fÑ-Ô-€HÝ�˜Ñ!Ô!Ð!Ð!Ð!åŒ<˜�BœF¥1 Q¢3­¨!ªÑ,Ô,Ð-Ý	
�BŒE•!�A’#•q˜’s‰OŒOÐñô €Då˜$ÑÔ€FÝ�zŠz�#Ÿ(š(¥2 a¢4­¨1ªÑ-Ô-¨qÝ�
Š
•3—7’7�2˜aš4¥ A¢Ñ&Ô&­­B¬FÑ3Ô3ñ5ô 5€Hå�˜Ñ!Ô!Ð!Ð!Ð!Ð!Ð!r   c                  óœ  — t          t          t          j        t          t
          ¦  «        ¦  «        t                               t          t          ¦  «        ¦  «        sJ ‚t          t          t          t
          k    ¦  «        t          t          k    ¦  «        sJ ‚t          t          t          t
          k     ¦  «        t          t          k     ¦  «        sJ ‚t          t          t          t
          k    ¦  «        t          t          k    ¦  «        sJ ‚t          t          t          t
          k    ¦  «        t          t          k    ¦  «        sJ ‚d S r�   )
r^   r4   r,   ÚEqr"   r#   r   Úeqrm   rn   rv   r   r   Útest_Relationalsr�  a  sÔ   € Ý•�RœU¥1¥a™[œ[Ñ)Ô)­3¯6ª6µ"µb©>¬>Ñ:Ô:Ð:Ð:Ð:å•�Q¥šUÑ#Ô#¥R­"¢WÑ-Ô-Ð-Ð-Ð-Ý•�Q¥šUÑ#Ô#¥R­"¢WÑ-Ô-Ð-Ð-Ð-Ý•�Q¥!šVÑ$Ô$¥b­B¢hÑ/Ô/Ð/Ð/Ð/Ý•�Q¥!šVÑ$Ô$¥b­B¢hÑ/Ô/Ð/Ð/Ð/Ð/Ð/r   c                  ón  — t           dt          di} t          ¦   «         5  t          t           | ¬¦  «        t          t          | ¬¦  «        }}d d d ¦  «         n# 1 swxY w Y   ddlm} ddlm} ddlm} t          ¦   «         5  t          t          t           |t           ¦  «        z  | ¬¦  «        || 
                    ¦   «         z  ¦  «        sJ ‚t          t          dt           z  ¦  «        | |d¦  «         |d	¦  «         |dd
¦  «        z  z   z  ¦  «        sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚ
complex128r©   r   )Ú	conjugate)Úas_tensor_variable)Úcomplexy      ð?       @rë   rì   r«   )r"   r#   r   r&   Ú$sympy.functions.elementary.complexesr’  Úaesara.tensorr“  r”  r^   Úconj)rª   rm   rn   r’  ÚatvÚcplxs         r   Útest_complexfunctionsrš  j  sè  € Ý��a Ð-€FÝ	Ñ	!Ô	!ð Nð NÝ�Q vÐ.Ñ.Ô.µ½AÀfÐ0MÑ0MÔ0MˆBˆðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nà>Ð>Ð>Ð>Ð>Ð>Ø7Ð7Ð7Ð7Ð7Ð7Ø-Ð-Ð-Ð-Ð-Ð-Ý	Ñ	!Ô	!ð Mð MÝ•K¥ ) )­A¡,¤,¡°vÐ>Ñ>Ô>ÀÀBÇGÂGÁIÄIÁÑOÔOÐOÐOÐOÝ•K ¥q¡Ñ)Ô)¨2¨s¨s°3©x¬x¸¸¸C¹¼ÀÀÀaÈÁÄÑ8JÑ/JÑ+KÑLÔLÐLÐLÐLÐLðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð Mð Ms$   Ÿ-AÁAÁAÂBD*Ä*D.Ä1D.c                  ó”   — t          ¦   «         5  t          g dg¦  «        } d d d ¦  «         n# 1 swxY w Y    | ¦   «         dk    sJ ‚d S )Ny      ð?      ð?)r   r(   )Útfs    r   Útest_constantfunctionsr�  v  s‹   € Ý	Ñ	!Ô	!ð (ð (Ý˜R  Ñ'Ô'ˆð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (àˆ2‰4Œ4�Š:ˆ:ˆ:ˆ:ˆ:ˆ:s   �-­1´1)fÚ__doc__ÚloggingÚsympy.externalr   Úsympy.testing.pytestr   r   r   Úsympy.utilities.exceptionsr   Ú	getLoggerÚaesaraloggerÚsetLevelÚCRITICALr   ÚWARNINGrù   rY   r   r   Úaesara.scalar.basicr	   Úaesara.graph.basicr
   Úaesara.tensor.varr   Úaesara.tensor.elemwiser   r   Úaesara.tensor.mathr   rh  r   rm   rn   ro   rp   rr   rt   ÚdisabledÚsympyr,   Úsympy.core.singletonr!   Ú	sympy.abcr"   r#   r$   r%   r&   r'   r(   rq   rs   ru   rý   rŒ   r4   r8   rE   rO   r^   rw   r   r‚   rŠ   rŽ   r–   rš   r¡   r­   r°   r¶   rº   r½   rÀ   rÅ   rÇ   rË   rÕ   rÙ   rÞ   ré   rò   rõ   rû   r  r  r"  r/  rC  rY  ra  re  rl  rt  rw  r�  r‹  r�  rš  r�  rv   r   r   ú<module>r±     s  ððð ð €€€à (Ð (Ð (Ð (Ð (Ð (Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà 6Ð 6Ð 6Ð 6Ð 6Ð 6ð !ˆwÔ Ð!8Ñ9Ô9€Ø × Ò �gÔ&Ñ 'Ô 'Ð 'Ø	ˆ�xÑ	 Ô	 €Ø × Ò �g”oÑ &Ô &Ð &ð 
ð ØÐÐÐØ
Œ-€CØ.Ð.Ð.Ð.Ð.Ð.Ø+Ð+Ð+Ð+Ð+Ð+Ø0Ð0Ð0Ð0Ð0Ð0Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø&Ð&Ð&Ð&Ð&Ð&à5Ð5Ð5Ð5Ð5Ð5à?Ð?¸Ð?Ñ?Ô?�J€BˆˆBØNÐNÈÐNÑNÔN�J€BˆˆBˆBð €Hà Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð 4Ð
3¨UÐ
3Ñ
3Ô
3�€€1€að €k€b„k�#ÑÔ�qÑÔ€ð+ð +ð +ð:ð :ð :ð4ð 4ð 4ð$ð ð ð"-ð -ð -ð`
%ð 
%ð 
%ð	ð 	ð 	ð.ð .ð .ð ð4ð 4ñ „ð4ðð ð ð.ð .ð .ð
6ð 6ð 6ð ð  ð  ð
\ð 
\ð 
\ðOð Oð Oð)ð )ð )ð$,ð ,ð ,ð>ð >ð >ð=ð =ð =ð
9ð 9ð 9ð,ð ,ð ,ð)ð )ð )ð8ð 8ð 8ðð ð ð
ð ð ð
=ð 
=ð 
=ð
>ð 
>ð 
>ðLð Lð LðAð Að Að")+ð )+ð )+ðVGð Gð GðTð Tð Tð$:ð :ð :ð.Að Að Að ðCð Cñ „ðCð2-ð -ð -ð3ð 3ð 3ð.$ð $ð $ð$5ð 5ð 5ð0	0ð 	0ð 	0ð ð  ð  ð0"ð "ð "ð,0ð 0ð 0ð	Mð 	Mð 	Mðð ð ð ð r   