
    RieI3                       d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZ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lm Z m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW d dlXmYZY d dlZm[Z[m\Z\ d dl]m^Z^ d dl_m`Z`maZambZb d dlcmdZdmeZe d dlfmgZgmhZhmiZimjZjmkZkmlZlmmZm d dlnmoZo d dlpmqZq d dlrmsZs d dltmuZu d d lvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~ eCeDeAeBfZd! Zd" Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Zdi Zdj Zdk Zdl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d Zd Zd Zd Zd Zd Zehd             Zd Zd Zd Zd Zd Zd Zeiehd                         Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!dÄ Z"dĄ Z#dń Z$dƄ Z%dǄ Z&dȄ Z'dɄ Z(dʄ Z)d˄ Z*d̄ Z+d̈́ Z,d΄ Z-dτ Z.dЄ Z/dф Z0d҄ Z1 ekdӦ          dԄ             Z2dՄ Z3dS )    N)Hashable)Add)Functiondiffexpand)EFloatIIntegerRationalnanoopi)Pow)S)Symbolsymbols)sympify)Abs)explog)MaxMinsqrt)cossintan)	integrate)PolyPurePoly)sstr)	FiniteSet)signsimpsimplify)trigsimp)
ShapeErrorMatrixErrorNonSquareMatrixErrorDeferredVector_find_reasonable_pivot_naive	_simplify)GramSchmidtImmutableMatrixImmutableSparseMatrixMatrixSparseMatrix
casoratiandiageyehessianmatrix_multiply_elementwiseones
randMatrix	rot_axis1	rot_axis2	rot_axis3	wronskianzerosMutableDenseMatrixImmutableDenseMatrixMatrixSymboldotprodsimprot_ccw_axis1rot_ccw_axis2rot_ccw_axis3)_dotprodsimp_state)TupleWild)KroneckerDelta)flattencaptureiterable)ignore_warningsSymPyDeprecationWarning)raisesXFAILslowskipskip_under_pyodidewarns_deprecated_sympywarnsQ)Array)MatPow)
Quaternion)abcdxyztc                  *   t          t                    D ]\  } }|                    dd          }|j        dk    rt	          d |j        D                       sJ |j        dk    rt          |j                  t          u sJ |j        dk    rt          |j                  t          u sJ | dz  s8t          |	                                          t          t          t          fv sJ t          |                                          t          u sJ d S )N      )rb   rc   c              3   B   K   | ]}t          |          t          u V  d S N)typeint.0is     Blib/python3.11/site-packages/sympy/matrices/tests/test_matrices.py	<genexpr>ztest_args.<locals>.<genexpr>6   s,      (I(IAaC(I(I(I(I(I(I    )	enumerateclassesr<   shapeallrowsrf   rg   colsflatlisttuplerE   todokdict)nclsms      rk   	test_argsr|   2   s   G$$ 	+ 	+3IIaOOw&  S(I(I(I(I(I%I%I   v{{tAF||s2222v{{tAF||s22221u 	+>>dE5%999999		??d*****	+ 	+rm   c                     t           t          fD ]_} |                     dd          }t                      5  |j        }d d d            n# 1 swxY w Y   ||                                k    sJ `t          t          fD ]_} |                     dd          }t                      5  |j        }d d d            n# 1 swxY w Y   ||	                                k    sJ `d S Nrb   rc   )
r/   r-   r<   rR   _matrt   r0   r.   _smatrw   )rz   r{   matsmats       rk   test_deprecated_mat_smatr   ?   sZ   &  IIaOO#%% 	 	&C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	affhh22 ! !IIaOO#%% 	 	7D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	qwwyy     	! !s#   A		A	A	#B77B;	>B;	c                      t          ddt          t          g          } | t          z  t          ddt          t          z  t          t          z  g          k    sJ d S N   rc   )r/   r]   r^   r_   )vs    rk   test_divisionr   L   sJ    q!aVAQ3&A!QqSz********rm   c            	          t          g dt          t          t          gdt          z  dt          t          z  gg             z   t          g ddt          z  dt          z  dt          z  gdt          z  ddt          z  t          z  gg          k    sJ t          ddddg          t	          t
           fd           d S )	Nr   rc   rb   rc   i)rc         r   ir   c                       z   S re    r{   ry   s   rk   <lambda>ztest_sum.<locals>.<lambda>U   s    q1u rm   )r/   r]   r^   r_   rM   r&   r   s   @@rk   test_sumr   Q   s    			Aq!9qsC1o677Aq5FIII!QqS!A#1dAaCE8JKLLLLLLq!aVA
:}}}}}%%%%%rm   c                      t          dddt          g          } t          dddt          t                    g          }t          |           |k    sJ d S )Nr   rc   rb   )r/   r]   r   absr   s     rk   test_absr   W   sI    q!b!WAq!aQ[!!Aq66Q;;;;;;rm   c                      t          d          } t          d          }| |z    | j        |          cxk    rt          ddgddgg          k    sn J d S )N)r   rc   rb   r   r   )rb   r   rc   r   r   r   )r/   addrY   rZ   s     rk   test_additionr   \   s|      	 	A
 	  	 	A
 q5EAE!HH8888AA'7 8 888888888rm   c            
         t           t          fD ]}  | ddt          d                    }||d d d d f         k    sJ |dd d f         t          ddg d          k    sJ |d d df         t          g d          k    sJ |ddgd d f         t          g dg dg          k    sJ |ddgdf         |ddgdgf         k    sJ |dddgf         |dgddgf         k    sJ |d d ddgf         t          ddgdd	gd
dgg          k    sJ |d         dk    sJ |ddd d f         t          g dg dg          k    sJ |d d ddf         t          ddgdd	gd
dgg          k    sJ |d d ddf         |ddgdf         k    sJ |dd d df         |dddgf         k    sJ  | ddt          d                    }|g dd d f         t          g dg dg dg dg dg          k    sJ |d d g df         t          g dg dg dg          k    sJ t          j        d          }d|d<   d|d<   d	|d<    |j        ddgdg          t          dgdgg          k    sJ  |j        ddgg d          t          g dg dg          k    sJ  |j        g dg d          t          g dg dg dg dg          k    sJ d S )Nrb   	   r   rb   r      )r   r      r   r   r   rc   rc   r   r   r   r   r   )r   rc   r   rc   r   )r   r      )rb   r   r   r   r   )r   r   r   r   r   r   r   r   rc   r   )rc   rc   rc   r   r   r   )r   r   r   rc   )rc   r   r   r   rc   r   r   r   )r   r   rb   r   )r   r   r   r   )r/   r0   ranger<   extract)MrY   s     rk   test_fancy_index_matrixr   j   s5   l#  AaE!HHAaaadG||||AAAw&Ayyy111111Aw&++++++!Q|vyyy)))&<======!Q|q!Q!~----QF|q!q!f~----QF|v1v1v1v&>??????w!||||1aaayFIIIyyy#9::::::AaCyFQFQFQF#;<<<<<<1ayAq!faiL((((CCaCyAa!QiL((((AaE!HH!!!#$IIIIIIIIII0 ) )     KKK FOOOOOO, % %     
 	1AAdGAdGAdG19aVaS!!VCC-	 &
 &
 
 
 
 
 19aVYYY''6IIII3 , ,     19\\\<<<00F	< 5 5      rm   c                     t          d          t          d          z  } | d         dk    sJ | d         dk    sJ | d         dk    sJ | d	         dk    sJ | d
         dk    sJ | d         dk    sJ 	 t          d           | d         dk    sJ | d         dk    sJ | d         dk    sJ | d	         dk    sJ | d
         dk    sJ | d         dk    sJ n# t          $ r Y nw xY wt          |           }| j        |           k    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ |d	         dk    sJ |d
         dk    sJ |d         dk    sJ t          t          fd           t          d          z  } t          | t                     sJ | d         t          k    sJ | d         dt          z  k    sJ | d         dt          z  k    sJ | d	         dk    sJ t          z  }| |k    sJ dz  } t          | t                     sJ | d         dk    sJ | d         dk    sJ | d         dk    sJ | d	         dk    sJ 	 t          d           t          | t                     sJ | d         dk    sJ | d         dk    sJ | d         dk    sJ | d	         dk    sJ n# t          $ r Y nw xY wt          t          dgdt          gg          }|dz  |k    sJ t          t          t          gddgg          }|dz  t          t          t          gt          t          gg          k    sJ d S )N)r   r   r   r   r   r   r   r   rc   r   r   r   r   r   r      rc   r   r   z	c = a @ br   c                  $    t                     S re   )r5   r   s   rk   r   z%test_multiplication.<locals>.<lambda>   s    :1a@@ rm   r]   rb   r   
      z	c = 5 @ b)r/   evalSyntaxErrorr5   multiply_elementwiserM   r&   r   
isinstancer]   r   r   )r[   hc2r   rY   rZ   s       @@rk   test_multiplicationr      s     	 	A 	  	 	A
 	
!AT7a<<<<T7a<<<<T7a<<<<T7a<<<<T7b====T7a<<<<
[ w!||||w!||||w!||||w!||||w"}}}}w!|||||     	$Aq))A&&q))))))T7a<<<<T7a<<<<T7b====T7a<<<<T7a<<<<T7a<<<<
:@@@@@AAA	F3KKAa     T7a<<<<T7ac>>>>T7ac>>>>T7a<<<<	
QB7777	AAa     T7a<<<<T7c>>>>T7c>>>>T7a<<<<	[ !V$$$$$w!||||w#~~~~w#~~~~w!|||||     	Q!R!""A6Q;;;;R1a&!""A6Vc3Z#s455555555s$   ;C 
C,+C,J> >
K
Kc                  (   t          t          d            t          } t          ddgddgg          dz  d d           | d          dz   | d	          dz   | d
          dz   | d          dz  gk    sJ dz  d d          g dk    sJ t          g dg dg dg          dz  d d          g dk    sJ dz  t	          d          k    sJ dz  k    sJ t          dgg          dz  d         ddz  k    sJ t	          d          dz  t	          d          k    sJ t          ddgddgg          t          d          z  t          ddgddgg          k    sJ t          ddgddgg          t          j        z  d d          g dk    sJ t          ddgddgg          t          j        z  dz  k    sJ t          ddgddgg          t          j        z  t          ddgt          j        dgg          k    sJ t          ddgddgg          d z  t          ddgd dgg          k    sJ dd!lm	 t          dt          gddgg          z  t          dt          z  gddgg          k    sJ t          t          t          gdt          gg          z  t          t          z  t          t          dz
  z  z  z  gdt          z  gg          k    sJ t          t          z  t          dz
  z  z  t          z  dz  z  t          z  z  z
  dt          dz  z  z  gdt          z  t          dz
  z  z  gddt          z  gg          sJ t          t          ddgdt          dgddt          gg          z  t          t          z  t          dz
  z  z  dgdt          z  dgddt          z  gg          k    sJ t          ddgddgg                              t          d                                        d          k    sJ t          dgg          dz  t          d"gg          cxk    r@                    t          d                    cxk    r                    d          k    sn J t          g d#g d$g d%g d&g d'g          t          t          fd(           t          t          d)            t          g d*g d+g d,g          d-z  t          g d,g d,g d,g          k    sJ t          t          fd.           t          t          fd/           t          ddgddgg          d-z  t          d0d1gd2d3gg          k    sJ t          g d+g d+g d+g          d-z  t          g d+g d+g d+g          k    sJ t          g d*g d+g d+g          d-z  t          g d+g d+g d+g          k    sJ t!          d4d56          t#          z  t$                    sJ t!          d4d5d57          t          t          fd8           t!          d4d5d59          z  t          t'          d          t'          d          t'          d           t'          d          z
  dz   gdt'          d          dt'          d          z
  gg d+g          k    sJ dz   z  t          g d+g d+g d+g          k    sJ t          t          fd:           t          g d+g d;g d<g          d=z  t          g d>g d?g d@g          k    sJ d=z  dz  k    sJ t          g d*g dAg d,g          t!          d4          z                      d                                          dz  k    sJ t          t          fdB           z  dz  z  k    sJ t          g d,g d,g d,g          t!          d4d5d5C          z  k    sJ t!          d4d5d59          z  t-          dz  dz  dz            k    sJ z                      d          t	          d          k    sJ z                      d          t/          d          k    sJ t          g dDg dEg dFg          dGz  t-          dHdHdH          k    sJ t0          z  t-          dt0          z  dt0          z  dt0          z            k    sJ t          g d*g d+g d+g          t          t          fdI           t          t          fdJ           t          t          j        t          j        gt          j        t          j        gg          t          j        z  k    sJ t          ddgddgg          t          j        z  t          t          j        t          j        gdt          j        z  dt          j        z  gg          k    sJ d S )KNc                  &    t          d          dz  S Nr   rc   r/   r   rm   rk   r   ztest_power.<locals>.<lambda>   s    ): rm   rc   rb   r   r   r   ir      3   i)i  i  i,*  i7  )rc   r   rb   )r   rc   r   )r      r   )	i"  i     i  i  ip  i  i  i  r   r   d   r   i r   r   r      !      0   9   )r   rc   r   r   g      ?ry   i   )rb   r   r   r   r   )r   r   r   r   rb   )r   rb   r   rb   r   )r   r   rb   r   rb   )rb   r   r   rb   r   c                  H                          t          d                    S Nr   )_matrix_pow_by_jordan_blocksr   r{   s   rk   r   ztest_power.<locals>.<lambda>  s     > >quu E E rm   c                  l    t          ddgddgg                              t          d                    S )Nr   rb   )r/   r   r   r   rm   rk   r   ztest_power.<locals>.<lambda>  s3    AA'7 8 8 U UVWX[V\V\ ] ] rm   r   r   r   r   r   r   r         $@c                       dz  S N @r   As   rk   r   ztest_power.<locals>.<lambda>      q#v rm   c                  *     t          dd          z  S r~   r   r   s   rk   r   ztest_power.<locals>.<lambda>      q(1a..0 rm   ihiO<iv0iry   T)integer)r   negativec                       z  S re   r   )r   ry   s   rk   r   ztest_power.<locals>.<lambda>  s    q!t rm   )r   nonnegativec                  *     t          dd          z  S r~   r   r   s   rk   r   ztest_power.<locals>.<lambda>%  r   rm   )rb   r   r   )r   rb   r   g      @)   H   Y   )i#        )i<  i  iI  r   r   r   c                  T                          d                                          S )N)subsdoit)Anry   s   rk   r   ztest_power.<locals>.<lambda>-  s    rwwq"~~2244 rm   )r   positiverc   r   r   )r   rc   r   r   r   rc   r   gd%%@c                       dz  S r   r   r   s   rk   r   ztest_power.<locals>.<lambda><  r   rm   c                       t           z  S re   r
   r   s   rk   r   ztest_power.<locals>.<lambda>=  s    q!t rm   )rM   r(   r   r/   r3   r   r   Half	sympy.abcry   rY   rZ   r   _eval_pow_by_recursionr'   
ValueErrorr   r   rW   rG   r   r   r2   r<   r
   )Rr   r   r{   ry   s    @@@@rk   
test_powerr      s   
!:!:;;;AAA  ArE111:!!D''!)QQsVVAXqquuQw#qAAAAAqD!!!92222222			999jjj122AqD!!!9EEEEEEEa43q66>>>>a419999QC5MMS $'1c61111q668s1vv%%%%Aq6Aq6"##WQZZ/6Ar7RH:M3N3NNNNNR2r(#$$AqvIqqq>\\\))))AQ !!AqvI>QAq6Aq6"##QV+v1v{6K/L/LLLLLAq6Aq6"##S(FQFS!H3E,F,FFFFFAq6Aq6"##Q&&1ac(QF1C*D*DDDDDAq6Aq6"##Q&&1a41qs8A2FAqD	1R*S*SSSSS	
Aq1q5z!|ad1a4i!Q$q&01QT6:;q!ta!a%jl;!ad;= > > > > > Aq!9q!Qi!Q344a76	
Aq1Q3xz1	
AqD!	
Aq!tC < <    
 	AA  A))!A$$//13K3KA3N3NNNNNuAb5FUG9%% % % % %)G)G")N)N % % % %	  $$% % % % % % 	   "3"3"3___oooWfWfWfghhA
