
    -ii4                        d dl Z d dlZd dlZd dlZd dl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+Z.dddd,Z/dddd-Z0d{d.Z1dddd/Z2dddd0Z3dddd1Z4dddd2Z5dddd3Z6dddd4Z7dddd5Z8dddd6Z9d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<Z?dddd=Z@dddd>ZAdddd?ZBdddd@ZCddddAZDddddBZEddddCZFddddDZGddddEZHddddFZIddddGZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcda Zddb Zedc Zfdd Zgde Zhdf Zidg Zjdh Zkdi Zldj Zmdk Zndl Zodm Zpdn Zqdo Zrdp Zsdq Ztdr Zuds Zvdt Zwdu Zxdv Zydw Zzdx Z{dy Z|dz Z}dS )|    N)assert_equalassert_allclose)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dS )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	d
           t	          |j        t          j        g d          dz  dd
           t	          |j        t          j        g d          dz  dd
           t	          |j        t          j        g d          dz  dd
           d S )Nr                  )r   r   g       @g7QE=atolrtol)r   r   r   v!>)#   r   ir   r   g       @)?   r   ir      r   )r   legendrer   cr   nparray)selfleg0leg1leg2leg3leg4leg5s          g/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/special/tests/test_legendre.pytest_legendrezTestLegendre.test_legendre   sp   """"""""""""TVaS!!!TVaU### 4 4S 8$1	. 	. 	. 	. 7 7 ;#!	- 	- 	- 	-););); < <S @#!	- 	- 	- 	-)?)?)? @ @ D#!	- 	- 	- 	- 	- 	-    N)__name__
__module____qualname__r)    r*   r(   r   r      s#        - - - - -r*   r   c                       e Zd Zej                            dg d          d             Zej                            dg d          ej                            dg d          d                         ZdS )	TestLegendrePshape
   r   	   r   r      c                    t           j                            d          }|                    dd|          }|                    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                            |dd	           d S )
N  r   d   r   r   r   diff_n绽|=r   )	r   randomdefault_rngintegersuniformr   r1   testingr   )	r!   r1   rngnxpp_jacp_hesserrs	            r(   test_odezTestLegendreP.test_ode#   s    i##D))LLC''KKAu%%%a15555&w%{ag%%%%|u{****1q5yF"QUU]2Q!a%[1_D

""3"66666r*   n_maxr   r   r             x_shapec           
      P   t           j                            d          }|                    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                            |	dd	           d S )
Nr:   r   r   r   r<   axisr   r>   r?   )r   r@   rA   rC   r   arangeexpand_dimstuplerangendimr1   lenrD   r   )
r!   rM   rR   rE   rG   rH   rI   rJ   rF   rK   s
             r(   test_all_odezTestLegendreP.test_all_ode3   s'    i##D))KKAw'')%1===5&Ieai  N1U5AFQJ+?+?%@%@AAAw3q66)ag-----{ag%%%%|u{****1q5yF"QUU]2Q!a%[1_D

""3"66666r*   N)r+   r,   r-   pytestmarkparametrizerL   r\   r.   r*   r(   r0   r0   "   s        [W&@&@&@AA7 7 BA7 [W&:&:&:;;[Y(B(B(BCC7 7 DC <;7 7 7r*   r0   c                   0   e Zd Zd Zej                            dg d          ej                            dddg          ej                            ddd	g          d
                                     Zej                            dg d          ej                            dddg          d                         Zej                            dg d          d             Z	ej                            dg d          ej                            dddg          d                         Z
ej                            ddg          ej                            dd	g          ej                            dddg          d                                     ZdS )TestAssocLegendrePc                 :   t          j        g d          }t          |          }t          dd|          }t	          t          j        |          |           t          |          }t          dd|          }t	          t          j        |          |           d S )N)r   g      r         ?r   r   r   r   )r   r    assoc_legendre_p_1_0r   r   squeezeassoc_legendre_p_3_0)r!   zexpectedresults       r(   test_assoc_legendre_gh23101z.TestAssocLegendreP.test_assoc_legendre_gh23101G   s    H((())'**!!Q**
6**H555'**!!Q**
6**H55555r*   r1   r3   r5   )r   r   r8   r4   m_maxr   r   rM   r8   r4   c                 P   t           j                            d          }|                    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                            ||           t           j                            ||           t           j                            ||           d S )Nr:   GzGz?r   r<   r   rT   r   r   r   r   )r   r@   rA   rC   r	   rV   rW   rX   rY   rZ   concatenater   rD   r   )r!   r1   rM   rl   rE   rG   p_all	p_all_jac
p_all_hessrF   mrH   rI   rJ   s                 r(   	test_lpmnzTestAssocLegendreP.test_lpmnQ   sn    i##D))KKtU++ q;;; 	%y* Ieai  N1U5AFQJ+?+?%@%@AAANBIeai00")UFA2F2FGHHN1TE%16A:2F2F,G,G%GHHHN1V,,,+Aq!A>>>5&

""1e,,,

""5)444

""6:66666r*   normTFc           	         t           j                            d          }|                    dd|          }|                    dd|          }|                    dd|          }t          ||||d          \  }}}	|j        |k    sJ |j        |j        k    sJ |	j        |j        k    sJ t           j                            d||z  z
  |	z  d|z  |z  ||dz   z  ||z  d||z  z
  z  z
  |z  z
  d	d
           d S )Nr:   r   r4   r   r   r   rx   r=   h㈵>:0yE>r   r   )	r   r@   rA   rB   rC   r   r1   rD   r   )
