
    ^MhE                        d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZ  G d d          Z G d d          Z G d	 d
          Z G d d          Z G d d          Z G d d          Zd ZddddZddddZddddZddddZddddZddddZddddZ ddddZ!ddddZ"ddddZ#ddddZ$dddd Z%dddd!Z&dddd"Z'dddd#Z(dddd$Z)dddd%Z*dddd&Z+dddd'Z,dddd(Z-dddd)Z.dddd*Z/dddd+Z0dddd,Z1dddd-Z2d{d.Z3dddd/Z4dddd0Z5dddd1Z6dddd2Z7dddd3Z8dddd4Z9dddd5Z:dddd6Z;dddd7Z<dddd8Z=dddd9Z>dddd:Z?dddd;Z@dddd<ZAdddd=ZBdddd>ZCdddd?ZDdddd@ZEddddAZFddddBZGddddCZHddddDZIddddEZJddddFZKddddGZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_d[ Z`d\ Zad] Zbd^ Zcd_ Zdd` Zeda Zfdb Zgdc Zhdd Zide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm Zrdn Zsdo Ztdp Zudq Zvdr Zwds Zxdt Zydu Zzdv Z{dw Z|dx Z}dy Z~dz ZdS )|    N)assert_equalassert_almost_equalassert_array_almost_equalassert_allclosesuppress_warnings)special)
legendre_plegendre_p_allassoc_legendre_passoc_legendre_p_allsph_legendre_psph_legendre_p_allc                       e Zd Zd Zej                            dg d          ej                            dg d          ej                            dg d          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	
           t	          |j        t          j        g d          dz             t	          |j        t          j        g d          dz             t	          |j        t          j        g d          dz             d S )Nr                  )r   r   g       @   )decimal)r   r   r   )#   r   ir   r   g       @)?   r   ir      r   )r   legendrer   cr   nparray)selfleg0leg1leg2leg3leg4leg5s          a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/special/tests/test_legendre.pytest_legendrezTestLegendre.test_legendre   s.   """"""""""""TVaS!!!TVaU###DFBHXXX$6$6s$:BGGGGDFBHZZZ$8$8$<===DFBH^^^$<$<S$@AAADFBH->->->$?$?$CDDDDD    n)r   r   r   r   r   zr)g?g{ɚ)@gue#gbLd?g7f?zi)go^#@g"1?g7ܘ~ @g^26g6n"c                 ~   t                      5 }|                    t                     t          j        |||dz  z             }t          j        d|||dz  z             }d d d            n# 1 swxY w Y   t          |d         |d         d                    t          |d         |d         d                    d S )Ncategory              ?r   r   )r   filterDeprecationWarningr   lpnclpmnr   )r"   r,   r-   r.   supreslpnresclpmns          r)   test_lpn_against_clpmnz#TestLegendre.test_lpn_against_clpmn%   s        	5CJJ 2J333[BBJ//F}Q2be844H	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 	q	8A;q>222q	8A;q>22222s   AA..A25A2N)__name__
__module____qualname__r*   pytestmarkparametrizer:    r+   r)   r   r      s        E E E [S///22[T $: $: $: ; ;[T $0 $0 $0 1 13 31 1; ; 32
3 3 3r+   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 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绽|=atol)	r    randomdefault_rngintegersuniformr	   rD   testingr   )	r"   rD   rngr,   xpp_jacp_hesserrs	            r)   test_odezTestLegendreP.test_ode4   s    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 )
NrM   r   r   r   rO   axisr   rQ   rR   )r    rT   rU   rW   r
   arangeexpand_dimstuplerangendimrD   lenrX   r   )
r"   r`   re   rY   rZ   r[   r\   r]   r,   r^   s
             r)   test_all_odezTestLegendreP.test_all_odeD   s'    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+   c                    t                      5 }|                    t                     t          j        dd          \  }}d d d            n# 1 swxY w Y   t          |g dd           t          |g dd           d S )Nr0   r         ?)      ?rq         r   )        rr   g      ?)r   r3   r4   r   r5   r   )r"   r7   r[   pds       r)   test_legacyzTestLegendreP.test_legacyV   s       	(CJJ 2J333K3''EAr	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	"!%A%A%A1EEE!"&A&A&A1EEEEEs   4AAAN)	r;   r<   r=   r>   r?   r@   r_   ro   rv   rA   r+   r)   rC   rC   3   s        [W&@&@&@AA7 7 BA7 [W&:&:&:;;[Y(B(B(BCC7 7 DC <;7 F F F F Fr+   rC   c                      e 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
