§
    ÷óÉj½D  ã            	       ó¶  — U d dl Z d dlmZmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/  ede0e1ef         ¬¦  «        Z2dZ3dZ4e5e6d<    G d„ d¦  «        Z7 G d„ de-¦  «        Z8 G d„ d ¦  «        Z9d!ed"efd#„Z:d$eeef         d"e;eeej<        f         ee0e1ef                  f         fd%„Z=d&ej<        d'e0e1ef         d"efd(„Z>d)e5d*ed"dfd+„Z?d$e@d"e5fd,„ZAd-ed"efd.„ZB eBejC        ¦  «        e_C        dS )/é    N)Ú	GeneratorÚIteratorÚMapping)Údeepcopy)ÚpartialÚwraps)Ú
MethodType)ÚAnyÚCallableÚOptionalÚTypeVarÚUnionÚoverload)Úis_overridden)Úapply_to_collection)ÚTensor)Únn)ÚOptimizedModule)Ú_IncompatibleKeys)Ú	Optimizer)Ú
DataLoader)Úoverride)Ú	Precision)ÚStrategy)Úmove_data_to_device)Ú_set_sampler_epoch)Ú_DeviceDtypeModuleMixin)ÚOptimizableÚT_destination)Úbound)Útraining_stepÚvalidation_stepÚ	test_stepÚpredict_stepFÚ_in_fabric_backwardc            	       óÆ   — e Zd Zddededeee                  ddfd„Ze	defd„¦   «         Z
deeef         fd„Zd	eeef         ddfd
„Zddee         defd„Zdedefd„ZdS )Ú_FabricOptimizerNÚ	optimizerÚstrategyÚ	callbacksÚreturnc                 ó’   — || _         || _        |pg | _        t          d|j        j        z   | j        |j        fi ¦  «        | _        dS )aˆ  FabricOptimizer is a thin wrapper around the :class:`~torch.optim.Optimizer` that delegates the optimizer
        step calls to the strategy.

        The underlying wrapped optimizer object can be accessed via the property :attr:`optimizer`.

        Args:
            optimizer: The optimizer to wrap
            strategy: Reference to the strategy for handling the optimizer step

        ÚFabricN)Ú
