
    e!hE                        d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Zd ZddddZddddZddddZddddZddddZddddZddddZ ddddZ!ddddZ"ddddZ#ddddZ$dddd Z%dddd!Z&dddd"Z'dddd#Z(dddd$Z)dddd%Z*dddd&Z+dddd'Z,dddd(Z-dddd)Z.dddd*Z/dddd+Z0dddd,Z1dddd-Z2d{d.Z3dddd/Z4dddd0Z5dddd1Z6dddd2Z7dddd3Z8dddd4Z9dddd5Z:dddd6Z;dddd7Z<dddd8Z=dddd9Z>dddd:Z?dddd;Z@dddd<ZAdddd=ZBdddd>ZCdddd?ZDdddd@ZEddddAZFddddBZGddddCZHddddDZIddddEZJddddFZKddddGZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_d[ Z`d\ Zad] Zbd^ Zcd_ Zdd` Zeda Zfdb Zgdc Zhdd Zide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm Zrdn Zsdo Ztdp Zudq Zvdr Zwds Zxdt Zydu Zzdv Z{dw Z|dx Z}dy Z~dz Zy)|    N)assert_equalassert_almost_equalassert_array_almost_equalassert_allclosesuppress_warnings)special)
legendre_plegendre_p_allassoc_legendre_passoc_legendre_p_allsph_legendre_psph_legendre_p_allc                       e Zd Zd Zej
                  j                  dg d      ej
                  j                  dg d      ej
                  j                  dg d      d                      Zy	)
TestLegendrec                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        |j                  dg       t        |j                  ddg       t	        |j                  t        j                  g d      dz  d	
       t	        |j                  t        j                  g d      dz         t	        |j                  t        j                  g d      dz         t	        |j                  t        j                  g d      dz         y )Nr                  )r   r   g       @   )decimal)r   r   r   )#   r   ir   r   g       @)?   r   ir      r   )r   legendrer   cr   nparray)selfleg0leg1leg2leg3leg4leg5s          i/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/special/tests/test_legendre.pytest_legendrezTestLegendre.test_legendre   s    """"""TVVaS!TVVaU#DFFBHHX$6s$:BGDFFBHHZ$8$<=DFFBHH^$<S$@ADFFBHH->$?$CD    n)r   r   r   r   r   zr)g?g{ɚ)@gue#gbLd?g7f?zi)go^#@g"1?g7ܘ~ @g^26g6n"c                 4   t               5 }|j                  t               t        j                  |||dz  z         }t        j
                  d|||dz  z         }d d d        t        d   d   d          t        |d   |d   d          y # 1 sw Y   4xY w)Ncategory              ?r   r   )r   filterDeprecationWarningr   lpnclpmnr   )r"   r,   r-   r.   supreslpnresclpmns          r)   test_lpn_against_clpmnz#TestLegendre.test_lpn_against_clpmn%   s       	5CJJ 2J3[[BBJ/F}}Q2be84H	5
 	q	8A;q>2q	8A;q>2	5 	5s   ABBN)__name__
__module____qualname__r*   pytestmarkparametrizer:    r+   r)   r   r      si    E [[S/2[[T $: ;[[T $0 131; 3
3r+   r   c                       e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      ej                  j                  dg d      d               Zd Zy	)
TestLegendrePshape
   r   	   r   r      c                    t         j                  j                  d      }|j                  dd|      }|j	                  dd|      }t        ||d      \  }}}|j                  |k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ d||z  z
  |z  d|z  |z  z
  ||dz   z  |z  z   }t         j                  j                  |dd	       y )
N  r   d   r   r   r   diff_n绽|=atol)	r    randomdefault_rngintegersuniformr	   rD   testingr   )	r"   rD   rngr,   xpp_jacp_hesserrs	            r)   test_odezTestLegendreP.test_ode4   s    ii##D)LLC'KKAu%%a155&ww%{{agg%%%||u{{***1q5yF"QUU]2Q!a%[1_D


""3"6r+   n_maxr   r   r             x_shapec           
      j   t         j                  j                  d      }|j                  dd|      }t	        ||d      \  }}}t        j
                  |dz         }t        j                  |t        t        d|j                  dz                     }|j                  t        |      f|j                  z   k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ d||z  z
  |z  d|z  |z  z
  ||dz   z  |z  z   }	t         j                  j                  |	dd	       y )
NrM   r   r   r   rO   axisr   rQ   rR   )r    rT   rU   rW   r
   arangeexpand_dimstuplerangendimrD   lenrX   r   )
r"   r`   re   rY   rZ   r[   r\   r]   r,   r^   s
             r)   test_all_odezTestLegendreP.test_all_odeD   s    ii##D)KKAw')%1=5&IIeai NN1U5AFFQJ+?%@Aww3q6)agg----{{agg%%%||u{{***1q5yF"QUU]2Q!a%[1_D


""3"6r+   c                     t               5 }|j                  t               t        j                  dd      \  }}d d d        t        g dd       t        g dd       y # 1 sw Y   (xY w)Nr0   r         ?)      ?rq         r   )        rr   g      ?)r   r3   r4   r   r5   r   )r"   r7   r[   pds       r)   test_legacyzTestLegendreP.test_legacyV   s^      	(CJJ 2J3KK3'EAr	( 	"!%A1E!"&A1E	( 	(s   0A""A+N)	r;   r<   r=   r>   r?   r@   r_   ro   rv   rA   r+   r)   rC   rC   3   sn    [[W&@A7 B7 [[W&:;[[Y(BC7 D <7 Fr+   rC   c                      e Zd Zej                  j                  dg d      ej                  j                  dddg      ej                  j                  dddg      d	                      Zej                  j                  dg d      ej                  j                  d
ddg      d               Zej                  j                  dg d      d        Zej                  j                  dg d      ej                  j                  d
ddg      d               Z	ej                  j                  ddg      ej                  j                  ddg      ej                  j                  dddg      d                      Z
ej                  j                  dg d      ej                  j                  ddg      d               Zy)TestAssocLegendrePrD   rF   rH   )r   r   rK   rG   m_maxr   r   r`   rK   rG   c                 8   t         j                  j                  d      }|j                  dd|      }t	        |||d      \  }}}t        j
                  |dz         }	t        j                  |	t        t        d|j                  dz                     }	t        j                  t        j
                  |dz         t        j
                  | d      g      }
t        j                  |
d	t        t        d|j                  dz               z         }
t        j                  |d
      }t        |	|
|d      \  }}}t         j                  j                  ||       t         j                  j                  ||       t         j                  j                  ||       y )NrM   GzGz?r   rO   r   rg   r   r   r   r   )r    rT   rU   rW   r   ri   rj   rk   rl   rm   concatenater   rX   r   )r"   rD   r`   rz   rY   rZ   p_all	p_all_jac
p_all_hessr,   mr[   r\   r]   s                 r)   	test_lpmnzTestAssocLegendreP.test_lpmn_   s4    ii##D)KKtU+ q; 	%y* IIeai NN1U5AFFQJ+?%@ANNBIIeai0"))UFA2FGHNN1TE%166A:2F,G%GHNN1V,+Aq!A>5&


""1e,


""5)4


""6:6r+   normTFc           	         t         j                  j                  d      }|j                  dd|      }|j                  dd|      }|j	                  dd|      }t        ||||d      \  }}}	|j                  |k(  sJ |j                  |j                  k(  sJ |	j                  |j                  k(  sJ t         j                  j                  d||z  z
  |	z  d|z  |z  ||dz   z  ||z  d||z  z
  z  z
  |z  z
  d	d
       y )NrM   r   rG   r   r   r   r   rP   h㈵>:0yE>rtolrS   )	r    rT   rU   rV   rW   r   rD   rX   r   )
r"   rD   r   rY   r,   r   rZ   r[   r\   r]   s
             r)   r_   zTestAssocLegendreP.test_odev   s    ii##D)LLB&LLb%(KKAu%+Aq!$qI5&ww%{{agg%%%||u{{***


