
    :)di&                         d dl Z d dlZd dlZd dlmZ  G d de          Z G d d          Z G d de          Z	 G d	 d
e	          Z
dS )    N)logc                   8    e Zd Zed             Zd Zd ZddZdS )CSVFuseTablec                 &   t                      }|                                }d }t          |          D ]\  }} ||                                          }|                    d          st          |          dk    rK	 |                    t                              |                     z# t          $ r}t          d|dz    d|           d }~wt          $ r* t          j                            d|dz    d|             w xY wd }|D ]3}	||	j        k    rd}
|	j        |
|	_        |	j        |	j        z   }
|	j        }4|                                 d }|D ]8}	|	j        dk    r)|t          d|dz    d|	 d	          ||j        |	_        |	}9d
 |D             t'          fdD                       }|D ]r}d}|D ]k}|j        |k    rt          |                    |j        g                    dk    r/|j         d| |_        |j        r|j         d| |_        |dz  }id}ls|D ]I}|j                            dd          |_        |j        r |j                            dd          |_        J|                                 |S )Nc                     t           j                            |           } t          j        d|           }|r&t          d|                    d           d          | S )Nz(?<!\\)\$([A-Za-z_]\w*)zunknown variable '   ')ospath
expandvarsrematch
InputErrorgroup)fms     f/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/efuse/csv_table_parser.pyexpand_varsz*CSVFuseTable.from_csv.<locals>.expand_vars   s[    ""1%%A3Q77A E !Caggajj!C!C!CDDDH    #r   zError at line r   z: zUnexpected error parsing line  z missing field namec                     g | ]	}|j         
S  
field_name.0ps     r   
<listcomp>z)CSVFuseTable.from_csv.<locals>.<listcomp>@   s    +++!+++r   c              3   N   K   | ]}                     |          d k    |V   dS r   Ncountr   nnamess     r   	<genexpr>z(CSVFuseTable.from_csv.<locals>.<genexpr>A   7      @@qU[[^^a-?-?-?-?-?-?@@r   _.)r   
splitlines	enumeratestrip
startswithlenappendFuseDefinitionfrom_csvr   	Exceptionsysstderrwriteefuse_block	bit_start	bit_countverify_duplicate_namer   setintersection	alt_namesreplace)clscsv_contentsreslinesr   line_nolineerrlast_efuse_blockilast_end
last_field
duplicatesdnamei_countr   r&   s                   @r   r2   zCSVFuseTable.from_csv   sL   nn''))	 	 	 'u-- 
	 
	MGT;t$$**,,Ds## s4yyA~~

>224889999 H H H !F'A+!F!F!F!FGGG   
  !W'A+!W!WQU!W!WXXX
   	- 	-A1=00{"&{Q[0H }!!### 
 	 	A|r!!%$N1NNNNN    +#-#8ALJJ ,+s+++@@@@E@@@@@
 	  	 EG 	  	 <5((z..~>>??1DD&'l#>#>W#>#>AL{ A)*&@&@w&@&@qLGGGG	   	< 	<A<//S99AL{ <k11#s;;!!###
s   -B00
D	:C7D	c                    d | D             d D             z  t          fdD                       }t          |          dk    rd}| D ]u}|j        |j        z   }|dk    r^t          |                    |g                    dk    r7d}t          j        d|j         d	|j         d	|j         d	|j	         d
	           v|du rt          d          d S d S )Nc                     g | ]	}|j         
