
    sgE                     |   d dl mZ d dl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mZmZ d dlmZ d dlmZ d d	lZ ed
      \  ZZZd Zd Zd Zd Zd Z ed        Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(ed        Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;y	)+    )StringIO)SsymbolsEqpiCatalan
EulerGammaFunction)Equality)	Piecewise)MatrixMatrixSymbol)OctaveCodeGencodegenmake_routine)raises)XFAILNzx,y,zc                      t               } t               }| j                  g |ddd       |j                         }|dk(  sJ y )NfileFheaderempty )r   r   dump_mgetvalue)code_genoutputsources      \/var/www/html/venv/lib/python3.12/site-packages/sympy/utilities/tests/test_codegen_octave.pytest_empty_m_coder       s>    HZFOOBuEOB__FR<<    c                      dt         t        z   t        z  f} t        | ddd      \  }|d   dk(  sJ |d   }d}||k(  sJ y )	NtestOctaveFr   r   test.m   z7function out1 = test(x, y, z)
  out1 = z.*(x + y);
end
xyzr   	name_exprresultr   expecteds       r   test_m_simple_coder/      s[    !a%#Ii%uEGF!9   AYF	 
 Xr!   c                      dt         t        z   t        z  f} t        | ddd      \  }|d   dk(  sJ |d   }d	t        j
                  z   d
z   }||k(  sJ y )Nr#   r$   TFr   r   r%   r&   z^function out1 = test(x, y, z)
  %TEST  Autogenerated by SymPy
  %   Code generated with SymPy z}
  %
  %   See http://www.sympy.org/ for more information.
  %
  %   This file is part of 'project'
  out1 = z.*(x + y);
end
)r(   r)   r*   r   sympy__version__r+   s       r   test_m_simple_code_with_headerr3   %   st    !a%#Ii$eDGF!9   AYF	+-2->->	?B	  Xr!   c                      t        t        t        t        z         } d| f}t	        |ddd      \  }|d   }d}||k(  sJ y )Nr#   r$   Fr   r&   z)function z = test(x, y)
  z = x + y;
end
)r   r*   r(   r)   r   exprr,   r-   r   r.   s        r   test_m_simple_code_nameoutr7   8   sP    AADIi%uEGFAYF	 
 Xr!   c                      dt         t        z  f} t        | ddd      \  }|d   }dt        j                  d      z  }||k(  sJ y )Nr#   r$   Fr   r&   z+function out1 = test()
  out1 = pi^%s;
end
   )r   r   r   evalfr+   s       r   test_m_numbersymbolr;   E   sU    W%Ii%uEGFAYF	 	b	H
 Xr!   c                  n    dt         t        z  t        gf} t        | dddd      \  }|d   }d}||k(  sJ y )Nr#   r$   Fr   r   inliner&   zfunction [out1, out2] = test()
  Catalan = 0.915965594177219;  % constant
  EulerGamma = 0.5772156649015329;  % constant
  out1 = pi^Catalan;
  out2 = EulerGamma;
end
)r   r   r	   r   r+   s       r   test_m_numbersymbol_no_inliner?   Q   sQ     "g+z23Ii%!%1GFAYF	  Xr!   c                      t         t        z   } t        d| t        t         t        gd      }t	               }t               }|j                  |g|ddd       |j                         }d}||k(  sJ y )Nr#   octave)argument_sequencelanguageFr   z2function out1 = test(z, x, y)
  out1 = x + y;
end
)r(   r)   r   r*   r   r   r   r   )r6   routiner   r   r   r.   s         r   test_m_code_argument_orderrE   c   sm    q5D64Aq!9xXGHZFOOWIvve5OI__F	 
 Xr!   c                      t         t        z   t        z  } t         t        z
  t        z  }d| |gf}t        |ddd      \  }|d   }d}||k(  sJ y )Nr#   r$   Fr   r&   zTfunction [out1, out2] = test(x, y, z)
  out1 = z.*(x + y);
  out2 = z.*(x - y);
end
r'   )expr1expr2r,   r-   r   r.   s         r   test_multiple_results_mrI   r   s_    UAIEUAIE%(Ii%uEGFAYF	  Xr!   c                     t        d      \  } }}t        |t        t        z   t        z        }t        | t        t        z
  t        z        }t        |dt        z        }d|||gf}t        |ddd      \  }|d   }d}	||	k(  sJ y )	NA,B,C   r#   r$   Fr   r&   zVfunction [C, A, B] = test(x, y, z)
  C = z.*(x + y);
  A = z.*(x - y);
  B = 2*x;
