§
    Ì²Åj]  ã            	       óˆ  — d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	Z	d dl
mZmZ d dlmZmZmZ g d¢Zdedee         fd	„Zded
ee         dee         fd„Zdedefd„Zej        fdedededefd„Zdedefd„Z	 ddedee         defd„Z ede¬¦  «        dededefd„¦   «         Zdedefd„Zdede	j        defd„ZdS )é    N)ÚAnyÚListÚOptionalÚSet)Ú
deprecated)Ú_ShardingIterDataPipeÚSHARDING_PRIORITIES)ÚDataPipeÚDataPipeGraphÚtraverse_dps)Úapply_random_seedÚapply_shardingÚapply_shuffle_seedÚapply_shuffle_settingsÚget_all_graph_pipesÚgraphÚreturnc                 ó:   — t          | t          ¦   «         ¦  «        S ©N)Ú_get_all_graph_pipes_helperÚset)r   s    úPC:\Projects\Historical\venv\Lib\site-packages\torch/utils/data/graph_settings.pyr   r      s   € Ý& u­c©e¬eÑ4Ô4Ð4ó    Úid_cachec                 óè   — g }|                       ¦   «         D ]Z\  }\  }}||v rŒ|                     |¦  «         |                     |¦  «         |                     t	          ||¦  «        ¦  «         Œ[|S r   )ÚitemsÚaddÚappendÚextendr   )r   r   ÚresultsÚdp_idÚdatapipeÚ	sub_graphs         r   r   r      sƒ   € ð !€GØ(-¯ª©¬ð Ið IÑ$ˆÑ$�˜)Ø�HÐÐØØ�Š�UÑÔÐØ�Š�xÑ Ô Ð Ø�ŠÕ2°9¸hÑGÔGÑHÔHÐHÐHØ€Nr   r"   c                 ó~   — t          | t          ¦  «        p(t          | d¦  «        ot          j        | j        ¦  «        S )Nr   )Ú
isinstancer   ÚhasattrÚinspectÚismethodr   ©r"   s    r   Ú_is_sharding_datapiper*   )   s>   € Ý�hÕ 5Ñ6Ô6ð Ý�Ð*Ñ+Ô+ð 	6ÝÔ˜XÔ4Ñ5Ô5ðr   Únum_of_instancesÚinstance_idc                 óT   ‡‡‡‡— t          | ¦  «        }dˆˆˆˆfd„	Š ‰|¦  «         | S )zÑ
    Apply dynamic sharding over the ``sharding_filter`` DataPipe that has a method ``apply_sharding``.

    RuntimeError will be raised when multiple ``sharding_filter`` are presented in the same branch.
    Nc                 óp  •— |                       ¦   «         D ]Ÿ\  }}d }t          |¦  «        ry|�t          d|› d|› �¦  «        ‚t          j        |j        ¦  «        }t          |j        ¦  «        dk     r|                     ‰‰¦  «         n|                     ‰‰‰	¬¦  «         |}|€|} ‰||¦  «         Œ d S )NzoSharding twice on a single pipeline is likely unintended and will cause data loss. Sharding already applied to z while trying to apply to é   )Úsharding_group)Úvaluesr*   ÚRuntimeErrorr'   Ú	signaturer   ÚlenÚ
parameters)
r   Úprev_appliedÚdpr#   ÚappliedÚsigÚ_helperr,   r+   r0   s
         €€€€r   r:   zapply_sharding.<locals>._helper=   s  ø€ Ø"Ÿ\š\™^œ^ð 	(ð 	(‰MˆB�	ØˆGÝ$ RÑ(Ô(ð ØÐ+Ý&ðdØ7Cðdð dØ_aðdð dñô ð õ
 Ô'¨Ô(9Ñ:Ô:�Ý�s”~Ñ&Ô&¨Ò*Ð*Ø×%Ò%Ð&6¸ÑDÔDÐDÐDà×%Ò%Ø(¨+Ànð &ñ ô ð ð �ØˆØ&�ØˆG�I˜wÑ'Ô'Ð'Ð'ð'	(ð 	(r   r   )r   )r"   r+   r,   r0   r   r:   s    ``` @r   r   r   0   sV   øøøø€ õ ˜Ñ"Ô"€Eð(ð (ð (ð (ð (ð (ð (ð (ð (ð, €GˆE�N„N€Nà€Or   c                 ó¦   — t          | d¦  «        oAt          | d¦  «        o1t          j        | j        ¦  «        ot          j        | j        ¦  «        S )NÚset_shuffleÚset_seed)r&   r'   r(   r<   r=   r)   s    r   Ú_is_shuffle_datapiper>   X   sT   € å�˜-Ñ(Ô(ð 	0Ý�H˜jÑ)Ô)ð	0åÔ˜XÔ1Ñ2Ô2ð	0õ Ô˜XÔ.Ñ/Ô/ð	r   Úshufflec                 óô   — |€| S t          | ¦  «        }t          |¦  «        }d„ |D ¦   «         }|s-|r+t          j        d¦  «         |                      ¦   «         } | g}|D ]}|                     |¦  «         Œ| S )aE  
    Traverse the graph of ``DataPipes`` to find and set shuffle attribute.

    Apply the method to each `DataPipe` that has APIs of ``set_shuffle``
    and ``set_seed``.

    Args:
        datapipe: DataPipe that needs to set shuffle attribute
        shuffle: Shuffle option (default: ``None`` and no-op to the graph)
    Nc                 ó0   — g | ]}t          |¦  «        ¯|‘ŒS © )r>   )Ú.0Úpipes     r   ú
