§
    ®˜ºh=  ã                   ó¦   — d dl 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	 d dl
mZ d dlmZ d	gZd
„ Z G d„ de¦  «        Z G d„ d	e¦  «        ZdS )é    )ÚOptionalN)ÚTensor)ÚFunction)Úonce_differentiable)Úconstraints)ÚExponentialFamily)Ú_sizeÚ	Dirichletc                 ó¾   — |                      dd¦  «                             |¦  «        }t          j        | ||¦  «        }||| |z                        dd¦  «        z
  z  S ©NéÿÿÿÿT)ÚsumÚ	expand_asÚtorchÚ_dirichlet_grad)ÚxÚconcentrationÚgrad_outputÚtotalÚgrads        úe/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/distributions/dirichlet.pyÚ_Dirichlet_backwardr      s]   € Ø×Ò˜b $Ñ'Ô'×1Ò1°-Ñ@Ô@€EÝÔ   M°5Ñ9Ô9€DØ�; ! k¡/×!6Ò!6°r¸4Ñ!@Ô!@Ñ@ÑAÐAó    c                   óJ   — e Zd Zed„ ¦   «         Zeed„ ¦   «         ¦   «         ZdS )Ú
_Dirichletc                 óZ   — t          j        |¦  «        }|                      ||¦  «         |S ©N)r   Ú_sample_dirichletÚsave_for_backward)Úctxr   r   s      r   Úforwardz_Dirichlet.forward   s-   € åÔ# MÑ2Ô2ˆØ×Ò˜a Ñ/Ô/Ð/Øˆr   c                 ó8   — | j         \  }}t          |||¦  «        S r   )Úsaved_tensorsr   )r    r   r   r   s       r   Úbackwardz_Dirichlet.backward   s#   € ð Ô,Ñˆˆ=Ý" 1 m°[ÑAÔAÐAr   N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr!   r   r$   © r   r   r   r      sX   € € € € € Øðð ñ „\ðð
 ØðBð Bñ Ôñ „\ðBð Bð Br   r   c                   ó.  ‡ — e Zd ZdZd ej        ej        d¦  «        iZej        Z	dZ
	 ddedee         ddfˆ fd„Zdˆ fd	„	Zddedefd„Zd„ Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zd„ Zedee         fd„¦   «         Zd„ Zˆ xZS )r
   aÏ  
    Creates a Dirichlet distribution parameterized by concentration :attr:`concentration`.

    Example::

        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = Dirichlet(torch.tensor([0.5, 0.5]))
        >>> m.sample()  # Dirichlet distributed with concentration [0.5, 0.5]
        tensor([ 0.1046,  0.8954])

    Args:
        concentration (Tensor): concentration parameter of the distribution
            (often referred to as alpha)
    r   é   TNÚvalidate_argsÚreturnc                 óè   •— |                      ¦   «         dk     rt          d¦  «        ‚|| _        |j        d d…         |j        dd …         }}t	          ¦   «                              |||¬¦  «         d S )Nr+   z;`concentration` parameter must be at least one-dimensional.r   ©r,   )ÚdimÚ
ValueErrorr   ÚshapeÚsuperÚ__init__)Úselfr   r,   Úbatch_shapeÚevent_shapeÚ	__class__s        €r   r4   zDirichlet.__init__;   s„   ø€ ð
 ×ÒÑÔ Ò"Ð"ÝØMñô ð ð +ˆÔØ#0Ô#6°s¸°sÔ#;¸]Ô=PÐQSÐQTÐQTÔ=U�[ˆÝ‰Œ×Ò˜ kÀÐÑOÔOÐOÐOÐOr   c                 ó,  •— |                       t          |¦  «        }t          j        |¦  «        }| j                             || j        z   ¦  «        |_        t          t          |¦  «                             || j        d¬¦  «         | j	        |_	        |S )NFr/   )