ej                            dg d          ej                            ddg          d                         ZdS )TestAssocLegendrePrD   rF   rH   )r   r   rK   rG   m_maxr   r   r`   rK   rG   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 )NrM   GzGz?r   rO   r   rg   r   r   r   r   )r    rT   rU   rW   r   ri   rj   rk   rl   rm   concatenater   rX   r   )r"   rD   r`   rz   rY   rZ   p_all	p_all_jac
p_all_hessr,   mr[   r\   r]   s                 r)   	test_lpmnzTestAssocLegendreP.test_lpmn_   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 )NrM   r   rG   r   r   r   r   rP   h㈵>:0yE>rtolrS   )	r    rT   rU   rV   rW   r   rD   rX   r   )
r"   rD   r   rY   r,   r   rZ   r[   r\   r]   s
             r)   r_   zTestAssocLegendreP.test_odev   s$    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+   rE   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 )NrM      r|   r}   r   rO   r   r   rg   r~   r   r   r   )r    rT   rU   rW   r   r   ri   rj   rk   rl   rm   rX   r   )r"   rD   rY   r`   rz   rZ   r[   r\   r]   r   r,   s              r)   test_allzTestAssocLegendreP.test_all   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 )6NrM   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )9r    rT   rU   rW   r   rX   r   assoc_legendre_p_0_0assoc_legendre_p_1_0assoc_legendre_p_1_1assoc_legendre_p_1_m1assoc_legendre_p_2_0assoc_legendre_p_2_1assoc_legendre_p_2_2assoc_legendre_p_2_m2assoc_legendre_p_2_m1assoc_legendre_p_3_0assoc_legendre_p_3_1assoc_legendre_p_3_2assoc_legendre_p_3_3assoc_legendre_p_3_m3assoc_legendre_p_3_m2assoc_legendre_p_3_m1assoc_legendre_p_4_0assoc_legendre_p_4_1assoc_legendre_p_4_2assoc_legendre_p_4_3assoc_legendre_p_4_4assoc_legendre_p_4_m4assoc_legendre_p_4_m3assoc_legendre_p_4_m2assoc_legendre_p_4_m1assoc_legendre_p_0_0_jacassoc_legendre_p_1_0_jacassoc_legendre_p_1_1_jacassoc_legendre_p_1_m1_jacassoc_legendre_p_2_0_jacassoc_legendre_p_2_1_jacassoc_legendre_p_2_2_jacassoc_legendre_p_2_m2_jacassoc_legendre_p_2_m1_jacassoc_legendre_p_3_0_jacassoc_legendre_p_3_1_jacassoc_legendre_p_3_2_jacassoc_legendre_p_3_3_jacassoc_legendre_p_3_m3_jacassoc_legendre_p_3_m2_jacassoc_legendre_p_3_m1_jacassoc_legendre_p_4_0_jacassoc_legendre_p_4_1_jacassoc_legendre_p_4_2_jacassoc_legendre_p_4_3_jacassoc_legendre_p_4_4_jacassoc_legendre_p_4_m4_jacassoc_legendre_p_4_m3_jacassoc_legendre_p_4_m2_jacassoc_legendre_p_4_m1_jac)r"   rD   r   rY   rZ   r[   r\   s          r)   test_specificz TestAssocLegendreP.test_specific   s    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+   rZ   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   rO   r   r   r   r   r   r   )	r   r    ri   rX   r   powwhereinfrl   )r"   rz   r`   rZ   r[   r\   r,   r   s           r)   test_all_limitsz"TestAssocLegendreP.test_all_limits;  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+   )r   r   rG   c                 8   d}t          |||d          \  }}t                      5 }|                    t                     t	          j        |||          \  }}t          |dz             D ]2}	t          j        	                    ||	         |d d |	f                    3t	          j        | ||          \  }}t          |dz             D ]3}	t          j        	                    ||	         |d d |	 f                    4	 d d d            d S # 1 swxY w Y   d S )Nrq   r   rO   r0   )
r   r   r3   r4   r   lpmnrl   r    rX   r   )
r"   rz   r`   rZ   r[   r\   r7   p_legacyp_jac_legacyr   s
             r)   rv   zTestAssocLegendreP.test_legacyR  s    'uaBBB5   		BCJJ 2J333%,\%%B%B"Hl519%% A A
