
    Χgr.                     \   d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
 ddlZej        ej        ej        ej        ej        ej        ej        ej        gZej        ej        ej        ej        gZej        ej        ej        ej        gZej        ej         ej!        gZ"ej#        geZ$g ee"Z%dej&        de'de'dej&        fdZ(ddd	d	d	dd
de
e)ej*        ee)         e	e)df         f         dej+        de
e,ej-        f         dee'         dee'         de#de#de#deej.                 dej&        fdZ/dS )z1
This module contains tensor creation utilities.
    N)castListOptionalTupleUniontlowhighreturnc                     ||z
  t          j        | j                  j        k    r/|                     |dz  |dz                                d          S |                     ||          S )N   )torchfinfodtypemaxuniform_mul_)r   r	   r
   s      S/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/testing/_creation.py_uniform_random_r   #   s`     czU[))---zz#'4!8,,11!444zz#t$$$    F)r	   r
   requires_gradnoncontiguousexclude_zeromemory_formatshape.r   devicer   r   r   r   c                     dt           t                   dt           t                   dt          dt          dt          dt          dt          t          t          f         f fd}	t          |          d	k    r-t	          |d
         t
          j        j                  r|d
         }t          t          t          df         t          |                    }|r|t          d|d|          |r t          v rt          d            t          j        u rTt          t          t          t          f          |	||d
dd
d                    \  }}t          j        ||||           }
nՉ t          v rt          t          t          t          f          |	||t          j                   j        t          j                   j         t          j        urd	nd
z   dd                    \  }}t          j        ||||           }
n7 t(          v r |	||t          j                   j        t          j                   j        dd          \  }}t          j        ||           }
t/           t0          v rt          j        |
          n|
||           n t4          v r |	||t          j                   j        t          j                   j        dd          \  }}t          j        ||t          j                  }
t/          |
||           |
                               }
nt;          d  d          |r=|
                                d	k    r%t          j        |
dd          }
|
ddddf         }
n||
                     |          }
|r+ t          v rd	nt          j                   j!        |
|
d
k    <    t(          v r||
_"        |
S )as  Creates a tensor with the given :attr:`shape`, :attr:`device`, and :attr:`dtype`, and filled with
    values uniformly drawn from ``[low, high)``.

    If :attr:`low` or :attr:`high` are specified and are outside the range of the :attr:`dtype`'s representable
    finite values then they are clamped to the lowest or highest representable finite value, respectively.
    If ``None``, then the following table describes the default values for :attr:`low` and :attr:`high`,
    which depend on :attr:`dtype`.

    +---------------------------+------------+----------+
    | ``dtype``                 | ``low``    | ``high`` |
    +===========================+============+==========+
    | boolean type              | ``0``      | ``2``    |
    +---------------------------+------------+----------+
    | unsigned integral type    | ``0``      | ``10``   |
    +---------------------------+------------+----------+
    | signed integral types     | ``-9``     | ``10``   |
    +---------------------------+------------+----------+
    | floating types            | ``-9``     | ``9``    |
    +---------------------------+------------+----------+
    | complex types             | ``-9``     | ``9``    |
    +---------------------------+------------+----------+

    Args:
        shape (Tuple[int, ...]): Single integer or a sequence of integers defining the shape of the output tensor.
        dtype (:class:`torch.dtype`): The data type of the returned tensor.
        device (Union[str, torch.device]): The device of the returned tensor.
        low (Optional[Number]): Sets the lower limit (inclusive) of the given range. If a number is provided it is
            clamped to the least representable finite value of the given dtype. When ``None`` (default),
            this value is determined based on the :attr:`dtype` (see the table above). Default: ``None``.
        high (Optional[Number]): Sets the upper limit (exclusive) of the given range. If a number is provided it is
            clamped to the greatest representable finite value of the given dtype. When ``None`` (default) this value
            is determined based on the :attr:`dtype` (see the table above). Default: ``None``.

            .. deprecated:: 2.1

                Passing ``low==high`` to :func:`~torch.testing.make_tensor` for floating or complex types is deprecated
                since 2.1 and will be removed in 2.3. Use :func:`torch.full` instead.

        requires_grad (Optional[bool]): If autograd should record operations on the returned tensor. Default: ``False``.
        noncontiguous (Optional[bool]): If `True`, the returned tensor will be noncontiguous. This argument is
            ignored if the constructed tensor has fewer than two elements. Mutually exclusive with ``memory_format``.
        exclude_zero (Optional[bool]): If ``True`` then zeros are replaced with the dtype's small positive value
            depending on the :attr:`dtype`. For bool and integer types zero is replaced with one. For floating
            point types it is replaced with the dtype's smallest positive normal number (the "tiny" value of the
            :attr:`dtype`'s :func:`~torch.finfo` object), and for complex types it is replaced with a complex number
            whose real and imaginary parts are both the smallest positive normal number representable by the complex
            type. Default ``False``.
        memory_format (Optional[torch.memory_format]): The memory format of the returned tensor. Mutually exclusive
            with ``noncontiguous``.

    Raises:
        ValueError: If ``requires_grad=True`` is passed for integral `dtype`
        ValueError: If ``low >= high``.
        ValueError: If either :attr:`low` or :attr:`high` is ``nan``.
        ValueError: If both :attr:`noncontiguous` and :attr:`memory_format` are passed.
        TypeError: If :attr:`dtype` isn't supported by this function.

    Examples:
        >>> # xdoctest: +SKIP
        >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_CUDA)
        >>> from torch.testing import make_tensor
        >>> # Creates a float tensor with values in [-1, 1)
        >>> make_tensor((3,), device='cpu', dtype=torch.float32, low=-1, high=1)
        >>> # xdoctest: +SKIP
        tensor([ 0.1205, 0.2282, -0.6380])
        >>> # Creates a bool tensor on CUDA
        >>> make_tensor((2, 2), device='cuda', dtype=torch.bool)
        tensor([[False, False],
                [False, True]], device='cuda:0')
    r	   r
   lowest_inclusivehighest_exclusivedefault_lowdefault_highr   c                >   dt           dt           dt           dt           fd}| | n|} ||n|}t          d | |fD                       rt          d| d	|          | |k    r&t          v rt	          j        d