""AAI#7EEMQ!a%[1q5AAI+>>!CCU 	# 	$r+   rE   c                    t         j                  j                  d      }d}d}|j                  dd|      }t	        |||d      \  }}}t        j
                  t        j                  |dz         t        j                  | d      g      }	t        j                  |dz         }
t        j                  |
t        t        d|j                  dz               	      }
t        j                  |	d
t        t        d|j                  dz               z   	      }	t         j                  j                  d||z  z
  |z  d|z  |z  |
|
dz   z  |	|	z  d||z  z
  z  z
  |z  z
  dd       y )NrM      r|   r}   r   rO   r   r   rg   r~   r   r   r   )r    rT   rU   rW   r   r   ri   rj   rk   rl   rm   rX   r   )r"   rD   rY   r`   rz   rZ   r[   r\   r]   r   r,   s              r)   test_allzTestAssocLegendreP.test_all   s3   ii##D)KKtU+/uaJ5&NNBIIeai0"))UFA2FGHIIeai NN1U5AFFQJ+?%@ANN1TE%166A:2F,G%GH


""AAI#7EEMQ!a%[1q5AAI+>>!CCU 	# 	$r+   c                 0   t         j                  j                  d      }|j                  dd|      }t	        dd||d      \  }}t         j
                  j                  |d   t        ||             t         j
                  j                  |d	   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   t        ||             t         j
                  j                  |d   t        ||             t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   t        ||             t         j
                  j                  |d   t        ||             t         j
                  j                  |d   t        ||             t         j
                  j                  |d   t        ||             t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d    d
       t         j
                  j                  |d!   t        ||             t         j
                  j                  |d"   t        ||             t         j
                  j                  |d#   t!        ||             t         j
                  j                  |d$   t#        ||             t         j
                  j                  |d%   t%        ||             t         j
                  j                  |d&   t'        ||             t         j
                  j                  |d'   d
       t         j
                  j                  |d(   d
       t         j
                  j                  |d)   t)        ||             t         j
                  j                  |d*   t+        ||             t         j
                  j                  |d+   t-        ||             t         j
                  j                  |d,   t/        ||             t         j
                  j                  |d-   t1        ||             t         j
                  j                  |d.   t3        ||             t         j
                  j                  |d/   t5        ||             t         j
                  j                  |d0   t7        ||             t         j
                  j                  |d1   t9        ||             t         j
                  j                  |d2   t;        ||             t         j
                  j                  |d3   t=        ||             t         j
                  j                  |d4   t?        ||             t         j
                  j                  |d   tA        ||             t         j
                  j                  |d	   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d5   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   tC        ||             t         j
                  j                  |d   tE        ||             t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   tG        ||             t         j
                  j                  |d   tI        ||             t         j
                  j                  |d   tK        ||             t         j
                  j                  |d   tM        ||             t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d   d
       t         j
                  j                  |d    d
       t         j
                  j                  |d!   tO        ||             t         j
                  j                  |d"   tQ        ||             t         j
                  j                  |d#   tS        ||             t         j
                  j                  |d$   tU        ||             t         j
                  j                  |d%   tW        ||             t         j
                  j                  |d&   tY        ||             t         j
                  j                  |d'   d
       t         j
                  j                  |d(   d
       t         j
                  j                  |d)   t[        ||             t         j
                  j                  |d*   t]        ||             t         j
                  j                  |d+   t_        ||             t         j
                  j                  |d,   ta        ||             t         j
                  j                  |d-   tc        ||             t         j
                  j                  |d.   te        ||             t         j
                  j                  |d/   tg        ||             t         j
                  j                  |d0   ti        ||             t         j
                  j                  |d1   tk        ||             t         j
                  j                  |d2   tm        ||             t         j
                  j                  |d3   to        ||             t         j
                  j                  |d4   tq        ||             y )6NrM   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )9r    rT   rU   rW   r   rX   r   assoc_legendre_p_0_0assoc_legendre_p_1_0assoc_legendre_p_1_1assoc_legendre_p_1_m1assoc_legendre_p_2_0assoc_legendre_p_2_1assoc_legendre_p_2_2assoc_legendre_p_2_m2assoc_legendre_p_2_m1assoc_legendre_p_3_0assoc_legendre_p_3_1assoc_legendre_p_3_2assoc_legendre_p_3_3assoc_legendre_p_3_m3assoc_legendre_p_3_m2assoc_legendre_p_3_m1assoc_legendre_p_4_0assoc_legendre_p_4_1assoc_legendre_p_4_2assoc_legendre_p_4_3assoc_legendre_p_4_4assoc_legendre_p_4_m4assoc_legendre_p_4_m3assoc_legendre_p_4_m2assoc_legendre_p_4_m1assoc_legendre_p_0_0_jacassoc_legendre_p_1_0_jacassoc_legendre_p_1_1_jacassoc_legendre_p_1_m1_jacassoc_legendre_p_2_0_jacassoc_legendre_p_2_1_jacassoc_legendre_p_2_2_jacassoc_legendre_p_2_m2_jacassoc_legendre_p_2_m1_jacassoc_legendre_p_3_0_jacassoc_legendre_p_3_1_jacassoc_legendre_p_3_2_jacassoc_legendre_p_3_3_jacassoc_legendre_p_3_m3_jacassoc_legendre_p_3_m2_jacassoc_legendre_p_3_m1_jacassoc_legendre_p_4_0_jacassoc_legendre_p_4_1_jacassoc_legendre_p_4_2_jacassoc_legendre_p_4_3_jacassoc_legendre_p_4_4_jacassoc_legendre_p_4_m4_jacassoc_legendre_p_4_m3_jacassoc_legendre_p_4_m2_jacassoc_legendre_p_4_m1_jac)r"   rD   r   rY   rZ   r[   r\   s          r)   test_specificz TestAssocLegendreP.test_specific   s
    ii##D)KKtU+'1ad1E5


""1T7 .	0


""1T7A.


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1T7 .	0


""1T7 .	0


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1U8!!$/	1 	

""1T7 .	0


""1T7 .	0


""1T7 .	0


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8!!$/	1


""1U8!!$/	1 	

""1T7 .	0


""1T7 .	0


""1T7 .	0


""1T7 .	0


""1T7A.


""1U8Q/


""1U8!!$/	1


""1U8!!$/	1


""1U8!!$/	1 	

""1T7 .	0


""1T7 .	0


""1T7 .	0


""1T7 .	0


""1T7 .	0


""1U8!!$/	1


""1U8!!$/	1


""1U8!!$/	1


""1U8!!$/	1 	

""5;$QT2	4


""5;2


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5<3


""5;$QT2	4


""5;$QT2	4


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5<%ad3	5 	

""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5;2


""5;2


""5<3


""5<3


""5<%ad3	5


""5<%ad3	5 	

""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5;2


""5<3


""5<%ad3	5


""5<%ad3	5


""5<%ad3	5 	

""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5;$QT2	4


""5<%ad3	5


""5<%ad3	5


""5<%ad3	5


""5<%ad3	5r+   rZ   r   r   c                 r   t        |||d      \  }}t        j                  |dz         }t        j                  j	                  |d d df   t        ||dz         |z  |dz   z  dz         t        j                  j	                  |d d df   t        j                  |dk\  t        ||      t        j                  z  d             t        j                  j	                  |d d df   t        j                  |dk\  t        ||dz          |dz   z  |dz   z  |z  |dz
  z  dz  d             t        j                  j	                  |d d df   t        j                  |dk\  t        ||dz          dz  d             t        j                  j	                  |d d df   t        j                  |dk\  t        ||       t        j                  z  d             t        d|dz         D ]Q  }t        j                  j	                  |d d |f   d       t        j                  j	                  |d d | f   d       S y )	Nr   rO   r   r   r   r   r   r   )	r   r    ri   rX   r   powwhereinfrl   )r"   rz   r`   rZ   r[   r\   r,   r   s           r)   test_all_limitsz"TestAssocLegendreP.test_all_limits;  s    (uaB5IIeai 


""5A;1q5MAQ'!+	-


""5A;HHQ!VSAY/3	5


""5A;HHQ!Vc!QUm^q1u5Q?!Cq1uMPQQSTU	W


""5B<HHQ!Vc!QUm^a/3	5


""5B<HHQ!Vc!QiZ"&&0!4	6 q%!)$ 	8AJJ&&uQT{A6JJ&&uQU|Q7	8r+   )r   r   rG   c                    d}t        |||d      \  }}t               5 }|j                  t               t	        j
                  |||      \  }}t        |dz         D ],  }	t        j                  j                  ||	   |d d |	f          . t	        j
                  | ||      \  }}t        |dz         D ]-  }	t        j                  j                  ||	   |d d |	 f          / 	 d d d        y # 1 sw Y   y xY w)Nrq   r   rO   r0   )