**8A;!!!Q$@@@@%,\5&%%C%C"Hl519%% B B
**8A;!!!aR%AAAAB		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		Bs   CDDDN)r;   r<   r=   r>   r?   r@   r   r_   r   r   r   rv   rA   r+   r)   rx   rx   ^   s8       [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( [Wjjj11[Wrd++B B ,+ 21B B Br+   rx   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 )TestMultiAssocLegendrePrD   ))i  rH   rJ   
branch_cutr   r   zz_min, z_max))y      $      $y      $@      $@)r   r   )y             $y              $@r   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 )5NrM   r2   r   r   )r   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   );r    rT   rU   rW   realimagr   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
r"   rD   r   z_minz_maxr   rY   zr[   r\   s
             r)   r   z%TestMultiAssocLegendreP.test_specificd  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   rA   r+   r)   r   r   c  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 )TestSphLegendrePrD   rE   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 )2NrM   r   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ):r    rT   rU   rW   pir   rX   r   sph_legendre_p_0_0sph_legendre_p_1_0sph_legendre_p_1_1sph_legendre_p_1_m1sph_legendre_p_2_0sph_legendre_p_2_1sph_legendre_p_2_2sph_legendre_p_2_m2sph_legendre_p_2_m1sph_legendre_p_3_0sph_legendre_p_3_1sph_legendre_p_3_2sph_legendre_p_3_3sph_legendre_p_3_m3sph_legendre_p_3_m2sph_legendre_p_3_m1sph_legendre_p_4_0sph_legendre_p_4_1sph_legendre_p_4_2sph_legendre_p_4_3sph_legendre_p_4_4sph_legendre_p_4_m4sph_legendre_p_4_m3sph_legendre_p_4_m2sph_legendre_p_4_m1sph_legendre_p_0_0_jacsph_legendre_p_1_0_jacsph_legendre_p_1_1_jacsph_legendre_p_1_m1_jacsph_legendre_p_2_0_jacsph_legendre_p_2_1_jacsph_legendre_p_2_2_jacsph_legendre_p_2_m2_jacsph_legendre_p_2_m1_jacsph_legendre_p_3_0_jacsph_legendre_p_3_1_jacsph_legendre_p_3_2_jacsph_legendre_p_3_3_jacsph_legendre_p_3_m3_jacsph_legendre_p_3_m2_jacsph_legendre_p_3_m1_jacsph_legendre_p_4_0_jacsph_legendre_p_4_1_jacsph_legendre_p_4_2_jacsph_legendre_p_4_3_jacsph_legendre_p_4_4_jacsph_legendre_p_4_m4_jacsph_legendre_p_4_m3_jacsph_legendre_p_4_m2_jacsph_legendre_p_4_m1_jac)r"   rD   rY   thetar[   r\   s         r)   r   zTestSphLegendreP.test_specific	  s   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+   ry   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 )NrM   r   rG   r   r   rO   r   r   r   r   )r    rT   rU   rV   rW   r
  r   rD   rX   r   sincos)	r"   rD   rY   r,   r   r=  r[   r\   r]   s	            r)   r_   zTestSphLegendreP.test_ode  s=   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   r_   rA   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	 d Z	d Z
d	 Zd
 Zd Zej                            dej        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        ej        g          ej                            dg d          ej                            dg d          d                                     ZdS )TestLegendreFunctionsc                 ~   d}t                      5 }|                    t                     t          j        dd|d          }d d d            n# 1 swxY w Y   t          |t          j        d|dd|z  |z  dz
  z  gdt          j        ||z  dz
            d|z  t          j        ||z  dz
            z  gddd||z  dz
  z  gg          t          j        ddd|z  gd|t          j        ||z  dz
            z  dd|z  |z  dz
  z  t          j        ||z  dz
            z  gddd	|z  gg          fd
           d S )Ny      ?333333?r0   r   r   rr   rq   r   rt      rK   )	r   r3   r4   r   r6   r   r    r!   sqrt)r"   r  r7   clps       r)   
test_clpmnz TestLegendreFunctions.test_clpmn  s      	,CJJ 2J333-1a++C	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	"#Hvq#qs1uQw-8"BGAaCENNAaC!A4FG"FAqs1uI68 9 9 Hvvqs3"Abgac!enn$4a1Qqk"'!A#a%..6PQ"FAaC02 3 34 	 	 	 	 	s   3AAAc                    d}d}d}d}t                      5 }|                    t                     t          j        |||d|z  z   d          d         ||f         }t          j        |||d|z  z
  d          d         ||f         }d d d            n# 1 swxY w Y   t          t          j        ||g          t          j        t          j        |||          t          j        |||          g          d	           d S )
