§
    ®˜ºhv  ã                   ó¬   — d dl mZ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ÚOptionalÚ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e         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	           €úg/var/www/html/services/rag-service/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.expandF   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_rsampleS   s   € àŒ~Ô)Ð)r#   c                 ó4   — | j         dk    rdS | j        j        S )Nr   F)r   r   Úhas_enumerate_supportr.   s    r"   r0   z!Independent.has_enumerate_supportW   s    € àÔ)¨AÒ-Ð-Ø�5ØŒ~Ô3Ð3r#   c                 ó`   — | j         j        }| j        rt          j        || j        ¦  «        }|S r,   )r   Úsupportr   r   Úindependent)r   Úresults     r"   r2   zIndependent.support]   s2   € à”Ô'ˆØÔ)ð 	UÝ Ô,¨V°TÔ5SÑTÔTˆFØˆr#   c                 ó   — | j         j        S r,   )r   Úmeanr.   s    r"   r6   zIndependent.meand   ó   € àŒ~Ô"Ð"r#   c                 ó   — | j         j        S r,   )r   Úmoder.   s    r"   r9   zIndependent.modeh   r7   r#   c                 ó   — | j         j        S r,   )r   Úvariancer.   s    r"   r;   zIndependent.variancel   s   € àŒ~Ô&Ð&r#   c                 ó6   — | j                              |¦  «        S r,   )r   Úsample©r   Úsample_shapes     r"   r=   zIndependent.samplep   s   € ØŒ~×$Ò$ \Ñ2Ô2Ð2r#   r?   c                 ó6   — | j                              |¦  «        S r,   )r   Úrsampler>   s     r"   rA   zIndependent.rsamples   s   € ØŒ~×%Ò% lÑ3Ô3Ð3r#   c                 ó`   — | j                              |¦  «        }t          || j        ¦  «        S r,   )r   Úlog_probr
   r   )r   ÚvaluerC   s      r"   rC   zIndependent.log_probv   s*   € Ø”>×*Ò*¨5Ñ1Ô1ˆÝ˜h¨Ô(FÑGÔGÐGr#   c                 ó^   — | j                              ¦   «         }t          || j        ¦  «        S r,   )r   Úentropyr
   r   )r   rF   s     r"   rF   zIndependent.entropyz   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"   rI   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)#rM   Ú
__module__Ú__qualname__Ú__doc__r   ÚdictÚstrr   Ú
ConstraintÚ__annotations__r   Úintr   Úboolr   r'   Úpropertyr-   r0   Údependent_propertyr2   r   r6   r9   r;   r&   r   r=   r   rA   rC   rF   rI   rN   Ú__classcell__)r!   s   @r"   r   r      sX  ø€ € € € € € ðð ð: :<€O�T˜#˜{Ô5Ð5Ô6Ð;Ð;Ñ;Ø€L€L�Lð )-ð	Pð PàðPð $'ðPð   ”~ð	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   r   Útorch.distributionsr   Ú torch.distributions.distributionr	   Útorch.distributions.utilsr
   Útorch.typesr   Ú__all__r   r   © r#   r"   ú<module>rb      sï   ðà -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð ð ˆ/€ð €GˆC�|Ð$Ñ$Ô$€ðw
ð w
ð w
ð w
ð w
�, ¨¤
ñ w
ô w
ð w
ð w
ð w
r#   