§
    ^²ÅjR  ã                   óD  — d Z ddlZddlmZ ddl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.m/Z/ ddlm0Z0m1Z1m2Z2 d„ dD ¦   «         \  Z3Z4Z5  e(j6        d¦  «        e/¦  «        Z7d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?ed „ ¦   «         Z@d!„ ZAd"„ ZBd#„ ZCd$„ ZDd%„ ZEd&„ ZFd'„ ZGd(„ ZHd)„ ZId*„ ZJd+„ ZKd,„ ZLd-„ ZMd.„ ZNd/„ ZOd0„ ZPd1„ ZQd2„ ZRd3„ ZSd4„ ZTd5„ ZUd6„ ZVd7„ ZWd8„ ZXd9„ ZYed:„ ¦   «         ZZd;„ Z[d<„ Z\d=„ Z]d>„ Z^d?„ Z_d@„ Z`dA„ ZadB„ ZbdC„ ZcdD„ Zdd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)Úignore_warningszaesara.configdefaultsÚaesara)Ú
ScalarType)ÚVariable)ÚTensorVariable)ÚElemwiseÚ
DimShuffle)ÚDot)Útrue_dividec                 óD   — g | ]}t                                |d ¦  «        ‘ŒS )ÚfloatX)ÚaetÚscalar)Ú.0Únames     úUC:\Projects\Historical\venv\Lib\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                 óH   — |                      di ¦  «         t          | fi |¤ŽS )zB Wrapper for aesara_code that uses a new, empty cache by default. Úcache)Ú
setdefaultr%   )ÚexprÚkwargss     r   Úaesara_code_r3   8   s.   € à
×Ò�g˜rÑ"Ô"Ð"Ý�tÐ&Ð&˜vÐ&Ð&Ð&r   c                 óJ   — |                      di ¦  «         t          | |fi |¤ŽS )zF Wrapper for aesara_function that uses a new, empty cache by default. r/   )r0   r'   )ÚinputsÚoutputsr2   s      r   Úaesara_function_r7   =   s0   € à
×Ò�g˜rÑ"Ô"Ð"Ý˜6 7Ð5Ð5¨fÐ5Ð5Ð5r   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Úmapr3   r   ÚgraphÚbasicÚgraph_inputsÚcloneÚfgÚFunctionGraph)ÚexprsÚoutsÚinss      r   Ú	fgraph_ofrD   C   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_simplifyrN   U   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Útupler9   Útyper:   Útheqr   ÚprintingÚ
debugprintÚ	TypeError)rR   rS   Únumeric_typesÚa_is_numÚb_is_numÚa_is_seqÚb_is_seqÚastrÚbstrÚargnameÚargvalÚargstrs               r   r]   r]   f   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]   Úxtr3   r!   Úytr"   Úztr#   ÚXtÚXÚYtÚYÚZtÚZ© r   r   Útest_example_symbolsrv   –   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. ru   ©F©ÚbroadcastablesN)r3   r!   rZ   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)r3   rp   rZ   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. )ru   rx   ©T©TF©FT)TTry   N)r   Ú
ValueErrorr3   rp   )Ú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. ru   Úf_tN)r3   r‹   rZ   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"   r3   ÚownerÚopr   r   Úadd©r1   Ú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]   r3   r+   Úsinr!   r   rl   Útanru   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#   r3   r   rl   rm   rn   r]   )r1   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)r3   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. )ru   rx   rƒ   r   r„   ry   N)r!   r‹   r3   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. )ru   ru   ru   )rx   rx   rx   )rƒ   rx   rx   )r…   r   r   )r„   r   r   ry   N)r!   r"   r3   r{   )r1   Ú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�   )rp   rr   rt   r3   rZ   r�   r‘   r   r]   ro   Údotrq   rs   )r1   Ú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�   )rZ   r3   rp   ÚTr�   r‘   r   ru   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�   )rp   rr   rt   rZ   r3   r�   r‘   r   ©r1   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]   r3   r+   ÚIntegerr   r    ÚHalfru   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Á   )r3   r+   rÂ   ru   r   r   Útest_IntegersrÆ     s)   € Ý�œ
 1™œÑ&Ô&¨!Ò+Ð+Ð+Ð+Ð+Ð+r   c                  ót   — t          j        d¦  «        } t          t          j        | ¦  «        ¦  «        sJ ‚d S )Nr   )r+   ÚSymbolr3   Ú	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�   )rN   rD   r¾   s    r   ú<lambda>z!test_Derivative.<locals>.<lambda>  s   € �O­I°d©O¬OÑ<Ô<€ r   F©Úevaluate)r   ÚUserWarningr]   r3   r+   Ú