_optimizerÚ	_strategyÚ
_callbacksÚtypeÚ	__class__Ú__name__)Úselfr(   r)   r*   s       ú|/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/lightning_fabric/wrappers.pyÚ__init__z_FabricOptimizer.__init__5   sK   € ð $ˆŒØ!ˆŒØ#˜/ rˆŒå˜h¨Ô)<Ô)EÑEÈÌÐXaÔXkÐGlÐnpÑqÔqˆŒˆˆó    c                 ó   — | j         S ©N)r.   ©r4   s    r5   r(   z_FabricOptimizer.optimizerF   s
   € àŒÐr7   c                 ó@   — | j                              | j        ¦  «        S r9   )r/   Úget_optimizer_stater(   r:   s    r5   Ú
state_dictz_FabricOptimizer.state_dictJ   s   € ØŒ~×1Ò1°$´.ÑAÔAÐAr7   r=   c                 ó:   — | j                              |¦  «         d S r9   )r(   Úload_state_dict)r4   r=   s     r5   r?   z _FabricOptimizer.load_state_dictM   s   € ØŒ×&Ò& zÑ2Ô2Ð2Ð2Ð2r7   Úclosurec                 óD  — |�d|ini }t          | j        d¦  «        r,t          | j        j        t          ¦  «        r| j        j        }n| j        } | j        j        |fi |¤Ž}| j        D ]4}t          |dd ¦  «        }t          |¦  «        r || j        |¬¦  «         Œ5|S )Nr@   ÚmodelÚon_after_optimizer_step)r)   r(   )
Úhasattrr/   Ú
isinstancerB   r   r(   Úoptimizer_stepr0   ÚgetattrÚcallable)r4   r@   Úkwargsr(   ÚoutputÚcallbackÚhooks          r5   Ústepz_FabricOptimizer.stepP   sÍ   € Ø)0Ð)<�)˜WÐ%Ð%À"ˆÝ�4”> 7Ñ+Ô+ð 	'µ
¸4¼>Ô;OÕQ\Ñ0]Ô0]ð 	'àœÔ,ˆIˆIàœˆIØ.�”Ô.Øð
ð 
àð
ð 
ˆð œð 	Cð 	CˆHÝ˜8Ð%>ÀÑEÔEˆDÝ˜‰~Œ~ð CØ�˜dœn¸	ÐBÑBÔBÐBøØˆr7   Úitemc                 ó,   — t          | j        |¦  «        S r9   )rG   r.   ©r4   rN   s     r5   Ú__getattr__z_FabricOptimizer.__getattr__a   s   € Ý�t”¨Ñ-Ô-Ð-r7   r9   )r3   Ú
__module__Ú__qualname__r   r   r   Úlistr   r6   Úpropertyr(   ÚdictÚstrr   r=   r?   r
   rM   rQ   © r7   r5   r'   r'   4   s(  € € € € € ðrð r )ð r°xð rÈHÐUYÐZbÔUcÔLdð rÐptð rð rð rð rð" ð˜9ð ð ð ñ „XððB˜D  f Ô-ð Bð Bð Bð Bð3¨$¨s°F¨{Ô*;ð 3Àð 3ð 3ð 3ð 3ðð ˜H XÔ.ð ¸#ð ð ð ð ð". ð .¨ð .ð .ð .ð .ð .ð .r7   r'   c                   ó:  ‡ — e Zd Z	 d%dej        dedeej                 ddfˆ fd„Zedej        fd„¦   «         Z	e
ded	edefd
„¦   «         Zedddœdedededefd„¦   «         Zedddœdededeeef         fd„¦   «         Ze
	 d&dee         dededeeeef                  fd„¦   «         Ze
	 d'deeef         ded	edefd„¦   «         Zdeeef         ddfd„Zdedefd„Zdededefd„Zdedefd „Ze
d!edefˆ fd"„¦   «         Ze
ded#eddfˆ fd$„¦   «         Zˆ xZ S )(Ú_FabricModuleNÚforward_moduler)   Úoriginal_moduler+   c                 óº   •— t          ¦   «                              ¦   «          || _        |€|n|| _        || _        t          t          ¦  «        | _        d| _        dS )a   The FabricModule is a thin wrapper around the :class:`torch.nn.Module` and handles precision / autocast
        automatically for the forward pass.

        The underlying wrapped module can be accessed via the property :attr:`module`.

        Args:
            forward_module: The module to wrap the ``forward`` method on.
            strategy: Reference to the strategy for handling precision etc.
            original_module: The original, unmodified module as passed into the
                :meth:`lightning_fabric.fabric.Fabric.setup` method. This is needed when attribute lookup
                on this wrapper should pass through to the original module.

        NT)	Úsuperr6   Ú_forward_moduleÚ_original_moduler/   ÚsetÚ_LIGHTNING_MODULE_STEP_METHODSÚ_forward_methodsÚ_fabric_module_initialized)r4   r[   r)   r\   r2   s       €r5   r6   z_FabricModule.__init__f   sZ   ø€ õ  	‰Œ×ÒÑÔÐØ-ˆÔØ2AÐ2I  ÈˆÔØ!ˆŒÝ #Õ$BÑ CÔ CˆÔØ*.ˆÔ'Ð'Ð'r7   c                 ó   — | j         p| j        S r9   )r`   r_   r:   s    r5   Úmodulez_FabricModule.module}   s   € àÔ$Ð<¨Ô(<Ð<r7   ÚargsrI   c                 ó&  — | j         j        }|                     ||f¦  «        \  }}|                     ¦   «         5   | j        |i |¤Ž}ddd¦  «         n# 1 swxY w Y   |                     |¦  «        }t          |t          | j        ¬¦  «         |S )ziCasts all inputs to the right precision and handles autocast for operations in the module forward method.N©ÚdtypeÚfunction)	r/   Ú	precisionÚconvert_inputÚforward_contextr_   Úconvert_outputr   r   Ú_register_backward_hook)r4   rg   rI   rl   rJ   s        r5   Úforwardz_FabricModule.forward�   sÙ   € ð ”NÔ,ˆ	Ø ×.Ò.°°f¨~Ñ>Ô>‰ˆˆfà×&Ò&Ñ(Ô(ð 	;ð 	;Ø)�TÔ)¨4Ð:°6Ð:Ð:ˆFð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð ×)Ò)¨&Ñ1Ô1ˆå˜F­&¸4Ô;WÐXÑXÔXÐXØˆs   »AÁAÁA.)ÚprefixÚ	keep_varsÚdestinationrr   rs   c                ó   — d S r9   rX   ©r4   rt   rr   rs   s       r5   r=   z_FabricModule.state_dict�   s   € ØtwÐtwr7   c                ó   — d S r9   rX   )r4   rr   rs   s      r5   r=   z_FabricModule.state_dict’   s   € ØY\ÐY\r7   Ú Fc                 ó<   — | j                              |||¬¦  «        S )N)rt   rr   rs   )r`   r=   rv   s       r5   r=   z_FabricModule.state_dict•   s-   € ð Ô$×/Ò/Ø#ØØð 0ñ 