r   r   r3   r4   r   lpmnrl   r    rX   r   )
r"   rz   r`   rZ   r[   r\   r7   p_legacyp_jac_legacyr   s
             r)   rv   zTestAssocLegendreP.test_legacyR  s     'uaB5  		BCJJ 2J3%,\\%%B"Hl519% A

**8A;!Q$@A &-\\5&%%C"Hl519% B

**8A;!aR%AB		B 		B 		Bs   CC00C9N)r;   r<   r=   r>   r?   r@   r   r_   r   r   r   rv   rA   r+   r)   rx   rx   ^   s   [[W&DE[[Wq!f-[[Wq"g.7 / . F7( [[W&DE[[VdE]3$ 4 F$" [[W&@A$ B$& [[W&@A[[VdE]3Z5 4 BZ5x [[Wqc*[[Wrd+[[S1b'*8 + , +8( [[Wj1[[Wrd+B , 2Br+   rx   c                      e Zd Zej                  j                  dg d      ej                  j                  dddg      ej                  j                  dg d      ej                  j                  dd	d
g      d                             Zy)TestMultiAssocLegendrePrD   ))i  rH   rJ   
branch_cutr   r   zz_min, z_max))y      $      $y      $@      $@)r   r   )y             $y              $@r   TFc                 Z   t         j                  j                  d      }|j                  |j                  |j                  |      d|j                  |j
                  |j
                  |      z  z   }t        dd|||d      \  }}	t         j                  j                  |d   t        |||             t         j                  j                  |d   d	       t         j                  j                  |d
   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   t        |||             t         j                  j                  |d   t        |||             t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   t        |||             t         j                  j                  |d   t        |||             t         j                  j                  |d   t        |||             t         j                  j                  |d   t        |||             t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d   d	       t         j                  j                  |d    d	       t         j                  j                  |d!   t!        |||             t         j                  j                  |d"   t#        |||             t         j                  j                  |d#   t%        |||             t         j                  j                  |d$   t'        |||             t         j                  j                  |d%   t)        |||             t         j                  j                  |d&   t+        |||             t         j                  j                  |d'   d	       t         j                  j                  |d(   d	       t         j                  j                  |d)   t-        |||             t         j                  j                  |d*   t/        |||             t         j                  j                  |d+   t1        |||             t         j                  j                  |d,   t3        |||             t         j                  j                  |d-   t5        |||             t         j                  j                  |d.   t7        |||             t         j                  j                  |d/   t9        |||             t         j                  j                  |d0   t;        |||             t         j                  j                  |d1   t=        |||             t         j                  j                  |d2   t?        |||             t         j                  j                  |d3   tA        |||             t         j                  j                  |d4   tC        |||             t         j                  j                  |	d   tE        |||             t         j                  j                  |	d   d	       t         j                  j                  |	d
   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   tG        |||             t         j                  j                  |	d   tI        |||             t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   tK        |||             t         j                  j                  |	d   tM        |||             t         j                  j                  |	d   tO        |||             t         j                  j                  |	d   tQ        |||             t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d   d	       t         j                  j                  |	d    d	       t         j                  j                  |	d!   tS        |||             t         j                  j                  |	d"   tU        |||             t         j                  j                  |	d#   tW        |||             t         j                  j                  |	d$   tY        |||             t         j                  j                  |	d%   t[        |||             t         j                  j                  |	d&   t]        |||             t         j                  j                  |	d'   d	       t         j                  j                  |	d(   d	       t         j                  j                  |	d)   t_        |||             t         j                  j                  |	d*   ta        |||             t         j                  j                  |	d+   tc        |||             t         j                  j                  |	d,   te        |||             t         j                  j                  |	d-   tg        |||             t         j                  j                  |	d.   ti        |||             t         j                  j                  |	d/   tk        |||             t         j                  j                  |	d0   tm        |||             t         j                  j                  |	d1   to        |||             t         j                  j                  |	d2   tq        |||             t         j                  j                  |	d3   ts        |||             t         j                  j                  |	d4   tu        |||             y )5NrM   r2   r   r   )r   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   );r    rT   rU   rW   realimagr   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
r"   rD   r   z_minz_maxr   rY   zr[   r\   s
             r)   r   z%TestMultiAssocLegendreP.test_specificd  s{    ii##D)KK

EJJ6UZZU;;< (1*4;5 	

""1T7 zE	G


""1T7A.


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1U8Q/


""1T7 zE	G


""1T7 zE	G


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1U8!!
F	H 	

""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8!!
F	H


""1U8!!
F	H 	

""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1T7A.


""1U8Q/


""1U8!!
F	H


""1U8!!
F	H


""1U8!!
F	H 	

""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1T7 zE	G


""1U8!!
F	H


""1U8!!
F	H


""1U8!!
F	H


""1U8!!
F	H 	

""5;$Q:DI	K


""5;2


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5<3


""5;$Q:DI	K


""5;$Q:DI	K


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5<%aJTJ	L 	

""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5;2


""5;2


""5<3


""5<3


""5<%aJTJ	L


""5<%aJTJ	L 	

""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5;2


""5<3


""5<%aJTJ	L


""5<%aJTJ	L


""5<%aJTJ	L 	

""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5;$Q:DI	K


""5<%aJTJ	L


""5<%aJTJ	L


""5<%aJTJ	L


""5<%aJTJ	Lr+   N)r;   r<   r=   r>   r?   r@   r   rA   r+   r)   r   r   c  s    [[W&BC[[\Aq62[[^ . [[VdE]3]L 4 3 D
]Lr+   r   c                       e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zy)TestSphLegendrePrD   rE   c                 Z   t         j                  j                  d      }|j                  t         j                   t         j                  |      }t        dd|d      \  }}t         j                  j                  |d   t        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d	   d       t         j                  j                  |d
   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   t        |             t         j                  j                  |d   t        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   t        |             t         j                  j                  |d   t        |             t         j                  j                  |d   t        |             t         j                  j                  |d   t        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   t        |             t         j                  j                  |d   t!        |             t         j                  j                  |d    t#        |             t         j                  j                  |d!   t%        |             t         j                  j                  |d"   t'        |             t         j                  j                  |d#   t)        |             t         j                  j                  |d$   d       t         j                  j                  |d%   d       t         j                  j                  |d&   t+        |             t         j                  j                  |d'   t-        |             t         j                  j                  |d(   t/        |             t         j                  j                  |d)   t1        |             t         j                  j                  |d*   t3        |             t         j                  j                  |d+   t5        |             t         j                  j                  |d,   t7        |             t         j                  j                  |d-   t9        |             t         j                  j                  |d.   t;        |             t         j                  j                  |d/   t=        |             t         j                  j                  |d0   t?        |             t         j                  j                  |d1   tA        |             t         j                  j                  |d   tC        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d	   d       t         j                  j                  |d
   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   tE        |             t         j                  j                  |d   tG        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   tI        |             t         j                  j                  |d   tK        |             t         j                  j                  |d   tM        |             t         j                  j                  |d   tO        |             t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   d       t         j                  j                  |d   tQ        |             t         j                  j                  |d   tS        |             t         j                  j                  |d    tU        |             t         j                  j                  |d!   tW        |             t         j                  j                  |d"   tY        |             t         j                  j                  |d#   t[        |             t         j                  j                  |d$   d       t         j                  j                  |d%   d       t         j                  j                  |d&   t]        |             t         j                  j                  |d'   t_        |             t         j                  j                  |d(   ta        |             t         j                  j                  |d)   tc        |             t         j                  j                  |d*   te        |             t         j                  j                  |d+   tg        |             t         j                  j                  |d,   ti        |             t         j                  j                  |d-   tk        |             t         j                  j                  |d.   tm        |             t         j                  j                  |d/   to        |             t         j                  j                  |d0   tq        |             t         j                  j                  |d1   ts        |             y )2NrM   r   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ):r    rT   rU   rW   pir   rX   r   sph_legendre_p_0_0sph_legendre_p_1_0sph_legendre_p_1_1sph_legendre_p_1_m1sph_legendre_p_2_0sph_legendre_p_2_1sph_legendre_p_2_2sph_legendre_p_2_m2sph_legendre_p_2_m1sph_legendre_p_3_0sph_legendre_p_3_1sph_legendre_p_3_2sph_legendre_p_3_3sph_legendre_p_3_m3sph_legendre_p_3_m2sph_legendre_p_3_m1sph_legendre_p_4_0sph_legendre_p_4_1sph_legendre_p_4_2sph_legendre_p_4_3sph_legendre_p_4_4sph_legendre_p_4_m4sph_legendre_p_4_m3sph_legendre_p_4_m2sph_legendre_p_4_m1sph_legendre_p_0_0_jacsph_legendre_p_1_0_jacsph_legendre_p_1_1_jacsph_legendre_p_1_m1_jacsph_legendre_p_2_0_jacsph_legendre_p_2_1_jacsph_legendre_p_2_2_jacsph_legendre_p_2_m2_jacsph_legendre_p_2_m1_jacsph_legendre_p_3_0_jacsph_legendre_p_3_1_jacsph_legendre_p_3_2_jacsph_legendre_p_3_3_jacsph_legendre_p_3_m3_jacsph_legendre_p_3_m2_jacsph_legendre_p_3_m1_jacsph_legendre_p_4_0_jacsph_legendre_p_4_1_jacsph_legendre_p_4_2_jacsph_legendre_p_4_3_jacsph_legendre_p_4_4_jacsph_legendre_p_4_m4_jacsph_legendre_p_4_m3_jacsph_legendre_p_4_m2_jacsph_legendre_p_4_m1_jac)r"   rD   rY   thetar[   r\   s         r)   r   zTestSphLegendreP.test_specific	  s$
   ii##D)RUUFBEE51%aE!<5


""1T7u%	'


""1T7A.


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1T7u%	'


""1T7u%	'


""1T7A.


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8Q/


""1U8&	( 	

""1T7u%	'


""1T7u%	'


""1T7u%	'


""1T7A.


""1T7A.


""1U8Q/


""1U8Q/


""1U8&	(


""1U8&	( 	

""1T7u%	'


""1T7u%	'


""1T7u%	'


""1T7u%	'


""1T7A.


""1U8Q/


""1U8&	(


""1U8&	(


""1U8&	( 	

""1T7u%	'


""1T7u%	'


""1T7u%	'


""1T7u%	'


""1T7u%	'


""1U8&	(


""1U8&	(


""1U8&	(


""1U8&	( 	

""5;"5)	+


""5;2


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5;"5)	+


""5;"5)	+


""5;2


""5;2


""5;2


""5<3


""5<3


""5<3


""5<#E*	, 	

""5;"5)	+


""5;"5)	+


""5;"5)	+


""5;2


""5;2


""5<3


""5<3


""5<#E*	,


""5<#E*	, 	

""5;"5)	+


""5;"5)	+


""5;"5)	+


""5;"5)	+


""5;2


""5<3


""5<#E*	,


""5<#E*	,


""5<#E*	, 	

""5;"5)	+


""5;"5)	+


""5;"5)	+


""5;"5)	+


""5;"5)	+


""5<#E*	,


""5<#E*	,


""5<#E*	,


""5<#E*	,r+   ry   c           	         t         j                  j                  d      }|j                  dd|      }|j                  dd|      }|j	                  t         j
                   t         j
                  |      }t        |||d      \  }}}|j                  |k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t         j                  j                  t        j                  |      |z  t        j                  |       |z  ||dz   z  t        j                  |      z  ||z  t        j                  |      z  z
  |z  z
  dd	
       y )NrM   r   rG   r   r   rO   r   r   r   r   )r    rT   rU   rV   rW   r
  r   rD   rX   r   sincos)	r"   rD   rY   r,   r   r=  r[   r\   r]   s	            r)   r_   zTestSphLegendreP.test_ode  s    ii##D)LLB&LLb%(RUUFBEE51)!Qa@5&ww%{{agg%%%||u{{***


""266%=6#9BFF5M>E;QAE{RVVE]*QURVVE]-BBaG<HU 	# 	$r+   N)r;   r<   r=   r>   r?   r@   r   r_   rA   r+   r)   r  r    sQ    [[W&@AY, BY,v [[W&DE$ F$r+   r  c            	          e Zd Zd Zd Zd Zd Zd Zd Z	 d Z	d Z
d	 Zd
 Zd Zej                  j!                  dej$                  ej&                  g      ej                  j!                  dg d      ej                  j!                  dddg      ej                  j!                  dddg      ej                  j!                  dg d      d                                    Zej                  j!                  dej*                  g      ej                  j!                  dg d      ej                  j!                  dddg      ej                  j!                  dg d      d                             Zej                  j!                  dej.                  ej*                  g      ej                  j!                  dg d      ej                  j!                  dg d      d                      Zy)TestLegendreFunctionsc                 j   d}t               5 }|j                  t               t        j                  dd|d      }d d d        t        t        j                  d|dd|z  |z  dz
  z  gdt        j                  ||z  dz
        d|z  t        j                  ||z  dz
        z  gddd||z  dz
  z  gg      t        j                  ddd|z  gd|t        j                  ||z  dz
        z  dd|z  |z  dz
  z  t        j                  ||z  dz
        z  gddd	|z  gg      fd
       y # 1 sw Y   xY w)Ny      ?333333?r0   r   r   rr   rq   r   rt      rK   )	r   r3   r4   r   r6   r   r    r!   sqrt)r"   r  r7   clps       r)   
test_clpmnz TestLegendreFunctions.test_clpmn  sB     	,CJJ 2J3--1a+C	, 	"#HHvq#qs1uQw-8"BGGAaCENAaC!A4FG"FAqs1uI68 9 HHvvqs3"Abggac!en$4a1Qqk"''!A#a%.6PQ"FAaC02 34 			, 	,s   /D))D2c                    d}d}d}d}t               5 }|j                  t               t        j                  |||d|z  z   d      d   ||f   }t        j                  |||d|z  z
  d      d   ||f   }d d d        t        t        j                  g      t        j                  t        j                  |||      t        j                  |||      g      d	       y # 1 sw Y   kxY w)
