o
    GZh&                     @   s   d dl 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mZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZmZmZmZ d d
lmZm 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S )    )IpiRational)S)symbols)exp)sqrt)cossinYnm)Matrix)
clebsch_gordan	wigner_9j	wigner_6jgaunt
real_gauntracahdot_rot_grad_Ynm	wigner_3jwigner_d_smallwigner_d)raisesskipc                   C   s   t tddtjdtddtjddksJ t tddtjdtddtdddtdd ks0J t tddtjdtddtjdtd d ksJJ d S )N         r   )r   r   r   Halfr    r   r   V/var/www/auris/lib/python3.10/site-packages/sympy/physics/tests/test_clebsch_gordan.pytest_clebsch_gordan_docs   s   *68r!   c                  C   s  t j} t j}tdd}tdd}tdd}tdd}t||d||ddks'J t||d||ddks4J t||d||ddksAJ t||d||dtdd ksRJ t||d||dtdd kscJ t||d||dtdd kstJ t||d||dtd d ksJ t| ||d||dksJ t| ||d||dtd ksJ t| ||d||tdtd ksJ t| ||d||dtd ksJ t| ||d||tdtd ksJ t| | t dddt ddksJ t| | t dddddtd ksJ t| | t dddddtd ksJ t| | dddddtd ks%J t| | dddddtd ks7J t||t d||t ddksIJ t||t d||t ddtd ks_J t||t d||t ddtd ksuJ tt dt dt dt dt dt ddksJ tt dt dt dt ddt ddtd ksJ tt dt dt dddt ddksJ t|| ||d|dksJ t|| ||d|tdtd ksJ t|| ||d|dtd	 ksJ d S )
Nr   r   r         r   r         )r   ZOner   r   r   r   )hklinpr   r   r    test_clebsch_gordan   s@   