S r   r   r   s     r   r   z6CSVFuseTable.verify_duplicate_name.<locals>.<listcomp>X   s    ,,,!,,,r   c                 B    g | ]}d |v |                     d d          S )r*   r)   )r>   )r   names     r   r   z6CSVFuseTable.verify_duplicate_name.<locals>.<listcomp>Y   s+    JJJTcTkk$,,sC((kkkr   c              3   N   K   | ]}                     |          d k    |V   dS r!   r"   r$   s     r   r'   z5CSVFuseTable.verify_duplicate_name.<locals>.<genexpr>Z   r(   r   r   Fr   T	Field at , z have duplicate field_namezField names must be unique)r;   r/   r   r   r<   r   printr7   r8   r9   r   )selfrJ   fl_errorr   r   r&   s        @r   r:   z"CSVFuseTable.verify_duplicate_nameV   sH   ,,t,,,JJUJJJJ@@@@E@@@@@
 z??aH  \AG3
##J,C,CZL,Q,Q(R(RVW(W(W#HIRAL R RAM R R;R R*++R R R   4 !=>>>    r   c                    | D ]~}d|j         v rsd}|j                             d          d d         D ]N}|dk    r|n|dz   |z   }d}| D ]#}||ur|j        |j        k    r||j         k    rd}$|rt          | d          Od S )Nr*   r   TFz is not found)r   splitr7   r   )rU   r   rP   submissed_nameds         r   check_struct_field_namez$CSVFuseTable.check_struct_field_namej   s     	A 	AAal""<--c223B37 A AC"&"**33$*s2BD"&K! 0 0QJJ ! > > $ 4 4*/K" A(D)?)?)?@@@A	A 	Ar   Nc           	      <   d }d }| D ]}|                     |           |                                  |dk    r|                                  | D ]}| D ]}||ur|j        |j        k    r |||          }|dk    rd|j        v r}d}|j                            d          D ]_}|dk    r|n|dz   |z   }| D ]J}	||	urD|j        |	j        k    r4||	j        k    r) |||	          }|dk    r n|dk    rd	} |||	|           K`d|j        v r ||||           ƌd S )
Nc                     |j         }|j         |j        z   dz
  }| j         }| j         | j        z   dz
  }||cxk    r|k    rn n||cxk    r|k    rn ndS dS ||cxk    r|k    rn ndS ||k    r||k    rdS dS )Nr   included inintersected withwrapsok)r8   r9   )r   r%   leftrightstartends         r   checkz"CSVFuseTable.verify.<locals>.check}   s    ;DK!+-1EKE++a/Cu%%%%%%%%%3''''%'''''(=))s####e#####))}}#w4r   c                     t          d| j         d| j         d| j         d| j         d| d|j         d|j         d|j         d|j                   )NrR   rS    )r   r   r7   r8   r9   )r   r%   states      r   print_errorz(CSVFuseTable.verify.<locals>.print_error   s    0AL 0 0AM 0 0Q[ 0 0;0 0!&0 0)*0 09:0 0;0 0"#+0 0  r   custom_tablerc   r*   r   r`   ra   zout of range)verifyr:   r]   r7   r   rY   )
rU   
type_tablerh   rl   r   r%   rk   rP   rZ   r\   s
             r   rn   zCSVFuseTable.verify|   s   	 	 		 	 	  	! 	!AHHZ    ""$$$''((***  	1 	1A 1 1A::!-1="@"@!E!QKKE}}!,..#%D'(|'9'9#'>'> A A.2bjjssdSj3>N)- !A !AA()