Derivativer—   r!   r   Úgradr   rl   )Ú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©r7   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)	r7   r!   r"   rX   Ú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#   rX   Úarrayr7   ÚtestingÚassert_allcloserZ   r\   )ÚmrŸ   r-   s      r   Útest_aesara_function_matrixrñ   7  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…   rx   ry   )r&   r!   r"   ru   r   r   Útest_dim_handlingrô   C  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÷   )
Únumpyr7   r!   r"   r#   râ   rã   rä   rå   ræ   )rX   r-   r|   rç   Úzzs        r   Útest_aesara_function_kwargsrú   I  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Ö   ru   )r   rˆ   s     r   r   z:test_aesara_function_scalar.<locals>.<listcomp>.<listcomp>q  s    € ÐGÐGÐG¨B˜b˜˜˜ aÐGÐGÐGr   )rX   Úonesr\   r{   )r   Úis     r   r   z/test_aesara_function_scalar.<locals>.<listcomp>p  sF   € ð ð ð àõ ”ÐGÐG°!´&Ô2FÐGÑGÔGÑHÔHðð ð r   )Úaesara.compile.function.typesrü   r!   r"   rp   rr   r7   rZ   r'   Úinput_storager9   ÚlenÚziprX   rY   ÚndarrayÚndim)rü   Úargsr5   r6   Úin_dimsÚout_dimsr   r-   Ú	in_valuesÚ
out_valuesÚdÚvalues               r   Útest_aesara_function_scalarr  Z  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)r7   r!   ru   r   r   rÍ   z0test_aesara_function_bad_kwarg.<locals>.<lambda>Š  s   € Õ/µ°µa¸±c°UÀ1ÐEÑEÔE€ r   N)r   Ú	Exceptionru   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¨   )r3   Úslicer!   r"   rl   rm   )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©Úintegerrp   rª   r›   rÁ   r)   rÖ   rà   ©r/   r§   r   c              3   óN   •K  — | ]}‰j         j        |         j        |k    V — Œ d S r�   )r�   r5   Údata)r   r   rq   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,   r3   r   r[   r�   r‘   Úidx_listr   r5   ÚallÚrange)
r/   r   rp   rr   r®   r*  r  r  r  rq   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 ru   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:   r3   ÚBlockMatrixr   ÚjoinÚany)ÚAÚBÚCÚDÚAtÚBtÚCtÚDtÚBlockÚ	solutionsr4  r   s             @@r   Útest_BlockMatrixrB  ¶  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¢   r8  r9  r›   c                 ó@   •— g | ]}t          j        |g‰|         ¢R Ž ‘ŒS ru   )r+   Úblockcut)r   r   Úcutsizess     €r   r   z6test_BlockMatrix_Inverse_execution.<locals>.<listcomp>Ë  s/   ø€ Ð>Ð>Ð>°!•”˜QÐ- ¨!¤Ð-Ð-Ð-Ð>Ð>Ð>r   )r©   r/   c                 óf   •— g | ]-}t          j        j        |j        Ž                      ‰¦  «        ‘Œ.S ru   )rX   Ú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  r7   Úblock_collapserX   rå   ÚreshaperJ  ræ   Úeyerÿ   Úallclose)r*  r   r8  r9  r5   ÚoutputÚ	cutinputsÚ	cutoutputr©   r-   ÚfblockedÚninputsrF  r«   s               @@r   Ú"test_BlockMatrix_Inverse_executionrX  À  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.basicrZ  r+   rÈ   rì   ÚImmutableMatrixr�   r—   r3   rZ   r
   r�   r‘   )rZ  r$   Ú
