o
    ,hao                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlmZ ej	G dd dZ
e
 Z						d$ddZdeeef fd	d
Ze jdd Zdd ZG dd dZd%ddZd%ddZd%ddZdd Zdd Zdd ZddddZddd d!Zddd"d#ZdS )&    N)AnyOptional)infc                   @   sN   e Zd ZU dZeed< dZeed< dZeed< dZ	eed< d	Z
ee ed
< d	S )__PrinterOptions   	precision  	threshold   	edgeitemsP   	linewidthNsci_mode)__name__
__module____qualname__r   int__annotations__r	   floatr   r   r   r   bool r   r   L/var/www/html/scripts/venv/lib/python3.10/site-packages/torch/_tensor_str.pyr      s   
 r   c                 C   s   |dur6|dkrdt _dt _dt _dt _n!|dkr&dt _dt _dt _dt _n|d	kr6dt _tt _dt _dt _| dur=| t _|durD|t _|durK|t _|durR|t _|t _dS )
a  Set options for printing. Items shamelessly taken from NumPy

    Args:
        precision: Number of digits of precision for floating point output
            (default = 4).
        threshold: Total number of array elements which trigger summarization
            rather than full `repr` (default = 1000).
        edgeitems: Number of array items in summary at beginning and end of
            each dimension (default = 3).
        linewidth: The number of characters per line for the purpose of
            inserting line breaks (default = 80). Thresholded matrices will
            ignore this parameter.
        profile: Sane defaults for pretty printing. Can override with any of
            the above options. (any one of `default`, `short`, `full`)
        sci_mode: Enable (True) or disable (False) scientific notation. If
            None (default) is specified, the value is defined by
            `torch._tensor_str._Formatter`. This value is automatically chosen
            by the framework.

    Example::

        >>> # Limit the precision of elements
        >>> torch.set_printoptions(precision=2)
        >>> torch.tensor([1.12345])
        tensor([1.12])
        >>> # Limit the number of elements shown
        >>> torch.set_printoptions(threshold=5)
        >>> torch.arange(10)
        tensor([0, 1, 2, ..., 7, 8, 9])
        >>> # Restore defaults
        >>> torch.set_printoptions(profile='default')
        >>> torch.tensor([1.12345])
        tensor([1.1235])
        >>> torch.arange(10)
        tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

    Ndefaultr   r   r
   r   short   full)
PRINT_OPTSr   r	   r   r   r   r   )r   r	   r   r   profiler   r   r   r   set_printoptions   s2   -
r   returnc                   C   s
   t tS )zyGets the current options for printing, as a dictionary that
    can be passed as ``**kwargs`` to set_printoptions().
    )dataclassesasdictr   r   r   r   r   get_printoptionsb   s   
r"   c               
   k   sB    t  }tdi |  zdV  W tdi | dS tdi | w )zyContext manager that temporarily changes the print options.  Accepted
    arguments are same as :func:`set_printoptions`.Nr   )r"   r   )kwargs
old_kwargsr   r   r   printoptionsi   s   "r%   c                 C   s:   | j s| jrtj| jjr| jrtjntj	}| j
|dS )N)dtype)is_mpsis_xputorchxpuget_device_propertiesdevicehas_fp64is_maiar   doubleto)tr&   r   r   r   tensor_totypeu   s   	r2   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
_Formatterc           	      C   s2  |j j| _d| _d| _d| _t  |d}W d    n1 s"w   Y  | js<|D ]}| }t	| jt
|| _q,n|j tjkrH|tj}t|t||d@ }| dkr^d S |j tjkrh| }t| }t| }t|	 }|D ]}|t|krd| _ nq|| jr|| dks|dkrd| _|D ]}dtj d	|}t	| jt
|| _qnW|D ]}|d
}t	| jt
|d | _qnB|| dks|dks|dk rd| _|D ]}dtj d	|}t	| jt
|| _qn|D ]}dtj d|}t	| jt
|| _qtjd urtj| _d S d S )NTF   r   g     @@g    חA{:.e}.0fg-C6?f})r&   is_floating_pointfloating_dtypeint_moder   	max_widthr)   no_gradreshapemaxlenfloat4_e2m1fn_x2viewuint8masked_selectisfinitenenumelfloat8_e8m0fnur   r2   absminceilr   r   format)	selftensortensor_viewvalue	value_strnonzero_finite_valsnonzero_finite_absnonzero_finite_minnonzero_finite_maxr   r   r   __init__   sn   

