
    ёi                        S SK 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	  S SK
Jr  S SKJr  S SKJrJr  \	(       a  S SKrS SKJr  S S	KJr  S
rS
q\R.                  \R0                  \R2                  \R4                  \R6                  \R8                  \R:                  /r " S S\5      rSS jr S r!S r"\SS j5       r#\SS j5       r$ SS jr%g)    )annotationsN)ContextDecoratorcontextmanager)TYPE_CHECKING)warn)core)TracerEventType_RecordEvent)Self)_ProfilerResultFc                      \ rS rSr% SrS\S'   S\S'   S\S'   \R                  4     SS	 jjrSS
 jr	        SS jr
SS jrSS jrSrg)RecordEvent0   ay  
Interface for recording a time range by user defined.

Args:
    name (str): Name of the record event.
    event_type (TracerEventType, optional): Optional, default value is
        `TracerEventType.PythonUserDefined`. It is reserved for internal
        purpose, and it is better not to specify this parameter.

Examples:
    .. code-block:: python
        :name: code-example1

        >>> import paddle
        >>> import paddle.profiler as profiler
        >>> # method1: using context manager
        >>> paddle.seed(2023)
        >>> with profiler.RecordEvent("record_add"):
        ...     data1 = paddle.randn(shape=[3])
        ...     data2 = paddle.randn(shape=[3])
        ...     result = data1 + data2
        >>> # method2: call begin() and end()
        >>> record_event = profiler.RecordEvent("record_add")
        >>> record_event.begin()
        >>> data1 = paddle.randn(shape=[3])
        >>> data2 = paddle.randn(shape=[3])
        >>> result = data1 + data2
        >>> record_event.end()

Note:
    RecordEvent will take effect only when :ref:`Profiler <api_paddle_profiler_Profiler>` is on and at the state of `RECORD`.
strnamer	   
event_typez_RecordEvent | Noneeventc                *    Xl         X l        S U l        g N)r   r   r   )selfr   r   s      U/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/profiler/utils.py__init__RecordEvent.__init__V   s    
 	$
    c                &    U R                  5         U $ r   )beginr   s    r   	__enter__RecordEvent.__enter___   s    