t          d           nF| |k    rt          d|  d|           ||k     s| |k    rt          d|  d| d d| d| d           || ||          }  ||||          }t          v r(t          j	        |           t          j	        |          fS | |fS )z
        Modifies (and raises ValueError when appropriate) low and high values given by the user (input_low, input_high)
        if required.
        alhr   c                 >    t          t          | |          |          S N)minr   )r#   r$   r%   s      r   clampz3make_tensor.<locals>.modify_low_high.<locals>.clamp   s    s1ayy!$$$r   Nc              3   h   K   | ]-}t          |t                    ot          j        |          V  .d S r'   )
isinstancefloatmathisnan).0values     r   	<genexpr>z7make_tensor.<locals>.modify_low_high.<locals>.<genexpr>   s;      WW%z%''=DJu,=,=WWWWWWr   z,`low` and `high` cannot be NaN, but got low=z
 and high=zPassing `low==high` to `torch.testing.make_tensor` for floating or complex types is deprecated since 2.1 and will be removed in 2.3. Use `torch.full(...)` instead.   )
stacklevelz(`low` must be less than `high`, but got z >= z5The value interval specified by `low` and `high` is [z, z), but z only supports [))
r,   any
ValueError_FLOATING_OR_COMPLEX_TYPESwarningswarnFutureWarning_BOOLEAN_OR_INTEGRAL_TYPESr-   ceil)r	   r
   r   r   r    r!   r)   r   s          r   modify_low_highz$make_tensor.<locals>.modify_low_high~   s   	%U 	%u 	% 	%5 	% 	% 	% 	% _cc+'tt\WWCQU;WWWWW 	M3MMdMM   D[[U&@@@M1      D[[WWWQUWWXXX$$$/@(@(@W W Wt W WW W.>W WBSW W W  
 eC)+<==uT+->??... 9S>>49T??22Dyr      r   .NzaThe parameters `noncontiguous` and `memory_format` are mutually exclusive, but got noncontiguous=z and memory_format=zU`requires_grad=True` is not supported for boolean and integral dtypes, but got dtype=r   )r   r   r    r!   )r   r   i
   	   zThe requested dtype 'z' is not supported by torch.testing.make_tensor(). To request support, file an issue at: https://github.com/pytorch/pytorch/issues)dim)r   )#r   r,   r   lenr+   collectionsabcSequencer   inttupler6   r;   r   boolrandintiinfor(   r   int64r7   r   emptyr   _COMPLEX_TYPESview_as_real_FLOATING_8BIT_TYPESfloat32to	TypeErrornumelrepeat_interleaveclonetinyr   )r   r   r	   r
   r   r   r   r   r   r=   results   `          r   make_tensorrY   ,   s^   d1e_1uo1  	1
 !1 1 1 
ue|	1 1 1 1 1 1f 5zzQ:eAh0HIIasCx%,,//E 
2=$= =,9= =
 
 	

  
"<<<f^cff
 
 	
 
#s(OO!""#  

 

	T sD%eLLL	,	,	,#s(OO!&U!3!3!7"'+e"4"4"8 U[0011a	#9   
 
	T" sD%eLLL	,	,	,#O"[//3#k%004
 
 
	T U6???*/>*A*AEv&&&vsTX	
 	
 	
 	
 
&	&	&#O"[//3#k%004
 
 
	T U6GGGd+++5!!_E _ _ _
 
 	

  ;!++(;;;SSqS!		"M:: 
444AA%+e:L:L:Q 	v{ ***,Mr   )0__doc__collections.abcrD   r-   r8   typingr   r   r   r   r   r   uint8int8int16int32rL   uint16uint32uint64_INTEGRAL_TYPESfloat16bfloat16rQ   float64_FLOATING_TYPESfloat8_e4m3fnfloat8_e5m2float8_e4m3fnuzfloat8_e5m2fnuzrP   	complex32	complex64
complex128rN   rI   r;   r7   Tensorr,   r   rG   Sizer   strr   r   rY    r   r   <module>rt      s          5 5 5 5 5 5 5 5 5 5 5 5 5 5  
K	J	K	K	K	L	L	L	 =%.%-O					  /5?E4DE#j;?; @@@ % %5 % %%, % % % %   37a a a#uz49eCHo=>a;a #u|#$a 
%	a
 5/a a a a E/0a \a a a a a ar   