Ú_get_checked_instancer
   r   ÚSizer   Úexpandr7   r3   r4   Ú_validate_args)r5   r6   Ú	_instanceÚnewr8   s       €r   r<   zDirichlet.expandH   s‹   ø€ Ø×(Ò(­°IÑ>Ô>ˆÝ”j Ñ-Ô-ˆØ Ô.×5Ò5°kÀDÔDTÑ6TÑUÔUˆÔÝ�i˜ÑÔ×&Ò&Ø˜Ô)¸ð 	'ñ 	
ô 	
ð 	
ð "Ô0ˆÔØˆ
r   r)   Úsample_shapec                 ó”   — |                       |¦  «        }| j                             |¦  «        }t                               |¦  «        S r   )Ú_extended_shaper   r<   r   Úapply)r5   r@   r2   r   s       r   ÚrsamplezDirichlet.rsampleR   s?   € Ø×$Ò$ \Ñ2Ô2ˆØÔ*×1Ò1°%Ñ8Ô8ˆÝ×Ò Ñ.Ô.Ð.r   c                 óN  — | j         r|                      |¦  «         t          j        | j        dz
  |¦  «                             d¦  «        t          j        | j                             d¦  «        ¦  «        z   t          j        | j        ¦  «                             d¦  «        z
  S )Nç      ð?r   )r=   Ú_validate_sampler   Úxlogyr   r   Úlgamma)r5   Úvalues     r   Úlog_probzDirichlet.log_probW   s‘   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(åŒK˜Ô*¨SÑ0°%Ñ8Ô8×<Ò<¸RÑ@Ô@ÝŒl˜4Ô-×1Ò1°"Ñ5Ô5Ñ6Ô6ñ7åŒl˜4Ô-Ñ.Ô.×2Ò2°2Ñ6Ô6ñ7ð	
r   c                 óH   — | j         | j                              dd¦  «        z  S r   )r   r   ©r5   s    r   ÚmeanzDirichlet.mean`   s#   € àÔ! DÔ$6×$:Ò$:¸2¸tÑ$DÔ$DÑDÐDr   c                 ór  — | j         dz
                       d¬¦  «        }||                     dd¦  «        z  }| j         dk                          d¬¦  «        }t          j        j                             ||                              d¬¦  «        |j	        d         ¦  «         
                    |¦  «        ||<   |S )Nr+   g        )Úminr   T)r0   )r   Úclampr   Úallr   ÚnnÚ
functionalÚone_hotÚargmaxr2   Úto)r5   Úconcentrationm1ÚmodeÚmasks       r   rY   zDirichlet.moded   s­   € àÔ-°Ñ1×8Ò8¸SÐ8ÑAÔAˆØ ×!4Ò!4°R¸Ñ!>Ô!>Ñ>ˆØÔ" QÒ&×+Ò+°Ð+Ñ3Ô3ˆÝ”XÔ(×0Ò0Ø�ŒJ×Ò "ÐÑ%Ô% Ô'<¸RÔ'@ñ
ô 
ç
Š"ˆT‰(Œ(ð 	ˆT‰
ð ˆr   c                 ó”   — | j                              dd¦  «        }| j         || j         z
  z  |                     d¦  «        |dz   z  z  S )Nr   Té   r+   )r   r   Úpow)r5   Úcon0s     r   ÚvariancezDirichlet.variancen   sP   € àÔ!×%Ò% b¨$Ñ/Ô/ˆàÔØ�dÔ(Ñ(ñ*à�xŠx˜‰{Œ{˜d Q™hÑ'ñ)ð	
r   c                 ó’  — | j                              d¦  «        }| j                              d¦  «        }t          j        | j         ¦  «                             d¦  «        t          j        |¦  «        z
  ||z
  t          j        |¦  «        z  z
  | j         dz
  t          j        | j         ¦  «        z                       d¦  «        z
  S )Nr   rF   )r   Úsizer   r   rI   Údigamma)r5   ÚkÚa0s      r   ÚentropyzDirichlet.entropyw   s²   € ØÔ×#Ò# BÑ'Ô'ˆØÔ×#Ò# BÑ'Ô'ˆåŒL˜Ô+Ñ,Ô,×0Ò0°Ñ4Ô4ÝŒl˜2ÑÔñà�2‰v�œ rÑ*Ô*Ñ*ñ+ð Ô" SÑ(­E¬M¸$Ô:LÑ,MÔ,MÑM×RÒRÐSUÑVÔVñWð	
r   c                 ó   — | j         fS r   )r   rM   s    r   Ú_natural_paramszDirichlet._natural_params�   s   € àÔ"Ð$Ð$r   c                 ó    — |                      ¦   «                              d¦  «        t          j         |                     d¦  «        ¦  «        z
  S )Nr   )rI   r   r   )r5   r   s     r   Ú_log_normalizerzDirichlet._log_normalizer…   s5   € Ø�xŠx‰zŒz�~Š~˜bÑ!Ô!¥E¤L°·²°r±´Ñ$;Ô$;Ñ;Ð;r   r   )r)   )r%   r&   r'   Ú__doc__r   ÚindependentÚpositiveÚarg_constraintsÚsimplexÚsupportÚhas_rsampler   r   Úboolr4   r<   r	   rD   rK   ÚpropertyrN   rY   r_   re   Útuplerg   ri   Ú__classcell__)r8   s   @r   r
   r
   %   sÂ  ø€ € € € € ðð ð  	Ð0˜Ô0°Ô1EÀqÑIÔIð€Oð Ô!€GØ€Kð
 )-ðPð PàðPð   ”~ðPð 
ð	Pð Pð Pð Pð Pð Pðð ð ð ð ð ð/ð / Eð /°6ð /ð /ð /ð /ð

ð 
ð 
ð ðE�fð Eð Eð Eñ „XðEð ð�fð ð ð ñ „Xðð ð
˜&ð 
ð 
ð 
ñ „Xð
ð
ð 
ð 
ð ð%  v¤ð %ð %ð %ñ „Xð%ð<ð <ð <ð <ð <ð <ð <r   )Útypingr   r   r   Útorch.autogradr   Útorch.autograd.functionr   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.typesr	   Ú__all__r   r   r
   r)   r   r   ú<module>r|      s  ðà Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð ð ˆ-€ðBð Bð BðBð Bð Bð Bð B�ñ Bô Bð Bða<ð a<ð a<ð a<ð a<Ð!ñ a<ô a<ð a<ð a<ð a<r   