;EEEEFFF ;]]^^^			999iii011Ad7fiiiIII>??????
:~~~~&&&
:0000111AA  Ad7fz95	97MNOOOOOO			999iii011Ad7fiiiIII>??????			999iii011Ad7fiiiIII>??????sD!!!AadF#####sD4000A
:|||||$$$sDd333Aa46	1		~a33nQ6J6J5J^\]_`MaMa5ade5ef~a33QQ_`acdQeQeMeffffh i i i i i i q1u:IIIyyy ABBBBBB
:0000111			999iii011Ac6V___oooOPPPPPPc6QT>>>>			***YYY/00AsA	
AB771a==1a4''''
:444445557a!A#h 	())AsD4000Aa419999sDd333Aa441adAqD))))))qD;;q!A&&&&qD;;q!a(((()**Ac6T666222222a44Aq!tQT******			999iii011A
:~~~~&&&
:||||$$$ 1616"2344Aaf9>>>>A1vAaf9!&!&!1AafHah3G HIIIIIIIIrm   c            
         t          dt          z   dt          z
  gdt          z
  dt          z   gg          } t          d          5  |                                                                 t          t          dt          z            t          d          z   dz  t          dt          z             t          d          z   dz  gt          dt          z             t          d          z   dz  t          dt          z            t          d          z   dz  gg          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   Trc   )r/   r]   r@   r   r   r   s    rk   $test_issue_17247_expression_blowup_1r   D  sY   1ac
QqS!A#J'((A	T		 ? ?uuww~~61Q3xx#a&& !#s1Q3xxi#a&&&8!%;<1Q3xxi#a&& !#s1Q3xx#a&&'8!&;<+> $? $? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   C"D55D9<D9c                  (   t          dt          z   dt          z
  gdt          z
  dt          z   gg          } t          d          5  |                                 \  }}||z  |                                z  sJ 	 d d d            d S # 1 swxY w Y   d S Nr   T)r/   r]   r@   jordan_forminvr   PJs      rk   $test_issue_17247_expression_blowup_2r  K  s    1ac
QqS!A#J'((A	T		  }}1s15577{                 s   4BBBc            	      n   t          dt          z   dt          z
  gdt          z
  dt          z   gg          } t          d          5  | dz  t          dt          dz  z  dz   ddt          dz  z  z
  gddt          dz  z  z
  dt          dz  z  dz   gg          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   Tr   l                )r/   r]   r@   r   s    rk   $test_issue_17247_expression_blowup_3r  Q  sf   1ac
QqS!A#J'((A	T		 _ _#v+AsF25SSUs  wU  VW  Y\  V\  w\  V\  ]+.LQPSV.SSUstuwztzUz  ~\  V\  ]!^ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _s   AB**B.1B.c                      t          t          d                    } t          d          5  | dz  t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Na1  [
        [             -3/4,       45/32 - 37*I/16,         1/4 + I/2,      -129/64 - 9*I/64,      1/4 - 5*I/16,      65/128 + 87*I/64],
        [-149/64 + 49*I/32, -177/128 - 1369*I/128,  125/64 + 87*I/64, -2063/256 + 541*I/128,  85/256 - 33*I/16,  805/128 + 2415*I/512],
        [          1/2 - I,         9/4 + 55*I/16,              -3/4,       45/32 - 37*I/16,         1/4 + I/2,      -129/64 - 9*I/64],
        [   -5/8 - 39*I/16,   2473/256 + 137*I/64, -149/64 + 49*I/32, -177/128 - 1369*I/128,  125/64 + 87*I/64, -2063/256 + 541*I/128],
        [            1 + I,         -19/4 + 5*I/4,           1/2 - I,         9/4 + 55*I/16,              -3/4,       45/32 - 37*I/16],
        [         21/8 + I,    -537/64 + 143*I/16,    -5/8 - 39*I/16,   2473/256 + 137*I/64, -149/64 + 49*I/32, -177/128 - 1369*I/128]]Tr   a  [
            [     7369525394972778926719607798014571861/604462909807314587353088 - 229284202061790301477392339912557559*I/151115727451828646838272,   -19704281515163975949388435612632058035/1208925819614629174706176 + 14319858347987648723768698170712102887*I/302231454903657293676544,      -3623281909451783042932142262164941211/604462909807314587353088 - 6039240602494288615094338643452320495*I/604462909807314587353088,    109260497799140408739847239685705357695/2417851639229258349412352 - 7427566006564572463236368211555511431*I/2417851639229258349412352, -16095803767674394244695716092817006641/2417851639229258349412352 + 10336681897356760057393429626719177583*I/1208925819614629174706176,    -42207883340488041844332828574359769743/2417851639229258349412352 - 182332262671671273188016400290188468499*I/4835703278458516698824704],
            [50566491050825573392726324995779608259/1208925819614629174706176 - 90047007594468146222002432884052362145*I/2417851639229258349412352,  74273703462900000967697427843983822011/1208925819614629174706176 + 265947522682943571171988741842776095421*I/1208925819614629174706176, -116900341394390200556829767923360888429/2417851639229258349412352 - 53153263356679268823910621474478756845*I/2417851639229258349412352, 195407378023867871243426523048612490249/1208925819614629174706176 - 1242417915995360200584837585002906728929*I/9671406556917033397649408,   -863597594389821970177319682495878193/302231454903657293676544 + 476936100741548328800725360758734300481*I/9671406556917033397649408, -3154451590535653853562472176601754835575/19342813113834066795298816 - 232909875490506237386836489998407329215*I/2417851639229258349412352],
            [   -1715444997702484578716037230949868543/302231454903657293676544 + 5009695651321306866158517287924120777*I/302231454903657293676544,     -30551582497996879620371947949342101301/604462909807314587353088 - 7632518367986526187139161303331519629*I/151115727451828646838272,           312680739924495153190604170938220575/18889465931478580854784 - 108664334509328818765959789219208459*I/75557863725914323419136,    -14693696966703036206178521686918865509/604462909807314587353088 + 72345386220900843930147151999899692401*I/1208925819614629174706176,  -8218872496728882299722894680635296519/1208925819614629174706176 - 16776782833358893712645864791807664983*I/1208925819614629174706176,      143237839169380078671242929143670635137/2417851639229258349412352 + 2883817094806115974748882735218469447*I/2417851639229258349412352],
            [   3087979417831061365023111800749855987/151115727451828646838272 + 34441942370802869368851419102423997089*I/604462909807314587353088, -148309181940158040917731426845476175667/604462909807314587353088 - 263987151804109387844966835369350904919*I/9671406556917033397649408,   50259518594816377378747711930008883165/1208925819614629174706176 - 95713974916869240305450001443767979653*I/2417851639229258349412352,  153466447023875527996457943521467271119/2417851639229258349412352 + 517285524891117105834922278517084871349*I/2417851639229258349412352,  -29184653615412989036678939366291205575/604462909807314587353088 - 27551322282526322041080173287022121083*I/1208925819614629174706176,   196404220110085511863671393922447671649/1208925819614629174706176 - 1204712019400186021982272049902206202145*I/9671406556917033397649408],
            [     -2632581805949645784625606590600098779/151115727451828646838272 - 589957435912868015140272627522612771*I/37778931862957161709568,     26727850893953715274702844733506310247/302231454903657293676544 - 10825791956782128799168209600694020481*I/302231454903657293676544,      -1036348763702366164044671908440791295/151115727451828646838272 + 3188624571414467767868303105288107375*I/151115727451828646838272,     -36814959939970644875593411585393242449/604462909807314587353088 - 18457555789119782404850043842902832647*I/302231454903657293676544,      12454491297984637815063964572803058647/604462909807314587353088 - 340489532842249733975074349495329171*I/302231454903657293676544,      -19547211751145597258386735573258916681/604462909807314587353088 + 87299583775782199663414539883938008933*I/1208925819614629174706176],
            [  -40281994229560039213253423262678393183/604462909807314587353088 - 2939986850065527327299273003299736641*I/604462909807314587353088, 331940684638052085845743020267462794181/2417851639229258349412352 - 284574901963624403933361315517248458969*I/1208925819614629174706176,      6453843623051745485064693628073010961/302231454903657293676544 + 36062454107479732681350914931391590957*I/604462909807314587353088,  -147665869053634695632880753646441962067/604462909807314587353088 - 305987938660447291246597544085345123927*I/9671406556917033397649408,  107821369195275772166593879711259469423/2417851639229258349412352 - 11645185518211204108659001435013326687*I/302231454903657293676544,     64121228424717666402009446088588091619/1208925819614629174706176 + 265557133337095047883844369272389762133*I/1208925819614629174706176]])r/   r   r@   r   s    rk   $test_issue_17247_expression_blowup_4r	  X  s    8 	q K L L 	M 	MA 
T		 J J"uq "H  I  I J J J J J J JJ J J J J J J J J J J J J J J J J Js   &A  A$'A$c                  J   t          ddd           } t          d          5  |                     d          t          t          dz  ddt
          z  z
  t          dz  z  z   dt
          z  t          dz  z  z   t          d	
          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 (    dd| |z   z  t           z  z   S Nr   r   r   rj   js     rk   r   z6test_issue_17247_expression_blowup_5.<locals>.<lambda>      !rQqSk!m"3 rm   Tr]   r   $   r   EXdomain)r/   r@   charpolyr    r]   r
   r   s    rk   $test_issue_17247_expression_blowup_5r    s    q!3344A	T		 _ _zz#(1a42!8QT/+ABqDAI+MqY]"^"^"^^^^^^_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _s   A(BBBc                      t          ddd t          d          D                       } t          d          5  |                     d          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 "    g | ]}t           |z   S r   r]   rh   s     rk   
<listcomp>z8test_issue_17247_expression_blowup_6.<locals>.<listcomp>      ...aac...rm   @   Tbareissr   r/   r   r@   detr   s    rk   $test_issue_17247_expression_blowup_6r     s    q!..5"::...//A	T		 % %uuY1$$$$$% % % % % % % % % % % % % % % % % %   A""A&)A&c                      t          ddd           } t          d          5  |                     d          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 (    dd| |z   z  t           z  z   S r  r   r  s     rk   r   z6test_issue_17247_expression_blowup_7.<locals>.<lambda>  r  rm   T	berkowitzr   )r/   r@   r  r   s    rk   $test_issue_17247_expression_blowup_7r%    s    q!3344A	T		 ' 'uu[!!Q&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AAAc                      t          ddd t          d          D                       } t          d          5  |                     d          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 "    g | ]}t           |z   S r   r  rh   s     rk   r  z8test_issue_17247_expression_blowup_8.<locals>.<listcomp>  r  rm   r  Tlur   r  r   s    rk   $test_issue_17247_expression_blowup_8r)    s    q!..5"::...//A	T		    uuT{{a                                   r!  c                  *   t          ddd t          d          D                       } t          d          5  |                                 t          g dg dg dg dg dg dg dg dg          dfk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   c                 "    g | ]}t           |z   S r   r  rh   s     rk   r  z8test_issue_17247_expression_blowup_9.<locals>.<listcomp>  r  rm   r  T)r   r   r   r   r   r  r   r   rc   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   )r/   r   r@   rrefr   s    rk   $test_issue_17247_expression_blowup_9r1    s!   q!..5"::...//A	T		 	6 	6vvxxF************************$, - - /56 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   ABBBc                      t          ddd           } t          d          5  |                     dd          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 (    dd| |z   z  t           z  z   S r  r   r  s     rk   r   z7test_issue_17247_expression_blowup_10.<locals>.<lambda>  r  rm   Tr   )r/   r@   cofactorr   s    rk   %test_issue_17247_expression_blowup_10r5    s    q!3344A	T		 % %zz!Q1$$$$$% % % % % % % % % % % % % % % % % %s   AAAc                      t          ddd           } t          d          5  |                                 t          dddgdz            k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 (    dd| |z   z  t           z  z   S r  r   r  s     rk   r   z7test_issue_17247_expression_blowup_11.<locals>.<lambda>  r  rm   Tr   r  )r/   r@   cofactor_matrixr   s    rk   %test_issue_17247_expression_blowup_11r9    s    q!3344A	T		 ; ;  ""fQA3r6&:&::::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   .AA"%A"c                      t          ddd           } t          d          5  |                                 dddt          z  dddik    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 (    dd| |z   z  t           z  z   S r  r   r  s     rk   r   z7test_issue_17247_expression_blowup_12.<locals>.<lambda>  r  rm   Tr   r   r   )r/   r@   	eigenvalsr
   r   s    rk   %test_issue_17247_expression_blowup_12r=    s    q!3344A	T		 5 5{{}}AqsAq! 4444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   )AA Ac            
         t          ddt          z
  t          dz   dt          z
  gdt          z
  t          dz   dt          dz   gddt          z
  t          dz   dt          z
  gdddt          z
  dgg          } |                                 }|d         ddt          g d          gfk    sJ |d         d         t          t          d          t          dz
  z  z
  dz   k    sJ |d         d         dk    sJ |d         d         d                             dd          t          t           t          d          t          dz
  z  z   dz
  t          dz
  z  gdt          z  t          dz  dt          z  z
  dz   z  t          dz   t          t          d          t          dz
  z  z
  dz   z  t          dz  dt          z  z
  dz   z  z   gt           t          d          t          dz
  z  z   dz
  t          dz
  z  gdgg          k    sJ |d         d         t          t          d          t          dz
  z  z   dz   k    sJ |d         d         dk    sJ |d         d         d                             dd          t          t           t          d          t          dz
  z  z
  dz
  t          dz
  z  gdt          z  t          dz  dt          z  z
  dz   z  t          dz   t          t          d          t          dz
  z  z   dz   z  t          dz  dt          z  z
  dz   z  z   gt           t          d          t          dz
  z  z
  dz
  t          dz
  z  gdgg          k    sJ d S )	Nr   r   rc   )r   r   r   r   FT)deepnumerr,  )r/   r]   
eigenvectsr   r   )r   evs     rk   %test_issue_17247_expression_blowup_13rC    s4   Aq1ua!e$	
QA1a!e$Aq1ua!e$A1q5!$	& 	' 	'A 
Ba5QF===11233333a58q477AE?*Q.....a58q====a58A;555"tAwwA

"QU	+,	Aq!taczA~	!a%!d1ggq1uo*=*A!BAqD1Q3JQRN!S	ST"tAwwA

"QU	+,	
	A : :     a58q477AE?*Q.....a58q====a58A;555"tAwwA

"QU	+,	Aq!taczA~	!a%!d1ggq1uo*=*A!BAqD1Q3JQRN!S	ST"tAwwA

"QU	+,	
	A : :      rm   c                  0   t          dddt          z   dt          z
  gdz  dt          z
  dt          z   gdz  z   dz            } t          d          5  |                                 t          t          dz   dt          z
  t          dz   dt          z
  t          dz   dt          z
  t          dz   dt          z
  gddt          z  ddt          z  ddt          z  ddt          z  gg dg dg dg dg dg dg          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r   Tr   r/  )r/   r]   r@   echelon_formr   s    rk   %test_issue_17247_expression_blowup_14rF    s   q!qsAaCjlac1Q3Z\11455A	T		 	G 	G~~6UAE1q5!a%QAq1ua!eDacqAaCQ!A#1!DDDDDDDDDDDDDDDDDDD+F $G $G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   B,DDDc                  *   t          dddt          z   dt          z
  gdz  dt          z
  dt          z   gdz  z   dz            } t          d          5  |                                 t          t          dz   dt          z
  t          dz   dt          z
  t          dz   dt          z
  t          dz   dt          z
  gg          t          ddt          z  ddt          z  ddt          z  ddt          z  gg          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r   Tr   )r/   r]   r@   rowspacer   s    rk   %test_issue_17247_expression_blowup_15rI    s   q!qsAaCjlac1Q3Z\11455A	T		 P Pzz||QAq1ua!eQUAPQESTWXSXZ[^_Z_(`'a b bdjmnpqrspsuvxyz{x{}~  AB  CD  AD  FG  IJ  KL  IL  mM  lN  eO  eO   P  P  P  P  P  PP P P P P P P P P P P P P P P P P Ps   B)DDDc                     t          dddt          z   dt          z
  gdz  dt          z
  dt          z   gdz  z   dz            } t          d          5  |                                 t          t          dz   gdt          z
  gt          dz   gdt          z
  gt          dz   gdt          z
  gt          dz   gdt          z
  gg          t          dt          z
  gt          dz   gdt          z
  gt          dz   gdt          z
  gt          dz   gdt          z
  gt          dz   gg          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r   T)r/   r]   r@   columnspacer   s    rk   %test_issue_17247_expression_blowup_16rL    s2   q!qsAaCjlac1Q3Z\11455A	T		 y y}}6AE7AE7AE7AE7APQE7TUXYTYSZ\]`a\a[bdehidicj*k#l#lntwx{|w|v}  @A  DE  @E  F  HI  LM  HM  GN  PQ  TU  PU  OV  XY  \]  X]  W^  `a  de  `e  _f  hi  lm  hm  gn  pq  tu  pu  ov  vw  ox  ox  #y  y  y  y  y  yy y y y y y y y y y y y y y y y y ys   CD66D:=D:c                  D   t          ddd t          d          D                       } t          d          5  |                                 t          dgdgdgdgdgdgdgdgg          t          dgd	gdgdgdgdgdgdgg          t          d
gdgdgdgdgdgdgdgg          t          dgdgdgdgdgdgdgdgg          t          dgdgdgdgdgdgdgdgg          t          dgdgdgdgdgdgdgdgg          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 "    g | ]}t           |z   S r   r  rh   s     rk   r  z9test_issue_17247_expression_blowup_17.<locals>.<listcomp>  r  rm   r  Tr   r   r   rc   r   rb   r,  r   r-  r   r  r   )r/   r   r@   	nullspacer   s    rk   %test_issue_17247_expression_blowup_17rQ    s   q!..5"::...//A	T		 8 8{{}}QCaS!aS!aS!566QCaS!aS!aS!566QCaS!aS!aS!566QCaS!aS!aS!566QCaS!aS!aS!566QCaS!aS!aS!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   CDDDc                     t          dddt          z   dt          z
  gdz  dt          z
  dt          z   gdz  z   dz            } t          d          5  |                                 rJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   rb   T)r/   r]   r@   is_nilpotentr   s    rk   %test_issue_17247_expression_blowup_18rT    s    q!qsAaCjlac1Q3Z\11455A	T		 $ $>>######$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   A66A:=A:c                      t          t          d                    } t          d          5  |                                 rJ 	 d d d            d S # 1 swxY w Y   d S )Nay  [
        [             -3/4,                     0,         1/4 + I/2,                     0],
        [                0, -177/128 - 1369*I/128,                 0, -2063/256 + 541*I/128],
        [          1/2 - I,                     0,                 0,                     0],
        [                0,                     0,                 0, -177/128 - 1369*I/128]]T)r/   r   r@   is_diagonalizabler   s    rk   %test_issue_17247_expression_blowup_19rW    s    q a b b 	c 	cA
 
T		 ) )&&(((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   AAAc                      t          t          dz   dt          z
  ddgdt          z
  t          dz   dt          dz   gddt          z
  t          dz   dgdddt          dz   gg          } t          d          5  |                                 t          dddt          dz   t          dz
  z  gg dg dg dg          t          g dddt          z  ddgddt          dz   dgdddt          dz   gg          fk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   r   T)r   r   r   r   r   r   r   r   r   r   r   r   r   rc   )r/   r]   r@   diagonalizer   s    rk   %test_issue_17247_expression_blowup_20r\     s   UQU#UQUQU#	
QUQU#	
QU#	% 	& 	&A
 
T		 
& 
&}}6AAA''''''''''	+) $* $*
 """!"!QU"!AE"	$ % %	#& 	& 	& 	& 	& 	&
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
&s   3BDD
Dc                      t          t          d                    } t          d          5  |                     d          t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )N  [
        [             -3/4,       45/32 - 37*I/16,                   0,                     0],
        [-149/64 + 49*I/32, -177/128 - 1369*I/128,                   0, -2063/256 + 541*I/128],
        [                0,         9/4 + 55*I/16, 2473/256 + 137*I/64,                     0],
        [                0,                     0,                   0, -177/128 - 1369*I/128]]TGEmethodv  [
            [-26194832/3470993 - 31733264*I/3470993, 156352/3470993 + 10325632*I/3470993, 0, -7741283181072/3306971225785 + 2999007604624*I/3306971225785],
            [4408224/3470993 - 9675328*I/3470993, -2422272/3470993 + 1523712*I/3470993, 0, -1824666489984/3306971225785 - 1401091949952*I/3306971225785],
            [-26406945676288/22270005630769 + 10245925485056*I/22270005630769, 7453523312640/22270005630769 + 1601616519168*I/22270005630769, 633088/6416033 - 140288*I/6416033, 872209227109521408/21217636514687010905 + 6066405081802389504*I/21217636514687010905],
            [0, 0, 0, -11328/952745 + 87616*I/952745]]r/   r   r@   r  r   s    rk   %test_issue_17247_expression_blowup_21rd        q c d d 	e 	eA
 
T		 < <uuDu!!VA /: -; -; &< &< < < < < << < < < < < < < < < < < < < < < < <   7A11A58A5c                      t          t          d                    } t          d          5  |                     d          t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr^  TLUr`  rb  rc  r   s    rk   %test_issue_17247_expression_blowup_22ri    re  rf  c                      t          t          d                    } t          d          5  |                     d                                          t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr^  TADJr`  rb  )r/   r   r@   r  r   r   s    rk   %test_issue_17247_expression_blowup_23rl  ,  s    q c d d 	e 	eA
 
T		 < <uuEu""))++va 9: 7; 7; 0< 0< < < < < << < < < < < < < < < < < < < < < < <s   A	BB
Bc                      t          t          d                    } t          d          5  |                     d          t	          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr^  TCHr`  rb  r0   r   r@   r  r/   r   s    rk   %test_issue_17247_expression_blowup_24rp  9  s    Q c d d 	e 	eA
 
T		 < <uuDu!!VA /: -; -; &< &< < < < < << < < < < < < < < < < < < < < < < <rf  c                      t          t          d                    } t          d          5  |                     d          t	          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr^  TLDLr`  rb  ro  r   s    rk   %test_issue_17247_expression_blowup_25rs  F  s    Q c d d 	e 	eA
 
T		 < <uuEu""fQ 0: .; .; '< '< < < < < << < < < < < < < < < < < < < < < < <rf  c                      t          t          d                    } t          d          5  |                                 dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Na  [
        [             -3/4,       45/32 - 37*I/16,         1/4 + I/2,      -129/64 - 9*I/64,      1/4 - 5*I/16,      65/128 + 87*I/64,         -9/32 - I/16,      183/256 - 97*I/128],
        [-149/64 + 49*I/32, -177/128 - 1369*I/128,  125/64 + 87*I/64, -2063/256 + 541*I/128,  85/256 - 33*I/16,  805/128 + 2415*I/512, -219/128 + 115*I/256, 6301/4096 - 6609*I/1024],
        [          1/2 - I,         9/4 + 55*I/16,              -3/4,       45/32 - 37*I/16,         1/4 + I/2,      -129/64 - 9*I/64,         1/4 - 5*I/16,        65/128 + 87*I/64],
        [   -5/8 - 39*I/16,   2473/256 + 137*I/64, -149/64 + 49*I/32, -177/128 - 1369*I/128,  125/64 + 87*I/64, -2063/256 + 541*I/128,     85/256 - 33*I/16,    805/128 + 2415*I/512],
        [            1 + I,         -19/4 + 5*I/4,           1/2 - I,         9/4 + 55*I/16,              -3/4,       45/32 - 37*I/16,            1/4 + I/2,        -129/64 - 9*I/64],
        [         21/8 + I,    -537/64 + 143*I/16,    -5/8 - 39*I/16,   2473/256 + 137*I/64, -149/64 + 49*I/32, -177/128 - 1369*I/128,     125/64 + 87*I/64,   -2063/256 + 541*I/128],
        [               -2,         17/4 - 13*I/2,             1 + I,         -19/4 + 5*I/4,           1/2 - I,         9/4 + 55*I/16,                 -3/4,         45/32 - 37*I/16],
        [     1/4 + 13*I/4,    -825/64 - 147*I/32,          21/8 + I,    -537/64 + 143*I/16,    -5/8 - 39*I/16,   2473/256 + 137*I/64,    -149/64 + 49*I/32,   -177/128 - 1369*I/128]]Tr   r/   r   r@   rankr   s    rk   %test_issue_17247_expression_blowup_26rw  S  s    q z { { 	| 	|A 
T		  vvxx1}}}}}                    AAAc            	      <   t          ddt          z
  t          dz   dt          z
  gdt          z
  t          dz   dt          dz   gddt          z
  t          dz   dt          z
  gdddt          z
  dgg          } t          d          5  |                                 \  }}|                                t          t          d                                                    k    sJ |t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   Ta  [
            [    0,  4*x/(x**2 - 2*x + 1), -(-17*x**4 + 12*sqrt(2)*x**4 - 4*sqrt(2)*x**3 + 6*x**3 - 6*x - 4*sqrt(2)*x + 12*sqrt(2) + 17)/(-7*x**4 + 5*sqrt(2)*x**4 - 6*sqrt(2)*x**3 + 8*x**3 - 2*x**2 + 8*x + 6*sqrt(2)*x - 5*sqrt(2) - 7), -(12*sqrt(2)*x**4 + 17*x**4 - 6*x**3 - 4*sqrt(2)*x**3 - 4*sqrt(2)*x + 6*x - 17 + 12*sqrt(2))/(7*x**4 + 5*sqrt(2)*x**4 - 6*sqrt(2)*x**3 - 8*x**3 + 2*x**2 - 8*x + 6*sqrt(2)*x - 5*sqrt(2) + 7)],
            [x - 1, x/(x - 1) + 1/(x - 1),                       (-7*x**3 + 5*sqrt(2)*x**3 - x**2 + sqrt(2)*x**2 - sqrt(2)*x - x - 5*sqrt(2) - 7)/(-3*x**3 + 2*sqrt(2)*x**3 - 2*sqrt(2)*x**2 + 3*x**2 + 2*sqrt(2)*x + 3*x - 3 - 2*sqrt(2)),                       (7*x**3 + 5*sqrt(2)*x**3 + x**2 + sqrt(2)*x**2 - sqrt(2)*x + x - 5*sqrt(2) + 7)/(2*sqrt(2)*x**3 + 3*x**3 - 3*x**2 - 2*sqrt(2)*x**2 - 3*x + 2*sqrt(2)*x - 2*sqrt(2) + 3)],
            [    0,                     1,                                                                                            -(-3*x**2 + 2*sqrt(2)*x**2 + 2*x - 3 - 2*sqrt(2))/(-x**2 + sqrt(2)*x**2 - 2*sqrt(2)*x + 1 + sqrt(2)),                                                                                            -(2*sqrt(2)*x**2 + 3*x**2 - 2*x - 2*sqrt(2) + 3)/(x**2 + sqrt(2)*x**2 - 2*sqrt(2)*x - 1 + sqrt(2))],
            [1 - x,                     0,                                                                                                                                                                                               1,                                                                                                                                                                                             1]]a  [
            [0, 1,                       0,                       0],
            [0, 0,                       0,                       0],
            [0, 0, x - sqrt(2)*(x - 1) + 1,                       0],
            [0, 0,                       0, x + sqrt(2)*(x - 1) + 1]])r/   r]   r@   r   r   r   r  s      rk   %test_issue_17247_expression_blowup_27rz  `  s   Aq1ua!e$	
QA1a!e$Aq1ua!e$A1q5!$	& 	' 	'A
 
T		 K K}}1xxzzVA 'o %p %p q q rx  rx  rz  rz	z z z z
 F1 I J J K K K K K K KK K K K K K K K K K K K K K K K K Ks   B DDDc                      t          t          d                    } t          d          5  |                                 t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr^  Ta  [
            sqrt(14609315/131072 + sqrt(64789115132571/2147483648 - 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3) + 76627253330829751075/(35184372088832*sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))) - 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)))/2 + sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))/2),
            sqrt(14609315/131072 - sqrt(64789115132571/2147483648 - 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3) + 76627253330829751075/(35184372088832*sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))) - 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)))/2 + sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))/2),
            sqrt(14609315/131072 - sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))/2 + sqrt(64789115132571/2147483648 - 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3) - 76627253330829751075/(35184372088832*sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))) - 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)))/2),
            sqrt(14609315/131072 - sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))/2 - sqrt(64789115132571/2147483648 - 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3) - 76627253330829751075/(35184372088832*sqrt(64789115132571/4294967296 + 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)) + 2*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3))) - 3546944054712886603889144627/(110680464442257309696*(25895222463957462655758224991455280215303/633825300114114700748351602688 + sqrt(1213909058710955930446995195883114969038524625997915131236390724543989220134670)*I/22282920707136844948184236032)**(1/3)))/2)])r/   r   r@   singular_valuesr   s    rk   %test_issue_17247_expression_blowup_28r}  s  s    q c d d 	e 	eA
 
T		 d d  ""a )c 'd 'd d d d d dd d d d d d d d d d d d d d d d d ds   (A""A&)A&c                      t          t          d                    } t          d          5  |                                 dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Na	  [
        [1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I,1/4+1/2*I,-129/64-9/64*I,1/4-5/16*I,65/128+87/64*I,-9/32-1/16*I,183/256-97/128*I,3/64+13/64*I,-23/32-59/256*I,15/128-3/32*I,19/256+551/1024*I],
        [21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I,125/64+87/64*I,-2063/256+541/128*I,85/256-33/16*I,805/128+2415/512*I,-219/128+115/256*I,6301/4096-6609/1024*I,119/128+143/128*I,-10879/2048+4343/4096*I,129/256-549/512*I,42533/16384+29103/8192*I],
        [-2,17/4-13/2*I,1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I,1/4+1/2*I,-129/64-9/64*I,1/4-5/16*I,65/128+87/64*I,-9/32-1/16*I,183/256-97/128*I,3/64+13/64*I,-23/32-59/256*I],
        [1/4+13/4*I,-825/64-147/32*I,21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I,125/64+87/64*I,-2063/256+541/128*I,85/256-33/16*I,805/128+2415/512*I,-219/128+115/256*I,6301/4096-6609/1024*I,119/128+143/128*I,-10879/2048+4343/4096*I],
        [-4*I,27/2+6*I,-2,17/4-13/2*I,1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I,1/4+1/2*I,-129/64-9/64*I,1/4-5/16*I,65/128+87/64*I,-9/32-1/16*I,183/256-97/128*I],
        [1/4+5/2*I,-23/8-57/16*I,1/4+13/4*I,-825/64-147/32*I,21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I,125/64+87/64*I,-2063/256+541/128*I,85/256-33/16*I,805/128+2415/512*I,-219/128+115/256*I,6301/4096-6609/1024*I],
        [-4,9-5*I,-4*I,27/2+6*I,-2,17/4-13/2*I,1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I,1/4+1/2*I,-129/64-9/64*I,1/4-5/16*I,65/128+87/64*I],
        [-2*I,119/8+29/4*I,1/4+5/2*I,-23/8-57/16*I,1/4+13/4*I,-825/64-147/32*I,21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I,125/64+87/64*I,-2063/256+541/128*I,85/256-33/16*I,805/128+2415/512*I],
        [0,-6,-4,9-5*I,-4*I,27/2+6*I,-2,17/4-13/2*I,1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I,1/4+1/2*I,-129/64-9/64*I],
        [1,-9/4+3*I,-2*I,119/8+29/4*I,1/4+5/2*I,-23/8-57/16*I,1/4+13/4*I,-825/64-147/32*I,21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I,125/64+87/64*I,-2063/256+541/128*I],
        [0,-4*I,0,-6,-4,9-5*I,-4*I,27/2+6*I,-2,17/4-13/2*I,1+I,-19/4+5/4*I,1/2-I,9/4+55/16*I,-3/4,45/32-37/16*I],
        [0,1/4+1/2*I,1,-9/4+3*I,-2*I,119/8+29/4*I,1/4+5/2*I,-23/8-57/16*I,1/4+13/4*I,-825/64-147/32*I,21/8+I,-537/64+143/16*I,-5/8-39/16*I,2473/256+137/64*I,-149/64+49/32*I,-177/128-1369/128*I]]Tr   ru  r   s    rk   test_issue_16823r    s    q F G G 	H 	HA 
T		  vvxx1}}}}}                 rx  c                     t          g ddt          d          z   dt          d          z   dt          d          z
  t          d           dz
  dddddg	ddt          d          z  z   ddt          d          z  z
  ddt          d          z  z
  ddt          d          z  z   dddddg	d	t          d          z  dz
  dd
t          d          z  z
  dd
t          d          z  z   dd
t          d          z  z   ddddd
g	ddt          d          z  z
  dt          d          z  dz   dt          d          z  dz   ddt          d          z  z
  dddddg	dd
t          d          z  z   dd
t          d          z  z   d	t          d          z  dz
  dd
t          d          z  z
  ddddd
g	d	dt          d          z  z   d	dt          d          z  z
  d	dt          d          z  z
  d	dt          d          z  z   dddddg	dt          d          z
  t          d           dz
  dt          d          z   dt          d          z   dddddg	g          } t          d          5  |                                 t          ddddddddt	          d          dz  g	ddddddddt	          d           dz  g	ddddddddt	          d          dz  g	ddddddddt	          d           dz  g	g dddddddddt	          d           dz  g	g dddddddddt	          d           dz  g	g          dfk    sJ 	 d d d            d S # 1 swxY w Y   d S )N)	r   r   r   r   r   r   r   r   r   r   rc   r   r-  rO  r   r   r   rb   r   r   r   T)	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   r.  )r/   r   r@   r0  r   r   s    rk   test_issue_18531r    s   ###	
T!WWb477lAQK$q''Aq!RAN	aQiaQiaQiaQiQPRTVXYZ	DGGaQtAwwYQtAwwYAd1ggIr2qRTVWX	
QtAwwY$q''	Aqay1}a!DGG)mQQPRTUV	aQiQtAwwY477
QAd1ggIq"bRTVWX	aQiaQiaQiaQiQPRTVXYZ	
T!WWtAwwhlAQKd1ggr1aAN	
 		 		A 
T		 	K 	KvvxxF1aAq!add1f-1aAq!addU1W-1aAq!add1f-1aAq!addU1W-***1aAq!addU1W-***1aAq!addU1W-$/ 0 0 2JK K K K K K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   &CMMMc            	      h   t          t          d            t          t          d            t          t          d            t          t                    5  dt          d          d<   d d d            n# 1 swxY w Y   t                      t          g           cxk    r*t          g g          cxk    rt          ddg           k    sn J t	                      5  t          dgd	gg                                          dgd	ggk    sJ 	 d d d            n# 1 swxY w Y   t	                      5  t          dgd	gg          j                                        dggd	ggk    sJ 	 d d d            n# 1 swxY w Y   t          dgg          } t	                      5  t          j        | d
<   d d d            n# 1 swxY w Y   t          t          dgddgg          }|}|j
        |j        k    sJ |j
        dk    sJ |d d          t          dddgk    sJ t          ddt          dddg          }|}|j
        |j        k    sJ |j
        dk    sJ |d d          t          dddgk    sJ ||k    sJ t          |          |k    sJ t          ddt          dd                    }t          ddt          dd                    }t          ||g          }|j
        dk    sJ |j        dk    sJ |d d          g dk    sJ t          t          d                    t          d          k    sJ t          t          t          d                              t          t          d                    k    sJ t          |           |j                    k    sJ t          t          |                    t          |                                          k    sJ |t          |          usJ t#          dd          t#          dd          dz  gt#          dd          dz  t#          dd          dz  gg}t          |          } | t          g dg dg dg dg dg          k    sJ |                                 |k    sJ t          |d                                          |k    sJ t%          ddd          }t#          d          |g}t          |          t          ddgddg|d
         |d         g|d         |d         gg          k    sJ t	                      5  t          |d                                          d |D             k    sJ 	 d d d            n# 1 swxY w Y   t          t#          d          t#          d          g          t          t#          d          g          k    sJ t          t          d            t          t          d            t          ddgddgg          } t          | dg          }	|	t          ddgddgddgg          k    sJ d S )Nc                  >    t          ddt          d                    S )Nr      )r/   r   r   rm   rk   r   ztest_creation.<locals>.<lambda>  s    vaE"II66 rm   c                  $    t          ddg           S )Nr   r   r   r   rm   rk   r   ztest_creation.<locals>.<lambda>  s    vaR00 rm   c                  ,    t          d          d         S r   r   r   rm   rk   r   ztest_creation.<locals>.<lambda>  s    vf~~a0 rm   r   r   rb   r   r   )rc   r   rc   r   r   	r   rc   rb   r   r   r   r   r   r   r   )r   r   rc   rc   rc   )rb   rb   rb   r   r   Fevaluater   r   r   r   c                     g | ]}|gS r   r   rh   s     rk   r  z!test_creation.<locals>.<listcomp>  s    7I7I7I7I7I7Irm   c                  Z    t          t          d          t          dd          g          S )Nrc   r   rb   r/   r6   r   rm   rk   r   ztest_creation.<locals>.<lambda>  !    vtAwwQ

&;<< rm   c                  Z    t          t          d          t          dd          g          S )Nrc   rb   r   r  r   rm   rk   r   ztest_creation.<locals>.<lambda>  r  rm   )r   r   r   )rM   r   
IndexErrorr/   rR   tolistTr   EmptySetr]   rs   rr   r   r3   r-   as_immutable
as_mutabler6   r?   )
r   rY   r{   rZ   c23c13r[   datr   M2s
             rk   test_creationr    s   
:66777
:00111
:00111	
		  vq               88vbzzEEEEVRD\\EEEEVAq"5E5EEEEEEE		!	! ? ?T{m$$++--A3+>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		!	! C CT{m$$&--//aSED6?BBBBBC C C C C C C C C C C C C C CuA		!	!  *$               	AA  A	A6QV6Q;;;;QQQ4Aq!Q<q!aAq\""A	A6QV6Q;;;;QQQ4Aq!Q<6666!99>>>>
AuQ{{
#
#C
AuQ||
$
$CSzA6Q;;;;6Q;;;;QQQ4.......#a&&>>SVV####?3q662233s1vv7N7NNNNN1!1!11111/!$$%%););)F)F)H)HHHHHF1II1IItAayy{#d1Qiik4!99Q;%?
@CsA       88::#&&&--//36666S!QA77A,C#;;&AAtWagtWag	"      
 
 	!	! J JcE***11337I7IS7I7I7IIIIIIJ J J J J J J J J J J J J J J 477DGG$%%a	):):::::
:<<===
:<<=== 	AA  A	F		B!Q!Q!Q011111111sZ   A66A:=A:0DD!D36E66E:=E: F<<G G *4U++U/2U/c                  b   t          j        dt          dd          t          dd          dz  t          dd          dz  t          dd          dz  t          dd          dz  t          dd          dz  t          dd          dz            t          g dg dg d	g d
g          k    sJ d S )Nrb   rc   r   r   r   r   r   )r   rc   rc   rc   rb   rb   )r   rc   rc   rc   r   r   )r   r   r   r   r   r   )r/   	irregularr6   r   rm   rk   test_irregular_blockr    s    AtAayy$q))A+tAayy{Qq		!T!AYYq[$q))A+tAayy{< <?E	G @ @     rm   c                  8   t           j        t           j        t          t          z  t           j        gt          t          t          t          dz  gt          t           j         t          t          z  dgg} t          |           }|                                | k    sJ d S )Nrc   rb   )	r   Oner   r]   r^   Zeror_   r/   r  )lstr{   s     rk   test_tolistr    sh    E161Q3'!Q1a41qufac1:M
NCsA88::rm   c                  ~   t          dd                                          t          dd          k    sJ t          dd                                          t          t          dd                    k    sJ t          dd                                          t          t          dd                    k    sJ d S Nr   rb   )r<   r  r  r-   r   rm   rk   test_as_mutabler  
  s    A;;!!##uQ{{2222A;;##%%q!)E)EEEEEA;;##%%q!)E)EEEEEEErm   c                     t          d          } | d dd df         t          d          k    sJ | ddddf         t          d          k    sJ t          ddd           }|dd d f         t          ddd          k    sJ |dddf         t          ddd          k    sJ t          g d	g d
g dg dg          }|d d df         t          ddg d          k    sJ |dd d d f         t          g dg dg          k    sJ d S )Nr   rb   rc   r   c                     | |z   S re   r   r  s     rk   r   ztest_slicing.<locals>.<lambda>  
    1q5 rm   r   r   rc   rb   )r   r   rc   rb   )r   r   r   r   )r   r   r      )r         r   r   )rb   r   r  r   r   )r3   r<   r/   )m0m1m2s      rk   test_slicingr    sW   	QBbqb"1"f:Qac1Q3h<588####	1((	)	)Bad8vaI......ac1f:1f------	|||^^^=M=M=MN	O	OBaaae9q!^^^444444bcc111f:1A1A1A BCCCCCCCCrm   c                     t          d          } t          d          | ddddf<   | t          d          k    sJ t          d          | d dd df<   | t          d          k    sJ t          ddd          | d d df<   | t          d          k    sJ t          d          | d d d d f<   | t          d          k    sJ g d| d d d d f<   | t          d          k    sJ ddg| d ddf<   | t          d	          k    sJ d S )
Nr   rc   )r   r   r   r   r  r   r   r   r   rZ  r   r   rc   rb   r   r   )r   r   r   r   )rc   r   r   r   )rb   r   r   r   )r   r   r   r   r  r   r   r   r   r   r   r  r   r  r  r      ))r   rc   rb   r   )r   r   r   r   r  r  )r<   r3   r/   r   s    rk   test_submatrix_assignmentr    s   aAa&&Aac1Q3hK & ' ' ' ' ' ' AAbqb"1"fIA;;;;Q<((AaaadG & ' ' ' ' ' ' AhhAaaadGa====MMMAaaadG * + + + + + + 1vAbqb!eH * + + + + + + + +rm   c                      t          ddd                                 g dddg          t          ddg d          k    sJ                      ddgg d	          t          ddg d
          k    sJ                      t          d          t          d                     k    sJ t          t           fd           t          t           fd           d S )Nr   rb   c                     | dz  |z   S Nrb   r   r  s     rk   r   ztest_extract.<locals>.<lambda>;  s    !A#' rm   )r   r   rb   r   r   rc   )r   r   rb   r   r   r   r   )r   r   rc   r   r   r  c                  4                          dgdg          S )Nr   r   r   r   s   rk   r   ztest_extract.<locals>.<lambda>?      qyy!qc22 rm   c                  4                          dgdg          S r  r  r   s   rk   r   ztest_extract.<locals>.<lambda>@  r  rm   )r/   r   r   rM   r  r   s   @rk   test_extractr  :  s    q!))**A99YYYA''6!Q8K8K8K+L+LLLLL99aVYYY''6!Q8K8K8K+L+LLLLL99U1XXuQxx((A----
:2222333
:222233333rm   c                  B   t          d          } |                     dd          t          ddd          k    sJ t          ddd           }|                    dd          t          d          k    sJ |                    dd	          t          d
          k    sJ d S )Nrb   r   r   )	r   r   r   r   r   r   r   r   r   r   c                     | |z   S re   r   r  s     rk   r   ztest_reshape.<locals>.<lambda>F  r  rm   )r   rb   r   rc   )rb   r   rc   r   rc   r   ))r   r   rc   rb   r   rc   )rb   r   rc   rb   r   r   )r3   reshaper/   r  r  s     rk   test_reshaper  C  s    	QB::ava,GHHHHHH	1((	)	)B::	1 DEEF F F F::av&NOOOOOOOOrm   c                      t          d          } |                     d           t          d          dz  k    sJ |                     d           t          d          k    sJ d S )Nrb   c                     d| z  S Nrc   r   r  s    rk   r   z test_applyfunc.<locals>.<lambda>N  s
    !A# rm   rc   c                     dS Nr   r   r  s    rk   r   z test_applyfunc.<locals>.<lambda>O  s    ! rm   )r3   	applyfuncr<   )r  s    rk   test_applyfuncr  L  sa    	QB<<&&#a&&(2222<<$$a000000rm   c            	         t          t          t          t          z   z  dgt          t          z   t          z  t          z  t          t          t          t          t          z   z  z   z  gg          } |                                 }|t          t          t          z  t          dz  z   dgt          t          dz  z  t          t          dz  z  z   t          t          z  t          t          dz  z  z   t          dz  z   gg          k    sJ t	          dd          }t          t          t          |z            g                              d          t          t          |          t          t          |          z  z   g          k    sJ t          g dg dg d	g                                          t          d
d
t          dd          gg dg dg          k    sJ d S )Nrc   rb   rY   Treal)complexr   )r   r   r   r   r   )r   r   r   r   )
r/   r]   r^   r   r   r   r
   r   r   r   )r  r  rY   s      rk   test_expandr  R  s   	!QU)QAE19a-A1q5	M1B!CD	E	EB	B
A#1*a1QT6AadF?AaC!AqD&L1a4,?@AC C C C C C 	sA3qs88*$$T$22A3q66!"##$ $ $ $ 999jjj)))45599;;v	
Ax1~~

		G @ @      rm   c            	         t          t          t                    dz  t          t          dz            gt          t          dz            t          t                    dz  z  t          t          dz            t          t                    dz  z  gg          } |                     t          j        t                    t          j        t                    z            }|t          t          dz  t          t                    gt          dz  t          t                    z  t          dz  t          t                    z  gg          k    sJ |                     t          j        t                    t          j        t                    z            }|t          t          dz  t          gt          t          dz  z  t          dz  t          z  gg          k    sJ |                     t          j	        t                    t          j	        t                    z            }|t          t          dz  t           gt           t          dz  z  t          dz   t          z  gg          k    sJ d S r  )
r/   r   r]   r   r^   refinerU   r  r   r   r  s     rk   test_refiner  d  s   	#a&&!)T!Q$ZZ(adCFFAI%tAqDzz#a&&!)';<> 
? 
?B	16!99qvayy(	)	)B!Q$A!Q$s1vv+q!tCFF{)CDEEEEEE	1:a==1:a==0	1	1B!Q$Qq!tVQT!V$45666666	1:a==1:a==0	1	1B!Q$qbAg1uQw%7899999999rm   c                     t          dd          } t          ddd          } | t          ddd          k    sJ t          dddd          } t          ddd          } | t          ddd          k    sJ |                                 } |j                     || k    sJ t          j        d          }| t          dd|          k    sJ d	D ]'}d
D ]"}t          |d||          } | | j        k    sJ #(t          ddd          } d}t          | j        d                   D ]2}t          | j        d                   D ]}| ||f         dk    r|dz  }3|dk    sJ d S )Nrb   )seedr   r      T)r  	symmetric)r  prng)r   r  )r   F      )r  percentr  r   r   r  )minr  r  )r7   copyr$   randomRandomr  r   rp   )r   r   rngsizer  
zero_countrj   r  s           rk   test_randomr  p  s   1aA1aa   A
1aa(((((((1aC  A11---A
115555555	AAJLLL6666
-

C
137777777   $ 	 	G44sKKKA88888	 	21b)))AJ171:    qwqz"" 	  	 AAw!||a
	  rm   c                     t          d          } |                                 t          d          k    sJ |                     d          t          d          k    sJ |                     d          t          d          k    sJ |                     d          t          d          k    sJ |                     d          t          d          k    sJ |                     d          t          d          k    sJ t          g dg d	g d
g          } |                                 }| |z  t          d          k    sJ |                     d          |k    sJ |                     d          |k    sJ |                     d          |k    sJ |                     d          |k    sJ |                     d          |k    sJ t          g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g          }|                    d%          |z  t          |j        d&                   k    sJ t           g d'g d(g d)g          t          fd*d+                                D                       sJ t           g d'g d(g d)g          t          fd,d+                                D                       sJ d S )-Nr   rh  r`  rk  rn  rr  QR)rc   rb   r   )rb   r   rc   )r   rb   r   rb   )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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   r   r   r   r   BLOCKr   )r   1      )r   G   ^   );      A   c              3   `   K   | ](}t                              |                    u V  )d S re   rf   r  ri   srz   r{   s     rk   rl   ztest_inverse.<locals>.<genexpr>  8      LLtAEE!HH~~$LLLLLLrm   zGE ADJ LU CH LDL QRc              3   `   K   | ](}t                              |                    u V  )d S re   r  r  s     rk   rl   ztest_inverse.<locals>.<genexpr>  r  rm   )r3   r  r/   rp   r-   rq   splitr.   )r   AinvAArz   r{   s      @@rk   test_inverser    s   AA5577c!ff555Q''''555#a&&((((555Q''''555#a&&((((555Q''''							 	 	A 5577DT6SVV555%%%%555$&&&&555%%%%555$&&&&555%%%%	\\\WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1Y 
Z 
ZB2 666!!B&#bhqk*:*:::::
C\\\\\\\ 	 	A LLLLL.C.I.I.K.KLLLLLLLL
C\\\\\\\ 	 	A LLLLL.C.I.I.K.KLLLLLLLLLLrm   c                  n   t          ddddg          t          t          fd           t          ddg d          t          t          fd           t          ddg d          t          ddg d          }                     d	          | k    sJ t          ddg d
                              d          k    sJ t          d	d	g d          t          t          fd           t          d	d	g d          t          d	d	g d          }                     d          | k    sJ t          d	d	g d          t          d	d	g d          }                     d          | k    sJ t          d	d	g d          t          d	d	g d          }                     d          | k    sJ d S )Nrc   r   r   c                  .                          d          S r  inv_modr   s   rk   r   z)test_matrix_inverse_mod.<locals>.<lambda>  s    1 rm   r  c                  .                          d          S r  r  r   s   rk   r   z)test_matrix_inverse_mod.<locals>.<lambda>      qyy|| rm   r  )r   r   r   r   rb   r   r   r   r   r  c                  .                          d          S Nr   r  r   s   rk   r   z)test_matrix_inverse_mod.<locals>.<lambda>  r  rm   )	r   r   rb   rc   r   r   rc   r   r   )	r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r-  rb   r-  r   )	r   rb   rb   r   rc   r   r   r   r   r   )	r   r   r   r   r   r   rb   rc   r   )	r   r   rb   r   r   r   r   r   r   r   )r/   rM   r(   r   r   )Air   s    @rk   test_matrix_inverse_modr    s   q!aVA
!5!5!5!5666q!\\\""A
:++++,,,q!\\\""A	1lll	#	#B99Q<<2q!\\\""A99Q<<1q!00011A
:++++,,,q!00011A	1111	2	2B99Q<<2q!33344A	1111	2	2B99Q<<2q!00011A	1111	2	2B99Q<<2rm   c                     t          ddt          dz  t          z  dt          dz  z  t          t          z  z   g          } t          t          g}|                     |          t          dt          z  t          z  t          dz  gt          dt          z  t          z   gg          k    sJ t          ddt          t          dz  t          dz  z  g          } |                     |          t          ddgdt          z  t          dz  z  t          dz  dz  t          dz  z  gg          k    sJ t          dz  t          z  }t          t          g}t	          ||          t          dt          z  dt          z  gdt          z  dgg          k    sJ t          dz  t          dz  z  }t	          ||          t          dt          dz  z  dt          z  t          dz  z  gdt          z  t          dz  z  dt          dz  z  t          z  gg          k    sJ t
          t          t          dz  z  z   }t          dz  dt          dz  z  z   }t          ddt          z  gdt          z  dt          z  gg          }|t	          |t          t          t          g                    k    sJ |t	          |t          t          t          g          j                  k    sJ t	          |t          t          f|g          t          ddt          dz  z  dt          z  gdt          dz  z  dt          z  dt          z  gdt          z  dt          z  dgg          k    sJ d S )Nr   rc   r   rb   r   r   )r/   r]   r^   jacobianr4   r_   r  )Lsymsfganss        rk   test_jacobian_hessianr    s   q!ad1fa1fqsl+,,Aq6D::dv!Aq!t}q!A#'l&CDDDDDDq!aAad^$$A::dv1v!AqD!Q$q&A+/F&GHHHHHH	1QAq6D1dv!QqSzAaC8&<======	1QT	A1d1a41QT"QqSAXqAvax$89::; ; ; ; 	
AadF
A	1qAvA
1!*Q3!*  C'!VQF^^,,,,,,'!VQF^^-......1q!fqc""f1a41	
1a4AaC1aCAaC1. '  '             rm   c                     t          t          t                    t          t                    gt                    t          t                    dz  t          t                    dz  z   k    sJ t          t	          t                    t	          dt          z            gt                    t	          dt          z            k    sJ t          t	          t                    t          gt                    t	          t                    t          t	          t                    z  z
  k    sJ t          dt          t          dz  gt                    dk    sJ dt	          t                    z  t          t                    z  t          z  dt          t                    z  t	          t                    z  t          dz  z  z   dt	          t                    z  t          t                    z  t          z  z
  t	          t                    t          t                    z  t          dz  z  z
  t	          t                    t          t                    z  t          dz  z  z   } t          t	          t                    t          t                    t          dz  gt                                                    | k    sJ t          t	          t                    t          t                    t          dz  gt          d                                          | k    sJ t          dz   t          t                    dz  z  t          dz  t          t                    dz  z  z
  dt          z  t          t                    dz  z  z
  dt          z  t          t                    dz  z  z
  }t          t          t                    t          t                    t          dz  gt                                                    |k    sJ t          t          t                    t          t                    t          dz  gt          d                                          |k    sJ t          g t                    dk    sJ d S )Nrc   rb   r   r  r   r$  r`  )r;   r   r]   r   r   r   )w1w2s     rk   test_wronskianr    s   c!ffc!ff%q))SVVQYQ-BBBBBc!ffc!A#hh'++s1Q3xx7777c!ffa[!$$A3q66(99999aAqD\1%%****	CFF3q66	!	aAhs1vvoad2	2Qs1vvXc!ff_Q5F	FAs1vvad
 VVCFF]1a4/
0Bc!ffc!ffad+Q//6688B>>>>c!ffc!ffad+Q{CCCJJLL   
Q$s1vvqy1a4A	>	)AaCA	M	9AaCA	M	IBc!ffc!ffad+Q//6688B>>>>c!ffc!ffad+Q{CCCJJLL   Rq      rm   c                  |   t          dt          gt          dgg                              t          d          t          ddgddgg          k    sJ t          t          dgt          t          z   dgg                              t          dgt          dgg          t          ddgddgg          k    sJ t          t          dgt          t          z   dgg                              t          dft          dfg          t          ddgddgg          k    sJ t          t          dgt          t          z   dgg                              t          dt          di          t          ddgddgg          k    sJ t          t          t          z  g                              t          t          dz
  t          t          dz
  id	          t          t          dz
  t          dz
  z  g          k    sJ t          D ]D} t          dd
gd
dgg          |                     d                              dd          k    sJ Ed S )Nr   r   r   rc   r   r   r   T)simultaneousr   )r/   r]   r   r^   ro   r3   rz   s    rk   	test_subsr    s2   Aq6Aq6"##((A..&1a&1a&9I2J2JJJJJAq6AE1:&'',,q"g2w-?@@Q"a!""# # # #Aq6AE1:&'',,q"g2w-?@@Q"a!""# # # #Aq6AE1:&'',,aQ^<<Q"a!""# # # #1Q3%==q!a%AE2FFQQ !!" " " "  A A1v1v&''3771::??1a+@+@@@@@@A Arm   c                     t          dt          gt          dgg                              t          di          t          ddgddgg          k    sJ t          t          dgt          t          z   dgg                              t          dt          di          t          ddgddgg          k    sJ t          D ]E} t          ddgddgg          |                     d                              ddi          k    sJ Fd S )	Nr   r   r   rc   r   r   r   r   )r/   r]   xreplacer^   ro   r3   r  s    rk   test_xreplacer    s   Aq6Aq6"##,,aV44AA  ! ! ! !Aq6AE1:&''00!RB@@Q"a!""# # # # G G1v1v&''3771::+>+>1v+F+FFFFFFG Grm   c                     t          d          } t          d          }t          dt          z  dt          z  z   t          t          t          z  z   t          z  g |t                    t           |t                    z  z    |t                    z  dd| z  t          | t          z            | z  z
  z  t          z  gg          }|                                 |t          t          t          z   t          t          z  z  dt          z   gdt          z   dddt          t          | z            z  z
  t          | z  z  z  gg          k    sJ dt          z   dz  }t          |gg          }|                                 |t          |gg          k    sJ |                    t                     |t          |                    t                    gg          k    sJ d S )Nry   r  r   rc   )ratio)	r   r   r/   r]   r^   r   r   r$   r   )ry   r  r   eqs       rk   test_simplifyr  "  s   sAAQqS1Q3YQqSAH1Q44!AAaDD&=!!A$$&QqS3q2v;;q=-@(AB(FHJ 	K 	KAJJLLL1q51q5/!a%I$%E1q1SAYY;A.F+GIK L L L L L L
a%!BvAJJLLLvJJRJ2../011111111rm   c                     t          g dg dg          } | j        t          ddgddgddgddgddgddgddgd	d	gd
d
gddgg
          k    sJ | j        j        | k    sJ | j        |                                 k    sJ d S )N)
r   rc   rb   r   r   r   r   r   r   r   r   rc   rb   r   r   r   r   r   r   r   )r/   r  	transposer   s    rk   test_transposer!  3  s    ......0 	1 	1A3&QFFFFFFFFFF	% 	& 	& 	& 	& 	& 	& 35A::::3!++--rm   c                     t          dt          dgg dg          } | j        t          ddgt          dgddgg          k    sJ | j        t          dt           dgg dg          k    sJ | j        |                                 k    sJ | j        | j        j        k    sJ | j        t          ddgt           dgddgg          k    sJ d S )Nr   r   )r   rc   r   r   rc   )r/   r
   r  C	conjugateHr   s    rk   test_conjugater&  D  s   Aq			 	 	A 3&1a&a&a&" # # # # # # 3&1qb!*$**& ' ' ' ' ' '3!++--3!#%<<<<3&Aq'2q'q'# $ $ $ $ $ $ $ $rm   c            
      N   t          t          d            t          dt          t          t          gddt          t          gdddt          gg dg          } | j        t          g dt           dddgt           t           ddgt           t           t          dgg          k    sJ d S )Nc                  *    t          d          j        S r  )r3   Dr   rm   rk   r   z!test_conj_dirac.<locals>.<lambda>W  s    3q668 rm   r   r   rZ  r  r   )rM   AttributeErrorr/   r
   r)  r   s    rk   test_conj_diracr+  V  s    
>++,,,Aq!Aq!Aq! 	 	A
 3&***2A*2r2*2rAr*, - - - - - - - -rm   c                  j    t          g dg dg dg          } |                                 dk    sJ d S )Nr   r   r   )r   r   r   )r   r   r   r  r/   tracer   s    rk   
test_tracer0  d  sE    							 	 	A 7799??????rm   c                  b    t          t          ddgdt          dgg          } | j        dk    sJ d S )Nr   r  )r/   r]   r^   rp   r   s    rk   
test_shaper2  k  s@    Aq	Aq	 	 	A7frm   c                  t   t          t          ddgdt          dgg          } |                     dd            | t          t          ddgdt          dz   dgg          k    sJ |                     dd            | t          t          dz   ddgdt          z   t          dz   dgg          k    sJ |                     d          t          t          dz   ddgg          k    sJ |                     d          }d|d<   | d         t          dz   k    sJ | dd d	f         }d|d<   | d         t          dz   k    sJ |                     d          }|t          t          dz   dt          z   g          k    sJ d|d<   | d         t          dz   k    sJ | d d df         }d|d<   | d         t          dz   k    sJ d S )
Nr   r   c                     | |z   dz   S Nr   r   )rr  s     rk   r   z!test_col_row_op.<locals>.<lambda>t  s    QUQY rm   rc   rb   c                     | t           |z  z   S re   )r^   )r[   r  s     rk   r   z!test_col_row_op.<locals>.<lambda>x  s    QAX rm   *   r   r   )r/   r]   r^   row_opcol_oprowcol)r   r1c1s      rk   test_col_row_opr?  q  s   Aq	Aq	 	 	AHHQ&&'''1AE1' ( ( ( ( ( ( HHQ%%&&&QAq)QAq)+ , , , , , ,
 5588vAq!}o......	
qBBqET7a!e	
1crc6BBqET7a!e	
qBQA''''''BqET7a!e	
111a4BBqET7a!erm   c                  Z   t           d d         D ]} |                     d          }|                    ddd            | | g dg dg dg          k    sJ |                     d          dz  }d	|d
<   |                    ddd            | | | g dg dg dg          k    sJ d S )Nrc   rb   r   r   c                     | d|z  z   S r  r   r   us     rk   r   z!test_zip_row_op.<locals>.<lambda>      AaC rm   r-  rc   r   r   r   r   r   c                     | d|z  z   S r  r   rB  s     rk   r   z!test_zip_row_op.<locals>.<lambda>  rD  rm   )rc   r   r   )r   r   r   r   )ro   r3   
zip_row_op)rz   r   s     rk   test_zip_row_oprH    s	   rr{ & &GGAJJ	Q//000CC""$ % % % % % % GGAJJqL$	Q//000!!CC##% & & & & & & && &rm   c                      t          g d          } t          g d          }t          g d          }| dvsJ | dvsJ | dk    sJ | |k    sJ | |k    sJ d S )Nr   )rc   rc   rb   r   )r   r   r   )r{   rY   rZ   s      rk   test_issue_3950rJ    sz    yyyAyyyAyyyARS66666666666666rm   c                      G d d          }  G d d          } |             } |            }t          g d          }||         dk    sJ d||<   |d         dk    sJ t          g dg d	g          }|||f         d
k    sJ |d|f         d
k    sJ ||df         d
k    sJ d|||f<   |d         dk    sJ d
|d|f<   |d         d
k    sJ d||df<   |d         dk    sJ d S )Nc                       e Zd Zd ZdS )test_issue_3981.<locals>.Index1c                     dS r5  r   selfs    rk   	__index__z)test_issue_3981.<locals>.Index1.__index__      1rm   N__name__
__module____qualname__rQ  r   rm   rk   Index1rM    #        	 	 	 	 	rm   rW  c                       e Zd Zd ZdS )test_issue_3981.<locals>.Index2c                     dS r  r   rO  s    rk   rQ  z)test_issue_3981.<locals>.Index2.__index__  rR  rm   NrS  r   rm   rk   Index2rZ    rX  rm   r\  r   rb   r   rc   r   r   r   r   r   r   r   r   r   )rW  r\  index1index2r{   s        rk   test_issue_3981r`    sk                  VXXFVXXFyyyAV9>>>>AfIQ419999			999%&&AVV^!!!!QY<1VQY<1AffnT7a<<<<AaiLT7a<<<<AfaiLT7a<<<<<<rm   c                  @    t          t          d          dg           t           fdt          d          D                       sJ t           fdt          d          D                       sJ t           fdt          d          D                       sJ d S )Nr   r   c              3   z   K   | ]5} j                     |         |                                          k    V  6d S re   evalfri   rj   rY   s     rk   rl   ztest_evalf.<locals>.<genexpr>  s@      >>wqwyy|qtzz||+>>>>>>rm   rc   c              3   ~   K   | ]7} j         d           |         |                              d           k    V  8dS rc   Nrc  re  s     rk   rl   ztest_evalf.<locals>.<genexpr>  sD      @@!wqwqzz!}!

1-@@@@@@rm   c              3   ~   K   | ]7} j         d           |         |                              d           k    V  8dS rg  r   re  s     rk   rl   ztest_evalf.<locals>.<genexpr>  sD      88!sqs1vvayAaDFF1II%888888rm   )r/   r   rq   r   rY   s   @rk   
test_evalfrj    s    Q|A>>>>U1XX>>>>>>>>@@@@uQxx@@@@@@@@8888uQxx8888888888rm   c                  v   t          t          t          gt          t          gg          }  | j                    du sJ t          g dg dg          }  | j                    du sJ t          g dddt          dgg          }  | j                    du sJ t          dt          d	gg          }  | j                    du sJ t          g d
g          }  | j                    du sJ t          dgt          gd	gg          }  | j                    du sJ t          dgdgd	gg          }  | j                    du sJ d S )NTr  r  Fr   r   r   r   rb   r   rc   )r/   r]   is_symbolicri  s    rk   test_is_symbolicrm    sc   AA  A1=??d""""lll+,,A1=??e####q!Ql+,,A1=??d""""Aq	{A1=??d""""			{A1=??e####aS1#A1=??d""""aS1#A1=??e######rm   c                      t          g dg          } | j        du sJ t          dgdgdgg          } | j        du sJ t          dd          } | j        du sJ d S )Nr   Tr   rc   rb   Fr   )r/   is_upperr<   ri  s    rk   test_is_upperrp    sz    			{A:aS1#A:aA:rm   c                      t          g dg          } | j        du sJ t          dgdgdgg          } | j        du sJ d S )Nr   Fr   rc   rb   T)r/   is_lowerri  s    rk   test_is_lowerrs    sZ    			{A:aS1#A:rm   c                      t          ddg d          }  | j                    sJ t          ddgddgg          }  | j                    rJ t          g           }  | j                    sJ d S )Nr   )r   rc   r   r   r   r   r   rc   r   r   r   rb   r   r   r   r   r   r   r/   rS  ri  s    rk   test_is_nilpotentrv    s    q!EEEFFA1>AA  Aq~r

A1>rm   c                     d\  } }t          | |          } |j        d           dt          | |          z  }||k    sJ |j        |j        cxk    rdk    sn J |j        |j        cxk    rdk    sn J |j        |j        cxk    rdk    sn J t          d          t          dd          k    sJ t          d          t          dd          k    sJ t          dd          t          dddgdz            k    sJ t          dd          t          dddgdz            k    sJ  |j        d           |t          | |          k    sJ d S )N)rb   r   r   rb   rc   r   r   r   )r<   fillr6   rr   rs   rp   r/   )ry   r{   rY   rZ   s       rk   test_zeros_ones_fillry    s   DAqaA
AFAKKK	DAJJA66666QV    q      6QV    q      7ag''''''''''88uQ{{""""77d1ajj    A;;&As1u------1::1qc!e,,,,,,
AF1IIIarm   c                      t          d          } | t                      k    sJ t          dd          } | j        dk    sJ | j        dk    sJ t          dd          } | j        dk    sJ | j        dk    sJ d S )Nr   rc   )r<   r/   rr   rs   ri  s    rk   test_empty_zerosr{    sx    aA====aA6Q;;;;6Q;;;;aA6Q;;;;6Q;;;;;;rm   c                     t          t          dz  t          t          z  gt          t          t                    z  t          t	          t                    z  gg          }  | j        t                    t          dt          z  t          gt          t                    t	          t                    gg          k    sJ t          t          t           t          dz  gt          t                    dt          z  t          t                     z
  t          dt          z  z   gg                              t          t                    t          t          t           t          gt          dt          gg          k    sJ t          t          t                    dz
  t          z  dt          z  t          t          z  z   t          t          z  gdt          z  t          t                    t          t          t          dz                       gg                              t          d          t          g dt          dt          d          gg          k    sJ  | j
        t                    t          t          dd          t          dz  z  t          t          dz  z  dz  gt          dz  t          t                    z  dz  t          dz  t	          t                    z  dz  gg          k    sJ d S )Nrc   r   r   )r   r   r   rb   )r/   r]   r^   r   r   r   r   limitr   r   r   r   ri  s    rk   test_issue_3749r~    s2   AqsaAh#a&&1233A16!991a3q663q66*:;<<<<<<	
