Ë
    óÿæi\S  ã                   óà  — 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j                  ej                  «        ed«      Zej                  ej                  «       er�d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 � cg c]  } ejC                  | d«      ‘Œ c} \  Z"Z#Z$dD �cg c]  }ej%                  dd|¬«      ‘Œ c}\  Z%Z&Z'ndZ(ddl)Z*ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddlm2Z2m3Z3m4Z4 dD �cg c]  }e*jk                  |dd«      ‘Œ c}\  Z6Z7Z8  e*jr                  d«      e1«      Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd „ ZBed!„ «       ZCd"„ ZDd#„ ZEd$„ ZFd%„ ZGd&„ ZHd'„ ZId(„ ZJd)„ ZKd*„ ZLd+„ ZMd,„ ZNd-„ ZOd.„ ZPd/„ ZQd0„ ZRd1„ ZSd2„ ZTd3„ ZUd4„ ZVd5„ ZWd6„ ZXd7„ ZYd8„ ZZd9„ Z[d:„ Z\ed;„ «       Z]d<„ Z^d=„ Z_d>„ Z`d?„ Zad@„ ZbdA„ ZcdB„ ZddC„ ZedD„ ZfdE„ Zgyc c} w c c}w c c}w )Faˆ  
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_divideÚxyzÚfloatXÚXYZ©FF)ÚnameT)ÚS)ÚxÚyÚzÚt)Úaesara_codeÚdim_handlingÚaesara_functioné   Úfc                 ó~   — |j                  di «       t        «       5  t        | fi |¤Žcddd«       S # 1 sw Y   yxY w)zB Wrapper for aesara_code that uses a new, empty cache by default. ÚcacheN)Ú
setdefaultr   r   )ÚexprÚkwargss     úy/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sympy/printing/tests/test_aesaracode.pyÚaesara_code_r%   8   s1   € à
×Ñ�g˜rÔ"Ü	Õ	!Ü˜4Ñ* 6Ñ*÷ 
"×	!Ò	!ús   �3³<c                 ó€   — |j                  di «       t        «       5  t        | |fi |¤Žcddd«       S # 1 sw Y   yxY w)zF Wrapper for aesara_function that uses a new, empty cache by default. r    N)r!   r   r   )ÚinputsÚoutputsr#   s      r$   Úaesara_function_r)   >   s3   € à
×Ñ�g˜rÔ"Ü	Õ	!Ü˜v wÑ9°&Ñ9÷ 
"×	!Ò	!ús   �4´=c                  óF  — t        t        t        | «      «      }t        t        j                  j
                  j                  |«      «      }t        j                  j
                  j                  ||«      \  }}t        j                  j                  j                  ||«      S )z¸ Transform SymPy expressions into Aesara Computation.

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

    Returns
    =======
    aesara.graph.fg.FunctionGraph
    )
ÚlistÚmapr%   r   ÚgraphÚbasicÚgraph_inputsÚcloneÚfgÚFunctionGraph)ÚexprsÚoutsÚinss      r$   Ú	fgraph_ofr6   E   so   € ô ””L %Ó(Ó)€DÜ
Œv�|‰|×!Ñ!×.Ñ.¨tÓ4Ó
5€CÜ—‘×"Ñ"×(Ñ(¨¨dÓ3�I€CˆÜ�<‰<�?‰?×(Ñ(¨¨dÓ3Ð3ó    c                 ó¶   — t         j                  j                  «       j                  d«      }| j	                  «       } |j
                  j                  | «       | S )z© Simplify a Aesara Computation.

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

    Returns
    =======
    aesara.graph.fg.FunctionGraph
    Úfusion)r   ÚcompileÚget_default_modeÚ	excludingr0   Ú	optimizerÚrewrite)ÚfgraphÚmodes     r$   Úaesara_simplifyrA   W   sC   € ô �>‰>×*Ñ*Ó,×6Ñ6°xÓ@€DØ�\‰\‹^€FØ‡N�N×Ñ˜6Ô"Ø€Mr7   c                 ó|  — t         t        t        j                  f}t	        | |«      }t	        ||«      }|s|r
