
    sgR                        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
j                  ej                          ed      Ze
j                  ej                         erd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jA                  | 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.m/Z/m0Z0 ddlm1Z1m2Z2m3Z3 dD cg c]  } e)jh                  |dd       c}\  Z5Z6Z7  e)jp                  d      e0      Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d  ZAed!        ZBd" ZCd# ZDd$ ZEd% ZFd& ZGd' ZHd( ZId) ZJd* ZKd+ ZLd, ZMd- ZNd. ZOd/ ZPd0 ZQd1 ZRd2 ZSd3 ZTd4 ZUd5 ZVd6 ZWd7 ZXd8 ZYd9 ZZd: Z[ed;        Z\d< Z]d= Z^d> Z_d? Z`d@ ZadA ZbdB ZcdC ZddD ZedE Zfy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)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        | fi |S )zB Wrapper for aesara_code that uses a new, empty cache by default. cache)
setdefaultr   )exprkwargss     W/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_aesaracode.pyaesara_code_r$   8   s"    
gr"t&v&&    c                 @    |j                  di        t        | |fi |S )zF Wrapper for aesara_function that uses a new, empty cache by default. r   )r    r   )inputsoutputsr"   s      r#   aesara_function_r)   =   s$    
gr"675f55r%   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   C   so     L%()D
v||!!..t4
5C""((d3IC<<??((d33r%   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_simplifyr@   U   sC     >>**,66x@D\\^FNN6"Mr%   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)rD   rE   numeric_typesa_is_numb_is_numa_is_seqb_is_seqastrbstrargnameargvalargstrs               r#   rO   rO   f   s2    %+M!]+H!]+H 8XAv !eT]+H!eT]+H8X$q'T!W*<CaL!T#dA,%777 ??%%ae%4D??%%ae%4D &)!TNS!TN#C R< GT&\3  4<r%   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)rO   xtr$   r   ytr   ztr   XtXYtYZtZ r%   r#   test_example_symbolsrh      s|    
 LO$$$LO$$$LO$$$LO$$$LO$$$LO$$$r%   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. rg   FbroadcastablesN)r$   r   rL   r	   broadcastabler   )xxxx2s     r#   test_Symbolrp      s    	aBb(###r!!!77aff
q!X
7C(((88qvvr%   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$   rb   rL   r
   rm   )XXs    r#   test_MatrixSymbolrs      s/    	aBb.)))~---r%   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. )rg   rj   TTFFT)TTrk   N)r   
ValueErrorr$   rb   )bcsbcs     r#   test_MatrixSymbol_wrong_dimsr{      sI     OC 4J 	4Ar73	4 	44	4 	4s	   <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. rg   f_tN)r$   r}   rL   r
   rm   r   )ftts    r#   test_AppliedUndefr      sB    
s
Cc>***"""88ur%   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    q5DD::==FMM-----r%   c                     t        t        t        j                  t                    t
        j                  t                    sJ t        t        t        j                  t                    t
        j                  t                    sJ y r   )rO   r$   sysinr   aetr^   tanrg   r%   r#   	test_trigr      sL    RVVAY'555RVVAY'555r%   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_   r`   rO   )r!   r   expecteds      r#   	test_manyr      s|    66!Q$"#bffQqSk1DDwwr1uswwr{*+cggadm;Hhr%   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   rN   dtyper   )r   s    r#   
test_dtyper      s    J FAq%j166<<EEEF 1h-055;;?UUUU Aq)n5::@@IMMMAq)Q	&BCHHNNR[[[[r%   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. )rg   rj   ru   r   rv   rk   N)r   r}   r$   rm   )srz   s     r#   test_broadcastablesr      sI     X OH 	OB1b':HHBNNN	OOr%   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. )rg   rg   rg   )rj   rj   rj   )ru   rj   rj   )rw   r   r   )rv   r   r   rk   N)r   r   r$   rm   )r!   casesbc1bc2bc3r   s         r#   test_broadcastingr      se     q5D 	&%77E  )S#D!S!S1AB!!S((()r%   c                      t         t        z  t        z  } t        |       }t	        |j
                  j                  t              sJ t        |t        j                  t              j                  t                    sJ y r   )rb   rd   rf   r$   rL   r   r   r   rO   ra   dotrc   re   )r!   expr_ts     r#   test_MatMulr      sR    Q3q5D$Fflloos+++r
r*+++r%   c                  ~    t        t        t        j                        j                  j
                  t              sJ y r   )rL   r$   rb   Tr   r   r   rg   r%   r#   test_Transposer     s'    l133'--00*===r%   c                      t         t        z   t        z   } t        t	        |       j
                  j                  t              sJ y r   )rb   rd   rf   rL   r$   r   r   r   r!   s    r#   test_MatAddr     s0    Q3q5Dl4(..118<<<r%   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   )rO   r$   r   Integerr   r   Halfrg   r%   r#   test_Rationalsr     sK    RZZ]Q./Q1BCCCQVV$k!Q&7888r%   c                  J    t        t        j                  d            dk(  sJ y )Nr   )r$   r   r   rg   r%   r#   test_Integersr     s    

1&!+++r%   c                  n    t        j                  d      } t        t        j                  |             sJ y )Nn)r   Symbolr$   	factorial)r   s    r#   test_factorialr     s%    
		#AQ(((r%   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   )r@   r6   r   s    r#   <lambda>z!test_Derivative.<locals>.<lambda>  s    OIdO< r%   Fevaluate)r   UserWarningrO   r$   r   
Derivativer   r   r   gradr   r^   )simps    r#   test_Derivativer     sr    		% 8<DbmmBFF1Iq5&QRSSWWR["568 	8 88 8 8s   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7a<<r%   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!WFB7N78O8r%   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   rJ   linalgnormasarrayarangeastype)r   rn   yys      r#   test_aesara_function_numpyr   *  s    !Q!A#A!"Iq) <	>A99>>!QFQF+bjj!Q.@@ADHHH!Q!A#9a/K	 A	1		Y	'B	
299Q<y)	)B99>>!B)a		!n45<<<r%   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   rJ   arrayr)   testingassert_allcloserL   rN   )mr   r   s      r#   test_aesara_function_matrixr   7  s   
		Aq6Aq1uqy>*+Axx#sc?%;<=H!QQC(AJJqc3/:!QQC5AJJqc3/:!QQF+AaS#&R111JJqc3/2H=JJqc3/2H=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 y )	Nr   )r   r   r   )dimsrw   rj   rk   )r   r   r   rg   r%   r#   test_dim_handlingr   C  st    #>'::::AaAq\2q-78.7J J J JQM:q(m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
                  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   )rJ   r   rn   r   zzs        r#   test_aesara_function_kwargsr   I  s8    !QQqSEq(y!Y9=	?A99>>!QFQFQF3jbjj!Q6HHIDPPP!QQqSE !9aAyIx	9A 
1		Y	'B	
9299Q<y)	)B	
9299Q<y)	)B99>>!BB-!IBIIaL.89D@@@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 |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   rw   )r   r   r   )aesara.compile.function.typesr   r   r   rb   rd   r)   rL   r   input_storagerJ   onesrN   rm   r+   lenziprK   ndarrayndim)r   argsr'   r(   in_dimsout_dimsr   r   irz   	in_values
out_valuesdvalues                 r#   test_aesara_function_scalarr  Z  s   6 Q!a%$$
Q!a%$$
Q!a%1aA,,
Q!a%Q1v.
Q1Aq1u~taV4D /3 +*(# 	+F wvNA a//:::
 **88 !&&2F2FGBbaGHI  IJj$/(\
 x=C
O333*5 	+5a1f%eRYY777 &eRZZ888 ::?*?	+%	++ 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   rg   r%   r#   r   z0test_aesara_function_bad_kwarg.<locals>.<lambda>  s    /acU1E r%   N)r   	Exceptionrg   r%   r#   test_aesara_function_bad_kwargr    s    
 9EFr%   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)getattrrO   )s1s2attra1a2s        r#   
theq_sliceztest_slice.<locals>.theq_slice  sO    - 	DT"BT"BzRZ
bj "b\	 r%   r   r   )r$   slicer   r   r^   r_   )r  r   s     r#   
test_slicer    s    aA'5Aq>999	 !W%Fl5A;v>b"NNNl5Aq>&A5BPQ?SSSr%   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integerrb   r   r   r   r   r   r   r   r   r   c              3   j   K   | ]*  }j                   j                  |   j                  |k(   , y wr   )r   r'   data).0r   rc   s     r#   	<genexpr>z#test_MatrixSlice.<locals>.<genexpr>  s)     Arxxq!&&!+As   03   kr   r   )r   r   MatrixSymbolr$   r   rM   r   r   idx_listr  r'   allrange)
r   r   rb   rd   r   r   r  r  r  rc   s
            @r#   test_MatrixSlicer%    s   E
		#t$A
Q"A	!Aa%1Q,A	au	%B7A%%&5Aq>5Aq>*JJJJ88??1au!==== AU1a[AAAA
		#AAw<(1a4E	%T/A	aGQ 8	9Br%   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   )rO   )r  solutionBlockts     r#   r  z#test_BlockMatrix.<locals>.<genexpr>  s     @(tFH%@s   )	r   r   r!  r,   r$   BlockMatrixr   joinany)r   r   ABCDAtBtCtDtBlock	solutionsr*  s               @r#   test_BlockMatrixr8    s    
		#t$A:@A$"//$1-AJAq!Q1a|4NBBNNQFQF+,E% F!SXXaR0#((1b"2EF!SXXaR0#((1b"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.  r/  r   )r   r   r   gh㈵>)rtol)r   r!  Iblockcutsubsdictr   r   r)   block_collapserJ   randomrandshaper   r   reshapeeyer   allclose)r   r   r   r.  r/  r'   outputcutsizesr   	cutinputs	cutoutputr   r   fblockedr   ninputss                   r#   "test_BlockMatrix_Inverse_executionrL    s   DAqE
Q"A
Q"ATFSSUFQT1a4L1a4A,/QT1a4L1a4A,/1H7=>!Q-!->I>DVY!789I#fugc&k123F&&CA):):9)E(F'-R9H @FF!ryy~~qww'..u5FGFyy1~%%agg.55e<vvay&(GAJ"''!''"4''J;;q'{Hg$6T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.basicrN  r   r   r   ImmutableMatrixr   r   r$   rL   r
   r   r   )rN  r   
MatrixTyperb   tXs        r#   test_DenseMatrixrT    s    (
		'Ayy""4"45 -
RVVAYJ/"&&)RVVAY1GHI!_"n---"((++t,,,	-r%   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   rb   r   r   r  N)	r   r   r   rb   r!  rB  r}   r   r$   )pairsr  r  r   sts        r#   test_cache_basicrX    s    
 
BIIcN	
BOOC*!''*+	bkk#ryy~./E  3B"E* Be,222 Bb)333 Be,2223r%   c                      ddl m}  t        |       }	 | j                          t        t
        t        fD ]  }t        |      }t        |      |u rJ  	 | j                  |       y# | j                  |       w xY w)z Test use of the global cache. r   )global_cacheN)	sympy.printing.aesaracoderZ  r>  clearr   rb   r}   r   update)rZ  backupr   rW  s       r#   test_global_cacher_    so    6,F
$Q 	(AQBq>R'''	( 	F#F#s   <A& A& &A9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        ||      |u rJ  y)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   )symbolsr   printedr   rW  s        r#   test_cache_types_distinctrg    s     yy1!=sCGEG !5)))))
 s3r7>>+,-.#g,>>>  121E*b0001r%   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$   rO   r^   r   s     r#   test_symbols_are_created_oncerj  $  sP    
 66!Q'DDb2gD"|A.////r%   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$   rb  r   r-   r.   	ancestorsr   rL   Constantr   )r!   r   symbol_namesr   seenvs         r#   test_cache_complexrr  /  s    
 6Q]bffQQY&777D$($5$56qAFF6L6$F 5D\\))6(3 77?:a1C1C1L1L#M66\)))66%%%HHQVV < 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^   rO   rJ   nanAndOrand_or_)r!   resultr   s      r#   test_Piecewiser|  G  sq   <<AaC1ac(I6D$F<<??cjj(((zz"Q$3::bdB#:;H!!!<<AE
#D$Fzz"q&"bff-H!!!<<BFF1Q3!,-	
BEE!A#qsOD$Fzz#((2a41-q

3772a4A&BFF35H!!!r%   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   )
rO   r$   r   Eqr   r   r   eqr^   r_   rg   r%   r#   test_Relationalsr  ]  s    RUU1a[)366"b>:::QU#R"W---QU#R"W---Q!V$bBh///Q!V$bBh///r%   c            
      r   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  |       ||j                         z        sJ t        t        dt         z        | |d       |d	       |dd
      z  z   z        sJ y )N
complex128r   r   )	conjugate)as_tensor_variable)complexy      ?       @r   r   r   )
r   r   r   $sympy.functions.elementary.complexesr  aesara.tensorr  r  rO   conj)r   r^   r_   r  atvcplxs         r#   test_complexfunctionsr  f  s    a-F6*K&,IB>7-AilN6:B	NKKKT1H%r3s8CHT!AY4F+F'GHHHr%   c                  6    t        g dg      }  |        dk(  sJ y )Ny      ?      ?)r   )tfs    r#   test_constantfunctionsr  p  s    	TF	#B4::r%   )g__doc__loggingsympy.externalr   sympy.testing.pytestr   r   sympy.utilities.exceptionsr   	getLoggeraesaraloggersetLevelCRITICALr   WARNINGr   rJ   r   r   aesara.scalar.basicr   aesara.graph.basicr	   aesara.tensor.varr
   aesara.tensor.elemwiser   r   aesara.tensor.mathr   r[  r   r   r^   r_   r`   ra   rc   re   disabledsympyr   sympy.core.singletonr   	sympy.abcr   r   r   r   r   r   r   r!  rb   rd   rf   r   r}   r$   r)   r6   r@   rO   rh   rp   rs   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%  r8  rL  rT  rX  r_  rg  rj  rr  r|  r  r  r  )r   r   s   00r#   <module>r     s=    ( - 6 !w  !89   g&& '	x	    goo & 

--C.+0;&59>?#**T8,?JBBHMN1#**X~A*>NJBB H  "      .3
3?2??1a#
31a kbkk#q'
64$"-`
%	. 4 4.
6 
\O)$,>=
9,)8

=
>LA")+VGT$:.A C C2-3.$"1.	0 0",0I[ @N 4s   'G G%G*