QB1	Q1sA2wwAaC(* + ++05B<<bS"Ar{+,,- - - - 
a&&1*a1qsAqD*	
1c!ffc#a!e**oo&( ) )).q!			B3q66?+,,- - - - 1;q>>V	!Q1	a1fQh'	
Ac!ffQ1SVVA&%( ) ) ) ) ) ) ) )rm   c                      t          d          } |                     dd           dD ]4}|                     |d           |                     d          k    sJ 5d S )	Nr   r   r   )r_  rh  c                     | dk    S r  r   r  s    rk   r   z%test_inv_iszerofunc.<locals>.<lambda>,  s
    a rm   )ra  
iszerofuncrk  r`  )r3   col_swapr  )r   ra  s     rk   test_inv_iszerofuncr  (  s{    AAJJq!    uuF/?/?u@@EEE            rm   c                  \   t          d          \  } }t          | t          |          z  | t          |          z  g          }t          | |g          }|                    |          }||                    |j                  k    sJ ||j                            |          k    sJ ||j                            |j                  k    sJ |j        t          |j        d                   z  |z  }|                    t                    }|t          ddgd| dz  gg          k    sJ d S )Nrho,phir   r   rc   )
r   r/   r   r   r	  r  r3   rp   r  r%   )rhophiXYr  r  s         rk   test_jacobian_metricsr  0  s   y!!HCCHHc#c((l+,,ASzA	

1A

13q!!!!!!qs######	C
OOAA	HAACF,--------rm   c                     t          d          \  } }t          | t          |          z  | t          |          z  | dz  g          }t          | |g          }t          t          |          |  t          |          z  gt          |          | t          |          z  gd| z  dgg          }|                    |          |k    sJ d S )Nr  rc   r   )r   r/   r   r   r	  )r  r  r  r  r  s        rk   test_jacobian2r  =  s    y!!HCCHHc#c((lCF344ASzA	SC4C=!	SCCL!cEq! 	 	A
 ::a==Arm   c                  b   t          t          t          t          z   t          z             t          t          t          z   t          z             t          t          t          z   t          z             g          } t          t          t          t          g          }t          dd          D ]}t          dd          D ]q}| d |d d f         }|d |d d f         }|                    |          }|j        |k    sJ |j        |k    sJ t          |          D ]}|d d |f         |k    sJ rd S Nr   rb   )	r/   r   r]   r^   r_   r   r	  rr   rs   )r  r  rj   r  X_sliceY_slicer  ks           rk   test_issue_4564r  I  s%   AEAIAEAIAEAI?@@A1ayA1a[[ * *q! 	* 	*AAAAhGAAAhG  ))A6Q;;;;6Q;;;;1XX * *Aw')))))*	** *rm   c                  @    t          t          t          t          z   t          z             t          t          t          z   t          z             gt          t          t          z   t          z             t          t          t          z   t          z             gg           t          t           fd            dd d f          t          t          t          gt          t          gg          t          t           fd           t          t           fd           d S )Nc                  l                          t          t          t          t          g                    S re   r	  r/   r]   r^   r_   r  s   rk   r   z(test_nonvectorJacobian.<locals>.<lambda>Z  s!    ajjAq	):):;; rm   r   c                  .                                    S re   )r	  r  r  s   rk   r   z(test_nonvectorJacobian.<locals>.<lambda>]  s    ajjmm rm   c                  |                          t          t          t          gt          t          gg                    S re   r  r  s   rk   r   z(test_nonvectorJacobian.<locals>.<lambda>^  s(    ajj1a&1a&0B)C)CDD rm   )r/   r   r]   r^   r_   rM   	TypeErrorr  s   @@rk   test_nonvectorJacobianr  W  s    QUQYQUQY0QUQYQUQY02 	3 	3A
9;;;;<<<	!QQQ$AAA  A
9+++++,,,
9DDDDEEEEErm   c                      t          ddgddgg          } |                                 }|j        dk    sJ t          d          D ]}||         |dz   k    sJ d S Nr   rb   rc   r   )r/   vecrs   r   )r{   m_vecrj   s      rk   test_vecr  a  ss    AA  AEEGGE:????1XX ! !Qx1q5     ! !rm   c                  ~   t          ddgddgg          } |                                 }|j        dk    sJ t          d          D ]}||         |dz   k    sJ |                     d          }|d         dk    sJ t          dt          t          t
          z   z  gt
          t          z  t          dz  z   dgg          } |                     d          }|d         t
          t          z  t          dz  z   k    sJ t          dt          t          t
          z   z  gt
          t          z  dgg          } |                     dd          }|d         t
          t          z  k    sJ t          t          d            t          t          d	            t          t          d
            t          t          d            d S )Nr   rc   rb   F)diagonalr   )r  check_symmetryc                  J    t          ddgg                                          S r  r/   vechr   rm   rk   r   ztest_vech.<locals>.<lambda>z       v1vh//4466 rm   c                  P    t          ddgddgg                                          S r  r  r   rm   rk   r   ztest_vech.<locals>.<lambda>{  '    v1v1v&677<<>> rm   c                  J    t          ddgg                                          S r  r  r   rm   rk   r   ztest_vech.<locals>.<lambda>|  r  rm   c                  P    t          ddgddgg                                          S r  r  r   rm   rk   r   ztest_vech.<locals>.<lambda>}  r  rm   )	r/   r  rs   r   r]   r^   rM   r&   r   )r{   m_vechrj   s      rk   	test_vechr  i  s   AA  AVVXXF;!1XX " "ayAE!!!!!VVUV##F!9>>>>Aq1uI1q!tQ011AVVUV##F!9!ad
""""Aq1uI1a)**AVVU5V99F!9!
:66777
:>>???
:66777
:>>?????rm   c                       t          g d          t          g d          k    sJ dddgg t          t           fd           t           d          t          g d          k    sJ d S )Nr   r   rc   rb   c                  "    t                     S re   )r2   r   s   rk   r   ztest_diag.<locals>.<lambda>  s    tAww rm   F)strict)r2   r/   rM   r   r   s   @rk   	test_diagr    s}    			??fYYY//////	
AsA
:'''%   F999$5$5555555rm   c                  d   t          ddgddgg          } t          dt          gt          dgg          }t          dt          dgt          dt          gt          t          t          gg          } | j                    | gk    sJ  |j                    |gk    sJ  |j                    |gk    sJ d S Nr   rc   rb   )r/   r]   r^   r_   get_diag_blocksrY   rZ   r[   s      rk   test_get_diag_blocks1r    s    AA  AAA  AAq	Aq!9q!Qi011A11#%%%%11#%%%%11#%%%%%%rm   c                  @   t          ddgddgg          } t          dt          gt          dgg          }t          dt          dgt          dt          gt          t          t          gg          }t	          | ||                                          | ||gk    sJ t	          | ||                                          | ||gk    sJ t	          | ||                                          | ||gk    sJ t	          |||                                          |||gk    sJ d S r  )r/   r]   r^   r_   r2   r  r  s      rk   test_get_diag_blocks2r    s   AA  AAA  AAq	Aq!9q!Qi011A1a==((**q!Qi77771a==((**q!Qi77771a==((**q!Qi77771a==((**q!Qi777777rm   c                  d   t          ddgddgg          } t          dt          gt          dgg          }t          dt          dgt          dt          gt          t          t          gg          }t	          | ||          }|                    d          t	           | j                     |j                     |j                              k    sJ t	          | ||          }|                    d          t	           | j                     |j                     |j                              k    sJ t	          | ||          }|                    d          t	           | j                     |j                     |j                              k    sJ t	          | | || ||           }|                    d          t	           | j                     | j                     |j                     | j                     |j                     | j                              k    sJ |                    dd          t	           | j        d           | j        d           |j        d           | j        d           |j        d           | j        d                    k    sJ d S )	Nr   rc   rb   T)try_block_diagrk  )r  ra  r`  )r/   r]   r^   r_   r2   r  )rY   rZ   r[   r   s       rk   test_inv_blockr    s   AA  AAA  AAq	Aq!9q!Qi011AQ1A555%%eaegguquww)H)HHHHHQ1A555%%eaegguquww)H)HHHHHQ1A555%%eaegguquww)H)HHHHHQ1aAA555%%%!%''51577EAEGGUQUWW*> *> > > > >55U533tUUQU%000%!%u2E2E2EUUQU%000%!%u2E2E2E8G 8G G G G G G Grm   c                  .   t          t          d            t          t          d            t          t	          d                    t          d          k    sJ t          t          d                    t          d          k    sJ t          t          d            t          t	          d                    t          d          k    sJ t          t          d                    t          d          k    sJ t          t          d            t          t	          d          t          d                    t          dd          k    sJ t          t          d            t          t          d            t          t          d	            d
S )zg
    Check that matrix dimensions can be specified using any reasonable type
    (see issue 4614).
    c                  "    t          dd          S )Nrb   r   r<   r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    uQ|| rm   c                  &    t          dddd          S Nr   rc   rb   r   r  r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    eAq!Q// rm   rb   c                       t          d          S N      @r  r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    uRyy rm   c                       t          d          S r  r3   r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    s2ww rm   r   c                       t          d          S r  r   r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    fQii rm   c                  "    t          dd          S r   r   r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    fQll rm   c                  &    t          ddgg          S r   r   r   rm   rk   r   z$test_creation_args.<locals>.<lambda>  s    vq1#h// rm   N)rM   r   r  r<   rg   r   r3   r6   r   rm   rk   test_creation_argsr    sQ   
 :++,,,
