ó
gbc           @   sƒ   d  d l  Td  d l m Z d d „ Z d e f d „  ƒ  YZ d „  Z d e f d	 „  ƒ  YZ d
 „  Z d „  Z	 d „  Z
 d „  Z d S(   iÿÿÿÿ(   t   *(   t   logi
   c   	      C   s„  t  ƒ  j } t  ƒ  j d 7_ t d ƒ } |  } t | t ƒ rH | } n. t | t ƒ rj t d | ƒ } n t | ƒ } t d ƒ } x$ | d k  r¨ | d } | | } q… Wx$ | | k rÏ | d } | | } q¬ W| d } t d ƒ } t d ƒ } xu | d k ri| t d ƒ } t d ƒ } x$ | | k rC| d 7} | | } q W| | | } | d } | d 8} qõ Wt  ƒ  j d 8_ | | S(   Ni   i
   s   %fi    i   (   t
   getcontextt   prect   Decimalt
   isinstancet   float(	   t   selft   baset   cur_prect   baseDect   retValuet   integer_partt   decimal_fract   partial_partt   digit(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   dec_log
   s<    	




t   Intervalc           B   s8   e  Z d  d „ Z d „  Z d „  Z d „  Z d „  Z RS(   i   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   _begint   _endt   _facteur(   R   t   begint   endt   facteur(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __init__0   s    		c         C   s   d |  j  |  j |  j f S(   Ns   [%d,%d] ^ %d(   R   R   R   (   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __str__5   s    c         C   s   d |  j  |  j |  j f S(   Ns   Interval(%d,%d,%d)(   R   R   R   (   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __repr__8   s    c         C   s   |  j  |  j t f S(   N(   R   R   t   True(   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   ;   s    c         C   s   |  j  |  j t f S(   N(   R   R   t   False(   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   >   s    (   t   __name__t
   __module__R   R   R   R   R   (    (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   /   s
   			c         C   sA   t  |  d | d ƒ } | d k r= t  | d |  d ƒ } n  | S(   Ni    i   (   t   cmp(   t   i1t   i2t   x(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   cmpbB   s    t   Productc           B   sV   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 d „ Z RS(	   c         C   s2   | d  k	 r | g |  _ n	 g  |  _ |  j ƒ  d  S(   N(   t   Nonet   prodt	   _simplify(   R   t   i(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   I   s    	c         C   s¸  g  } g  } |  j  r«x7 |  j  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ q W| j t ƒ d } t | ƒ } x± t d t | ƒ ƒ D]š } | | d | | d k r| | d | | d k r| | d | | d | | d | | d f | | <| d 8} q„ | d 7} | | | | <q„ W| d | !} d } d } xm | D]b \ } }	 }
 |
 s`d } n d } | rŒ| j t | | | | ƒ ƒ n  | d | } | |	 7} qBWn  | |  _  d  S(   Ni    i   i   (	   R&   t   appendR   R   t   sortR#   t   lent   xrangeR   (   R   t   bornesR&   R(   t   jt   rR   t   closet   bt   levelt   opent   debut(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR'   P   s6    	87
	 c         C   s<   t  ƒ  } t |  j ƒ | _ | j j | j ƒ | j ƒ  | S(   N(   R$   t   listR&   t   extendR'   (   R   t   pt   res(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __mul__z   s
    	
c         C   sF   t  ƒ  } g  | j D]" } t | j | j | j ƒ ^ q | _ |  | S(   N(   R$   R&   R   R   R   R   (   R   R7   t   npR"   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __div__   s    	5c         C   s   t  |  j ƒ S(   N(   t   strR&   (   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   †   s    c      	   C   sc   t  d ƒ } xP |  j D]E } | t  | j ƒ t d „  t | j | j d ƒ t  d ƒ ƒ 7} q W| S(   Ni    c         S   s   |  t  t | ƒ t d ƒ ƒ S(   Ni
   (   R   R   (   R"   t   y(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   <lambda>Œ   s    i   (   R   R&   R   t   reduceR,   R   R   (   R   R7   t   k(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR   ‰   s    Cc         C   sc   t  d ƒ } xP |  j D]E } | t d „  t | j | j d ƒ t  d ƒ ƒ t  | j ƒ 9} q W| S(   Ni   c         S   s   |  t  | ƒ S(   N(   R   (   R"   R=   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR>   ’   s    (   R   R&   R?   R,   R   R   R   (   R   R7   R@   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   product   s    Cc         C   s   | r |  j  ƒ  S|  j ƒ  Sd  S(   N(   R   RA   (   R   R   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   __call__•   s    
N(   R   R   R%   R   R'   R9   R;   R   R   RA   R   RB   (    (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR$   H   s   	*					c         C   s   t  t d |  ƒ ƒ S(   Ni   (   R$   R   (   t   n(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   factœ   s    c         C   s"   t  |  ƒ t  | ƒ t  |  | ƒ S(   N(   RD   (   RC   R7   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   cnpŸ   s    c         C   s/   t  | |  ƒ t  | | | |  ƒ t  | | ƒ S(   s  
    
    @param x: Variable aleatoire
    @type x:  int
    @param n: taille du tirage
    @type n:  int
    @param M: boule gagnante
    @type M:  int
    @param N: nombre total dans l'urne
    @type N:  int
    
    p(x)=  cnp(M,x)  * cnp(N-M,n-x)  / cnp(N,n)
    (   RE   (   R"   RC   t   Mt   N(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   hypergeometic¢   s    c         C   sÿ   t  d | | | ƒ } t | | ƒ } t | ƒ } |  | } t | |  ƒ t | | | |  ƒ }	 g  t | | d ƒ D]. }
 t | |
 ƒ t | | | |
 ƒ |	 ^ qt } g  t | | d ƒ D] }
 | |
 | ^ q¼ } t d „  t d „  | | ƒ ƒ } d | S(   s7  
    
    @param x: Variable aleatoire
    @type x:  int
    @param n: taille du tirage
    @type n:  int
    @param M: boule gagnante
    @type M:  int
    @param N: nombre total dans l'urne
    @type N:  int
    @param r: odd ratio
    @type r: float 
    
    p(x)=  cnp(M,x)  * cnp(N-M,n-x)  / cnp(N,n)
    i    i   c         S   s   |  | S(   N(    (   R"   R=   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR>   Ë   s    c         S   s   |  t  ƒ d | S(   Ni
   (   R   (   R(   R.   (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyR>   Ì   s    (   t   maxt   minR   RE   R,   R?   t   map(   R"   RC   RF   RG   R/   t   xmint   xmaxt   lrt   xlrt   numR=   t   dent   fdent   inverse(    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   nchypergeometique²   s    
$H.	N(   t   decimalt   mathR   R   t   objectR   R#   R$   RD   RE   RH   RT   (    (    (    sE   lib/python2.7/site-packages/obitools/statistics/noncentralhypergeo.pyt   <module>   s   
%	T			