
    "gJ                     x   d dl Zd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZ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 G d de      Z G d de      Z G d de      Z G d de      Z G d d      Z G d d      Z  G d d       Z!y)!    N)assert_allcloseassert_equal)stats)poissonnbinom)Bunch)genpoisson_ptruncatedpoissontruncatednegbin	zipoissonzinegbinzigenpoissonDiscretizedCountDiscretizedModelc                   *    e Zd Zd Zd Zd Zd Zd Zy)TestGenpoisson_pc                 |    t        j                  dd      }t        j                  dddd      }t        ||d       y )N   r   V瞯<rtolr   pmfr	   r   selfpoisson_pmfgenpoisson_pmfs      j/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/distributions/tests/test_discrete.pytest_pmf_p1zTestGenpoisson_p.test_pmf_p1   4    kk!Q'%))!Q15^%@    c                 |    t        j                  dd      }t        j                  dddd      }t        ||d       y )N   r   r   r   r   r   s      r   test_pmf_p2zTestGenpoisson_p.test_pmf_p2   r    r!   c                 |    t        j                  dd      }t        j                  dddd      }t        ||d       y )N
   r#   g}:   -q=r   r   )r   r   genpoisson_pmf_5s      r   test_pmf_p5zTestGenpoisson_p.test_pmf_p5"   s6    kk"a('++B5!<%5EBr!   c                 |    t        j                  dd      }t        j                  dddd      }t        ||d       y )Nr'   r#   r   r   r   r   r   logpmfr	   r   r   s      r   test_logpmf_p1zTestGenpoisson_p.test_logpmf_p1'   4    nnQ*%,,Q1a8^%@r!   c                 |    t        j                  dd      }t        j                  dddd      }t        ||d       y )N   r   r   r#   r   r   r,   r   s      r   test_logpmf_p2zTestGenpoisson_p.test_logpmf_p2,   r/   r!   N)__name__
__module____qualname__r   r$   r*   r.   r2    r!   r   r   r      s     A
A
C
A
Ar!   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestTruncatedPoisson-
    Test Truncated Poisson distribution
    c                     t        j                  dd      t        j                  dd      z  }t        j                  ddd      }t	        ||d       y Nr#   r   Hz>r   )r   r   sfr
   r   r   r   tpoisson_pmfs      r   test_pmf_zeroz"TestTruncatedPoisson.test_pmf_zero6   sB    kk!Q''**Q*::'++Aq!4\=r!   c                     t        j                  dd      t        j                  t        j                  dd            z
  }t        j                  ddd      }t        ||d       y r;   r   r-   nplogr=   r
   r   r   poisson_logpmftpoisson_logpmfs      r   test_logpmf_zeroz%TestTruncatedPoisson.test_logpmf_zero;   K     1-wzz!Q7G0HH*11!Q:dCr!   c                     t        j                  dd      dt        j                  dd      z
  z  }t        j                  ddd      }t	        ||d       y )N   r1   r   r#   r<   r   )r   r   cdfr
   r   r>   s      r   test_pmfzTestTruncatedPoisson.test_pmf@   sG    kk!Q'1w{{1a/@+@A'++Aq!4\=r!   c                     t        j                  dd      t        j                  t        j                  dd            z
  }t        j                  ddd      }t        ||d       y )NrK   r1   r#   r<   r   rB   rE   s      r   test_logpmfz TestTruncatedPoisson.test_logpmfE   rI   r!   Nr3   r4   r5   __doc__r@   rH   rM   rO   r6   r!   r   r8   r8   2   s    >
