
    Αi                        S SK Jr  S SKJrJr  S SKrS SKJr  S SKJ	r	J
r
  S SKJr  \(       a  S SKJr  S SKJr  S S	KJr     S         SS
 jjr S       SS jjr   S       SS jjrg)    )annotations)TYPE_CHECKINGAnyN)stream)_get_global_group_warn_cur_rank_not_in_group)convert_tensor_to_object)Tensor)task)Groupc                .    [         R                  " XX#SS9$ )a  
Receive a tensor to the sender.

Args:
    tensor (Tensor): The tensor to receive. Its data type
        should be float16, float32, float64, int32, int64, int8, uint8, bool or bfloat16.
    src (int): The source rank id.
    group (Group, optional): The group instance return by new_group or None for global default group. Default: None.
    sync_op (bool, optional): Whether this op is a sync op. The default value is True.

Returns:
    Return a task object.

Examples:
    .. code-block:: python

        >>> # doctest: +REQUIRES(env: DISTRIBUTED)
        >>> import paddle
        >>> import paddle.distributed as dist

        >>> dist.init_parallel_env()
        >>> if dist.get_rank() == 0:
        ...     data = paddle.to_tensor([7, 8, 9])
        ...     dist.send(data, dst=1)
        >>> else:
        ...     data = paddle.to_tensor([1, 2, 3])
        ...     dist.recv(data, src=0)
        >>> print(data)
        >>> # [7, 8, 9] (2 GPUs)
F)srcgroupsync_opuse_calc_stream)r   recv)tensorr   r   r   s       e/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/communication/recv.pyr   r   #   s    H ;;uu     c                    [        XUSS9$ )a  
Receive a tensor to the sender.

Args:
    tensor (Tensor): The Tensor to receive. Its data type
        should be float16, float32, float64, int32, int64, int8, uint8, bool or bfloat16.
    src (int): The source rank id.
    group (Group, optional): The group instance return by new_group or None for global default group. Default: None.

Returns:
    Return a task object.

Warning:
    This API only supports the dygraph mode.

Examples:
    .. code-block:: python

        >>> # doctest: +REQUIRES(env: DISTRIBUTED)
        >>> import paddle
        >>> import paddle.distributed as dist

        >>> dist.init_parallel_env()
        >>> if dist.get_rank() == 0:
        ...     data = paddle.to_tensor([7, 8, 9])
        ...     task = dist.isend(data, dst=1)
        >>> else:
        ...     data = paddle.to_tensor([1, 2, 3])
        ...     task = dist.irecv(data, src=0)
        >>> task.wait()  # type: ignore[union-attr]
        >>> print(data)
        >>> # [7, 8, 9] (2 GPUs)
F)r   )r   )r   r   r   s      r   irecvr   L   s    H UE22r   c                B   U b  [        U 5      S:X  a  [        S5      eUc
  [        5       OUn[        U5      (       a  gUb   Ub  [        S5      eUR	                  U5      nOUc  SOUn[
        R                  " [        U 5      4SS9n[        XAUS9  [
        R                  " U5      R                  5       n[
        R                  " U4[
        R                  S9n[        XaUS9  Sn[        U5       H,  u  pU	R                  5       n	XgXy-    n
[        X5      X'   Xy-  nM.     g)a!  
Receive a list of Python objects from the sender.

Args:
    object_list (list): The list to store received objects. Must be pre-allocated with correct size.
    src (int, optional): The source rank id. Default: 0.
    group (Group, optional): The group instance return by new_group or None for global default group. Default: None.
    src_in_group (int, optional): The source rank within the group. Cannot be specified together with src. Default: None.

Returns:
    This function does not return any value.

Examples:
    .. code-block:: python

        >>> # doctest: +REQUIRES(env: DISTRIBUTED)
        >>> import paddle
        >>> import paddle.distributed as dist

        >>> dist.init_parallel_env()
        >>> if dist.get_rank() == 0:
        ...     data = ["hello", {"key": 100}, [1, 2, 3]]
        ...     dist.send_object_list(data, dst=1)
        >>> else:
        ...     data = [None] * 3  # type: ignore
        ...     dist.recv_object_list(data, src=0)
        >>> print(data)
        >>> # ["hello", {"key": 100}, [1, 2, 3]] (2 GPUs)
Nr   z#object_list cannot be None or emptyz7Cannot specify both 'src' and 'src_in_group' arguments.int64)dtype)r   r   )len
ValueErrorr   r   get_global_rankpaddleemptyr   sumitemuint8	enumerater	   )object_listr   r   src_in_groupobject_sizes_tensor
total_sizeobject_tensoroffsetiobj_sizeobj_views              r   recv_object_listr-   s   s   F c+.!3>??#(=eE"5))?I  ##L1;aC ,,K(8':'J	U3/0557JLL*fllCMu-F !45==? &*;<1(E	 6r   )r   NT)
r   r
   r   intr   Group | Noner   boolreturnr   )NN)r   r
   r   
int | Noner   r/   r1   r   )NNN)r$   z	list[Any]r   r2   r   r/   r%   r2   )
__future__r   typingr   r   r    paddle.distributed.communicationr   &paddle.distributed.communication.groupr   r   4paddle.distributed.communication.serialization_utilsr	   r
   paddle.base.corer   r   r   r   r-    r   r   <module>r:      s    # %  3 %<
 	&&	& & 	&
 
&T CG$3$3#$33?$3	$3R #	??	? ? 	?r   