NrQ   r   r   rq   r0   r2   r   r   rK   )	r   r3   r4   r   r6   r   r    r!   lpmvr"   epsr   r,   rZ   r7   clp_plus	clp_minuss           r)   test_clpmn_close_to_real_2z0TestLegendreFunctions.test_clpmn_close_to_real_2  sY      	BCJJ 2J333}Q1RV8Q77:1a4@HaAbfHa88;AqDAI	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 	""(Hi+@"A"A"$(GLAq,A,A)0aA)>)>,@ #A #A"#	% 	% 	% 	% 	%   A2BBBc                    d}d}d}d}t                      5 }|                    t                     t          j        |||d|z  z   d          d         ||f         }t          j        |||d|z  z
  d          d         ||f         }d d d            n# 1 swxY w Y   t          t          j        ||g          t          j        t          j        |||          t          j	        d|z  t          j
        z            z  t          j        |||          t          j	        d	|z  t          j
        z            z  g          d
           d S )NrQ   r   r   rq   r0   r2   r   y                           ?rK   )r   r3   r4   r   r6   r   r    r!   rI  expr
  rJ  s           r)   test_clpmn_close_to_real_3z0TestLegendreFunctions.test_clpmn_close_to_real_3  s      	BCJJ 2J333}Q1RV8Q77:1a4@HaAbfHa88;AqDAI	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 	""(Hi+@"A"A"$(GLAq,A,A"&qQSQVBWBW,W)0aA)>)>rvd1fRUl?S?S)S,U #V #V"#	% 	% 	% 	% 	%rO  c                 l   d}d}d}d}t                      5 }|                    t                     dD ]e}t          t	          j        |||d|z  z   |          d         ||f         t	          j        |||d|z  z
  |          d         ||f         d           f	 d d d            d S # 1 swxY w Y   d S )NgHz>r   r2   r0   r   r   rD  )r   r3   r4   r   r   r6   )r"   rK  r   r,   rZ   r7   types          r)   test_clpmn_across_unit_circlez3TestLegendreFunctions.test_clpmn_across_unit_circle  s0      	QCJJ 2J333 Q Q#GM!Q"S&$$G$G$J1a4$P 'aAbfHd C CA Fq!t LaQ Q Q QQ	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   BB))B-0B-c           
         t                      5 }|                    t                     dD ]}t          d          D ]}t          d|          D ]}t	          j        |||          }t          j        |d         ddd f                                                   sJ t	          j	        |||          }t          j        |d         ddd f                                                   sJ 	 d d d            d S # 1 swxY w Y   d S )Nr0   r   r   r   )