ô 
ð 	
r7   Tr=   Ústrictc                 ó,   —  | j         j        d||dœ|¤ŽS )N)r=   rz   rX   )r`   r?   )r4   r=   rz   rI   s       r5   r?   z_FabricModule.load_state_dictŸ   s)   € ð 5ˆtÔ$Ô4ÐdÀ
ÐSYÐdÐdÐ]cÐdÐdÐdr7   Úmethodc           	      óÒ  — t          |t          t          f¦  «        s$t          dt	          |¦  «        j        › �¦  «        ‚t          |t          ¦  «        r|n|j        }|dk    rt          d¦  «        ‚t          t          | j        |d¦  «        t          ¦  «        s0t          d|› dt	          | j        ¦  «        j        › d|› d�¦  «        ‚| j
                             |¦  «         dS )	z]Mark a method as a 'forward' method to prevent it bypassing the strategy wrapper (e.g., DDP).z(Expected a method or a string, but got: rq   z>You cannot mark the forward method itself as a forward method.NzYou marked 'z' as a forward method, but `ú.z$` does not exist or is not a method.)rE   r	   rW   Ú	TypeErrorr1   r3   Ú
ValueErrorrG   r`   ÚAttributeErrorrc   Úadd)r4   r|   Únames      r5   Úmark_forward_methodz!_FabricModule.mark_forward_method¥   sý   € å˜&¥:­sÐ"3Ñ4Ô4ð 	`ÝÐ^ÅtÈFÁ|Ä|ÔG\Ð^Ð^Ñ_Ô_Ð_Ý# F­CÑ0Ô0ÐEˆvˆv°f´oˆØ�9ÒÐÝÐ]Ñ^Ô^Ð^Ý�' $Ô"7¸¸tÑDÔDÅjÑQÔQð 	Ý ð.˜tð .ð .ÅÀdÔF[ÑA\ÔA\ÔAeð .ð .Ðhlð .ð .ð .ñô ð ð 	Ô×!Ò! $Ñ'Ô'Ð'Ð'Ð'r7   Úmethod_namec                 ó¨   ‡ ‡‡‡— ‰dk    sJ ‚‰ j         j        Šdt          dt          dt          fˆˆˆ fd„Šdt          dt          dt          fˆ ˆfd„}|S )Nrq   rg   rI   r+   c                  óV   •— ‰‰j         _        t          ‰j         ‰¦  «        } || i |¤ŽS r9   )r`   rq   rG   )rg   rI   r|   r…   Úoriginal_forwardr4   s      €€€r5   Úwrapped_forwardzC_FabricModule._redirection_through_forward.<locals>.wrapped_forward·   s7   ø€ ð -=ˆDÔ!Ô)å˜TÔ2°KÑ@Ô@ˆFØ�6˜4Ð* 6Ð*Ð*Ð*r7   c                  ó6   •— ‰‰j         _         ‰j        | i |¤ŽS r9   )r`   rq   )rg   rI   r4   r‰   s     €€r5   Úcall_forward_modulezG_FabricModule._redirection_through_forward.<locals>.call_forward_moduleÂ   s%   ø€ à,;ˆDÔ!Ô)Ø�4”< Ð0¨Ð0Ð0Ð0r7   )r`   rq   r
   )r4   r…   r‹   rˆ   r‰   s   `` @@r5   Ú_redirection_through_forwardz*_FabricModule._redirection_through_forward³   s    øøøø€ Ø˜iÒ'Ð'Ð'Ð'ØÔ0Ô8Ðð	+¥3ð 	+µ#ð 	+½#ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð	1¥sð 	1µcð 	1½cð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð
 #Ð"r7   rƒ   c                 ó¨   ‡ ‡‡‡‡— dŠdt           dt           ddfˆfd„Št          ‰¦  «        dt           dt           dt           fˆˆˆˆˆ fd	„¦   «         }|S )
