o
    "j                     @   s   d dl Z d dlZd dlmZ ddlmZ ddlmZmZ ddl	m
Z
 eG dd	 d	ZeG d
d dZdddZdd Ze ZdS )    N)	dataclass   )instrs_info)	Singletonlog   )OpcodeExecutorBasec                   @   s6   e Zd ZU eed< eed< eed< eed< dd ZdS )
Breakpointfilelineco_nameoffsetc                 C   s   t | j| j| j| jfS N)hashr
   r   r   r   self r   l/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/jit/sot/opcode_translator/breakpoint.py__hash__#   s   zBreakpoint.__hash__N)__name__
__module____qualname__str__annotations__intr   r   r   r   r   r	      s   
 r	   c                   @   s   e Zd Zdd Zdd Zdd Zd'dd	Zd
d Zdd Zdd Z	dd Z
dd Zdd Zd(ddZdd Zdd Zdd Zd)dd Zed!d" Zd#d$ Zd%d& ZdS )*BreakpointManagerc                 C   s    t  | _tj| _d| _g | _d S )Nr   )setbreakpointsr   Z
call_stack	executorsactivaterecord_eventr   r   r   r   __init__)   s   
zBreakpointManager.__init__c                 C      | j   d S r   )r    clearr   eventr   r   r   clear_event/      zBreakpointManager.clear_eventc                 C   s   | j | dS )zT
        event in ['All' ,'FallbackError', 'BreakGraphError', 'InnerError']
        N)r    appendr$   r   r   r   	add_event2   s   zBreakpointManager.add_eventNc                 C   s2   t dd| d| d | jt|||| d S )Nr   zadd breakpoint at :
)r   r   addr	   )r   r
   r   Zconamer   r   r   r   r,   8   s   zBreakpointManager.addc                 G   s8   t |ttfs
|g}|D ]}| jjj}| || qdS )zV
        called inside a executor. add a list of line number in current file.
        N)
isinstancelisttuplecur_exe_codeco_filenamer,   )r   linesr   r
   r   r   r   addn<   s   
zBreakpointManager.addnc                 C   r"   r   )r   r#   r   r   r   r   r#   F   r'   zBreakpointManager.clearc                 C   s4   t ||d d | jv rdS t ||||| jv rdS dS )NTF)r	   r   )r   r
   r   r   r   r   r   r   hitI   s
   zBreakpointManager.hitc                 C   s0   t | jD ]\}}||u r|| _ d S qtd)NzNot found executor.)	enumerater   r   RuntimeError)r   exei_er   r   r   locateP   s   zBreakpointManager.locatec                 C   s0   | j dkrd S |  j d8  _ td| jjj d S )Nr   r   current function is: )r   printr0   r1   r   r   r   r   r   upW   s   
zBreakpointManager.upc                 C   s:   | j t| jd krd S |  j d7  _ td| jjj d S )Nr   r<   )r   lenr   r=   r0   r1   r   r   r   r   r   down]   s   zBreakpointManager.downc                 C   sR   |d u r| j }|j|jd  }d| d|jdd|jdd|j d|j d	}|S )
Nr   z[Translate z	]: (line z>3z) z<12 z, stack is r+   )r0   _instructions_lasti_current_lineopnameargval_stack)r   r0   instrmessager   r   r   opcodec   s
   0zBreakpointManager.opcodec                 C   sv   | j D ]5}t|j\}}td|jj d|j d |jj d  td|d    td| 	|  qdS )z6
        display all inline calls: backtrace.
        z  ()z()z-> r   N)
r   inspectgetsourcelinesr1   r=   r2   rD   r   striprJ   )r   r8   r3   _r   r   r   btj   s   
zBreakpointManager.btc                 C   s:   d| j v s
|| j v rtd t| jd | _t  d S d S )NZAllzevent captured.r   )r    r=   r?   r   r   
breakpointr$   r   r   r   on_eventz   s
   
zBreakpointManager.on_eventc                 C   sX   | j | j }t|j\}}|j}d||| d || d < td td| d S )Nz  ^^^^^ HERE  
r   z[31mSource Code is: [0m )r   r   rM   rN   r1   rD   r=   join)r   r0   r3   
start_linecur_liner   r   r   _dis_source_code   s   z"BreakpointManager._dis_source_code   c                 C   sR   t d | j}t |   t d|j  |j}t|j|d |dd}t | dS )z?
        display all instruction code and source code.
        zdisplaying debug info...r+   r   T)Zwant_strN)r=   r0   rX   r1   rC   r   rB   )r   ranger0   lastiZ	instr_strr   r   r   dis   s   zBreakpointManager.disc                 C   s   | j | j }|S r   )r   r   )r   r8   r   r   r   r0      s   zBreakpointManager.cur_exec                 C   s   t d | j  dS )z(
        display sir in a page.
        zdisplaying sir...N)r=   r0   Z	print_sirr   r   r   r   sir   s   zBreakpointManager.sirc                 C   s   t |j}td| dS )z"
        print exception.
        rT   N)	traceback	format_tb__traceback__r=   rU   )r   er3   r   r   r   pe   s   zBreakpointManager.peNNr   )rY   )r   r   r   r!   r&   r)   r,   r4   r#   r5   r;   r>   r@   rJ   rQ   rS   rX   r\   propertyr0   r]   rb   r   r   r   r   r   '   s(    





r   c                 C   s   t | ||| d S r   )BMr,   )r
   r   r   r   r   r   r   add_breakpoint   s   rf   c                 C   s   t |  d S r   )re   r)   )r%   r   r   r   r)      r'   r)   rc   )rM   r^   dataclassesr   Z#opcode_translator.instruction_utilsr   utilsr   r   Zexecutor.opcode_executorr   r	   r   rf   r)   re   r   r   r   r   <module>   s   
 

