§
    ®˜ºh½  ã                   ó˜   — d dl mZmZ 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 )é    )ÚOptionalÚUnionN)ÚTensor)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚlogits_to_probsÚprobs_to_logits)Ú binary_cross_entropy_with_logits)Ú_NumberÚNumberÚ	Geometricc            	       ót  ‡ — e Zd ZdZej        ej        dœZej        Z		 	 	 dde
eeef                  de
eeef                  de
e         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|€J ‚t          |¦  «        \  | _        |�|n|}t	          |t
          ¦  «        rt          j        ¦   «         }n|€J ‚|                     ¦   «         }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.©r   r   zExpected parameter probs (z
 of shape z) of distribution z* to be positive but found invalid values:
)Ú
ValueErrorr   r   r   Ú
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
            €úe/var/www/html/services/rag-service/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àÐ%Ð%Ð%Ý*¨6Ñ2Ô2‰NˆTŒ[Ø#(Ð#4˜%˜%¸&ˆÝ�o¥wÑ/Ô/ð 	1Ýœ*™,œ,ˆKˆKà"Ð.Ð.Ð.Ø)×.Ò.Ñ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-   r2   zGeometric.expandU   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.mean`   s   € à�T”ZÑ #Ñ%Ð%r.   c                 ó4   — t          j        | j        ¦  «        S ©N)r   Ú
zeros_liker   r8   s    r-   ÚmodezGeometric.moded   s   € åÔ ¤
Ñ+Ô+Ð+r.   c                 ó,   — d| j         z  dz
  | j         z  S r6   r7   r8   s    r-   ÚvariancezGeometric.varianceh   s   € à�d”jÑ  3Ñ&¨$¬*Ñ4Ð4r.   c                 ó.   — t          | j        d¬¦  «        S ©NT)Ú	is_binary)r   r   r8   s    r-   r   zGeometric.logitsl   s   € å˜tœz°TÐ:Ñ:Ô:Ð:r.   c                 ó.   — t          | j        d¬¦  «        S rA   )r
   r   r8   s    r-   r   zGeometric.probsp   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   rE   ÚtinyÚno_gradÚ_CÚ_get_tracing_stateÚrandrF   Úclampr4   Úuniform_ÚlogÚlog1pÚfloor)r&   Úsample_shaper$   rK   Úus        r-   ÚsamplezGeometric.samplet   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   rH   )	r   Ú_validate_sampler   r   Úcloner   Úcontiguous_formatrS   rR   )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   r8   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   r   r   Úboolr   r2   Úpropertyr9   r=   r?   r	   r   r   r   r   rW   r]   ra   Ú__classcell__)r,   s   @r-   r   r      sÛ  ø€ € € € € ðð ð2 !,Ô 9À[ÔEUÐVÐV€OØÔ-€Gð 26Ø26Ø(,ð	!ð !à˜˜f f˜nÔ-Ô.ð!ð ˜˜v v˜~Ô.Ô/ð!ð   ”~ð	!ð
 
ð!ð !ð !ð !ð !ð !ðF	ð 	ð 	ð 	ð 	ð 	ð ð&�fð &ð &ð &ñ „Xð&ð ð,�fð ,ð ,ð ,ñ „Xð,ð ð5˜&ð 5ð 5ð 5ñ „Xð5ð ð;˜ð ;ð ;ð ;ñ „]ð;ð ð<�vð <ð <ð <ñ „]ð<ð #- %¤*¡,¤,ð 
=ð 
=ð 
=ð 
=ð;ð ;ð ;ð
ð 
ð 
ð 
ð 
ð 
ð 
r.   )Útypingr   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>ru      s  ðà "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ˆ-€ðw
ð w
ð w
ð w
ð w
�ñ w
ô w
ð w
ð w
ð w
r.   