U
    	-eE                     @   s  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d Zdd Zdd Zdd Zdd Z edd Z!dd Z"dd Z#dd Z$dd Z%dd  Z&d!d" Z'd#d$ Z(ed%d& Z)d'd( Z*d)d* Z+d+d, Z,d-d. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dEdF Z9dGdH Z:dIdJ Z;d	S )K    )StringIO)SsymbolsEqpiCatalan
EulerGammaFunction)Equality)	Piecewise)MatrixMatrixSymbol)OctaveCodeGencodegenmake_routine)raises)XFAILNzx,y,zc                  C   s8   t  } t }| jg |dddd | }|dks4td S )NfileFheaderempty )r   r   dump_mgetvalueAssertionError)code_genoutputsource r   j/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/utilities/tests/test_codegen_octave.pytest_empty_m_code   s
    r    c                  C   sN   dt t t f} t| dddd\}|d dks2t|d }d}||ksJtd S )	NtestOctaveFr   r   test.m   z7function out1 = test(x, y, z)
  out1 = z.*(x + y);
end
xyzr   r   	name_exprresultr   expectedr   r   r   test_m_simple_code   s    r-   c                  C   sX   dt t t f} t| dddd\}|d dks2t|d }d	tj d
 }||ksTt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   r   sympy__version__r)   r   r   r   test_m_simple_code_with_header%   s    r0   c                  C   sD   t ttt } d| f}t|dddd\}|d }d}||ks@td S )Nr!   r"   Fr   r$   z)function z = test(x, y)
  z = x + y;
end
)r
   r(   r&   r'   r   r   exprr*   r+   r   r,   r   r   r   test_m_simple_code_nameout8   s    r3   c                  C   sD   dt t f} t| dddd\}|d }dtd }||ks@td S )Nr!   r"   Fr   r$   z+function out1 = test()
  out1 = pi^%s;
end
   )r   r   r   Zevalfr   r)   r   r   r   test_m_numbersymbolE   s    r5   c                  C   s@   dt t tgf} t| ddddd\}|d }d}||ks<t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   r)   r   r   r   test_m_numbersymbol_no_inlineQ   s     r8   c                  C   s\   t t } td| tt tgdd}t }t }|j|g|dddd | }d}||ksXt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   r   )r2   Zroutiner   r   r   r,   r   r   r   test_m_code_argument_orderc   s    r<   c                  C   sR   t t t } t t t }d| |gf}t|dddd\}|d }d}||ksNt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,   r   r   r   test_multiple_results_mr   s    r?   c            
      C   s|   t d\} }}t|tt t }t| tt t }t|dt }d|||gf}t|dddd\}|d }d}	||	ksxt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   r   
ABCr=   r>   expr3r*   r+   r   r,   r   r   r   test_results_named_unordered   s    rH   c            
      C   s   t d\} }}t|tt t }t| tt t }t|dt }d|||gf}t|dddtttfd}|d d dkszt|d d	 }d
}	||	kstd S )Nr@   rA   r!   r"   Fr   r   r:   r   r#   r$   zVfunction [C, A, B] = test(x, z, y)
  C = z.*(x + y);
  A = z.*(x - y);
  B = 2*x;
end
rB   rC   r   r   r   test_results_named_ordered   s    
rJ   c                  C   s   ddl m} m}m} d|t| t |t d  | | | | | | | | tt t gf}t|dddd}|d d dkst	|d d	 }d
}||kst	d S )Nr   )cossintanZ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.trigonometricrK   rL   rM   r&   r'   r(   expandr   r   )rK   rL   rM   r*   r+   r   r,   r   r   r   test_complicated_m_codegen   s    *rQ   c               	   C   s   ddl m} m} td}d| dt tt|t| tt||dt gf}t|dddd\}|d d	ksnt|d
 }d}||kstd S )Nr   )rK   rL   afoorA   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
)	rO   rK   rL   r   r&   r
   r'   r   r   )rK   rL   rR   r*   r+   r   r,   r   r   r   !test_m_output_arg_mixed_unordered   s    4rU   c                  C   sj   t dtdk ftd tdkft d tdkfddd} d| f}t|d	ddd
\}|d }d}||ksftd S )Nr   rA   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   r   pwr*   r+   r   r,   r   r   r   test_m_piecewise_   s    4r^   c                  C   sh   t dtdk ftd tdkft d tdkfd} d| f}t|ddddd	\}|d }d
}||ksdtd S )Nr   rV   rA   r$   rW   rZ   r"   Fr6   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
r[   r\   r   r   r   test_m_piecewise_no_inline   s    0
r_   c                  C   sl   ddt  dt gfdtd dt gfg} t| dddd}|d	 d	 d
ksLt|d	 d }d}||kshtd S )NrS   rA   rN   bar   r"   Fr   r   rT   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   r)   r   r   r   test_m_multifcns_per_file   s    (
rb   c                  C   sv   ddt  dt gfdtd dt gfg} t| dddd	}|d
 d
 dksLt|d
 d }dtj d }||ksrtd S )NrS   rA   rN   r`   ra   r"   TFr   r   rT   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   r   r.   r/   r)   r   r   r   "test_m_multifcns_per_file_w_header	  s    (rc   c                      s>   ddt  dt gfdtd dt gfg tt fdd d S )NrS   rA   rN   r`   ra   c                      s   t  dddddS )Nr"   r`   F)prefixr   r   )r   r   r*   r   r   <lambda>#  s
      z1test_m_filename_match_first_fcn.<locals>.<lambda>)r&   r'   r   