|r|sy| |k(  S t	        | t
        t        f«      }t	        |t
        t        f«      }|s|rO|r|rt        | «      t        |«      k7  ryt        t        t        | «      «      t        t        t        |«      «      k(  S t        j                  j                  | d¬«      }t        j                  j                  |d¬«      }d| |fd||ffD ])  \  }	}
}|dk(  sŒt        d|	›d|	›d	t        |
«      ›d
�«      ‚ ||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)rE   rF   Únumeric_typesÚa_is_numÚb_is_numÚa_is_seqÚb_is_seqÚastrÚbstrÚargnameÚargvalÚargstrs               r$   rP   rP   h   s.  € ô œ%¤§¡Ð+€MÜ˜!˜]Ó+€HÜ˜!˜]Ó+€Hñ ‘8Ù™XØà�A‰vˆô ˜!œe¤T˜]Ó+€HÜ˜!œe¤T˜]Ó+€Há‘8Ù™X¬$¨q«'´T¸!³WÒ*<Øä”Cœ˜a“LÓ!¤T¬#¬d°A«,Ó%7Ñ7Ð7ô �?‰?×%Ñ% a¨eÐ%Ó4€DÜ�?‰?×%Ñ% a¨eÐ%Ó4€Dð &)¨!¨T N°S¸!¸T°NÓ#CÑˆ�˜Ø�R‹<Ýò šG¤T¨&¥\ð3óð ð $Dð �4‰<Ðr7   c                  óx  — 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 ‚y)z‰
    Check that the example symbols in this module print to their Aesara
    equivalents, as many of the other tests depend on this.
    N)rP   Úxtr%   r   Úytr   Úztr   ÚXtÚXÚYtÚYÚZtÚZ© r7   r$   Útest_example_symbolsri   ˜   s|   € ô
 ””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ð$Ü””L¤“OÔ$Ð$Ñ$r7   c                  ó4  — 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 ‚y)z. Test printing a Symbol to a aesara variable. rh   ©F©ÚbroadcastablesN)r%   r   rM   r
   Úbroadcastabler   )ÚxxÚxx2s     r$   Útest_Symbolrq   ¥   s   € ä	”a‹€BÜ�bœ(Ô#Ð#Ð#Ø×Ñ˜rÒ!Ð!Ð!Ø�7‰7”a—f‘fÒÐÐä
”q¬!¨X¨Ô
7€CØ×Ñ Ò(Ð(Ð(Ø�8‰8”q—v‘vÒÐÑr7   c                  óh   — t        t        «      } t        | t        «      sJ ‚| j                  dk(  sJ ‚y)z4 Test printing a MatrixSymbol to a aesara variable. r   N)r%   rc   rM   r   rn   )ÚXXs    r$   Útest_MatrixSymbolrt   °   s/   € ä	”a‹€BÜ�bœ.Ô)Ð)Ð)Ø×Ñ˜~Ò-Ð-Ñ-r7   c                  ó�   — g d¢} | D ]1  }t        t        «      5  t        t        t        |i¬«       ddd«       Œ3 y# 1 sw Y   Œ>xY w)z/ Test MatrixSymbol with invalid broadcastable. )rh   rk   ©T©TF©FT)TTrl   N)r   Ú
ValueErrorr%   rc   )ÚbcsÚbcs     r$   Útest_MatrixSymbol_wrong_dimsr|   ¶   s9   € ò O€CÛˆÜ”JÕÜœ¬A¨r¨7Õ3÷  Ðñ ßÐús	   ™<¼A	c                  óŠ   — t        t        «      } t        | t        «      sJ ‚| j                  dk(  sJ ‚| j
                  dk(  sJ ‚y)zG Test printing AppliedUndef instance, which works similarly to Symbol. rh   Úf_tN)r%   r~   rM   r   rn   r   )Úftts    r$   Útest_AppliedUndefr€   ¾   sB   € ä
”sÓ
€CÜ�cœ>Ô*Ð*Ð*Ø×Ñ Ò"Ð"Ð"Ø�8‰8�uÒÐÑr7   c                  óš   — t         t        z   } t        | «      }|j                  j                  t
        j                  j                  k(  sJ ‚y ©N)r   r   r%   ÚownerÚopr   ÚtensorÚadd©r"   Úcomps     r$   Útest_addr‰   Æ   s5   € ÜŒq‰5€DÜ˜Ó€DØ�:‰:�=‰=œFŸM™M×-Ñ-Ò-Ð-Ñ-r7   c                  ó  — t        t        t        j                  t        «      «      t
        j                  t        «      «      sJ ‚t        t        t        j                  t        «      «      t
        j                  t        «      «      sJ ‚y r‚   )rP   r%   ÚsyÚsinr   Úaetr_   Útanrh   r7   r$   Ú	test_trigr�   Ë   sL   € Ü”œRŸV™V¤A›YÓ'¬¯©´«Ô5Ð5Ð5Ü”œRŸV™V¤A›YÓ'¬¯©´«Ô5Ð5Ñ5r7   c                  ó‚  — t        j                  t        dz  t        j                  t        «      z   «      t        j
                  dt        z  «      z  } t        | «      }t        j                  t        dz  t        j                  t        «      z   «      t        j                  dt        z  «      z  }t        ||«      sJ ‚y)z; Test printing a complex expression with multiple symbols. é   N)r‹   Úexpr   Úcosr   Úlogr   r%   r�   r_   r`   ra   rP   )r"   rˆ   Úexpecteds      r$   Ú	test_manyr–   Ï   s|   € ä�6‰6”!�Q‘$œŸ™¤›Ñ"Ó#¤b§f¡f¨Q¬q©S£kÑ1€DÜ˜Ó€DÜ�w‰w”r˜1‘uœsŸw™w¤r›{Ñ*Ó+¬c¯g©g°a¼±d«mÑ;€HÜ��hÔÐÑr7   c                  ó°  — dD ]2  } t        t        t        | i¬«      j                  j                  | k(  rŒ2J ‚ t        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 ‚y)	zA Test specifying specific data types through the dtype argument. )Úfloat32Úfloat64Úint8Úint16Úint32Úint64©Údtypesr   )r˜   r™   é   r˜   r™   N)r%   r   rO   Údtyper   )r¡   s    r$   Ú
test_dtyper¢   ×   s´   € ãJˆÜœA¤q¨% jÔ1×6Ñ6×<Ñ<ÀÓEÐEÐEð Kô œ¤1 h -Ô0×5Ñ5×;Ñ;Ð?UÑUÐUÐUô œ˜A™¤q¨) nÔ5×:Ñ:×@Ñ@ÀIÒMÐMÐMÜœœA™¤q¨)´Q¸	Ð&BÔC×HÑH×NÑNÐR[Ò[Ð[Ñ[r7   c                  óp   — t         t        fD ]'  } dD ]   }t        | | |i¬«      j                  |k(  rŒ J ‚ Œ) y)zG Test the "broadcastables" argument when printing symbol-like objects. )rh   rk   rv   r   rw   rl   N)r   r~   r%   rn   )Úsr{   s     r$   Útest_broadcastablesr¥   ä   s<   € ô ”‹XˆÛHˆBÜ °1°b°'Ô:×HÑHÈBÓNÐNÐNñ Iñ r7   c                  óª   — t         t        z   } g d¢g d¢g d¢g d¢g d¢g}|D ]0  \  }}}t        | t         |t        |i¬«      }|j                  |k(  rŒ0J ‚ y)zG Test "broadcastable" attribute after applying element-wise binary op. )rh   rh   rh   )rk   rk   rk   )rv   rk   rk   )rx   r   r   )rw   r   r   rl   N)r   r   r%   rn   )r"   ÚcasesÚbc1Úbc2Úbc3rˆ   s         r$   Útest_broadcastingr«   î   s`   € ô Œq‰5€Dò 	Ú&Ú%Ú7Ú7ð€Eó ‰ˆˆS�#Ü˜D´!°S¼!¸SÐ1AÔBˆØ×!Ñ! SÓ(Ð(Ð(ñ r7   c                  óþ   — t         t        z  t        z  } t        | «      }t	        |j
                  j                  t        «      sJ ‚t        |t        j                  t        «      j                  t        «      «      sJ ‚y r‚   )rc   re   rg   r%   rM   rƒ   r„   r   rP   rb   Údotrd   rf   )r"   Úexpr_ts     r$   Útest_MatMulr¯      sR   € ÜŒQ‰3Œq‰5€DÜ˜$Ó€FÜ�f—l‘l—o‘o¤sÔ+Ð+Ð+Ü�œŸ™œr›