r!   r1   rx   rE   rF   rv   rG   rH   rI   rJ   s
             r(   rL   zTestAssocLegendreP.test_odeh   s$    i##D))LLB&&LLb%((KKAu%%+Aq!$qIII5&w%{ag%%%%|u{****

""AAI#7EEMQ!a%[1q5AAI+>>!CCU 	# 	$ 	$ 	$ 	$ 	$r*   r2   c                    t           j                            d          }d}d}|                    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                            d||z  z
  |z  d|z  |z  |
|
dz   z  |	|	z  d||z  z
  z  z
  |z  z
  dd           d S )Nr:      rn   ro   r   r<   r   r   rT   rp   r|   r}   r~   )r   r@   rA   rC   r	   rr   rV   rW   rX   rY   rZ   rD   r   )r!   r1   rE   rM   rl   rG   rH   rI   rJ   rv   rF   s              r(   test_allzTestAssocLegendreP.test_all{   sc   i##D))KKtU++/uaJJJ5&NBIeai00")UFA2F2FGHHIeai  N1U5AFQJ+?+?%@%@AAAN1TE%16A:2F2F,G,G%GHHH

""AAI#7EEMQ!a%[1q5AAI+>>!CCU 	# 	$ 	$ 	$ 	$ 	$r*   c                     t           j                            d          }|                    dd|          }t	          dd||d          \  }}t           j                            |d         t          ||                     t           j                            |d	         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         t          ||                     t           j                            |d         t          ||                     t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         t          ||                     t           j                            |d         t          ||                     t           j                            |d         t          ||                     t           j                            |d         t          ||                     t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d          d
           t           j                            |d!         t          ||                     t           j                            |d"         t          ||                     t           j                            |d#         t!          ||                     t           j                            |d$         t#          ||                     t           j                            |d%         t%          ||                     t           j                            |d&         t'          ||                     t           j                            |d'         d
           t           j                            |d(         d
           t           j                            |d)         t)          ||                     t           j                            |d*         t+          ||                     t           j                            |d+         t-          ||                     t           j                            |d,         t/          ||                     t           j                            |d-         t1          ||                     t           j                            |d.         t3          ||                     t           j                            |d/         t5          ||                     t           j                            |d0         t7          ||                     t           j                            |d1         t9          ||                     t           j                            |d2         t;          ||                     t           j                            |d3         t=          ||                     t           j                            |d4         t?          ||                     t           j                            |d         tA          ||                     t           j                            |d	         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d5         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         tC          ||                     t           j                            |d         tE          ||                     t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         tG          ||                     t           j                            |d         tI          ||                     t           j                            |d         tK          ||                     t           j                            |d         tM          ||                     t           j                            |d         d
           t           j                            |d         d
           t           j                            |d         d
           t           j                            |d          d
           t           j                            |d!         tO          ||                     t           j                            |d"         tQ          ||                     t           j                            |d#         tS          ||                     t           j                            |d$         tU          ||                     t           j                            |d%         tW          ||                     t           j                            |d&         tY          ||                     t           j                            |d'         d
           t           j                            |d(         d
           t           j                            |d)         t[          ||                     t           j                            |d*         t]          ||                     t           j                            |d+         t_          ||                     t           j                            |d,         ta          ||                     t           j                            |d-         tc          ||                     t           j                            |d.         te          ||                     t           j                            |d/         tg          ||                     t           j                            |d0         ti          ||                     t           j                            |d1         tk          ||                     t           j                            |d2         tm          ||                     t           j                            |d3         to          ||                     t           j                            |d4         tq          ||                     d S )6Nr:   rn   ro   r   r   r{   r   r   rx   rq   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   r@   rA   rC   r	   rD   r   assoc_legendre_p_0_0rd   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_m1rf   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!   r1   rx   rE   rG   rH   rI   s          r(   test_specificz TestAssocLegendreP.test_specific   s    i##D))KKtU++'1ad1EEE5

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

""1T7A...

""1T7A...

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

""1U8Q///

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

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

""1T7A...

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

""1U8Q///

""1U8!!$///	1 	1 	1 	
""1T7 ...	0 	0 	0

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

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

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

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

""1U8!!$///	1 	1 	1 	
""1T7 ...	0 	0 	0

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

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

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

""1T7A...

""1U8Q///

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

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

""1U8!!$///	1 	1 	1 	
""1T7 ...	0 	0 	0

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

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

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

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

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

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

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

""1U8!!$///	1 	1 	1 	
""5;$QT222	4 	4 	4

""5;222

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

""5<333

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

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

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

""5<%ad333	5 	5 	5 	
""5;$QT222	4 	4 	4

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

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

""5;222

""5;222

""5<333

""5<333

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

""5<%ad333	5 	5 	5 	
""5;$QT222	4 	4 	4

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

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

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

""5;222

""5<333

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

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

""5<%ad333	5 	5 	5 	
""5;$QT222	4 	4 	4

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

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

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

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

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

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

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

""5<%ad333	5 	5 	5 	5 	5r*   rG   r   r   c                    t          |||d          \  }}t          j        |dz             }t          j                            |d d df         t          ||dz             |z  |dz   z  dz             t          j                            |d d df         t          j        |dk    t          ||          t          j        z  d                     t          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                            |d d df         t          j        |dk    t          ||dz              dz  d                     t          j                            |d d df         t          j        |dk    t          ||           t          j        z  d                     t          d|dz             D ]W}t          j                            |d d |f         d           t          j                            |d d | f         d           Xd S )	Nr   r<   r   r   r   r   r   r   )	r	   r   rV   rD   r   powwhereinfrY   )r!   rl   rM   rG   rH   rI   rF   rv   s           r(   test_all_limitsz"TestAssocLegendreP.test_all_limits-  sP    (uaBBB5Ieai  

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

""5A;HQ!VSAYY/33	5 	5 	5

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

""5B<HQ!Vc!QUmm^a/33	5 	5 	5

""5B<HQ!Vc!QiiZ"&0!44	6 	6 	6 q%!)$$ 	8 	8AJ&&uQQQT{A666J&&uQQQU|Q7777	8 	8r*   N)r+   r,   r-   rj   r]   r^   r_   rw   rL   r   r   r   r.   r*   r(   ra   ra   F   s       6 6 6 [W&D&D&DEE[Wq!f--[Wq"g..7 7 /. .- FE7( [W&D&D&DEE[VdE]33$ $ 43 FE$" [W&@&@&@AA$ $ BA$& [W&@&@&@AA[VdE]33Z5 Z5 43 BAZ5x [Wqc**[Wrd++[S1b'**8 8 +* ,+ +*8 8 8r*   ra   c                   ,   e Zd Zej                            dg d          ej                            dddg          ej                            dg d          ej                            dd	d
g          d                                                 ZdS )TestMultiAssocLegendrePr1   ))i  r5   r7   
branch_cutr   r   zz_min, z_max))y      $      $y      $@      $@)r   r   )y             $y              $@rx   TFc                 !   t           j                            d          }|                    |j        |j        |          d|                    |j        |j        |          z  z   }t          dd|||d          \  }}	t           j                            |d         t          |||                     t           j                            |d         d	           t           j                            |d
         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         t          |||                     t           j                            |d         t          |||                     t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         t          |||                     t           j                            |d         t          |||                     t           j                            |d         t          |||                     t           j                            |d         t          |||                     t           j                            |d         d	           t           j                            |d         d	           t           j                            |d         d	           t           j                            |d          d	           t           j                            |d!         t!          |||                     t           j                            |d"         t#          |||                     t           j                            |d#         t%          |||                     t           j                            |d$         t'          |||                     t           j                            |d%         t)          |||                     t           j                            |d&         t+          |||                     t           j                            |d'         d	           t           j                            |d(         d	           t           j                            |d)         t-          |||                     t           j                            |d*         t/          |||                     t           j                            |d+         t1          |||                     t           j                            |d,         t3          |||                     t           j                            |d-         t5          |||                     t           j                            |d.         t7          |||                     t           j                            |d/         t9          |||                     t           j                            |d0         t;          |||                     t           j                            |d1         t=          |||                     t           j                            |d2         t?          |||                     t           j                            |d3         tA          |||                     t           j                            |d4         tC          |||                     t           j                            |	d         tE          |||                     t           j                            |	d         d	           t           j                            |	d
         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         tG          |||                     t           j                            |	d         tI          |||                     t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         tK          |||                     t           j                            |	d         tM          |||                     t           j                            |	d         tO          |||                     t           j                            |	d         tQ          |||                     t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d         d	           t           j                            |	d          d	           t           j                            |	d!         tS          |||                     t           j                            |	d"         tU          |||                     t           j                            |	d#         tW          |||                     t           j                            |	d$         tY          |||                     t           j                            |	d%         t[          |||                     t           j                            |	d&         t]          |||                     t           j                            |	d'         d	           t           j                            |	d(         d	           t           j                            |	d)         t_          |||                     t           j                            |	d*         ta          |||                     t           j                            |	d+         tc          |||                     t           j                            |	d,         te          |||                     t           j                            |	d-         tg          |||                     t           j                            |	d.         ti          |||                     t           j                            |	d/         tk          |||                     t           j                            |	d0         tm          |||                     t           j                            |	d1         to          |||                     t           j                            |	d2         tq          |||                     t           j                            |	d3         ts          |||                     t           j                            |	d4         tu          |||                     d S )5Nr:                 ?r   r   )r   rx   r=   r   r   rx   rq   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@   rA   rC   realimagr	   rD   r   r   rd   r   r   r   r   r   r   r   rf   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!   r1   r   z_minz_maxrx   rE   rg   rH   rI   s
             r(   r   z%TestMultiAssocLegendreP.test_specificF  sP    i##D))KK
EJ66UZU;;;< (1*4; ; ;5 	
""1T7 zEEE	G 	G 	G

""1T7A...

""1T7A...

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

""1U8Q///

""1U8Q///

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

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

""1T7A...

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

""1U8Q///

""1U8!!
FFF	H 	H 	H 	
""1T7 zEEE	G 	G 	G

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

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

""1T7A...

""1T7A...

""1U8Q///

""1U8Q///

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

""1U8!!
FFF	H 	H 	H 	
""1T7 zEEE	G 	G 	G

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

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

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

""1T7A...

""1U8Q///

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

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

""1U8!!
FFF	H 	H 	H 	
""1T7 zEEE	G 	G 	G

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

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

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

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

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

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

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

""1U8!!
FFF	H 	H 	H 	
""5;$Q:DIII	K 	K 	K

""5;222

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

""5<333

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

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

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

""5<%aJTJJJ	L 	L 	L 	
""5;$Q:DIII	K 	K 	K

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

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

""5;222

""5;222

""5<333

""5<333

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

""5<%aJTJJJ	L 	L 	L 	
""5;$Q:DIII	K 	K 	K

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

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

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

""5;222

""5<333

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

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

""5<%aJTJJJ	L 	L 	L 	
""5;$Q:DIII	K 	K 	K

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

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

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

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

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

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

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

""5<%aJTJJJ	L 	L 	L 	L 	Lr*   N)r+   r,   r-   r]   r^   r_   r   r.   r*   r(   r   r   E  s        [W&B&B&BCC[\Aq622[^ . . .  [VdE]33]L ]L 43  32 DC
]L ]L ]Lr*   r   c                       e Zd Zej                            dg d          d             Zej                            dg d          d             ZdS )TestSphLegendrePr1   r2   c                    t           j                            d          }|                    t           j         t           j        |          }t          dd|d          \  }}t           j                            |d         t          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d	         d           t           j                            |d
         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         t          |                     t           j                            |d         t          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         t          |                     t           j                            |d         t          |                     t           j                            |d         t          |                     t           j                            |d         t          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         t          |                     t           j                            |d         t!          |                     t           j                            |d          t#          |                     t           j                            |d!         t%          |                     t           j                            |d"         t'          |                     t           j                            |d#         t)          |                     t           j                            |d$         d           t           j                            |d%         d           t           j                            |d&         t+          |                     t           j                            |d'         t-          |                     t           j                            |d(         t/          |                     t           j                            |d)         t1          |                     t           j                            |d*         t3          |                     t           j                            |d+         t5          |                     t           j                            |d,         t7          |                     t           j                            |d-         t9          |                     t           j                            |d.         t;          |                     t           j                            |d/         t=          |                     t           j                            |d0         t?          |                     t           j                            |d1         tA          |                     t           j                            |d         tC          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d	         d           t           j                            |d
         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         tE          |                     t           j                            |d         tG          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         tI          |                     t           j                            |d         tK          |                     t           j                            |d         tM          |                     t           j                            |d         tO          |                     t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         d           t           j                            |d         tQ          |                     t           j                            |d         tS          |                     t           j                            |d          tU          |                     t           j                            |d!         tW          |                     t           j                            |d"         tY          |                     t           j                            |d#         t[          |                     t           j                            |d$         d           t           j                            |d%         d           t           j                            |d&         t]          |                     t           j                            |d'         t_          |                     t           j                            |d(         ta          |                     t           j                            |d)         tc          |                     t           j                            |d*         te          |                     t           j                            |d+         tg          |                     t           j                            |d,         ti          |                     t           j                            |d-         tk          |                     t           j                            |d.         tm          |                     t           j                            |d/         to          |                     t           j                            |d0         tq          |                     t           j                            |d1         ts          |                     d S )2Nr:   r   r   r<   r   rq   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@   rA   rC   pir   rD   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!   r1   rE   thetarH   rI   s         r(   r   zTestSphLegendreP.test_specific  s   i##D))RUFBE51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22

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

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

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