D
>
Dr!   r8   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestZIPoissonc                 z    t        j                  dd      }t        j                  ddd      }t        ||d       y N   r#   r   r(   r   r   r   r   r   r   r   zipoisson_pmfs      r   r@   zTestZIPoisson.test_pmf_zeroM   0    kk!Q'!aA.]?r!   c                 z    t        j                  dd      }t        j                  ddd      }t        ||d       y Nr'   r   r   r(   r   r   r-   r   r   r   rF   zipoisson_logpmfs      r   rH   zTestZIPoisson.test_logpmf_zeroR   s4     1-$++Aq!4(8uEr!   c                 |    t        j                  dd      }t        j                  ddd      }t        ||dd       y )Nr#   皙?皙?r   atolrW   rX   s      r   rM   zTestZIPoisson.test_pmfW   s2    kk!Q'!aC0]DIr!   c                 |    t        j                  dd      }t        j                  ddd      }t        ||dd       y )N   rV   ra   rb   rc   r]   r^   s      r   rO   zTestZIPoisson.test_logpmf\   s6     1-$++Aq#6(8t$Or!   c                 z    t        j                  dd      }t        j                  ddd      }t        ||d       y rU   )r   rL   r   r   )r   poisson_cdfzipoisson_cdfs      r   test_cdf_zerozTestZIPoisson.test_cdf_zeroa   rZ   r!   c                 z    t        j                  dd      }t        j                  ddd      }t        ||d       y r\   )r   ppfr   r   )r   poisson_ppfzipoisson_ppfs      r   test_ppf_zerozTestZIPoisson.test_ppf_zerof   rZ   r!   c                    t        j                  d      t        j                  d      }}t        j                  dd      }t        j                  dd      }t	        ||d       t	        ||d       t        j                  g d      }t        j                  |      t        j                  |      }}t        j                  |d      }t        j                  |d      }t	        ||d       t	        ||d       y )N   r   绽|=r   r   r'   r&           )r   meanvarr   r   rC   array)r   poisson_meanpoisson_varzipoisson_meanzipoisson_varms         r   test_mean_varzTestZIPoisson.test_mean_vark   s    $+LL$4gkk"ok"A.!b!,n5A]?HHZ $+LLOW[[^k"1-!a-n5A]?r!   c                 :   t        j                  dd      t        j                  dd      }}t        j                  ddd      }t        j                  ddd      }t        j                  ddd      }t        d|d       t        ||d       t        ||d       y )Nr   rq   r#   r   rr   r   )r   momentr   r   )r   
poisson_m1
poisson_m2zip_m0zip_m1zip_m2s         r   test_momentszTestZIPoisson.test_momentsy   s    !(2!6q"8MJ
!!!R+!!!R+!!!R+6.
F7
F7r!   N)r3   r4   r5   r@   rH   rM   rO   rj   ro   r}   r   r6   r!   r   rS   rS   K   s1    @
F
J
P
@
@
@8r!   rS   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestZIGeneralizedPoissonc                     t        j                  dddd      }t        j                  ddddd      }t        ||d       y )NrV   r#   r   r   r(   r   r	   r   r   r   r   gp_pmfzigp_pmfs      r   r@   z&TestZIGeneralizedPoisson.test_pmf_zero   s<    !!!Q1-##Aq!Q2u5r!   c                     t        j                  dddd      }t        j                  ddddd      }t        ||d       y )Nrf   rV   r   r   r(   r   r	   r-   r   r   r   	gp_logpmfzigp_logpmfs      r   rH   z)TestZIGeneralizedPoisson.test_logpmf_zero   s<     ''1a3	"))!Q1a8	;U;r!   c                     t        j                  dddd      }t        j                  ddddd      }t        ||dd       y )NrV   r#   ra   rb   rc   r   r   s      r   rM   z!TestZIGeneralizedPoisson.test_pmf   s>    !!!Q1-##Aq!Q4t$?r!   c                     t        j                  dddd      }t        j                  ddddd      }t        ||dd       y )Nr#   rV   r   ra   rb   rc   r   r   s      r   rO   z$TestZIGeneralizedPoisson.test_logpmf   s>     ''1a3	"))!Q1c:	;TEr!   c                    t        j                  g d      }t        j                  |      t        j                  |      }}t        j                  |ddd      }t        j                  |ddd      }t        ||d       t        ||d       y )Nrs   r   r   rt   rr   r   )rC   rw   r   ru   rv   r   r   )r   r|   rx   ry   zigenpoisson_meanzigenpoisson_vars         r   r}   z&TestZIGeneralizedPoisson.test_mean_var   ss     HHZ $+LLOW[[^k(--aAq9'++AsAq9&7eD%5EBr!   N)r3   r4   r5   r@   rH   rM   rO   r}   r6   r!   r   r   r      s    6
<
@
F
Cr!   r   c                   Z    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d Zd Zy)	TestZiNBPc                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )N   ra   r#   d   {Gz?h㈵>rc   r   convert_paramsr   r   r   r   npnb_pmftnb_pmfs        r   r$   zTestZiNBP.test_pmf_p2   sP    &&r321CA&,,sBQ5d>r!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr&   r   r#      r   rc   r   r   r   r-   r   r   r   r   	nb_logpmf
tnb_logpmfs        r   r2   zTestZiNBP.test_logpmf_p2   sP    &&r1a01MM#q!,	__S"aD9
	:DtDr!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr   ra   r#   r&   r   r(   rc   r   r   r   rL   r   r   r   r   
