
    RЦi?              O       N   S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
JrJrJr  SSKrSSKrSSKrSSKJrJr  SS	KJrJr  SS
KJrJr  SSKJr  SSKJr  SSKJ r   \RB                  " \"5      r#S r$S r% " S S5      r&SIS jr'SSSSSSSSSSSSSSSSSSS\\SSSSSSSS\RP                  \RR                  " S5      SSSSS4$S\\\4   S\\*\\*\*4   \\*\*\*4   4   S\*S\+S \+S!\,S"\-S#\*S$\+S%\\-   S&\\\,\,4      S'\\\,\,4      S(\,S)\,S*\,S+\\,   S,\,S-\,S.\\-   S/\*S0\*S1\-S2\\,S34   S4\\,S34   S5\*S6\+S7\\,   S8\\-   S9\\*   S:\\
   S;\+S<\+S=\R\                  S>\RR                  S?\+S@\+SA\+SB\-SC\+4NSD jjr/ " SE SF\R`                  Rb                  Rd                  5      r3 " SG SH\45      r5g)Ja  Loader Factory, Fast Collate, CUDA Prefetcher

Prefetcher and Fast Collate inspired by NVIDIA APEX example at
https://github.com/NVIDIA/apex/commit/d5e2bb4bdeedd27b1dfaf5bb2b24d6c000dee9be#diff-cf86c282ff7fba81fad27a559379d5bf