NrQ   r   r   rq   r0   r2   r   r   rK   )	r   r3   r4   r   r6   r   r    r!   lpmvr"   epsr   r,   rZ   r7   clp_plus	clp_minuss           r)   test_clpmn_close_to_real_2z0TestLegendreFunctions.test_clpmn_close_to_real_2  s      	BCJJ 2J3}}Q1RV8Q7:1a4@HaAbfHa8;AqDAI	B
 	""((Hi+@"A"$((GLLAq,A)0aA)>,@ #A"#	%	B 	Bs   A#C  C)c                    d}d}d}d}t               5 }|j                  t               t        j                  |||d|z  z   d      d   ||f   }t        j                  |||d|z  z
  d      d   ||f   }d d d        t        t        j                  g      t        j                  t        j                  |||      t        j                  d|z  t        j                  z        z  t        j                  |||      t        j                  d	|z  t        j                  z        z  g      d
       y # 1 sw Y   xY w)NrQ   r   r   rq   r0   r2   r   y                           ?rK   )r   r3   r4   r   r6   r   r    r!   rI  expr
  rJ  s           r)   test_clpmn_close_to_real_3z0TestLegendreFunctions.test_clpmn_close_to_real_3  s      	BCJJ 2J3}}Q1RV8Q7:1a4@HaAbfHa8;AqDAI	B
 	""((Hi+@"A"$((GLLAq,A"&&qQSQVQVBW,W)0aA)>rvvd1fRUUl?S)S,U #V"#	%	B 	Bs   A#D44D=c                 8   d}d}d}d}t               5 }|j                  t               dD ]W  }t        t	        j
                  |||d|z  z   |      d   ||f   t	        j
                  |||d|z  z
  |      d   ||f   d       Y 	 d d d        y # 1 sw Y   y xY w)NgHz>r   r2   r0   r   r   rD  )r   r3   r4   r   r   r6   )r"   rK  r   r,   rZ   r7   types          r)   test_clpmn_across_unit_circlez3TestLegendreFunctions.test_clpmn_across_unit_circle  s      	QCJJ 2J3 Q#GMM!Q"S&$$G$J1a4$P 'aAbfHd CA Fq!t LaQQ	Q 	Q 	Qs   A3BBc           
         t               5 }|j                  t               dD ]  }t        d      D ]  }t        d|      D ]  }t	        j
                  |||      }t        j                  |d   ddd f         j                         sJ t	        j                  |||      }t        j                  |d   ddd f         j                         rJ    	 d d d        y # 1 sw Y   y xY w)Nr0   r   r   r   )