ValueErrorr   r   re   r   test_m_filename_match_first_fcn!  s    (rh   c                  C   sr   t tdt tt gg} dttddd| f}t|dddd}|d	 d	 d
ksRt|d	 d }d}||ksntd S )NrA   r!   myout1r$   rN   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   r   )e2r*   r+   r   r,   r   r   r   test_m_matrix_named'  s    rl   c                  C   sd   t ddd} ttdt tt gg}dt| |ddf}t|dddd	\}|d }d
}||ks`td S )Nri   r$   rN   rA   r!   FrX   r"   r   rj   )	r   r   r&   r'   r   r(   r
   r   r   )ri   rk   r*   r+   r   r,   r   r   r   test_m_matrix_named_matsym5  s    rm   c                  C   sJ   t ttt dgg} d| f}t|dddd\}|d }d}||ksFtd S )NrN   r!   r"   Fr   r$   z5function out1 = test(x, y)
  out1 = [x x + y 3];
end
)r   r&   r'   r   r   r1   r   r   r   test_m_matrix_output_autonameC  s    rn   c                  C   s   t t } tdt  dt dt 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 }d}||kstd S )	NrA      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   r   )e1rk   Ze3Ze4r*   r+   r   r,   r   r   r   test_m_matrix_output_autoname_2P  s    rq   c            
      C   s   t d\} }tddd}t|tt t }t|tddtgg}t| dt }d|||gf}t|dddtttfd	\}|d }d
}	||	kstd S )NzB,CrD   r$   rN   rA   r!   r"   FrI   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   r   )
rE   rF   rD   r=   r>   rG   r*   r+   r   r,   r   r   r   #test_m_results_matrix_named_orderedc  s    
rr   c                  C   s   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 }d}||kstd S )NrD   rA   rN   rE   r$   rF   Dr!   r   r"   Fr   zNfunction [B, C, D] = test(A)
  B = A(1, :);
  C = A(2, :);
  D = A(:, 3);
end
r   r
   r   r   )rD   rE   rF   rs   r*   r+   r   r,   r   r   r   test_m_matrixsymbol_slicew  s    ru   c                  C   s   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	 }d}||kstd S )NrD   rN   ra   rE   rA   rF   r!   r   r$   r"   Fr   zDfunction [B, C] = test(A)
  B = A(1:2, 1:2);
  C = A(1:2, 2:3);
end
rt   rD   rE   rF   r*   r+   r   r,   r   r   r   test_m_matrixsymbol_slice2  s    rw   c               	   C   s   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
 }d}||kstd S )NrD         rE   rA   rF   ra   r!      r$   rN   r"   Fr   zRfunction [B, C] = test(A)
  B = A(7:end, 2:3:end);
  C = A(1:2:end, 1:3:end);
end
rt   rv   r   r   r   test_m_matrixsymbol_slice3  s    r{   c                  C   s   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 }d}||kstd S )NrD   rA   rN   rE   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
rt   )rD   rE   r*   r+   r   r,   r   r   r   "test_m_matrixsymbol_slice_autoname  s    Fr|   c                  C   s   ddl m} m} ddlm} |ddd\}}| d}| d}| d	}|d
|}|d|}	tdt|| |||	f ||	  fdddd\}
|
d }d}||dd||	f i ks||dd||	f i kstd S )Nr   IndexedBaseIdxr   zn mTintegerrD   r&   r'   ijZ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(%s, %s).*x(j)zx(j).*A(%s, %s)Zsympy.tensorr~   r   Zsympy.core.symbolr   r   r   r   )r~   r   r   nmrD   r&   r'   r   r   r+   r   r,   r   r   r   test_m_loops  s$    

$ r   c               
   C   s   ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	|d
|}
|d|}|d|}|d|}tdt|	|
 ||||f ||
|||f  fdddd\}|d }d}||kstd S )Nr   r}   r   zn m o pTr   rD   rE   r'   r   r   klZ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prD   rE   r'   r   r   r   r   r+   r   r,   r   r   r   )test_m_tensor_loops_multiple_contractions  s&    



,  r   c                  C   sD   t ttd } d| f}t|dddd\}|d }d}||ks@td S )NrA   Zmysqrr"   Fr   r$   z&function x = mysqr(x)
  x = x.^2;
end
)r
   r&   r   r   r1   r   r   r   test_m_InOutArgument   s    r   c                  C   s   t ttd t } d| f}t|dddttfd\}|d }d}||ksJtt ttd t } d| f}t|dddd\}|d }d}||kstd S )	NrA   r!   r"   FrI   r$   z,function x = test(x, y)
  x = x.^2 + y;
end
r   )r
   r&   r'   r   r   r1   r   r   r   test_m_InOutArgument_order  s"     r   c                  C   sN   t d} d| tttjgf}t|dddd\}|d }d}||ksJt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   ZComplexInfinityr   r   )r   r*   r+   r   r,   r   r   r   test_m_not_supported'  s    r   c                  C   s   t d\} }}}td| | fddd|fd}|d d }d}||ksHttd| | | fddd| |f||fd	}|d d }d
}||kst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   r:   r   z<function out1 = f(x, y)
  global t z
  out1 = x.*y + z;
end
)r   r   r   )r&   r'   r(   tr+   r   r,   r   r   r   test_global_vars_octave7  s      r   )<ior   Z
sympy.corer   r   r   r   r   r   r	   Zsympy.core.relationalr
   Z$sympy.functions.elementary.piecewiser   Zsympy.matricesr   r   Zsympy.utilities.codegenr   r   r   Zsympy.testing.pytestr   r   r.   r&   r'   r(   r    r-   r0   r3   r5   r8   r<   r?   rH   rJ   rQ   rU   r^   r_   rb   rc   rh   rl   rm   rn   rq   rr   ru   rw   r{   r|   r   r   r   r   r   r   r   r   r   r   <module>   sV   $

 "