9//000Q==E!HH$$$$a((((
:(()))s1vv;;#a&&    wqzz??c!ff$$$$
:'''A

##tAqzz1111
9''(((
9**+++
://00000rm   c                  8   t          ddg d          } |                                 rJ |                                 sJ |                     d          sJ t          ddg d          } |                                 sJ t          ddd          } |                                 sJ |                                 sJ t          ddg d          } | t          ddd          k    sJ t          ddt	          dd                    } |                                 rJ |                                 sJ t          d	          } |                                 sJ t          d
          } |                                 sJ t          dddt
          dz  dt
          z  z   dz   t          t
          dz   dz  ddt          ddg	          } |                                 sJ |                     d          rJ |                                                     d          sJ d S )Nrc   r   r   r   r   Fr$   r  r   rb   )	r   r   r   r   rc   r   r   r   rb   ))r   r   r   r   )r   r   r   )r   r   r   r   )r/   is_diagonalis_symmetricr2   r<   r]   r^   r   r   s    rk   test_diagonal_symmetricalr    s   q!\\\""A}}>>>>5>)))))q!\\\""A==??Q1A==??>>q!00011AQ1q!U1a[[!!A~~==??'((A==??%&&A==??q!aA!aQUQJ1aAFGGA>>~~u~-----88::""E"2222222rm   c                  	   t          ddt          z   gdt          z
  dgg                                          sJ t          ddg d                                          rJ                                 rJ t	          t
          fd           t          ddd                                          \  } }| t          d          k    sJ |k    sJ t          ddg d                                          sJ                                 sJ                                 \  } }| 	                                z  | z  |k    sJ t          ddg d                                          sJ                                 sJ                                 \  } }| 	                                z  | z  |k    sJ | t          d          k    sJ |k    sJ t          ddg d                                          sJ                                 \  } }| 	                                z  | z  |k    sJ t          ddg d	                                          sJ                                 \  } }| 	                                z  | z  |k    sJ | D ]"}|
                                d         dk    sJ #t          ddg d
                                          sJ                                 sJ                                 \  } }| 	                                z  | z  |k    sJ | t          ddgddgg          k    sJ t          ddg d                              d          rJ t	          t          fd                                           sJ                                 \  } }| 	                                z  | z  |k    sJ t          ddg d                                          rJ t	          t          fd           t          ddg d                                          rJ t	          t          fd           t          d          \  }}}}t          dd||||g                                          sJ                                 sJ d S )Nr   rc   rb   r   r   r   r  rb   r   c                  ,                                      S re   r[  r   s   rk   r   z&test_diagonalization.<locals>.<lambda>       rm   r  )r   r   r   rb   r   r   r   r   )	r   rc   r   r   rb   r   rc   r,  rc   r  r   )r   r   r   r   Tc                  .                          d          S )NTr  r   s   rk   r   z&test_diagonalization.<locals>.<lambda>  s    d 3 3 rm   r   r   r   r   c                  ,                                      S re   r  r   s   rk   r   z&test_diagonalization.<locals>.<lambda>       rm   )	r   r   r   r  rb   r   rc   r   r   c                  ,                                      S re   r  r   s   rk   r   z&test_diagonalization.<locals>.<lambda>  r  rm   za b c d)r/   r
   rV  r  rM   r(   r2   r[  r3   r  as_numer_denomr  r'   r   )r  r)  rj   rY   rZ   r[   r\   r{   s          @rk   test_diagonalizationr    s   AaC1Q3(#$$A     q!+++,,A""$$$$$~~
!8!8!8!8999 	Q1A]]__FQA;;;;6666q!\\\""A>>     ]]__FQ5577Q;?aq!\\\""A>>     ]]__FQ5577Q;?aA;;;;6666q!\\\""A     ]]__FQ5577Q;?aq!11122A     ]]__FQ5577Q;?a * *!!!$)))))q!\\\""A==??     ]]__FQ5577Q;?aAA'(((((( 	q!]]]##A""4(((((
;3333444     ]]__FQ5577Q;?a 	q!\\\""A""$$$$$
;////000q!55566A""$$$$$
;////000 ##JAq!Qq!aAq\""A>>       rm   c                  
    t          ddgddgg             j                    du sJ d d<     j                    du sJ t          ddgddgg             j                     d d<   t          t           fd           d S )Nr   r   Tr   Fc                  "      j                     S re   r  ri  s   rk   r   z"test_issue_15887.<locals>.<lambda>2  s     rm   )r=   rV  r[  rM   r'   ri  s   @rk   test_issue_15887r  (  s    QFQF+,,A1  D((((AdG1  E))))QFQF+,,AAMOOOAdG
;////00000rm   c                     t          ddg d          t          t          fd           t          ddg d          t          ddg d          }                                 \  }}| |k    sJ |                                 d         k    sJ t          ddg d          t          ddg d	          }                                 \  }}| |k    sJ t          ddg d
          t          ddg d          }                                 \  }}| |k    sJ t          ddg d          t          ddg d          }                                 \  }}| |k    sJ t          ddg d          t          ddg d          }                                 \  }}| |k    sJ t          ddg d          t          ddg d          }                                 \  }}| |k    sJ t          ddg d                                          rJ t          ddg d          }                                 \  }}| |k    sJ t          t          dd          t          dd          gt          dd          t          dd          gg                                          \  }}|                                D ]$}t          |t                    r|j	        dk    sJ %d S )Nrb   rc   r  c                  ,                                      S re   )r   r   s   rk   r   z"test_jordan_form.<locals>.<lambda>8  r  rm   )	r   r  r   r   ir   r   ir  )	r   r   r   r   r   r   r   r   r   r   	r   r   r   r,  r   r   r   r   rc   )	rc   r   r   r   rc   r   r   r   rc   )	rc   r   r   r   r-  r   rc   r  )	r   r   r   r   r   r   r   r   r   )	r   r-  rc   r   rO  rb   r   r   )	r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   rb   rb   rc   r   r   r   r   r   r   r   )rc   r   r   r   r   rc   r   r   r   r   rc   r   r   r   r   rc   )r   rc   r  r   rc   r   r   rc   r   r  r  r   r   rb   r   )r   r   r   r   r   rc   r   r   r   r   rc   r   r   r   r   rc   )r   r   rc   r   r   r   r   r   r   r   rb   r   r   r   r   rc   )r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   z1.0n   )	precisionz2.0z3.14159265358979323846264338327z4.0)
r/   rM   r(   r   r[  rV  r	   valuesr   _prec)Jmustr  r  termr{   s       @rk   test_jordan_formr  5  sk   q!+++,,A
!8!8!8!8999 	q!:::;;A1a55566E==??DAqA::::AMMOOA&&&&& 	q!22233A 1a44455E==??DAqA:::: 	q!44455A 1a77788E==??DAqA:::: 	q!33344A1a44455E==??DAqA::::q!LLLMMA1a     E
 ==??DAqA::::q!LLLMMA 1a ' ' ' ( (E ==??DAqA::::q!JJJKKA""$$$$$1aIIIJJE==??DAqA:::: 	u,,,eES.I.I.IJ8CHHH%PUadJeJeJefh 	i 	iA==??DAq

 % %dE"" 	%:$$$$% %rm   c            	         t          g dg dg dg dg          } ddt          z  z
  }ddt          z  z   }t          |dddgd|ddgdd|dgddd|gg          }t          |dddgd|ddgdd|dgddd|gg          }|                                 \  }}||k    s||k    sJ t          ||z  |                                z            | k    sJ d S )	N)rc   r   r   r   )r,  rc   r   r   )r   r   rc   r   )r   r   r,  rc   rc   r   r   r   )r/   r
   r   r$   r  )r   pqJmust1Jmust2r  r  s          rk   #test_jordan_form_complex_issue_9274r    s-               " 	# 	#A 	
AaCA	AaCAaAq\Aq\Aq\Aq\# $ $F aAq\Aq\Aq\Aq\# $ $F ==??DAq;;!v++++AaCK  A%%%%%%rm   c                      t          g dg dg dg dg          } |                                 \  }}|t          g dg dg dg dg          k    sJ |t          g d	g dg dg dg          k    sJ d S )
Nr  r  )r   r   r   r   rZ  r   r   r   r   r  r  r  r  )r/   r   r  s      rk   test_issue_10220r    s     	 	A ==??DAq$$$& ' ' ' ' ' ' $$$$	& ' ' ' ' ' ' ' 'rm   c                  "   t          g dg dg dg dg          } |                                 \  }}|                                t          t           t           dz  t          t          dz  gdt          z   ddt          z
  dgdt	          d           dz  t          dz  z
  dt	          d           dz  t          dz  z   gg d	g          k    sJ |t          t           dddgdt           ddgddt          dgdddt          gg          k    sJ d S )
NrY  )r   r   r   r   )r   r   r   r   )r   r   rc   r   rc   r   r   r   r  )r/   r   r   r
   r   )r   r  r  s      rk   test_jordan_form_issue_15858r    sB   	 	 	A
 ]]__FQ88::R1"Q$Q!A#6	aQQA6!A$$q1Q3Q1a!A#6666	!8 9 9 9 9 9 9
 
Q1	
QB1	
Aq!	
Aq!	        rm   c                     t          d          \  } }}t          | | z
  |dz  ||z   z  z   ||z  ||z   z  g||z  ||z   z  | |dz  ||z   z  z   gg          }|                    t                    }|t	          t          dz  || z  || z  z   d|z  |z  z   ||z   z  t          z  z   ||z  | z  ||z   z  z   t          d          k    sJ t          |          t          u sJ t          ddgddgg          }|                                |                    t                    cxk    r&t          t          dz  t          z
  dz
            k    sn J t          ddgt          dgg          }|                    t                    }|j        t          k    sJ |                                	                    |j        t                    t          dz  dt          z  z
  k    sJ d S )	Nz
UA K_i K_wrc   zZZ(K_i,K_w,UA)r  r   rb   r   r   )
r   r/   r  r]   r   rf   r    genas_exprr   )UAK_iK_wr   r  r  s         rk   test_Matrix_berkowitz_charpolyr    s   <((LBS#S!VS3Y//s3wc	7JKGS3Y/#Qc	8J1JKM 	N 	NA zz!}}HQTSVc"f_quSy039=a??C
C#I !*:	< 	< 	<< < < < >>X%%%%AA  A::<<1::a==BBBBHQTAX\,B,BBBBBBBAA  A	

1A5A::::99;;AE1%%A!333333rm   c            
         t          d          } t          j        d|           }|                                t          t	          |           gg          k    sJ t          j        d|           }|                                t          t	          |           t	          |           t	          |           dz  gdt	          |           t	          |           gddt	          |           gg          k    sJ d S )Nlamdar   rb   rc   r   )r   r/   jordan_block_eval_matrix_exp_jblockr   lr{   s     rk   test_exp_jordan_blockr    s    wAAq!!A$$&&&3q66(*<*<<<<<Aq!!A$$&&VVSVVSVVAX&AA3q66N 	 	     rm   c            	      h   t          ddgddgg          } t          t          d          dt          d          z  dz  dt          d          z  dz  z   gdt          d          gg          }|                                 |k    sJ t          |           |k    sJ t          ddgddgg          } |                                 t          t          dgdt          gg          k    sJ t          |           t          t          dgdt          gg          k    sJ t          ddgddgg          } |                                 t          t          t          d          z  t           t	          d          z  gt          t	          d          z  t          t          d          z  gg          k    sJ d S )	Nrb   r   r   r   r,  r   r   r   )r/   r   r   r   r   )r{   m_exps     rk   test_expr	    s~   AB !!ASVVRBZ\Ac!ffHQJ67!SWWFGGE5577eq66U????AA  A5577fq!fq!f-......q66VaVaV,------B!Q !!A5577fqQx!CFF3aAh#a&&5IJKKKKKKKKrm   c                  l   t          d          } t          j        d|                                           t          t	          |           gg          k    sJ t          j        d|                                           t          t	          |           d| z  dd| dz  z  z  dd| dz  z  z  gdt	          |           d| z  dd| dz  z  z  gddt	          |           d| z  gdddt	          |           gg          k    sJ t          g dg d	g d
g          t          t          fd           d S )Nr  r   r   r   rc   rb   r   r   r   r   c                  ,                                      S re   )r   r   s   rk   r   ztest_log.<locals>.<lambda>  s     rm   )r   r/   r  _eval_matrix_log_jblockr   rM   r'   r  s    @rk   test_logr    sW   wAAq!!A$$&&&3q66(*<*<<<<<Aq!!A$$&&Q1b!AqD&k1a1f:6CFFAaCQq!tV-As1vvqs#Aq#a&&!		
 	

 
 
 
 				

		 	A
 ;(((((rm   c                  V   t          t          t          fdf          } |                     t                    sJ |                     t                    rJ |                     t
                    sJ |                     t          d          } |                     t                    rJ d S )Nr  rc   )r/   r]   r^   hasr_   r   r   r   s    rk   test_hasr    s    A  A5588OOOuuQxx55==	q!AuuQxxrm   c            	          t          d          } t          dd| t          |           dz  t          |           dz  z   t          j        g          }t          |          \  }}}}|t          j        k    sJ d S )Nr]   rb   r   rc   )r   r/   r   r   r   r   r*   r]   columnpivot_offset	pivot_valpivot_assumed_nonzero
simplifieds         rk   :test_find_reasonable_pivot_naive_finds_guaranteed_nonzero1r    st     	sAAq1c!ffai#a&&!)3QV<==F$V,, ?L)2Jrm   c            
      *   t          d          } t          dd| t          |           dz  t          |           dz  z   | dz  z   t          |           dz  t          |           dz  z   g          }t	          |t
                    \  }}}}|dk    sJ d S )Nr]   rb   r   rc   simpfunc)r   r/   r   r   r*   r+   r  s         rk   :test_find_reasonable_pivot_naive_finds_guaranteed_nonzero2r    s     	sAAqVVQYs1vvqy(A-VVQYs1vvqy(*+ +F
 	%Vi@@@ ?L)2J>>>>>>rm   c            
         t          d          } t          dd| t          |           dz  t          |           dz  z   | z   t          |           dz  t          |           dz  z   g          }t	          |t
                    \  }}}}t          |          dk    sJ |d         d         dk    sJ |d         d         d| z   k    sJ |d         d         dk    sJ |d         d         dk    sJ d S )Nr]   rb   r   rc   r  r   )r   r/   r   r   r*   r+   lenr  s         rk   +test_find_reasonable_pivot_naive_simplifiesr  '  s    	sAAqVVQYs1vvqy(*VVQYs1vvqy(*+ +F
 	%Vi@@@ ?L)2J z??aa=q    a=qs""""a=q    a=q      rm   c                       t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t
          d            t          t          d	            t          t          d
            t          t          d            t          t          d            t          t
          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          t
          d            t          t          d            t          t          d            t          t
          d            t          t          d            t          t
          d            t          t          d            t          t
          d            t          t
          d            t          t
          d             t          t          d!            t          t          d"            t          t          d#            t          t          d$            t          t          d%            t          t          d&            t          t          d'            t          t          d(            t          d)           t          t           fd*           t          g d+g          t          g d,g d-g d.g           t          t           fd/           t          g d,g d-g d.g           t          t           fd0           d S )1Nc                  *    t          ddgdgg          S r   r   r   rm   rk   r   ztest_errors.<locals>.<lambda>:  s    v1vsm44 rm   c                  2    t          ddgg          d         S )Nr   rc   )g333333?r   r   r   rm   rk   r   ztest_errors.<locals>.<lambda>;      v1vh//7 rm   c                  2    t          ddgg          d         S )Nr   rc   )r   g@r   r   rm   rk   r   ztest_errors.<locals>.<lambda><  r#  rm   c                  &    t          ddd          S )Nrb   r   T)r[   r  )r7   r   rm   rk   r   ztest_errors.<locals>.<lambda>=  s    z!qDAAA rm   c                  L    t          ddg                              dd          S )Nr   rc   r   r   )r/   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>>  s     vq!f~~55a;; rm   c                  v    t          ddgddgg                              ddgt          ddg                    S Nr   rc   rb   r   r   )r/   copyin_matrixr   rm   rk   r   ztest_errors.<locals>.<lambda>@  s9    AA'((661vvq!f~~NN rm   c                  p    t          ddgddgg                              ddgt                                S r(  )r/   copyin_listsetr   rm   rk   r   ztest_errors.<locals>.<lambda>A  s=    fq!fq!f%566BBADuu  rm   c                  P    t          g dg dg                                          S )Nr   )rc   rb   r   r/   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>C  s'    III0F)G)G)K)K)M)M rm   c                  t    t          ddddg                              t          ddgddgg                    S r  )r/   row_joinr   rm   rk   r   ztest_errors.<locals>.<lambda>E  s9    q!aV$$--fq!fq!f5E.F.FGG rm   c                  p    t          ddg                              t          ddgddgg                    S r  )r/   col_joinr   rm   rk   r   ztest_errors.<locals>.<lambda>G  s3    FAq6NN33FQFQF;K4L4LMM rm   c                  p    t          dg                              dt          ddgddgg                    S r  )r/   
row_insertr   rm   rk   r   ztest_errors.<locals>.<lambda>H  D    vqc{{55a!B1vA : :     rm   c                  p    t          dg                              dt          ddgddgg                    S r  )r/   
col_insertr   rm   rk   r   ztest_errors.<locals>.<lambda>J  r5  rm   c                  H    t          ddg                                          S r   r.  r   rm   rk   r   ztest_errors.<locals>.<lambda>L  s    A)=)=)?)? rm   c                  H    t          dg                              d          S r5  )r/   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>M  s    faSkk33A66 rm   c                  T    t          ddgddgg                              dd          S Nr   rc   rb   r   r   )r/   minorr   rm   rk   r   ztest_errors.<locals>.<lambda>N  s+    v1v1v&677==aCC rm   c                  T    t          ddgddgg                              dd          S r;  )r/   minor_submatrixr   rm   rk   r   ztest_errors.<locals>.<lambda>O  s+    v1v1v&677GG1MM rm   c                  J    t          g d                              d          S Nr   r   r/   crossr   rm   rk   r   ztest_errors.<locals>.<lambda>P  s     fYYY//55a88 rm   c                  J    t          g d                              d          S r@  r/   dotr   rm   rk   r   ztest_errors.<locals>.<lambda>Q  s     fYYY//33A66 rm   c                  h    t          g d                              t          ddg                    S )Nr   r   rc   rD  r   rm   rk   r   ztest_errors.<locals>.<lambda>R  s*    viii0044VQF^^DD rm   c                  J    t          ddg                              g           S r   rD  r   rm   rk   r   ztest_errors.<locals>.<lambda>S  s    vq!f~~11"55 rm   c                  J    t          ddg                              d          S )Nr   rc   rY   rD  r   rm   rk   r   ztest_errors.<locals>.<lambda>T  s    faVnn0055 rm   c                  N    t          ddg                              g d          S )Nr   rc   r   rD  r   rm   rk   r   ztest_errors.<locals>.<lambda>U  s"    vq!f~~11)))<< rm   c                  H    t          g d                                          S )Nr   )r/   r   r   rm   rk   r   ztest_errors.<locals>.<lambda>V  s    			):):)>)>)@)@ rm   c                  P    t          ddgddgg                                          S r  )r/   
normalizedr   rm   rk   r   ztest_errors.<locals>.<lambda>W  '    v1v1v&677BBDD rm   c                  L    t          ddg                              d          S )Nr   rc   znot a methodr`  r.  r   rm   rk   r   ztest_errors.<locals>.<lambda>X  s!    vq!f~~111HH rm   c                  H    t          ddg                                          S r   r/   
inverse_GEr   rm   rk   r   ztest_errors.<locals>.<lambda>Y      A)B)B)D)D rm   c                  P    t          ddgddgg                                          S r   rP  r   rm   rk   r   ztest_errors.<locals>.<lambda>Z  rM  rm   c                  H    t          ddg                                          S r   r/   inverse_ADJr   rm   rk   r   ztest_errors.<locals>.<lambda>[  s    A)C)C)E)E rm   c                  P    t          ddgddgg                                          S r   rU  r   rm   rk   r   ztest_errors.<locals>.<lambda>\  s'    v1v1v&677CCEE rm   c                  H    t          ddg                                          S r   )r/   
inverse_LUr   rm   rk   r   ztest_errors.<locals>.<lambda>]  rR  rm   c                  H    t          ddg                                          S r   ru  r   rm   rk   r   ztest_errors.<locals>.<lambda>^  s    A)D)D)F)F rm   c                  H    t          ddg                                          S r   r/   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>_  s    A););)=)= rm   c                  T    t          ddgddgg                              d          S )Nr   rc   rb   r   zNot a real methodr`  r\  r   rm   rk   r   ztest_errors.<locals>.<lambda>a  s-    AA'((,,4G,HH rm   c                  `    t          g dg dg dg dg                              d          S )Nr  r  r  r  zNot functionr  r\  r   rm   rk   r   ztest_errors.<locals>.<lambda>c  sC    lll)))+ , ,,/C>C,J,J rm   c                  `    t          g dg dg dg dg                              d          S )Nr  r  r  r  Fr_  r\  r   rm   rk   r   ztest_errors.<locals>.<lambda>f  sC    lll)))+ , ,,/C5C,A,A rm   c                  n    t          t          ddgddgg          t          ddgddgg                    S r  r4   r/   r   rm   rk   r   ztest_errors.<locals>.<lambda>i  s:    AA/00&1a&1a&9I2J2JKK rm   c                  H    t          t          ddgddgg          g           S r  rb  r   rm   rk   r   ztest_errors.<locals>.<lambda>j  s%    wv1v1v.>'?'?DD rm   c                  B    t          t          d          dz  d          S )Nr]   rc   rY   )r4   r   r   rm   rk   r   ztest_errors.<locals>.<lambda>k  s    wvc{{A~s;; rm   c                  ,    t          d          d         S )Nrb   )r   rc   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>l      s1vvd| rm   c                  ,    t          d          d         S )Nrb   )rc   r   r  r   rm   rk   r   ztest_errors.<locals>.<lambda>m  rf  rm   r  c                  .                          d          S )Nzmethod=LU_decomposition())r  r   s   rk   r   ztest_errors.<locals>.<lambda>o  s    quu%@AA rm   )r   r   r   r   rc   rb   r   r   c                  0                          d          S )Ng@)r4  r   Vs   rk   r   ztest_errors.<locals>.<lambda>r  s    q||C33 rm   c                  0                          d          S )Ng)r7  rk  s   rk   r   ztest_errors.<locals>.<lambda>t  s    q||D!44 rm   )rM   r   r  r&   r  r(   r/   rk  s   @@rk   test_errorsrn  9  sU   
:44555
:77888
:77888
:AABBB
:;;<<<
:NNP P P
9     
!M!MNNN
:GGI I I
MMO O O
:     
:     
!?!?@@@
966777
:CCDDD
:MMNNN
988999
966777
:DDEEE
:55666
955666
:<<===
!@!@AAA
:DDEEE
:HHIII
!D!DEEE
:DDEEE
!E!EFFF
:EEFFF
!D!DEEE
!F!FGGG
!=!=>>>
:HHJ J J
:	K 	KL L L :	B 	BC C C :KKM M M
:DDEEE
:;;<<<
:++,,,
:++,,,NOOA
:AAAABBB~A			999iii011A
:33333444			999iii011A
:4444455555rm   c                  r   t          t                                dk    sJ t          t          ddgg                    t          t          dgdgg                    cxk    rdk    sn J t          t          ddd                     t          t          ddd                     cxk    rdk    sn J t          t          g dg dg                    dk    sJ t          dg          t          dgg          k    sJ t                      rJ t                      t          g           k    sJ d S )	Nr   r   rc   c                     dS r  r   r  s     rk   r   ztest_len.<locals>.<lambda>y  s     rm   c                     dS r  r   r  s     rk   r   ztest_len.<locals>.<lambda>z  s    a rm   r   r   r   )r  r/   r   rm   rk   test_lenrr  v  sY   vxx==Av1vh  CaSz(:(:$;$;@@@@q@@@@@@vaNN++,,F1a(())/ / / /-./ / / / / /vyyy))),--..!33331#;;&1#--''''xx88vbzz!!!!!!rm   c            
         t          ddt          ft          ddfddt          dz  ff          } |                     t                    t          t          dt          z  t          dz  dz  ft          t          z  dt          z  dt          z  fdt          z  dt          z  t          dz  dz  ff          k    sJ |                     t                    t          t          dt          z  t          t          z  ft          dz  dz  dt          z  dt          z  fdt          z  dt          z  t          t          dz  z  ff          k    sJ d S )Nr   r   rc   r   r   rb   )r/   r]   r^   r   r   s    rk   test_integratert    s   Aq	Aq!9r1adm455A;;q>>AaCAa 1Q3!QqS/BqD!A#q!tAv3FGHHI I I I;;q>>AaC11Q!QqS1BqD!A#qAv3FGHHI I I I I Irm   c                     t          ddt          t                    t          z  ft          ddfddt          dz  dz   ff          } |                     t          d          t          dt          ddfdf          k    sJ d S )	Nr   r   rc   r   r   r   )r   r   r   )r   r   r   )r/   r   r]   r^   r}  r   s    rk   
