§
    PŠtj&0  ã                   ó.  — d dl mZ d dl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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„ Z+dS )é    )ÚStringIO)ÚSÚsymbolsÚpiÚCatalanÚ
EulerGammaÚFunction)ÚEquality)Ú	Piecewise)ÚRustCodeGenÚcodegenÚmake_routine)ÚXFAILNzx,y,zc                  óª   — t          ¦   «         } t          ¦   «         }|                      g |ddd¬¦  «         |                     ¦   «         }|dk    sJ ‚d S )NÚfileF©ÚheaderÚemptyÚ )r   r   Údump_rsÚgetvalue)Úcode_genÚoutputÚsources      úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/utilities/tests/test_codegen_rust.pyÚtest_empty_rust_coder      sS   € Ý‰}Œ}€HÝ‰ZŒZ€FØ×Ò�R˜ °¸UÐÑCÔCÐCØ�_Š_ÑÔ€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ÚRustFr   r   útest.rsé   zNfn test(x: f64, y: f64, z: f64) -> f64 {
    let out1 = z*(x + y);
    out1
}
©ÚxÚyÚzr   ©Ú	name_exprÚresultr   Úexpecteds       r   Útest_simple_rust_coder+      sm   € Ø�!�a™%¥™Ð#€IÝ�i °¸UÐCÑCÔC�G€FØ�!Œ9˜	Ò!Ð!Ð!Ð!Ø�AŒY€Fð	ð ð �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
¦  «                             ¦   «         }dd|iz  }||k    sJ ‚d S )Nr   r    TFr   r   r!   r"   úCode generated with SymPy %séL   zæ/*
 *%(version_line)s
 *
 *              See http://www.sympy.org/ for more information.
 *
 *                       This file is part of 'project'
 */
fn test(x: f64, y: f64, z: f64) -> f64 {
    let out1 = z*(x + y);
    out1
}
Úversion_line)r$   r%   r&   r   ÚsympyÚ__version__ÚcenterÚrstrip©r(   r)   r   Úversion_strr/   r*   s         r   Útest_simple_code_with_headerr6   $   s¥   € Ø�!�a™%¥™Ð#€IÝ�i °¸EÐBÑBÔB�G€FØ�!Œ9˜	Ò!Ð!Ð!Ð!Ø�AŒY€FØ0µ5Ô3DÑD€KØ×%Ò% bÑ)Ô)×0Ò0Ñ2Ô2€Lð
	ð 
˜Ð&ñ'€Hð �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<fn test(x: f64, y: f64) -> f64 {
    let z = x + y;
    z
}
)r
   r&   r$   r%   r   ©Úexprr(   r)   r   r*   s        r   Útest_simple_code_nameoutr:   ;   sb   € Ý•A��A™ÑÔ€DØ˜�€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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\fn test() -> f64 {
    const Catalan: f64 = %s;
    let out1 = PI.powf(Catalan);
    out1
}
é   )r   r   r   Úevalfr'   s       r   Útest_numbersymbolr>   I   se   € Ø��W™Ð%€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	õ
 	Œ�bÑÔñ€Hð �XÒÐÐÐÐÐr   c                  óÜ   — dt           t          z  t          gf} t          | dddd¬¦  «        \  }|d         }dt          j        d¦  «        ›d	t          j        d¦  «        ›d
