
    bi4                        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}y)|    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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	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
       y )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          \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/special/tests/test_legendre.pytest_legendrezTestLegendre.test_legendre   s   """"""TVVaS!TVVaU# 4S 8$1	. 7 ;#!	-); <S @#!	-)? @ D#!	-    N)__name__
__module____qualname__r)    r*   r(   r   r      s    -r*   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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绽|=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    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 )
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    ii##D)KKAw')%1=5&IIeai NN1U5AFFQJ+?%@Aww3q6)agg----{{agg%%%||u{{***1q5yF"QUU]2Q!a%[1_D


""3"6r*   N)r+   r,   r-   pytestmarkparametrizerL   r\   r.   r*   r(   r0   r0   "   sh    [[W&@A7 B7 [[W&:;[[Y(BC7 D <7r*   r0   c                      e Zd 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y)TestAssocLegendrePc                    t        j                  g d      }t        |      }t        dd|      }t	        t        j
                  |      |       t        |      }t        dd|      }t	        t        j
                  |      |       y )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   sg    HH()'*!!Q*

6*H5'*!!Q*

6*H5r*   r1   r3   r5   )r   r   r8   r4   m_maxr   r   rM   r8   r4   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 )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   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 )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    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*   r2   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 )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{   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 )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
    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*   rG   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   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-  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*   N)r+   r,   r-   rj   r]   r^   r_   rw   rL   r   r   r   r.   r*   r(   ra   ra   F   sy   6 [[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 + , +8r*   ra   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)TestMultiAssocLegendrePr1   ))i  r5   r7   