end
r   r   r(   r)   r*   r   
ABCrG   rH   expr3r,   r-   r   r.   s
             r   test_results_named_unorderedrS      s    gGAq!QQ	"EQQ	"EQ!E%./Ii%uEGFAYF	  Xr!   c            	      H   t        d      \  } }}t        |t        t        z   t        z        }t        | t        t        z
  t        z        }t        |dt        z        }d|||gf}t        |dddt        t        t        f      }|d   d   dk(  sJ |d   d	   }d
}	||	k(  sJ y )NrK   rL   r#   r$   Fr   r   rB   r   r%   r&   zVfunction [C, A, B] = test(x, z, y)
  C = z.*(x + y);
  A = z.*(x - y);
  B = 2*x;
end
rM   rN   s
             r   test_results_named_orderedrV      s    gGAq!QQ	"EQQ	"EQ!E%./IYe()1ay2F!9Q<8###AYq\F	  Xr!   c                  l   ddl m} m}m} d |t               | t
              z    |t              z   dz  j                          |  |  |  |  |  |  |  | t        t
        z   t        z                                                   gf}t        |ddd      }|d   d   dk(  sJ |d   d	   }d
}||k(  sJ y )Nr   )cossintantestlong   r$   Fr   z
testlong.mr&   a5  function [out1, out2] = testlong(x, y, z)
  out1 = sin(x).^3 + 3*sin(x).^2.*cos(y) + 3*sin(x).^2.*tan(z) + 3*sin(x).*cos(y).^2 + 6*sin(x).*cos(y).*tan(z) + 3*sin(x).*tan(z).^2 + cos(y).^3 + 3*cos(y).^2.*tan(z) + 3*cos(y).*tan(z).^2 + tan(z).^3;
  out2 = cos(cos(cos(cos(cos(cos(cos(cos(x + y + z))))))));
end
)	(sympy.functions.elementary.trigonometricrX   rY   rZ   r(   r)   r*   expandr   )rX   rY   rZ   r,   r-   r   r.   s          r   test_complicated_m_codegenr_      s    HHAQ#a&(1,446CCCAEAI$7 89:;<=I YeDF!9Q<<'''AYq\F	  Xr!   c                     ddl m} m} t        d      }d | dt        z        t        t         |t                     | t              t        | |dt        z              gf}t        |ddd      \  }|d   d	k(  sJ |d
   }d}||k(  sJ y )Nr   )rX   rY   afoorL   r$   Fr   foo.mr&   zkfunction [out1, y, out3, a] = foo(x)
  out1 = cos(2*x);
  y = sin(x);
  out3 = cos(x);
  a = sin(2*x);
end
)r]   rX   rY   r   r(   r   r)   r   )rX   rY   ra   r,   r-   r   r.   s          r   !test_m_output_arg_mixed_unorderedrd      s    CAQqS8As1v#6ACPQRSPSH@UVWIi%uEGF!9AYF	  Xr!   c                      t        dt        dk  ft        dz  t        dk  ft         dz   t        dkD  fdd      } d| f}t        |d	dd
      \  }|d   }d}||k(  sJ y )Nr   rL   r&   r&   TFevaluatepwtestr$   r   zfunction out1 = pwtest(x)
  out1 = ((x < -1).*(0) + (~(x < -1)).*( ...
  (x <= 1).*(x.^2) + (~(x <= 1)).*( ...
  (x > 1).*(2 - x) + (~(x > 1)).*(1))));
end
r   r(   r   pwr,   r-   r   r.   s        r   test_m_piecewise_rn      su    	Aq2v;AqAv!Aq1uySX	YB2Ii%uEGFAYF	  Xr!   c                      t        dt        dk  ft        dz  t        dk  ft         dz   t        dkD  fd      } d| f}t        |dddd	      \  }|d   }d
}||k(  sJ y )Nr   rf   rL   r&   rg   rj   r$   Fr=   zfunction out1 = pwtest(x)
  if (x < -1)
    out1 = 0;
  elseif (x <= 1)
    out1 = x.^2;
  elseif (x > 1)
    out1 = -x + 2;
  else
    out1 = 1;
  end
