§
    Ÿ²Åj  ã                   óf   — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 dgZ
d„ Z G d„ de¦  «        ZdS )é    N)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logitsÚBinomialc                 óh   — |                       d¬¦  «        | z   |                       d¬¦  «        z
  dz  S )Nr   )Úmin©Úmaxé   )Úclamp)Úxs    úMC:\Projects\Historical\venv\Lib\site-packages\torch/distributions/binomial.pyÚ_clamp_by_zeror      s/   € à�GŠG˜ˆG‰NŒN˜QÑ §¢¨Q ¡¤Ñ/°1Ñ4Ð4ó    c                   óV  ‡ — e Zd ZdZej        ej        ej        dœZdZ	dˆ fd„	Z
dˆ fd„	Zd„ Z ej        dd	¬
¦  «        d„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z ej        ¦   «         fd„Zd„ Zd„ Zdd„Zˆ xZS )r	   añ  
    Creates a Binomial distribution parameterized by :attr:`total_count` and
    either :attr:`probs` or :attr:`logits` (but not both). :attr:`total_count` must be
    broadcastable with :attr:`probs`/:attr:`logits`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Binomial(100, torch.tensor([0 , .2, .8, 1]))
        >>> x = m.sample()
        tensor([   0.,   22.,   71.,  100.])

        >>> m = Binomial(torch.tensor([[5.], [10.]]), torch.tensor([0.5, 0.8]))
        >>> x = m.sample()
        tensor([[ 4.,  5.],
                [ 7.,  6.]])

    Args:
        total_count (int or Tensor): number of Bernoulli trials
        probs (Tensor): Event probabilities
        logits (Tensor): Event log-odds
    )Útotal_countÚprobsÚlogitsTé   Nc                 óæ  •— |d u |d u k    rt          d¦  «        ‚|�Bt          ||¦  «        \  | _        | _        | j                             | j        ¦  «        | _        nAt          ||¦  «        \  | _        | _        | j                             | j        ¦  «        | _        |�| j        n| j        | _        | j                             ¦   «         }t          ¦   «          	                    ||¬¦  «         d S )Nz;Either `probs` or `logits` must be specified, but not both.©Úvalidate_args)
Ú
ValueErrorr   r   r   Útype_asr   Ú_paramÚsizeÚsuperÚ__init__)Úselfr   r   r   r   Úbatch_shapeÚ	__class__s         €r   r!   zBinomial.__init__3   sô   ø€ Ø�TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð Ðõ ˜k¨5Ñ1Ô1ñØÔ Ø”
à#Ô/×7Ò7¸¼
ÑCÔCˆDÔÐõ
 ˜k¨6Ñ2Ô2ñØÔ Ø”à#Ô/×7Ò7¸¼ÑDÔDˆDÔà$)Ð$5�d”j�j¸4¼;ˆŒØ”k×&Ò&Ñ(Ô(ˆÝ‰Œ×Ò˜°MÐÑBÔBÐBÐBÐBr   c                 óà  •— |                       t          |¦  «        }t          j        |¦  «        }| j                             |¦  «        |_        d| j        v r+| j                             |¦  «        |_        |j        |_        d| j        v r+| j	                             |¦  «        |_	        |j	        |_        t          t          |¦  «                             |d¬¦  «         | j        |_        |S )Nr   r   Fr   )Ú_get_checked_instancer	   ÚtorchÚSizer   ÚexpandÚ__dict__r   r   r   r    r!   Ú_validate_args)r"   r#   Ú	_instanceÚnewr$   s       €r   r)   zBinomial.expandI   sÌ   ø€ Ø×(Ò(­°9Ñ=Ô=ˆÝ”j Ñ-Ô-ˆØÔ*×1Ò1°+Ñ>Ô>ˆŒØ�d”mÐ#Ð#Øœ
×)Ò)¨+Ñ6Ô6ˆCŒIØœˆCŒJØ�t”}Ð$Ð$Øœ×+Ò+¨KÑ8Ô8ˆCŒJØœˆCŒJÝ�h˜ÑÔ×%Ò% kÀÐ%ÑGÔGÐGØ!Ô0ˆÔØˆ
r   c                 ó&   —  | j         j        |i |¤ŽS ©N)r   r-   )r"   ÚargsÚkwargss      r   Ú_newzBinomial._newW   s   € ØˆtŒ{Œ Ð/¨Ð/Ð/Ð/r   r   )Úis_discreteÚ	event_dimc                 ó6   — t          j        d| j        ¦  «        S )Nr   )r   Úinteger_intervalr   ©r"   s    r   ÚsupportzBinomial.supportZ   s   € åÔ+¨A¨tÔ/?Ñ@Ô@Ð@r   c                 ó    — | j         | j        z  S r/   ©r   r   r7   s    r   ÚmeanzBinomial.mean^   s   € àÔ $¤*Ñ,Ð,r   c                 ó|   — | j         dz   | j        z                       ¦   «                              | j         ¬¦  «        S )Nr   r   )r   r   Úfloorr   r7   s    r   ÚmodezBinomial.modeb   s7   € àÔ! AÑ%¨¬Ñ3×:Ò:Ñ<Ô<×BÒBÀtÔGWÐBÑXÔXÐXr   c                 ó6   — | j         | j        z  d| j        z
  z  S ©Nr   r:   r7   s    r   ÚvariancezBinomial.variancef   s   € àÔ $¤*Ñ,°°D´J±Ñ?Ð?r   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r   r   r7   s    r   r   zBinomial.logitsj   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r   c                 ó.   — t          | j        d¬¦  «        S rC   )r   r   r7   s    r   r   zBinomial.probsn   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r   c                 ó4   — | j                              ¦   «         S r/   )r   r   r7   s    r   Úparam_shapezBinomial.param_shaper   s   € àŒ{×ÒÑ!Ô!Ð!r   c                 ó  — |                       |¦  «        }t          j        ¦   «         5  t          j        | j                             |¦  «        | j                             |¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r/   )Ú_extended_shaper'   Úno_gradÚbinomialr   r)   r   )r"   Úsample_shapeÚshapes      r   ÚsamplezBinomial.samplev   sº   € Ø×$Ò$ \Ñ2Ô2ˆÝŒ]‰_Œ_ð 	ð 	Ý”>ØÔ ×'Ò'¨Ñ.Ô.°´