z_Formatter.__init__c                 C   s   | j S N)r=   rN   r   r   r   width   s   z_Formatter.widthc                 C   s   | j r6| jrd| j dtj d|}n$| jr+|d}t|s*t	|s*|d7 }ndtj d|}n| }| jt
| d | S )Nz{:.r7   r8   r6   r9    )r;   r   r=   r   r   rM   r<   mathisinfisnanrA   )rN   rQ   retr   r   r   rM      s   z_Formatter.formatN)r   r   r   rW   rZ   rM   r   r   r   r   r3      s    Tr3   c                 C   sb   |d ur*t | j|}t | j|d  }|d dks |d dkr$|| S |d | S ||  S Njr   +-)_scalar_strrealimaglstriprM   item)rN   
formatter1
formatter2real_strimag_strr   r   r   re      s   re   c                    s>  |  d }|d ur||  d 7 }tdtttj| | ||fdd | jtj	kr4| 
tj} |r=tjs=dgn<|rn| ddtj krn fdd| d tj  D d	g  fd
d| tj d   D  n fdd|  D fddtdtD }dd |D }ddd|d   | d S )Nr   r4   c                 S   s^   |d ur*| | j}| | jd  }|d dks |d dkr$|| S |d | S | | S ra   )rM   rf   rg   rh   )valrj   rk   rl   rm   r   r   r   _val_formatter  s   
z#_vector_str.<locals>._val_formatter...r   c                       g | ]} |qS r   r   .0rn   ro   r   r   
<listcomp>      z_vector_str.<locals>.<listcomp>z ...c                    rq   r   r   rr   rt   r   r   ru     rv   c                    rq   r   r   rr   rt   r   r   ru     rv   c                    s   g | ]
} ||  qS r   r   rs   i)dataelements_per_liner   r   ru   !  s    c                 S   s   g | ]}d  |qS ), )joinrs   liner   r   r   ru   $  s    [,
r\   ])rZ   r@   r   r]   floorr   r   r&   r)   rB   rC   rD   r   sizetolistrangerA   r|   )rN   indent	summarizerj   rk   element_length
data_lineslinesr   )ro   ry   rz   r   _vector_str   s0   
 r   c                    s     }|dkrt S |dkrt S rRddtj krR fddtdtjD dg  fddtttj tD  }n fddtddD }d	d
|d   dd   |}d| d S )Nr   r4   r   c                    $   g | ]}t | d   qS r4   _tensor_str_with_formatterrw   rj   rk   r   rN   r   r   r   ru   6      z._tensor_str_with_formatter.<locals>.<listcomp>rp   c                    r   r   r   rw   r   r   r   ru   =  r   c                    r   r   r   rw   r   r   r   ru   E  r   ,
r\   r   r   )	dimre   r   r   r   r   r   rA   r|   )rN   r   r   rj   rk   r   slices
tensor_strr   r   r   r   +  s*   
"r   c                 C   s   |   dkrdS |  r| d } |   tjk}|  r |  } |  r(|  } | j	t
jt
jt
jt
jfv r9|  } | j	jra|  } t|rIt| jn| j}t|rUt| jn| j}t| ||||S t|rht| n| }t| |||S )Nr   [])rH   	has_namesrenamer   r	   _is_zerotensorcloneis_negresolve_negr&   r)   float8_e5m2float8_e5m2fnuzfloat8_e4m3fnfloat8_e4m3fnuzhalf
is_complexresolve_conjr3   get_summarized_datarf   rg   r   )rN   r   r   real_formatterimag_formatter	formatterr   r   r   _tensor_strP  s:   

