
    Vh                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ  G d de      Zdefd	Z	 dd
ee   dee   fdZy)    N)wraps)AnyCallablecastIOOptional)Buffer)ExtensionRegistryStreamTransformExtensionc                        e Zd ZdZej
                  fdeddf fdZede	dd fd       Z
ede	fd       Zde	fd	Zed
ededdfd       Zdee   dee   fdZdee   dee   fdZ xZS )Rot13Examplez
    This is an example stream transform extension which just does rot13 on each
    alphanumeric character of the stream.  It is mainly intended as a demonstration
    and for testing; there isn't a production use case for this.
    
chunk_sizereturnNc                 0    t         |           || _        y N)super__init___chunk_size)selfr   	__class__s     d/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/distributed/checkpoint_utils.pyr   zRot13Example.__init__   s    %    versionc                 `    | j                  d      d   dk7  rt        d|       t               S )N.r   1zUnknown extension version=)	partition
ValueErrorr   )r   s    r   from_descriptorzRot13Example.from_descriptor!   s5    S!!$+:'<==~r   c                       y)Nzstream.rot13 r!   r   r   registry_namezRot13Example.registry_name'   s    r   c                 (    | j                          dS )Nz/1)r"   r   s    r   get_descriptorzRot13Example.get_descriptor+   s    $$&'r**r   bcountc                 (   t        |       } t        |      D ]y  }| |   }|t        d      k\  r)|t        d      k  r|t        d      t        d      z
  z  }n6|t        d      k\  r(|t        d      k  r|t        d      t        d      z
  z  }|| |<   { y )NAZaz)
memoryviewrangeord)r&   r'   ichs       r   _rot13byteszRot13Example._rot13bytes.   s    qMu 	A1BSX~"C.c#hS))s3xB#c(Nc#hS))AaD	r   outputc                 n     G d dt         j                        }t        t        t            ||            S )Nc                   L    e Zd Zdee   ddfdZdefdZdede	e
   fdZd	dZy)
)Rot13Example.transform_to.<locals>.Writerr3   r   Nc                     || _         y r   )r3   )r   r3   s     r   r   z2Rot13Example.transform_to.<locals>.Writer.__init__;   s	    $r   c                      yNTr!   r$   s    r   	writeablez3Rot13Example.transform_to.<locals>.Writer.writeable>       r   r&   c                     t        |      }t        j                  |t        |             | j                  j                  |      S r   )	bytearrayr   r2   lenr3   write)r   r&   chunks      r   r?   z/Rot13Example.transform_to.<locals>.Writer.writeA   s4    !!((E
;{{((//r   c                 8    | j                   j                          y r   )r3   flushr$   s    r   rB   z/Rot13Example.transform_to.<locals>.Writer.flushG   s    !!#r   )r   N)__name__
__module____qualname__r   bytesr   boolr:   r	   r   intr?   rB   r!   r   r   Writerr6   :   sA    %r%y %T %4 0v 0(3- 0$r   rI   io	RawIOBaser   r   rF   )r   r3   rI   s      r   transform_tozRot13Example.transform_to9   s)    	$R\\ 	$  BuIvf~..r   inputc                 n     G d dt         j                        }t        t        t            ||            S )Nc                       e Zd Zdee   ddfdZdefdZdede	e
   fdZdefdZej                  fd	e
d
e
de
fdZde
fdZy)+Rot13Example.transform_from.<locals>.ReaderrN   r   Nc                     || _         y r   )rN   )r   rN   s     r   r   z4Rot13Example.transform_from.<locals>.Reader.__init__N   s	    "
r   c                      yr9   r!   r$   s    r   readablez4Rot13Example.transform_from.<locals>.Reader.readableQ   r;   r   r&   c                 0   t        | j                  d      r| j                  j                  |      }nDt        |      }| j                  j	                  t        |            }|d }nt        |      }||d | |dk(  s||S t        j                  ||       |S )Nreadintor   )hasattrrN   rV   r-   readr>   r   r2   )r   r&   r'   viewrs        r   rV   z4Rot13Example.transform_from.<locals>.Reader.readintoT   s    4::z2 JJ//2E
 &a=D

D	2Ay $ #A'(VeA: L((E2r   c                 6    | j                   j                         S r   )rN   seekabler$   s    r   r\   z4Rot13Example.transform_from.<locals>.Reader.seekableh   s    zz**,,r   offsetwhencec                 :    | j                   j                  ||      S r   )rN   seek)r   r]   r^   s      r   r`   z0Rot13Example.transform_from.<locals>.Reader.seekk   s    zzvv66r   c                 6    | j                   j                         S r   )rN   tellr$   s    r   rb   z0Rot13Example.transform_from.<locals>.Reader.telln   s    zz((r   )rC   rD   rE   r   rF   r   rG   rT   r	   r   rH   rV   r\   osSEEK_SETr`   rb   r!   r   r   ReaderrQ   M   sw    #bi #D #$ & Xc] (-$ - 79kk 73 7 7c 7)c )r   re   rJ   )r   rN   re   s      r   transform_fromzRot13Example.transform_fromL   s*    "	)R\\ "	)H BuIve}--r   )rC   rD   rE   __doc__rK   DEFAULT_BUFFER_SIZErH   r   staticmethodstrr   r"   r%   r	   r2   r   rF   rM   rf   __classcell__)r   s   @r   r   r      s     *,)?)? &3 &D &    
 3  + + v c d  /2e9 /E /&%.BuI %."U) %.r   r   r   c                  D    t               } | j                  t               | S r   )r
   registerr   )registrys    r   get_test_extension_registryro   t   s     "Hl#Or   funcc                 |      J t               dt        t           dt        t        t
        f   ddf fd       }|S )zJ
    Wrapper to initialize temp directory for distributed checkpoint.
    Nargskwargsr   c                 j   t        j                         rt        j                         dk(  r#t        j                         }t        d|        nd}|g}t        j                          t        j                  |       |d   | _	        t        j                          n)t        j                         }t        d|        || _	        	  | g|i | t        j                         r9t        j                         dk(  r"t        j                  | j                  d       y t        j                  | j                  d       y # t        j                         r9t        j                         dk(  r"t        j                  | j                  d       w t        j                  | j                  d       w xY w)Nr   zUsing temp directory:  z4No process group initialized, using temp directory: T)ignore_errors)distis_initializedget_ranktempfilemkdtempprintrc   syncbroadcast_object_listtemp_dirshutilrmtree)r   rr   rs   r   object_listrp   s        r   wrapperzwith_temp_dir.<locals>.wrapper   s/    }}!##++-.xj9:#*K GGI&&{3'NDMGGI'')HH
ST$DM	A'''""$A)=dmm4@dmm4@ ""$A)=dmm4@dmm4@s   E A0F2)r   tupleobjectdictrj   r   )rp   r   s   ` r   with_temp_dirr   z   sT     
4[AU6] Ad38n A A A8 Nr   r   )rK   rc   r   rz   	functoolsr   typingr   r   r   r   r   typing_extensionsr	   torch.distributeddistributedrw   'torch.distributed.checkpoint._extensionr
   r   r   ro   r   r!   r   r   <module>r      sj   
 
 	    4 4 %  [.+ [.|%6   $%
8
%h%r   