Ÿ™¤rÓ*Ô+Ð+Ñ+r7   c                  ó~   — t        t        t        j                  «      j                  j
                  t        «      sJ ‚y r‚   )rM   r%   rc   ÚTrƒ   r„   r   rh   r7   r$   Útest_Transposer²     s'   € Ü”l¤1§3¡3Ó'×-Ñ-×0Ñ0´*Ô=Ð=Ñ=r7   c                  óŠ   — t         t        z   t        z   } t        t	        | «      j
                  j                  t        «      sJ ‚y r‚   )rc   re   rg   rM   r%   rƒ   r„   r   ©r"   s    r$   Útest_MatAddrµ   	  s0   € ÜŒQ‰3Œq‰5€DÜ”l 4Ó(×.Ñ.×1Ñ1´8Ô<Ð<Ñ<r7   c                  óÐ   — t        t        t        j                  d«      dz  «      t	        dd«      «      sJ ‚t        t        t
        j                  «      t	        dd«      «      sJ ‚y )Nr‘   é   r    )rP   r%   r‹   ÚIntegerr   r   ÚHalfrh   r7   r$   Útest_Rationalsrº     sK   € Ü”œRŸZ™Z¨›]¨QÑ.Ó/´¸QÀÓ1BÔCÐCÐCÜ”œQŸV™VÓ$¤k°!°QÓ&7Ô8Ð8Ñ8r7   c                  óJ   — t        t        j                  d«      «      dk(  sJ ‚y )Nr·   )r%   r‹   r¸   rh   r7   r$   Útest_Integersr¼     s   € ÜœŸ
™
 1›Ó&¨!Ò+Ð+Ñ+r7   c                  ón   — t        j                  d«      } t        t        j                  | «      «      sJ ‚y )NÚn)r‹   ÚSymbolr%   Ú	factorial)r¾   s    r$   Útest_factorialrÁ     s%   € Ü
�	‰	�#‹€AÜœŸ™ Q›Ô(Ð(Ñ(r7   c                  óZ  — t        t        «      5  d„ } t         | t        t	        j
                  t	        j                  t        «      t        d¬«      «      «       | t        j                  t        j                  t        «      t        «      «      «      sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nc                 ó*   — t        t        | «      «      S r‚   )rA   r6   r´   s    r$   Ú<lambda>z!test_Derivative.<locals>.<lambda>  s   € œO¬I°d«OÔ<r7   F©Úevaluate)r   ÚUserWarningrP   r%   r‹   Ú
