§
    ŠŠtje  ã                   óˆ   — d dl Z d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ dgZ G d	„ de¦  «        ZdS )
é    N)ÚTensor)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_NumberÚNumberÚ	Geometricc            	       óN  ‡ — e Zd ZdZej        ej        dœZej        Z		 	 	 dde
ez  dz  de
ez  dz  dedz  ddfˆ fd„Zdˆ fd	„	Zede
fd
„¦   «         Zede
fd„¦   «         Zede
fd„¦   «         Zede
fd„¦   «         Zede
fd„¦   «         Z ej        ¦   «         fd„Zd„ Zd„ Zˆ xZS )r   a€  
    Creates a Geometric distribution parameterized by :attr:`probs`,
    where :attr:`probs` is the probability of success of Bernoulli trials.

    .. math::

        P(X=k) = (1-p)^{k} p, k = 0, 1, ...

    .. note::
        :func:`torch.distributions.geometric.Geometric` :math:`(k+1)`-th trial is the first success
        hence draws samples in :math:`\{0, 1, \ldots\}`, whereas
        :func:`torch.Tensor.geometric_` `k`-th trial is the first success hence draws samples in :math:`\{1, 2, \ldots\}`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Geometric(torch.tensor([0.3]))
        >>> m.sample()  # underlying Bernoulli has 30% chance 1; 70% chance 0
        tensor([ 2.])

    Args:
        probs (Number, Tensor): the probability of sampling `1`. Must be in range (0, 1]
        logits (Number, Tensor): the log-odds of sampling `1`.
    )ÚprobsÚlogitsNr   r   Úvalidate_argsÚreturnc           
      ó¸  •— |d u |d u k    rt          d¦  «        ‚|�t          |¦  «        \  | _        n'|€t          d¦  «        ‚t          |¦  «        \  | _        |�|n|}t          |t          ¦  «        rt          j        ¦   «         }n%|€t          d¦  «        ‚| 	                    ¦   «         }t          ¦   «                              ||¬¦  «         | j        r}|�}| j        }|dk    }|                     ¦   «         s^|j        |          }t          dt          |¦  «        j        › dt#          |j        ¦  «        › dt'          | ¦  «        › d	|› �¦  «        ‚d S d S d S )
Nz;Either `probs` or `logits` must be specified, but not both.zlogits is unexpectedly Nonez$probs_or_logits is unexpectedly None©r   r   zExpected parameter probs (z
 of shape z) of distribution z* to be positive but found invalid values:
)Ú
ValueErrorr   r   ÚAssertionErrorr   Ú
isinstancer   ÚtorchÚSizeÚsizeÚsuperÚ__init__Ú_validate_argsÚallÚdataÚtypeÚ__name__ÚtupleÚshapeÚrepr)
Úselfr   r   r   Úprobs_or_logitsÚbatch_shapeÚvalueÚvalidÚinvalid_valueÚ	__class__s
            €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributions/geometric.pyr   zGeometric.__init__2   s¦  ø€ ð �TˆM˜v¨˜~Ò.Ð.ÝØMñô ð ð Ðå)¨%Ñ0Ô0‰MˆTŒZˆZàˆ~Ý$Ð%BÑCÔCÐCå*¨6Ñ2Ô2‰NˆTŒ[Ø#(Ð#4˜%˜%¸&ˆÝ�o¥wÑ/Ô/ð 	1Ýœ*™,œ,ˆKˆKàÐ&Ý$Ð%KÑLÔLÐLØ)×.Ò.Ñ0Ô0ˆKÝ‰Œ×Ò˜°MÐÑBÔBÐBØÔð 	 5Ð#4à”JˆEØ˜A’IˆEØ—9’9‘;”;ð Ø %¤
¨E¨6Ô 2�Ý ðQÝ˜U™œÔ,ðQð QÝ8=¸e¼kÑ8JÔ8JðQð Qå'+¨D¡z¤zðQð Qð BOðQð Qñô ð ð	ð 	Ð#4Ð#4ðð ó    c                 ór  •— |                       t          |¦  «        }t          j        |¦  «        }d| j        v r| j                             |¦  «        |_        d| j        v r| j                             |¦  «        |_        t          t          |¦  «         	                    |d¬¦  «         | j
        |_
        |S )Nr   r   Fr   )Ú_get_checked_instancer   r   r   Ú__dict__r   Úexpandr   r   r   r   )r%   r'   Ú	_instanceÚnewr+   s       €r,   r1   zGeometric.expandY   s¢   ø€ Ø×(Ò(­°IÑ>Ô>ˆÝ”j Ñ-Ô-ˆØ�d”mÐ#Ð#Øœ