×0AÒ0AÀ%Ñ0HÔ0Hñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ©AA;Á;A?ÂA?c           	      óÐ  — | j         r|                      |¦  «         t          j        | j        dz   ¦  «        }t          j        |dz   ¦  «        }t          j        | j        |z
  dz   ¦  «        }| j        t          | j        ¦  «        z  | j        t          j        t          j        t          j	        | j        ¦  «         ¦  «        ¦  «        z  z   |z
  }|| j        z  |z
  |z
  |z
  S r@   )
r+   Ú_validate_sampler'   Úlgammar   r   r   Úlog1pÚexpÚabs)r"   ÚvalueÚlog_factorial_nÚlog_factorial_kÚlog_factorial_nmkÚnormalize_terms         r   Úlog_probzBinomial.log_prob}   sá   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ýœ, tÔ'7¸!Ñ';Ñ<Ô<ˆÝœ, u¨q¡yÑ1Ô1ˆÝ!œL¨Ô)9¸EÑ)AÀAÑ)EÑFÔFÐð Ô�~¨d¬kÑ:Ô:Ñ:ØÔ¥¤­U¬Y½¼	À$Ä+Ñ8NÔ8NÐ7NÑ-OÔ-OÑ!PÔ!PÑPñQàñð 	ð �D”KÑ /Ñ1Ð4EÑEÈÑVð	
r   c                 óL  — t          | j                             ¦   «         ¦  «        }| j                             ¦   «         |k    st	          d¦  «        ‚|                      |                      d¦  «        ¦  «        }t          j        |¦  «        |z   	                    d¦  «         S )Nz5Inhomogeneous total count not supported by `entropy`.Fr   )
Úintr   r   r   ÚNotImplementedErrorrZ   Úenumerate_supportr'   rS   Úsum)r"   r   rZ   s      r   ÚentropyzBinomial.entropy‘   s”   € Ý˜$Ô*×.Ò.Ñ0Ô0Ñ1Ô1ˆØÔ×#Ò#Ñ%Ô%¨Ò4Ð4Ý%ØGñô ð ð —=’= ×!7Ò!7¸Ñ!>Ô!>Ñ?Ô?ˆÝ”˜8Ñ$Ô$ xÑ/×4Ò4°QÑ7Ô7Ð7Ð7r   c                 óž  — t          | j                             ¦   «         ¦  «        }| j                             ¦   «         |k    st	          d¦  «        ‚t          j        d|z   | j        j        | j        j	        ¬¦  «        }| 
                    ddt          | j        ¦  «        z  z   ¦  «        }|r|                     d| j        z   ¦  «        }|S )Nz?Inhomogeneous total count not supported by `enumerate_support`.r   )ÚdtypeÚdevice)éÿÿÿÿ)r   )r\   r   r   r   r]   r'   Úaranger   rb   rc   ÚviewÚlenÚ_batch_shaper)   )r"   r)   r   Úvaluess       r   r^   zBinomial.enumerate_support›   sÈ   € Ý˜$Ô*×.Ò.Ñ0Ô0Ñ1Ô1ˆØÔ×#Ò#Ñ%Ô%¨Ò4Ð4Ý%ØQñô ð õ ”Ø�‰O 4¤;Ô#4¸T¼[Ô=Oð
ñ 
ô 
ˆð —’˜U T­C°Ô0AÑ,BÔ,BÑ%BÑBÑCÔCˆØð 	>Ø—]’] 5¨4Ô+<Ñ#<Ñ=Ô=ˆFØˆr   )r   NNNr/   )T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Únonnegative_integerÚunit_intervalÚrealÚarg_constraintsÚhas_enumerate_supportr!   r)   r2   Údependent_propertyr8   Úpropertyr;   r>   rA   r   r   r   rG   r'   r(   rN   rZ   r`   r^   Ú__classcell__)r$   s   @r   r	   r	      sÏ  ø€ € € € € ðð ð. #Ô6ØÔ*ØÔ"ðð €Oð
 !ÐðCð Cð Cð Cð Cð Cð,ð ð ð ð ð ð0ð 0ð 0ð $€[Ô#°ÀÐBÑBÔBðAð Añ CÔBðAð ð-ð -ñ „Xð-ð ðYð Yñ „XðYð ð@ð @ñ „Xð@ð ð;ð ;ñ „]ð;ð ð<ð <ñ „]ð<ð ð"ð "ñ „Xð"ð #- %¤*¡,¤,ð ð ð ð ð
ð 
ð 
ð(8ð 8ð 8ðð ð ð ð ð ð ð r   )r'   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r   r   Ú__all__r   r	   © r   r   ú<module>r{      sÄ   ðà €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ˆ,€ð5ð 5ð 5ð
Rð Rð Rð Rð Rˆ|ñ Rô Rð Rð Rð Rr   