,-MQ],J,J,0AL,@,@05a+0M+A+A,1E-26H-H-H4BE(3Aq%(@(@(@$ AL00$#Aq%000/1	1 	1r   N)__name__
__module____qualname__classmethodr2   r:   r]   rn   r   r   r   r   r      sf        D D [DL? ? ?(A A A$81 81 81 81 81 81r   r   c                   V    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
dd	Zd
 ZdS )r1   c                     d| _         d| _        d| _        d | _        d | _        d | _        d| _        d| _        d| _        d S )Nr      )	r   r   r7   r8   r9   definecommentr=   MAX_BITS_OF_BLOCK)rU   s    r   __init__zFuseDefinition.__init__   sI    
!$r   c                    |dz   }d |                     d          D             }t                      }|d         |_        |                    |d                   |_        |                    |d                   |_        |                    |d                   |_        |j        |j        dk    rt          d	          |d
         
                    d          
                                |_        |xj        d|j         d|j        |j        z   dz
   dz  c_        |                    |j                  |_        |S )zParse a line from the CSVz,,,,c                 6    g | ]}|                                 S r   )r-   )r   r   s     r   r   z+FuseDefinition.from_csv.<locals>.<listcomp>   s     @@@!''))@@@r   ,r   r         NzField bit_count can't be empty   \z (-))rY   r1   r   parse_blockr7   	parse_numr8   parse_bit_countr9   r   rstripry   get_alt_namesr=   )r?   rD   line_w_defaultsfieldsrA   s        r   r2   zFuseDefinition.from_csv   s#    -@@_%:%:3%?%?@@@//&)44fQi00++F1I66= CMQ$6$6=>>>Qi&&t,,3355PCMPPCMCM,IA,MPPPP))#+66
r   c                 <    |dk    rd S |                      |          S )Nr   )	parse_intrU   strvals     r   r   zFuseDefinition.parse_num   s"    R<<4~~f%%%r   c                 T    |dk    r|| _         | j        S |                     |          S )NMAX_BLK_LEN)rx   rz   r   r   s     r   r   zFuseDefinition.parse_bit_count   s/    ]"" DK))>>&)))r   c                 d    	 t          |d          S # t          $ r t          d|           w xY w)Nr   zInvalid field value )int
ValueErrorr   )rU   vs     r   r   zFuseDefinition.parse_int   sG    	9q!99 	9 	9 	97A77888	9s    /c                 |    |dk    rt          d          |                     |                    d                    S )Nr   z(Field 'efuse_block' can't be left empty.	EFUSE_BLK)r   r   lstripr   s     r   r   zFuseDefinition.parse_block   s8    R<<GHHH~~fmmK88999r   c                     | j         t          | d          | j        t          | d          | j        }| j        | j        z   |k    rt          | d| d| j          d          d S )Nzefuse_block field is not setzbit_count field is not setz0The field is outside the boundaries (max_bits = z	) of the z block)r7   ValidationErrorr9   rz   r8   )rU   ro   max_bitss      r   rn   zFuseDefinition.verify   s    #!$(FGGG>!!$(DEEE)>DN*X55!38 3 3*3 3 3   65r   Tc                 4    |du r| j         | j         S | j        S )NT)rx   r9   )rU   check_defines     r   get_bit_countzFuseDefinition.get_bit_count   s$    4DK$;;>!r   c                 ^    t          j        d|          }|r|                    d          S dS )Nz
^\[(.*?)\]r   r   )r   searchr   )rU   ry   results      r   r   zFuseDefinition.get_alt_names   s0    ='22 	#<<??"rr   N)T)rq   rr   rs   r{   rt   r2   r   r   r   r   rn   r   r   r   r   r   r1   r1      s        	% 	% 	%   ["& & &
* * *9 9 9: : :
  " " " "    r   r1   c                        e Zd Z fdZ xZS )r   c                 J    t                                          |           d S rp   )superr{   )rU   e	__class__s     r   r{   zInputError.__init__  s!    r   rq   rr   rs   r{   __classcell__r   s   @r   r   r     s8                r   r   c                        e Zd Z fdZ xZS )r   c                 `    t                                          d|j         d|            d S )NzEntry z
 invalid: )r   r{   r   )rU   r   messager   s      r   r{   zValidationError.__init__  s4    C!,CC'CCDDDDDr   r   r   s   @r   r   r     sA        E E E E E E E E Er   r   )r
   r   r4   esptool.loggerr   listr   r1   RuntimeErrorr   r   r   r   r   <module>r      s    
			 				 



      f1 f1 f1 f1 f14 f1 f1 f1RL L L L L L L L^       
E E E E Ej E E E E Er   