zŸTracks whether any submodule in ``self._original_module`` was called during the execution of ``method`` by
        registering forward hooks on all submodules.FÚ_Ú__r+   Nc                  ó   •— dŠd S )NTrX   )rŽ   r�   Úmodule_calleds     €r5   rL   zA_FabricModule._wrap_method_with_module_call_tracker.<locals>.hookÎ   s   ø€ à ˆMˆMˆMr7   rg   rI   c            	      ó:  •— g }‰
j                              ¦   «         D ]*}|                     |                     ‰¦  «        ¦  «         Œ+ ‰| i |¤Ž}‰r0t	          dt          ‰
j         ¦  «        j        › d‰	› d‰	›d�¦  «        ‚|D ]}|                     ¦   «          Œ|S )NzYou are calling the method `r~   z ()` from outside the model. To avoid issues with the currently selected strategy, explicitly mark it as a forward method with `fabric_model.mark_forward_method(z)` after `fabric.setup()`.)r`   ÚmodulesÚappendÚregister_forward_hookÚRuntimeErrorr1   r3   Úremove)rg   rI   Úhandlesrf   rJ   ÚhandlerL   r|   r‘   rƒ   r4   s         €€€€€r5   Ú_wrapped_methodzL_FabricModule._wrap_method_with_module_call_tracker.<locals>._wrapped_methodÒ   sä   ø€ àˆGØÔ/×7Ò7Ñ9Ô9ð Cð C�Ø—’˜v×;Ò;¸DÑAÔAÑBÔBÐBÐBà�V˜TÐ, VÐ,Ð,ˆFàð Ý"ðqµ4¸Ô8MÑ3NÔ3NÔ3Wð qð qÐZ^ð qð qàNRðqð qð qñô ð ð
 "ð  ð  �Ø—’‘”��ØˆMr7   )r
   r   )r4   r|   rƒ   rš   rL   r‘   s   ``` @@r5   Ú%_wrap_method_with_module_call_trackerz3_FabricModule._wrap_method_with_module_call_trackerÉ   s¢   øøøøø€ ð ˆð	!•Sð 	!¥ð 	!¨ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!õ 