r   c                $    U R                  5         g r   )end)r   exc_type	exc_value	tracebacks       r   __exit__RecordEvent.__exit__c   s     	
r   c                    [         (       d  gU R                  [        ;  a$  [        SR                  " [        6 5        SU l        g[        U R                  U R                  5      U l        g)a  
Record the time of beginning.

Examples:

    .. code-block:: python
        :name: code-example2

        >>> import paddle
        >>> import paddle.profiler as profiler
        >>> record_event = profiler.RecordEvent("record_sub")
        >>> record_event.begin()
        >>> paddle.seed(2023)
        >>> data1 = paddle.randn(shape=[3])
        >>> data2 = paddle.randn(shape=[3])
        >>> result = data1 - data2
        >>> record_event.end()
NzVOnly TracerEvent Type in [{}, {}, {}, {}, {}, {},{}]                  can be recorded.)_is_profiler_usedr   _AllowedEventTypeListr   formatr   r
   r   r   s    r   r   RecordEvent.begink   sY    & ! ??"77$$*F+,AC DJ%diiADJr   c                \    U R                   (       a  U R                   R                  5         gg)a  
Record the time of ending.

Examples:

    .. code-block:: python
        :name: code-example3

        >>> import paddle
        >>> import paddle.profiler as profiler
        >>> record_event = profiler.RecordEvent("record_mul")
        >>> record_event.begin()
        >>> paddle.seed(2023)
        >>> data1 = paddle.randn(shape=[3])
        >>> data2 = paddle.randn(shape=[3])
        >>> result = data1 * data2
        >>> record_event.end()
N)r   r!   r   s    r   r!   RecordEvent.end   s    & ::JJNN r   )r   r   r   N)r   r   r   r	   returnNone)r.   r   )r"   ztype[BaseException] | Noner#   zBaseException | Noner$   ztypes.TracebackType | Noner.   r/   )r.   r/   )__name__
__module____qualname____firstlineno____doc____annotations__r	   PythonUserDefinedr   r   r%   r   r!   __static_attributes__ r   r   r   r   0   s    B I
 '6&G&G $ 
	, ( .	
 
B<r   r   c                .    [         R                  " U 5      $ )a&  
Load dumped profiler data back to memory.

Args:
    filename(str): Name of the exported protobuf file of profiler data.

Returns:
    ``ProfilerResult`` object, which stores profiling data.

Examples:
    .. code-block:: python

        >>> # doctest: +REQUIRES(env:GPU)
        >>> import paddle.profiler as profiler
        >>> import paddle
        >>> paddle.device.set_device('gpu')
        >>> with profiler.Profiler(
        ...         targets=[profiler.ProfilerTarget.CPU, profiler.ProfilerTarget.GPU],
        ...         scheduler = (3, 10)) as p:
        ...     for iter in range(10):
        ...         #train()
        ...         p.step()
        >>> p.export('test_export_protobuf.pb', format='pb')
        >>> profiler_result = profiler.load_profiler_result('test_export_protobuf.pb')
)r   load_profiler_result)filenames    r   r:   r:      s    4 $$X..r   c                     [         $ r   )r(   r8   r   r   in_profiler_moder=      s    r   c                     S n [         (       a  g SSKJn  UR                   H=  nUS:w  d  M  [	        X5      n[	        USS 5      c  M&  U " UR
                  5      Ul        M?     Sq g )Nc                F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                    > [        5       (       a*  [        S[        R                  S9   T" U 0 UD6sS S S 5        $ T" U 0 UD6$ ! , (       d  f       g = f)NzOptimization Step)r   )r=   r   r	   Optimization)argskwargsfuncs     r   wrapper;wrap_optimizers.<locals>.optimizer_wrapper.<locals>.wrapper   sU    !! 'O4P4P  00 
 T,V,, s   A
A)	functoolswraps)rD   rE   s   ` r   optimizer_wrapper*wrap_optimizers.<locals>.optimizer_wrapper   s%    			- 
	- r   r   )	optimizer	OptimizerstepT)_has_optimizer_wrappedpaddlerK   __all__getattrrM   )rI   rK   	classnameclassobjects       r   wrap_optimizersrT      sa      &&	#!)7K{FD1=#4[5E5E#F 	 '
 "r   c              #  .  #    X:  a  Sv   g X:X  a*  [         R                  " 5         [         R                  " 5         X:  a  [         R                  " [	        U 5      5        Sv   X:  a  [         R
                  " 5         XS-
  :X  a3  [         R                  " 5         U(       a  [        R                  " 5         ggg! X:  a  [         R
                  " 5         XS-
  :X  a3  [         R                  " 5         U(       a  [        R                  " 5         f f f = f7f)a  
A range profiler interface (not public yet).
Examples:
    .. code-block:: python

        >>> import paddle
        >>> model = Model()
        >>> for i in range(max_iter):
        ...     with paddle.profiler.utils._nvprof_range(i, 10, 20):
        ...         out = model(in)
N   )	r   nvprof_startnvprof_enable_record_eventnvprof_nvtx_pushr   nvprof_nvtx_popnvprof_stopsysexititer_idstartr!   exit_after_profs       r   _nvprof_rangerb      s      |++-!!#g,/=  "Ag
   =  "Ag
  s   DAB; %AD;ADDc              #     #    X:  a  Sv   g  X:  a
  X:  a  Sv   OSv   XS-
  :X  a  U(       a  [         R                  " 5         g g g ! XS-
  :X  a  U(       a  [         R                  " 5         f f f = f7f)NFTrV   )r\   r]   r^   s       r   job_schedule_profiler_rangerd      sk     |JKAg
  7Ag
  s   A3A 'A3(A00A3c                    [         R                  " SU SU 35        [        XX45       nXPR                  l        S S S 5        g ! , (       d  f       g = f)Nz Schedule Profiler start at step z and end at step )logginginford   _engineenable_job_schedule_profiler)modelr_   r`   r!   ra   statuss         r   switch_job_schedule_profilerrl     sM     LL
*5'1B3%H 
%
	5;2
 
 
s   A
A)r;   r   r.   r   )T)&
__future__r   rG   rf   r\   
contextlibr   r   typingr   warningsr   paddle.baser   paddle.base.corer	   r
   typestyping_extensionsr   r   r(   rN   
DataloaderProfileStepForwardBackwardrA   PythonOpr6   r)   r   r:   r=   rT   rb   rd   rl   r8   r   r   <module>rz      s    #   
 7     :&0     %% m" m`/:"6  @  " 15	<r   