"""$"&"&"&($$$,,48,((r,   c                  C   s   zdd l } W n ty   td Y nw t| d| j dks#J td| dddddt	dd	 ks7J tdd
d
dd
dt	dd ksHJ t
tdd  d S )Nr   numpy not installed   r   r   g      @g      @i     g      ?g      c                   S   s   t ddddddS )Ng @r.   r$   r   )r   r   r   r   r    <lambda>B   s    z+test_clebsch_gordan_numpy.<locals>.<lambda>)numpyImportErrorr   r   ZzerosZastypeZint64r   float64r   r   
ValueError)npr   r   r    test_clebsch_gordan_numpy:   s   ("r6   c                  C   sp  zdd l } W n ty   td Y nw dd }|tddddddddddd
tdds.J td	d	d
d	d	d
d	d	d
	dtd dtd  ddtd td   ksTJ tddddddtddksdJ |tddddddddtddswJ tdddd| ddtddksJ td| d	dd	d	d	tddksJ t	j
}tdddd||d||	|ksJ td	ddd| d| dd| d| d	ttdd ksJ tddd	d| dd| d| d
d| 	ttd d! ksJ tdd| d| d
dddd| d| 	ttd"d# ksJ tddd$| d$ddddd	dksJ tdd%dd	d
dd
dd		d&td d' ks6J d S )(Nr   r-   c                 S      | |  dtdk S N@   z1e-64r*   r   abr   r   r    tnJ      ztest_wigner.<locals>.tnr   r9   prec   r   r   i  F   i i   im  i  r#   4      iEi g      ?r.   g      @r      r$   r"   	   ii  iHDi  iAi  l   0 Y g      @g       @i+  )r1   r2   r   r   r   r   r   r3   Zfloat32r   r   )r5   r>   halfr   r   r    test_wignerE   sd   ,

 &&& 

rK   c                  C   s  dd } t ddddddddtt  ksJ tt ddddddjd ts(J tt ddddddjd ts9J | t dddd	d
dddtddtd tt sTJ dd }d}d
}d}t|d D ]o}t|d D ]f}t|d D ]]}t| |d D ]R}t| |d D ]G}	t| |d D ]<}
|||||	|
f}t | }|| }t|| |k sJ ||	 |
 dkrt||k sJ || | d rt||k sJ qqq~qtqlqdt ddddddtj	u sJ d S )Nc                 S   r7   r8   r:   r;   r   r   r    r>   m   r?   ztest_gaunt.<locals>.tnr   r   r   r   
      rH   r   ir9   r@   iiO  i  c                 S   sT   t d|  d d| d  d| d  dt  t| ||ddd t| ||||| S )Nr   r   r$   r   )r   r   r   )l1l2l3m1m2m3r   r   r    	gaunt_refu   s   .ztest_gaunt.<locals>.gaunt_refg|=   )
r   r   r   
isinstanceargsr   rangeabsr   Zero)r>   rT   	thresholdZl_maxZl3_maxrN   rO   rP   rQ   rR   rS   rX   gZg0r   r   r    
test_gauntl   sD   &"" r^   c               	      sb  t dD ] } t |  | d D ]}td| | d||ddtt  ks#J qqtddddddtddtt  ks:J tddddddtd dtt  ksPJ tddddddtddtt  kseJ tddddddtd dtt  ks{J tddddddtd dtt  ksJ tdddd	dd	td
dtt  ksJ tddddddtd
dtt  ksJ tddddddtd
dtt  ksJ tdddd	ddtd
dtt  ksJ tdddd	d	dtd
 dtt  ksJ tddddddtddtt  ksJ tddddddtd
dtt  ks'J tdddd	d	dtd
 dtt  ks>J tddddddtju sMJ tddddddtju s\J tdd	dd	d	dtju skJ tddddddtju szJ tdd	dd	d	d	tju sJ tddd}dgd  t t D ]}| |< tt	 fdd d |< qd S )Nr   r   r   r   r#   rL   r"   rV   r   r%   rG   xT)integerr.   c                      s   t   S )N)r   r   vr   r    r0      s    z test_realgaunt.<locals>.<lambda>)
rY   r   r   r   r   r[   r   lenr   r4   )r(   mr_   r)   r   ra   r    test_realgaunt   s:   (*,*,,****,,,.
re   c                
   C   s   t ddddddtddksJ t ddddddtddks J t dddd	ddd
djs.J t dddddddtd d ksAJ tt ddddddd
dd tdk sVJ d S )Nr   r   rG   r   rC   r"   rF   r   r$   r@   g      @g      @g      #@g      @rH   i1iV  i g6
rz1e-4)r   r   Zis_Floatr   rZ   r   r   r   r   r    
test_racah   s
     &.rg   c                  C   s  t d\} }tddddddtdtdddd dtt  ks"J tdddddd tdtdddd dtt  ks@J tdddddddksMJ tdddddd dks\J tdddd| | d	td
 tdd| | dtt  ks|J tdddd| | tdtdd| | tt ksJ tdddd| | dtd tdd| | dtt  ksJ tdddd| |  td tdd| | dtt  dtd tdd| | dtt   ksJ d S )N	theta phir   r      r   rL   r#   r   r%   i  r.   r/   r$   7      rC   -      )r   r   r   r   r   Zdoitexpand)thetaphir   r   r    test_dot_rota_grad_SH   s6     $$"$rq   c                     s0  t dd } t| dtddgddggksJ t| td tddgddggtd ks.J t| ttddgddggks?J tddd\}}}t| |||}|d tt| d tt| d  t	|d  kskJ |d	 tt| d tt | d  t
|d  ksJ |d
 tt | d  tt| d  t
|d  ksJ |d tt | d tt | d  t	|d  ksJ tddd\ t fddtdddD }tdt d td t d |td  ti }|td  td i}|jdd |jdd ksJ d S )Nr   r   r   r   zalpha, beta, gammaT)real)r   r   )r   r   )r   r   )r   r   rh   c                    s   g | ]	}t d | qS )r   r   ).0Zmjrp   ro   r   r    
<listcomp>   s    z!test_wigner_d.<locals>.<listcomp>rV   r$   )func)r   r   r   r   r   r   r   r   r   r	   r
   rY   subsrn   Zas_real_imag)rJ   alphabetagammaDrb   wZw_r   rt   r    test_wigner_d   s   "."8:<< 4*r}   N)*Zsympy.core.numbersr   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr	   r
   Z+sympy.functions.special.spherical_harmonicsr   Zsympy.matrices.denser   Zsympy.physics.wignerr   r   r   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r   r!   r,   r6   rK   r^   re   rg   rq   r}   r   r   r   r    <module>   s&    0%'#!