ˆv‰Œð	¥3ð 	µ#ð 	½#ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Œð	ð" Ðr7   Útensorc                 óà   ‡ — |j         s|S t          d‰ j        t          ¬¦  «        }t	          ˆ fd„dD ¦   «         ¦  «        }t          t          |p|¦  «        }|                     |¦  «         |S )NÚbackward©Úparentc              3   óZ   •K  — | ]%}t          |‰j        j        t          ¬ ¦  «        V — Œ&dS )rŸ   N)r   r/   rl   r   )Ú.0r|   r4   s     €r5   ú	<genexpr>z8_FabricModule._register_backward_hook.<locals>.<genexpr>ë   sK   øè è € ð !
ð !
àõ ˜& $¤.Ô":Å9ÐMÑMÔMð!
ð !
ð !
ð !
ð !
ð !
r7   )Úpre_backwardrž   Úpost_backward)Úrequires_gradr   r/   r   Úanyr   Ú_backward_hookÚregister_hook)r4   rœ   Ústrategy_requiresÚprecision_requiresrL   s   `    r5   rp   z%_FabricModule._register_backward_hookæ   s‘   ø€ ØÔ#ð 	ØˆMå)¨*°d´nÍXÐVÑVÔVÐÝ ð !
ð !
ð !
ð !
àGð!
ñ !
ô !
ñ 
ô 
Ðõ •~Ð(9Ð(OÐ=OÑQÔQˆØ×Ò˜TÑ"Ô"Ð"Øˆr7   rN   c                 óª  •— |dk    r.|| j         v r%| j        | j        k    r|                      |¦  «        S 	 t	          ¦   «                              |¦  «        S # t          $ rp t	          ¦   «                              d¦  «        }t          ||¦  «        }t          j	        |¦  «        r&| j        | j        k    r|  
                    ||¦  «        }|cY S w xY w)Nrc   r`   )rc   r_   r`   rŒ   r^   rQ   r�   rG   ÚinspectÚismethodr›   )r4   rN   r\   Úattrr2   s       €r5   rQ   z_FabricModule.__getattr__ó   sé   ø€ ð Ð&Ò&Ð&Ø˜Ô-Ð-Ð-ØÔ$¨Ô(=Ò=Ð=ð ×4Ò4°TÑ:Ô:Ð:ð	õ ‘7”7×&Ò& tÑ,Ô,Ð,øÝð 	ð 	ð 	å#™gœg×1Ò1Ð2DÑEÔEˆOÝ˜?¨DÑ1Ô1ˆDåÔ Ñ%Ô%ð N¨$Ô*>À$ÔBWÒ*WÐ*WØ×AÒAÀ$ÈÑMÔM�ØˆKˆKˆKð	øøøs   · A ÁA7CÃCÚvaluec                 ób  •— t          | dd¦  «        s$t          ¦   «                              ||¦  «         d S | j        }t	          ||¦  «        }|t          | ¦  «        v }|s|st          |||¦  «         d S |rt          |||¦  «         |r$t          ¦   «                              ||¦  «         d S d S )Nrd   F)rG   r^   Ú__setattr__r`   rD   ÚdirÚsetattr)r4   rƒ   r°   r\   Úoriginal_has_attrÚfabric_has_attrr2   s         €r5   r²   z_FabricModule.__setattr__
  s×   ø€ å�tÐ9¸5ÑAÔAð 	Ý‰GŒG×Ò  eÑ,Ô,Ð,ØˆFð Ô/ˆÝ# O°TÑ:Ô:Ðð ¥# d¡)¤)Ð+ˆà!ð 	 _ð 	Ý�O T¨5Ñ1Ô1Ð1ØˆFð
 ð 	2Ý�O T¨5Ñ1Ô1Ð1àð 	-Ý‰GŒG×Ò  eÑ,Ô,Ð,Ð,Ð,ð	-ð 	-r7   r9   )Nrx   F)T)!r3   rR   rS   r   ÚModuler   r   r6   rU   rf   r   r
   rq   r   r   rW   Úboolr=   rV   r   r   r?   r   r	   r„   r   rŒ   r›   r   rp   rQ   r²   Ú__classcell__)r2   s   @r5   rZ   rZ   e   s  ø€ € € € € àdhð/ð /Ø œið/Ø3;ð/ØNVÐWYÔW`ÔNað/à	ð/ð /ð /ð /ð /ð /ð. ð=˜œ	ð =ð =ð =ñ „Xð=ð ð˜Sð ¨Cð °Cð ð ð ñ „Xðð ØFIÐ]`ÐwÐwÐw¨ÐwÀÐwÐVZÐwÐerÐwÐwÐwñ „XØwàØ*-ÀÐ\Ð\Ð\ CÐ\¸$Ð\ÈÈcÐSVÈhÌÐ\Ð\Ð\ñ „XØ\àà_dð