""5;222

""5;222

""5;222

""5<333

""5<333

""5<333

""5<#E**	, 	, 	, 	
""5;"5))	+ 	+ 	+

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

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

""5;222

""5;222

""5<333

""5<333

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

""5<#E**	, 	, 	, 	
""5;"5))	+ 	+ 	+

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

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

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

""5;222

""5<33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*   rk   c           	         t           j                            d          }|                    dd|          }|                    dd|          }|                    t           j         t           j        |          }t          |||d          \  }}}|j        |k    sJ |j        |j        k    sJ |j        |j        k    sJ t           j        	                    t          j
        |          |z  t          j        |           |z  ||dz   z  t          j
        |          z  ||z  t          j
        |          z  z
  |z  z
  dd	
           d S )Nr:   r   r4   rz   r   r<   r   r|   r}   r~   )r   r@   rA   rB   rC   r   r
   r1   rD   r   sincos)	r!   r1   rE   rF   rv   r(  rH   rI   rJ   s	            r(   rL   zTestSphLegendreP.test_ode  s=   i##D))LLB&&LLb%((RUFBE511)!Qa@@@5&w%{ag%%%%|u{****

""26%==6#9BF5MM>E;QAE{RVE]]*QURVE]]-BBaG<HU 	# 	$ 	$ 	$ 	$ 	$r*   N)r+   r,   r-   r]   r^   r_   r   rL   r.   r*   r(   r   r     s        [W&@&@&@AAY, Y, BAY,v [W&D&D&DEE$ $ FE$ $ $r*   r   c            	          e Zd ZdZd Zd Zd Zd Zd Ze	j
                            dej        g          e	j
                            dg d	          e	j
                            d
ddg          e	j
                            dddg          e	j
                            dg d          d                                                             Ze	j
                            dej        g          e	j
                            dg d          e	j
                            dddg          e	j
                            dg d          d                                                 Ze	j
                            dej        g          e	j
                            dg d          e	j
                            dg d          d                                     ZdS )TestLegendreFunctionsa  
    @pytest.mark.parametrize("m_max", [3])
    @pytest.mark.parametrize("n_max", [5])
    @pytest.mark.parametrize("z", [-1])
    def test_clpmn_all_limits(self, m_max, n_max, z):
        rng = np.random.default_rng(1234)

        type = 2

        p, p_jac = special.clpmn_all(m_max, n_max, type, z, diff_n=1)

        n = np.arange(n_max + 1)

        np.testing.assert_allclose(p_jac[0], pow(z, n + 1) * n * (n + 1) / 2)
        np.testing.assert_allclose(p_jac[1], np.where(n >= 1, pow(z, n) * np.inf, 0))
        np.testing.assert_allclose(p_jac[2], np.where(n >= 2,
            -pow(z, n + 1) * (n + 2) * (n + 1) * n * (n - 1) / 4, 0))
        np.testing.assert_allclose(p_jac[-2], np.where(n >= 2, -pow(z, n + 1) / 4, 0))
        np.testing.assert_allclose(p_jac[-1], np.where(n >= 1, -pow(z, n) * np.inf, 0))

        for m in range(3, m_max + 1):
            np.testing.assert_allclose(p_jac[m], 0)
            np.testing.assert_allclose(p_jac[-m], 0)
    c                 l   t          j        ddd          }t          |ddd           t          j        ddd          }t          |d	dd           t          j        d
          5  t          j        ddd          }d d d            n# 1 swxY w Y   |dk    st          j        |          sJ d S d S )Nr   r   rc   g      r   r   (   gMbP?gI?ignore)allr   )r   lpmvr   r   errstateisnan)r!   lps     r(   	test_lpmvzTestLegendreFunctions.test_lpmv  s    \!Q##Fa8888\!R&&.V!DDDD [X&&& 	* 	*bD))B	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*Qww"(2,,wwwwwwws   (BBBc                     t          j        ddd          }t          j        dd          }t          |d         d         |d         dd           t          |d         d         |d         dd           d S )Nr   r   rc   a2U0*#?r   r   )r   lqmnlqnr   )r!   lqmnflqfs      r(   	test_lqmnzTestLegendreFunctions.test_lqmn  sr    Q2&&k!R  aSV&qAAAAaSV&qAAAAAAr*   c                     d}d}||z
  ||z   fD ]B}t          j        dd|          d         d         }d||z  dz
  z  }t          ||dd           Cd	S )
