o
    i                     @   s*  d Z ddlZddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZm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!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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 dzddZ9dd Z:dd Z;eej<ddej=dfddZ>eej<dd{ddZ?eej<dd{ddZ@eej<ddejAfddZBeej<d dejAd!fd"d#ZCeej<d$dejAfd%d&ZDeej<d'dejAfd(d)ZEeej<d*	,	d|d-d.ZFeej<d/	,	d|d0d1ZGeej<d2d}d3d4ZHeej<d5d}d6d7ZIeej<d8d~d9d:ZJeej<d;d~d<d=ZKeej<d>d~d?d@ZLeej<dAd~dBdCZMeej<dDd~dEdFZNeej<dGd~dHdIZOeej<dJd~dKdLZPeej<dMd|dNdOZQeej<dPd|dQdRZReej<dSd|dTdUZSeej<dVd}dWdXZTeej<dYd~dZd[ZUeej<d\d~d]d^ZVeej<d_d~d`daZWeej<dbd~dcddZXeej<ded~dfdgZYeej<dhd~didjZZeej<dkd~dldmZ[eej<dnd~dodpZ\eej<dqd~drdsZ]eej<dtd~dudvZ^eej<dwd~dxdyZ_dS )z;
Implementation of method overloads for Generator objects.
    N)types)overload_methodregister_jitable)as_dtype
from_dtype)
next_floatnext_double)is_nonelike)TypingError)TupleUniTuple)"!random_standard_exponential_inv_frandom_standard_exponential_invrandom_standard_exponentialrandom_standard_normal_frandom_standard_gammarandom_standard_normalrandom_uniformrandom_standard_exponential_frandom_standard_gamma_frandom_normalrandom_exponentialrandom_gammarandom_betarandom_powerrandom_frandom_chisquarerandom_standard_cauchyrandom_paretorandom_weibullrandom_laplacerandom_logisticrandom_lognormalrandom_rayleighrandom_standard_trandom_waldrandom_geometricrandom_zipfrandom_triangularrandom_poissonrandom_negative_binomialrandom_logseriesrandom_noncentral_chisquarerandom_noncentral_frandom_binomial)random_methods	the givenc                 C   s   t |tjr	|j}|}t |trtt|}nt |tjr$|}t	|}|tj
tjfvr0td|tj
kr;| }||fS |}||fS )a  
        Most of the standard NumPy distributions that accept dtype argument
        only support either np.float32 or np.float64 as dtypes.

        This is a helper function that helps Numba select the proper underlying
        implementation according to provided dtype.
    zLArgument dtype is not one of the expected type(s):  np.float32 or np.float64)
isinstancer   Omittedvaluetyper   npdtypeNumberClassr   float32float64r
   )func_32func_64r6   	dist_namenp_dtnb_dt	next_func r@   _/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/np/random/generator_methods.py_get_proper_func   s   

rB   c                 C   sF   t t| tot| jtjt| to| jdkt| tjgs!tdd S )Nr   zdArgument size is not one of the expected type(s):  an integer, an empty tuple or a tuple of integers)	anyr1   r   r6   r   Integerr   countr
   )sizer@   r@   rA   
check_size;   s   
rG   c                    sZ   t  tjr	 j t |ttfs|g}t fdd|D s+td| dd|  dS )z\
    Check if given object is one of the provided types.
    If not raises an TypeError
    c                    s   g | ]}t  |qS r@   )r1   ).0_typeobjr@   rA   
<listcomp>P   s    zcheck_types.<locals>.<listcomp>z	Argument z is not one of thez expected type(s): N)r1   r   r2   r3   listtuplerC   r
   )rK   	type_listarg_namer@   rJ   rA   check_typesE   s   rQ   integersFc           
         sR  t |tjtjttgd t |tjtjttgd t |tjtgd t|tjr*|j}t|tjr3|j}t|t	rBt
