§
    ŠŠtj¼  ã                   ó¨   — d dl mZmZ d dlZd dlmZ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 ed	e	¬
¦  «        Z G d„ de	ee         ¦  «        ZdS )é    )ÚGenericÚTypeVarN)ÚSizeÚTensor)Úconstraints)ÚDistribution)Ú_sum_rightmost)Ú_sizeÚIndependentÚD)Úboundc            	       óœ  ‡ — e Zd ZU dZi Zeeej        f         e	d<   e
e	d<   	 dde
de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j        d„ ¦   «         Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Z ej        ¦   «         fdefd„Z ej        ¦   «         fdedefd„Zd„ Zd„ Zdd„Zd„ Z ˆ xZ!S )r   a©  
    Reinterprets some of the batch dims of a distribution as event dims.

    This is mainly useful for changing the shape of the result of
    :meth:`log_prob`. For example to create a diagonal Normal distribution with
    the same shape as a Multivariate Normal distribution (so they are
    interchangeable), you can::

        >>> from torch.distributions.multivariate_normal import MultivariateNormal
        >>> from torch.distributions.normal import Normal
        >>> loc = torch.zeros(3)
        >>> scale = torch.ones(3)
        >>> mvn = MultivariateNormal(loc, scale_tril=torch.diag(scale))
        >>> [mvn.batch_shape, mvn.event_shape]
        [torch.Size([]), torch.Size([3])]
        >>> normal = Normal(loc, scale)
        >>> [normal.batch_shape, normal.event_shape]
        [torch.Size([3]), torch.Size([])]
        >>> diagn = Independent(normal, 1)
        >>> [diagn.batch_shape, diagn.event_shape]
        [torch.Size([]), torch.Size([3])]

    Args:
        base_distribution (torch.distributions.distribution.Distribution): a
            base distribution
        reinterpreted_batch_ndims (int): the number of batch dims to
            reinterpret as event dims
    Úarg_constraintsÚ	base_distNÚbase_distributionÚreinterpreted_batch_ndimsÚvalidate_argsÚreturnc                 óž  •— |t          |j        ¦  «        k    r't          d|› dt          |j        ¦  «        › �¦  «        ‚|j        |j        z   }|t          |j        ¦  «        z   }|d t          |¦  «        |z
  …         }|t          |¦  «        |z
  d …         }|| _        || _        t          ¦   «                              |||¬¦  «         d S )NzQExpected reinterpreted_batch_ndims <= len(base_distribution.batch_shape), actual z vs ©r   )ÚlenÚbatch_shapeÚ