nbinom_cdfzinbinom_cdfs        r   test_cdf_p2zTestZiNBP.test_cdf_p2   sP    &&r321ZZAq)
||BCA6
Lu5Ir!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr   r   r#   gHzG?r   r(   rc   r   r   r   rl   r   r   r   r   
nbinom_ppfzinbinom_ppfs        r   test_ppf_p2zTestZiNBP.test_ppf_p2   sP    &&sAq11ZZa+
||D#q!Q7
Lu5Ir!   c                 (   t        j                  ddd      \  }}t        j                  ||      t        j                  ||      }}t        j                  dddd      }t        j                  dddd      }t        ||d       t        ||d       y Nrf   r   r#   r   rr   r   )r   r   r   ru   rv   r   )r   r   r   nbinom_mean
nbinom_var	zinb_meanzinb_vars          r   test_mran_var_p2zTestZiNBP.test_mran_var_p2   sy    &&q!Q/1"(++a"3VZZ15EZMM!Q1-	<<1a+YU;
H59r!   c                 ~   t        j                  ddd      \  }}t        j                  d||      t        j                  d||      }}t        j                  ddddd      }t        j                  ddddd      }t        j                  ddddd      }t	        d|d       t	        ||d       t	        ||d       y r   r   r   r   r   r   r   r   r   nb_m1nb_m2zinb_m0zinb_m1zinb_m2s           r   test_moments_p2zTestZiNBP.test_moments_p2       &&q!Q/1}}Q1-v}}Q1/Eu//!Q1a0//!Q1a0//!Q1a07/wU3wU3r!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dz  d       y )Nr   ?r#         ?r<   r   r   r   r   r   r   r   s        r   rM   zTestZiNBP.test_pmf   sR    &&q#q11JJq!Q'	,,q!S!S1	7Q;T:r!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr'   r   r#   g{Gzt?r   rc   r   r   s        r   rO   zTestZiNBP.test_logpmf   sP    &&q!Q/1MM!Q*	__Q1a7
	:DtDr!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr   r   r#   r   r(   rc   r   r   s        r   test_cdfzTestZiNBP.test_cdf   sP    &&q#q11ZZ1a(