end
rk   rl   s        r   test_m_piecewise_no_inlinerp      sy     
Aq2v;AqAv!Aq1uy	IB2Ii%u"$GFAYF
	  Xr!   c                      ddt         z  dt        z  gfdt        dz  dt        z  gfg} t        | ddd      }|d	   d	   d
k(  sJ |d	   d   }d}||k(  sJ y )Nrb   rL   r\   bar   r$   Fr   r   rc   r&   zfunction [out1, out2] = foo(x, y)
  out1 = 2*x;
  out2 = 3*y;
end
function [out1, out2] = bar(y)
  out1 = y.^2;
  out2 = 4*y;
end
)r(   r)   r   r+   s       r   test_m_multifcns_per_filert      s{    1Q3!*%1ac{';=IYeDF!9Q<7"""AYq\F	  Xr!   c                      ddt         z  dt        z  gfdt        dz  dt        z  gfg} t        | ddd	      }|d
   d
   dk(  sJ |d
   d   }dt        j                  z   dz   }||k(  sJ y )Nrb   rL   r\   rr   rs   r$   TFr   r   rc   r&   zafunction [out1, out2] = foo(x, y)
  %FOO  Autogenerated by SymPy
  %   Code generated with SymPy z
  %
  %   See http://www.sympy.org/ for more information.
  %
  %   This file is part of 'project'
  out1 = 2*x;
  out2 = 3*y;
end
function [out1, out2] = bar(y)
  out1 = y.^2;
  out2 = 4*y;
end
)r(   r)   r   r1   r2   r+   s       r   "test_m_multifcns_per_file_w_headerrv   	  s    1Q3!*%1ac{';=IYUCF!9Q<7"""AYq\F	+-2->->	?B	   Xr!   c                  |     ddt         z  dt        z  gfdt        dz  dt        z  gfg t        t         fd       y )Nrb   rL   r\   rr   rs   c                  $    t         dddd      S )Nr$   rr   F)prefixr   r   )r   r,   s   r   <lambda>z1test_m_filename_match_first_fcn.<locals>.<lambda>#  s    wy uE K r!   )r(   r)   r   
ValueErrorrz   s   @r   test_m_filename_match_first_fcnr}   !  s@    1Q3!*%1ac{';=I
: K Lr!   c                      t        t        dt        z  t        t        z  gg      } dt        t        ddd      |       f}t        |ddd      }|d	   d	   d
k(  sJ |d	   d   }d}||k(  sJ y )NrL   r#   myout1r&   r\   r$   Fr   r   r%   =function myout1 = test(x, y, z)
  myout1 = [x 2*y pi*z];
end
)r   r(   r)   r   r*   r   r   r   )e2r,   r-   r   r.   s        r   test_m_matrix_namedr   '  s    	!QqS"Q$ 	!B,xA">CDIYeDF!9Q<8###AYq\F	 
 Xr!   c                      t        ddd      } t        t        dt        z  t        t
        z  gg      }dt        | |d      f}t        |ddd	      \  }|d   }d
}||k(  sJ y )Nr   r&   r\   rL   r#   Frh   r$   r   r   )r   r   r(   r)   r   r*   r   r   )r   r   r,   r-   r   r.   s         r   test_m_matrix_named_matsymr   5  ss    (Aq)F	!QqS"Q$ 	!B&"u=>Ii%uEGFAYF	 
 Xr!   c                      t        t        t        t        z   dgg      } d| f}t        |ddd      \  }|d   }d}||k(  sJ y )Nr\   r#   r$   Fr   r&   z5function out1 = test(x, y)
  out1 = [x x + y 3];
end
)r   r(   r)   r   r5   s        r   test_m_matrix_output_autonamer   C  sV    AqsA;- DIi%uEGFAYF	 
 Xr!   c                  (   t         t        z   } t        dt         z  dt        z  dt        z  gg      }t        t         gt        gt        gg      }t        t         t        gt        dgg      }d| |||ff}t	        |ddd      \  }|d   }d}||k(  sJ y )	NrL      r#   r$   Fr   r&   zfunction [out1, out2, out3, out4] = test(x, y, z)
  out1 = x + y;
  out2 = [2*x 2*y 2*z];
  out3 = [x; y; z];
  out4 = [x y; z 16];
