
    geO                        d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZmZmZmZ d dlmZ d dlmZ d dlmZ e j                            dg d          d	             Ze j                            dd
dg          d             Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(e j                            d ej)        e*e+fgdz             d             Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3e j                            dg d           d!             Z4d" Z5d# Z6d$ Z7d% Z8 G d& d'          Z9 G d( d)          Z:e j                            d*g d+g d,g          d-             Z;d. Z<dS )/    N)	betabinom	hypergeom
nhypergeom	bernoulli	boltzmannskellamzipfzipfianbinomnbinomnchypergeom_fishernchypergeom_walleniusrandint)assert_almost_equalassert_equalassert_allclosesuppress_warnings)r   )root_scalar)quadzk, M, n, N, expected, rtol))   
         g<<?V瞯<)k   '       g?r   )r   r   r   r   gS;绽|=c                 X    t          j        | |||          }t          |||           d S Nrtol)r   cdfr   kMnNexpectedr#   ps          Flib/python3.11/site-packages/scipy/stats/tests/test_discrete_distns.pytest_hypergeom_cdfr-      s4     	aAq!!AAxd++++++    )   r   r   r   g?r   )}   r   r   r   g!:<r   c                 X    t          j        | |||          }t          |||           d S r!   )r   sfr   r%   s          r,   test_hypergeom_sfr3   !   s4     	Q1a  AAxd++++++r.   c                     d} d}d}d}t          j        | |||          }t          j        || z
  |||z
  |          }t          j        || z
  ||||z
            }t          j        | |||          }t          ||d           t          ||d           t          ||d           d} d}d}d}t          j        | |||          }t          j        | ||z            }	t          ||	d           d S )Nr   2   r      )decimal      )r   logpmfr   r   )
r&   r)   Kr(   logpmf1logpmf2logpmf3logpmf4hypergeom_logpmfbernoulli_logpmfs
             r,   test_hypergeom_logpmfrB   +   s     	
A
A
A	Aq!Q**Gq1uaQ22Gq1uaAE22Gq!Q**G"5555"5555"5555 	
A
A	A	A '1a33 '1Q3//(*:BGGGGGGr.   c                      d\  } }}d}t          j        || ||          }t          j        || |||z   dz
            | |z
  |dz
  z
  z  | ||z   dz
  z
  z  }t          ||d           d S )N)-            r8   g|=r"   )r   pmfr   r   )r'   r(   rr&   NHGHGs         r,   test_nhypergeom_pmfrL   E   s    GAq!	A
