
    gE                        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;d	S )+    )StringIO)SsymbolsEqpiCatalan
EulerGammaFunction)Equality)	Piecewise)MatrixMatrixSymbol)OctaveCodeGencodegenmake_routine)raises)XFAILNzx,y,zc                      t                      } t                      }|                     g |ddd           |                                }|dk    sJ d S )NfileFheaderempty )r   r   dump_mgetvalue)code_genoutputsources      e/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/utilities/tests/test_codegen_octave.pytest_empty_m_coder       sP    HZZFOOBuEOBB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 d S )	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/      sm    !a%#Ii%uEE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 d S )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   %   s    !a%#Ii$eDDDGF!9    AYF	+-2->	?B	  Xr!   c                      t          t          t          t          z             } d| f}t	          |ddd          \  }|d         }d}||k    sJ d S )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   sb    AADIi%uEEEGFAYF	 
 Xr!   c                      dt           t          z  f} t          | ddd          \  }|d         }dt          j        d          z  }||k    sJ d S )Nr#   r$   Fr   r&   z+function out1 = test()
  out1 = pi^%s;
end
   )r   r   r   evalfr+   s       r   test_m_numbersymbolr;   E   se    W%Ii%uEEEGFAYF	 	b	H
 Xr!   c                      dt           t          z  t          gf} t          | dddd          \  }|d         }d}||k    sJ d S )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   sd     "g+z23Ii%!%1 1 1GFAYF	  Xr!   c                     t           t          z   } t          d| t          t           t          gd          }t	                      }t                      }|                    |g|ddd           |                                }d}||k    sJ d S )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   s    q5D64Aq!9xXXXGHZZFOOWIvve5OII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 d S )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   sn    UAIEUAIE%(Ii%uEEEGFAYF	  Xr!   c                  L   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 d S )	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EE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t          t          t          f          }|d         d         dk    sJ |d         d	         }d
}	||	k    sJ d S )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2 2 2F!9Q<8####AYq\F	  Xr!   c                     ddl m} m}m} d |t                     | t
                    z    |t                    z   dz                                   |  |  |  |  |  |  |  | t          t
          z   t          z                                                                                   gf}t          |ddd          }|d         d         dk    sJ |d         d	         }d
}||k    sJ d S )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HHHHHHHHAQ##a&&(1,4466CCCCCCCAEAI$7$7 8 899::;;<<==I YeDDDF!9Q<<''''AYq\F	  Xr!   c                  l   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 d S )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CCCCCCCAQqS8Ass1vv#6#6ACCPQRSPSHH@U@UVWIi%uEEEGF!9AYF	  Xr!   c                      t          dt          dk     ft          dz  t          dk    ft           dz   t          dk    fdd          } d| f}t          |d	dd
          \  }|d         }d}||k    sJ d S )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      s    	Aq2v;AqAv!Aq1uySX	Y	Y	YB2Ii%uEEEGFAYF	  Xr!   c                      t          dt          dk     ft          dz  t          dk    ft           dz   t          dk    fd          } d| f}t          |dddd	          \  }|d         }d
}||k    sJ d S )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      s     
Aq2v;AqAv!Aq1uy	I	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 d S )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DD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 d S )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CC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           d S )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  K  K r!   )r(   r)   r   
ValueErrorrz   s   @r   test_m_filename_match_first_fcnr}   !  sj    1Q3!*%1ac{';=I
: K K K K L L L L 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 d S )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CDIYeDD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 d S )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  s    (Aq))F	!QqS"Q$ 	!	!B&"u===>Ii%uEEEGFAYF	 
 Xr!   c                      t          t          t          t          z   dgg          } d| f}t          |ddd          \  }|d         }d}||k    sJ d S )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  sh    AqsA;-  DIi%uEEEGFAYF	 
 Xr!   c                  h   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 d S )	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EEEGFAYF	  Xr!   c            	         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 d S )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2 2 2GFAYF	  Xr!   c            	      z   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 d S )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111g.."1a111g.."1a1g..0 1I i%uEE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 d S )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2"1a!QqSk224 5Ii%uEEEGFAYF	  Xr!   c            
      4   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 d S )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2"1a!SSqSk224 5Ii%uEE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 d S )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111vq1vq1vFGIi%uEE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 d S d S )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     sE   
 .-------))))))75$'''DAqCACACACACA~r!A$!Q$!'='=>"%1 1 1GFAYF		  h%%aaa)C!DDDDh%%aaa)C!DDDDDD EDDDr!   c                     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 d S )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11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&HIuE; ; ;GFAYF	   Xr!   c                      t          t          t          dz            } d| f}t          |ddd          \  }|d         }d}||k    sJ d S )NrL   mysqrr$   Fr   r&   z&function x = mysqr(x)
  x = x.^2;
end
)r   r(   r   r5   s        r   test_m_InOutArgumentr      sb    Aq!tD$Ii%uEE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 d S )	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EEEGFAYF	 
 Xr!   c                      t          d          } d | t                                        t                    t          j        gf}t          |ddd          \  }|d         }d}||k    sJ d S )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   '  su    A!!A$$))A,,(9:;Ii%uEE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 d S )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 C 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 H H H H H H H H H H H H H * * * * * * : : : : : : / / / / / / / / H H H H H H H H H H ' ' ' ' ' ' & & & & & &  ''

1a  
 
 
  &
 
 
	 	 	   "       &  (  (  &     .  $  0L L L    
 
 
  &  (  (  "  "  "F F F@  D
 
 
  4       r!   