�}||k    sJ ‚d S )Nr   r    FT©r   r   Úinliner"   z3fn test() -> (f64, f64) {
    const Catalan: f64 = r<   z;
    const EulerGamma: f64 = zR;
    let out1 = PI.powf(Catalan);
    let out2 = EulerGamma);
    (out1, out2)
}
)r   r   r   r   r=   r'   s       r   Útest_numbersymbol_inlinerB   W   s‹   € ð �"�g™+¥zÐ2Ð3€IÝ�i °Ø!¨$ð0ñ 0ô 0�G€Fà�AŒY€F€Fõ 
Œ�rÑ	Ô	Ð	Ð	�JÔ,¨RÑ0Ô0Ð0Ð0ð2€Hð �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   Úrust)Úargument_sequenceÚlanguageFr   zJfn test(z: f64, x: f64, y: f64) -> f64 {
    let out1 = x + y;
    out1
}
)r$   r%   r   r&   r   r   r   r   )r9   Úroutiner   r   r   r*   s         r   Útest_argument_orderrH   j   sŒ   € Ý�q‰5€DÝ˜6 4½A½qÅ!¸9ÈvÐVÑVÔV€GÝ‰}Œ}€HÝ‰ZŒZ€FØ×Ò�g�Y ¨°uÀEÐÑJÔJÐJØ�_Š_ÑÔ€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"   zwfn test(x: f64, y: f64, z: f64) -> (f64, f64) {
    let out1 = z*(x + y);
    let out2 = z*(x - y);
    (out1, out2)
}
r#   )Úexpr1Úexpr2r(   r)   r   r*   s         r   Útest_multiple_results_rustrL   z   sn   € å•‰U•A‰I€EÝ•‰U•A‰I€EØ˜% ˜Ð(€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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"   z„fn test(x: f64, y: f64, z: f64) -> (f64, f64, f64) {
    let C = z*(x + y);
    let A = z*(x - y);
    let B = 2*x;
    (C, A, B)
}
©r   r
   r$   r%   r&   r   ©