.Aq!
$
$C	q!Q!A	&	&!a%1Q3-	8A1QK	HBB%((((((r.   c                      d} d}d}t          j        |dz             }t          j        || ||          }t          j        || ||          }t          |g dd           t          |g dd           d S )	NrF   r   r   r8   )$I$I?g۶m۶m?m۶m?rO   vIh%<=r"   )rN   $I$I?g%I$I?      ?)nparanger   rH   r$   r   )r'   r(   rI   supportrH   r$   s         r,   test_nhypergeom_pmfcdfrV   N   s    	A	A	Ai!nnG
.!Q
*
*C
.!Q
*
*CC111>>>>C000u======r.   c                  |    d} d}d}t          j        g dg dg| ||          }t          |g dg dgd	           d S )
Nr   r   r   )r   r8      r   )r8   rX   r   r   )r8   r   r   r8   )r   r   r8   r   rP   r"   )r   rH   r   )r'   r(   rI   rH   s       r,   test_nhypergeom_r0rY   Z   s[    
A	A	A
.,,,5q!Q
?
?CC,,,5EBBBBBBr.   c                  \    t          j        dg ddgdggd          } | j        dk    sJ d S )N   )r9   rF   	   r6   rE   r   r8   rX   r   size)r   rvsshape)xs    r,   test_nhypergeom_rvs_shaperc   c   sA     	r999tbTlFFFA7l""""""r.   c                  @   t           j                            d           t          j        dddd          } t           j                            d           t           j                            d          }t          j        |ddd          }t          | |           d S )Nr   r[   r9      d   r^   )rS   randomseedr   r`   uniformppfr   )rb   r+   ys      r,   test_nhypergeom_accuracyrl   k   s     INN1r1bs+++AINN1
	s##Aq"a$$AAr.   c                  h   t          j        dd          } d}t          j        | d|          }| dk    }t	          ||           t          j        d          }d}t          j        | ||          }g d}t          ||d	
           t          j        | ||          }g d}t          ||d	
           d S )Nr   r8   grh|?r   rX   r   )r   r   r   $I$I?rQ   g$I$I?r   r   rP   r"   )r   r   r   ro   g۶m۶m?r8   r8   r8   )rS   rT   r   rH   r   logr   r$   )r&   r)   r+   r*   lamcs         r,   test_boltzmann_upper_boundrs   v   s    
	"aA	Aa""AAvHH
&))C	Aaa  A---HAxe,,,,aa  A+++HAxe,,,,,,r.   c                      d} t          j        | dz             }t          | dd                              |          }t          j        d| dz   z  | dz             }t          ||           d S )N   r8   )rS   rT   r   rH   repeatr   )r(   r&   r+   r*   s       r,   test_betabinom_a_and_b_unityrw      sn     	A
	!a%A!Qq!!Aya!ea!e,,H8$$$$$r.   dtypesr   c                     | \  }}} |d           |d           |d          }}}t          t          j        |||d          d           d S )Nr   rX   r   r&   momentsgaa)r   r   stats)rx   n_typea_typeb_typer(   abs          r,   -test_betabinom_stats_a_and_b_integers_gh18026r      s_     $FFFfRjj&&))VVAYY!qAIOAq!S999;NOOOOOr.   c                      d} d}t          j        d          }t          d| |                              |          }t	          | | |z   z                                |          }t          ||           d S )Ngffffff@g)\(?rX   r8   )rS   rT   r   rH   r   r   )r   r   r&   r+   r*   s        r,   test_betabinom_bernoullir      sq    AA
	!A!Qq!!Aa!e%%))!,,H8$$$$$r.   c                  \    d\  } }}t          t          j        | ||          d           d S )N)g?r   r8   
confidencer(   r+   r   r   )r   r   intervalalphar(   r+   s      r,   test_issue_10317r      s4    KE1aEQ!<<<fEEEEEr.   c                  \    d\  } }}t          t          j        | ||          d           d S )N)gffffff?r   r   r   r   )r   r   r   r   s      r,   test_issue_11134r      s4    KE1a5A;;;VDDDDDr.   c                  V   t           j                            d           t          t	          j        t           j                            d          dd          d           t          t	          j        ddd          d           t          t	          j        ddd          d           d S )Nr   r         ?r8   )rS   rg   rh   r   r   rj   rand r.   r,   test_issue_7406r      s    INN129>>"--q#66::: 1a%%r***1a%%q)))))r.   c                  d   d} t           j                            dd          }d}t          j        |||           }t          |d           t          j        ddd          }t          j        |||           }t          |d           d}t          j        |||           }t          ||           d S )	Nr   rf   r   r^   r   {Gz?gGz?r8   )rS   rg   r   r   rj   r   linspace)r+   r(   rb   rj   s       r,   test_issue_5122r      s    	A
	#B''A	A
)Aq!

Cb
D$##A
)Aq!

Ca	A
)Aq!

Car.   c            	          t          t          dt          j        dd                                        d          d           d S )N  rn   ir   r   )r   r   rS   logspacerj   r   r.   r,   test_issue_1603r      s<    tR[T223377==qAAAAAr.   c                      d} t          j        ddd          }t          t          j        |d|z  |           dd           d S )Nr   r      r6   rX   r   )atol)rS   r   r   r   r$   )r+   rb   s     r,   test_issue_5503r      sG    A
Ar2AEIa1a((#D999999r.   zx, n, p, cdf_desired)	)i,  r   333333?g24?)r   r   r   gU7i(?)i0u  i r   gέ̑?)i i@B r   g8@
?)i- 逖 r   gf(G?)i r   gwtg ?)ir   r   gV}ֈ?)ipr   r   gz̍?)i0 r   r   gnC:c                 N    t          t          j        | ||          |           d S Nr   r   r$   )rb   r(   r+   cdf_desireds       r,   test_issue_5503pt2r      s(     EIaA&&44444r.   c                  N    t          t          j        ddd          d           d S )NrX   l    J)g-q=gB.+n?r   r   r.   r,   test_issue_5503pt3r      s'    EIa113IJJJJJr.   c                  N    t          t          j        ddd          d           d S )N   r5   gAA?g_[Cˮi8)r   r   r2   r   r.   r,   test_issue_6682r      s)     FIc2w//1FGGGGGr.   c                  Z    d} d}d}t          t          j        || |          d           d S )Nr   r   i          )r   r   rH   )r(   r+   r&   s      r,   %test_boost_divide_by_zero_issue_15101r      s5    AAAEIaA&&,,,,,r.   c                  b    g d} t          j        d| |           }g d}t          ||           d S )N)	r8   r   rf   r   i  i  i  i  ip  r   )	g>l?gzo?gVrRs?g$?gVWCW?g4yB?g4.?g.Lr?gD?)r   r$   r   )mur$   cdf_expecteds      r,   test_skellam_gh11474r      sL    	9	9	9B
+aR
 
 CP P PL C&&&&&r.   c                      e Zd Zd Zd Zd Zej                            d            ej	         ej
        ddd          ej                            dd	d          f          j        Zej                            d
e          d             ZdS )TestZipfianc                    d}d}t          j        dd          }t          t          j        |||          t          j        ||                     t          t          j        |||          t          j        ||                     t          t          j        |||          t          j        ||                     t          t          j        ||d          t          j        |d                     d S )Ng      @r   r8      msvkrz   )	rS   rT   r   r
   rH   r	   r$   r2   r|   )selfr   r)   r&   s       r,   test_zipfian_asymptoticz#TestZipfian.test_zipfian_asymptotic  s    IaAq!,,dhq!nn===Aq!,,dhq!nn===
1a++TWQ]];;;aF;;;
1f555	7 	7 	7 	7 	7r.   c                    d\  }}d}t          j        d|dz             }t          t          j        |||          t          j        |||          d           t          t          j        |||          t          j        |||          d           t          t          j        |||          t          j        |||          d           t          t          j        ||d          t          j        ||d          d           d S )N)gG?g1  ?   r8   gƠ>r"   r   rz   )rS   rT   r   r
   rH   r$   r2   r|   )r   alt1agt1r)   r&   s        r,   test_zipfian_continuityz#TestZipfian.test_zipfian_continuity  s%    ,
dIaQAtQ//Qa1H1H!	# 	# 	# 	#AtQ//Qa1H1H!	# 	# 	# 	#
1dA..
1dA0F0F!	# 	# 	# 	#dAv>>>dAv>>>T	K 	K 	K 	K 	K 	Kr.   c                    t           j                            d           t           j                            ddd          }t           j                            d          dz  dz   }t           j                            ddd          }g d}g d}t          t          j        |||          dd          |dd          d	
           t          t          j        |||          dd          |dd          d
           d S )Nr   r8   ru   r   r^   rf   )
gĹԨ?gءk>	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?)
gaj?gZk=?r   g?g90?gɸU?rR   gJ_9?g2h2-?gB0?ư>r"   g-C6
?)	rS   rg   rh   r   r   r   r
   rH   r$   )r   r&   r   r(   rH   r$   s         r,   test_zipfian_RzTestZipfian.test_zipfian_R   s    		qIa"--INN2r!A%Ia2..+ + +F F F 	Aq!,,QRR0#abb'EEEEAq!,,QRR0#abb'EEEEEEr.   r   r8   r   rX   (   za, nc                    t           j        d             t           j        fd            }t          j        |dz             } ||||          }t          j        |          }t          j        ||          }t          j        ||z
  dz  |          }|dz  }	t          j        ||z
  |	z  dz  |          }
t          j        ||z
  |	z  dz  |          dz
  }t          t          j        |||          |           t          t          j        |||          |           t          t          j	        ||d	
          |||
|g           d S )Nc                 b    dt          j        d| dz             |z  z                                  S )z$Naive implementation of harmonic sumr8   )rS   rT   sum)r(   ss     r,   Hnsz+TestZipfian.test_zipfian_naive.<locals>.Hns@  s0     bi1Q3''**//111r.   c                 J    | dk     s| |k    rdS d| |z  z   ||          z  S )z#Naive implementation of zipfian pmfr8   r   r   )r&   r   r(   r   s      r,   pzipz,TestZipfian.test_zipfian_naive.<locals>.pzipE  s8     1uuAr1a4x##a))++r.   r8   )weightsrX   r   r   r   mvskrz   )
rS   	vectorizerT   cumsumaverager   r
   rH   r$   r|   )r   r   r(   r   r&   rH   r$   meanvarstdskewkurtosisr   s               @r,   test_zipfian_naivezTestZipfian.test_zipfian_naive<  so    
	2 	2 
	2 
	, 	, 	, 	, 
	, IacNNd1amminnz!S)))j!d(Q4443hzAdFC<!+S999:$|a/===AAq!,,c222Aq!,,c222aF;;;sD(3	5 	5 	5 	5 	5r.   N)__name__
__module____qualname__r   r   r   rS   rg   rh   vstackr   r   Tnaive_testspytestmarkparametrizer   r   r.   r,   r   r     s        	7 	7 	7K K KF F F0 INN1")[R[Q33Y..q"b99; < <<=  [V[115 5 215 5 5r.   r   c                   J   e Zd Zej                            d           dZdZej                            dee          Z	ej                            dee          Z
e	e
z   Z ej        deej                  Z ej        dee
z
            Z ej        ee	          Z ej        eeej                  Z ej        j        ej         dz  Zej                            ddd	g          d
             Zd Zd Zd Zej                            ddd	g          d             ZdS )TestNCHrX   rX   r   r   rf   r8   r^   r   	dist_namer   r   c           	          t           t          d}||         }| j        | j        | j        | j        f\  }}}}t          |                    ||||d          t          j        ||||                     d S )Nr   r   r8   )odds)	r   r   rb   r)   m1r(   r   rH   r   )r   r   distsdistrb   r)   r   r(   s           r,   test_nch_hypergeomzTestNCH.test_nch_hypergeomi  s    
 (:*?A AYfdfdgtv51b!Ar1155!aB22	4 	4 	4 	4 	4r.   c           	         | j         | j        | j        | j        | j        f\  }}}}}t
          j        d             } ||||||          \  }}}	t          t          j	        |||||          |           t          t          j
        ||||d          |           t          t          j
        ||||d          |	           d S )Nc                     |z
  t          j        dz
            t          j                  fdfd} |d          } |d          } |d          } |           |z  }	||z  }
||z  ||z  dz  z
  }|	|
|fS )Nr   c                 `    t          |           }t          | z
            }||z  | z  z  S r   )special_binom)rb   t1t2r   m2r(   ws      r,   fzFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.f  s7    "2q))"2q1u--BwA~%r.   c                 `     t           fdt          dz             D                       S )Nc              3   :   K   | ]} |          |z  z  V  d S r   r   ).0rk   r   r&   s     r,   	<genexpr>zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>  s3      @@11Q4419@@@@@@r.   r8   )r   range)r&   r   xlxus   `r,   PzFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P  s8    @@@@@eBQ.?.?@@@@@@r.   r8   rX   rS   maximumminimum)rb   r)   r   r(   r   r   P0P1P2rH   r   r   r   r   r   r   s     ```       @@@@r,   pmf_mean_varz;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_vary  s     RBAqt$$BAr""B& & & & & & & &
A A A A A A A 1B1B1B!A$$)C7Dr'R"WqL(Cc>!r.   mrz   v)rb   r)   r   r(   r   rS   r   r   r   rH   r|   )
r   rb   r)   r   r(   r   r  rH   r   r   s
             r,   test_nchypergeom_fisher_naivez%TestNCH.test_nchypergeom_fisher_naiveu  s     FDFDGTVTYF1b!T		" 	" 
	", &aB488T3*.q!RDAA3GGG*0B4MMM	 	 	*0B4MMM	 	 	 	 	r.   c           
         t           j                            d           d}d}t           j                            d||          }t           j                            d||          }||z   }t          j        d||j                  }t          j        d||z
            }t          j        ||          }t          j        |||j                  }	t          j        j        |	j         dz  }
d t           j	        fd            t                      5 }|                    t          d	
           t          t          j        ||||
           ||||
          d           d d d            n# 1 swxY w Y   t           j	        fd            }t                      5 }|                    t          d	
           t          t          j        ||||
d           |||||
          d           d d d            n# 1 swxY w Y   t           j	        fd            } ||	||||
          }t          j        |	||||
          }d\  }}t          j        ||z
            ||t          j        |          z  z   k     }|                                t          j        |          dz  k    sJ t+          ||          ||          ||          |
|                    D ]\  }}}}
||z
  } ||||
          \  }}t          j        ||dz             }	 ||	||||
                                          dk     sJ t          t          j        |	||||
                                          d           d S )NrX   r   rf   r8   r^   r   c                 n    | |z
  }t          j        d||z
            }t          j        ||          }||fS )Nr   r   )r)   r   r(   r   r   r   r   s          r,   rU   z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.support  s:    RBAqt$$BAr""Br6Mr.   c                 x    | z
   |           \  }}fd}t          |||f          j        S )Nc                 2    | z  d| z
  z  z
  z  z   dz
  S Nr8   r   )ur   r   r(   r   s    r,   funzCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun  s(    tqAaC8|a//!33r.   )bracket)r   root)	r)   r   r(   r   r   r   r  r   rU   s	    ```   @r,   r   z6TestNCH.test_nchypergeom_wallenius_naive.<locals>.mean  sm    RBWQAq))FB4 4 4 4 4 4 4 4 sRH555::r.   z!invalid value encountered in mean)messageg{Gz?r"   c                     | |z
  } | |||          }|||z
  z  }||z
  ||z   |z
  z  }| |z  |z  | dz
  ||z  ||z  z   z  z  S r  r   )	r)   r   r(   r   r   r  r   r   r   s	           r,   variancez:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variance  sl    RBQAq!!AR!VA1q2vz"AQ3q5QqSRTBqD[122r.   r  rz   g?c                 t    	 |z
  	 
|          \  }}	 fd	fd} |           S )Nc                 j    z
  z  z
  z
  z   }d| |z  z  z
  z  d| d|z  z  z
  z
  z  z  }|S r  r   )tDresr   r   r(   r   rb   s      r,   	integrandzHTestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.integrand  sQ    rAvJ"!*-QqSzAo1qs8qs(;;
r.   c                     t          |           }t          | z
            }t          dddd          }||z  |d         z  S )Nr   r8   gؗҜ<)epsrelepsabs)r   r   )rb   r   r   the_integralr  r   r   r(   s       r,   r   z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.f  sZ    "2q))"2q1u--#Iq!+0 @  @  @Bwa00r.   r   )rb   r)   r   r(   r   r   r   r   r  r   rU   s   ` ```   @@r,   rH   z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf  s    RBWQAq))FB        
1 1 1 1 1 1 1 1 1Q44Kr.   )r   r   r   )rS   rg   rh   r   r`   ra   r   r   r   r   r   filterRuntimeWarningr   r   r   r|   rH   absr   prodziprT   )r   ra   max_mr   r   r)   r(   r   r   rb   r   supr  rH   pmf0pmf1r   r#   ir   rU   s                      @@r,    test_nchypergeom_wallenius_naivez(TestNCH.test_nchypergeom_wallenius_naive  sR    		qYq%e44Yq%e44GK117+++Z1R4  Z2KBRX...INAG$Q&	 	 	 
	; 	; 	; 	; 
	;    	:CJJ~B  D D D16q"aCC DB1--D: : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 
	3 	3 	3 	3 
	3    	CJJ~B  D D D%+Ar1aEEEB1%%   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
	 	 	 	 
	$ s1aQ""$(Ar1a88
dF4$;$bfTll):"::uuww!+++++ q!ub!faeQrU;; 		P 		PKAr1aRBWQAq))FB	"b1f%%A 3q!RA&&**,,r111115aB1EEIIKKQOOOO		P 		Ps&   AE33E7:E7#AHHHc           	      `   d}d}d}d}t          j        d          }t          j        g d          }d}d}t          t	          j        |||||          |d	d	
           t          t	          j        ||||          |d	           t          t	          j        ||||          |d           d S )Nr5   r   ru   g      @r   )g9T;gr<gD,P=g4 V=g'	,=gCG>gyztj>gt>g+k?g MeGD?gqNZVɒo?gc2n?g~ZN?gE}?Y?g?g·aQ?g]??gr)?gp{?g39	y?g m>?gJ򕴝-@gih@rP   )r#   r   r"   gdy=)rS   rT   arrayr   r   rH   r   r   )	r   r'   r(   r)   r   r$  rH   r   r   s	            r,   test_wallenius_against_mpmathz%TestNCH.test_wallenius_against_mpmath  s     immh / / / 0 0* "  	-1#q!QEEs"	0 	0 	0 	0-21aDAA5	* 	* 	* 	*-1!Q4@@%	) 	) 	) 	) 	) 	)r.   c                     t           t          d}||         }|                    dddgdggg dd          }|j        dk    sJ d S )	Nr   r5   r   r   ru   )r   rR   g       @r]   r^   )r   r   r`   ra   )r   r   r   r   rb   s        r,   test_rvs_shapezTestNCH.test_rvs_shape  sb     (:*?A AYHHRrdRD\???HNNw,&&&&&&r.   N)r   r   r   rS   rg   rh   ra   r#  r   r   r   r)   r`   r(   r   r   r   r   rb   r   r   r   r   r   r   r  r(  r+  r-  r   r.   r,   r   r   [  s       INN1EE			1e%		0	0B			1e%		0	0B
RAAqqw'''A	Aqt		B	Ar		BB***A29>17#A%D [[24KLN N4 4N N4     DZP ZP ZPx() () ()T [[24KLN N' 'N N' ' 'r.   r   zmu, q, expected)r   x   g@	#)i  r   g"qVUc                 f    d}|||| z   z  }}t          t          j        |||          |           d S )Nru   )r   r   logcdf)r   qr*   r_   r(   r+   s         r,   test_nbinom_11465r2  *  s@    
 DtBwqA FM!Q**H55555r.   c                     t          j        ddd          } d}t          |                              |           }| dz  dk    }t	          |d         |           t	          |d         d|z
             t          ||          d           d S )Nr   r8   re   g?r   )rS   r   r   rH   r   r   )rb   r+   rH   r'  s       r,   test_gh_17146r4  7  s     	Aq"AA
A,,

1

C	
Q!ACGQCFAaC   aR!r.   )=r   	itertoolsscipy.statsr   r   r   r   r   r   r	   r
   r   r   r   r   r   numpyrS   numpy.testingr   r   r   r   scipy.specialr   scipy.optimizer   scipy.integrater   r   r   r-   r3   rB   rL   rV   rY   rc   rl   rs   rw   productintfloatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r4  r   r.   r,   <module>r?     sU       M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M                1 0 0 0 0 0 & & & & & &            
 5: : :; ;, ,; ;, 56:;< <
, ,< <
,
H H H4) ) )	> 	> 	>C C C# # #  - - -&% % % #49#4U|nQ6F#GHHP P IHP% % %F F F
E E E
* * *  "B B B: : : / 
2 
2 
2 
 
5 5
 
5K K K
H H H- - -' ' 'S5 S5 S5 S5 S5 S5 S5 S5lL' L' L' L' L' L' L' L'^ *;;;7779: :6 6: :6	 	 	 	 	r.   