<listcomp>z*apply_shuffle_settings.<locals>.<listcomp>s   s&   € ÐJÐJÐJ˜$Õ/CÀDÑ/IÔ/IÐJ�ÐJÐJÐJr   z«`shuffle=True` was set, but the datapipe does not contain a `Shuffler`. Adding one at the end. Be aware that the default buffer size might not be sufficient for your task.)r   r   ÚwarningsÚwarnr?   r<   )r"   r?   r   Ú	all_pipesÚ	shufflersÚshufflers         r   r   r   a   s®   € ð €Øˆå˜Ñ"Ô"€EÝ# EÑ*Ô*€IØJÐJ )ÐJÑJÔJ€IØð 
˜ð 
ÝŒð[ñ	
ô 	
ð 	
ð ×#Ò#Ñ%Ô%ˆàð
ˆ	ð ð &ð &ˆØ×Ò˜WÑ%Ô%Ð%Ð%à€Or   z�`apply_shuffle_seed` is deprecated since 1.12 and will be removed in the future releases. Please use `apply_random_seed` instead.)ÚcategoryÚrngc                 ó"   — t          | |¦  «        S r   )r   )r"   rL   s     r   r   r   „   s   € õ ˜X sÑ+Ô+Ð+r   c                 óT   — t          | d¦  «        ot          j        | j        ¦  «        S )Nr=   )r&   r'   r(   r=   r)   s    r   Ú_is_random_datapiperO   �   s%   € Ý�8˜ZÑ(Ô(ÐP­WÔ-=¸hÔ>OÑ-PÔ-PÐPr   c                 óö  — t          | ¦  «        }t          |¦  «        }t          ¦   «         }g }|D ]Z}t          |¦  «        |v rŒt	          |¦  «        r7|                     |¦  «         |                     t          |¦  «        ¦  «         Œ[|D ]j}t          t          j	        dt          j
        ¬¦  «                             |¬¦  «                             ¦   «         ¦  «        }|                     |¦  «         Œk| S )a6  
    Traverse the graph of ``DataPipes`` to find random ``DataPipe`` with an API of ``set_seed``.

    Then set the random seed based on the provided RNG to those ``DataPipe``.

    Args:
        datapipe: DataPipe that needs to set randomness
        rng: Random number generator to generate random seeds
    rB   )Údtype)Ú	generator)r   r   r   ÚidrO   r   r   ÚintÚtorchÚemptyÚint64Úrandom_Úitemr=   )r"   rL   r   rH   ÚcacheÚrandom_datapipesrD   Úrandom_seeds           r   r   r   ‘   sú   € õ ˜Ñ"Ô"€EÝ# EÑ*Ô*€Iõ ‰EŒE€EØÐØð  ð  ˆÝˆd‰8Œ8�uÐÐØÝ˜tÑ$Ô$ð 	 Ø×#Ò# DÑ)Ô)Ð)Ø�IŠI•b˜‘h”hÑÔÐøà ð #ð #ˆÝÝŒK˜¥%¤+Ð.Ñ.Ô.×6Ò6ÀÐ6ÑEÔE×JÒJÑLÔLñ
ô 
ˆð 	�Š�kÑ"Ô"Ð"Ð"à€Or   r   ) r'   rF   Útypingr   r   r   r   Útyping_extensionsr   rU   Ú(torch.utils.data.datapipes.iter.shardingr   r	   Útorch.utils.data.graphr
   r   r   Ú__all__r   rT   r   Úboolr*   ÚDEFAULTr   r>   r   ÚFutureWarningr   rO   Ú	Generatorr   rB   r   r   ú<module>rf      s}  ðà €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø (Ð (Ð (Ð (Ð (Ð (à €€€ðð ð ð ð ð ð ð ð IÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hðð ð €ð5˜}ð 5°°h´ð 5ð 5ð 5ð 5ð
Øð
Ø$'¨¤Hð
à	ˆ(„^ð
ð 
ð 
ð 
ð Hð °ð ð ð ð ð 'Ô.ð	%ð %Øð%àð%ð ð%ð
 ð%ð %ð %ð %ðP 8ð °ð ð ð ð ð 37ð ð  Øð Ø!)¨$¤ð àð ð  ð  ð  ðF €ð.àðñ ô ð
, ð ,°ð ,¸ð ,ð ,ð ,ñô ð
,ðQ (ð Q¨tð Qð Qð Qð Qð ð ¨u¬ð À8ð ð ð ð ð ð r   