r   r3   r4   rl   r   r6   r    isinfallr   )r"   r7   r  r,   r   lps         r)   test_infzTestLegendreFunctions.test_inf  s      	;CJJ 2J3 ;q ;A"1a[ ;$]]1a3!xx1ad488:::$\\!Q2!xx1ad488:::	;;;	; 	; 	;s   CC C  C)c                    g d}d}d}t               5 }|j                  t               dD ]}  }|D ]v  }dD ]o  }t        j                  |||d|z  z   |      d   t        j                  |||d|z  z
  |      d   z
  |z  }t        t        j                  ||||      d	   |d
       q x  	 d d d        y # 1 sw Y   y xY w)N)y      ?      ?y            ?y            y      ?      y      ?      ?y            ?y            y      ?      r   r   r0   r   )MbP?y        MbP?rq   r   r   g-C6?)r   )r   r3   r4   r   r6   r   )	r"   zvalsr   r,   r7   rT  r  happrox_derivatives	            r)   test_deriv_clpmnz&TestLegendreFunctions.test_deriv_clpmn  s    +  		3CJJ 2J3 3 3A* 3-4]]1a3q5$-OPQ-R.5mmAq!CE'4.PQR.S.TUV-W)'aAt(DQ(G(9-13333		3 		3 		3s   BB66B?c                 R   t        j                  ddd      }t        |dd       t        j                  ddd      }t        |dd       t        j                  d	
      5  t        j                  ddd      }d d d        |dk7  st        j
                  |      sJ y y # 1 sw Y   'xY w)Nr   r   rq   rs   rK   (   r\  gI?ignore)rX  r   )r   rI  r   r    errstateisnan)r"   rY  s     r)   	test_lpmvzTestLegendreFunctions.test_lpmv*  s    \\!Ab!Bva(\\!Bt$B1!4 [[X& 	*bD)B	*Qw"((2,&&,w	* 	*s   BB&c                     t        j                  ddd      }t        j                  dd      }t        |d   d   |d   d       t        |d   d   |d   d       y )Nr   r   rq   r   r   )r   lqmnlqnr   )r"   lqmnflqfs      r)   	test_lqmnzTestLegendreFunctions.test_lqmn6  sT    Qq$kk!B!%(1+c!fQ7!%(1+c!fQ7r+   c                     d}d}||z
  ||z   fD ]6  }t        j                  dd|      d   d   }d||z  dz
  z  }t        ||       8 y)znalgorithm for real arguments changes at 1.0001
           test against analytical result for m=2, n=1
        gqh ?gh㈵>r   r   r   )r   r   N)r   rh  r   )r"   x0deltarZ   lqexpecteds         r)   test_lqmn_gt1z#TestLegendreFunctions.test_lqmn_gt1<  sa     U(BuH% 	.AaA&q)&1B!A#a%yHH-	.r+   c                    t        j                  ddd      \  }}t        |j                  d       t        |j                  d       t        j                  ddd      \  }}t        |j                  d       t        |j                  d       y )Nr   g?)r   r   r   )r   r   )r   rh  r   rD   )r"   abs      r)   test_lqmn_shapez%TestLegendreFunctions.test_lqmn_shapeG  sf    ||Aq#&1QWWf%QWWf%||Aq#&1QWWf%QWWf%r+   c                     t        j                  dd      }t        |t        j                  g d      t        j                  g d      fd       y )Nr   rq   )gk+ݓ?g=yX5gW2)g|a2U?g~jt?gڊer   )r   ri  r   r    r!   )r"   rk  s     r)   test_lqnzTestLegendreFunctions.test_lqnP  s?    kk!B!#rxx0J'K')xx0H'I'KKL	Nr+   functionr,   ra   	z_complexFT	z_inexactinput_shape)rA   r   r   r   r   r   r   r   r   )r   r   r   c                    t         j                  j                  d      }|r|j                  dd|      }n|j	                  dd|      }|rd|z  d|z  z   }t               5 }|j                  t        	        |||      \  }	}
d
d
d
       	j                  |dz   f|z   k(  sJ 
j                  |dz   f|z   k(  sJ y
# 1 sw Y   :xY w)z Tests for correct output shapes.rM   r   r   sizer   r   r2   rP  r0   N)	r    rT   rU   rV   rW   r   r3   r4   rD   )r"   ry  r,   rz  r{  r|  rY   r  r7   P_zP_d_zs              r)   test_array_inputs_lxnz+TestLegendreFunctions.test_array_inputs_lxnU  s     ii##D)R5AB4AQ!A  	(CJJ 2J3!!QJC	( yyQUI3333{{q1ui+5555		( 	(s   "#B>>Czm,n)r   r   r   )r   rb   )   rc   )   rd   )rA   r}  r~  r   r   r   r  c                 "   t         j                  j                  d      }|r|j                  dd|      }n|j	                  dd|      } ||||      \  }}	|j
                  |dz   |dz   f|z   k(  sJ |	j
                  |dz   |dz   f|z   k(  sJ y)+Tests for correct output shapes and dtypes.rM   r   r   r  r   r   N)r    rT   rU   rV   rW   rD   )
r"   ry  r   r,   r{  r|  rY   r  r  r  s
             r)   test_array_inputs_lxmnz,TestLegendreFunctions.test_array_inputs_lxmnp  s     ii##D)R5AB4AaA&
UyyQUAEN[8888{{q1ua!en{::::r+   c                 t   t         j                  j                  d      }|j                  dd|      }d|z  d|z  z   }t	               5 }|j                  t                ||||      \  }}	ddd       j                  |dz   |dz   f|z   k(  sJ 	j                  |dz   |dz   f|z   k(  sJ y# 1 sw Y   BxY w)	r  rM   r   r   r  r2   rP  r0   N)r    rT   rU   rW   r   r3   r4   rD   )
r"   ry  r   r,   r|  rY   r  r7   r  r  s
             r)   test_array_inputs_clxmnz-TestLegendreFunctions.test_array_inputs_clxmn  s     ii##D)KKAKK0FTAX  	+CJJ 2J3!!Q*JC	+ yyQUAEN[8888{{q1ua!en{::::	+ 	+s   	$B..B7N)r;   r<   r=   rG  rN  rR  rU  rZ  r`  rf  rl  rr  rv  rx  r>   r?   r@   r   r5   ri  r  rh  r  r6   r  rA   r+   r)   rB  rB    s    % % 
Q	;3$2
'8	.&N
 [[Z'++w{{)CD[[S"67[[[5$-8[[[5$-8[[	
6 9 9 8 E6" [[Z',,8[[< [[[5$-8[[ 


; 9	 9
; [[Z'--)FG[[< [[ 

;	 H;r+   rB  c                     |rPt        j                  d| z  dz   t        j                  | |z
        z  dt        j                  | |z         z  z        S y)Nr   r   )mathrE  	factorial)r,   r   r   s      r)   assoc_legendre_factorr    sW    		1q519NN1q5!"%&A)>%>@ A 	B r+   r   Fr  c                H    t        dd|      }t        j                  | |      S Nr   r  r    	full_liker  r   r   facs       r)   r   r     !    
1d
+C<<3r+   c                &    t        dd|      }|| z  S Nr   r   r  r  s       r)   r   r     s    
1d
+C7Nr+   c          
         t        j                  |dk(  t        j                  t        j                  t        j                  |             dd      d      }t        j                  |dk(  dd      }t	        dd|      }t        j
                  t        j                  |dk(  | | z  dz
  d| | z  z
              }||z  |z  |z  S Nr   r   r   )r    r   signbitr  r  rE  )r  r   r   branch_signbranch_cut_signr  ws          r)   r   r     s    ((:?BHHRZZ
5KQPR,SUWXKhhzQA6O
1d
+C
q!a%!)QQY?@A[(3.22r+   c                ~    t        j                  |dk(  dd      }t        dd|      }| |z  t        | |      z  dz  S Nr   r   r   r   r   r    r   r  r   r  r   r   r  r  s        r)   r   r     sM    hhzQA6O
2t
,Cs"Q:679:; <r+   c                >    t        dd|      }|d| z  | z  dz
  z  dz  S Nr   r   r   r   r  r  s       r)   r   r     s,    