DerivativerŒ   r   r   Úgradr�   r_   )Úsimps    r$   Útest_DerivativerË     si   € Ü	œÕ	%Ù<ˆÜ‘Dœ¤b§m¡m´B·F±F¼1³I¼qÈ5Ô&QÓRÓSÙœŸ™¤S§W¡W¬R£[´"Ó5Ó6ô8ð 	8ñ 8÷ 
&×	%Ñ	%ús   �BB!Â!B*c                  ód   — t        t        t        gt        t        z   g«      }  | dd«      dk(  sJ ‚y)z, Test aesara_function() with single output. r‘   r·   é   N©r)   r   r   )r   s    r$   Útest_aesara_function_simplerÏ      s*   € äœ!œQ˜¤!¤A¡# Ó'€AÙˆQ�‹7�aŠ<Ð‰<r7   c                  ó”   — t        t        t        gt        t        z   t        t        z
  g«      }  | dd«      \  }}|dk(  sJ ‚|dk(  sJ ‚y)z/ Test aesara_function() with multiple outputs. r‘   r·   rÍ   éÿÿÿÿNrÎ   )r   Úo1Úo2s      r$   Útest_aesara_function_multirÔ   %  sC   € äœ!œQ˜¤!¤A¡#¤q¬¡s Ó,€AÙˆq�!‹W�F€BˆØ�Š7€Nˆ7Ø�Š8€O‰8r7   c            	      ót  — t        t        t        gt        t        z   gdt        dt        di¬«      } t        j                  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«      j                  d«      }dt        j                  d«      j                  d«      z  }t        j                  j                   | ||«      dt        j                  d«      z  z
  «      dk  sJ ‚y
)z1 Test aesara_function() vs Numpy implementation. r    r™   )ÚdimrŸ   r‘   r·   r   é   ç•Ö&è.>)rŸ   rÖ   N)	r)   r   r   rK   ÚlinalgÚnormÚasarrayÚarangeÚastype)r   ro   Úyys      r$   Útest_aesara_function_numpyrß   ,  sñ   € äœ!œQ˜¤!¤A¡# ¨AÜ!" I¬q°)Ð <ô	>€Aä�9‰9�>‰>™!˜Q ˜F Q¨ FÓ+¬b¯j©j¸!¸Q¸Ó.@Ñ@ÓAÀDÒHÐHÐHäœ!œQ˜¤!¤A¡# ´°9¼aÀÐ/KØô	 €Aä	�‰�1‹×	Ñ	˜YÓ	'€BØ	
Œ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BÜ�9‰9�>‰>™!˜B ›) a¬¯	©	°!«¡nÑ4Ó5¸Ò<Ð<Ñ<r7   c                  óä  — 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                  j                   |ddd«      |«       t        t        t        t        g| gd¬«      }t
        j                  j                   |ddd«      |«       t        t        t        t        g| | g«      }t         |ddd«      t        g «      «      sJ ‚t
        j                  j                   |ddd«      d   |«       t
        j                  j                   |ddd«      d   |«       y )	Nç      ð?ç       @g      @g      @T)Úscalarr   r    )r‹   ÚMatrixr   r   r   rK   Úarrayr)   ÚtestingÚassert_allcloserM   rO   )Úmr•   r   s      r$   Útest_aesara_function_matrixré   9  s  € Ü
�	‰	”A”q�6œAœq¤1™u¤q™y˜>Ð*Ó+€AÜ�x‰x˜#˜s˜ c¨?Ð%;Ð<Ó=€HÜœ!œQ¤˜ Q CÓ(€AÜ‡J�J×Ñ™q  c¨3Ó/°Ô:Üœ!œQ¤˜ Q C°Ô5€AÜ‡J�J×Ñ™q  c¨3Ó/°Ô:Üœ!œQ¤˜ Q¨ FÓ+€AÜ‘a˜˜S #Ó&¬¨R«Ô1Ð1Ð1Ü‡J�J×Ñ™q  c¨3Ó/°Ñ2°HÔ=Ü‡J�J×Ñ™q  c¨3Ó/°Ñ2°HÕ=r7   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 ‚y )	Nr‘   )rÖ   r   r    )Údimsrx   rk   rl   )r   r   r   rh   r7   r$   Útest_dim_handlingrì   E  st   € Üœ˜ Ô#¬¨>Ð':Ò:Ð:Ð:ÜœœA˜¤a¨¬A¨q \Ô2´q¸-Ü78¸.ð7Jò Jð Jð Jäœ˜¬Q°¨MÔ:¼qÀ(¸mÒKÐKÑKr7   c                  óÔ  — ddl } t        t        t        t        gt        t        z   gddt        dt        dt        di¬«      }| j
                  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«      j                  d«      }d | j                  d«      j                  d«      z  }d | j                  d«      j                  d«      z  }| j
                  j                   ||||«      d | j                  d«      z  z
  «      dk  sJ ‚y)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ï   )