MatrixTyperp   ÚtXs        r   Útest_DenseMatrixr`  Ú  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!   rp   r-   r$   r%  N)	r!   r+   rÈ   rp   r,   rJ  r‹   rü   r3   )Úpairsr  r  r/   Ústs        r   Útest_cache_basicrd  å  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                  ó,  — ddl m}  t          | ¦  «        }	 |                      ¦   «          t          t
          t          fD ]$}t          |¦  «        }t          |¦  «        |u sJ ‚Œ%	 |                      |¦  «         dS # |                      |¦  «         w xY w)z Test use of the global cache. r   )Úglobal_cacheN)	Úsympy.printing.aesaracoderf  rN  Úclearr!   rp   r‹   r%   Úupdate)rf  Úbackupr®   rc  s       r   Útest_global_cacherk  ü  s­   € à6Ð6Ð6Ð6Ð6Ð6å�,ÑÔ€Fð
$à×ÒÑÔÐå•Q��ð 	(ð 	(ˆAÝ˜Q‘”ˆBÝ˜q‘>”> RÐ'Ð'Ð'Ð'Ð'ð	(ð 	×Ò˜FÑ#Ô#Ð#Ð#Ð#øˆ×Ò˜FÑ#Ô#Ð#Ð#øøøs   —AA< Á<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 ]\  }}t          ||¬¦  «        |u sJ ‚Œd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‹   r3   Úvaluesr  Úsetr:   ÚidÚitemsr%   )Úsymbolsr/   Úprintedr®   rc  s        r   Útest_cache_types_distinctrs    sþ   € õ Œy˜ÑÔ¥¤°¸¸1Ñ!=Ô!=½sÐC€Gà€EØ€Gàð ð ˆÝ˜! 5Ð)Ñ)Ô)ˆØ˜ŸšÑ)Ô)Ð)Ð)Ð)Ð)Øˆ�‰
ˆ
õ �s•3•r˜7Ÿ>š>Ñ+Ô+Ñ,Ô,Ñ-Ô-Ñ.Ô.µ#°g±,´,Ò>Ð>Ð>Ð>ð —’‘”ð 1ð 1‰ˆˆ2Ý˜1 EÐ*Ñ*Ô*¨bÐ0Ð0Ð0Ð0Ð0ð1ð 1r   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!   r3   r]   rl   r“   s     r   Útest_symbols_are_created_oncerv  $  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 ru   r   )r   r®   s     r   ú	<setcomp>z%test_cache_complex.<locals>.<setcomp>5  s   € Ð6Ð6Ð6˜q�A”FÐ6Ð6Ð6r   N)r!   r"   r+   rœ   r—   r#   Úfree_symbolsr3   rn  r   r;   r<   Ú	ancestorsr�   rZ   ÚConstantr   r’   )r1   Úsymbol_namesr¸   ÚseenÚvs        r   Útest_cache_complexr€  /  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!   r3   r�   r‘   r   Úswitchrl   r]   rX   ÚnanÚAndÚOrÚand_Úor_)r1   ÚresultrŸ   s      r   Útest_PiecewiserŠ  G  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]   r3   r+   ÚEqr!   r"   r   Úeqrl   rm   ru   r   r   Útest_RelationalsrŽ  ]  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            
      óÒ  — t           dt          di} t          t           | ¬¦  «        t          t          | ¬¦  «        }}ddlm} ddlm} ddlm} t          t          t           |t           ¦  «        z  | ¬¦  «        || 	                    ¦   «         z  ¦  «        sJ ‚t          t          dt           z  ¦  «        | |d¦  «         |d	¦  «         |dd
¦  «        z  z   z  ¦  «        sJ ‚d S )NÚ
complex128r¨   r   )Ú	conjugate)Úas_tensor_variable)Úcomplexy      ð?       @rê   rë   rª   )
r!   r"   r%   Ú$sympy.functions.elementary.complexesr‘  Úaesara.tensorr’  r“  r]   Úconj)r©   rl   rm   r‘  ÚatvÚcplxs         r   Útest_complexfunctionsr™  f  sõ   € Ý��a Ð-€FÝ� 6Ð*Ñ*Ô*­K½À&Ð,IÑ,IÔ,Iˆ€BØ>Ð>Ð>Ð>Ð>Ð>Ø7Ð7Ð7Ð7Ð7Ð7Ø-Ð-Ð-Ð-Ð-Ð-Ý•�A˜i˜i­™lœl™N°6Ð:Ñ:Ô:¸BÀÇÂÁ	Ä	¹NÑKÔKÐKÐKÐKÝ•˜T¥1™HÑ%Ô% r¨3¨3¨s©8¬8°C°C¸±H´H¸T¸TÀ!ÀA¹Y¼YÑ4FÑ+FÑ'GÑHÔHÐHÐHÐHÐHÐHr   c                  óH   — t          g dg¦  «        }  | ¦   «         dk    sJ ‚d S )Ny      ð?      ð?)r'   )Útfs    r   Útest_constantfunctionsrœ  p  s*   € Ý	˜˜T˜FÑ	#Ô	#€BØˆ2‰4Œ4�Š:ˆ:ˆ:ˆ:ˆ:ˆ:r   )eÚ__doc__ÚloggingÚsympy.externalr   Úsympy.testing.pytestr   r   Úsympy.utilities.exceptionsr   Ú	getLoggerÚaesaraloggerÚsetLevelÚCRITICALr   ÚWARNINGrø   rX   r   r   Úaesara.scalar.basicr   Úaesara.graph.basicr	   Úaesara.tensor.varr
   Úaesara.tensor.elemwiser   r   Úaesara.tensor.mathr   rg  r   rl   rm   rn   ro   rq   rs   ÚdisabledÚsympyr+   Úsympy.core.singletonr    Ú	sympy.abcr!   r"   r#   r$   r%   r&   r'   rp   rr   rt   rü   r‹   r3   r7   rD   rN   r]   rv   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.  rB  rX  r`  rd  rk  rs  rv  r€  rŠ  rŽ  r™  rœ  ru   r   r   ú<module>r°     sÿ  ððð ð €€€à (Ð (Ð (Ð (Ð (Ð (Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à 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ÑÔ€ð'ð 'ð 'ð
6ð 6ð 6ð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ð.$ð $ð $ð"1ð 1ð 1ð.	0ð 	0ð 	0ð ð  ð  ð0"ð "ð "ð,0ð 0ð 0ðIð Ið Iðð ð ð ð r   