test_limitrv    st    As1vvax 1a)b!QTAX->?@@A771a==FI1ay*#EFFFFFFFFrm   c            	         t          ddt          ft          ddfddt          dz  dz   ff          } t          |                     t                    t          |                     sJ |                     t                    t          dddddt          z  ff          k    sJ |                     t                    t          d	          k    sJ t	          | t                    t          dddddt          z  ff          k    sJ t	          | t                    t          d	          k    sJ |                                 }t          |                    t                    t          |                    sJ |                    t                    t          dddddt          z  ff          k    sJ |                    t                    t          d	          k    sJ t	          |t                    t          dddddt          z  ff          k    sJ t	          |t                    t          d	          k    sJ d S )
Nr   r   rc   r   r   r   r   r   )r   r-  r   )r=   r]   r^   r   r   rf   r  r>   )r   A_imms     rk   	test_diffry    s   Q1I1ay2q!Q$(2CDEEAaffQiia)))))66!99*Iy1a1++NOOOOOO66!99*+LMMMMMM1::+Y	Aq!A#;,OPPPPPP1::+,MNNNNNNNNEejjmmT%[[11111::a==0)YAqQRs1TUUUUUU::a==01RSSSSSSq>>19i!QPQRSPS2UVVVVVVq>>12STTTTTTTTrm   c                  r   t          t          t          gt          t          gg          } |                     |           t          ddgddggddgddgggddgddggddgddgggg          k    sJ t          | |           t          ddgddggddgddgggddgddggddgddgggg          k    sJ |                                 }|                    |          t          ddgddggddgddgggddgddggddgddgggg          k    sJ t          ||          t          ddgddggddgddgggddgddggddgddgggg          k    sJ |                     t                    t          ddgddgg          k    sJ t          t          t          g          }|                     |          t          j        dddd          k    sJ |                     |           t          ddgddggddgddgggddgddggddgddgggg          k    sJ |                    t          t          gg          }|j        dk    sJ |t          dgdggdgdggg          k    sJ t          d          } |t          t          t                                        t          t          t          gg          t                              t                                        t                                        t                    g          k    sJ                     t          t          t          gdf          t                              t          d                              t          t                                        t          t                    g                    t          t                                        t          d                              t          t                    g                    t          t                                        t          t                                        t          d          gg          k    sJ t          t                    t          t                    z  }|                    t          t          gg          t          t!          t                    t          t                    z  t          t                    t          t                    z  g          k    sJ |                    t          t          t          ff          t          t!          t                    t          t                    z  t          t                    t          t                    z  g          k    sJ |                    t          t          t          ff          t          t          t                     t          t                    z  t!          t                    t          t                    z  g          k    sJ |                    t          t          fft          t          gg          t          t!          t                    t          t                    z  t          t                     t          t                    z  gt          t                    t          t                    z  t!          t                    t          t                    z  gg          k    sJ                     t                                        t                                        t                                        t          t          t          ffd          d         k    sJ                     t                                        t                                        t                                        t          t          t          ffd          d         k    sJ                     t          t          t          ggt          t          t          ff          t          fd	t          t          t          fD                       k    sJ t          j        t#          t          t          gg                    }t%          |t                    sJ |t#          ddgg          k    sJ t          dz                      t#          t          t          gg                    }t%          |t                    sJ |t#          dt          dz  z  dgg          k    sJ d S )
Nr   r   rc   )rc   rc   r   r  rb   r   rE  c                 T    g | ]#fd t           t          t          fD             $S )c                 `    g | ]*}                     |                                         +S r   )r   )ri   rj   fxyzr  s     rk   r  z2test_diff_by_matrix.<locals>.<listcomp>.<listcomp>  s2    :c:c:cTU499Q<<;L;LQ;O;O:c:c:crm   )r]   r^   r_   )ri   r  r}  s    @rk   r  z'test_diff_by_matrix.<locals>.<listcomp>  s=    9w9w9whi:c:c:c:c:cZ[]^`aYb:c:c:c9w9w9wrm   )r=   r]   r^   r_   r`   r   rV   r  rY   r>   rZ   r<   rp   r   r   r   r   r/   r   )r   rx  BdBr  exprresr}  s          @rk   test_diff_by_matrixr    s    	QFQF+,,A66!99!Q!Q 0Aq6Aq62BC1vPQSTvFVZ[]^Y_bcefagXhEijkkkkkk1::1a&1a&!1QFQF3C DAQRTUPVGW[\^_Z`cdfgbhYiFjkllllllNNE::e!Q!Q(8Aq6Aq6:J'KPQSTvXY[\W]N^bcefagjkmnio`pMq&r s sssssu1a&1a&)9QFQF;K(LQRTUPVYZ\]X^O_cdfgbhklnojpaqNr's!t!ttttt 66!99*QFQF+;<<<<<<aV$$A66!99Aq!Q//////66!99!Q!Q 0Aq6Aq62BC1vPQSTvFVZ[]^Y_bcefagXhEijkkkkkk 
!Q		B8y    !qc
aS1#J/000000A1Q1::D99q!Qi[!!UDIIaLL$))A,,		RS+U%V%VVVVV99q!Qi^$$	1a$))Aq//499Q??;	1a$))Aq//499Q??;	1a$))Aq//499Q??;/ ) )     q66#a&&=D99q!fX%QAAs1vv(F"G"GGGGG99Q!Q	""eSVVCFF]CFF3q66M,J&K&KKKKK99Q!Q	""ec!ffWSVV^SVVCFF],K&L&LLLLL99q!fY!Q))USVVCFF]SVVGCPQFFN4SVYZ[V\V\]`ab]c]cVcehijekeklopqlrlrerUs3t-u-uuuuu 99Q<<Q$$Q''499q!Qi\1+E+Eg+NNNNN99Q<<Q$$Q''499q!Qi\1+E+Eg+NNNNN99q!Qi[Aq!9,//59w9w9w9wnoqrtumv9w9w9w3x3xxxxx &!Q!!
"
"Cc/00000&1a&""""""a4++fq!fX&&
'
'Cc/00000&1QT61+''''''''rm   c            	          t          ddt          ft          ddfddt          dz  dz   ff           t          t           fd            t           d          t                    t          dd	d
d
dt          z  ff          k    sJ d S )Nr   r   rc   r   r   c                       j         S re   )nonexistantattributer   s   rk   r   ztest_getattr.<locals>.<lambda>  s
    1#9 rm   r   r   r   r   )r/   r]   r^   rM   r*  getattrr   s   @rk   test_getattrr    s    Aq	Aq!9r1adQh&7899A
>9999:::71fa  FIy1a1++N$O$OOOOOOOrm   c                      t          g dg dg dg          } | j        sJ | j        } | j        sJ d| d<   | j        du sJ t          g dg dg dg          } | j        rJ t	          dd	          } | j        sJ d S )
N)rb   r   r   )rc   r   r   r   r   )r   r   Fr  r   rc   )r/   is_upper_hessenbergr  is_lower_hessenbergr<   r   s    rk   test_hessenbergr    s    			999iii011A    	A    AeH E))))			999iii011A$$$$aA      rm   c            	         t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          dt          z   dfdf                              d	
          t          t          dt          z             dgddgg          k    sJ t          d          } |                     d	
          }|t          ddgddt          d          z  t          z  gg          k    sJ ||j        z  | k    sJ t          d          } |                                 }||j        z  | k    sJ |j        sJ |t          g dg dg dg          k    sJ t          ddt          z  ddt          z  z   fdt          z  ddt          z   fddt          z  z
  dt          z
  dff          } |                                 	                                t          dt          ddfdt          z
  ddff          k    sJ t          t          d            t          t          d            t          t          d            t          t          d            t          t          d            t          dt          z   dfdf                              d	
          t          t          dt          z             dgddgg          k    sJ t          d          } |                     d	
          }|t          ddgddt          d          z  t          z  gg          k    sJ ||j        z  | k    sJ t          d          } |                                 }||j        z  | k    sJ |j        sJ |t          g dg dg dg          k    sJ t          ddt          z  ddt          z  z   fdt          z  ddt          z   fddt          z  z
  dt          z
  dff          } |                                 t          dt          ddfdt          z
  ddff          k    sJ d S )Nc                  D    t          d                                          S Nr   r/   choleskyr   rm   rk   r   ztest_cholesky.<locals>.<lambda>  s    )@)@)B)B rm   c                  D    t          d                                          S Nr   )rb   r   r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>      v&677@@BB rm   c                  \    t          dt          z   dfdf                                          S Nr   r   r   )r/   r
   r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  s'    vAqz6&:;;DDFF rm   c                  D    t          d                                          S N)r   r   )r   r   r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  r  rm   c                  H    t          d                              d          S Nr  F	hermitianr  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  s     v&677@@5@QQ rm   r   r   r   Fr  r   r  rc   r   ))   r   r-  )r   r   r   )r-  r   r  r  )rb   rb   r   )r   r   rb   r   r   r   r  r   rb   c                  D    t          d                                          S r  r0   r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>   s    f)=)=)F)F)H)H rm   c                  D    t          d                                          S r  r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>      |,<==FFHH rm   c                  \    t          dt          z   dfdf                                          S r  )r0   r
   r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  s'    |a!eQZ,@AAJJLL rm   c                  D    t          d                                          S r  r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  r  rm   c                  H    t          d                              d          S r  r  r   rm   rk   r   ztest_cholesky.<locals>.<lambda>  s!    |,<==FFQVFWW rm   )rM   r(   r   r/   r
   r  r   r  rr  r   r0   )r   r
  s     rk   test_choleskyr    sT   
!B!BCCC
:BBCCC
:FFGGG
:BBCCC
:QQRRRAE1:v&''0050AAV	a!ea1a&M" F# F# # # # #  A	

U
##AAAd1ggIaK 01222222QS5A::::788A	

Aqs7a<<<<:			999jjj9::::::BqD!ac'"QqS!R!V$4q1Q3wQ6KLMMA::<<  FI1ay1q5!Q-+P$Q$QQQQQ
!H!HIII
:HHIII
:LLMMM
:HHIII
:WWXXX!a%V,--666GG6	a!ea1a&S" L# L# # # # #%&&A	

U
##AAAd1ggIaK 01222222QS5A::::=>>A	

Aqs7a<<<<:			999jjj9::::::q"Q$AaC(1Q326*:Q1Wb1fb<QRSSA::<<69q!Qi!a%A"GHHHHHHHHrm   c            	      N   t          dd          } t          t          |           t          |           g          }t	          |                    d                    dk    sJ |                    d          t          t          |           dz  t          |           dz  z   t          dd                    k    sJ t          dt          dd          gg          }|                                t          d	t          d
d          z   t          j	                  k    sJ |                    t                    t          |          k    sJ |                    t                     t          |          k    sJ t          ddgddgg          }|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ t          d                              d          t          d                              d          cxk    rdk    sn J |                    t                    dk    sJ t          dt          t          g| t          j	        t           gg          }|                    d          t!          t          dd          dt#          t                    dz  z  z   t          dz  z   | dz  z             k    sJ t          g dddt          dd          gg          }|                    d          t!          t          dd          t!          d          dz  z             k    sJ |                    d          t          j        u sJ |                    d          t!          d          dz  k    sJ t          ddgddgg          }t          ddgddgg          }t          dt&           gt&          dgg          }t          ddgddgg          }||||g}t          dd          }dD ]}t)          d                              |          t          j        u sJ |D ]S}	|D ]N}
|	                    |          |
                    |          z   |	|
z                       |          z
  }|dk    sJ OT||||fD ]U}t+          ||z                      |          t#          |          |                    |          z  z
            }|dk    sJ Vt          dddt&          z  z
  dg          }t          t          j	        dt&          z  dg          }t          g d          }t          ddt&          g          }t          t-          d          t          dd          dg          }|||||g}t          dd          }ddddt          j        t          j        t          fD ]&}|dk    r2t          g d                              |          t          j        u sJ |dk    ro|D ]l}	|D ]g}
|	                    |          |
                    |          z   |	|
z                       |          z
  }t+          |dk              t          j        u sJ hm|ddddt          j        t          j        fv rX|D ]U}	t+          ||	z                      |          t#          |          |	                    |          z  z
            }|dk    sJ V(t          ddg d          }|                    d          dk    sJ d S )Nr]   Tr  rc   r   r   r   rb   r  r   r   r   r   	frobeniusfro%   )r   rc   r   r  i  r   iI3 r   alpha)r  rc   r   r   )r   r   r   g      Y@r   )	r   rb   r   r   r   r   rb   r   r   )r   r/   r   r   r%   normr   r   r   r   r   maxr  r3   r^   r   r   r   r  r
   r<   r$   r   InfinityNegativeInfinitytrue)r]   r   r   r~  r#  r)  r
  r  orderr  r  difr   rY   rZ   r[   r\   es                     rk   test_matrix_normr    s    	sAAA  AAFF1II!####66"::SVVRZ#a&&"*4hq"ooFFFFFF 	HQNN#$%%A6688s2A.77777766"::Q662#;;#a&&     	AA  A66!99>>>>66"::????66+!####r77<<??c"ggll2..3333!33333366"::???? 	Aq	Aqvs+,--AFF5MM8B??Qs1vvqy[02q581a4?@@A A A A 	


Q8B??3455A66!99Xc1--UA=>>>>>>66"::66+$s))A+----
 	AA  AAQ !!AQB!Q !!AAB !!A	
Aq!A7&&&E  Qxx}}U##qv---- 	" 	"A " "vve}}qvve}}4ULL''(q"
 Q1 	 	AE!G>>%00JJ./ 0 0C!88888	 	1qs7B  A!Q  A|||A1ayAhq#..233A	
Aq!QA7&&&EQB
A,>C    199)))$$))%00AF::::A:: 8 8 8 8A66%==166%==8QU++,C#C1H--777778
 Q2r1:q/ABBB    a~~e44ZZ!&&--/ 1 2 2axxxxx 	q!22233A66!99??????rm   c                  ^   t          dd          t          d          } d| d<   t          dd          | d<   |                                 d	k    sJ | d
<   |                                 t	          dt                              t          t          dd          t                              z  k    sJ t          t                    t                    gt                     t                    gg          }|                                t          fdt          dd          t          j        t          dd          t          dz  t          t          t          dd          z  fD                       sJ t          g                                           dk    sJ d S )Nr]   Tr  rb   r   r   r   rc   rc   r   r   c              3      K   | ]L}t          d                                                   |                                                    V  MdS )      ?N)r	   
epsilon_eqr   rd  )ri   valMcr]   s     rk   rl   z(test_condition_number.<locals>.<genexpr>}  sg       Q QuRyy##BGGAsOO$9$9$;$;<< Q Q Q Q Q Qrm   r   rc   r   r   r   )r   r3   r   condition_numberr   r   r   r/   r   r   rq   r   r   r   )r   r   r  r]   s     @@rk   test_condition_numberr  q  s   sAAAAdGq"ooAdG3&&&&AdG3r3q66??S!R#a&&5Q5Q#QQQQQQQ CFF7CFF"3455A	
				B Q Q Q Q Q	!Q!R"Q$Bx1~~<MOQ Q Q Q Q Q Q Q "::&&((A------rm   c                  .   t          d          } t          d          }| | d d d d f         k    sJ | | d d d d f         k    rJ | |k    rJ | |k    sJ | dk    sJ | dk    rJ t          d          }t          d          }||k    sJ ||k    rJ d S )N)r   r]  r   r   r   ))r   r   r   )r   r   r   )rb   rc   r   r   )r-  r   r   )r/   r0   )r   r~  r#  r)  s       rk   test_equalityr    s    011A011A!!!QQQ$<<<<AaaadG||||Avvvv66667777Bwwww 	677A011A6666Avvvvvvrm   c                      t          d                              t          g dg                    t          g dg dg dg dg          k    sJ d S )Nrb   )r   r   r   r-  r   r   )r3   r2  r/   r   rm   rk   test_col_joinr    sp    q66??6999+..//									 	 	     rm   c                  :   t          g dg          } t          dd          D ]w}g d}|                    |d           t          t	          d                              ||                               d                                                    |k    sJ xd S )Nr   r   r   r,  r   r-  r   rb   r   )r/   r   insertrH   r3   r4  r<  r  )r4rj   r  s      rk   test_row_insertr    s    			B2q\\ F FII	As1vv((B//33A66==??@@AEEEEEF Frm   c                  8   t          g d          } t          dd          D ]w}g d}|                    |d           t          t	          d                              ||                               d                                                    |k    sJ xd S )Nr  r,  r   r   r   rb   r   )r/   r   r  rH   r<   r7  r;  r  )c4rj   r  s      rk   test_col_insertr    s    						B2q\\ H HII	AuQxx**1b1155a88??AABBaGGGGGH Hrm   c                     t          ddg                                          t          t          dd          t          dd          g          k    sJ t          g d                                          t          g d          k    sJ t          g d          } |                     d           t          g d          k    sJ d S )Nrb   r   r   r   )r   r   g0.++c                 0     | j         dd          j        S )Nr   T)ry   chop)rd  is_zeror  s    rk   r   z!test_normalized.<locals>.<lambda>  s    2D1119 rm   r_  )r/   rL  r   r   s    rk   test_normalizedr    s    1a&>>$$&&AA/001 1 1 1 )))''))VIII->->>>>> 	}}}A<<99   						     rm   c                  ^    t          d           dk    sJ t          d           dk    sJ d S )Nc                  D    t          d                                          S r  r3   print_nonzeror   rm   rk   r   z$test_print_nonzero.<locals>.<lambda>  s    3q66//11 rm   z[X  ]
[ X ]
[  X]
c                  F    t          d                              d          S )Nrb   .r  r   rm   rk   r   z$test_print_nonzero.<locals>.<lambda>  s    3q66//44 rm   z[.  ]
[ . ]
[  .]
)rI   r   rm   rk   test_print_nonzeror    sX    1122       4455           rm   c                     t          j        d          t          d          k    sJ t          j        d          t          d          k    sJ t          dd          t          dddgdz            k    sJ t          ddgddgg          } t          ddgddgg          }t          D ]}|                    d          }| |k    sJ | t          d|          k    sJ t          |          |k    sJ |                    d          }||k    sJ |t          d|          k    sJ t          |          |k    sJ d S )Nrb   r   r   r   r   rc   r  )r/   r3   r<   r6   ro   rf   )rj   r_   rz   r{   s       rk   test_zeros_eyer    sQ   :a==CFF""""<??eAhh&&&&1::1qc"f------AA  AAA  A  GGAJJAvvvvCsOOO####Aww#~~~~IIaLLAvvvvE!%%%%%%%Aww#~~~~~ rm   c                     t                      j        sJ t          ddgddgg          j        sJ t          dd          j        sJ t          d          j        rJ t          t          dgddgg          j        d k    sJ t          t          dgddgg          j        d k    sJ t          t          dgddgg          j        d k    sJ t          t          dgddgg          j        d k    sJ t          t          dgddgg          j        dk    sJ t          dd          } t          | dgddgg          j        dk    sJ d S )	Nr   rb   r   r   FrY   T)nonzero)	r/   is_zero_matrixr<   r3   r]   r0   r-   r.   r   ri  s    rk   test_is_zeror    ss   88""""Aq6Aq6"##2222A;;%%%%1vv$$$$Aq6Aq6"##2d::::!Q!Q())8D@@@@QFQF+,,;tCCCC 1a&1a&!122ATIIIIAq6Aq6"##2e;;;;sD!!!AAq6Aq6"##2e;;;;;;rm   c                     t           dz  } t          |           }t          |            }t          |           }t          |            }t          |           }t          |            }||z  t	          d          z  t	          d          k    sJ ||z  t	          d          z  t	          d          k    sJ ||z  t	          d          z  t	          d          k    sJ |                                ddt          |           z  z   k    sJ |                                ddt          |           z  z   k    sJ |                                ddt          |           z  z   k    sJ t          d          t	          d          k    sJ t          d          t	          d          k    sJ t          d          t	          d          k    sJ t          j        g dt           dz            }t          j        g dt           dz            }t          j        g dt           dz            }	t          t            dz            |	                                k    sJ t          t            dz            |	                                k    sJ t          t            dz            |		                                k    sJ t          t           
 dz            |	                                k    sJ t          t           
 dz            |	                                k    sJ t          t           
 dz            |		                                k    sJ d S )Nrb   r   rc   r   r-  r   r   )r   r:   r9   r8   r3   r/  r   rX   from_axis_angleto_rotation_matrixrA   rB   rC   )