ValueErrorÚevent_shaper   r   ÚsuperÚ__init__)	Úselfr   r   r   ÚshapeÚ	event_dimr   r   Ú	__class__s	           €ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributions/independent.pyr   zIndependent.__init__3   sñ   ø€ ð %¥sÐ+<Ô+HÑ'IÔ'IÒIÐIÝð^Ø3ð^ð ^Ý9<Ð=NÔ=ZÑ9[Ô9[ð^ð ^ñô ð ð (Ô3Ð6GÔ6SÑSˆØ2µSÐ9JÔ9VÑ5WÔ5WÑWˆ	ØÐ4�c %™jœj¨9Ñ4Ð4Ô5ˆØ�C ™JœJ¨Ñ2Ð4Ð4Ô5ˆØ*ˆŒØ)BˆÔ&å‰Œ×Ò˜ kÀÐÑOÔOÐOÐOÐOó    c                 ó^  •— |                       t          |¦  «        }t          j        |¦  «        }| j                             || j        d | j        …         z   ¦  «        |_        | j        |_        t          t          |¦  «         	                    || j        d¬¦  «         | j
        |_
        |S )NFr   )Ú_get_checked_instancer   Útorchr   r   Úexpandr   r   r   r   Ú_validate_args)r   r   Ú	_instanceÚnewr    s       €r!   r&   zIndependent.expandG   s©   ø€ Ø×(Ò(­°iÑ@Ô@ˆÝ”j Ñ-Ô-ˆØœ×-Ò-Ø˜$Ô*Ð+K¨TÔ-KÐ+KÔLÑLñ
ô 
ˆŒð )-Ô(FˆÔ%Ý�k˜3ÑÔ×(Ò(Ø˜Ô)¸ð 	)ñ 	
ô 	
ð 	
ð "Ô0ˆÔØˆ
r"   c                 ó   — | j         j        S ©N)r   Úhas_rsample©r   s    r!   r,   zIndependent.has_rsampleT   s   € àŒ~Ô)Ð)r"   c                 ó4   — | j         dk    rdS | j        j        S )Nr   F)r   r   Úhas_enumerate_supportr-   s    r!   r/   z!Independent.has_enumerate_supportX   s    € àÔ)¨AÒ-Ð-Ø�5ØŒ~Ô3Ð3r"   c                 ó`   — | j         j        }| j        rt          j        || j        ¦  «        }|S r+   )r   Úsupportr   r   Úindependent)r   Úresults     r!   r1   zIndependent.support^   s4   € ð ”Ô'ˆØÔ)ð 	UÝ Ô,¨V°TÔ5SÑTÔTˆFØˆr"   c                 ó   — | j         j        S r+   )r   Úmeanr-   s    r!   r5   zIndependent.meanf   ó   € àŒ~Ô"Ð"r"   c                 ó   — | j         j        S r+   )r   Úmoder-   s    r!   r8   zIndependent.modej   r6   r"   c                 ó   — | j         j        S r+   )r   Úvariancer-   s    r!   r:   zIndependent.variancen   s   € àŒ~Ô&Ð&r"   c                 ó6   — | j                              |¦  «        S r+   )r   Úsample©r   Úsample_shapes     r!   r<   zIndependent.sampler   s   € ØŒ~×$Ò$ \Ñ2Ô2Ð2r"   r>   c                 ó6   — | j                              |¦  «        S r+   )r   Úrsampler=   s     r!   r@   zIndependent.rsampleu   s   € ØŒ~×%Ò% lÑ3Ô3Ð3r"   c                 ó`   — | j                              |¦  «        }t          || j        ¦  «        S r+   )r   Úlog_probr	   r   )r   ÚvaluerB   s      r!   rB   zIndependent.log_probx   s*   € Ø”>×*Ò*¨5Ñ1Ô1ˆÝ˜h¨Ô(FÑGÔGÐGr"   c                 ó^   — | j                              ¦   «         }t          || j        ¦  «        S r+   )r   Úentropyr	   r   )r   rE   s     r!   rE   zIndependent.entropy|   s(   € Ø”.×(Ò(Ñ*Ô*ˆÝ˜g tÔ'EÑFÔFÐFr"   Tc                 ól   — | j         dk    rt          d¦  «        ‚| j                             |¬¦  «        S )Nr   z5Enumeration over cartesian product is not implemented)r&   )r   ÚNotImplementedErrorr   Úenumerate_support)r   r&   s     r!   rH   zIndependent.enumerate_support€   s@   € ØÔ)¨AÒ-Ð-Ý%ØGñô ð ð Œ~×/Ò/°vÐ/Ñ>Ô>Ð>r"   c                 óB   — | j         j        d| j        › d| j        › d�z   S )Nú(z, ú))r    Ú__name__r   r   r-   s    r!   Ú__repr__zIndependent.__repr__‡   s0   € àŒNÔ#ØE�$”.ÐEÐE DÔ$BÐEÐEÐEñFð	
r"   r+   )T)"rL   Ú
__module__Ú__qualname__Ú__doc__r   ÚdictÚstrr   Ú
ConstraintÚ__annotations__r   ÚintÚboolr   r&   Úpropertyr,   r/   Údependent_propertyr1   r   r5   r8   r:   r%   r   r<   r
   r@   rB   rE   rH   rM   Ú__classcell__)r    s   @r!   r   r      sX  ø€ € € € € € ðð ð: :<€O�T˜#˜{Ô5Ð5Ô6Ð;Ð;Ñ;Ø€L€L�Lð &*ð	Pð PàðPð $'ðPð ˜d‘{ð	Pð
 
ðPð Pð Pð Pð Pð Pð(ð ð ð ð ð ð ð*˜Tð *ð *ð *ñ „Xð*ð ð4 tð 4ð 4ð 4ñ „Xð4ð
 Ô#ðð ñ $Ô#ðð ð#�fð #ð #ð #ñ „Xð#ð ð#�fð #ð #ð #ñ „Xð#ð ð'˜&ð 'ð 'ð 'ñ „Xð'ð #- %¤*¡,¤,ð 3ð 3°6ð 3ð 3ð 3ð 3ð -7¨E¬J©L¬Lð 4ð 4 Eð 4¸Vð 4ð 4ð 4ð 4ðHð Hð HðGð Gð Gð?ð ?ð ?ð ?ð
ð 
ð 
ð 
ð 
ð 
ð 
r"   )Útypingr   r   r%   r   r   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr	   Útorch.typesr
   Ú__all__r   r   © r"   r!   ú<module>ra      sé   ðà #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð ð ˆ/€ð €GˆC�|Ð$Ñ$Ô$€ðy
ð y
ð y
ð y
ð y
�, ¨¤
ñ y
ô y
ð y
ð y
ð y
r"   