×)Ò)¨+Ñ6Ô6ˆCŒIØ�t”}Ð$Ð$Øœ×+Ò+¨KÑ8Ô8ˆCŒJÝ�i˜ÑÔ×&Ò& {À%Ð&ÑHÔHÐHØ!Ô0ˆÔØˆ
r-   c                 ó   — d| j         z  dz
  S ©Ng      ð?©r   ©r%   s    r,   ÚmeanzGeometric.meand   s   € à�T”ZÑ #Ñ%Ð%r-   c                 ó4   — t          j        | j        ¦  «        S ©N)r   Ú
zeros_liker   r7   s    r,   ÚmodezGeometric.modeh   s   € åÔ ¤
Ñ+Ô+Ð+r-   c                 ó,   — d| j         z  dz
  | j         z  S r5   r6   r7   s    r,   ÚvariancezGeometric.variancel   s   € à�d”jÑ  3Ñ&¨$¬*Ñ4Ð4r-   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r	   r   r7   s    r,   r   zGeometric.logitsp   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r-   c                 ó.   — t          | j        d¬¦  «        S r@   )r   r   r7   s    r,   r   zGeometric.probst   s   € å˜tœ{°dÐ;Ñ;Ô;Ð;r-   c                 ój  — |                       |¦  «        }t          j        | j        j        ¦  «        j        }t          j        ¦   «         5  t          j                             ¦   «         rBt          j	        || j        j        | j        j
        ¬¦  «        }|                     |¬¦  «        }n.| j                             |¦  «                             |d¦  «        }|                     ¦   «         | j                              ¦   «         z                       ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )N)ÚdtypeÚdevice)Úminé   )Ú_extended_shaper   Úfinfor   rD   ÚtinyÚno_gradÚ_CÚ_get_tracing_stateÚrandrE   Úclampr3   Úuniform_ÚlogÚlog1pÚfloor)r%   Úsample_shaper#   rJ   Úus        r,   ÚsamplezGeometric.samplex   s6  € Ø×$Ò$ \Ñ2Ô2ˆÝŒ{˜4œ:Ô+Ñ,Ô,Ô1ˆÝŒ]‰_Œ_ð 	=ð 	=ÝŒx×*Ò*Ñ,Ô,ð <å”J˜u¨D¬JÔ,<ÀTÄZÔEVÐWÑWÔW�Ø—G’G �GÑ%Ô%��à”J—N’N 5Ñ)Ô)×2Ò2°4¸Ñ;Ô;�Ø—E’E‘G”G ¤
˜{×1Ò1Ñ3Ô3Ñ3×:Ò:Ñ<Ô<ð	=ð 	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   ÁCD(Ä(D,Ä/D,c                 ó.  — | j         r|                      |¦  «         t          || j        ¦  «        \  }}|                     t
          j        ¬¦  «        }d||dk    |dk    z  <   ||                      ¦   «         z  | j                             ¦   «         z   S )N)Úmemory_formatr   rG   )	r   Ú_validate_sampler   r   Úcloner   Úcontiguous_formatrR   rQ   )r%   r(   r   s      r,   Úlog_probzGeometric.log_prob„   s‹   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(Ý$ U¨D¬JÑ7Ô7‰ˆˆuØ—’­%Ô*A�ÑBÔBˆØ-.ˆˆu˜Šz˜e qšjÑ)Ñ*Ø˜˜—~’~Ñ'Ô'Ñ'¨$¬*¯.ª.Ñ*:Ô*:Ñ:Ð:r-   c                 óJ   — t          | j        | j        d¬¦  «        | j        z  S )NÚnone)Ú	reduction)r
   r   r   r7   s    r,   ÚentropyzGeometric.entropyŒ   s(   € å,¨T¬[¸$¼*ÐPVÐWÑWÔWØŒjñð	
r-   )NNNr:   )r!   Ú
__module__Ú__qualname__Ú__doc__r   Úunit_intervalÚrealÚarg_constraintsÚnonnegative_integerÚsupportr   r   Úboolr   r1   Úpropertyr8   r<   r>   r   r   r   r   r   rV   r\   r`   Ú__classcell__)r+   s   @r,   r   r      sÑ  ø€ € € € € ðð ð4 !,Ô 9À[ÔEUÐVÐV€OØÔ-€Gð )-Ø)-Ø%)ð	%ð %à˜‰ Ñ%ð%ð ˜‘ $Ñ&ð%ð ˜d‘{ð	%ð
 
ð%ð %ð %ð %ð %ð %ðN	ð 	ð 	ð 	ð 	ð 	ð ð&�fð &ð &ð &ñ „Xð&ð ð,�fð ,ð ,ð ,ñ „Xð,ð ð5˜&ð 5ð 5ð 5ñ „Xð5ð ð;˜ð ;ð ;ð ;ñ „]ð;ð ð<�vð <ð <ð <ñ „]ð<ð #- %¤*¡,¤,ð 
=ð 
=ð 
=ð 
=ð;ð ;ð ;ð
ð 
ð 
ð 
ð 
ð 
ð 
r-   )r   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   r   r	   Útorch.nn.functionalr
   Útorch.typesr   r   Ú__all__r   © r-   r,   ú<module>rs      sö   ðð €€€Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ˆ-€ð|
ð |
ð |
ð |
ð |
�ñ |
ô |
ð |
ð |
ð |
r-   