o
    *Î®cF  ã                   @   sL  d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ ed
ƒZe	deƒ\ZZZZZZZZe	deƒZe	deƒ\Z Z!edegƒ\Z"Z#Z$Z%e
deegƒZ&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.d d!„ Z/d"d#„ Z0d$d%„ Z1d&d'„ Z2d(d)„ Z3d*d+„ Z4d,S )-é    )ÚsinÚcos)Úraises)ÚPartialDerivative)ÚTensorIndexTypeÚtensor_indicesÚ
TensorHeadÚtensor_heads)ÚRational)Úsymbols)Údiag)ÚArray)ÚrandintÚLzi j k m m1 m2 m3 m4Úi0zL_0 L_1zA B C DÚHc                   C   s    t tdd„ ƒ t tdd„ ƒ d S )Nc                   S   s   t ttƒtt ƒƒS ©N©r   ÚCÚjÚD© r   r   úO/tmp/pip-target-vg8gfxp4/lib/python/sympy/tensor/tests/test_tensor_operators.pyÚ<lambda>   ó    z9test_invalid_partial_derivative_valence.<locals>.<lambda>c                   S   s   t tt ƒttƒƒS r   r   r   r   r   r   r      r   )r   Ú
ValueErrorr   r   r   r   Ú'test_invalid_partial_derivative_valence   s   r   c                  C   s   t t ttƒttƒƒttƒƒ} | t ttƒttƒttƒƒksJ ‚| jttƒks'J ‚| jttƒttƒfks4J ‚|  ¡ tt t gksAJ ‚|  ¡ tt t gksNJ ‚t t ttƒttƒƒttƒƒ} | jtt	ƒkseJ ‚| jttƒtt	ƒfksrJ ‚t ttƒttƒƒ}|jttƒks„J ‚|jttƒfksŽJ ‚ttƒt t
tt ƒttƒƒ }| ¡ t	tt	 t gks«J ‚ttƒt t
tt ƒtt ƒƒ }| ¡ t	tt	 tgksÈJ ‚ttƒt ttƒtt ƒ dt
tt ƒ  ttƒƒ }| ¡ t	tt	 t gksðJ ‚ttƒttƒ t ttƒttƒƒ }| ¡ tt	t	 gksJ ‚ttƒttƒ t tt ƒtt ƒƒ }| ¡ tt	 t	gks.J ‚ttƒttƒ t tt ƒttƒƒ }| ¡ t	t	 t gksNJ ‚d S )Né   )r   ÚAÚir   ÚkÚexprÚ	variablesÚget_indicesÚget_free_indicesÚL_0r   ÚBr   r   )r!   Úexpr1Úexpr2Úexpr2bÚexpr3Úexpr4Úexpr4bÚexpr5r   r   r   Útest_tensor_partial_deriv   s0     4"&$ r.   c                  C   sÈ  t dƒ\} }}}tttƒttƒƒ}| ttƒt| ƒt|ƒ | d |d  gttƒ| |gi¡}|t	t| ƒt|ƒ t| ƒ t|ƒ gd| d  |d  d| d  | ggƒksWJ ‚| ttƒt| ƒt|ƒ | d |d  gttƒ| |git tg¡}|t	t| ƒt|ƒ d| d  |d  gt| ƒ t|ƒ d| d  | ggƒks¡J ‚tttƒtt ƒƒ}| 
¡ ttgksµJ ‚| ¡ ttgks¿J ‚| ttƒ| |gttddƒittg¡t	ddgddggƒksÞJ ‚| ttƒ| |gttddƒittg¡t	ddgddggƒksýJ ‚| tt ƒ| |gttddƒittg¡t	ddgddggƒksJ ‚| tt ƒ| |gttddƒittg¡t	ddgddggƒks?J ‚tttƒttƒƒ}| 
¡ tt gksTJ ‚| ¡ tt gks`J ‚| ttƒ| |gitt g¡t	ddgddggƒks|J ‚| ttƒ| |gttddƒitt g¡t	ddgddggƒksJ ‚| ttƒ| |gttddƒitt g¡t	ddgddggƒks¾J ‚| tt ƒ| |gttddƒitt g¡t	ddgddggƒksàJ ‚| tt ƒ| |gttddƒitt g¡t	ddgddggƒksJ ‚ttt ƒtt ƒƒ}| 
¡ t tgksJ ‚| ¡ t tgks%J ‚| tt ƒ| |git tg¡t	ddgddggƒksBJ ‚| tt ƒ| |gttddƒit tg¡t	ddgddggƒksdJ ‚| tt ƒ| |gttddƒit tg¡t	ddgddggƒks†J ‚| ttƒ| |gttddƒit tg¡t	ddgddggƒks§J ‚| ttƒ| |gttddƒit tg¡t	ddgddggƒksÈJ ‚tttƒttƒƒ}| 
¡ g ksÚJ ‚| ¡ tt gksæJ ‚| ttƒ| |gttddƒig ¡dksüJ ‚| ttƒ| |gttddƒig ¡dksJ ‚ttt ƒtt ƒƒ}| 
¡ g ks&J ‚| ¡ t tgks2J ‚| ttƒ| |gttddƒig ¡dksHJ ‚| ttƒ| |gttddƒig ¡dks^J ‚ttttƒtttƒ ttƒƒ}| ¡ ttt gkszJ ‚| 
¡ tgks„J ‚ttttƒtttƒ ttƒƒtt ƒ }| ¡ ttt t gks§J ‚| 
¡ tt gks³J ‚tttƒtt tƒttt ƒ  ttƒƒ}| ¡ tt tt gks×J ‚| 
¡ g ksàJ ‚ttƒtt ƒ | }| ¡ tt tt gksúJ ‚| 
¡ g ksJ ‚ttƒttƒttt ƒttƒƒ ttƒttt ƒttƒƒ   }| ¡ ttt t gks2J ‚| 
¡ g ks;J ‚ttƒttt ƒttƒƒ }| ¡ tt t gksWJ ‚| 
¡ t gksbJ ‚d S )Nzx y z tr   é   é   r   éÿÿÿÿ)r   r   r   r   r&   r   Úreplace_with_arraysr   r   r   r$   r#   r   r   r%   r   r    ÚL_1r   r   )ÚxÚyÚzÚtr!   Úreplr   r   r   Ú&test_replace_arrays_partial_derivativeC   sr   :RBR>>BB8BBDD:DDBB,,,,(*@r9   c                  C   sÖ  t dƒ} tttƒ| ƒ}| ¡ tttƒ| ƒksJ ‚tttƒttƒ | ƒ}| ¡ tttƒ| ƒtttƒ| ƒ ks7J ‚tttƒttƒ ttƒ | ƒ}| ¡ tttƒ| ƒtttƒ| ƒ tttƒ| ƒ ksaJ ‚tttƒttƒƒ}| ¡ tttƒttƒƒksyJ ‚tttƒttƒ ttƒƒ}| ¡ tttƒttƒƒtttƒttƒƒ ksžJ ‚tttƒttƒ ttƒ ttƒƒ}| ¡ tttƒttƒƒtttƒttƒƒ tttƒttƒƒ ksÐJ ‚tttƒt	tt
ƒƒ}| ¡ tttƒt	tt
ƒƒksêJ ‚tttƒttƒ t	tt
ƒƒ}| ¡ tttƒt	tt
ƒƒtttƒt	tt
ƒƒ ksJ ‚tttƒttƒ ttƒ t	tt
ƒƒ}	|	 ¡ tttƒt	tt
ƒƒtttƒt	tt
ƒƒ tttƒt	tt
ƒƒ ksJJ ‚tttƒttƒt	t
tƒfƒ}
|
 ¡ tttƒttƒt	t
tƒfƒksmJ ‚tttƒttƒ ttƒt	t
tƒfƒ}| ¡ tttƒttƒt	t
tƒfƒtttƒttƒt	t
tƒfƒ ks¢J ‚tttƒttƒ ttƒ ttƒt	t
tƒfƒ}| ¡ tttƒttƒt	t
tƒfƒtttƒttƒt	t
tƒfƒ tttƒttƒt	t
tƒfƒ kséJ ‚d S )NÚtau)r   r   r   r   Ú_expand_partial_derivativer&   r   r   r   r   r    Úm)r:   Úexpr1aaÚexpr1abÚexpr1acÚexpr1baÚexpr1bbÚexpr1bcÚexpr1caÚexpr1cbÚexpr1ccÚexpr1daÚexpr1dbÚexpr1dcr   r   r   Ú'test_expand_partial_derivative_sum_rule   sŽ   ÿÿÿþÿÿÿÿ"ÿþÿÿÿ
ÿ$ÿþ
ÿ
ÿ$ÿ
ÿ,ÿþÿrI   c                  C   sZ  t ddƒ} t ddƒ}t ddƒ }t| |ƒ}t||ƒ}t| |ƒ}t| ttƒ ttƒƒ}| ¡ | tttƒttƒƒ ks;J ‚t|ttƒ ttƒƒ}| ¡ |tttƒttƒƒ ksWJ ‚t|ttƒ ttƒƒ}| ¡ |tttƒttƒƒ kssJ ‚t|ttƒ ttƒƒ}	|	 ¡ |tttƒttƒƒ ksJ ‚t|ttƒ ttƒƒ}
|
 ¡ |tttƒttƒƒ ks«J ‚d S )Nr   éè  r0   )r   r
   r   r   r   r   r   r;   )ÚnnegÚposÚnegÚc1Úc2Úc3Úexpr2ar)   Úexpr2caÚexpr2cbÚexpr2ccr   r   r   Ú3test_expand_partial_derivative_constant_factor_ruleÐ   s4   




ÿÿÿÿÿrU   c                  C   s”  t ddƒ} t ddƒ}t ddƒ }t| |ƒ}t||ƒ}t| |ƒ}tdttƒƒ}|r,| ¡ r.J ‚t| ttƒ |ttƒ  ttƒƒ}| ¡ | tttƒttƒƒ |tttƒttƒƒ  ks[J ‚t| ttƒ |ttƒ  ttƒƒ}| ¡ | tttƒttƒƒ |tttƒttƒƒ  ksˆJ ‚t|ttƒ |ttƒ  ttƒƒ}	|	 ¡ |tttƒttƒƒ |tttƒttƒƒ  ksµJ ‚t|ttƒ |ttƒ  ttƒƒ}
|
 ¡ |tttƒttƒƒ |tttƒttƒƒ  ksâJ ‚t|ttƒ |ttƒ  ttƒƒ}| ¡ |tttƒttƒƒ |tttƒttƒƒ  ksJ ‚t|ttƒ |ttƒ  ttƒƒ}| ¡ |tttƒttƒƒ |tttƒttƒƒ  ks>J ‚t|ttƒ |ttƒ  ttƒƒ}| ¡ |tttƒttƒƒ |tttƒttƒƒ  kslJ ‚t|ttƒ |ttƒ  ttƒƒ}| ¡ |tttƒttƒƒ |tttƒttƒƒ  ksšJ ‚t|ttƒ |ttƒ  ttƒƒ}| ¡ |tttƒttƒƒ |tttƒttƒƒ  ksÈJ ‚d S )Nr   rJ   r0   é*   )	r   r
   r   r   r   r;   r   r   r&   )rK   rL   rM   rN   rO   rP   ÚpÚexpr3aÚexpr3bÚexpr3cÚexpr3dÚexpr3eÚexpr3fÚexpr3gÚexpr3hÚexpr3ir   r   r   Ú-test_expand_partial_derivative_full_linearityî   s|   




"ÿÿ"ÿÿ"ÿÿ"ÿÿ"ÿ
ÿ"ÿ
ÿ"ÿ
ÿ"ÿ
ÿ"ÿÿra   c                  C   s¦  t ttƒttƒ ttƒƒ} |  ¡ t ttƒttƒƒttƒ ttƒt ttƒttƒƒ  ks-J ‚t ttƒttƒ ttƒ tt	ƒƒ}| ¡ t ttƒtt	ƒƒttƒ ttƒ ttƒt ttƒtt	ƒƒ ttƒ  ttƒttƒ t ttƒtt	ƒƒ  kswJ ‚t ttƒttƒ ttƒtt	ƒƒ}| ¡ t ttƒttƒtt	ƒƒttƒ t ttƒttƒƒt ttƒtt	ƒƒ  t ttƒtt	ƒƒt ttƒttƒƒ  ttƒt ttƒttƒtt	ƒƒ  ksÑJ ‚d S r   )
r   r   r   r&   r   r   r    r;   r   r<   )Úexpr4ar,   Úexpr4cr   r   r   Ú+test_expand_partial_derivative_product_rule)  s0   ÿÿ"  ÿ þÿ "ÿ"þýÿrd   c                  C   sž   t dƒ\} }t| | | ƒ}| ¡ |d |  | |  ksJ ‚td|  d| d   | ƒ}| ¡ dd| d   ks8J ‚td|  d| d   |ƒ}| ¡ dksMJ ‚d S )Nú	tau alphar0   r/   r   é   é   r   )r   r   Ú_perform_derivative)r:   Úalphar'   r(   r*   r   r   r   Ú+test_eval_partial_derivative_expr_by_symbol?  s    rj   c            	      C   s   t dƒ\} }t| | | ƒ}| ¡ || |  |  ksJ ‚tttƒ| ƒ}| ¡ dks*J ‚ttt ƒ| ƒ}| ¡ dks:J ‚ttttƒ| ƒ}| ¡ dksJJ ‚tttt ƒ| ƒ}| ¡ dks[J ‚ttt tƒ| ƒ}| ¡ dkslJ ‚ttt t ƒ| ƒ}| ¡ dks~J ‚d S )Nztau mur   )r   r   rh   r   r   r   r   )	r:   Úmur!   Úexpr1aÚexpr1brQ   r)   Úexpr2cÚexpr2dr   r   r   Ú5test_eval_partial_derivative_single_tensors_by_scalarM  s   rp   c            
      C   sÖ  t ttƒttƒƒ} |  ¡ t tt ¡ dksJ ‚t ttƒtt ƒƒ}| ¡ t tt¡t t t¡  dks7J ‚t tt ƒtt ƒƒ}| ¡ t t t¡ dksQJ ‚t tt ƒttƒƒ}| ¡ t t t ¡t tt ¡  dksrJ ‚t ttƒt	tƒƒ}t ttƒt
tƒƒ}t ttƒttƒƒ}t ttƒtttƒƒ}| ¡ dksŸJ ‚| ¡ dks§J ‚| ¡ dks¯J ‚| ¡ dks·J ‚t ttƒttƒƒ}| ¡ t tt ¡ dksÏJ ‚t tt ƒtt ƒƒ}	|	 ¡ t t t¡ dkséJ ‚d S ©Nr   )r   r   r   r   rh   r   ÚdeltaÚmetricr%   r&   r   r   r   r    )
r'   r(   r*   r+   r-   Úexpr6Úexpr7Úexpr8Úexpr9Úexpr10r   r   r   Ú>test_eval_partial_derivative_single_1st_rank_tensors_by_tensorg  s(   *."ry   c                  C   sD  t tttƒtttƒƒ} |  ¡ t tt ¡t tt ¡  dks!J ‚t tttƒtt tƒƒ}| ¡ t 	tt
¡t t
 t¡ t tt ¡  dksIJ ‚t tttƒttt ƒƒ}| ¡ t tt ¡t 	tt
¡ t t
 t¡  dksqJ ‚t tttƒtt t ƒƒ}| ¡ t 	tt
¡t t
 t¡ t 	tt¡ t t t¡  dks J ‚d S rq   )r   r   r   r   r<   Úm1rh   r   rr   rs   r%   r3   )r'   r(   r*   r+   r   r   r   Ú>test_eval_partial_derivative_single_2nd_rank_tensors_by_tensor…  s   ,88Hr{   c                  C   sP  t ttƒttƒƒ} t ttƒttƒƒ}t t t t¡ttƒ ttƒƒ}|  ¡ t t t¡| ¡    tj¡dks9J ‚|  ¡ | ¡   tj¡dksIJ ‚t ttt	ƒttt	ƒƒ}t ttt	ƒttt
ƒƒ}t t t t¡t t	 t
¡ ttt	ƒ ttt
ƒƒ}| ¡ t t t¡t t	 t
¡ | ¡    tj¡dks–J ‚| ¡ | ¡   tj¡dks¦J ‚d S rq   )r   r   r   r    r   rr   rh   Úcontract_deltar   r   r<   )rl   rm   Úexpr1crQ   r)   rn   r   r   r   Ú,test_eval_partial_derivative_divergence_type“  s4    ÿ
ÿÿ
ÿ2"ÿ
ÿÿ
ÿr~   c                  C   s  t dƒ\} }ttƒtt tƒ ttƒtt ƒ ttƒ  | | ttƒ  }t|tttƒƒ ¡ }t|ttƒƒ ¡ }t|| ƒ ¡ }|tt	ƒt
 t	 t ¡ t
 tt ¡ t
 tt ¡  dks_J ‚|| | t
 tt ¡ t
 t	t ¡tt	 ƒ ttƒ  tt	ƒt
 t	 t ¡ t
 tt ¡ ttƒ  tt	ƒtt	 ƒ t
 tt ¡  t
 t	t ¡tt	 tƒ    ¡ dks¶J ‚| t
j¡ t
j¡| | t
 tt ¡ tt	ƒtt	 ƒ t
 tt ¡  tt tƒ dttƒ tt ƒ    ¡ dksòJ ‚||d |  | |  ttƒ  dksJ ‚d S )Nre   r   r/   r0   )r   r   r   r   r   r   r    r<   rh   r%   r   rs   r3   rr   ÚexpandÚcontract_metricr|   )r:   ri   Ú
base_expr1Útensor_derivativeÚvector_derivativeÚscalar_derivativer   r   r   Ú"test_eval_partial_derivative_expr1ª  s.   >@ÿ,þýüüVÿÿ.r…   c                  C   s¨   t dƒ\} }ttƒtt ƒ | d  }t|ttƒƒ ¡ }|t tt ¡tt ƒ ttƒt 	t t
 ¡ t t
t ¡    ¡ dksCJ ‚t|| ƒ ¡ }|d|  ksRJ ‚d S )Nre   r/   r   )r   r   r   r   r    rh   r   rr   r%   rs   r3   r   )r:   ri   Ú
base_expr2Úvector_expressionÚscalar_expressionr   r   r   Ú6test_eval_partial_derivative_mixed_scalar_tensor_expr2Æ  s   <ÿÿr‰   N)5Úsympyr   r   Úsympy.testing.pytestr   Úsympy.tensor.toperatorsr   Úsympy.tensor.tensorr   r   r   r	   Úsympy.core.numbersr
   Úsympy.core.symbolr   Úsympy.matrices.denser   Úsympy.tensor.arrayr   Úsympy.core.randomr   r   r   r   r    r<   rz   Úm2Úm3Úm4r   r%   r3   r   r&   r   r   r   r   r.   r9   rI   rU   ra   rd   rj   rp   ry   r{   r~   r…   r‰   r   r   r   r   Ú<module>   s:    
$JC;