end
)r(   r)   r   r*   r   )e1r   e3e4r,   r-   r   r.   s           r   test_m_matrix_output_autoname_2r   P  s    
a%B	!A#qsAaC!	"B	!qcA3	 B	!Q!R!	"B"b"b)*Ii%uEGFAYF	  Xr!   c            	      B   t        d      \  } }t        ddd      }t        |t        t        z   t
        z        }t        |t        ddt        gg            }t        | dt        z        }d|||gf}t        |dddt        t
        t        f	      \  }|d   }d
}	||	k(  sJ y )NzB,CrO   r&   r\   rL   r#   r$   FrU   zSfunction [C, A, B] = test(x, z, y)
  C = z.*(x + y);
  A = [1 2 x];
  B = 2*x;
end
)r   r   r   r(   r)   r*   r   r   )
rP   rQ   rO   rG   rH   rR   r,   r-   r   r.   s
             r   #test_m_results_matrix_named_orderedr   c  s    5>DAqS!QAQQ	"EQAq	{+,EQ!E%./Ii%u()1ay2GFAYF	  Xr!   c            	         t        ddd      } t        ddd      }t        ddd      }t        ddd      }dt        || d	d d f         t        || dd d f         t        || d d df         gf}t        |d
dd      \  }|d   }d}||k(  sJ y )NrO   rL   r\   rP   r&   rQ   Dr#   r   r$   Fr   zNfunction [B, C, D] = test(A)
  B = A(1, :);
  C = A(2, :);
  D = A(:, 3);
end
r   r   r   )rO   rP   rQ   r   r,   r-   r   r.   s           r   test_m_matrixsymbol_slicer   w  s    S!QAS!QAS!QAS!QA(1a1g."1a1g."1a1g.0 1I i%uEGFAYF	  Xr!   c            	          t        ddd      } t        ddd      }t        ddd      }dt        || ddddf         t        || ddd	df         gf}t        |d
dd      \  }|d	   }d}||k(  sJ y )NrO   r\   rs   rP   rL   rQ   r#   r   r&   r$   Fr   zDfunction [B, C] = test(A)
  B = A(1:2, 1:2);
  C = A(1:2, 2:3);
end
r   rO   rP   rQ   r,   r-   r   r.   s          r   test_m_matrixsymbol_slice2r     s    S!QAS!QAS!QA(1a!QqSk2"1a!QqSk24 5Ii%uEGFAYF	  Xr!   c            
          t        ddd      } t        ddd      }t        ddd      }dt        || d	d d
d df         t        || d d dd d df         gf}t        |ddd      \  }|d
   }d}||k(  sJ y )NrO         rP   rL   rQ   rs   r#      r&   r\   r$   Fr   zRfunction [B, C] = test(A)
  B = A(7:end, 2:3:end);
  C = A(1:2:end, 1:3:end);
end
r   r   s          r   test_m_matrixsymbol_slice3r     s    S!QAS!QAS!QA(1aADqDk2"1a!SqSk24 5Ii%uEGFAYF	  Xr!   c                      t        ddd      } t        ddd      }dt        || dd d f         | dd d f   | d d df   | d d df   gf}t        |dd	d	
      \  }|d   }d}||k(  sJ y )NrO   rL   r\   rP   r&   r#   r   r$   Fr   zrfunction [B, out2, out3, out4] = test(A)
  B = A(1, :);
  out2 = A(2, :);
  out3 = A(:, 1);
  out4 = A(:, 2);
end
r   )rO   rP   r,   r-   r   r.   s         r   "test_m_matrixsymbol_slice_autonamer     s    S!QAS!QA(1a!f-q1vq1vq1vFGIi%uEGFAYF	  Xr!   c            	      <   ddl m} m} ddlm}  |dd      \  }} | d      } | d      } | d	      } |d
|      } |d|      }	t        dt        ||   |||	f   ||	   z        fddd      \  }
|
d   }d}||dd|d|	diz  k(  s||dd|d|	diz  k(  sJ y y )Nr   IndexedBaseIdxr   zn mTintegerrO   r(   r)   ijmat_vec_multr$   Fr   r&   zfunction y = mat_vec_mult(A, m, n, x)
  for i = 1:m
    y(i) = 0;
  end
  for i = 1:m
    for j = 1:n
      y(i) = %(rhs)s + y(i);
    end
  end
end
rhszA(z, z).*x(j)zx(j).*A()sympy.tensorr   r   sympy.core.symbolr   r   r   )r   r   r   nmrO   r(   r)   r   r   r-   r   r.   s                r   test_m_loopsr     s    
 .)5$'DAqCACACACACA~r!A$!Q$!'=>"%1GFAYF		  h%a)C!DDDh%a)C!DDDF ED Er!   c                  2   ddl m} m} ddlm}  |dd      \  }}}} | d      } | d      } | d	      }	 |d
