U
    9%ec                     @   s
  d dl Z d dlZd dlZd dlZd dlmZ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eeef d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Dict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   P/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_tensor_str.pyr      s
   
r   c                 C   s   |dk	rl|dkr*dt _dt _dt _dt _nB|dkrLdt _dt _dt _dt _n |d	krldt _tt _dt _dt _| dk	rz| t _|dk	r|t _|dk	r|t _|dk	r|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   Z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_printoptionsa   s    r"   c               	   k   s,   t  }tf |  z
dV  W 5 tf | X dS )zyContext manager that temporarily changes the print options.  Accepted
    arguments are same as :func:`set_printoptions`.N)r"   r   )kwargsZ
old_kwargsr   r   r   printoptionsh   s
    

r$   c                 C   s   | j rtjntj}| j|dS )N)dtype)Zis_mpstorchr   doubleto)tr%   r   r   r   tensor_totypet   s    r*   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
_Formatterc           	   	   C   s  |j j| _d| _d| _d| _t  |d}W 5 Q R X | jsf|D ]}| }t	| jt
|| _qDnt|t||d@ }| dkrd S t| }t| }t|	 }|D ]}|t|krd| _ qq| jr\|| dks|dkr0d| _|D ],}dtj d	|}t	| jt
|| _q n*|D ]$}|d
}t	| jt
|d | _q4n|| dks~|dks~|dk rd| _|D ],}dtj d	|}t	| jt
|| _qn2|D ],}dtj d|}t	| jt
|| _qtjd k	rtj| _d S )NTF   r   g     @@g    חA{:.e}.0fg-C6?f})r%   Zis_floating_pointfloating_dtypeint_moder   	max_widthr&   no_gradZreshapemaxlenZmasked_selectisfinitenenumelr*   absminceilr   r   format)	selftensorZtensor_viewvalueZ	value_strZnonzero_finite_valsZnonzero_finite_absZnonzero_finite_minZnonzero_finite_maxr   r   r   __init__z   sd    

 

z_Formatter.__init__c                 C   s   | j S )N)r4   r?   r   r   r   width   s    z_Formatter.widthc                 C   s   | j rl| jr*d| j dtj d|}qr| jrV|d}t|sjt	|sj|d7 }qrdtj d|}n| }| jt
| d | S )Nz{:.r/   r0   r.   r1    )r2   r   r4   r   r   r>   r3   mathisinfisnanr7   )r?   rA   retr   r   r   r>      s    
z_Formatter.formatN)r   r   r   rB   rD   r>   r   r   r   r   r+   y   s   Cr+   c                 C   sh   |d k	rVt | j|}t | j|d  }|d dks@|d dkrH|| S |d | S n||  S d S Njr   +-)_scalar_strrealimaglstripr>   item)r?   
formatter1
formatter2real_strimag_strr   r   r   rO      s    rO   c                    s&  |  d }|d k	r$||  d 7 }tdtttj| | ||fdd |rbtjsbdgnx|r| ddtj krć 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   r,   c                 S   sd   |d k	rV| | j}| | jd  }|d dks@|d dkrH|| S |d | S n
| | S d S rK   )r>   rP   rQ   rR   )valrT   rU   rV   rW   r   r   r   _val_formatter   s    z#_vector_str.<locals>._val_formatter...r   c                    s   g | ]} |qS r   r   .0rX   rY   r   r   
<listcomp>   s     z_vector_str.<locals>.<listcomp>z ...c                    s   g | ]} |qS r   r   r[   r]   r   r   r^      s     c                    s   g | ]} |qS r   r   r[   r]   r   r   r^      s     c                    s   g | ]} ||  qS r   r   r\   i)dataelements_per_liner   r   r^      s    c                 S   s   g | ]}d  |qS ), )joinr\   liner   r   r   r^     s     [,
rF   ])rD   r6   r   rG   floorr   r   r   sizetolistranger7   rd   )r?   indent	summarizerT   rU   Zelement_lengthZ
data_lineslinesr   )rY   ra   rb   r   _vector_str   s.     
 rq   c                    s     }|dkrt S |dkr4t S rddtj kr 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   r,   r   c                    s$   g | ]}t | d   qS r,   _tensor_str_with_formatterr_   rT   rU   rn   r?   ro   r   r   r^     s       z._tensor_str_with_formatter.<locals>.<listcomp>rZ   c                    s$   g | ]}t | d   qS rr   rs   r_   ru   r   r   r^     s       c                    s$   g | ]}t | d   qS rr   rs   r_   ru   r   r   r^   #  s       ,