branch_cutr   r   zz_min, z_max))y      $      $y      $@      $@)r   r   )y             $y              $@rx   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 )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  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   r.   r*   r(   r   r   E  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)TestSphLegendrePr1   r2   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 )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$
   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*   rk   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 )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    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   rL   r.   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e	j                  j                  d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                  g      e	j                  j                  dg d      e	j                  j                  dg d      d                      Zy)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                 Z   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        |dk7  st        j
                  |      sJ y y # 1 sw Y   'xY w)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\\!R&.V!D [[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d       t        |d   d   |d   dd       y )Nr   r   rc   a2U0*#?r   r   )r   lqmnlqnr   )r!   lqmnflqfs      r(   	test_lqmnzTestLegendreFunctions.test_lqmn  sX    Q2&kk!R aSV&qAaSV&qAr*   c                     d}d}||z
  ||z   fD ]9  }t        j                  dd|      d   d   }d||z  dz
  z  }t        ||dd       ; 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   r   r   N)r   r9  r   )r!   x0deltarG   lqrh   s         r(   test_lqmn_gt1z#TestLegendreFunctions.test_lqmn_gt1  se     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       y )Nr   g?)r   r   r   )r   r   )r   r9  r   r1   )r!   abs      r(   test_lqmn_shapez%TestLegendreFunctions.test_lqmn_shape  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d       y )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  s@    kk!R bhh'AB hh'?@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                  j                  d      }|r|j                  dd|      }n|j	                  dd|      }|rd|z  d|z  z   }t        j                         5  t        j                  d	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.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     ii##D)R5AB4AQ!A$$& 	(!!(5GH!!QJC	( yyQUI3333{{q1ui+5555		( 	(s   ,(CCzm,n)rq   r   r   )r   rO   )   rP   )   rQ   )r.   rM  rN  r   r   r   rO  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.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     ii##D)R5AB4AaA&
UyyQUAEN[8888{{q1ua!en{::::r*   c                    t         j                  j                  d      }|j                  dd|      }d|z  d|z  z   }t	        j
                         5  t	        j                  d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`  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     ii##D)KKAKK0FTAX$$& 	+!!(5GH!!Q*JC	+ yyQUAEN[8888{{q1ua!en{::::	+ 	+s   )B==CN)r+   r,   r-   __doc__r6  r=  rB  rF  rH  r]   r^   r_   r   r:  r\  r9  ra  rc  r.   r*   r(   r-  r-    s   2
'B	?&- [[Z'++7[[S"67[[[5$-8[[[5$-8[[	
6 9 9 8 86" [[Z',,8[[< [[[5$-8[[ 


; 9	 9
; [[Z',,8[[< [[ 

;	 9;r*   r-  c                     |rPt        j                  d| z  dz   t        j                  | |z
        z  dt        j                  | |z         z  z        S y)Nr   r   )mathsqrt	factorial)rF   rv   rx   s      r(   assoc_legendre_factorri  (  sW    		1q519NN1q5!"%&A)>%>@ A 	B r*   r   Fr   c                H    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    ((:?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   ri  r   rg   r   rx   rx  ro  s        r(   r   r   B  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   rs  rn  s       r(   r   r   I  s,    
1d
+C!a%!)a- 1$$r*   c                H    t        dd|      }d|z  | z  t        | |      z  S Nr   r   r   r|  ri  r   rn  s       r(   r   r   N  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   ri  r~  s        r(   r   r   T  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   rO   r  r~  s        r(   r   r   Z  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   rs  rn  s       r(   rf   rf   g  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  rn  s       r(   r   r   l  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   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   x  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  rn  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   rO   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|  rO   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   rO   rs  rn  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   r8   r   r|  r   r  rn  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   rO   r8   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   ri  r   squarern  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  rn  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  rn  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   rO   r8   r  r  r~  s        r(   r   r     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   r8   r|  rO   r}  r~  s        r(   r   r     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 ru  )r   r   rv  r   rg  )rg   r   rw  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)rg   r   rx   s      r(   r   r     s    ==r*   c                H    t        dd|      }t        j                  | |      S rr  rl  rn  s       r(   r   r     rp  r*   c                B    t        dd|      }|| z  t        | |      z  S )Nr   r|  ri  r  rn  s       r(   r   r     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   ri  r  r~  s        r(   r   r     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   rs  rn  s       r(   r   r     s    
1d
+Cs7Q;r*   c                Z    t        dd|      }d|z  d| z  | z  dz
  z  t        | |      z  S r  r  rn  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     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     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     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   rs  rn  s       r(   r   r     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  rn  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|  rP   r  rn  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|  rO   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   r8   r   r   rs  rn  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  rn  s       r(   r   r   2  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  r8   r  r~  s        r(   r   r   8  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   rs  rn  s       r(   r   r   E  s,    
1d
+C9A	"Q&&r*   c                >    t        dd|      }|| | z  dz
  z  | z  dz  S Nr   r   r   `   rs  rn  s       r(   r   r   J  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  rn  s       r(   r   r   O  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   r8      r  r~  s        r(   r   r   U  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|  rO   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   )ri  r   rg  r   )rF   rv   s     r(   sph_legendre_factorr  b  s'     AD1BGGAI4FFFr*   c                 F    t        dd      }t        j                  | |      S rk  )r  r   rm  r(  ro  s     r(   r   r   e  s    
a
#C<<s##r*   c                 J    t        dd      }|t        j                  |       z  S rr  )r  r   r+  r  s     r(   r   r   j  s!    
a
#Cr*   c                 r    t        dd      }| t        j                  t        j                  |             z  S )Nr   r  r   absr*  r  s     r(   r   r   o  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   t  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   y  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   rO   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   rO   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   rO   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    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   r8   r   r   r  r  s     r(   r  r    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  r8   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	    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
    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    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    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   r8   r   r  r  r  s     r(   r  r    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   r8   r   rO   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    s    ==r*   c                 L    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    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    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    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    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      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(   r  r  ,  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   rP   r  r  s     r(   r  r  1  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(   r  r  6  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   rO   r  r  s     r(   r  r  ;  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  r8   r   r   r  r  s     r(   r  r  B  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(   r   r   H  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  r8   r  r  s     r(   r!  r!  O  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(   r"  r"  U  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(   r#  r#  [  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(   r$  r$  a  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%  g  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   r8   r  r  r  s     r(   r&  r&  m  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   rO   r  r  s     r(   r'  r'  s  s    
a
$CDBbiiu666
RYYryy/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 !7H|8 |8~cL cLJm$ m$^M; M;^ +,%  
 +,% 
 +,% 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*   