1d
+C!a%!)a- 1$$r+   c                H    t        dd|      }d|z  | z  t        | |      z  S Nr   r   r   r  r  r   r  s       r)   r   r     s/    
1d
+CGaKQ:67 8r+   c                r    t        j                  |dk(  dd      }t        dd|      }d|z  |z  d| | z  z
  z  S )Nr   r   r   r   r    r   r  r  s        r)   r   r     sC    hhzQA6O
1d
+C$AE	22r+   c                r    t        j                  |dk(  dd      }t        dd|      }||z  d| | z  z
  z  dz  S )Nr   r   r   r   r   rb   r  r  s        r)   r   r     sC    hhzQA6O
2t
,CS AAI.22r+   c                    t        j                  |dk(  dd      }t        dd|      }| |z  | z  t        | |      z  dz  S Nr   r   r   r   r  r  r  s        r)   r   r     sR    hhzQA6O
2t
,Cs"Q&Q:679:; <r+   c                D    t        dd|      }|d| z  | z  dz
  z  | z  dz  S Nr   r   r   r   r  r  s       r)   r   r     s1    
1d
+C!a%!)a- 1$q((r+   c                `    t        dd|      }d|z  d| z  | z  dz
  z  t        | |      z  dz  S )Nr   r   r   r  r   r  r  s       r)   r   r     sD    
1d
+CGq1uqy1}%Q:679:; <r+   c                x    t        j                  |dk(  dd      }t        dd|      }d|z  |z  d| | z  z
  z  | z  S Nr   r   r   r   r   r  r  s        r)   r   r     sH    hhzQA6O
1d
+C#%QU3a77r+   c                    t        j                  |dk(  dd      }t        dd|      }d|z  |z  d| | z  z
  z  t        | |      z  S )Nr   r   r   r   r  r  r  s        r)   r   r     sT    hhzQA6O
1d
+C 3&!a!e)4Q:67 8r+   c                T    t        dd|      }|| | z  dz
  z  t        | |      z  dz  S )Nr   r   r   r  0   r  r  s       r)   r   r     s<    
2t
,C1q519Q:679;< =r+   c                x    t        j                  |dk(  dd      }t        dd|      }||z  d| | z  z
  z  | z  dz  S Nr   r   r   r   rb   r  r  s        r)   r   r     sH    hhzQA6O
2t
,CS AAI.2Q66r+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  t        | |      z  dz  S )Nr   r   r   r   r  rb   r  r  s        r)   r   r     s[    hhzQA6O
2t
,Cc!QQ]3Q:679:; <r+   c                P    t        dd|      }|d| z  | z  dz
  | z  | z  dz   z  dz  S Nr   r   r      r   rb   r  r  s       r)   r   r     s;    
1d
+C26A:?a'!+a/0144r+   c                f    t        dd|      }d|z  d| z  | z  dz
  z  | z  t        | |      z  dz  S )Nr   r   r   rK   r   r  r   r  r  s       r)   r   r     sI    
1d
+CGq1uqy1}%)A*5689: ;r+   c                    t        j                  |dk(  dd      }t        dd|      }d|z  |z  dd| z  | z  z
  | z  | z  dz
  z  dz  S )	Nr   r   r   r   r   r   rb   rK   r  r  s        r)   r   r     s[    hhzQA6O
1d
+C#%!a!eai-1)<q)@1)DEIIr+   c                    t        j                  |dk(  dd      }t        dd|      }d|z  |z  d| | z  z
  z  | z  t        | |      z  S )Nr   r   r   r   i   r  r  r  s        r)   r   r     sY    hhzQA6O
1d
+C/!C'1q1u959Q:67 8r+   c                ^    t        dd|      }d|z  t        j                  | | z  dz
        z  S Nr   r  r   r  r    squarer  s       r)   r   r      s0    
1d
+C9ryyQ+++r+   c                ^    t        dd|      }|t        j                  | | z  dz
        z  dz  S Nr   r   r   i  r  r  s       r)   r   r   %  s1    
2t
,C1q519%%++r+   c                Z    t        dd|      }|| | z  dz
  z  | z  t        | |      z  dz  S )Nr   r   r   r  r  r  r  s       r)   r   r   *  sA    
2t
,C1q519!Q:679;< =r+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  | z  | z  dz
  z  dz  S )	Nr   r   r   r   r   rb   rK   r  r  r  s        r)   r   r   0  sV    hhzQA6O
2t
,CS QQ]a$7!$;a$?@2EEr+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  | z  t        | |      z  dz  S )Nr   r   r   r   rK   r  rb   r  r  s        r)   r   r   6  s`    hhzQA6O
2t
,Cc!QQ]3a7Q:679:; <r+   c           
      *   t        j                  |dk(  t        j                  t        j                  t        j                  |             dd      d      }| t        j                  t        j                  |dk(  | | z  dz
  d| | z  z
              z  }|S r  )r    r   r  r  rE  )r  r   r  out11_div_zs       r)   assoc_legendre_p_1_1_jac_div_zr  =  sz    ((:?BHHRZZ
5KQPR,SUWXK<
q!a%!)QQY?@AK r+   c                ,    t        j                  |       S Nr    
zeros_like)r  r   r   s      r)   r   r   E  s    ==r+   c                H    t        dd|      }t        j                  | |      S r  r  r  s       r)   r   r   H  r  r+   c                B    t        dd|      }|| z  t        | |      z  S )Nr   r  r  r  r  s       r)   r   r   M  s-    
1d
+C!G&qZ@A Br+   c                    t        j                  |dk(  dd      }t        dd|      }| |z  | z  t        | |      z  dz  S r  r    r   r  r  r  s        r)   r   r   S  sU    hhzQA6O
2t
,Cs"Q&&qZ@ACDE Fr+   c                ,    t        dd|      }d|z  | z  S )Nr   r   r   r  r  s       r)   r   r   Z  s    
1d
+Cs7Q;r+   c                Z    t        dd|      }d|z  d| z  | z  dz
  z  t        | |      z  S r  r  r  s       r)   r   r   _  s>    
1d
+CGq1uqy1}%&qZ@A Br+   c                f    t        j                  |dk(  dd      }t        dd|      }d|z  |z  | z  S )Nr   r   r   r   ir  r  s        r)   r   r   e  s;    hhzQA6O
1d
+C#%))r+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  t        | |      z  dz  S r  r  r  s        r)   r   r   k  s^    hhzQA6O
2t
,Cc!QQ]3&qZ@ACDE Fr+   c                h    t        j                  |dk(  dd      }t        dd|      }| |z  | z  dz  S )Nr   r   r   r   r   r   r  r  s        r)   r   r   r  s>    hhzQA6O
2t
,Cc!A%))r+   c                D    t        dd|      }d|z  d| z  | z  dz
  z  dz  S )Nr   r   r   r   r   r  r  s       r)   r   r   x  s0    
1d
+Cs7a!eai!m$q((r+   c                f    t        dd|      }d|z  d| z  | z  dz
  z  | z  t        | |      z  dz  S )Nr   r   r   r  r  r   r  r  s       r)   r   r   }  sL    