r   c                 C   s   | g}t | | d d }|D ]0}t |}|s!|| d tjkr3|dd|  |  || }d}q|d|  ||d 7 }q|d d	|S )
Nr   r4   r   r   r\   Fr{   ) )rA   rfindr   r   appendr|   )r   suffixesr   force_newlinetensor_strslast_line_lensuffix
suffix_lenr   r   r   _add_suffixes  s   

r   c                    s      }|dkr
 S |dkr, ddtj kr*t d tj  tj d  fS  S tjs9 dg    S  ddtj kro fddtdtjD } fddtt tj t D }t	dd || D S t	dd  D S )	Nr   r4   r   c                       g | ]} | qS r   r   rw   rY   r   r   ru     rv   z'get_summarized_data.<locals>.<listcomp>c                    r   r   r   rw   rY   r   r   ru     rv   c                 S      g | ]}t |qS r   r   rs   xr   r   r   ru     rv   c                 S   r   r   r   r   r   r   r   ru     rv   )
r   r   r   r   r)   cat	new_emptyr   rA   stack)rN   r   startendr   rY   r   r     s    &r   tensor_contentsc          !   	      s  t jj| rt| |dS t| t ju pt| t jju }| j	r"d}n|r'd}nt| j
 d}t| g }|d u}|r=|}t jj| \}}|jjt j ksd|jjdkr^t j |jjksd|jjdkrp|dt|j d  |jjd	v r{|d
}t  t jkrt jnt j}	|jt  |	t jt jfv }
|jr6|dtt|j   ddl!m"} |j#pt$||}|s|dt|%   |
s|dt|j  |s4d}|& ' }|rd}n	t(| t| }|s|) dkr|dtt|j  7 }d}|* ' }|rd}n	t(| t| }|s|) dkr$|dtt|j  7 }|| d d   | | d }n|j+t j,t j-t j.t j/hv rjddl!m"} |dtt|j   |j#p^t$||}|sm|dt|%   |
sz|dt|j  |sht j,t jj0t jj1ft j-t jj2t jj3ft j.t jj0t jj1ft j/t jj2t jj3fi|j+ \}}|j+t j,t j.hv rd\}}nd\}}d|d d  d}||' }|rd}n	t(| t| }|) dks|r|dtt|j  7 }|d d  d}||' }|rd}n	t(| t| }|) dks|r"|dtt|j  7 }d}|4 ' }|r0d}n	t(| t| }|) dksC|rN|dtt|j  7 }|| d d   | | d d   | | d }ng|j5r|dtt|j   |
s|dt|j  |dt|6   |6 t j7ks|6 t j8kr|dt|9   |dt|:   n9|6 t j;ks|6 t j<ks|6 t j=kr|dt|>   |dt|?   |dt|@   |st(|A  }n|j	r#|s"d d! d"B fd#d$t jCjDjEF|dD }d%| d&}nt G|r3d'}tHt I|}nddl!m"} |j#sCt$||rg|dtt|j   |jt  kra|dt|j  |sfd}nj|) dkr|js|J d(kr|dtt|j   |jt  kr|dt|j  |sd)}n4tKjLs|dtt|j   |
s|dt|j  |s|j+t jMkrt(|N  }nt(| }|j+t jMkr|d*t|j+  d }z| jO}W n tPy   d+}Y nw |d u r|d urt|j
}|d,kr|Q Rd-d(d. }|d ur#|d/| d0 n	| jSr,|d1 |T r:|d2|jU  |d urG|d3|  tV|| | |jd4} t$|t jjrc|scd5|  d} | S )6Nr   znested_tensor(ztensor((cudampszdevice='')xlalazyipumtiacpuzsize=r   )
FakeTensorznnz=zdtype=zindices=tensor(rp   z, size=zvalues=tensor(z),
r\   r   )rowcolumn)r   r   cr
   z_indices=tensor(zquantization_scheme=zscale=zzero_point=zaxis=c                 S   s   d dd | dD S )Nr   c                 s   s    | ]}d | V  qdS )z  Nr   r}   r   r   r   	<genexpr>Z  s    z4_str_intern.<locals>.indented_str.<locals>.<genexpr>)r|   split)sr   r   r   r   indented_strY  s   z!_str_intern.<locals>.indented_strr   c                 3   s"    | ]}t | d  V  qdS )r4   N)str)rs   r1   r   r   r   r   r   \  s
    