r   r3   r4   rl   r   r6   r    isinfallr   )r"   r7   r  r,   r   lps         r)   test_infzTestLegendreFunctions.test_inf  s[      	;CJJ 2J333 ; ;q ; ;A"1a[[ ; ;$]1a33!x1ad4488:::::$\!Q22!x1ad4488::::::	;;;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   C"C??DDc                    g d}d}d}t                      5 }|                    t                     dD ]}|D ]~}dD ]y}t          j        |||d|z  z   |          d         t          j        |||d|z  z
  |          d         z
  |z  }t          t          j        ||||          d	         |d
           z	 d d d            d S # 1 swxY w Y   d S )N)y      ?      ?y            ?y            y      ?      y      ?      ?y            ?y            y      ?      r   r   r0   r   )MbP?y        MbP?rq   r   r   g-C6?)r   )r   r3   r4   r   r6   r   )	r"   zvalsr   r,   r7   rU  r  happrox_derivatives	            r)   test_deriv_clpmnz&TestLegendreFunctions.test_deriv_clpmn  sh   + + +   		3CJJ 2J333 3 3 3 3A* 3 3-4]1a3q5$-O-OPQ-R.5mAq!CE'4.P.PQR.S.TUV-W)'aAt(D(DQ(G(9-13 3 3 3 3333		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3s   B"CCCc                 d   t          j        ddd          }t          |dd           t          j        ddd          }t          |dd           t          j        d	
          5  t          j        ddd          }d d d            n# 1 swxY w Y   |dk    st          j        |          sJ d S d S )Nr   r   rq   rs   rK   (   r]  gI?ignore)rY  r   )r   rI  r   r    errstateisnan)r"   rZ  s     r)   	test_lpmvzTestLegendreFunctions.test_lpmv*  s    \!Ab!!Bva(((\!Bt$$B1!444 [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           t          |d         d         |d         d           d S )Nr   r   rq   r   r   )r   lqmnlqnr   )r"   lqmnflqfs      r)   	test_lqmnzTestLegendreFunctions.test_lqmn6  sh    Qq$$k!B!%(1+c!fQ777!%(1+c!fQ77777r+   c                     d}d}||z
  ||z   fD ]?}t          j        dd|          d         d         }d||z  dz
  z  }t          ||           @d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   N)r   ri  r   )r"   x0deltarZ   lqexpecteds         r)   test_lqmn_gt1z#TestLegendreFunctions.test_lqmn_gt1<  su     U(BuH% 	. 	.AaA&&q)&1B!A#a%yHH----	. 	.r+   c                    t          j        ddd          \  }}t          |j        d           t          |j        d           t          j        ddd          \  }}t          |j        d           t          |j        d           d S )Nr   g?)r   r   r   )r   r   )r   ri  r   rD   )r"   abs      r)   test_lqmn_shapez%TestLegendreFunctions.test_lqmn_shapeG  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 S )Nr   rq   )gk+ݓ?g=yX5gW2)g|a2U?g~jt?gڊer   )r   rj  r   r    r!   )r"   rl  s     r)   test_lqnzTestLegendreFunctions.test_lqnP  sf    k!B!#rx0J0J0J'K'K')x0H0H0H'I'I'KKL	N 	N 	N 	N 	Nr+   functionr,   ra   	z_complexFT	z_inexactinput_shape)rA   r   r   r   r   r   r   r   r   )r   r   r   c                    t           j                            d          }|r|                    dd|          }n|                    dd|          }|rd|z  d|z  z   }t                      5 }|                    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.rM   r   r   sizer   r   r2   rQ  r0   N)	r    rT   rU   rV   rW   r   r3   r4   rD   )r"   rz  r,   r{  r|  r}  rY   r  r7   P_zP_d_zs              r)   test_array_inputs_lxnz+TestLegendreFunctions.test_array_inputs_lxnU  s5    i##D)) 	5R55AAB44A 	"Q!A   	(CJJ 2J333!!QJC	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( yQUI33333{q1ui+5555555s   .+B%%B),B)zm,n)r   r   r   )r   rb   )   rc   )   rd   )rA   r~  r  r   r   r   r  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.rM   r   r   r  r   r   N)r    rT   rU   rV   rW   rD   )
r"   rz  r   r,   r|  r}  rY   r  r  r  s
             r)   test_array_inputs_lxmnz,TestLegendreFunctions.test_array_inputs_lxmnp  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	                      5 }|                    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  rM   r   r   r  r2   rQ  r0   N)r    rT   rU   rW   r   r3   r4   rD   )
r"   rz  r   r,   r}  rY   r  r7   r  r  s
             r)   test_array_inputs_clxmnz-TestLegendreFunctions.test_array_inputs_clxmn  s    i##D))KKAKK00FTAX   	+CJJ 2J333!!Q**JC	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ yQUAEN[88888{q1ua!en{:::::::s   ,B		BBN)r;   r<   r=   rG  rN  rS  rV  r[  ra  rg  rm  rs  rw  ry  r>   r?   r@   r   r5   rj  r  ri  r  r6   r  rA   r+   r)   rB  rB    s          % % % % % % 
Q 
Q 
Q	; 	; 	;3 3 3$2
' 
' 
'8 8 8	. 	. 	.& & &N N N
 [Z'+w{)CDD[S"6"6"677[[5$-88[[5$-88[	
 	
 	
 6 6  98 98 87 ED6" [Z',88[<<<  [[5$-88[ 
 
 
 

; 
;  98	  98
; [Z'-)FGG[<<<  [ 
 
 
 
; ; 	  HG; ; ;r+   rB  c                     |rMt          j        d| z  dz   t          j        | |z
            z  dt          j        | |z             z  z            S dS )Nr   r   )mathrE  	factorial)r,   r   r   s      r)   assoc_legendre_factorr    se     B	1q519N1q5!!"%&A)>)>%>@ A A 	B 1r+   r   Fr  c                N    t          dd|          }t          j        | |          S Nr   r  r    	full_liker  r   r   facs       r)   r   r     %    