1d
+CGrAvzB'!+&qZ@ACDE Fr+   c                x    t        j                  |dk(  dd      }t        dd|      }d|z  |z  dd| z  | z  z
  z  S r  r  r  s        r)   r   r     sG    hhzQA6O
1d
+C#%QUQY77r+   c                    t        j                  |dk(  dd      }t        dd|      }d|z  |z  d| | z  z
  z  | z  t        | |      z  S )Nr   r   r   -   r  r  r  s        r)   r   r     s[    hhzQA6O
1d
+C 3&!a!e)4q8&qZ@A Br+   c                Z    t        dd|      }|| | z  dz
  z  | z  t        | |      z  dz  S )Nr   r   r   r  rc   r  r  s       r)   r   r     sD    
2t
,C1q519!&qZ@ACEF Gr+   c                x    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  dz  S r  r  r  s        r)   r   r     sG    hhzQA6O
2t
,CS AA	M2Q66r+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  | z  t        | |      z  dz  S )Nr   r   r   r  r   r  rb   r  r  s        r)   r   r     sc    hhzQA6O
2t
,Cc!R"q&1*_59&qZ@ACDE Fr+   c                J    t        dd|      }d|z  d| z  | z  dz
  z  | z  dz  S )Nr   r   r   rK   r   r   r  r  s       r)   r   r     s5    
1d
+Cs7a!eai!m$q(1,,r+   c                r    t        dd|      }d|z  d| z  | z  dz
  | z  | z  dz   z  t        | |      z  dz  S )	Nr   r   r         r   r  r   r  r  s       r)   r   r     sV    
1d
+CGQ
R1,q0145&qZ@ACDE Fr+   c                ~    t        j                  |dk(  dd      }t        dd|      }d|z  |z  dd| z  | z  z
  z  | z  S )Nr   r   r   r   r   r  rK   r  r  s        r)   r   r     sL    hhzQA6O
1d
+C#%QUQY7!;;r+   c                    t        j                  |dk(  dd      }t        dd|      }d|z  |z  dd| z  | z  z
  | z  | z  dz
  z  t        | |      z  S )Nr   r   r   r   r  r   r  r  r  s        r)   r   r     si    hhzQA6O
1d
+C/!C'AA	MQ+>+BQ+FG&qZ@A Br+   c                >    t        dd|      }d|z  | | z  dz
  z  | z  S )Nr   i  r   r  r  s       r)   r   r     s,    
1d
+C9A	"Q&&r+   c                >    t        dd|      }|| | z  dz
  z  | z  dz  S Nr   r   r   `   r  r  s       r)   r   r     s-    
2t
,C!a%!)q 2%%r+   c                l    t        dd|      }|d| z  | z  dz
  | z  | z  dz   z  t        | |      z  dz  S )Nr   r   r   r   r  r  r  r  s       r)   r   r     sR    
2t
,CAEAIMQ&*Q./&qZ@ACEF Gr+   c                ~    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  z  | z  dz  S )Nr   r   r   r   r   rK      r  r  s        r)   r   r     sL    hhzQA6O
2t
,CS AA	M2Q6;;r+   c                    t        j                  |dk(  dd      }t        dd|      }||z  dd| z  | z  z
  | z  | z  dz
  z  t        | |      z  dz  S )	Nr   r   r   r   r  r  r  rb   r  r  s        r)   r   r     sm    hhzQA6O
2t
,Cc!b26A:o%:Q%>%BC&qZ@ACDE Fr+   c                 l    t        | |d      t        j                  dt        j                  z        z  S )NTr   r   )r  r    rE  r
  )r,   r   s     r)   sph_legendre_factorr    s'     AD1BGGAI4FFFr+   c                 F    t        dd      }t        j                  | |      S r  )r  r    r  r=  r  s     r)   r  r    s    
a
#C<<s##r+   c                 J    t        dd      }|t        j                  |       z  S r  )r  r    r@  r  s     r)   r  r    s!    
a
#Cr+   c                 r    t        dd      }| t        j                  t        j                  |             z  S )Nr   r  r    absr?  r  s     r)   r  r    s,    
a
#C4"&&'''r+   c                 v    t        dd      }|t        j                  t        j                  |             z  dz  S Nr   r   r   r  r  s     r)   r  r    s/    
a
$Cu&&**r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  dz  S r  r  r    r  r@  r  s     r)   r  r    s9    
a
#C!biiu..23a77r+   c                     t        dd      }d|z  t        j                  t        j                  |             z  t        j                  |       z  S )Nr   r   r   r  r    r  r?  r@  r  s     r)   r  r    s;    
a
#C8bffRVVE]++bffUm;;r+   c                 |    t        dd      }d|z  dt        j                  t        j                  |             z
  z  S )Nr   r   r   r  r  s     r)   r  r    s3    
a
#Cs7a"))BFF5M2233r+   c                 |    t        dd      }|dt        j                  t        j                  |             z
  z  dz  S )Nr   r   r   rb   r  r  s     r)   r  r    s4    
a
$C!biiu../!33r+   c                     t        dd      }|t        j                  |       z  t        j                  t        j                  |             z  dz  S )Nr   r   )r  r    r@  r  r?  r  s     r)   r  r    s<    
a
$Cu!66::r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  dz  S r  r  r  s     r)   r  r    sN    
a
#C1ryy//!34
u r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  t        j
                  |             z  dz  S )Nr   r   r   r   r   r  r    r  r@  r  r?  r  s     r)   r  r    s[    
a
#CHBIIbffUm44q89
rvve} !" #r+   c                     t        dd      }d|z  t        j                  t        j                  |             dz
  z  t        j                  |       z  S )Nr   r   r   r  r  s     r)   r  r    sE    
a
#C#I266%=1A56
u r+   c                     t        dd      }d|z  t        j                  t        j                  t        j                  |             d      z  S )Nr   r  r  r    powerr  r?  r  s     r)   r  r    s9    
a
#C9rxxrvve} 5q999r+   c                     t        dd      }|t        j                  t        j                  t        j                  |             d      z  dz  S )Nr   r   r  r	  r  s     r)   r  r    s:    
a
$C"&&/33b88r+   c                     t        dd      }| t        j                  t        j                  |             dz
  z  t        j                  |       z  dz  S Nr   r   r   rb   r  r  s     r)   r  r  $  sK    
a
$CDBIIbffUm,q01
u r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  t        j
                  |             z  dz  S )Nr   r   r   r   rb   r  r  s     r)   r  r  *  sW    
a
$C1ryy//!34
rvve} !" #r+   c           	          t        dd      }|dt        j                  t        j                  t        j                  |                   z  dt        j                  t        j                  |             z  z
  dz   z  dz  S r  r  r  s     r)   r  r  0  sj    
a
#C2		"))BFF5M":;;
RYYrvve}%%&()* +-./ 0r+   c                    t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  t        j                  t        j
                  |             z  dz  S )Nr   r   rK   r   r   r  r  s     r)   r  r  6  sk    
a
#CHBIIbffUm44q89
urvve}-.012 3r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  t        j                  |             dz
  z  dz  S )Nr   r   r  rK   r   r  r  s     r)   r  r  <  s`    
a
#C#IRYYrvve}559:	266%=	!A	%')*+ ,r+   c                     t        dd      }d|z  t        j                  t        j                  t        j                  |             d      z  t        j
                  |       z  S )Nr   r   r  r    r
  r  r?  r@  r  s     r)   r  r  B  sF    
a
#C#:u!6::RVVE]JJr+   c                     t        dd      }d|z  t        j                  t        j                  t        j                  |             dz
        z  S r  r  r  s     r)   r  r  G  s<    
a
#C9ryy266%=!9A!=>>>r+   c                     t        dd      }|t        j                  t        j                  t        j                  |             dz
        z  dz  S r  r  r  s     r)   r   r   L  s=    
a
$C299RVVE]3a7883>>r+   c                     t        dd      }|t        j                  t        j                  t        j                  |             d      z  t        j
                  |       z  dz  S )Nr   r   r   r  r  r  s     r)   r!  r!  Q  sO    