znalgorithm for real arguments changes at 1.0001
           test against analytical result for m=2, n=1
        gqh ?gh㈵>r   r   r   )r   r   r   r   N)r   r9  r   )r!   x0deltarG   lqrh   s         r(   test_lqmn_gt1z#TestLegendreFunctions.test_lqmn_gt1  s|     U(BuH% 	? 	?AaA&&q)&1B!A#a%yHBvA>>>>>	? 	?r*   c                    t          j        ddd          \  }}t          |j        d           t          |j        d           t          j        ddd          \  }}t          |j        d           t          |j        d           d S )Nr   g?)r   r   r   )r   r   )r   r9  r   r1   )r!   abs      r(   test_lqmn_shapez%TestLegendreFunctions.test_lqmn_shape  s~    |Aq#&&1QWf%%%QWf%%%|Aq#&&1QWf%%%QWf%%%%%r*   c                     t          j        dd          }t          |t          j        g d          t          j        g d          fdd           d S )Nr   rc   )gk+ݓ?g=yX5gW2)g|a2U?g~jt?gڊer8  r   r   )r   r:  r   r   r    )r!   r<  s     r(   test_lqnzTestLegendreFunctions.test_lqn  sh    k!R  bh'A'A'ABB h'?'?'?@@B#!	- 	- 	- 	- 	- 	-r*   functionrF   rN   	z_complexFT	z_inexactinput_shape)r.   r   r   r   r   r   r   r   r   )r   r   r   c                    t           j                            d          }|r|                    dd|          }n|                    dd|          }|rd|z  d|z  z   }t          j                    5  t          j        d	t          
            |||          \  }}	ddd           n# 1 swxY w Y   |j	        |dz   f|z   k    sJ |	j	        |dz   f|z   k    sJ dS )z Tests for correct output shapes.r:   r   r   sizer   r   r                 ?r0  categoryN)