||Aq#q!4
Lu5Ir!   c                     t        j                  ddd      \  }}t        j                  d||      }t        j                  ddddd      }t	        ||dd       y )Nr'   r   gQ?r   r(   rc   r   r   s        r   test_ppfzTestZiNBP.test_ppf   sP    &&q!Q/1ZZa+
||D!Q15
Lu5Ir!   c                     t        j                  ddd      \  }}d\  }}t        ||dd       t        ||dd       t        j                  ddd	      \  }}d
\  }}t        ||dd       t        ||dd       y )N   g333333?r#   )g?gq\?r(   rc   rf   g(\?r   )gD@gYY?)r   r   r   )r   r   r   n_truep_trues        r   test_convertzTestZiNBP.test_convert   s|    &&r431@6E:6E:&&q$21>6E:6E:r!   c                 d   dt        j                  g d      fD ]  }t        j                  |dd      \  }}t	        j
                  ||      t	        j                  ||      }}t        j
                  |ddd      }t        j                  |ddd      }t        ||d       t        ||d        y )N	   rs   r   r   rr   r   )rC   rw   r   r   r   ru   rv   r   )r   r|   r   r   r   r   r   r   s           r   r}   zTestZiNBP.test_mean_var   s    RXXj)* 	>A**1a3DAq&,kk!Q&7Aq9IK aAq1I||Aq!Q/HK?Ju=	>r!   c                 ~   t        j                  ddd      \  }}t        j                  d||      t        j                  d||      }}t        j                  ddddd      }t        j                  ddddd      }t        j                  ddddd      }t	        d|d       t	        ||d       t	        ||d       y )Nr   r   r#   r   rr   r   r   r   s           r   r   zTestZiNBP.test_moments   r   r!   N)r3   r4   r5   r$   r2   r   r   r   r   rM   rO   r   r   r   r}   r   r6   r!   r   r   r      sI    ?EJJ:4;EJJ	;>4r!   r   c                       e Zd Zd Zd Zy)CheckDiscretizedc                 J    |j                         }|j                  dd       |S )Nr   )tolistinsert)r   paramsargss      r   r   zCheckDiscretized.convert_params  s     }}Br!   c           	      b   | j                   }| j                  }| j                  }| j                  }| j                  }| j
                  }t        j                  j                  d       t        ||      }|j                  |k(  sJ t        j                  d      } |j                  |g| }	 |j                  |g| }
t        j                  |
      }t        |	d t        |       |d        |j                   |g| }t        |d t        |
      dz
   |
dd  d        |j"                  |g| }t        ||	d        |j                  |g| }t        ||d        |j$                  |g| }t        |d|z
  d       d} |j&                  |d|i}t        |      |k(  sJ |j)                         dkD  sJ t+        ||	      }|j-                  |
      }|j/                  |j0                  d      }	| j3                  |j0                        }t        j                   |j$                  t        j                  d      g|        }t        |	|d       t        j                   |j                  t        j                  d      g|       }t        |	|dd       t        j4                  |j7                  t8                    }t        |      }|dkD  r(d}||dz
  xx   ||d  j;                         z  cc<   |d | }|j/                  |j0                  d|      }	|	|dz
  xx   d|	d | j;                         z
  z  cc<   t=        j>                  ||	d | |z        }|j@                  dkD  sJ |jC                  |j0                        }d}|j'                  |      }t        j4                  |      }|j/                  |j0                  d|      }	t        |      }|	|dz
  xx   d|	d | j;                         z
  z  cc<   t=        j>                  ||	d | |z        }|j@                  dkD  sJ |jE                  |j                  t        j                  dd      dz               }t        jF                  g d      }tI        ||       t        jJ                  |j                  t        j                  dd            dz
  d      }	|jE                  |	      }t        j                  dd      }tI        ||       |jE                  |j                  t        j                  d                  }t        j                  dd      }tI        ||       |jM                  d|j                  t        j                  dd      dz         z
        }t        jF                  g d      }tI        ||       y )N
 r'   gvIh%<=r   r   i  sizegMbP?distrstart_paramsprobswhich   r   rc   r&   )r   k_maxr   i  )r   r   gư>)g      g      ?g       @g      @g      @g      @r   )'d_offsetddistrparamgparamdshapesr   rC   randomseedr   arange_pmfrL   diffr   len_cdfr   r=   rvsrv   r   fitpredictr   r   bincountastypeintsumr   	chisquarepvalue	get_distrrl   rw   r   maximumisf)r   r   r   r   r   r   r   dpxir   cdf1p1rL   p2cdf2r=   nobsxxmodresr   freqktchi2dfrnobs_rvsr   qq1s                                r   