ÚAÚBÚCrJ   rK   Úexpr3r(   r)   r   r*   s
             r   Útest_results_named_unorderedrV   ‹   s«   € å�gÑÔ�G€A€qˆ!Ý�Q��Q™¥™	Ñ"Ô"€EÝ�Q��Q™¥™	Ñ"Ô"€EÝ�Q˜�!™ÑÔ€EØ˜% ¨Ð.Ð/€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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 )NrN   rO   r   r    F©r   r   rE   r   r!   r"   z„fn test(x: f64, z: f64, y: f64) -> (f64, f64, f64) {
    let C = z*(x + y);
    let A = z*(x - y);
    let B = 2*x;
    (C, A, B)
}
rP   rQ   s
             r   Útest_results_named_orderedrY   Ÿ   sÕ   € Ý�gÑÔ�G€A€qˆ!Ý�Q��Q™¥™	Ñ"Ô"€EÝ�Q��Q™¥™	Ñ"Ô"€EÝ�Q˜�!™ÑÔ€EØ˜% ¨Ð.Ð/€IÝ�Y ¨u¸EÝ()­1­a yð2ñ 2ô 2€Fà�!Œ9�QŒ<˜9Ò$Ð$Ð$Ð$Ø�AŒY�qŒ\€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.rsr"   a›  fn testlong(x: f64, y: f64, z: f64) -> (f64, f64) {
    let out1 = x.sin().powi(3) + 3*x.sin().powi(2)*y.cos() + 3*x.sin().powi(2)*z.tan() + 3*x.sin()*y.cos().powi(2) + 6*x.sin()*y.cos()*z.tan() + 3*x.sin()*z.tan().powi(2) + y.cos().powi(3) + 3*y.cos().powi(2)*z.tan() + 3*y.cos()*z.tan().powi(2) + z.tan().powi(3);
    let out2 = (x + y + z).cos().cos().cos().cos().cos().cos().cos().cos();
    (out1, out2)
}
)	Ú(sympy.functions.elementary.trigonometricr[   r\   r]   r$   r%   r&   Úexpandr   )r[   r\   r]   r(   r)   r   r*   s          r   Útest_complicated_rs_codegenrb   ´   s  € ØHÐHÐHÐHÐHÐHÐHÐHÐHÐHØØ�•A‘”˜˜�Q™œ‘ # #¥a¡&¤&Ñ(¨1Ñ,×4Ò4Ñ6Ô6ØˆC���C�C˜˜˜C˜C   C C¨¨­Aµ©EµA©I©¬Ñ$7Ô$7Ñ 8Ô 8Ñ9Ô9Ñ:Ô:Ñ;Ô;Ñ<Ô<Ñ=Ô=ðð€Iõ �Y ¨u¸EÐBÑBÔB€FØ�!Œ9�QŒ<˜=Ò(Ð(Ð(Ð(Ø�AŒY�qŒ\€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   )r[   r\   ÚaÚfoorO   r    Fr   úfoo.rsr"   z¤fn foo(x: f64) -> (f64, f64, f64, f64) {
    let out1 = (2*x).cos();
    let y = x.sin();
    let out3 = x.cos();
    let a = (2*x).sin();
    (out1, y, out3, a)
}
)r`   r[   r\   r   r$   r
   r%   r   )r[   r\   rd   r(   r)   r   r*   s          r   Útest_output_arg_mixed_unorderedrg   Ì   sÐ   € àCÐCÐCÐCÐCÐCÐCÐCÝ�‰Œ€AØ˜˜˜Q�q™S™œ¥8­A¨s¨sµ1©v¬vÑ#6Ô#6¸¸½A¹¼ÅÈÈCÈCÐPQÕRSÑPSÉHÌHÑ@UÔ@UÐVÐW€IÝ�i °¸UÐCÑCÔC�G€FØ�!Œ9˜Ò Ð Ð Ð Ø�AŒY€Fð	ð ð �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   éÿÿÿÿrO   r"   ©r"   TF)ÚevaluateÚpwtestr    r   zÂfn pwtest(x: f64) -> f64 {
    let out1 = if (x < -1.0) {
        0
    } else if (x <= 1.0) {
        x.powi(2)
    } else if (x > 1.0) {
        2 - x
    } else {
        1
    };
    out1
}
©r   r$   r   ©Úpwr(   r)   r   r*   s        r   Útest_piecewise_rp   à   sŠ   € Ý	�A•q˜2’v�;¥ A¡¥q¨A¢v µ!°°A±µq¸1²u°¸yÐSXÐ	YÑ	YÔ	Y€BØ˜2�€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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   ri   rO   r"   rj   rl   r    FTr@   z�fn pwtest(x: f64) -> f64 {
    let out1 = if (x < -1) { 0 } else if (x <= 1) { x.powi(2) } else if (x > 1) { -x + 2 } else { 1 };
    out1
}
rm   rn   s        r   Útest_piecewise_inlinerr   ö   s�   € õ 
�A•q˜2’v�;¥ A¡¥q¨A¢v µ!°°A±µq¸1²u°¸yÑ	IÔ	I€BØ˜2�€IÝ�i °¸UØ!ð#ñ #ô #�G€Fà�AŒY€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}||k    sJ ‚d S )Nre   rO   r_   Úbaré   r    Fr   r   rf   r"   zÂfn foo(x: f64, y: f64) -> (f64, f64) {
    let out1 = 2*x;
    let out2 = 3*y;
    (out1, out2)
}
fn bar(y: f64) -> (f64, f64) {
    let out1 = y.powi(2);
    let out2 = 4*y;
    (out1, out2)
}
©r$   r%   r   r'   s       r   Útest_multifcns_per_filerw     s�   € Ø˜1�Q™3 ¥!¡˜*Ð%¨µ°1±°a½±c¨{Ð';Ð=€IÝ�Y ¨u¸EÐBÑBÔB€FØ�!Œ9�QŒ<˜8Ò#Ð#Ð#Ð#Ø�AŒY�qŒ\€Fð		ð ð �XÒÐÐÐÐÐr   c                  óR  — 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¦  «                             ¦   «         }dd|iz  }||k    sJ ‚d S )Nre   rO   r_   rt   ru   r    TFr   r   rf   r"   r-   r.   aZ  /*
 *%(version_line)s
 *
 *              See http://www.sympy.org/ for more information.
 *
 *                       This file is part of 'project'
 */
fn foo(x: f64, y: f64) -> (f64, f64) {
    let out1 = 2*x;
    let out2 = 3*y;
    (out1, out2)
}
fn bar(y: f64) -> (f64, f64) {
    let out1 = y.powi(2);
    let out2 = 4*y;
    (out1, out2)
}
r/   )r$   r%   r   r0   r1   r2   r3   r4   s         r   Ú test_multifcns_per_file_w_headerry     sÅ   € Ø˜1�Q™3 ¥!¡˜*Ð%¨µ°1±°a½±c¨{Ð';Ð=€IÝ�Y ¨t¸5ÐAÑAÔA€FØ�!Œ9�QŒ<˜8Ò#Ð#Ð#Ð#Ø�AŒY�qŒ\€FØ0µ5Ô3DÑD€KØ×%Ò% bÑ)Ô)×0Ò0Ñ2Ô2€Lð	ð" 
˜Ð&ñ%'€Hð& �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 S )Nre   rO   r_   rt   ru   r    ÚbazF)Úprefixr   r   r   zbaz.rsrv   )r(   r)   s     r   Útest_filename_match_prefixr}   9  sj   € Ø˜1�Q™3 ¥!¡˜*Ð%¨µ°1±°a½±c¨{Ð';Ð=€IÝ�i °¸eØ ð"ñ "ô "�G€Fà�!Œ9˜Ò Ð Ð Ð Ð Ð r   c                  ó–   — t          t          t          dz  ¦  «        } d| f}t          |ddd¬¦  «        \  }|d         }d}||k    sJ ‚d S )NrO   Úmysqrr    Fr   r"   z9fn mysqr(x: f64) -> f64 {
    let x = x.powi(2);
    x
}
)r
   r$   r   r8   s        r   Útest_InOutArgumentr€   @  sb   € Ý•A•q˜!‘tÑÔ€DØ˜$�€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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 )	NrO   r   r    FrX   r"   zDfn test(x: f64, y: f64) -> f64 {
    let x = x.powi(2) + y;
    x
}
r   )r
   r$   r%   r   r8   s        r   Útest_InOutArgument_orderr‚   N  sÑ   € å•A•q˜!‘t�a‘xÑ Ô €DØ˜�€IÝ�i °Ø!µa½°Uð<ñ <ô <�G€Fà�AŒY€Fð	ð ð �XÒÐÐÐå•A•q˜!‘t�a‘xÑ Ô €DØ˜�€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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"   z«fn test(x: f64) -> (f64, f64) {
    // unsupported: Derivative(f(x), x)
    // unsupported: zoo
    let out1 = Derivative(f(x), x);
    let out2 = zoo;
    (out1, out2)
}
)r	   r$   Údiffr   ÚComplexInfinityr   )r„   r(   r)   r   r*   s        r   Útest_not_supportedr‡   j  su   € Ý�‰Œ€AØ˜!˜!�A™$œ$Ÿ)š)¥A™,œ,­Ô(9Ð:Ð;€IÝ�i °¸UÐCÑCÔC�G€FØ�AŒY€Fð	ð ð �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"   z5fn f(x: f64) -> f64 {
    let out1 = x*y;
    out1
}
)r   r   rE   r‰   zAfn f(x: f64, y: f64) -> f64 {
    let out1 = x*y + z;
    out1
}
)r   r   )r$   r%   r&   Útr)   r   r*   s          r   Útest_global_vars_rustr‹   {  sÒ   € Ý˜Ñ#Ô#�J€A€qˆ!ˆQÝ�c˜1˜Q™3�Z °¸UØ"# ð'ñ 'ô '€Fà�AŒY�qŒ\€Fð	ð ð �XÒÐÐÐå�c˜1˜Q™3˜q™5�\ 6°%¸uØ()¨1 v¸A¸q¸6ðCñ Cô C€Fà�AŒY�qŒ\€Fð	ð ð �XÒÐÐÐÐÐr   ),Úior   Ú
sympy.corer   r   r   r   r   r	   Úsympy.core.relationalr
   Ú$sympy.functions.elementary.piecewiser   Úsympy.utilities.codegenr   r   r   Úsympy.testing.pytestr   r0   r$   r%   r&   r   r+   r6   r:   r>   rB   rH   rL   rV   rY   rb   rg   rp   rr   rw   ry   r}   r€   r‚   r‡   r‹   © r   r   ú<module>r“      s  ðØ Ð Ð Ð Ð Ð à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ *Ð *Ð *Ð *Ð *Ð *Ø :Ð :Ð :Ð :Ð :Ð :Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø €€€ð ˆ'�'Ñ
Ô
�€€1€aðð ð ðð ð ðð ð ð.ð ð ðð ð ð ðð ñ „ðð$ð ð ð ð ð ð"ð ð ð(ð ð ð*ð ð ð0ð ð ð(ð ð ð, ðð ñ „ðð"ð ð ð(ð ð ð:!ð !ð !ðð ð ðð ð ð8ð ð ð"ð ð ð ð r   