rF   rg   ri   )	dimrO   rq   rk   r   r   rm   r7   rd   )r?   rn   ro   rT   rU   rx   Zslices
tensor_strr   ru   r   rt   	  s*    
"rt   c                 C   s   |   dkrdS |  r"| d } |   tjk}|  r@|  } |  rP|  } | j	t
jt
jt
jt
jfkrr|  } | j	t
jkr|  } | j	jr|  } t|rt| jn| j}t|rt| jn| j}t| ||||S t|rt| n| }t| |||S d S )Nr   [])r:   	has_namesrenamer   r
   Z_is_zerotensorcloneZis_negZresolve_negr%   r&   Zfloat16Zbfloat16Zfloat8_e5m2Zfloat8_e4m3fnr   Z	complex32cfloatZ
is_complexZresolve_conjr+   get_summarized_datarP   rQ   rt   )r?   rn   ro   Zreal_formatterZimag_formatter	formatterr   r   r   _tensor_str.  sF    
    r   c                 C   s   | g}t | | d d }|D ]`}t |}|sB|| d tjkrf|dd|  |  || }d}q |d|  ||d 7 }q |d d	|S )
Nrw   r,   r   rh   rF   Frc   ) )r7   rfindr   r   appendrd   )ry   suffixesrn   force_newlineZtensor_strsZlast_line_lensuffixZ
suffix_lenr   r   r   _add_suffixes_  s    
r   c                    s      }|dkr S |dkrX ddtj krTt d tj  tj d  fS  S tjsr dg    S  ddtj krއ 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 d S )	Nr   r,   r   c                    s   g | ]} | qS r   r   r_   rC   r   r   r^   }  s     z'get_summarized_data.<locals>.<listcomp>c                    s   g | ]} | qS r   r   r_   rC   r   r   r^   ~  s     c                 S   s   g | ]}t |qS r   r   r\   xr   r   r   r^     s     c                 S   s   g | ]}t |qS r   r   r   r   r   r   r^     s     )
rx   rk   r   r   r&   catZ	new_emptyrm   r7   stack)r?   rx   startendr   rC   r   r   o  s     &r   tensor_contentsc             	      s&  t jj| rt| |dS t| t jkp6t| t jjk}| j	rDd}n|rNd}nt| j
 d}t| g }|d k	}|rz|}t jj| \}}|jjt j ks|jjdkrt j |jjks|jjdkr|dt|j d  |jjd	kr|d
}t  t jkrt jnt j}	|jt  |	t jt jfk}
|jrR|dtt|j   ddl!m"} |j#st$||s|dt|%   |
s|dt|j  |s4d}|& ' }t(| t| }|) dkr|dtt|j  7 }d}|* ' }t(| t| }|) dkr.|dtt|j  7 }|| d d   | | d }n|j+t j,t j-t j.t j/hkr`|dtt|j   |dt|%   |
s|dt|j  |s4t 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kr0d\}}nd\}}d|d d  d}||' }t(| t| }|) dkr|dtt|j  7 }|d d  d}||' }t(| t| }|) dkr|dtt|j  7 }d}|4 ' }t(| t| }|) dkr(|dtt|j  7 }|| d d   | | d d   | | d }n|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|:   nr|6 t j;ks.|6 t j<ks.|6 t j=krp|dt|>   |dt|?   |dt|@   |s4t(|A  }n|j	r|s4dd  d!B fd"d#t jCjDjEF|dD }d$| d%}n^t G|rd&}tHt I|}n<ddl!m"} |j#st$||r`|dtt|j   |jt  krT|dt|j  |s4d'}n|) dkr|js|J d(kr|dtt|j   |jt  kr|dt|j  |s4d)}nhtKjLs|dtt|j   |
s|dt|j  |s4|j+t jMkr*t(|N  }n
t(| }|j+t jMkrV|d*t|j+  | jOd k	rt| jOj
}|d+kr| jOP Qd,d(d- }|d.| d/ n| jRr|d0 |S r|d1|jT  |d k	r|d2|  tU|| | |jd3}t$|t jjr"|s"d4| d}|S )5Nr   znested_tensor(ztensor((cudaZmpszdevice='')ZxlaZlazyZipuZmtiacpuzsize=r   )
FakeTensorznnz=zdtype=zindices=tensor(z, size=zvalues=tensor(z),
rF   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 )Nrw   c                 s   s   | ]}d | V  qdS )z  Nr   re   r   r   r   	<genexpr>&  s     z4_str_intern.<locals>.indented_str.<locals>.<genexpr>)rd   split)srn   r   r   r   indented_str%  s    z!_str_intern.<locals>.indented_strrh   c                 3   s    | ]}t | d  V  qdS )r,   N)str)r\   r)   rn   r   r   r   r   (  s   z_str_intern.<locals>.<genexpr>z[
z
]z_to_functional_tensor(rZ   r,   rz   zlayout=ZCppFunctionz::r-   z	grad_fn=<>zrequires_grad=Trueznames=ztangent=)r   z
Parameter()Vr&   _C
_functorchZis_functorch_wrapped_tensor_functorch_wrapper_str_interntypeZTensornn	ParameterZ	is_nestedr   r7   ZautogradZ
forward_adZunpack_dualZdeviceZ_get_default_devicer   Zcurrent_deviceindexr   r   r(   Zget_default_dtyper'   Zcdoubler~   r%   Zint64r   Z	is_sparsetupleshapeZtorch._subclasses.fake_tensorr   is_meta
isinstanceZ_nnzZ_indicesdetachr   r:   Z_valuesZlayoutZ
sparse_csrZ
sparse_cscZ
sparse_bsrZ
sparse_bscZcrow_indicesZcol_indicesZccol_indicesZrow_indicesvaluesZis_quantizedZqschemeZper_tensor_affineZper_tensor_symmetricZq_scaleZq_zero_pointZper_channel_affineZper_channel_symmetricZ per_channel_affine_float_qparamsZq_per_channel_scalesZq_per_channel_zero_pointsZq_per_channel_axisZ
dequantizerd   ZopsZatenZunbindr   Z_is_functional_tensorreprZ_from_functional_tensorrx   r   r   ZstridedZto_denseZgrad_fnnamersplitZrequires_gradr{   namesr   )Zinpr   Zis_plain_tensorprefixr   Zcustom_contents_providedry   r?   ZtangentZ_default_complex_dtypeZhas_default_dtyper   Zindices_prefixindicesZindices_strZvalues_prefixr   Z
values_strZcompressed_indices_methodZplain_indices_methodZcdimnameZpdimnameZcompressed_indices_prefixZcompressed_indicesZcompressed_indices_strZplain_indices_prefixZplain_indicesZplain_indices_strstrsr   Zstring_reprr   r   r   _str_intern  s   



	    
 
 
	





   r   c                C   s   t jj| }|dkstt jj| r2t |  t jj| }t|}t	
|d}t jj| rt jj| }|dks|td| d| d| dS t jj| rd| d| dS t jj| rd| d	| d
S tdd S )Nr-   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   Zmaybe_get_levelAssertionErrorZis_functionaltensorZ_syncZget_unwrappedr   textwraprn   Zis_batchedtensorZmaybe_get_bdimZis_gradtrackingtensor
ValueError)r@   r   levelrA   
value_reprZindented_value_reprZbdimr   r   r   r   v  s$    
r   c                C   sZ   t  H t jj 0 t j }t| |dW  5 Q R  W  5 Q R  S Q R X W 5 Q R X d S )Nr   )r&   r5   utilsZ_python_dispatchZ_disable_current_modesr   Z_DisableFuncTorchr   )r?   r   guardr   r   r   _str  s    
r   )NNNNNN)N)N)N)
contextlibr    rG   r   typingr   r   r   r&   r   	dataclassr   r   r   r   r"   contextmanagerr$   r*   r+   rO   rq   rt   r   r   r   r   r   r   r   r   r   r   <module>   s>         
I
V

-
%1 s