ð 
Ø# MÔ2ð
ØCFð
ØX\ð
à	�$�s˜C�x”.Ô	!ð
ð 
ð 
ñ „Xð
ð à<@ðeð eØ! # s (Ô+ðeØ59ðeØLOðeà	ðeð eð eñ „Xðeð
(¨%°
¸C°Ô*@ð (ÀTð (ð (ð (ð (ð#¸ð #Àð #ð #ð #ð #ð,¸Hð ÈCð ÐT\ð ð ð ð ð:¨fð ¸ð ð ð ð ð ð ð ¨ð ð ð ð ð ñ „Xðð, ð- ð -¨Cð -°Dð -ð -ð -ð -ð -ñ „Xð-ð -ð -ð -ð -r7   rZ   c                   ó²   — e Zd Zd	dedeej                 ddfd„Zedeej                 fd„¦   «         Zde	fd„Z
deee         eeddf         f         fd„ZdS )
Ú_FabricDataLoaderNÚ
dataloaderÚdevicer+   c                 ón   — | j                              |j         ¦  «         || _        || _        d| _        dS )a¾  The FabricDataLoader is a wrapper for the :class:`~torch.utils.data.DataLoader`. It moves the data to the
        device automatically if the device is specified.

        Args:
            dataloader: The dataloader to wrap
            device: The device to which the data should be moved. By default the device is `None` and no data
                transfers will be made (identical behavior as :class:`~torch.utils.data.DataLoader`).

        r   N)Ú__dict__ÚupdateÚ_dataloaderÚ_deviceÚ_num_iter_calls)r4   r¼   r½   s      r5   r6   z_FabricDataLoader.__init__&  s:   € ð 	Œ×Ò˜ZÔ0Ñ1Ô1Ð1Ø%ˆÔØˆŒØ ˆÔÐÐr7   c                 ó   — | j         S r9   )rÂ   r:   s    r5   r½   z_FabricDataLoader.device5  s
   € àŒ|Ðr7   c                 ó*   — t          | j        ¦  «        S r9   )ÚlenrÁ   r:   s    r5   Ú__len__z_FabricDataLoader.__len__9  s   € Ý�4Ô#Ñ$Ô$Ð$r7   c              #   óæ   K  — t          | j        | j        ¦  «         | xj        dz  c_        | j        €t	          | j        ¦  «        E d {V —† d S | j        D ]}t          || j        ¦  «        V — Œd S )Né   )r   rÁ   rÃ   rÂ   Úiterr   rP   s     r5   Ú__iter__z_FabricDataLoader.__iter__<  sš   è è € õ 	˜4Ô+¨TÔ-AÑBÔBÐBØÐÔ Ñ!ÐÔàŒ<ÐÝ˜DÔ,Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-àÔ(ð >ð >�Ý)¨$°´Ñ=Ô=Ð=Ð=Ð=Ð=ð>ð >r7   r9   )r3   rR   rS   r   r   Útorchr½   r6   rU   ÚintrÇ   r   r   r
   r   rË   rX   r7   r5   r»   r»   %  sÇ   € € € € € ð!ð ! :ð !°xÀÄÔ7Mð !ÐY]ð !ð !ð !ð !ð ð˜ ¤Ô.ð ð ð ñ „Xðð%˜ð %ð %ð %ð %ð>˜% ¨¤¨y¸¸dÀD¸Ô/IÐ IÔJð >ð >ð >ð >ð >ð >r7   r»   Ú