z_str_intern.<locals>.<genexpr>z[
z
]z_to_functional_tensor(r4   r   zlayout=InvalidCppFunctionz::r5   z	grad_fn=<>zrequires_grad=Trueznames=ztangent=)r   z
Parameter()Wr)   _C
_functorchis_functorch_wrapped_tensor_functorch_wrapper_str_interntypeTensornn	Parameter	is_nestedr   rA   autograd
forward_adunpack_dualr,   _get_default_devicer   current_deviceindexr   r   r0   get_default_dtyper/   cdoublecfloatr&   int64r   	is_sparsetupleshapetorch._subclasses.fake_tensorr   is_meta
isinstance_nnz_indicesdetachr   rH   _valueslayout
sparse_csr
sparse_csc
sparse_bsr
sparse_bsccrow_indicescol_indicesccol_indicesrow_indicesvaluesis_quantizedqschemeper_tensor_affineper_tensor_symmetricq_scaleq_zero_pointper_channel_affineper_channel_symmetric per_channel_affine_float_qparamsq_per_channel_scalesq_per_channel_zero_pointsq_per_channel_axis
dequantizer|   opsatenunbindr   _is_functional_tensorrepr_from_functional_tensorr   r   r   stridedto_densegrad_fnRuntimeErrornamersplitrequires_gradr   namesr   )!inpr   is_plain_tensorprefixr   custom_contents_providedr   rN   tangent_default_complex_dtypehas_default_dtyper   r   indices_prefixindicesindices_strvalues_prefixr   
values_strcompressed_indices_methodplain_indices_methodcdimnamepdimnamecompressed_indices_prefixcompressed_indicescompressed_indices_strplain_indices_prefixplain_indicesplain_indices_strstrsgrad_fn_namer  string_reprr   r   r   _str_intern  s  

	
	








r2  c                C   s   t jj| }|dksJ t jj| rt |  t jj| }t|}t	|d}t jj
| rJt jj| }|dks>J d| d| d| dS t jj| rZd| d| dS t jj| rjd| d	| d
S td)Nr5   z    zBatchedTensor(lvl=z, bdim=z	, value=
z
)zGradTrackingTensor(lvl=zFunctionalTensor(lvl=z
, value=\
r   z8We don't know how to print this, please file us an issue)r)   r   r   maybe_get_levelis_functionaltensor_syncget_unwrappedr  textwrapr   is_batchedtensormaybe_get_bdimis_gradtrackingtensor
ValueError)rO   r   levelrQ   
value_reprindented_value_reprbdimr   r   r   r     s"   
r   c             	   C   s~   t  1 t jj  t j }t| |dW  d    W  d    S 1 s(w   Y  W d    d S 1 s8w   Y  d S )Nr   )r)   r>   utils_python_dispatch_disable_current_modesr   _DisableFuncTorchr2  )rN   r   guardr   r   r   _str  s   

RrE  )NNNNNNrX   )
contextlibr    r]   r7  typingr   r   r)   r   	dataclassr   r   r   dictr   r"   contextmanagerr%   r2   r3   re   r   r   r   r   r   r2  r   rE  r   r   r   r   <module>   sB   
I

g

5%/  