Únumpyr)   r   r   r   rÙ   rÚ   rÛ   rÜ   rÝ   )rK   r   ro   rÞ   Úzzs        r$   Útest_aesara_function_kwargsrò   K  s8  € ó Üœ!œQ¤˜¤Q¤q¡S E¨qÀ(Ü�y¤! Y´°9Ð=ô	?€Aà�9‰9�>‰>™!˜Q ˜F Q¨ F¨Q°¨FÓ3°j°b·j±jÀ!ÀQÀÓ6HÑHÓIÈDÒPÐPÐPäœ!œQ¤˜¤Q¤q¡S EÜ ! 9¬a°¼A¸yÐIØ¨xô	9€Að 
ˆ�‰�1‹×	Ñ	˜YÓ	'€BØ	
ˆ9ˆ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BØ	
ˆ9ˆ2�9‰9�Q‹<×Ñ˜yÓ)Ñ	)€BØ�9‰9�>‰>™!˜B  B›-¨!¨I¨B¯I©I°a«L©.Ñ8Ó9¸DÒ@Ð@Ñ@r7   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 ‚|j                  j                  D ��	cg c]=  }t        j                  |j                  j                  D �	cg c]  }	|	rdnd‘Œ
 c}	«      ‘Œ? }
}}	 ||
Ž }t        |t        «      s|g}t        |«      t        |«      k(  sJ ‚t!        ||«      D ]V  \  }}|r"|dk(  rt        |t        j"                  «      rŒ(J ‚t        |t        j$                  «      sJ ‚|j&                  |k(  rŒVJ ‚ �Œ! �Œ/ yc c}	w c c}	}w )	z2 Test the "scalar" argument to aesara_function(). r   )ÚFunctionNr‘   r    rx   )rë   rã   rÍ   )Úaesara.compile.function.typesrô   r   r   rc   re   r)   rM   r   Úinput_storagerK   ÚonesrO   rn   r+   ÚlenÚziprL   ÚndarrayÚndim)rô   Úargsr'   r(   Úin_dimsÚout_dimsrã   r   Úir{   Ú	in_valuesÚ
out_valuesÚdÚvalues                 r$   Útest_aesara_function_scalarr  \  sØ  € å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ˆAô ˜a×/Ñ/°Ô:Ð:Ð:ð
 ×*Ñ*×8Ò8ôá8�Aô —‘°!·&±&×2FÒ2FÓGÑ2F¨B™b™ a™Ð2FÑGÕHØ8ð ñ ñ ˜I˜ˆJÜ˜j¬$Ô/Ø(˜\�
ô �x“=¤C¨
£OÒ3Ð3Ð3Ü ¨*Ö5‘��5á˜a 1šfä% e¬R¯Y©YÕ7Ð7Ð7ô & e¬R¯Z©ZÔ8Ð8Ð8Ø Ÿ:™:¨›?Ð*˜?ò 6ò% $ñ /3ùò Hùós   Ä,G=
ÅG8Å	G=
Ç8G=
c                  ó&   — t        t        d„ «       y)za
    Passing an unknown keyword argument to aesara_function() should raise an
    exception.
    c                  ó8   — t        t        gt        dz   gd¬«      S )Nr    r·   )Úfoobar)r)   r   rh   r7   r$   rÄ   z0test_aesara_function_bad_kwarg.<locals>.<lambda>Œ  s   € Ô/´°´a¸±c°UÀ1ÕEr7   N)r   Ú	Exceptionrh   r7   r$   Útest_aesara_function_bad_kwargr	  ‡  s   € ô
 Œ9ÑEÕFr7   c            	      óN  — 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 ‚y )Nr    r‘   r·   c                 óv   — dD ]4  }t        | |«      }t        ||«      }|�|€|€Œ"|€Œ% yt        ||«      rŒ4 y y)N)ÚstartÚstopÚstepFT)ÚgetattrrP   )Ús1Ús2ÚattrÚa1Úa2s        r$   Ú
theq_sliceztest_slice.<locals>.theq_slice’  sJ   € Û-ˆDÜ˜˜TÓ"ˆBÜ˜˜TÓ"ˆBØˆz˜R˜ZØ™
 b¡jÙ Ü˜"˜b•\Ùð .ð r7   rœ   rž   )r%   Úslicer   r   r_   r`   )r  rŸ   s     r$   Ú
test_slicer  �  s…   € Üœ˜a  A›Ó'¬5°°A°q«>Ò9Ð9Ð9ò	ô �œ!˜WÐ%€FÙ”l¤5¬¬A£;°vÔ>ÄÄbÌ"ÃÔNÐNÐNÙ”l¤5¨¬A¨q£>¸&ÔAÄ5ÈÌBÐPQÃ?ÔSÐSÑSr7   c                  óT  ‡	— 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¬«      Š	y )Nr¾   T©Úintegerrc   r    r‘   r·   r   rÍ   r×   ©r    r�   r   c              3   ój   •K  — | ]*  }‰j                   j                  |   j                  |k(  –— Œ, y ­wr‚   )rƒ   r'   Údata)Ú.0rÿ   rd   s     €r$   Ú	<genexpr>z#test_MatrixSlice.<locals>.<genexpr>¯  s*   øè ø€ ÐA±[°ˆr�x‰x�‰˜qÑ!×&Ñ&¨!Õ+±[ùs   ƒ03é   Úkrœ   rž   )r‹   r¿   ÚMatrixSymbolr%   r	   rN   rƒ   r„   Úidx_listr  r'   ÚallÚrange)
r    r¾   rc   re   r¤   r!  r  r  r  rd   s
            @r$   Útest_MatrixSlicer&  ¡  s  ø€ Ø€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Ø�8‰8�?‰?˜1Ñ¤¨a°uÔ!=Ò=Ð=Ð=ô ÓA´U¸1¸a´[ÓAÔAÐAÐAä
�	‰	�#‹€AÜ�˜A˜w˜<Õ(Ø˜1˜a�ˆ4€EØ	ˆ%��Tˆ/Ñ€AÜ	�a  G¨Q°Ð 8Ô	9�Br7   c            
      ó@  ‡— t        j                  dd¬«      } dD �cg c]  }t        j                  || | «      ‘Œ c}\  }}}}t        t        ||||f«      \  }}}}	t        j
                  ||g||gg«      }