r   r@   rA   rB   rC   warningscatch_warningssimplefilterDeprecationWarningr1   )
r!   rI  rF   rJ  rK  rL  rE   rg   P_zP_d_zs
             r(   test_array_inputs_lxnz+TestLegendreFunctions.test_array_inputs_lxn  s=    i##D)) 	5R55AAB44A 	"Q!A$&& 	( 	(!(5GHHHH!!QJC	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( yQUI33333{q1ui+5555555s   3+B**B.1B.zm,n)rq   r   r   )r   rO   )   rP   )   rQ   )r.   rM  rN  r   r   r   rO  c                 *   t           j                            d          }|r|                    dd|          }n|                    dd|          } ||||          \  }}	|j        |dz   |dz   f|z   k    sJ |	j        |dz   |dz   f|z   k    sJ dS )+Tests for correct output shapes and dtypes.r:   r   r   rQ  r   r   N)r   r@   rA   rB   rC   r1   )
r!   rI  rv   rF   rK  rL  rE   rg   rZ  r[  s
             r(   test_array_inputs_lxmnz,TestLegendreFunctions.test_array_inputs_lxmn  s     i##D)) 	5R55AAB44AXaA&&
UyQUAEN[88888{q1ua!en{:::::::r*   c                    t           j                            d          }|                    dd|          }d|z  d|z  z   }t	          j                    5  t	          j        dt                      ||||          \  }}d	d	d	           n# 1 swxY w Y   |j        |dz   |dz   f|z   k    sJ |j        |dz   |dz   f|z   k    sJ d	S )
r`  r:   r   r   rQ  r   rS  r0  rT  N)	r   r@   rA   rC   rV  rW  rX  rY  r1   )	r!   rI  rv   rF   rL  rE   rg   rZ  r[  s	            r(   test_array_inputs_clxmnz-TestLegendreFunctions.test_array_inputs_clxmn  s$    i##D))KKAKK00FTAX$&& 	+ 	+!(5GHHHH!!Q**JC	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ yQUAEN[88888{q1ua!en{:::::::s   ,BBBN)r+   r,   r-   __doc__r6  r=  rB  rF  rH  r]   r^   r_   r   r:  r\  r9  ra  rc  r.   r*   r(   r-  r-    sv        2
' 
' 
'B B B	? 	? 	?& & &- - - [Z'+77[S"6"6"677[[5$-88[[5$-88[	
 	
 	
 6 6  98 98 87 876" [Z',88[<<<  [[5$-88[ 
 
 
 

; 
;  98	  98
; [Z',88[<<<  [ 
 
 
 
; ; 	  98; ; ;r*   r-  c                     |rMt          j        d| z  dz   t          j        | |z
            z  dt          j        | |z             z  z            S dS )Nr   r   )mathsqrt	factorial)rF   rv   rx   s      r(   assoc_legendre_factorri  (  se     B	1q519N1q5!!"%&A)>)>%>@ A A 	B 1r*   r   Fr   c                N    t          dd|          }t          j        | |          S Nr   ri  r   	full_likerg   r   rx   facs       r(   r   r   /  %    
1d
+
+C<3r*   c                .    t          dd|          }|| z  S Nr   r   ri  rn  s       r(   rd   rd   4  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   ri  rg  )rg   r   rx   branch_signbranch_cut_signro  ws          r(   r   r   9  s    (:?BHRZ

5K5KQPR,S,SUWXXKhzQA6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   ri  r   rg   r   rx   rx  ro  s        r(   r   r   B  sW    hzQA66O
2t
,
,Cs"Q:66679:; <r*   c                F    t          dd|          }|d| z  | z  dz
  z  dz  S Nr   r   r   r   rs  rn  s       r(   r   r   I  s/    
1d
+
+C!a%!)a- 1$$r*   c                X    t          dd|          }d|z  | z  t          | |          z  S Nr   r   r   r|  ri  r   rn  s       r(   r   r   N  s8    
1d
+
+CGaKQ:6667 8r*   c                z    t          j        |dk    dd          }t          dd|          }d|z  |z  d| | z  z
  z  S )Nr   r   r   r   r   r   ri  r~  s        r(   r   r   T  sG    hzQA66O
1d
+
+C$AE	22r*   c                z    t          j        |dk    dd          }t          dd|          }||z  d| | z  z
  z  dz  S )Nr   r   r   r   r   rO   r  r~  s        r(   r   r   Z  sG    hzQA6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   `  s\    hzQA66O
2t
,
,Cs"Q&Q:66679:; <r*   c                L    t          dd|          }|d| z  | z  dz
  z  | z  dz  S Nr   r   r   r   rs  rn  s       r(   rf   rf   g  s4    
1d
+
+C!a%!)a- 1$q((r*   c                p    t          dd|          }d|z  d| z  | z  dz
  z  t          | |          z  dz  S )Nr   r   r   r|  r   r  rn  s       r(   r   r   l  sM    
1d
+
+CGq1uqy1}%Q:66679:; <r*   c                    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   r  sL    hzQA6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   x  s^    hzQA66O
1d
+
+C 3&!a!e)4Q:6667 8r*   c                d    t          dd|          }|| | z  dz
  z  t          | |          z  dz  S )Nr   r   r   r|  0   r  rn  s       r(   r   r     sE    
2t
,
,C1q519Q:66679;< =r*   c                    t          j        |dk    dd          }t          dd|          }||z  d| | z  z
  z  | z  dz  S Nr   r   r   r   rO   r  r~  s        r(   r   r     sL    hzQA6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|  rO   r}  r~  s        r(   r   r     se    hzQA66O
2t
,
,Cc!QQ]3Q:66679:; <r*   c                X    t          dd|          }|d| z  | z  dz
  | z  | z  dz   z  dz  S Nr   r   r      r   rO   rs  rn  s       r(   r   r     s>    
1d
+
+C26A:?a'!+a/0144r*   c                v    t          dd|          }d|z  d| z  | z  dz
  z  | z  t          | |          z  dz  S )Nr   r   r   r8   r   r|  r   r  rn  s       r(   r   r     sR    
1d
+
+CGq1uqy1}%)A*55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   rO   r8   r  r~  s        r(   r   r     s_    hzQA6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     sc    hzQA66O
1d
+
+C/!C'1q1u959Q:6667 8r*   c                d    t          dd|          }d|z  t          j        | | z  dz
            z  S Nr   r  r   ri  r   squarern  s       r(   r   r     s4    
1d
+
+C9ryQ++++r*   c                d    t          dd|          }|t          j        | | z  dz
            z  dz  S Nr   r   r   i  r  rn  s       r(   r   r     s5    
2t
,
,C1q519%%%++r*   c                j    t          dd|          }|| | z  dz
  z  | z  t          | |          z  dz  S )Nr   r   r   r|  r  r  rn  s       r(   r   r     sJ    
2t
,
,C1q519!Q:66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   rO   r8   r  r  r~  s        r(   r   r     sZ    hzQA6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   r8   r|  rO   r}  r~  s        r(   r   r     sj    hzQA66O
2t
,
,Cc!QQ]3a7Q:66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 ru  )r   r   rv  r   rg  )rg   r   rw  out11_div_zs       r(   assoc_legendre_p_1_1_jac_div_zr    s    (:?BHRZ

5K5KQPR,S,SUWXXK<
q!a%!)QQY??@@AK r*   c                *    t          j        |           S Nr   
zeros_like)rg   r   rx   s      r(   r   r     s    =r*   c                N    t          dd|          }t          j        | |          S rr  rl  rn  s       r(   r   r     rp  r*   c                R    t          dd|          }|| z  t          | |          z  S )Nr   r|  ri  r  rn  s       r(   r   r     s6    
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   ri  r  r~  s        r(   r   r     s_    hzQA66O
2t
,
,Cs"Q&&qZ@@@ACDE Fr*   c                4    t          dd|          }d|z  | z  S )Nr   r   r   rs  rn  s       r(   r   r     s!    
1d
+
+Cs7Q;r*   c                j    t          dd|          }d|z  d| z  | z  dz
  z  t          | |          z  S r  r  rn  s       r(   r   r     sG    
1d
+
+CGq1uqy1}%&qZ@@@A Br*   c                n    t          j        |dk    dd          }t          dd|          }d|z  |z  | z  S )Nr   r   r   r   ir  r~  s        r(   r   r     s?    hzQA6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     sh    hzQA66O
2t
,
,Cc!QQ]3&qZ@@@ACDE Fr*   c                p    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     sB    hzQA66O
2t
,
,Cc!A%))r*   c                L    t          dd|          }d|z  d| z  | z  dz
  z  dz  S )Nr   r   r   r   r   rs  rn  s       r(   r   r     s3    
1d
+
+Cs7a!eai!m$q((r*   c                v    t          dd|          }d|z  d| z  | z  dz
  z  | z  t          | |          z  dz  S )Nr   r   r   r]  r|  r   r  rn  s       r(   r   r     sU    
1d
+
+CGrAvzB'!+&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  S r  r  r~  s        r(   r   r     sK    hzQA6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     se    hzQA66O
1d
+
+C 3&!a!e)4q8&qZ@@@A Br*   c                j    t          dd|          }|| | z  dz
  z  | z  t          | |          z  dz  S )Nr   r   r   r|  rP   r  rn  s       r(   r   r     sM    
2t
,
,C1q519!&qZ@@@ACEF Gr*   c                    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      sK    hzQA6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|  rO   r  r~  s        r(   r   r   &  sm    hzQA66O
2t
,
,Cc!R"q&1*_59&qZ@@@ACDE Fr*   c                R    t          dd|          }d|z  d| z  | z  dz
  z  | z  dz  S )Nr   r   r   r8   r   r   rs  rn  s       r(   r   r   -  s8    
1d
+
+Cs7a!eai!m$q(1,,r*   c                    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  rn  s       r(   r   r   2  s_    
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  r8   r  r~  s        r(   r   r   8  sP    hzQA6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   >  ss    hzQA66O
1d
+
+C/!C'AA	MQ+>+BQ+FG&qZ@@@A Br*   c                F    t          dd|          }d|z  | | z  dz
  z  | z  S )Nr   i  r   rs  rn  s       r(   r   r   E  s/    
1d
+
+C9A	"Q&&r*   c                F    t          dd|          }|| | z  dz
  z  | z  dz  S Nr   r   r   `   rs  rn  s       r(   r   r   J  s0    
2t
,
,C!a%!)q 2%%r*   c                |    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  rn  s       r(   r   r   O  s[    
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   r8      r  r~  s        r(   r   r   U  sP    hzQA6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|  rO   r  r~  s        r(   r   r   [  sw    hzQA66O
2t
,
,Cc!b26A:o%:Q%>%BC&qZ@@@ACDE Fr*   c                 j    t          | |d          t          j        dt          j        z            z  S )NTr   r   )ri  r   rg  r   )rF   rv   s     r(   sph_legendre_factorr  b  s,     AD111BGAI4F4FFFr*   c                 L    t          dd          }t          j        | |          S rk  )r  r   rm  r(  ro  s     r(   r   r   e  s#    
a
#
#C<s###r*   c                 P    t          dd          }|t          j        |           z  S rr  )r  r   r+  r  s     r(   r   r   j  s$    
a
#
#Cr*   c                 v    t          dd          }| t          j        t          j        |                     z  S )Nr   r  r   absr*  r  s     r(   r   r   o  s0    
a
#
#C4"&''''r*   c                 z    t          dd          }|t          j        t          j        |                     z  dz  S Nr   r   r   r  r  s     r(   r   r   t  s3    
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   y  s=    
a
#
#C!bi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8bfRVE]]+++bfUmm;;r*   c                     t          dd          }d|z  dt          j        t          j        |                     z
  z  S )Nr   r   r   r  r  s     r(   r   r     s7    
a
#
#Cs7a")BF5MM22233r*   c                     t          dd          }|dt          j        t          j        |                     z
  z  dz  S )Nr   r   r   rO   r  r  s     r(   r   r     s8    
a
$
$C!bi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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     sR    
a
#
#C1ry///!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BIbfUmm444q89
rve}} !" #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    sI    
a
#
#C#I26%==1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    s>    
a
#
#C9rxrve}} 5 5q9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33b88r*   c                     t          dd          }| t          j        t          j        |                     dz
  z  t          j        |           z  dz  S Nr   r   r   rO   r  r  s     r(   r  r    sO    
a
$
$CDBIbfUmm,,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   rO   r  r  s     r(   r  r    s\    
a
$
$C1ry///!34
rve}} !" #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    sp    
a
#
#C2	")BF5MM":":;;;
RYrve}}%%%&()* +-./ 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   r8   r   r   r  r  s     r(   r  r    sp    
a
#
#CHBIbfUmm444q89
urve}}--.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  r8   r   r  r  s     r(   r  r    se    
a
#
#C#IRYrve}}5559:	26%==	!	!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	    sK    
a
#
#C#:u!6!6:::RVE]]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
    sA    
a
#
#C9ry26%==!9!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    sB    
a
$
$C29RVE]]33a78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    sT    
a
$
$C"(26"&--00!4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   r8   r   r  r  r  s     r(   r  r    sc    
a
$
$CDA	"&--000145	26%==	!	!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   r8   r   rO   r  r  s     r(   r  r    sl    
a
$
$C1ry///!34
urve}}--.012 3r*   c                 *    t          j        |           S r  r  )r(  s    r(   r  r    s    =r*   c                 R    t          dd          }| t          j        |           z  S rr  )r  r   r*  r  s     r(   r  r    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    sI    
a
#
#C4"&--1r|BF5MM1'E'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    sL    
a
$
$C!bl26%==!&D&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    s5    
a
#
#C8bfUmm#bfUmm33r*   c                 P   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    s    
a
#
#CG	"&--000	
R\"&--++	+a	/1
rve}}u-. / 0r*   c                     t          dd          }d|z  t          j        |           z  t          j        |           z  S )Nr      r  r   r*  r+  r  s     r(   r  r    s5    
a
#
#Cs7RVE]]"RVE]]22r*   c                     t          dd          }|t          j        |           z  t          j        |           z  dz  S )Nr   r   r   r  r  s     r(   r  r    s6    
a
$
$C.22r*   c                 R   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DRYrve}}---	
R\"&--++	+a	/1
rve}}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    sN    
a
#
#Cs7a!biu6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  !  sy    
a
#
#CGrB26%==!9!999:RVE]]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  '  sI    
a
#
#C8q29RVE]]333a7826%==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(   r  r  ,  sL    
a
#
#C9rvbfUmm,,,rve}}<rve}}LLr*   c                     t          dd          }|t          j        t          j        |                     z  t          j        |           z  t          j        |           z  dz  S )Nr   r   rP   r  r  s     r(   r  r  1  sM    
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(   r  r  6  sJ    
a
$
$C!biu...23bfUmm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   rO   r  r  s     r(   r  r  ;  sz    
a
$
$CDBbiu6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  r8   r   r   r  r  s     r(   r  r  B  sf    
a
#
#CHBIbfUmm444q89
uu&()* +r*   c           
      `   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(   r   r   H  s    
a
#
#CGrB26%==!9!999
RYry//0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  r8   r  r  s     r(   r!  r!  O  s^    
a
#
#CHBIbfUmm4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(   r"  r"  U  sh    
a
#
#C3J!biu666:;
rve}} "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(   r#  r#  [  sY    
a
#
#C3J")BF5MM2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(   r$  r$  a  s_    
a
$
$CDBIbfUmm,,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%  g  sl    
a
$
$C1ry///!34
rve}} "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   r8   r  r  r  s     r(   r&  r&  m  s_    
a
$
$C1ry///!34rve}}D
u r*   c           
      \   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   rO   r  r  s     r(   r'  r'  s  s    
a
$
$CDBbiu6666
RYry//0001 2	
R\"&--++	+a	/1345 6r*   rN  )~rf  rV  numpyr   r]   numpy.testingr   r   scipyr   scipy.specialr   r   r   r	   r
   r   r   r0   ra   r   r   r-  ri  r   rd   r   r   r   r   r   r   r   rf   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*   r(   <module>r     s          7 7 7 7 7 7 7 7      > > > > > > > > > > > > > > > >
- - - - - - - -&!7 !7 !7 !7 !7 !7 !7 !7H|8 |8 |8 |8 |8 |8 |8 |8~cL cL cL cL cL cL cL cLJm$ m$ m$ m$ m$ m$ m$ m$^M; M; M; M; M; M; M; M;^   +,%          
 +,%     
 +,% 3 3 3 3 3 ,-5 < < < < < +,% % % % % %
 +,% 8 8 8 8 8 +,% 3 3 3 3 3 ,-5 3 3 3 3 3 ,-5 < < < < < +,% ) ) ) ) )
 +,% < < < < < +,% 8 8 8 8 8 +,% 8 8 8 8 8 ,-5 = = = = = ,-5 7 7 7 7 7 ,-5 < < < < < +,% 5 5 5 5 5
 +,% ; ; ; ; ; +,% J J J J J +,% 8 8 8 8 8 +,% , , , , ,
 ,-5 , , , , ,
 ,-5 = = = = = ,-5 F F F F F ,-5 < < < < <    /0e      /0e          
 /0e B B B B B 01u F F F F F /0e     
 /0e B B B B B /0e * * * * * 01u F F F F F 01u * * * * * /0e ) ) ) ) )
 /0e F F F F F /0e 8 8 8 8 8 /0e B B B B B 01u G G G G G 01u 7 7 7 7 7 01u F F F F F /0e - - - - -
 /0e F F F F F /0e < < < < < /0e B B B B B /0e ' ' ' ' '
 01u & & & & &
 01u G G G G G 01u < < < < < 01u F F F F FG G G$ $ $
  
( ( (
+ + +
8 8 8
< < <
4 4 4
4 4 4
; ; ;
  # # #  : : :
9 9 9
  # # #0 0 03 3 3, , ,K K K
? ? ?
? ? ?
  - - -3 3 3          
K K K
N N N
4 4 4
0 0 03 3 3
3 3 3
4 4 4L L L
6 6 6I I I
M M M
L L L
H H H
6 6 6+ + +6 6 6' ' '/ / /' ' ', , ,4 4 4  6 6 6 6 6r*   