a
$C"((266"&&-0!44
u r+   c                     t        dd      }| dt        j                  t        j                  |             z  dz
  z  t        j                  t        j                  |             dz
  z  dz  S )Nr   r   rK   r   r  r  r  s     r)   r"  r"  W  s^    
a
$CDA		"&&-00145	266%=	!A	%')+, -r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  t        j                  t        j
                  |             z  dz  S )Nr   r   rK   r   rb   r  r  s     r)   r#  r#  ]  sg    
a
$C1ryy//!34
urvve}-.012 3r+   c                 ,    t        j                  |       S r  r  )r=  s    r)   r$  r$  c  s    ==r+   c                 L    t        dd      }| t        j                  |       z  S r  )r  r    r?  r  s     r)   r%  r%  f  s#    
a
#C4"&&-r+   c                     t        dd      }| t        j                  |       z  dt        j                  t        j                  |       d      z  dz
  z  S )Nr   r   r  r    r@  	heavisider?  r  s     r)   r&  r&  k  sE    
a
#C4"&&-1r||BFF5M1'E#E#IJJr+   c                     t        dd      }|t        j                  |       z  dt        j                  t        j                  |       d      z  dz
  z  dz  S r  r  r  s     r)   r'  r'  p  sH    
a
$C!bll266%=!&D"Dq"HIAMMr+   c                 |    t        dd      }d|z  t        j                  |       z  t        j                  |       z  S )Nr   r   r   )r  r    r@  r?  r  s     r)   r(  r(  u  s2    
a
#C8bffUm#bffUm33r+   c                 V   t        dd      }d|z  t        j                  t        j                  |              dt        j                  t        j
                  |       d      z  dz
  z  t        j                  t        j
                  |             t        j
                  |       z  z   z  S )Nr   r   r   r  r    r  r@  r  r?  r  r  s     r)   r)  r)  z  s    
a
#CG		"&&-00	
R\\"&&-+	+a	/1
rvve}u-. / 0r+   c                 |    t        dd      }d|z  t        j                  |       z  t        j                  |       z  S )Nr   rD  r  r    r?  r@  r  s     r)   r*  r*    s2    
a
#Cs7RVVE]"RVVE]22r+   c                 |    t        dd      }|t        j                  |       z  t        j                  |       z  dz  S )Nr   r   r   r%  r  s     r)   r+  r+    s3    
a
$C.22r+   c                 X   t        dd      }| t        j                  t        j                  |              dt        j                  t        j
                  |       d      z  dz
  z  t        j                  t        j
                  |             t        j
                  |       z  z   z  dz  S )Nr   r   r   r#  r  s     r)   r,  r,    s    
a
$CDRYYrvve}--	
R\\"&&-+	+a	/1
rvve}u-. /123 4r+   c                     t        dd      }d|z  ddt        j                  t        j                  |             z  z
  z  t        j                  |       z  dz  S )Nr   r   r   r   r   r  r    r  r@  r?  r  s     r)   r-  r-    sJ    
a
#Cs7a!biiu6667"&&-G!KKr+   c                    t        dd      }d|z  ddt        j                  t        j                  |             z  z
  z  t        j                  |       z  dt        j                  t        j
                  |       d      z  dz
  z  dz  S )Nr   r   r  r   r   r  r    r  r@  r  r?  r  s     r)   r.  r.    st    
a
#CGrB266%=!999:RVVE]J	
R\\"&&-+	+a	/1345 6r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  S )Nr   r   r   r   r)  r  s     r)   r/  r/    sE    
a
#C8q299RVVE]33a78266%=HHr+   c                     t        dd      }d|z  t        j                  t        j                  |             z  t        j                  |       z  t        j                  |       z  S )Nr   ir  r  s     r)   r0  r0    sH    
a
#C9rvvbffUm,,rvve}<rvve}LLr+   c                     t        dd      }|t        j                  t        j                  |             z  t        j                  |       z  t        j                  |       z  dz  S )Nr   r   rc   r  r  s     r)   r1  r1    sI    
a
$Cu&&6FKKr+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  dz  S r  r)  r  s     r)   r2  r2    sF    
a
$C!biiu..23bffUmCaGGr+   c                    t        dd      }| ddt        j                  t        j                  |             z  z
  z  t        j                  |       z  dt        j                  t        j
                  |       d      z  dz
  z  dz  S )Nr   r   r  r   r   r   rb   r+  r  s     r)   r3  r3    su    
a
$CDBbiiu6667
u	
R\\"&&-+	+a	/1345 6r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  t        j                  |       z  dz  S )Nr   r   r  rK   r   r   r)  r  s     r)   r4  r4    sb    
a
#CHBIIbffUm44q89
uu&()* +r+   c           
      f   t        dd      }d|z  ddt        j                  t        j                  |             z  z   dt        j                  t        j                  t        j                  |                   z  z
  z  dt        j                  t        j
                  |       d      z  dz
  z  dz  S )Nr   r   r   r   r  r  r   r+  r  s     r)   r5  r5    s    
a
#CGrB266%=!999
RYYryy/001 2	
R\\"&&-+	+a	/1345 6r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  t        j                  |       z  S )Nr   r   r  rK   r)  r  s     r)   r6  r6    sZ    
a
#CHBIIbffUm44q89
uu& 'r+   c                     t        dd      }d|z  dt        j                  t        j                  |             z  dz
  z  t        j                  t        j
                  |             z  t        j
                  |       z  S )Nr   r   r  r   r  r  s     r)   r7  r7    sc    
a
#C3J!biiu66:;
rvve} "u. /r+   c                     t        dd      }d|z  t        j                  t        j                  |             dz
  z  t        j                  |       z  t        j                  |       z  S )Nr   i\r   r)  r  s     r)   r8  r8    sU    
a
#C3J"))BFF5M2Q67
uu& 'r+   c                     t        dd      }| t        j                  t        j                  |             dz
  z  t        j                  |       z  t        j                  |       z  dz  S r  r)  r  s     r)   r9  r9    s[    
a
$CDBIIbffUm,q01
uu&(*+ ,r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  t        j
                  |             z  t        j
                  |       z  dz  S )Nr   r   r   r  r  r  s     r)   r:  r:    sg    
a
$C1ryy//!34
rvve} "u.023 4r+   c                     t        dd      }|dt        j                  t        j                  |             z  dz
  z  t        j                  |       z  t        j                  |       z  dz  S )Nr   r   rK   r  r)  r  s     r)   r;  r;    s[    
a
$C1ryy//!34rvve}D
u r+   c           
      b   t        dd      }| ddt        j                  t        j                  |             z  z   dt        j                  t        j                  t        j                  |                   z  z
  z  dt        j                  t        j
                  |       d      z  dz
  z  dz  S )	Nr   r   r   r  r  r   r   rb   r+  r  s     r)   r<  r<    s    
a
$CDBbiiu666
RYYryy/001 2	
R\\"&&-+	+a	/1345 6r+   r~  )r  numpyr    r>   numpy.testingr   r   r   r   r   scipyr   scipy.specialr	   r
   r   r   r   r   r   rC   rx   r   r  rB  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  rA   r+   r)   <module>r>     s     ( ( > >3 3:)F )FVCB CBJcL cLJm$ m$^e; e;N +,%  
 +,% 
 +,% 3 ,-5 < +,% %
 +,% 8 +,% 3 ,-5 3 ,-5 < +,% )
 +,% < +,% 8 +,% 8 ,-5 = ,-5 7 ,-5 < +,% 5
 +,% ; +,% J +,% 8 +,% ,
 ,-5 ,
 ,-5 = ,-5 F ,-5 < /0e  /0e  
 /0e B 01u F /0e 
 /0e B /0e * 01u F 01u * /0e )
 /0e F /0e 8 /0e B 01u G 01u 7 01u F /0e -
 /0e F /0e < /0e B /0e '
 01u &
 01u G 01u < 01u FG$

(
+
8
<
4
4
;
#:
9
#03,K
?
?
-3  
K
N
4
03
3
4L
6I
M
L
H
6+6'/',46r+   