Hacked together by / Copyright 2019, Ross Wightman
    N)suppress)partial)repeat)CallableOptionalTupleUnion   )IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)IterableImageDatasetImageDataset)OrderedDistributedSamplerRepeatAugSampler)RandomErasing)FastCollateMixup)create_transformc           	      N   [        U S   [        5      (       d   e[        U 5      n[        U S   S   [        5      (       Ga,  [        U S   S   [        R                  5      n[        U S   S   5      nX-  n[
        R                  " U[
        R                  S9n[
        R                  " U/U S   S   S   R                  Q7[
        R                  S9n[        U5       H  n[        X   S   5      U:X  d   e[        U5       H`  nX   S   XWX-  -   '   U(       a/  XgX-  -   ==   [
        R                  " X   S   U   5      -  ss'   MG  XgX-  -   ==   X   S   U   -  ss'   Mb     M     Xe4$ [        U S   S   [        R                  5      (       a  [
        R                  " U  V	s/ s H  oS   PM	     sn	[
        R                  S9n[        U5      U:X  d   e[
        R                  " U/U S   S   R                  Q7[
        R                  S9n[        U5       H(  nXg==   [
        R                  " X   S   5      -  ss'   M*     Xe4$ [        U S   S   [
        R                  5      (       a  [
        R                  " U  V	s/ s H  oS   PM	     sn	[
        R                  S9n[        U5      U:X  d   e[
        R                  " U/U S   S   R                  Q7[
        R                  S9n[        U5       H  nXg   R                  X   S   5        M     Xe4$  es  sn	f s  sn	f )zcA fast collation function optimized for uint8 images (np array or torch) and int64 targets (labels)r   )dtyper
   )
isinstancetuplelennpndarraytorchzerosint64shapeuint8range
from_numpytensorTensorcopy_)
batch
batch_sizeis_npinner_tuple_sizeflattened_batch_sizetargetsr"   ijbs
             O/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/data/loader.pyfast_collater/      s   eAh&&&&UJ%(1+u%% 58A;

3uQx{+)<++2%++F2JU1Xa[^5I5IJRWR]R]^z"Aux{#'7777+,.3hqkAN*+q~-.%2B2B58A;q>2RR.q~-.%(1+a.@. - # 	E!HQK	,	,,,e4e!e4EKKH7|z)))j=58A;+<+<=U[[Qz"AI))%(1+66I #	E!HQK	.	.,,e4e!e4EKKH7|z)))j=58A;+<+<=U[[Qz"AIOOEHQK( #u  5  5s   'LL"c                 <   [        U [        [        45      (       d  [        [        X5      5      n U $ [	        U 5      U:w  aE  [
        R                  " U 5      R                  5       nU4U-  n [        R                  SU  S35        U $ [	        U 5      U:X  d   S5       eU $ )Nz@Pretrained mean/std different shape than model, using avg value .z-normalization stats must match image channels)
r   r   listr   r   r   meanitem_loggerwarning)xnx_means      r.   adapt_to_chsr:   D   s    a%''&, H 
Q1"IMZ[\Z]]^_` H 1v{KKK{H    c                   `   \ rS rSr\\S\R                  " S5      SSSSSS	4
S
\R                  R                  R                  S\\S4   S\\S4   S\S\R                  S\\R                     S\S\S\S\S\4S jjrS rS r\S 5       r\S 5       r\S 5       r\R2                  S 5       rSrg)PrefetchLoaderP      cudaNF        constr
   r   loaderr3   .stdchannelsdevice	img_dtypefp16re_probre_modere_countre_num_splitsc                    [        X$5      n[        X45      nSUSS4nXl        XPl        U(       a  [        R                  nU=(       d    [        R
                  U l        [        R                  " U Vs/ s H  oS-  PM	     snXVS9R                  U5      U l	        [        R                  " U Vs/ s H  oS-  PM	     snXVS9R                  U5      U l
        US:  a  [        UU	U
UUS9U l        OS U l        UR                  S:H  =(       a    [        R                  R                  5       U l        UR                  S:H  =(       a    [        R"                  R                  5       U l        g s  snf s  snf )Nr
      )rF   r   rA   )probabilitymode	max_count
num_splitsrF   r@   npu)r:   rC   rF   r   float16float32rG   r"   viewr3   rD   r   random_erasingtyper@   is_availableis_cudarS   is_npu)selfrC   r3   rD   rE   rF   rG   rH   rI   rJ   rK   rL   normalization_shaper7   s                 r.   __init__PrefetchLoader.__init__R   s0    D+3) (Aq1I"3emmLL"#dWd#FEEITJ]E^ 		<<!"cWc"6DDHDI\D] 	R<"/#"(#D #'D{{f,J1H1H1JkkU*Guyy/E/E/G $"s   2E).E.c              #     #    SnU R                   (       aJ  [        R                  R                  U R                  S9n[        [        R                  R                  US9nOcU R                  (       aJ  [        R                  R                  U R                  S9n[        [        R                  R                  US9nOS n[        nU R                   GH[  u  pEU" 5          UR                  U R                  SS9nUR                  U R                  SS9nUR                  U R                  5      R                  U R                  5      R                  U R                   5      nU R"                  b  U R#                  U5      nS S S 5        U(       d  WW4v   OSnUb  U R                   (       a7  [        R                  R%                  U R                  S9R'                  U5        OGU R                  (       a6  [        R                  R%                  U R                  S9R'                  U5        UnUnGM^     WW4v   g ! , (       d  f       N= f7f)NT)rF   )stream)rF   non_blockingF)rZ   r   r@   StreamrF   r   ra   r[   rS   r   rC   torG   sub_r3   div_rD   rW   current_streamwait_stream)r\   firstra   stream_context
next_inputnext_targetinputtargets           r.   __iter__PrefetchLoader.__iter__{   s    <<ZZ&&dkk&:F$UZZ%6%6vFN[[YY%%T[[%9F$UYY%5%5fENF%N'+{{#J!']]$++D]Q
)nnDKKdnS']]4>>:??		JOOPTPXPXY
&&2!%!4!4Z!@J " Vm#!<<JJ--T[[-AMMfU[[II,,DKK,@LLVTE F+ (3. Vm+ "!s    CIB H6<B:I6
I	 Ic                 ,    [        U R                  5      $ N)r   rC   r\   s    r.   __len__PrefetchLoader.__len__   s    4;;r;   c                 .    U R                   R                  $ rr   )rC   samplerrs   s    r.   rw   PrefetchLoader.sampler       {{"""r;   c                 .    U R                   R                  $ rr   )rC   datasetrs   s    r.   r{   PrefetchLoader.dataset   ry   r;   c                     [        U R                  R                  [        5      (       a   U R                  R                  R                  $ g)NFr   rC   
collate_fnr   mixup_enabledrs   s    r.   r   PrefetchLoader.mixup_enabled   s3    dkk,,.>??;;))777r;   c                     [        U R                  R                  [        5      (       a  XR                  R                  l        g g rr   r~   )r\   r7   s     r.   r   r      s0    dkk,,.>??34KK""0 @r;   )rF   rG   rZ   r[   rC   r3   rW   rD   )__name__
__module____qualname____firstlineno__r   r   r   rF   utilsdata
DataLoaderr   floatintr   r   boolstrr^   ro   rt   propertyrw   r{   r   setter__static_attributes__ r;   r.   r=   r=   P   s9   
 '<%9#(<<#7/3"!"'HKK$$//'H s
#'H ucz"	'H
 'H LL'H  ,'H 'H 'H 'H 'H 'HR#J  # # # #   5 5r;   r=   allc                    [         R                  R                  R                  5       nUR                  U :X  d   e[        U[        5      (       aW  U" U5      n[        R                  " U5        [         R                  " U5        [        R                  R                  US-  5        g US;   d   eUS:X  a-  [        R                  R                  UR                  S-  5        g g )Nl    )r   partr   )r   r   r   get_worker_infoidr   r   randomseedmanual_seedr   )	worker_idworker_seedingworker_infor   s       r.   _worker_initr      s    ++""224K>>Y&&&.(++k*D$
		t{+,000 U"IINN;++{;< #r;   FrA   rB   g      ?g?bilinearr@   Tr{   
input_sizer&   is_trainingno_augrI   rJ   rK   re_splittrain_crop_modescaleratiohflipvflipcolor_jittercolor_jitter_probgrayscale_probgaussian_blur_probauto_augmentnum_aug_repeatsnum_aug_splitsinterpolationr3   .rD   num_workersdistributedcrop_pct	crop_modecrop_border_pixelsr   
pin_memoryrH   rG   rF   use_prefetcheruse_multi_epochs_loaderpersistent_workersr   tf_preprocessingc'                    Sn'U(       a  U=(       d    Sn'[        U40 SU_SU_SU	_SU
_SU_SU_S	U_S
U_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU'_SU&_SU"_SUS:  _6U l        [        U [        5      (       a  U R	                  US9  Sn(U(       a  [        U [
        R                  R                  R                  5      (       dY  U(       aF  U(       a  [        U US9n(OM[
        R                  R                  R                  R                  U 5      n(O[        U 5      n(OUS:X  d   S5       eUc;  U"(       a  [        O-[
        R                  R                  R                  R                  n[
        R                  R                  R                   n)U#(       a  ["        n)[%        U[        U [
        R                  R                  R                  5      (       + =(       a    U(SL =(       a    UUU(UUU['        [(        U%S 9U$S!9	n* U)" U 40 U*D6n+U"(       a(  U(       a	  U(       d  UOS#n-[/        U+UUUS   U!UU U-UUU'S$9n+U+$ ! [*         a$  n,U*R-                  S"5        U)" U 40 U*D6n+ Sn,A,NZSn,A,ff = f)%a	  

Args:
    dataset: The image dataset to load.
    input_size: Target input size (channels, height, width) tuple or size scalar.
    batch_size: Number of samples in a batch.
    is_training: Return training (random) transforms.
    no_aug: Disable augmentation for training (useful for debug).
    re_prob: Random erasing probability.
    re_mode: Random erasing fill mode.
    re_count: Number of random erasing regions.
    re_split: Control split of random erasing across batch size.
    scale: Random resize scale range (crop area, < 1.0 => zoom in).
    ratio: Random aspect ratio range (crop ratio for RRC, ratio adjustment factor for RKR).
    hflip: Horizontal flip probability.
    vflip: Vertical flip probability.
    color_jitter: Random color jitter component factors (brightness, contrast, saturation, hue).
        Scalar is applied as (scalar,) * 3 (no hue).
    color_jitter_prob: Apply color jitter with this probability if not None (for SimlCLR-like aug
    grayscale_prob: Probability of converting image to grayscale (for SimCLR-like aug).
    gaussian_blur_prob: Probability of applying gaussian blur (for SimCLR-like aug).
    auto_augment: Auto augment configuration string (see auto_augment.py).
    num_aug_repeats: Enable special sampler to repeat same augmentation across distributed GPUs.
    num_aug_splits: Enable mode where augmentations can be split across the batch.
    interpolation: Image interpolation mode.
    mean: Image normalization mean.
    std: Image normalization standard deviation.
    num_workers: Num worker processes per DataLoader.
    distributed: Enable dataloading for distributed training.
    crop_pct: Inference crop percentage (output size / resize size).
    crop_mode: Inference crop mode. One of ['squash', 'border', 'center']. Defaults to 'center' when None.
    crop_border_pixels: Inference crop border of specified # pixels around edge of original image.
    collate_fn: Override default collate_fn.
    pin_memory: Pin memory for device transfer.
    fp16: Deprecated argument for half-precision input dtype. Use img_dtype.
    img_dtype: Data type for input image.
    device: Device to transfer inputs and targets to.
    use_prefetcher: Use efficient pre-fetcher to load samples onto device.
    use_multi_epochs_loader:
    persistent_workers: Enable persistent worker processes.
    worker_seeding: Control worker random seeding at init.
    tf_preprocessing: Use TF 1.0 inference preprocessing for testing model ports.

Returns:
    DataLoader
r      r   r   r   r   r   r   r   r   r   r   r   r   r   r3   rD   r   r   r   rI   rJ   rK   rL   r   r   separate)r   N)num_repeatszORepeatAugment not currently supported in non-distributed or IterableDataset use)r   )	r&   shuffler   rw   r   r   	drop_lastworker_init_fnr   r   rA   )
r3   rD   rE   rF   rH   rG   rI   rJ   rK   rL   )r   	transformr   r   set_loader_cfgr   r   r   IterableDatasetr   r   DistributedSamplerr   r/   
dataloaderdefault_collater   MultiEpochsDataLoaderdictr   r   	TypeErrorpopr=   ).r{   r   r&   r   r   rI   rJ   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   rD   r   r   r   r   r   r   r   rH   rG   rF   r   r   r   r   r   rL   rw   loader_classloader_argsrC   eprefetch_re_probs.                                                 r.   create_loaderr      s   n M&+!(  (	
     " , & . " $   !" #$ %& .'( )* +, -. $/0 *12 &34  !#5G: '/00 	;7G:gu{{/?/?/O/OPP*7P++**66II'R 08G!#v%vv#%3\9I9I9T9T9d9d
;;##..L,w(8(8(H(HIImgY]ombm|NK-
K6g55 &1&7b]$'
 M'  6,-g556s   
	I 
I2I--I2c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )r   i}  c                    > [         TU ]  " U0 UD6  SU l        U R                  c  [	        U R
                  5      U l        O[	        U R                  5      U l        SU l        [         TU ]  5       U l        g )NFT)superr^   _DataLoader__initializedbatch_sampler_RepeatSamplerrw   ro   iterator)r\   argskwargs	__class__s      r.   r^   MultiEpochsDataLoader.__init__  sc    $)&)(-%%)$,,7DL!/0B0B!CD(,%(*r;   c                     U R                   c  [        U R                  5      $ [        U R                   R                  5      $ rr   )r   r   rw   rs   s    r.   rt   MultiEpochsDataLoader.__len__  s2    $($6$6$>s4<< cCHZHZHbHbDccr;   c              #   p   #    [        [        U 5      5       H  n[        U R                  5      v   M     g 7frr   )r    r   nextr   )r\   r+   s     r.   ro   MultiEpochsDataLoader.__iter__  s'     s4y!At}}%% "s   46)r   r   r   rw   )	r   r   r   r   r^   rt   ro   r   __classcell__)r   s   @r.   r   r   }  s    +d& &r;   r   c                   $    \ rS rSrSrS rS rSrg)r   i  z;Sampler that repeats forever.

Args:
    sampler (Sampler)
c                     Xl         g rr   rw   )r\   rw   s     r.   r^   _RepeatSampler.__init__  s    r;   c              #   N   #     [        U R                  5       S h  vN   M   N7frr   )iterrw   rs   s    r.   ro   _RepeatSampler.__iter__  s"     DLL))) )s   %#%r   N)r   r   r   r   __doc__r^   ro   r   r   r;   r.   r   r     s    *r;   r   )r   )6r   loggingr   
contextlibr   	functoolsr   	itertoolsr   typingr   r   r   r	   r   torch.utils.datanumpyr   	constantsr   r   r{   r   r   distributed_samplerr   r   rW   r   mixupr   transforms_factoryr   	getLoggerr   r5   r/   r:   r=   r   rU   rF   r   r   r   r   r   r   r   r   r   r   objectr   r   r;   r.   <module>r      sJ        3 3    B 7 L ) # 0


H
%$N	e5 e5P=( ")-/3/3!-1 "$&&* '"7!5!$(#',0)- !&$||F3#(-#'#!&Or|%99:r#uS#Xc3m0DDEr r 	r
 r r r r r "#r eUl+,r eUl+,r r r r  $E?!r" #r$ "%r& sm'r( )r* +r, -r. E3J/r0 5#:1r2 3r4 5r6 5/7r8 C=9r: %SM;r< X&=r> ?r@ ArB ;;CrD ErF GrH "&IrJ !KrL MrN Orj&EKK,,77 &(*V *r;   