thetar3_plusr3_minusr2_plusr2_minusr1_plusr1_minusq1q2q3s
             rk   test_rotation_matricesr    s   qDEG%  HG%  HG%  HGCFF"c!ff,,,,GCFF"c!ff,,,,GCFF"c!ff,,,, ==??a!CJJ,.....==??a!CJJ,.....==??a!CJJ,..... Q<<3q66!!!!Q<<3q66!!!!Q<<3q66!!!! 
	#IIIrAv	6	6B		#IIIrAv	6	6B		#IIIrAv	6	6BrTAX""7"7"9"99999rTAX""7"7"9"99999rTAX""7"7"9"999992""b&;&;&=&=====2""b&;&;&=&=====2""b&;&;&=&=======rm   c                  h   t          t          d          d                   dk    sJ t          t          d                    t          d          k    sJ t          t          d            t          t          d                    dk    sJ t          t          d                    dk    sJ d S )Nvectorr   z	vector[4]r\   c                  ,    t          d          d         S )Nr\   r   )r)   r   rm   rk   r   z%test_DeferredVector.<locals>.<lambda>
	  s    ~c2226 rm   testzDeferredVector('test'))strr)   r   rM   r  reprr   rm   rk   test_DeferredVectorr  	  s    ~h''*++{::::>#&&''>#+>+>>>>>
:66777~c""##s****v&&''+CCCCCCCrm   c                  B    t          t          d                    rJ d S )Nr  )rJ   r)   r   rm   rk    test_DeferredVector_not_iterabler  	  s$    s++,,,,,,,rm   c                  2    t          t          d            d S )Nc                  :    t          t          d                    S )Nrl  )r/   r)   r   rm   rk   r   z,test_DeferredVector_Matrix.<locals>.<lambda>	  s    f^C%8%899 rm   )rM   r  r   rm   rk   test_DeferredVector_Matrixr  	  s    
999:::::rm   c            
      ~   t           } t          ddddg          }t          ddddg          }t          ||g          t          ddddg          t          dd | d          dz   | d          dz  g          gk    sJ t          |j        |j        g          t          ddddg          t          dd | d          dz   | d          dz  g          gk    sJ t          t          ddg          t          ddg          gd          t          dt	          d          z  dz  t	          d          dz  g          t          t	          d           dz  dt	          d          z  dz  g          gk    sJ t          t          dg                    }t          |          t          dgg          gk    sJ d S )Nr   rc   rb   r   r   Tr   )r   r/   r,   r  r   r"   )r   r  r  r
  s       rk   test_GramSchmidtr  	  s   A	1q!f		B	1q!f		BBx  	1q!f		vaQQqTT!VQQrUU1W,=>>?@ @ @ @bd|$$	1q!f		vaQQqTT!VQQrUU1W,=>>?@ @ @ @ 1v1v7>>$r((
2tBxx{+,,b	"aRjm,--C/ / / / / 	&!++Aq>>fqcUmm_,,,,,,rm   c                  j    t          g dd          dk    sJ t          g ddd          dk    sJ d S )Nr  r   r   F)zero)r1   r   rm   rk   test_casoratianr  %	  sK    lllA&&!++++lllAE222a777777rm   c                  *   t                      t          dd          z  j        dk    sJ t          dd          t          dd          z  t          dd          k    sJ t          dd          t          dd          z  t                      k    sJ d S )Nr   rb   )r   rb   )r/   r<   rp   r   rm   rk   test_zero_dimension_multiplyr  *	  s    HHU1a[[ '61111A;;uQ{{"eAqkk1111A;;uQ{{"fhh......rm   c                      t          ddt          d                      dd d f         t          ddgg          k    sJ  dd d f         t          ddgg          k    sJ  d d df         t          ddgg          j        k    sJ  d d df         t          ddgg          j        k    sJ t          t           fd           t          t           fd           d S )Nrc   r   r   rb   r   c                       dd d f         S r  r   r   s   rk   r   z'test_slice_issue_2884.<locals>.<lambda>6	  s    qAAAw rm   c                       d         S )Nr  r   r   s   rk   r   z'test_slice_issue_2884.<locals>.<lambda>7	  s    qw rm   )r/   r   r  rM   r  r   s   @rk   test_slice_issue_2884r  0	  s    q!U1XXAQT7fq!fX&&&&&&RU8v1vh''''''QQQT7fq!fX&&(((((QQQU8v1vh'')))))
:'''
:'''''rm   c                      t          dd          d d df         j        dk    sJ t          dd          dd d f         t          ddg           k    sJ d S )Nr   rb   r   r   r   )r<   rp   r/   r   rm   rk   test_slice_issue_3401r  :	  sc    A;;qqq"u#v----A;;q!!!tq!R 0 0000000rm   c                  `   t          dd          } d| d<   | d d df         t          g d          k    sJ | d         dk    sJ | dd         dgk    sJ d| d<   | d         dk    sJ | ddd f         t          ddgg          k    sJ t          dd	gg          | ddd f<   | dd d f         t          g d
g          k    sJ ddgg| ddd f<   | dd d f         t          g dg          k    sJ d| d<   | d d d df         t          g d          k    sJ g d| d<   | d d df         t          g d          k    sJ t          g d          | d<   | d d df         t          g d          k    sJ t          g d          | d<   | d d df         t          g d          k    sJ d S )Nrb   r   r   r   r   r8  r   r   r   )r   r   r   +   )r   r8  r     r   )r  r   r   r   r   r   )r<   r/   r0   )r  s    rk   test_copyinr  ?	  s(   aAAaDQQQT7fYYY''''''Q419999QT7qc>>>>AdGT7b====QU8vAwi((((((1vhAaeHQT7fiii[))))))RzAaeHQT7fkkk]++++++AdGQQQU8vjjj))))))iiAdGQQQT7fYYY''''''YYYAdGQQQT7fYYY''''''999%%AdGQQQT7fYYY''''''''rm   c                      t          ddgddgg                                          t          ddgddgg          dfk    sJ t          t          d            t          g dt          ddgdt          dgg           t                                           d                    j        k    sJ                                  d         t          d          k    sJ                      t          	          d         t          d          k    sJ t          t           fd
           t          t           fd           t          t           fd           d S )Nr   rc   r   )r   c                  P    t          ddgddgg                                          S r   r.  r   rm   rk   r   z'test_invertible_check.<locals>.<lambda>Z	  s'    v1v1v&677;;== rm   )r   r   r   r   rb   r  c                  0                          d          S )Nrk  r`  r  r   s   rk   r   z'test_invertible_check.<locals>.<lambda>e	  s    quuEu22 rm   c                  0                          d          S )Nr_  r`  r  r   s   rk   r   z'test_invertible_check.<locals>.<lambda>f	      quuDu11 rm   c                  0                          d          S )Nrh  r`  r  r   s   rk   r   z'test_invertible_check.<locals>.<lambda>g	  r  rm   )	r/   r0  rM   r   r]   r  rr   r3   r#   r   s   @rk   test_invertible_checkr  V	  s^    Aq6Aq6"##((**v1v1v6F/G/G.NNNNN