test_basiczCheckDiscretized.test_basic  s   ==((
		vfh/yyF"""YYq\BGGB  vzz"&v&WWT])CGbu5bggb"6"Oc$i!m,d12hUC RVVB  AE*rvvb"6"c.RUU2AG%0RVVV'$'2w$vvx%r,gg<g0KK

'K2""3::.ggifii		"55662E* WWZVZZ		"5562E6{{299S>*Ir6AQK48<<>)K8DKK

'K;	!a%A"1		O#aedl3||d"""
 mmCJJ'gg8g${{3KK

'KBI	!a%A"1		O#aeh&67||d""" GGCGGBIIb!,t345XX45QJJswwryyQ/047;GGAJYYr1QGGCGGBIIaL)*YYq!_QGGA		"a 04 7889XX45Qr!   N)r3   r4   r5   r   r  r6   r!   r   r   r     s    
Tr!   r   c                       e Zd Zed        Zy)TestDiscretizedGammac                 t    d| _         t        j                  | _        d| _        d| _        d| _        d| _        y )Nr   )r'   r   r   )r'   r   za, s)r   r   )r   r   gammar   r   r   r   r   clss    r   setup_classz TestDiscretizedGamma.setup_classf  s1    [[
 


#r!   Nr3   r4   r5   classmethodr  r6   r!   r   r  r  d  s    $ $r!   r  c                       e Zd Zed        Zy)TestDiscretizedExponentialc                 t    d| _         t        j                  | _        d| _        d| _        d| _        d| _        y )Nr   )r   r'   )r'   sr   )r   r   exponr   r   r   r   r   r  s    r   r  z&TestDiscretizedExponential.setup_classs  s1    [[



r!   Nr  r6   r!   r   r!  r!  q  s    ! !r!   r!  c                       e Zd Zed        Zy)TestDiscretizedLomaxc                 t    d| _         t        j                  | _        d| _        d| _        d| _        d| _        y )Nr   )r#   r         ?)r#   r(  zc, s)r   r   )r   r   lomaxr   r   r   r   r   r  s    r   r  z TestDiscretizedLomax.setup_class  s1    [[
 


%r!   Nr  r6   r!   r   r&  r&  ~  s    & &r!   r&  c                       e Zd Zed        Zy)TestDiscretizedBurr12c                 t    d| _         t        j                  | _        d| _        d| _        d| _        d| _        y )Nr   )r#   r   r   r(  )r#   r   r(  zc, d, s)r   r   r   )r   r   burr12r   r   r   r   r   r  s    r   r  z!TestDiscretizedBurr12.setup_class  s1    \\
#
 

(r!   Nr  r6   r!   r   r+  r+    s    ) )r!   r+  c                       e Zd Zd Zy)TestDiscretizedGammaExc           
         g d}t        j                  t        j                  d      |      }t        ddgddddd	g d
      }t	        t
        j                        }t        ||      }|j                  ddg      }t        |      }t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                         |j!                  |j                  d      }|d t        |j"                         }	|	dxx   d|	j%                         z
  z  cc<   t        |	|z  |j"                  d       t        t        j$                  |      |	|z  j%                         d       t        j&                  ||	|z  t        |j                              }
t        |
j(                  dd       t        |
j*                  dd       |j-                          t         j.                  j1                  d       |j3                         }t        |j                  |d   d       t        |j4                  |d   d       y )N).   L      r   r   r'   ggaO;5@gO=?g^Iogg;%8?r   gz6>W?g^Iw@)g=
ףp=G@gGznR@gzG;@g      @gQ?)r   llfchi2df_modelr   aicr   r   r   r   r   r   g~jtx?)rd   r   r   r   gQ?rr   )ddofg.c؛C?r<   gYrL?r   rb   )rC   repeatr   r   r   r   r  r   r   r   r   r   r4  r7  r   r6  r   r   r   r   	statisticr  summaryr   r   	bootstrapbse)r   r  yres1r  r  r  r  r   probs_truncres_chi2	res_bootss               r   test_allzTestDiscretizedGammaEx.test_all  s   !IIbiilD)X&24 ekk*q+ggAq6g*1v