collectionr+   c                 ó*  — dt           t          t          t          f         dt           t          j        t          t          f         fd„}t          t          t          g}|                     t          ¦  «         t          | t          |¦  «        |¬¦  «        S )NÚobjr+   c                 óþ   — t          t          | ¦  «        d         x}t          ¦  «        rt          |j        ¦  «        d         S t          | t          ¦  «        r| j        S t          | t          ¦  «        r| j        S | S ©Nr   )rE   Ú_unwrap_compiledrZ   r_   r'   r(   r»   rÁ   )rÐ   Ú	unwrappeds     r5   Ú_unwrapz _unwrap_objects.<locals>._unwrapK  s{   € õ Õ#3°CÑ#8Ô#8¸Ô#;Ð;�i½]ÑKÔKð 	BÝ# IÔ$=Ñ>Ô>¸qÔAÐAÝ�cÕ+Ñ,Ô,ð 	!Ø”=Ð Ý�cÕ,Ñ-Ô-ð 	#Ø”?Ð"Øˆ
r7   ri   )r   rZ   r'   r»   r   r·   r   r   r”   r   r   Útuple)rÎ   rÕ   Útypess      r5   Ú_unwrap_objectsrØ   J  s   € ð	Ý•=Õ"2Õ4EÐEÔFð	å	�rŒy�)¥ZÐ/Ô	0ð	ð 	ð 	ð 	õ Õ,Õ.?Ð@€EØ	‡L‚L•Ñ!Ô!Ð!å˜zµ°u±´ÈÐPÑPÔPÐPr7   rÐ   c                 óŠ   — t          | t          ¦  «        r+t          | dd¦  «        x}€t          d¦  «        ‚| j        |fS | dfS )z¯Removes the :class:`torch._dynamo.OptimizedModule` around the object if it is wrapped.

    Use this function before instance checks against e.g. :class:`_FabricModule`.

    Ú_compile_kwargsNz…Failed to determine the arguments that were used to compile the module. Make sure to import lightning before `torch.compile` is used.)rE   r   rG   r–   Ú	_orig_mod)rÐ   Úcompile_kwargss     r5   rÓ   rÓ   \  s^   € õ �#•Ñ'Ô'ð -Ý% cÐ+<¸dÑCÔCÐCˆNÐLÝð=ñô ð ð Œ}˜nÐ,Ð,Ø�ˆ9Ðr7   rf   rÜ   c                 ó&   — t          j        | fi |¤ŽS r9   )rÌ   Úcompile)rf   rÜ   s     r5   Ú_to_compiledrß   l  s   € ÝŒ=˜Ð2Ð2 >Ð2Ð2Ð2r7   Úrequires_backwardrŽ   c                 ó:   — | rt           st          d¦  «        ‚d S d S )NzwThe current strategy and precision selection requires you to call `fabric.backward(loss)` instead of `loss.backward()`.)r%   r–   )rà   rŽ   s     r5   r¨   r¨   p  s=   € Øð 
Õ!4ð 
Ýð-ñ
ô 
ð 	
ð
ð 
ð 
ð 
r7   c                 ój   — t          | ¦  «        \  } }t          | t          t          t          f¦  «        S )aZ  Checks if an object was set up by Fabric.

    A :class:`~torch.nn.Module` may be wrapped by a :class:`_FabricModule`, a :class:`~torch.optim.Optimizer`
    may be wrapped by a :class:`_FabricOptimizer`, or a :class:`~torch.utils.data.DataLoader` may be wrapped by
    :class:`_FabricDataLoader`.

    Args:
        obj: The object to test.

    )rÓ   rE   rZ   r'   r»   )rÐ   rŽ   s     r5   Ú