t	        |
«      Št        j                  dt        j                  d||«      t        j                  d||	«      «      t        j                  dt        j                  d||«      t        j                  d||	«      «      g}t        ˆfd„|D «       «      sJ ‚y c c}w )Nr¾   Tr  ÚABCDr   r    c              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr‚   )rP   )r  ÚsolutionÚBlockts     €r$   r  z#test_BlockMatrix.<locals>.<genexpr>À  s   øè ø€ Ð@±i¨(Œt�F˜H×%±iùs   ƒ)	r‹   r¿   r"  r,   r%   ÚBlockMatrixr�   ÚjoinÚany)r¾   r   ÚAÚBÚCÚDÚAtÚBtÚCtÚDtÚBlockÚ	solutionsr+  s               @r$   Útest_BlockMatrixr9  ¸  só   ø€ Ü
�	‰	�#˜tÔ$€AÙ:@ÓA¹&°$”"—/‘/ $¨¨1Õ-¸&ÑA�J€A€qˆ!ˆQÜœ¨¨1¨a° |Ó4�N€BˆˆB�Ü�N‰N˜Q ˜F Q¨ FÐ+Ó,€EÜ˜%Ó €FÜ—‘˜!œSŸX™X a¨¨RÓ0´#·(±(¸1¸bÀ"Ó2EÓFÜ—‘˜!œSŸX™X a¨¨RÓ0´#·(±(¸1¸bÀ"Ó2EÓFðH€IäÓ@±iÓ@Ô@Ð@Ñ@ùò Bs   �D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}|D �cg c]  }t        j                  |g||   ¢­Ž ‘Œ }	}|j	                  t        t        ||	«      «      «      }
t        t        ||gt        |«      z  «      «      }t        ||g|i ¬«      }t        |t        j                  |
«      g|i ¬«      }|D �cg c]7  }t        j                  j                  |j                  Ž j                  |«      ‘Œ9 }}t        j                  || z  «      j!                  |j                  «      j                  |«      t        j"                  |«      j                  |«      g}|dxx   t        j$                  |j                  «      dz  z  cc<   t        j&                   ||Ž  ||Ž d¬	«      sJ ‚y c c}w c c}w )
N)r‘   r   r˜   r/  r0  r‘   )rŸ   r    r    gñhãˆµøä>)Úrtol)r‹   r"  ÚIÚblockcutÚsubsÚdictrù   rø   r)   Úblock_collapserK   ÚrandomÚrandÚshaperÝ   rÜ   ÚreshapeÚeyer÷   Úallclose)r!  r¾   r¡   r/  r0  r'   ÚoutputÚcutsizesrÿ   Ú	cutinputsÚ	cutoutputrŸ   r   Úfblockedr   Úninputss                   r$   Ú"test_BlockMatrix_Inverse_executionrM  Â  sè  € à�D€A€qØ€EÜ
�‰˜˜Q Ó"€AÜ
�‰˜˜Q Ó"€AØ�ˆT€FØ�S‰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á7=Ó>±v°!”—‘˜QÐ- ¨!¡Ô-°v€IÐ>Ø—‘œD¤ V¨YÓ!7Ó8Ó9€Iä”#�f˜u˜g¤c¨&£kÑ1Ó2Ó3€FÜ˜ & °&ÀÔC€AÜ ¬×):Ñ):¸9Ó)EÐ(FØ'-°Rô9€Hñ @FÓF¹v¸!Œr�y‰y�~‰~˜qŸw™wÐ'×.Ñ.¨uÕ5¸v€GÐFÜ�y‰y˜˜1™‹~×%Ñ% a§g¡gÓ.×5Ñ5°eÓ<Ü�v‰v�a‹y×Ñ Ó&ð(€GàˆAƒJ”"—'‘'˜!Ÿ'™'Ó" 4Ñ'Ñ'ƒJä�;‰;‘q˜'�{¡H¨gÐ$6¸TÕBÐBÑBùò ?ùò Gs   Á7 HÄ<H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                  | «      rŒœJ ‚ y )Nr   )ÚJoinÚtheta)Úaesara.tensor.basicrO  r‹   r¿   rä   ÚImmutableMatrixr“   rŒ   r%   rM   r   rƒ   r„   )rO  r   Ú
MatrixTyperc   ÚtXs        r$   Útest_DenseMatrixrU  Ü  s˜   € Ý(ä
�	‰	�'Ó€AÜ—y‘y¤"×"4Ñ"4Ó5ˆ
ÙœŸ™ ›¤R§V¡V¨A£Y JÐ/´"·&±&¸³)¼R¿V¹VÀA»YÐ1GÐHÓIˆÜ˜!‹_ˆÜ˜"œnÔ-Ð-Ð-Ü˜"Ÿ(™(Ÿ+™+ tÕ,Ð,Ð,ñ	 6r7   c                  óŒ  — t         t        j                  d«      ft        t        j                  dgt        j
                  ¢­Ž ft         t        j                  d«      t        j                  d«      «      fg} | D ]G  \  }}i }t        ||¬«      }t        ||¬«      |u sJ ‚t        |i ¬«      |usJ ‚t        ||¬«      |u rŒGJ ‚ y)zH Test single symbol-like objects are cached when printed by themselves. r   rc   r   r   r  N)	r   r‹   r¿   rc   r"  rC  r~   rô   r%   )Úpairsr  r  r    Ústs        r$   Útest_cache_basicrY  ç  s¼   € ô
 
ŒB�I‰I�c‹NÐÜ	
ŒB�O‰O˜CÐ*¤!§'¡'Ò*Ð+Ü	ÐŒb�k‰k˜#ÓœrŸy™y¨›~Ó.Ð/ð€Eó ‰ˆˆBØˆÜ˜" EÔ*ˆô ˜B eÔ,°Ñ2Ð2Ð2ô ˜B bÔ)°Ñ3Ð3Ð3ô ˜B eÔ,°Ò2Ð2Ð2ñ r7   c                  ó8  — ddl m}  t        | «      }	 | j                  «        t        t
        t        fD ]0  }t        «       5  t        |«      }t        |«      |u sJ ‚	 ddd«       Œ2 	 | j                  |«       y# 1 sw Y   ŒOxY w# | j                  |«       w xY w)z Test use of the global cache. r   )Úglobal_cacheN)