:==>>>
a!
a 	 	A
 qvvxx{qv%%%% 6688A;#a&&    6686$$Q'3q661111
:2222333
:1111222
:111122222rm   c                      t          d          \  } }| |z  }|                    | t          g d                    t          g d          |z  k    sJ d S )Nzx, y)rb   r   rb   )r   r   r/   )r]   r^   r  s      rk   test_issue_3959r  j	  s\    6??DAq	!A66!VIII&&''6)))+<+<Q+>>>>>>>rm   c                  V    t          t          ddgddgg                    dk    sJ d S )Nr   rc   rb   r   zMatrix([[1, 2], [3, 4]]))r  r/   r   rm   rk   test_issue_5964r  p	  s7    v1v1v&''((,FFFFFFFrm   c                      t          d          \  } }t          t          | d|z  g|dz  | dz   gg                    dk    sJ d S )Nx yrc   rb   z'Matrix([
[   x,   2*y],
[y**2, x + 3]]))r   r!   r/   )r]   r^   s     rk   test_issue_7604r  t	  s^    5>>DAqAaC1a4Q-0112234 4 4 4 4 4rm   c            
          t          d          j        sJ t          d                                          j        sJ t          d          j        rJ t	          d          j        rJ t          g dg          j        rJ t          dddddd          j        sJ t          ddt          d                    j        rJ t          ddddd          j        rJ t          dddddddd          j        rJ d S )	Nrb   r-  r   )r   r   r  rc   r   )r   r   )r   r   r  r   )r   rc   )r3   is_Identityr  r<   r6   r/   r0   r   r   rm   rk   test_is_Identityr  z	  s   q66q66  ,,,,Qxx####Aww""""yyyk""....!AQa8899EEEEAaq**6666Aa!3!344@@@@Aa!1A!N!NOO[[[[[[rm   c                     t          dd                              t          dd                    dk    sJ t          dd                              g d          dk    sJ t          g d                              t          g d                    dk    sJ t          dddt          z  g                              t          t          ddt          z  g                    dt          z   k    sJ t          dddt          z  g                              t          t          ddt          z  g          d	          dt          z   k    sJ t          dddt          z  g                              t          t          ddt          z  g          d
	          dt          z   k    sJ t          dddt          z  g                              t          t          ddt          z  g          d
d          dt          z
  k    sJ t          dddt          z  g                              t          ddt          z  dg          d
d          ddt          z  z   k    sJ t          dddt          z  g                              t          ddt          z  dg          d
d          ddt          z  z
  k    sJ t          t          dt          z  g                              t          t          dt          z  g          dd          dk    sJ t          t          dt          z  g                              t          t          dt          z  g          d          dk    sJ t	          t
          d            d S )Nr   rb   r  r   r  rc   r-  Fr  Tr  physicsr  conjugate_conventionr   r   r   rightr   left)r  c                  n    t          ddg                              t          ddg          dd          S )Nr   rc   rb   r   Tr  r  rD  r   rm   rk   r   ztest_dot.<locals>.<lambda>	  s0    vq!f~~11&!Q..Dgm1nn rm   )r6   rE  r/   r
   rM   r   r   rm   rk   test_dotr"  	  s   1::>>$q!**%%****1::>>)))$$)))))))  			!2!233r99991a1+""61a1+#6#67726AAAA1a1+""61a1+#6#6%"HHBQRFRRRR1a1+""61a1+#6#6$"GG2PQ6QQQQ1a1+""61a1+#6#6$]f"ggkmpqkqqqqq1a1+""61ac1+#6#6$]d"eeijmnopmpippppp1a1+""61ac1+#6#6$]c"ddhilmnolohooooo1ac(1Q3x 0 0EX^__ceeeee1ac(1Q3x 0 0vNNRSSSSS
:nnooooorm   c            	      *   t          dd          \  } }}}}}t          d|||f| d|| f| | d| f| ||  dff          }t          d|  | | f| d|| f|| d|f||| dff          }|                                                    |          sJ t	          d                                                              t          d                    sJ |                                                                                    |           sJ d S )NzB_x B_y B_z E_x E_y E_zTr  r   rb   )r   r/   dualequalsr3   r<   )B_xB_yB_zE_xE_yE_zFFds           rk   	test_dualr.  	  sL   #*!$. $. $. Cc3ScC 
!cC4 
tC 
cTa 	 	 	A 
sdSD3$	S3$	sdq3	sSDQ	 
 
B 6688??2q66;;==a)))))6688==??!!1"%%%%%%%rm   c                     t          ddg                                          du sJ t          dddt          dz  dt          z  z   dz   t          t          dz   dz   dt          t          z  t           t           t          z  dg	          } |                                 du sJ |                     d          du sJ |                     d           du sJ | d	          | d	<   |                                 du sJ | d	          | d	<   |                                 } |                     d          du sJ d| d
<   |                                 du sJ d S )Nr   rc   Frb   r   Tr  c                     | S re   r   r  s    rk   r   z%test_anti_symmetric.<locals>.<lambda>	  s    ! rm   r   r   )r/   is_anti_symmetricr]   r^   r   r   s    rk   test_anti_symmetricr2  	  sn   1a&>>++--6666q!aA!aa!eaZKAaC!aRT1MNNA  D((((..%777744==== whAdG  E))))whAdG	

A..$6666AdG  E))))))rm   c                     t          d          } |                     d          \  }}||j        z  |j        |z  cxk    rt          |j                  k    sn J |                     dd          \  }}||j        z  |j        |z  cxk    rt          |j                  k    sn J ||z  |                                z  | k    sJ d S )N)r   r   T)	normalize)r4  sort)r/   r[  r  r3   rs   r  )r   r  rU   s      rk   #test_normalize_sort_diogonalizationr6  	  s      A==4=((DAqQS5ACE((((S[[((((((==4d=33DAqQS5ACE((((S[[((((((Q3quuww;!rm   c                  2    t          t          d            d S )Nc                  F    t          g dt          ddg           g          S )Nr   r   r   r   r   rm   rk   r   z!test_issue_5321.<locals>.<lambda>	  s#    vyyy&Ar2B2B&CDD rm   )rM   r   r   rm   rk   test_issue_5321r9  	  s    
:DDEEEEErm   c            	         t          j        t          d          dt          d          z            t          g dg dg          k    sJ t          j        t          d          dt          d          z            t          ddgddgddgddgg          k    sJ t          } |                      | t          d                     | dt          d          z                      t          g dg dg          k    sJ d S )Nrc   )r   r   rc   r   )r   r   r   rc   r   r   )r/   hstackr3   vstackr0   r  s    rk   test_issue_5320r=  	  s+   =Q3q66**f6 / /     =Q3q66**f	
A	
A	
A	
A	6 / /     C::cc#a&&kk33qQx==11V= 6 6      rm   c                      t          dgg          } t          |           }t          j        ||           t          ddgg          k    sJ t          j        ||           t          dgdgg          k    sJ d S r5  )r/   r   r;  r<  )r   AIms     rk   test_issue_11944r@  	  sz    uA
!**C=a  FQF8$4$44444=a  FQC!:$6$6666666rm   c                     g d} g d}t          g d          }|j        }fd}t          D ] |           } |          } ||                    |          |            ||                    |j                  |            ||j                            |j                  |            ||j                            |          |           t	          t
          d            d S )Nr   r   )r   r   r   c                 B    || k    sJ t          |           k    sJ d S re   )rf   )r   r  rz   s     rk   r  ztest_cross.<locals>.test	  s'    axxxxAww#~~~~~~rm   c                  p    t          ddddg                              t          ddddg                    S r   rA  r   rm   rk   r   ztest_cross.<locals>.<lambda>	  s8    q!aV""6!QA#7#788 rm   )r/   r  ro   rB  rM   r&   )rY   rZ   r<  r;  r  r   r~  rz   s          @rk   
test_crossrD  	  s   		A		A


C
%C         CFFCFFQWWQZZQWWQS\\3QSYYqs^^S!!!QSYYq\\3
: 9 9 : : : : :rm   c                  v   t           dd          D ]l} |                     d          |                     d          h}t          |          dk    r+|                                |                     d          k    sJ mt           d d         D ],} t	          |                     d          t
                    rJ -d S )Nr   r   rc   )ro   r3   r  popr   r   )rz   r  s     rk   	test_hashrG  	  s    rss| 5 5WWQZZ$1vv{{quuww#''!**44444rr{ 4 4cggajj(3333334 4rm   c                  R     t           d          t          t           fd           d S )Nr   c                  H    t                               d                    S r5  )hashr3   r  s   rk   r   z!test_issue_3979.<locals>.<lambda>
  s    4

#3#3 rm   )ro   rM   r*  r  s   @rk   test_issue_3979rK  	  s.     !*C
>333344444rm   c                      dt           gddgg} t          ddgt            dgg          }t          D ]%}| ||                                           k    sJ &d S Nr   r   )r
   r/   ro   adjoint)r  r  rz   s      rk   test_adjointrO  
  sq    q6Aq6
C
1a&A2q'"
#
#C ) )cc#hh&&((((((() )rm   c                      t          t          t          t                    dz  t	          t                    dz  z   gg                    t          dgg          k    sJ d S )Nrc   r   )r$   r-   r   r]   r   r   rm   rk   test_simplify_immutablerQ  
  sa    Oc!ffai#a&&!)&;%<$=>>??#aSE**+ + + + + +rm   c                      t          dt                    \  t          ddfd          } t          ddfd          }|                              }|| k    sJ d S )NF, Gr  rc   c                       | |z             S re   r   )rj   r  Gs     rk   r   ztest_replace.<locals>.<lambda>
      !!AaC&& rm   c                       | |z             S re   r   rj   r  r,  s     rk   r   ztest_replace.<locals>.<lambda>
  rV  rm   )r   r   r/   replace)Kr   Nr,  rU  s      @@rk   test_replacer\  
  sr    6x(((DAqq!(((())Aq!(((())A			!QA666666rm   c                  j   t          dt                    \  } t                      5  t          dd | d           d           | d          if | d           d           | d          if | d           d           | d          if | d           d           | d          ifg          }d d d            n# 1 swxY w Y   t          ddfd          }t	          t
          d          5  |                    | d	          }d d d            n# 1 swxY w Y   ||k    sJ d S )
NrS  r  rc   r   r   c                       | |z             S re   r   rX  s     rk   r   z"test_replace_map.<locals>.<lambda>
  rV  rm   F)test_stacklevelT)r   r   rR   r/   rS   rL   rY  )rU  rZ  r   r[  r,  s       @rk   test_replace_mapr`  
  s   6x(((DAq		!	! G G1a11Q44!!A$$!.1!aadd|0D1Q44!!A$$!.1!aadd|0DF G GG G G G G G G G G G G G G G G 	q!(((())A	&	>	>	> " "IIaD!!" " " " " " " " " " " " " " "666666s$   BCCC<D  D$'D$c                  $   t          ddgt          ddt          z  z
  gg          } |                                 t          j        t          d          t          j        t          hk    sJ |                     t                    t          hk    sJ d S r   )r/   r]   atomsr   r  NegativeOner   r   s    rk   
test_atomsrd  "
  ss    AA!G%&&A7799qttAM155555776??qc!!!!!!rm   c            	        	 t          t          t          gt          t          gg          } t          |                     d                    t          |                                           k    sJ t          ddgddgddgg          t          g d	g d
g          t          t          t          g          g}|D ]l}|                    d          }||z  }||z  }t          ||z            |k    sJ t          ||z            |k    sJ |j        |k    sJ |j        |k    sJ m|D ]y}t          |                    d                    }||z  }||z  }t          ||z            |k    sJ t          ||z            |k    sJ |j        |k    sJ |j        |k    sJ zddl	m
	 |                     d          }|                                 }t          dt          dt          dt          di}t          	fdt          |                    |          |                    |                    D                       sJ d S )NRDr`  r  h   i  rb   r   r   )r   r   r   )r  r     EDr   )compi_ib,  i  ij  c              3   ~   K   | ]7\  }} |                                 |                                           V  8d S re   r   )ri   rj   r  rj  s      rk   rl   ztest_pinv.<locals>.<genexpr>O
  sW       
 
Aq 	QSSUUACCEE
 
 
 
 
 
rm   )r/   rY   rZ   r[   r\   r$   pinvr  r%  sympy.core.numbersrj  rq   zipr   )
A1Asr   A_pinvAApApAr  wrepsrj  s
            @rk   	test_pinvrv  (
  s|   	!Q!Q 	!	!BBGG4G(())Xbffhh-?-????? 2s)dAYQ0
1
1
)))\\\*
+
+
!Q..
B   t$$&jqja  A%%%%f%%////u||||u|||||   !&&&--..&jqja  A%%%%f%%////u||||u||||| ('''''
tA
Avq%E1e4D 
 
 
 
taffTll33
 
 
 
 
 
 
 
 
 
rm   c            	          t          g dg dg dg dg dg dg          g} | D ]<}|                    d          }||z  }||z  }|j        |k    sJ |j        |k    sJ =d S )	N)=   r   7   r  r  r   )>   `   U   r|  r  r   )E   8   r  r   6   r   )r   r  [   )   r  r   )r   r  r   r   Z   r   )r   r   r   r   r   r   ri  r`  )r/   rl  r%  )rp  r   rq  rr  rs  s        rk   3test_pinv_rank_deficient_when_diagonalization_failsr  U
  s     	###############  	! 	!
B   t$$&jqju||||u||||| rm   c                      t          dd          t          dd          z   t          ddg           k    sJ t          dd          t          dd          z   t          ddg           k    sJ d S rM  )r6   r/   r   rm   rk   test_issue_7201r  k
  sl    1::Q

"fQ2&6&666661::Q

"fQ2&6&6666666rm   c                      t           t          t          t          fD ]'}  | t          gdgg          j        t          hk    sJ (d S r  )r-   r.   r/   r0   r]   free_symbolsr   s    rk   test_free_symbolsr  o
  sN    3V\I 1 1q1#s}})aS000001 1rm   c                      	 ddl m  n# t          $ r t          d           Y nw xY wt	            g d                    t	          g d          k    sJ t	            g dg                    t	          g dg          k    sJ t	            g dg dg                    t	          g dg dg          k    sJ t	            t
          t          t          g                    t	          t
          t          t          g          k    sJ t          t           fd           t	            ddg            d	d
g          g          t	          ddgd	d
gg          k    sJ t	            ddg          d	d
gg          t	          ddgd	d
gg          k    sJ t	            g             g           g          t	          g           k    sJ dS )zSee issue 7465.r   array?NumPy must be available to test creating matrices from ndarraysr   r]  c                  P    t            ddgddggddgddggg                    S )	Nr   rc   rb   r   r   r   r   r   r   r  s   rk   r   z#test_from_ndarray.<locals>.<lambda>
  s8    uu1v1v.!Q!Q0@ABBCC rm   r   rc   rb   r   N)
