
    zj                    l    d dl mZ d dlmZ d dlmZ erd dlmZ d dlm	Z	  G d dej
                  ZdS )	    )annotations)TYPE_CHECKING)distribution)Sequence)Tensorc                       e Zd ZdZd fdZedd
            Zedd            Zg fddZddZ	ddZ
ddZddZ xZS )Independenta  
    Reinterprets some of the batch dimensions of a distribution as event dimensions.

    This is mainly useful for changing the shape of the result of
    :meth:`log_prob`.

    Args:
        base (Distribution): The base distribution.
        reinterpreted_batch_rank (int): The number of batch dimensions to
            reinterpret as event dimensions.

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> from paddle.distribution import independent

            >>> beta = paddle.distribution.Beta(paddle.to_tensor([0.5, 0.5]), paddle.to_tensor([0.5, 0.5]))
            >>> print(beta.batch_shape, beta.event_shape)
            (2,) ()
            >>> print(beta.log_prob(paddle.to_tensor(0.2)))
            Tensor(shape=[2], dtype=float32, place=Place(gpu:0), stop_gradient=True,
                    [-0.22843921, -0.22843921])
            >>> reinterpreted_beta = independent.Independent(beta, 1)
            >>> print(reinterpreted_beta.batch_shape, reinterpreted_beta.event_shape)
            () (2,)
            >>> print(reinterpreted_beta.log_prob(paddle.to_tensor([0.2,  0.2])))
            Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True,
                    -0.45687842)
    basedistribution.Distributionreinterpreted_batch_rankintreturnNonec                   t          |t          j                  st          dt	          |                     d|cxk     rt          |j                  k    s)n t          dt          |j                   d|           || _        || _	        |j        |j
        z   }t                                          |d t          |j                  |z
           |t          |j                  |z
  d                     d S )Nz1Expected type of 'base' is Distribution, but got r   z)Expected 0 < reinterpreted_batch_rank <= z
, but got )batch_shapeevent_shape)
isinstancer   Distribution	TypeErrortypelenr   
ValueError_base_reinterpreted_batch_rankr   super__init__)selfr
   r   shape	__class__s       o/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/distribution/independent.pyr   zIndependent.__init__<   s,    $ 9:: 	PDJJPP   ,EEEED4D0E0EEEEEwC@P<Q<Qww]uww   
)A& 4#33B#d&''*BBB D$%%(@@BB	 	 	
 	
 	
 	
 	
    r   c                    | j         j        S N)r   meanr   s    r    r$   zIndependent.meanT   s    zr!   c                    | j         j        S r#   )r   variancer%   s    r    r'   zIndependent.varianceX   s    z""r!   r   Sequence[int]c                6    | j                             |          S r#   )r   sample)r   r   s     r    r*   zIndependent.sample\   s    z  '''r!   valuec                h    |                      | j                            |          | j                  S r#   )_sum_rightmostr   log_probr   r   r+   s     r    r.   zIndependent.log_prob_   s2    ""J&&(F
 
 	
r!   c                P    |                      |                                          S r#   )r.   expr/   s     r    probzIndependent.probd   s     }}U##'')))r!   c                f    |                      | j                                        | j                  S r#   )r-   r   entropyr   r%   s    r    r4   zIndependent.entropyg   s0    ""J  $"@
 
 	
r!   nc                t    |dk    r1|                     t          t          | d                              n|S )Nr   )sumlistrange)r   r+   r5   s      r    r-   zIndependent._sum_rightmostl   s3    01AuyyeQBll++,,,5@r!   )r
   r   r   r   r   r   )r   r   )r   r(   r   r   )r+   r   r   r   )r+   r   r5   r   r   r   )__name__
__module____qualname____doc__r   propertyr$   r'   r*   r.   r2   r4   r-   __classcell__)r   s   @r    r	   r	      s         @
 
 
 
 
 
0    X # # # X# -/ ( ( ( ( (
 
 
 

* * * *
 
 
 

A A A A A A A Ar!   r	   N)
__future__r   typingr   paddle.distributionr   collections.abcr   paddler   r   r	    r!   r    <module>rF      s    # " " " " "             , , , , , , ((((((RA RA RA RA RA,+ RA RA RA RA RAr!   