§
    ŠŠtjà  ã                   óš   — 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 )é    N)Ú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        ú[/var/www/html/CA-Chatbot/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dz  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   r3   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   Úexpandr6   r2   r3   Ú_validate_args)r4   r5   Ú	_instanceÚnewr7   s       €r   r;   zDirichlet.expandK   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)r4   r?   r1   r   s       r   ÚrsamplezDirichlet.rsampleU   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)r4   Úvalues     r   Úlog_probzDirichlet.log_probZ   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   ©r4   s    r   ÚmeanzDirichlet.meanc   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)r/   )r   Úclampr   Úallr   ÚnnÚ
functionalÚone_hotÚargmaxr1   Úto)r4   Úconcentrationm1ÚmodeÚmasks       r   rX   zDirichlet.modeg   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)r4   Úcon0s     r   ÚvariancezDirichlet.varianceq   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   rE   )r   Úsizer   r   rH   Údigamma)r4   ÚkÚa0s      r   ÚentropyzDirichlet.entropyz   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   rL   s    r   Ú_natural_paramszDirichlet._natural_params„   s   € àÔ"Ð$Ð$r   c                 ó    — |                      ¦   «                              d¦  «        t          j         |                     d¦  «        ¦  «        z
  S )Nr   )rH   r   r   )r4   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   Úboolr3   r;   r   rC   rJ   ÚpropertyrM   rX   r^   rd   Útuplerf   rh   Ú__classcell__)r7   s   @r   r	   r	   &   sÂ  ø€ € € € € ðð ð" 	Ð0˜Ô0°Ô1EÀqÑIÔIð€Oð Ô!€GØ€Kð
 &*ðPð PàðPð ˜d‘{ðPð 
ð	Pð Pð Pð Pð Pð Pðð ð ð ð ð ð/ð / Eð /°6ð /ð /ð /ð /ð

ð 
ð 
ð ðE�fð Eð Eð Eñ „XðEð ð�fð ð ð ñ „Xðð ð
˜&ð 
ð 
ð 
ñ „Xð
ð
ð 
ð 
ð ð%  v¤ð %ð %ð %ñ „Xð%ð<ð <ð <ð <ð <ð <ð <r   )r   r   Útorch.autogradr   Útorch.autograd.functionr   Útorch.distributionsr   Útorch.distributions.exp_familyr   Útorch.typesr   Ú__all__r   r   r	   r(   r   r   ú<module>rz      s  ðð €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð ð ˆ-€ðBð Bð BðBð Bð Bð Bð B�ñ Bô Bð Bð d<ð d<ð d<ð d<ð d<Ð!ñ d<ô d<ð d<ð d<ð d<r   