numpyr  ImportErrorrP   r/   r]   r^   r_   rM   NotImplementedErrorr  s   @rk   test_from_ndarrayr  s
  s/   P P P PNOOOOOP %%			""##viii'8'88888%%$$%%)<)<<<<<%%III.//00			999%&&' ' ' '%%Aq	""##vq!Qi'8'88888
CCCCE E E55!Q==%%A--011VaVaV<L5M5MMMMM55!Q==1a&)**fq!fq!f5E.F.FFFFF5599eeBii())VBZZ777777s   
 &&c                     ddl m}  	 ddlm}m} n# t
          $ r t          d           Y nw xY w |  |ddgddgg                    }|d         dk    sJ t          |          g d	k    sJ t          t                    5   |  |ddgddgg                    }d d d            n# 1 swxY w Y   |d         dk    sJ t          |          g d	k    sJ d S )
Nr   
_matrixify)r  matrixzPNumPy must be available to test indexing matrixified NumPy ndarrays and matricesr   rc   rb   r   r  )
sympy.matrices.commonr  r  r  r  r  rP   ru   rK   PendingDeprecationWarning)r  r  r  r{   s       rk   test_17522_numpyr  
  sy   000000a''''''''' a a a_`````a 	
551a&1a&)**++AQ41999977lll""""	2	3	3 1 1Jvv1v1v.//001 1 1 1 1 1 1 1 1 1 1 1 1 1 1Q41999977lll""""""s    --B**B.1B.c                      ddl m}  	 ddlm} n# t          $ r t          d           Y nw xY w |  |ddgddgg                    }|d         d	k    sJ t          |          g d
k    sJ d S )Nr   r  )r  zEmpmath must be available to test indexing matrixified mpmath matricesr   rc   rb   r         @)r  g       @r  r  )r  r  mpmathr  r  rP   ru   )r  r  r{   s      rk   test_17522_mpmathr  
  s    000000V!!!!!!! V V VTUUUUUV 	
66Aq6Aq6*++,,AQ43;;;;77*********    ++c                      ddl m}  	 ddlm} n# t          $ r t          d           Y nw xY w |  |ddgddgg                    }|d         dk    sJ t          |          g d	k    sJ d S )
Nr   r  )
csr_matrixzJSciPy must be available to test indexing matrixified SciPy sparse matricesr   rc   rb   r   r  )r  r  scipy.sparser  r  rP   ru   )r  r  r{   s      rk   test_17522_scipyr  
  s    000000[+++++++ [ [ [YZZZZZ[ 	
::1v1v.//00AQ41999977lll""""""r  c                      t          dt          gt           dgg          } | j        sJ dt          z  | d<   | j        du sJ t          | d<   | j        J | d         t          z  | d<   | j        du sJ d S )Nr   rc   r   Fr   r   )r/   r
   is_hermitianr]   ri  s    rk   test_hermitianr  
  s    A!Q !!A>cAdG>U""""AdG>!!!gaiAdG>U""""""rm   c                      t          t          t          t          d          gg          } | d         dt          z  k    sJ  | j                    t          dt          z  gg          k    sJ d S )NFr  r   rc   )r/   r   r]   r   ri  s    rk   	test_doitr  
  sf    Qq5)))*+,,AQ41Q3;;;;1688v!ug&&&&&&rm   c                  f   t          g dg dg dg          } |                     d           | t          g dg dg          k    sJ t          g dg dg dg          }|                    d           |t          g dg dg          k    sJ t          g dg dg dg          }|                    d           |t          g dg dg          k    sJ t          g dg dg dg          t          t          fd	           t          g dg dg dg          t          t          fd
           t          g dg dg dg          } |                     d           | t          ddgddgddgg          k    sJ t          g dg dg dg          }|                    d           |t          ddgddgddgg          k    sJ t          g dg dg dg          t          t          fd           t          g dg dg dg          t          t          fd           d S )Nr   ri  r   r   r   )r   r   r   )r   r   r  r   c                  .                          d          S r   row_delr  s   rk   r   z+test_issue_9457_9467_9876.<locals>.<lambda>
      qyy}} rm   c                  $      j         d          S Nr   r  rT   s   rk   r   z+test_issue_9457_9467_9876.<locals>.<lambda>
      yqy~~ rm   rb   rc   r   r   c                  .                          d          S r   col_delr  s   rk   r   z+test_issue_9457_9467_9876.<locals>.<lambda>
  r  rm   c                  $      j         d          S r  r  rT   s   rk   r   z+test_issue_9457_9467_9876.<locals>.<lambda>
  r  rm   )r/   r  rM   r  r  )r   r[  Or  rU   s      @@rk   test_issue_9457_9467_9876r  
  s   			999iii011AIIaLLL			999-......			999iii011AIIbMMM			999-......			999kkk233AIIbMMM			999-......			999iii011A
:,,,,---			999iii011A
:----... 				999iii011AIIaLLLAAA/000000			999iii011AIIbMMMAAA/000000			999iii011A
:,,,,---			999iii011A
:----.....rm   c                  z   t          dd          \  } }t          d          \  }}t          d          }t          dd| ||t          g          }|| z  |z  | |z  |z  k    sJ ||z  |z  ||z  |z  k    sJ | |z  || z  k    sJ ||z  ||z  k    sJ || z  |z  t          || z  dgd|| z  gg          k    sJ d S )Nr  F)commutativeza brc   r   )r   r3   r/   r_   )r]   r^   rY   rZ   r   M1s         rk   test_issue_9422r  
  s    5e,,,DAq5>>DAqAA	1q!Ql	#	#BQ3q5AaCE>>>>Q3q5AaCE>>>>R42a4<<<<R42a4<<<<Q3q5FQqS!Hq!A#h/00000000rm   c                  h   t          g           } ddgt          g d          f}ddg|d         j        f}ddgt          ddgdd	gg          f}|||fD ]]\  }}|D ]U}t          | |          }d
|v r ||          n |d|          }||k    r t          |          t          |          k    sJ V^d S )Nr7  r0  )r   r   rb   r4  r2  r   rc   rb   r   joinr8  )r/   r  r  id)	r   rY   rZ   r[   opsr{   opr  news	            rk   test_issue_10770r  
  s    r

A	z"F999$5$55A	z"AaDF*A	|$fq!fq!f-=&>&>>Aa) 1 1Q 	1 	1B2A B,,!!A$$$AAb!HHC!8832a55 0 0 0 0 0	11 1rm   c                     t          g dg dg dg          } |                     g dg d          t          ddgdd	gd
dgg          k    sJ |                     g dg d          t          dgdgd
gg          k    sJ |                     g dg d          t          g dg          k    sJ |                     g dg d          t          g dg dg          k    sJ |                     g dg d          t          ddg           k    sJ |                     g dg d          t          ddg           k    sJ |                     g dg d          t          dgdgg          k    sJ d S )Nr   r]  r  r   )TTFr   rc   r   r   r   r   )TFF)TFT)FFFrb   r   )FTF)r/   r   r   s    rk   test_issue_10658r  
  s   			999iii011A99YYY 3 3 344AAA'(() ) ) )99YYY 4 4 455!qcA39P9PPPPP99)))999559L9LLLLL99((()))44			999%&&' ' ' '99YYY 5 5 566&Ar:J:JJJJJ99***III66&Ar:J:JJJJJ99(((*>*>*>??aSz     rm   c                  v   t          ddt          d          z  z   dgdt          d          z  dz  dz   dt          d          z  dz  gg          } |                                 dk    sJ t          ddt          d          z  t          z  z   dgdddt          d          z  t          z  z   gg          } t	          |                                 d	         t          ddddt          d          z  t          z  z   z  gd	d	gg          z
            t          dd          k    sJ t          d
          \  }}}}}}}}}	}
}}t          ||||z  ||z  d	g||||z  ||z  d	g||||z  ||z  dg||||z  ||z  dg|	|
d|	z  |z  |	|z  z
  d|
z  |z  |
|z  z
  d	gg          } |                                 dk    sJ d S )Nr-  r   rc   r   rb   r  r   r   r   z/a_x a_y b_x b_y c_x c_y d_x d_y e_x e_y t_0 t_1)r/   r   rv  r
   r$   r0  r<   r   )r{   axaybxbycxcydxdyexeyt0t1s                rk   !test_opportunistic_simplificationr  
  s*    	aQi$r$q''z!|a'7DGGA&FGHHA6688q==== 	1T!WW9Q;#Qr!DGG)A+~$6788AAFFHHQK&1b!aQik/.B*CaV)L"M"MMNNRWXY[\R]R]]]]] +22c*d*d'Br"R2bBr"RBr"uRU1%r"RU2b5&;R2b5Bq<QSUVXY[\^Y^_abd_defRgiklnopqsostvovwyz|w|o|}~  @B  ~B  CE  ~E  FH  IK  FK  ~K  LM  iN  O  	P  	PA6688q======rm   c                     t          g dg dg          } |                                 d         t          g dg dg          z
                                  dk     sJ t          g dg dg d	g          }t          g d
g dg dg          }t          g dg dg d	g          }|                                |z
                                  dk     sJ |                                |z
                                  dk     sJ d S )N)g~jth?gRM@g(\M@)gDl)@gQgp=
cG@r   )r  r   r   )r   r  r  V瞯<)q7K<r  r   )      r   r   r   )r  r  r  )r                 @)r  r  r  )r   r  r  )r  r  g      )r/   r0  r  r  )mmm_mixedm_floatm_invs       rk   test_partial_pivotingr    sf   
 $$$&;&;&;<==BGGIIaL6#3#3#3#3#3#3#5 6 6 67;tvvF F F F ooo%oo%oo' ( (G ''''''''') * *G (((((((((* + +E
 KKMME!''))E1111KKMME!''))E111111rm   c                      t          g dg dg dg          } |                     d           d         }t          g dg dg d	g          }||z
  }|                                d
k     sJ |d         dk    sJ dS )z When doing numerical computations, all elements that pass
    the iszerofunc test should be set to numerically zero if they
    aren't already. )?皙gɿr   )皙r  gٿr   )r  r  g333333?r   c                 (    t          |           dk     S )Ng [n<)r   r  s    rk   r   z*test_iszero_substitution.<locals>.<lambda>*  s    Q rm   r_  r   )r  r   g4iҤIӿr   )r   r  glٲer   r  r  r  N)r/   r0  r  )r{   m_rref	m_correctm_diffs       rk   test_iszero_substitutionr  #  s     	$$$%9%9%9:N:N:NOPPAVV55V66q9F999:[:[:[\}\}\}~IiF;;==5    #;!rm   c            	         ddl m}  dt          t          t	          dd          z            z  t          t          t	          dd          z            t          d          z   z  }dt          d          z  t          t          t	          dd          z            dz  z  d	t          t          t	          dd          z            z  z   d
t          t          t	          dd          z            dz  z   z  } | dd          } | dt          d                     } | ||          }t          |t          |          z
  |t          |          z
  g          }t          ||z
  ||z
  g          }t          t          ||z
            t          ||z
            g          }d }	|                    d|	          dk    sJ |                    d|	          dk    sJ |                    d|	          dk    sJ d S )Nr   )Pointr   r  -   rb   r  rc   r   r   r   c                 B    t           | j                              dk     S )Ng#B;)r   ry   r  s    rk   r   z"test_issue_11238.<locals>.<lambda>?  s    #cacee**u$ rm   T)r$   r  )	sympy.geometry.pointr  r   r   r   r   r/   r$   rv  )
r  xxyyp1p2p0r  r  m3Zs
             rk   test_issue_11238r  1  s   ******	
3r(2r"""##	#SHR,<,<)<%=%=Q%G	HB
T!WW*SHR,,,--q0
02c"Xb"=M=M:M6N6N3N
NQSVYZ\]efhjl]m]mZmVnVnpqVqQq	rB	q!B	q477(		B	r"B	hrll"B"$56	7	7B	b"r'"	#	#B	"r'""HR"W$5$56	7	7B
 	%$A77DQ7//1444477DQ7//1444477DQ7//1444444rm   c                  0   t          ddg d          } | t          j        z  }| |z   }t          D ]f} ||                                          \  }}t          |          t          |           k    sJ t          |          t          |           k    sJ gd S )Nrc   r  )r/   r   ImaginaryUnitro   as_real_imagru   )r  r  r  klsrY   rZ   s         rk   test_as_real_imagr  D  s    	!III		B	AO	B	bB # #c"gg""$$!Aww$r((""""Aww$r(("""""# #rm   c                      t          ddg d          } |                                 \  }}|d         t          dddg          k    sJ |d         t          ddg d          k    sJ d S )Nrb   r  r   rc   r   )rc   r   r   rc   )r/   jordan_cells)r{   r  Jcellss      rk   test_deprecatedr  N  s}    
 	q!22233A  IAv!9q!aS))))))!9q!\\\22222222rm   c                      ddl m}  t          g d          }t          g d          } | |d          t          g d          k    sJ  | |d          t          g d          k    sJ d S )	Nr   )Mod)r   r   rc   )r   r  r  rb   )rc   r   rc   r   )rc   r   r   )sympy.core.modr  r/   )r  r   r~  s      rk   test_issue_14489r  Y  s    """"""zzzA}}}A3q!99yyy))))))3q!99yyy))))))))rm   c                      	 ddl m}  n# t          $ r t          d           Y nw xY wt	          ddgddgg          } | |t
                    j        j        d	k    sJ d S )
Nr   r  r  r   rc   rb   r   )dtypefloat64)r  r  r  rP   r/   floatr   name)r  r   s     rk   test_issue_14943r  a  s    P P P PNOOOOOP 	1!u~A5%   &+y888888s   	 %%c                      t          ddd          } t          d          }| d         dk    }t          |          dk    sJ d S )Nr{   r   rY   r   r   zm[0, 0] > 0)r?   r   r  )r{   rY   s     rk   test_case_6913r  k  sH    S!QAsA	$	Aq66]""""""rm   c                      t          ddd          } t          d          }|                     |          || ik    sJ d S )Nr   rb   rY   )r?   rF   match)r   rY   s     rk   test_issue_11948r	  q  sC    S!QAS		A771::!Qrm   c                     t          dt          g          t          dt           g          g} t          j        |  t          dgt          gg          t          dgt           gg          gk    sJ t          dt          dg          t          t          dt           g          g} t          j        |  t          dgt          gdgg          t          t          dz  gt          d          dz  gt           gg          gk    sJ t          dt          gdt           gg          }|                                \  }}||j        z  t          j        d          k    sJ d S )Nr   r   rc   )r/   r
   orthogonalizer   QRdecompositionr%  r3   )vecsr   rU   r   s       rk   test_gramschmidt_conjugate_dotr  v  sQ   Aq6NNFAr7OO,D&	!qc
		VaSA2$K0012 2 2 2 Aq!9vq!aRj112D&	!qcA3	 	 &1Q3%!A$$q&QB4)@"A"ABC C C C 1a&1qb'"
#
#C  DAqqs7fjmm######rm   c                  "   t          t          ddd                    } t          t          ddd                    } | j        |          }t          || d                   }t          || d                   }||d         k    sJ |dk    sJ d S )NrY   rb   r   rZ   r   r   )r/   r?   rE  r   )rY   rZ   r[   r\   r  s        rk   test_issue_8207r    s    |CA&&''A|CA&&''AaAQ$AQ$A$<<<<666666rm   c            	      L   ddl m}  t          ddgddgg                              t	          t
          t          z            t
                    t          t	          t                    t	          dt          z            t	          t                    z
  gdt	          dt          z            gg          k    sJ t          ddgddgg          t          z  dz                      t          t
                    t
                    t          t          d          dz  t          d           dz  gt          d           dz  t          d          dz  gg          k    sJ t          t          d            t          t          fd	           t          g d
g d
g dg dg                              t          t
                    t
                                                    k    sJ t          t          fd           t          ddgddgg          t                              t          t
                    t
                    dz            k    sJ t          g dg dg dg          t                               | t
          d          t
                    dz            k    sJ t          g dg dg dg dg                              t          t
                    t
                                                    k    sJ t          g dg dg dg dg                              t          t
          t          z            t
                    t          t          t          z                                                      k    sJ d S )Nr   )nthrootr   rc   rb   r   r   c                  v    t          d                              t          t                    t                    S r  )r<   analytic_funcr   r]   r   rm   rk   r   ztest_func.<locals>.<lambda>  s"    a 6 6s1vvq A A rm   c                  n     t           z                      t          t                     t                     S re   )r]   r  r   r   s   rk   r   ztest_func.<locals>.<lambda>  s!    1 3 3CFFA > > rm   )r   r   r   rb   )r   r   r   r   )r   r   r   r   c                  ^                          t          t                    t                    S re   )r  r   r]   r   s   rk   r   ztest_func.<locals>.<lambda>  s    Q ; ; rm   r  r   "   )rb   r  r   )r   r   r   )r   r   r   r   )r   rc   r   r   )r   r   rb   r   )r   r   r   rb   )r   rc   r   r   )r   r   r   rc   )r   r   r   rb   r  )sympy.simplify.simplifyr  r/   r  r   r]   r`   r   r   r   rM   r   r   r$   r   )r  r   s    @rk   	test_funcr    s6   //////A1vA??3qs88Q''6CFFC!HHs1vv<M3NQRTWXYZ[X[T\T\P]2^+_+_____A1vAFQJ%%c!ffa00FT!WWQYaQR
<SW[\]W^W^V^_`V`bfghbibijkbkUl;m4n4nnnnn :AABBB
:>>>>???}}}MNNA??3q661%%0000
:;;;;<<<R"b"##AAOODGGQ//233q8888[[[+++677AAOOGGAqMM155q899Q>>>>lllLLL,,,GHHA??3q661%%0000lllLLL,,,GHHA??3qs88Q''6(AaC99;;2G2G+H+HHHHHHHrm   z$Cannot create threads under pyodide.c                      d } t          d          5  t          j                                        5 }|                    |           }|                                sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                  V    t           j        d k    sJ t          dgg          } | | z  } dS r   )rD   stater/   r   s    rk   r  ztest_issue_19809.<locals>.f  s3    !'4////QC5MMEtrm   T)r@   
concurrentfuturesThreadPoolExecutorsubmitresult)r  executorfutures      rk   test_issue_19809r$    s      
T		 # #2244 	#__Q''F==??""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	## # # # # # # # # # # # # # # # # #s4   B,A+B+A/	/B2A/	3BB
Bc                      t          t          t          g          } t          | t          ddft          ddf          t          t          j        gt          j        gg          k    sJ d S rM  )r/   r]   r^   r   r   r   r   s    rk   test_issue_23276r&    si    1vAQAq	Aq!9--	
	
9 2 2      rm   (4  r  concurrent.futuresr  collections.abcr   sympy.core.addr   sympy.core.functionr   r   r   rm  r   r	   r
   r   r   r   r   r   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   $sympy.functions.elementary.complexesr   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.miscellaneousr   r   r   (sympy.functions.elementary.trigonometricr   r   r   sympy.integrals.integralsr   sympy.polys.polytoolsr   r    sympy.printing.strr!   sympy.sets.setsr"   r  r#   r$   sympy.simplify.trigsimpr%   sympy.matrices.matricesr&   r'   r(   r)   r*   r+   sympy.matricesr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   sympy.matrices.utilitiesrD   
sympy.corerE   rF   (sympy.functions.special.tensor_functionsrG   sympy.utilities.iterablesrH   rI   rJ   sympy.utilities.exceptionsrK   rL   sympy.testing.pytestrM   rN   rO   rP   rQ   rR   rS   sympy.assumptionsrU   sympy.tensor.arrayrV   sympy.matrices.expressionsrW   sympy.algebrasrX   r   rY   rZ   r[   r\   r]   r^   r_   r`   ro   r|   r   r   r   r   r   r   r   r   r   r  r  r	  r  r   r%  r)  r1  r5  r9  r=  rC  rF  rI  rL  rQ  rT  rW  r\  rd  ri  rl  rp  rs  rw  rz  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+  r0  r2  r?  rH  rJ  r`  rj  rm  rp  rs  rv  ry  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  r  r  rn  rr  rt  rv  ry  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  r  r  r"  r.  r2  r6  r9  r=  r@  rD  rG  rK  rO  rQ  r\  r`  rd  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$  r&  r   rm   rk   <module>rD     s        $ $ $ $ $ $       8 8 8 8 8 8 8 8 8 8 L L L L L L L L L L L L L L L L L L L L             " " " " " " / / / / / / / / & & & & & & 4 4 4 4 4 4 = = = = = = = = E E E E E E E E E E D D D D D D D D D D / / / / / / 2 2 2 2 2 2 2 2 # # # # # # % % % % % % 8 8 8 8 8 8 8 8 , , , , , ,               L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L 8 7 7 7 7 7 " " " " " " " " C C C C C C @ @ @ @ @ @ @ @ @ @ O O O O O O O OA A A A A A A A A A A A A A A A A A       $ $ $ $ $ $ - - - - - - % % % % % % , , , , , , , , , , , , , , , , , , , , <2G
H
+ 
+ 
+
! 
! 
!+ + +
& & &  
9 9 9) ) )XJ6 J6 J6Z^J ^J ^JB? ? ?  _ _ _*J *J *JX_ _ _
% % %
' ' '
     
6 6 6% % %
; ; ;
5 5 5
  8G G GP P P
y y y
	8 	8 	8$ $ $
) ) )& & &$< < << < << < << < << < <  K K K&d d d  &K K K0L2 L2 L2^    F F FD D D+ + +84 4 4P P P1 1 1  $
: 
: 
:  <7M 7M 7Mt  .     8! ! !"A A AG G G2 2 2"     "$ $ $$- - -      :& & &    >9 9 9$ $ $"        *  ) ) )      
. 
. 
.	 	 	* * *F F F! ! !@ @ @.6 6 6& & &8 8 8G G G$1 1 1&3 3 3@E! E! E!P
1 
1 
1H% H% H%V& & &&' ' '"  $4 4 4.  L L L) ) )2  
 
 
  ! ! !$;6 ;6 ;6z" " "I I IG G G
U U U$4( 4( 4(nP P P! ! !%I %I %IPZ Z Zz. . .&  "  F F FH H H         $< < <"> "> ">JD D D- - -; ; ;- - -"8 8 8
/ / /( ( (1 1 1
( ( (.3 3 3(? ? ?G G G4 4 4\ \ \p p p& & &(* * *&  F F F  "7 7 7: : :(4 4 4 5 5 5) ) )+ + +    " " "*
 *
 *
Z    (7 7 71 1 18 8 8$# # # 	+ 	+ 	+	# 	# 	## # #' ' '
/ / /8	1 	1 	1	1 	1 	1     2 2 20  5 5 5&# # #3 3 3* * *9 9 9# # #     
$ $ $  I I I< :;;# # <;#    rm   