|      }
 |d|      } |d|      } |d|      }t        dt        |	|
   ||||f   ||
|||f   z        fddd      \  }|d   }d}||k(  sJ y )Nr   r   r   zn m o pTr   rO   rP   r)   r   r   kltensorthingr$   Fr   r&   zfunction y = tensorthing(A, B, m, n, o, p)
  for i = 1:m
    y(i) = 0;
  end
  for i = 1:m
    for j = 1:n
      for k = 1:o
        for l = 1:p
          y(i) = A(i, j, k, l).*B(j, k, l) + y(i);
        end
      end
    end
  end
end
r   )r   r   r   r   r   oprO   rP   r)   r   r   r   r   r-   r   r.   s                    r   )test_m_tensor_loops_multiple_contractionsr     s    -)D1JAq!QCACACACACACACA}b1qAqz!Aq!QJ-/G&HIuE;GFAYF	   Xr!   c                  x    t        t        t        dz        } d| f}t        |ddd      \  }|d   }d}||k(  sJ y )NrL   mysqrr$   Fr   r&   z&function x = mysqr(x)
  x = x.^2;
end
)r   r(   r   r5   s        r   test_m_InOutArgumentr      sP    Aq!tD$Ii%uEGFAYF	 
 Xr!   c                     t        t        t        dz  t        z         } d| f}t        |dddt        t        f      \  }|d   }d}||k(  sJ t        t        t        dz  t        z         } d| f}t        |ddd      \  }|d   }d}||k(  sJ y )	NrL   r#   r$   FrU   r&   z,function x = test(x, y)
  x = x.^2 + y;
end
r   )r   r(   r)   r   r5   s        r   test_m_InOutArgument_orderr     s    Aq!tax DIi%!aU<GFAYF	 
 XAq!tax DIi%uEGFAYF	 
 Xr!   c                      t        d      } d | t              j                  t              t        j                  gf}t        |ddd      \  }|d   }d}||k(  sJ y )Nfr#   r$   Fr   r&   zfunction [out1, out2] = test(x)
  % unsupported: Derivative(f(x), x)
  % unsupported: zoo
  out1 = Derivative(f(x), x);
  out2 = zoo;
end
)r
   r(   diffr   ComplexInfinityr   )r   r,   r-   r   r.   s        r   test_m_not_supportedr   '  sa    A!A$))A,(9(9:;Ii%uEGFAYF	  Xr!   c            	          t        d      \  } }}}t        d| |z  fddd|f      }|d   d   }d}||k(  sJ t        d| |z  |z   fddd| |f||f	      }|d   d   }d
}||k(  sJ y )Nzx y z tr   r$   F)r   r   global_varsr   r&   z3function out1 = f(x)
  global y
  out1 = x.*y;
end
)r   r   rB   r   z<function out1 = f(x, y)
  global t z
  out1 = x.*y + z;
end
)r   r   )r(   r)   r*   tr-   r   r.   s          r   test_global_vars_octaver   7  s    #JAq!Qc1Q3Z%u"#'FAYq\F	  Xc1Q3q5\8E()1vAq6CFAYq\F	  Xr!   )<ior   
sympy.corer   r   r   r   r   r	   r
   sympy.core.relationalr   $sympy.functions.elementary.piecewiser   sympy.matricesr   r   sympy.utilities.codegenr   r   r   sympy.testing.pytestr   r   r1   r(   r)   r*   r    r/   r3   r7   r;   r?   rE   rI   rS   rV   r_   rd   rn   rp   rt   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   <module>r      s     H H H * : / H H ' &  '
1a
&
	  " &((&  .$0L
&(("""F@D
4 r!   