t|}|}nt|tjrO|}t|}ntd|tjkr`tj ddn#zt|}W n tyr   tdw ttd|j d |j|jt|rd tjd	f fd
d	}	|	S t| d tjd	f fdd	}	|	S )NlowhighendpointzArgument dtype is not one of the expected type(s): np.int32, np.int64, np.int16, np.int8, np.uint32, np.uint64, np.uint16, np.uint8, np.bool_   random_bounded_uint_fillFc                    s~   t ||| |s(||d8 }||}||}|| } | j||d|d S ||}||}|| } | j||d|d S )N   r   r/   _randint_arg_checkbit_generatorinstrS   rT   rF   r6   rU   rngint_funclower_boundupper_boundr@   rA   impl   s   
z/NumPyRandomGeneratorType_integers.<locals>.implc                    sv   t ||| |s&||d8 }||}||}|| } | j||||S ||}||}|| } | j||||S )NrZ   r[   r^   ra   r@   rA   re      s   
)rQ   r   rD   Booleanboolintr1   r2   r3   r4   r   r5   r6   r7   r   r
   bool_r/   random_bounded_bool_filliinfo
ValueErrorgetattrbitsminmaxr	   int64rG   )
r_   rS   rT   rF   r6   rU   r>   _dtypei_infore   r@   ra   rA   !NumPyRandomGeneratorType_integersV   s\   


rt   shufflec                 C   s0   t |tjgd t |ttjgd ddd}|S )Nxaxisr   c                 S   s   |dk r	||j  }||j d ks|dk rtdt|d|}t|d }tt|d ddD ])}tt	
| j|}||krAq0||df |d< ||df ||df< |||df< q0d S )Nr   rZ   z)Axis is out of bounds for the given array)r   .rV   .)ndim
IndexErrorr5   swapaxes
empty_likerangelenr   intpr/   random_intervalr]   )r_   rv   rw   zbufijr@   r@   rA   re      s    
z.NumPyRandomGeneratorType_shuffle.<locals>.implr   )rQ   r   Arrayrh   rD   r_   rv   rw   re   r@   r@   rA    NumPyRandomGeneratorType_shuffle   s   
r   permutationc                    sD   t |tjtjgd t |ttjgd t|tj d fdd	}|S )Nrv   rw   r   c                    s6    rt |}| | |S | }| j||d |S )N)rw   )r5   arangeru   copy)r_   rv   rw   new_arrIS_INTr@   rA   re      s   

z2NumPyRandomGeneratorType_permutation.<locals>.implr   )rQ   r   r   rD   rh   r1   r   r@   r   rA   $NumPyRandomGeneratorType_permutation   s
   
r   randomc                    sf   t tt|d\ t|tjr|j}t|r#d tj	f fdd	}|S t
| d tj	f fdd	}|S )Nr   c                        | j S Nr]   r_   rF   r6   	dist_funcr>   r@   rA   re         z-NumPyRandomGeneratorType_random.<locals>.implc                    6   t j||d}|j}t|jD ]	} | j||< q|S Nr6   r5   emptyflatr|   rF   r]   r_   rF   r6   outout_fr   r   r@   rA   re      
   )rB   r   r   r1   r   r2   r3   r	   r5   r9   rG   r_   rF   r6   re   r@   r   rA   NumPyRandomGeneratorType_random   s   r   standard_exponentialzigc                    s   t |tjtgd ttt|\ttt|\ t	|tj
r"|j}t|r5d tjdf fdd	}|S t| d tjdf fdd	}|S )Nmethodr   c                    s4   |dkr | j S |dkr| j S td)Nr   inv$Method must be either 'zig' or 'inv')r]   rl   )r_   rF   r6   r   r   dist_func_invr>   r@   rA   re     s
   z;NumPyRandomGeneratorType_standard_exponential.<locals>.implc                    sp   t j||d}|j}|dkrt|jD ]	} | j||< q|S |dkr4t|jD ]	}| j||< q(|S td)Nr   r   r   r   )r5   r   r   r|   rF   r]   rl   )r_   rF   r6   r   r   r   r   )r   r   r@   rA   re     s   )rQ   r   UnicodeTypestrrB   r   r   r   r   r1   r2   r3   r	   r5   r9   rG   )r_   rF   r6   r   re   r@   r   rA   -NumPyRandomGeneratorType_standard_exponential   s$   r   standard_normalc                    sd   t tt|\ t|tjr|j}t|r"d tj	f fdd	}|S t
| d tj	f fdd	}|S )Nc                    r   r   r   r   r   r@   rA   re   /  r   z6NumPyRandomGeneratorType_standard_normal.<locals>.implc                    r   r   r   r   r   r@   rA   re   5  r   )rB   r   r   r1   r   r2   r3   r	   r5   r9   rG   r   r@   r   rA   (NumPyRandomGeneratorType_standard_normal&  s   r   standard_gammac                    s|   t |tjtjttgd ttt|\ t	|tj
r|j}t|r.d tjf fdd	}|S t| d tjf fdd	}|S )Nshapec                    s    | j |S r   r   )r_   r   rF   r6   r   r@   rA   re   J     z5NumPyRandomGeneratorType_standard_gamma.<locals>.implc                    s8   t j||d}|j}t|jD ]
} | j|||< q|S r   r   )r_   r   rF   r6   r   r   r   r   r@   rA   re   P  s
   )rQ   r   FloatrD   rh   floatrB   r   r   r1   r2   r3   r	   r5   r9   rG   )r_   r   rF   r6   re   r@   r   rA   'NumPyRandomGeneratorType_standard_gamma?  s   r   normal              ?c                 C   n   t |tjtjttgd t |tjtjttgd t|tjr!|j}t	|r,ddd}|S t
| ddd}|S )	Nlocscaler   r   c                 S      t | j||S r   )r   r]   r_   r   r   rF   r@   r@   rA   re   c  r   z-NumPyRandomGeneratorType_normal.<locals>.implc                 S   <   t j|t jd}|j}t|jD ]}t| j||||< q|S r   )r5   r   r9   r   r|   rF   r   r]   r_   r   r   rF   r   r   r   r@   r@   rA   re   i  
   r   r   NrQ   r   r   rD   rh   r   r1   r2   r3   r	   rG   r_   r   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_normalZ     

r   uniformc                 C   r   )	NrS   rT   r   r   c                 S   s   t | j||| S r   )r   r]   )r_   rS   rT   rF   r@   r@   rA   re   |     z.NumPyRandomGeneratorType_uniform.<locals>.implc                 S   s@   t j|t jd}|j}t|jD ]}t| j||| ||< q|S r   )r5   r   r9   r   r|   rF   r   r]   )r_   rS   rT   rF   r   r   r   r@   r@   rA   re     s
   r   r   )r_   rS   rT   rF   re   r@   r@   rA    NumPyRandomGeneratorType_uniforms  r   r   exponentialc                 C   V   t |tjtjttgd t|tjr|j}t	|r ddd}|S t
| ddd}|S )Nr   r   c                 S      t | j|S r   )r   r]   r_   r   rF   r@   r@   rA   re        z2NumPyRandomGeneratorType_exponential.<locals>.implc                 S   :   t j|t jd}|j}t|jD ]
}t| j|||< q|S r   )r5   r   r9   r   r|   rF   r   r]   r_   r   rF   r   r   r   r@   r@   rA   re     
   r   Nr   r_   r   rF   re   r@   r@   rA   $NumPyRandomGeneratorType_exponential     

r   gammac                 C   sn   t |tjtjttgd t |tjtjttgd t|tjr!|j}t	|r,ddd}|S t
| ddd}|S )Nr   r   r   c                 S   r   r   )r   r]   )r_   r   r   rF   r@   r@   rA   re     r   z,NumPyRandomGeneratorType_gamma.<locals>.implc                 S   r   r   )r5   r   r9   r   r|   rF   r   r]   )r_   r   r   rF   r   r   r   r@   r@   rA   re     r   r   r   )r_   r   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_gamma     

r   betac                 C   n   t |tjtjttgd t |tjtjttgd t|tjr!|j}t	|r,ddd}|S t
| ddd}|S )Nabc                 S   r   r   )r   r]   )r_   r   r   rF   r@   r@   rA   re     r   z+NumPyRandomGeneratorType_beta.<locals>.implc                 S   6   t |}|j}t|jD ]}t| j||||< q|S r   )r5   r   r   r|   rF   r   r]   )r_   r   r   rF   r   r   r   r@   r@   rA   re     
   
r   r   )r_   r   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_beta  r   r   fc                 C   r   )Ndfnumdfdenc                 S   r   r   )r   r]   )r_   r   r   rF   r@   r@   rA   re     r   z(NumPyRandomGeneratorType_f.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r   r]   )r_   r   r   rF   r   r   r   r@   r@   rA   re     r   r   r   )r_   r   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_f  r   r   	chisquarec                 C   V   t |tjtjttgd t|tjr|j}t	|r ddd}|S t
| ddd}|S )Ndfc                 S   r   r   )r   r]   r_   r   rF   r@   r@   rA   re     r   z0NumPyRandomGeneratorType_chisquare.<locals>.implc                 S   4   t |}|j}t|jD ]
}t| j|||< q|S r   )r5   r   r   r|   rF   r   r]   r_   r   rF   r   r   r   r@   r@   rA   re     
   
r   r   r_   r   rF   re   r@   r@   rA   "NumPyRandomGeneratorType_chisquare  r   r   standard_cauchyc                 C   s>   t |tjr	|j}t|rddd}|S t| ddd}|S )Nc                 S   s
   t | jS r   )r   r]   )r_   rF   r@   r@   rA   re     s   
z6NumPyRandomGeneratorType_standard_cauchy.<locals>.implc                 S   s2   t |}|j}t|jD ]	}t| j||< q|S r   )r5   r   r   r|   rF   r   r]   )r_   rF   r   r   r   r@   r@   rA   re     s
   
r   )r1   r   r2   r3   r	   rG   )r_   rF   re   r@   r@   rA   (NumPyRandomGeneratorType_standard_cauchy  s   

r   paretoc                 C   r   )Nr   c                 S   r   r   )r   r]   r_   r   rF   r@   r@   rA   re     r   z-NumPyRandomGeneratorType_pareto.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r   r]   r_   r   rF   r   r   r   r@   r@   rA   re   $  r   r   r   r_   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_pareto  r   r   weibullc                 C   r   )Nr   c                 S   r   r   )r   r]   r   r@   r@   rA   re   4  r   z.NumPyRandomGeneratorType_weibull.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r   r]   r   r@   r@   rA   re   :  r   r   r   r   r@   r@   rA    NumPyRandomGeneratorType_weibull-  r   r   powerc                 C   r   )Nr   c                 S   r   r   )r   r]   r   r@   r@   rA   re   J  r   z,NumPyRandomGeneratorType_power.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r   r]   r   r@   r@   rA   re   P  r   r   r   r   r@   r@   rA   NumPyRandomGeneratorType_powerC  r   r   laplacec                 C   r   )	Nr   r   r   r   c                 S   r   r   )r    r]   r   r@   r@   rA   re   a  r   z.NumPyRandomGeneratorType_laplace.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r    r]   r   r@   r@   rA   re   g  r   r   r   r   r@   r@   rA    NumPyRandomGeneratorType_laplaceY  r   r   logisticc                 C   r   )	Nr   r   r   r   c                 S   r   r   )r!   r]   r   r@   r@   rA   re   x  r   z/NumPyRandomGeneratorType_logistic.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r!   r]   r   r@   r@   rA   re   ~  r   r   r   r   r@   r@   rA   !NumPyRandomGeneratorType_logisticp  r   r   	lognormalc                 C   r   )	Nmeansigmar   r   c                 S   r   r   )r"   r]   )r_   r   r   rF   r@   r@   rA   re     r   z0NumPyRandomGeneratorType_lognormal.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r"   r]   )r_   r   r   rF   r   r   r   r@   r@   rA   re     r   r   r   )r_   r   r   rF   re   r@   r@   rA   "NumPyRandomGeneratorType_lognormal  r   r   rayleighc                 C   r   )Nr   r   c                 S   r   r   )r#   r]   r   r@   r@   rA   re     r   z/NumPyRandomGeneratorType_rayleigh.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r#   r]   r   r@   r@   rA   re     r   r   r   r   r@   r@   rA   !NumPyRandomGeneratorType_rayleigh  r   r   
standard_tc                 C   r   )Nr   c                 S   r   r   )r$   r]   r   r@   r@   rA   re     r   z1NumPyRandomGeneratorType_standard_t.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r$   r]   r   r@   r@   rA   re     r   r   r   r   r@   r@   rA   #NumPyRandomGeneratorType_standard_t  r   r  waldc                 C   r   )Nr   r   c                 S   r   r   )r%   r]   )r_   r   r   rF   r@   r@   rA   re     r   z+NumPyRandomGeneratorType_wald.<locals>.implc                 S   r   r   )r5   r   r   r|   rF   r%   r]   )r_   r   r   rF   r   r   r   r@   r@   rA   re     r   r   r   )r_   r   r   rF   re   r@   r@   rA   NumPyRandomGeneratorType_wald  r   r  	geometricc                 C   r   )Npc                 S      t t| j|S r   )r5   rq   r&   r]   r_   r  rF   r@   r@   rA   re     r   z0NumPyRandomGeneratorType_geometric.<locals>.implc                 S   r   r   )r5   r   rq   r   r|   rF   r&   r]   r_   r  rF   r   r   r   r@   r@   rA   re     r   r   r   r_   r  rF   re   r@   r@   rA   "NumPyRandomGeneratorType_geometric  r   r  zipfc                 C   r   )Nr   c                 S   r  r   )r5   rq   r'   r]   r   r@   r@   rA   re     r   z+NumPyRandomGeneratorType_zipf.<locals>.implc                 S   r   r   )r5   r   rq   r   r|   rF   r'   r]   r   r@   r@   rA   re     r   r   r   r   r@   r@   rA   NumPyRandomGeneratorType_zipf  r   r  
triangularc                 C   s   t |tjtjttgd t |tjtjttgd t |tjtjttgd t|tjr-|j}t	|r8ddd}|S t
| ddd}|S )Nleftmoderightc                 S   s   t | j|||S r   )r(   r]   )r_   r  r  r  rF   r@   r@   rA   re     r   z1NumPyRandomGeneratorType_triangular.<locals>.implc                 S   s8   t |}|j}t|jD ]}t| j|||||< q|S r   )r5   r   r   r|   rF   r(   r]   )r_   r  r  r  rF   r   r   r   r@   r@   rA   re     s   

r   r   )r_   r  r  r  rF   re   r@   r@   rA   #NumPyRandomGeneratorType_triangular  s   

r  poissonc                 C   r   )Nlamc                 S   r  r   )r5   rq   r)   r]   )r_   r  rF   r@   r@   rA   re   -  r   z.NumPyRandomGeneratorType_poisson.<locals>.implc                 S   r   r   )r5   r   rq   r   r|   rF   r)   r]   )r_   r  rF   r   r   r   r@   r@   rA   re   3  r   r   r   )r_   r  rF   re   r@   r@   rA    NumPyRandomGeneratorType_poisson&  r   r  negative_binomialc                 C   r   )Nnr  c                 S      t t| j||S r   )r5   rq   r*   r]   r_   r  r  rF   r@   r@   rA   re   D     z8NumPyRandomGeneratorType_negative_binomial.<locals>.implc                 S   r   r   )r5   r   rq   r   r|   rF   r*   r]   )r_   r  r  rF   r   r   r   r@   r@   rA   re   J  r   r   r   r_   r  r  rF   re   r@   r@   rA   *NumPyRandomGeneratorType_negative_binomial<  r   r  noncentral_chisquarec                    s   t |tjtjttgd t |tjtjttgd t|tjr!|j}t	dd  t
|r4d fdd	}|S t| d fdd	}|S )	Nr   noncc                 S   s$   | dkrt d|dk rt dd S )Nr   zdf <= 0nonc < 0rl   )r   r  r@   r@   rA   check_arg_boundsZ  s
   zGNumPyRandomGeneratorType_noncentral_chisquare.<locals>.check_arg_boundsc                    s    || t t| j||S r   )r5   r9   r,   r]   )r_   r   r  rF   r!  r@   rA   re   b  s   

z;NumPyRandomGeneratorType_noncentral_chisquare.<locals>.implc                    sF    || t j|t jd}|j}t|jD ]}t| j||||< q|S r   )r5   r   r9   r   r|   rF   r,   r]   )r_   r   r  rF   r   r   r   r"  r@   rA   re   j  s   

r   rQ   r   r   rD   rh   r   r1   r2   r3   r   r	   rG   )r_   r   r  rF   re   r@   r"  rA   -NumPyRandomGeneratorType_noncentral_chisquareS  s   
r$  noncentral_fc                    s   t |tjtjttgd t |tjtjttgd t |tjtjttgd t|tjr-|j}t	dd  t
|r@d	 fdd	}|S t| d	 fdd	}|S )
Nr   r   r  c                 S   s4   | dkrt d|dkrt d|dk rt dd S )Nr   z
dfnum <= 0z
dfden <= 0r  r   )r   r   r  r@   r@   rA   r!  }  s   z?NumPyRandomGeneratorType_noncentral_f.<locals>.check_arg_boundsc                    s"    ||| t t| j|||S r   )r5   r9   r-   r]   )r_   r   r   r  rF   r"  r@   rA   re     s   
z3NumPyRandomGeneratorType_noncentral_f.<locals>.implc                    sJ    ||| t j|t jd}|j}t|jD ]}t| j|||||< q|S r   )r5   r   r9   r   r|   rF   r-   r]   )r_   r   r   r  rF   r   r   r   r"  r@   rA   re     s   
r   r#  )r_   r   r   r  rF   re   r@   r"  rA   %NumPyRandomGeneratorType_noncentral_fu  s   
r&  	logseriesc                    sj   t |tjtjttgd t|tjr|j}t	dd  t
|r(d fdd	}|S t| d fdd	}|S )Nr  c                 S   s&   | dk s| dkst | rtdd S )Nr   rZ   zp < 0, p >= 1 or p is NaN)r5   isnanrl   )r  r@   r@   rA   r!    s   z<NumPyRandomGeneratorType_logseries.<locals>.check_arg_boundsc                    s    | t t| j|S r   )r5   rq   r+   r]   r  r"  r@   rA   re     s   z0NumPyRandomGeneratorType_logseries.<locals>.implc                    sB    | t j|t jd}|j}t|jD ]
}t| j|||< q|S r   )r5   r   rq   r   r|   rF   r+   r]   r	  r"  r@   rA   re     s   r   r#  r
  r@   r"  rA   "NumPyRandomGeneratorType_logseries  s   
r)  binomialc                 C   r   )Nr  r  c                 S   r  r   )r5   rq   r.   r]   r  r@   r@   rA   re     r  z/NumPyRandomGeneratorType_binomial.<locals>.implc                 S   s6   t j|t jd}t |D ]}t| j||||< q|S r   )r5   r   rq   ndindexr.   r]   )r_   r  r  rF   r   r   r@   r@   rA   re     s   r   r   r  r@   r@   rA   !NumPyRandomGeneratorType_binomial  s   

r,  )r0   r   r   r   r   )`__doc__numpyr5   
numba.corer   numba.core.extendingr   r   numba.np.numpy_supportr   r   numba.np.random.generator_corer   r   r	   numba.core.errorsr
   numba.core.types.containersr   r   numba.np.random.distributionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   numba.np.randomr/   rB   rG   rQ   NumPyRandomGeneratorTyperq   rt   r   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r$  r&  r)  r,  r@   r@   r@   rA   <module>   s    



W



-
























!
$
