o
    i                     @   s^   U d dl mZ g Zee ed< dededefddZded	edeee	e	e	e	f  fd
dZ
dS )    )ChunkStorageMetadata__all__shard1shard2returnc                 C   sd   t | j}t|D ]&}| j| |j| |j|  kr dS |j| | j| | j|  kr/ dS q	dS )zCheck if two shards overlap.FT)lenoffsetsrangesizes)r   r   ndimsi r   i/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/torch/distributed/checkpoint/resharding.py"_check_shard_metadata_pair_overlap   s   
r   saved_shardcurrent_shardc                 C   s   g }t t| j|j| j|jD ]2\}\}}}}t|| || }|t|| }	||kr2d}
|| }n|| }
d}|||
||	f q|S )a[  
    Return the overlapping region between saved_shard and current_shard.

    There returned list has the same number of elements as the tensor's dimension.
    For each element, we produce a tuple with the following contents:
        (dimension, `saved_shard` offset, `current_shard` offset, length)

    Offsets are relative to each shard.
    r   )	enumeratezipr   r
   minmaxappend)r   r   narrowsdimsaved_shard_offsetcurrent_shard_offsetsaved_shard_sizecurrent_shard_sizemin_range_endlengthoffset_for_saved_tensoroffset_for_current_tensorr   r   r   +_shards_get_overlap_region_wrt_saved_tensor   s8   
	

r!   N)%torch.distributed.checkpoint.metadatar   r   liststr__annotations__boolr   tupleintr!   r   r   r   r   <module>   s     