DKKd;55S\\4==1CJJg6,S_-B1{000d*DJJTBt{T'9&>&>&@uM??4t);(+CJJ9 	**JTB$? 	
		vMMO	

IaLt<1D9r!   Nr3   r4   r5   rC  r6   r!   r   r/  r/    s    ,:r!   r/  c                       e Zd Zd Zy)TestGeometricc                 `   d}dt        j                  d|z
        z  }t        j                  |d      } t	        t        j
                        |      }t        j                  d      }|j                  |      }|j                  |      }t        ||d       |j                  |      }|j                  |      }	t        |	|d       |j                  |      }
|j                  |      }t        ||
d       |j                  |      }|j                  |      }t        ||       |j                  |dz
        }|j                  |dz
        }t        ||       |j                  |dz         }|j                  |dz         }t        ||       |j                  d	      }|j                  d	      }t        |d       |j                  |
      }|j                  |
      }t        ||       |j                  |
dz
        }|j                  |
dz
        }t        ||       |j                  |
dz         }|j                  |
dz         }t        ||       |j                  d	      }|j                  d	      }t        ||       |j                  d      }|j                  d      }t        |d       y )
Ng333333?r   r   )locr1   rr   r   g:0yE>r   )rC   rD   r   geomr   r$  r   r   r   rL   r=   rl   r   r  )r   p_geomscale_dexpondgeodpgr  pmf1r   r  rL   sf1r=   ppf1rl   isf1r  s                   r   rC  zTestGeometric.test_all  s1   BFF1V8,,zz&b)+u{{+L9YYq\xx|ggbkT.xx|ggbkT.ggbkVVBZCe,xx~ggdmS$xxt$ggdTk"S$xxt$ggdTk"S$xx{ggajS" xx}ggclS$xxd
#ggcDj!S$xxd
#ggcDj!S$xx{ggajS$xx{ggajS"r!   NrD  r6   r!   r   rF  rF    s    -r!   rF  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestTruncatedNBPr9   c                     t        j                  ddd      \  }}t        j                  d||      t        j                  d||      z  }t        j                  ddddd      }t        ||d       y )Nr'   ra   r#   r   r   r   r   )r   r   r   r   r=   r   r   s        r   r@   zTestTruncatedNBP.test_pmf_zero   sb    --aa81Aq!$vyyAq'99!%%aCA6d3r!   c                    t        j                  ddd      \  }}t        j                  d||      t	        j
                  t        j                  d||            z
  }t        j                  ddddd      }t        ||dd       y )Nr'   r   r#   r   r   rc   )r   r   r   r-   rC   rD   r=   r   r   s        r   rH   z!TestTruncatedNBP.test_logpmf_zero  sm    --aA61MM!Q*RVVFIIaA4F-GG	$++Aq!Q:
	:DtDr!   c                 .   t        j                  ddd      \  }}t        j                  d||      t        j                  d||      z  }t        j                  ddddd      }t        ||d       t        j                  ddddd      }t        |d       y )Nr#   r   r1   r'   r<   r   r   )r   r   r   r   r=   r   r   r   s        r   rM   zTestTruncatedNBP.test_pmf  s    --aa81JJq!Q'&))Aq!*<<	!%%aCA6	76!%%aCA6Wa r!   c                 j   t        j                  ddd      \  }}t        j                  d||      t	        j
                  t        j                  d||            z
  }t        j                  ddddd      }t        ||d       t        j                  ddddd      }t	        j                  |      sJ y )Nr'   ra   r#   r1   r<   r   )	r   r   r   r-   rC   rD   r=   r   isneginfr   s        r   rO   zTestTruncatedNBP.test_logpmf  s    --aa81MM!Q*RVVFIIaA4F-GG	$++Aq#q!<
	:D9$++Aq#q!<
{{:&&&r!   NrP   r6   r!   r   rS  rS    s    4E!'r!   rS  )"numpyrC   numpy.testingr   r   scipyr   scipy.statsr   r   statsmodels.tools.toolsr   "statsmodels.distributions.discreter	   r
   r   r   r   r   r   r   r   r8   rS   r   r   r   r  r!  r&  r+  r/  rF  rS  r6   r!   r   <module>r_     s     7  ' )	 	 	A A:D D258 58pC C@`4 `4F[ [|
$+ 
$
!!1 
!
&+ 
&
), 
)/: /:d/ /d!' !'r!   