1d
+
+C<3r+   c                .    t          dd|          }|| z  S Nr   r   r  r  s       r)   r   r     s    
1d
+
+C7Nr+   c          
         t          j        |dk    t          j        t          j        t          j        |                     dd          d          }t          j        |dk    dd          }t	          dd|          }t          j        t          j        |dk    | | z  dz
  d| | z  z
                      }||z  |z  |z  S Nr   r   r   )r    r   signbitr  r  rE  )r  r   r   branch_signbranch_cut_signr  ws          r)   r   r     s    (:?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   r  r   r  r   r   r  r  s        r)   r   r     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   r  r  s       r)   r   r     s/    
1d
+
+C!a%!)a- 1$$r+   c                X    t          dd|          }d|z  | z  t          | |          z  S Nr   r   r   r  r  r   r  s       r)   r   r     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   r  r  s        r)   r   r     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   rb   r  r  s        r)   r   r     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   r  r  s       r)   r   r     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  r  s       r)   r   r     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     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     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  r  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   rb   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  rb   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   rb   r  r  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   rK   r   r  r   r  r  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   rb   rK   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   r  r    squarer  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  r  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  r  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   rb   rK   r  r  r  s        r)   r   r   0  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   rK   r  rb   r  r  s        r)   r   r   6  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 r  )r    r   r  r  rE  )r  r   r  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)r  r   r   s      r)   r   r   E  s    =r+   c                N    t          dd|          }t          j        | |          S r  r  r  s       r)   r   r   H  r  r+   c                R    t          dd|          }|| z  t          | |          z  S )Nr   r  r  r  r  s       r)   r   r   M  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   r  r  r  s        r)   r   r   S  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   r  r  s       r)   r   r   Z  s!    
1d
+
+Cs7Q;r+   c                j    t          dd|          }d|z  d| z  | z  dz
  z  t          | |          z  S r  r  r  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   e  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   k  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   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   r  r  s       r)   r   r   x  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  r  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  rc   r  r  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  rb   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   rK   r   r   r  r  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  r  s       r)   r   r     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  rK   r  r  s        r)   r   r     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   r  r  s       r)   r   r     s/    
1d
+
+C9A	"Q&&r+   c                F    t          dd|          }|| | z  dz
  z  | z  dz  S Nr   r   r   `   r  r  s       r)   r   r     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  r  s       r)   r   r     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   rK      r  r  s        r)   r   r     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  rb   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   )r  r    rE  r
  )r,   r   s     r)   sph_legendre_factorr    s,     AD111BGAI4F4FFFr+   c                 L    t          dd          }t          j        | |          S r  )r  r    r  r=  r  s     r)   r  r    s#    
a
#
#C<s###r+   c                 P    t          dd          }|t          j        |           z  S r  )r  r    r@  r  s     r)   r  r    s$    
a
#
#Cr+   c                 v    t          dd          }| t          j        t          j        |                     z  S )Nr   r  r    absr?  r  s     r)   r  r    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    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    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   rb   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   rb   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   rb   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  0  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   rK   r   r   r  r  s     r)   r  r  6  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  rK   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  B  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  G  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   L  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!  Q  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   rK   r   r  r  r  s     r)   r"  r"  W  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   rK   r   rb   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$  c  s    =r+   c                 R    t          dd          }| t          j        |           z  S r  )r  r    r?  r  s     r)   r%  r%  f  s&    
a
#
#C4"&--r+   c                     t          dd          }| t          j        |           z  dt          j        t          j        |           d          z  dz
  z  S )Nr   r   r  r    r@  	heavisider?  r  s     r)   r&  r&  k  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'  p  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(  u  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)  z  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   rD  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)   r0  r0    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   rc   r   r  s     r)   r1  r1    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)   r2  r2    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   rb   r,  r  s     r)   r3  r3    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  rK   r   r   r*  r  s     r)   r4  r4    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)   r5  r5    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  rK   r*  r  s     r)   r6  r6    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)   r7  r7    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)   r8  r8    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)   r9  r9    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:    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   rK   r  r*  r  s     r)   r;  r;    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   rb   r,  r  s     r)   r<  r<    s    
a
$
$CDBbiu6666
RYry//0001 2	
R\"&--++	+a	/1345 6r+   r  )r  numpyr    r>   numpy.testingr   r   r   r   r   scipyr   scipy.specialr	   r
   r   r   r   r   r   rC   rx   r   r  rB  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  rA   r+   r)   <module>r?     s        ( ( ( ( ( ( ( ( ( ( ( ( ( (      > > > > > > > > > > > > > > > >3 3 3 3 3 3 3 3:)F )F )F )F )F )F )F )FVCB CB CB CB CB CB CB CBJ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$^e; e; e; e; e; e; e; e;N   +,%          
 +,%     
 +,% 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+   