is_wrappedrã   x  s.   € õ ˜cÑ"Ô"�F€CˆÝ�c�MÕ+;Õ=NÐOÑPÔPÐPr7   Ú
compile_fnc                 óh   ‡ — t          ‰ ¦  «        dt          dt          dt          fˆ fd„¦   «         }|S )aZ  Wraps the ``torch.compile`` function and captures the compile arguments.

    We extract the compile arguments so that we can reapply ``torch.compile`` in ``Fabric.setup()`` with the
    same arguments as the user passed to the original call. The arguments get stored in a dictionary
    ``_compile_kwargs`` on the returned compiled module.

    rg   rI   r+   c                  ó¦   •— | r t          | d         t          j        ¦  «        s ‰| i |¤ŽS | d         } ‰|fi |¤Ž}t          |¦  «        |_        |S rÒ   )rE   r   r·   r   rÚ   )rg   rI   rB   Úcompiled_modelrä   s       €r5   Ú_capturez)_capture_compile_kwargs.<locals>._capture’  sm   ø€ àð 	/�: d¨1¤g­r¬yÑ9Ô9ð 	/à�:˜tÐ. vÐ.Ð.Ð.à�Q”ˆØ#˜ EÐ4Ð4¨VÐ4Ð4ˆÝ)1°&Ñ)9Ô)9ˆÔ&ØÐr7   )r   r
   )rä   rè   s   ` r5   Ú_capture_compile_kwargsré   ‡  sR   ø€ õ ˆ:ÑÔð�ð ¥sð ­sð ð ð ð ð ñ Ôðð €Or7   )Dr­   Úcollections.abcr   r   r   Úcopyr   Ú	functoolsr   r   r×   r	   Útypingr
   r   r   r   r   r   rÌ   Úlightning_utilitiesr   Ú#lightning_utilities.core.apply_funcr   r   r   Útorch._dynamor   Útorch.nn.modules.moduler   Útorch.optimr   Útorch.utils.datar   Útyping_extensionsr   Úlightning_fabric.pluginsr   Úlightning_fabric.strategiesr   Úlightning_fabric.utilitiesr   Úlightning_fabric.utilities.datar   Ú-lightning_fabric.utilities.device_dtype_mixinr   Ú lightning_fabric.utilities.typesr   rV   rW   r   rb   r%   r¸   Ú__annotations__r'   rZ   r»   rØ   rÖ   r·   rÓ   rß   r¨   Úobjectrã   ré   rÞ   rX   r7   r5   ú<module>rý      sÊ  ðð €€€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø -Ð -Ð -Ð -Ð -Ð -Ø CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &à .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø :Ð :Ð :Ð :Ð :Ð :Ø >Ð >Ð >Ð >Ð >Ð >Ø QÐ QÐ QÐ QÐ QÐ QØ 8Ð 8Ð 8Ð 8Ð 8Ð 8à�˜¨t°C¸°H¬~Ð>Ñ>Ô>€Ø!bÐ à!Ð �TÐ !Ð !Ñ !ð..ð ..ð ..ð ..ð ..ñ ..ô ..ð ..ðb}-ð }-ð }-ð }-ð }-Ð+ñ }-ô }-ð }-ð@">ð ">ð ">ð ">ð ">ñ ">ô ">ð ">ðJQ ð Q¨ð Qð Qð Qð Qð$˜%  _Ð 4Ô5ð ¸%ÀÀcÈ2Ì9ÀnÔ@UÐW_Ð`dÐehÐjmÐemÔ`nÔWoÐ@oÔ:pð ð ð ð ð 3˜œð 3°D¸¸c¸´Nð 3Àð 3ð 3ð 3ð 3ð
 dð 
°ð 
¸ð 
ð 
ð 
ð 
ðQ�Fð Q˜tð Qð Qð Qð Qð¨ð °Xð ð ð ð ð2 (Ð'¨¬Ñ6Ô6€„€€r7   