Úsympy.printing.aesaracoder[  r?  Úclearr   rc   r~   r   r   Úupdate)r[  Úbackupr¤   rX  s       r$   Útest_global_cacher`  þ  sƒ   € å6ä�,Ó€Fð$à×ÑÔä”Qœ“ˆAÜ'Õ)Ü  “^�Ü" 1“~¨Ñ+Ð+Ñ+÷ *Ð)ñ ð 	×Ñ˜FÕ#÷ *Ð)ûð 	×Ñ˜FÕ#ús#   “.B ÁA:Á
B Á:B	Á?B ÂBc            	      óÖ  — t        j                  d«      t        j                  ddd«      t        g} i }i }| D ](  }t	        ||¬«      }||j                  «       vsJ ‚|||<   Œ* t        t        t        t        |j                  «       «      «      «      t        | «      k(  sJ ‚|j                  «       D ]*  \  }}t        «       5  t        ||¬«      |u sJ ‚	 ddd«       Œ, y# 1 sw Y   Œ7xY w)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~   r%   Úvaluesrø   Úsetr,   ÚidÚitemsr   r   )Úsymbolsr    Úprintedr¤   rX  s        r$   Útest_cache_types_distinctrh    sÐ   € ô �y‰y˜Ó¤§¡°¸¸1Ó!=¼sÐC€Gà€EØ€GãˆÜ˜! 5Ô)ˆØ˜Ÿ™Ó)Ñ)Ð)Ð)Øˆ�Š
ð ô Œs”3”r˜7Ÿ>™>Ó+Ó,Ó-Ó.´#°g³,Ò>Ð>Ð>ð —‘–‰ˆˆ2Ü#Õ%Ü˜q¨Ô.°"Ñ4Ð4Ñ4÷ &Ð%ñ !ß%Ð%ús   ÃCÃC(	c                  óÐ   — t        j                  t        t        d¬«      } t        | «      }t	        |t
        t
        z   «      sJ ‚t	        |t
        t        t        «      z   «      rJ ‚y)zf
    Test that a symbol is cached and reused when it appears in an expression
    more than once.
    FrÅ   N)r‹   ÚAddr   r%   rP   r_   r‡   s     r$   Útest_symbols_are_created_oncerk  (  sP   € ô
 �6‰6”!”Q Ô'€DÜ˜Ó€Dä�”bœ2‘gÔÐÐÜ�Dœ"œ|¬A›Ñ.Ô/Ð/Ð/Ð/r7   c                  ó|  — t         dz  t        t        j                  t         «      z
  t        j                  t
        t         t        z  z
  «      z  z   } | j                  D �ch c]  }|j                  ’Œ }}t        | «      }t        «       }t        j                  j                  j                  |g«      D ]y  }|j                  �Œt        |t        j                  j                  j                   «      rŒ?|j                  |v sJ ‚|j                  |vsJ ‚|j#                  |j                  «       Œ{ ||k(  sJ ‚yc c}w )zf
    Test caching on a complicated expression with multiple symbols appearing
    multiple times.
    r‘   N)r   r   r‹   r’   rŒ   r   Úfree_symbolsr   r%   rc  r   r-   r.   Ú	ancestorsrƒ   rM   ÚConstantr†   )r"   r¤   Úsymbol_namesr®   ÚseenÚvs         r$   Útest_cache_complexrs  3  só   € ô
 �‰6”QœŸ™¤›‘]¤b§f¡f¬Q´´Q±©YÓ&7Ñ7Ñ7€DØ$(×$5Ò$5Ó6Ñ$5˜q�A—F“FÐ$5€LÐ6Ü˜$Ó€Fô ‹5€DÜ�\‰\×Ñ×)Ñ)¨6¨(Ö3ˆà�7‰7‰?¤:¨a´·±×1CÑ1C×1LÑ1LÕ#Mà—6‘6˜\Ñ)Ð)Ð)Ø—6‘6 Ñ%Ð%Ð%Ø�H‰H�Q—V‘VÕð 4ð �<ÒÐÑùò 7s   Á!D9c                  ó.  — t        j                  dt        dk  ft        t        dk  fd«      } t        | «      }|j                  j
                  t        j                  k(  sJ ‚t        j                  t        dk  dt        j                  t        dk  t        d«      «      }t        ||«      sJ ‚t        j                  t        t        dk  f«      } t        | «      }t        j                  t        dk  t        t        j                  «      }t        ||«      sJ ‚t        j                  dt        j                  t        dkD  t        dk  «      ft        t        j                  t        dkD  t        dk  «      f«      } t        | «      }t        j                  t        j                  t        dkD  t        dk  «      dt        j                  t        j                  t        dkD  t        dk  «      t        t        j                  «      «      }t        ||«      sJ ‚y )Nr   r‘   )r    Tr    )r‹   Ú	Piecewiser   r%   rƒ   r„   r�   Úswitchr_   rP   rK   ÚnanÚAndÚOrÚand_Úor_)r"   Úresultr•   s      r$   Útest_Piecewiser}  K  sq  € ä�<‰<˜œA˜a™C˜¤1¤a¨¡c (¨IÓ6€DÜ˜$Ó€FØ�<‰<�?‰?œcŸj™jÒ(Ð(Ð(ä�z‰zœ"˜Q™$ ¤3§:¡:¬b°©d´B¸Ó#:Ó;€HÜ�˜Ô!Ð!Ð!ä�<‰<œœA ™E˜
Ó#€DÜ˜$Ó€FÜ�z‰zœ"˜q™&¤"¤b§f¡fÓ-€HÜ�˜Ô!Ð!Ð!ä�<‰<˜œBŸF™F¤1 Q¡3¬¨!©Ó,Ð-Ü	
ŒB�E‰E”!�A‘#”q˜‘s‹OÐó€Dä˜$Ó€FÜ�z‰zœ#Ÿ(™(¤2 a¡4¬¨1©Ó-¨qÜ�
‰
”3—7‘7œ2˜a™4¤ A¡Ó&¬¬B¯F©FÓ3ó5€Hä�˜Ô!Ð!Ñ!r7   c                  ó
  — t        t        t        j                  t        t
        «      «      t        j                  t        t        «      «      sJ ‚t        t        t        t
        kD  «      t        t        kD  «      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 ‚y r‚   )
rP   r%   r‹   ÚEqr   r   r�   Úeqr_   r`   rh   r7   r$   Útest_Relationalsr�  a  sŸ   € Ü”œRŸU™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Ô/Ð/Ñ/r7   c                  óð  — t         dt        di} t        «       5  t        t         | ¬«      t        t        | ¬«      }}d d d «       ddlm} ddlm} ddlm} t        «       5  t        t        t         |t         «      z  | ¬«      j                  «       z  «      sJ ‚t        t        dt         z  «      | |d«       |d	«       |dd
«      z  z   z  «      sJ ‚	 d d d «       y # 1 sw Y   Œ¥xY w# 1 sw Y   y xY w)NÚ
complex128rž   r   )Ú	conjugate)Úas_tensor_variable)Úcomplexy      ð?       @rá   râ   r    )r   r   r   r   Ú$sympy.functions.elementary.complexesr„  Úaesara.tensorr…  r†  rP   Úconj)rŸ   r_   r`   r„  ÚatvÚcplxs         r$   Útest_complexfunctionsrŒ  j  sº   € Ü�œa Ð-€FÜ	Õ	!ÜœQ vÔ.´¼AÀfÔ0MˆBˆ÷ 
"å>Ý7Ý-Ü	Õ	!Ü”K¤¡)¬A£,¡°vÔ>ÀÀBÇGÁGÃIÁÔOÐOÐOÜ”K ¤q¡Ó)¨2©s°3«x¹¸C»ÁÀaÈÃÑ8JÑ/JÑ+KÔLÐLÑL÷ 
"Ð	!÷ 
"Ð	!ú÷
 
"Ð	!ús   ™#C Á A6C,Ã C)Ã,C5c                  ót   — t        «       5  t        g dg«      } d d d «         «       dk(  sJ ‚y # 1 sw Y   ŒxY w)Ny      ð?      ð?)r   r   )Útfs    r$   Útest_constantfunctionsr�  v  s2   € Ü	Õ	!Ü˜R  Ó'ˆ÷ 
"á‹4�Š:Ð‰:÷ 
"Ð	!ús   ‹.®7)hÚ__doc__ÚloggingÚsympy.externalr   Úsympy.testing.pytestr   r   r   Úsympy.utilities.exceptionsr   Ú	getLoggerÚaesaraloggerÚsetLevelÚCRITICALr   ÚWARNINGrð   rK   r…   r�   Úaesara.scalar.basicr	   Úaesara.graph.basicr
   Úaesara.tensor.varr   Úaesara.tensor.elemwiser   r   Úaesara.tensor.mathr   r\  r   rã   r_   r`   ra   rb   rd   rf   ÚdisabledÚsympyr‹   Úsympy.core.singletonr   Ú	sympy.abcr   r   r   r   r   r   r   r"  rc   re   rg   rô   r~   r%   r)   r6   rA   rP   ri   rq   rt   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&  r9  rM  rU  rY  r`  rh  rk  rs  r}  r�  rŒ  r�  )r   r¾   s   00r$   Ú<module>r£     sJ  ðñó å (ß EÑ Eå 6ð !ˆw× Ñ Ð!8Ó9€Ø × Ñ �g×&Ñ&Ô 'Ù	�xÓ	 €Ø × Ñ �g—o‘oÔ &ñ 
ÛØ
�-‰-€CÝ.Ý+Ý0ß;Ý&å5á9>Ó?¹°�#—*‘*˜T 8Õ,¸Ñ?�J€BˆˆBÙHMÓNÉÀ1�#—*‘*˜X ~¸A�*Õ>ÈÑN�J€Bˆ‰Bð €Hã Ý "ß  Ó  ÷ñ ñ .3Ó
3©U¨ˆ2�?‰?˜1˜a Õ#¨UÑ
3�€€1€að €k€b‡k�k�#Ó�qÓ€ò+ò:ò4ò$ò"-ò`
%ò	ò.ð ñ4ó ð4òò.ò
6ò ò
\òOò)ò$,ò>ò=ò
9ò,ò)ò8òò
ò
=ò
>òLòAò")+òVGòTò$:ò.Að ñCó ðCò2-ò3ò.$ò$5ò0	0ò ò0"ò,0ò	Móùòg @ùÚNùò 4s   Â)G!ÃG&ÄG+