U
    :qLeV                     @   s   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T d dlT d dlT d dlmZ ed	Zed
ZeegZdZeZG dd deZdS )    )UUID)StringIO)Callable)Token)ATN)ATNType)*)ATNDeserializationOptionsz$AADB8D7E-AEEF-4415-AD2B-8204D6CF042Ez$59627784-3BE5-417A-B9EB-8131A7286089   c                   @   st  e Zd ZdmedddZeedddZedd	d
ZedddZ	dd Z
dd Zdd ZedddZedddZedddZeeeg ef dddZeedddZedd d!Zedd"d#Zedd$d%Zeed&d'd(Zeed)d*d+Zedd,d-Zedd.d/Zdned0d1d2Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< d=d< d>d< d?d< d@d< dAd< dBd< dCd< dDd< dEd< dFd< gZ$eeeeeeeedGdHdIZ%dJd< dKd< dLd< dMd< dNd< dOd< dPd< dQd< dRd< dSd< dTd< dUd< dVd< gZ&eedWdXdYZ'dZZ(d[Z)d\Z*d]Z+d^Z,d_Z-d`Z.daZ/dbd< dcd< ddd< ded< dfd< dgd< dhd< did< gZ0eeedjdkdlZ1dS )oATNDeserializerN)optionsc                 C   s   |d krt j}|| _d S N)r	   ZdefaultOptionsdeserializationOptions)selfr    r   q/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/antlr4/atn/ATNDeserializer.py__init__#   s    zATNDeserializer.__init__)feature
actualUuidc                 C   s(   t |}|dk rdS t |}||kS )Nr   F)SUPPORTED_UUIDSindex)r   r   r   Zidx1Zidx2r   r   r   isFeatureSupported4   s
    

z"ATNDeserializer.isFeatureSupported)datac                 C   s   |  | |   |   |  }| | | | | | g }| ||| j | 	t
| jrr| ||| j | || | | | | | | | | | jjr|jtjkr| | | | |S r   )resetcheckVersion	checkUUIDreadATN
readStates	readRules	readModesreadSetsreadIntr   ADDED_UNICODE_SMPuuid	readInt32	readEdgesreadDecisionsreadLexerActionsmarkPrecedenceDecisions	verifyATNr   generateRuleBypassTransitionsgrammarTyper   PARSER)r   r   atnsetsr   r   r   deserialize;   s,    










zATNDeserializer.deserializec                    s:   dd   fdd|D }t |d |d< || _d| _d S )Nc                 S   s    t | }|dkr|d S |d S )N      i  )ord)cvr   r   r   adjustW   s    z%ATNDeserializer.reset.<locals>.adjustc                    s   g | ]} |qS r   r   ).0r3   r5   r   r   
<listcomp>Z   s     z)ATNDeserializer.reset.<locals>.<listcomp>r   )r2   r   pos)r   r   tempr   r7   r   r   V   s
    zATNDeserializer.resetc                 C   s4   |   }|tkr0tdt| d tt d d S )Nz'Could not deserialize ATN with version  (expected z).)r!   SERIALIZED_VERSION	Exceptionstr)r   versionr   r   r   r   `   s    zATNDeserializer.checkVersionc                 C   s>   |   }|tkr4tdt| d tt d |t|| _d S )Nz%Could not deserialize ATN with UUID: r;   z or a legacy UUID).)readUUIDr   r=   r>   SERIALIZED_UUIDr#   )r   r#   r   r   r   r   e   s     zATNDeserializer.checkUUIDc                 C   s$   |   }t|}|   }t||S r   )r!   r   fromOrdinalr   )r   idxr+   maxTokenTyper   r   r   r   l   s    
zATNDeserializer.readATN)r-   c                 C   sD  g }g }|   }td|D ]}|   }|tjkr<|d  q|   }|dkrPd}| ||}|tjkr~|   }	|||	f n t|t	r|   }
|||
f || q|D ]}|j
|d  |d _q|D ]}|j
|d  |d _q|   }td|D ]}|   }d|j
| _q|   }td|D ]}|   }d|j
| _q$d S )Nr     r0   T)r!   rangeATNStateINVALID_TYPEaddStatestateFactoryLOOP_ENDappend
isinstanceBlockStartStatestatesloopBackStateendState	nonGreedyisPrecedenceRule)r   r-   ZloopBackStateNumbersZendStateNumbersZnstatesistype	ruleIndexsZloopBackStateNumberZendStateNumberpairZnumNonGreedyStatesstateNumberZnumPrecedenceStatesr   r   r   r   r   s>    



zATNDeserializer.readStatesc                 C   s   |   }|jtjkr dg| |_dg| |_td|D ]L}|   }|j| }||j|< |jtjkr6|   }|dkrxtj	}||j|< q6dg| |_
|jD ]*}t|tsq||j
|j< ||j|j _qd S )Nr   rE   )r!   r+   r   LEXERruleToTokenTyperuleToStartStaterG   rP   r   EOFruleToStopStaterN   RuleStopStaterW   	stopState)r   r-   ZnrulesrU   rX   
startStateZ	tokenTypestater   r   r   r      s&    



zATNDeserializer.readRulesc                 C   s6   |   }td|D ]}|   }|j|j|  qd S Nr   )r!   rG   modeToStartStaterM   rP   )r   r-   ZnmodesrU   rX   r   r   r   r      s    zATNDeserializer.readModes)r-   r.   readUnicodec                 C   s~   |   }td|D ]f}t }|| |   }|   }|dkrH|d td|D ]$}	| }
| }|t|
|d  qRqd S )Nr   rF   r0   )r!   rG   IntervalSetrM   addOneaddRange)r   r-   r.   rf   mrU   isetnZcontainsEofji1i2r   r   r   r       s    

zATNDeserializer.readSets)r-   r.   c                 C   s  |   }td|D ]`}|   }|   }|   }|   }|   }	|   }
| ||||||	|
|}|j| }|| q|jD ]v}tdt|jD ]`}|j| }t|tsqd}|j	|j
j jr|jdkr|j
j}t|j|}|j|j
j | qqz|jD ]}t|tr:|jd krtd|jjd k	r2td||j_t|tr~tdt|jD ]$}|j| j
}t|trV||_qVqt|trtdt|jD ]$}|j| j
}t|tr||_qqd S )Nr   rF   IllegalState)r!   rG   edgeFactoryrP   addTransitionlentransitionsrN   RuleTransitionr]   targetrW   rT   
precedenceEpsilonTransitionfollowStater_   rO   rR   r=   rb   PlusLoopbackStatePlusBlockStartStaterQ   StarLoopbackStateStarLoopEntryState)r   r-   r.   ZnedgesrU   srctrgttypearg1arg2arg3transZsrcStaterc   toutermostPrecedenceReturnrv   r   r   r   r%      sN    






zATNDeserializer.readEdgesc                 C   s@   |   }td|D ](}|   }|j| }|j| ||_qd S rd   )r!   rG   rP   decisionToStaterM   decision)r   r-   Z
ndecisionsrU   rX   ZdecStater   r   r   r&      s    
zATNDeserializer.readDecisionsc                 C   s|   |j tjkrx|  }d g| |_td|D ]L}|  }|  }|dkrJd}|  }|dkr^d}| |||}||j|< q*d S )Nr   rE   rF   )r+   r   r[   r!   lexerActionsrG   lexerActionFactory)r   r-   countrU   
actionTypedata1data2lexerActionr   r   r   r'      s    z ATNDeserializer.readLexerActionsc                 C   sZ   t |j}dg| |_td|D ]}|j| d |j|< q td|D ]}| || qDd S )Nr   r0   )rs   r]   r\   rG   rD   generateRuleBypassTransition)r   r-   r   rU   r   r   r   r*     s    
z-ATNDeserializer.generateRuleBypassTransitions)r-   rC   c                 C   sf  t  }||_|| t }||_|| ||_|| ||_d }|j| jrd }|j	D ]$}| 
||r\|}|jjd } qq\|d krtdn
|j| }|j	D ]*}|jD ]}||krq|j|kr||_qq|j| }	t|	j}
|
dkr||	j|
d   |	jd= q|j| t| |t| t }|| |t||j|  |t| d S )Nr   zDCouldn't identify final state of the precedence rule prefix section.r0   rF   )BasicBlockStartStaterW   rJ   BlockEndStaterR   defineDecisionStaterb   r]   rT   rP   stateIsEndStateForrQ   rt   r=   r_   rv   rs   rr   rx   
BasicStateAtomTransitionr\   )r   r-   rC   ZbypassStartZ
bypassStopZexcludeTransitionrR   rc   
transitionr]   r   Z
matchStater   r   r   r     sJ    














z,ATNDeserializer.generateRuleBypassTransition)rc   rC   c                 C   sd   |j |krd S t|tsd S |jt|jd  j}t|ts@d S |jr\t|jd jtr\|S d S d S )Nr0   r   )	rW   rN   r}   rt   rs   rv   LoopEndStateepsilonOnlyTransitionsr`   )r   rc   rC   maybeLoopEndStater   r   r   r   Q  s    


z"ATNDeserializer.stateIsEndStateForc                 C   sh   |j D ]\}t|tsq|j|j jr|jt|jd  j}t|t	r|j
rt|jd jtrd|_qd S )Nr0   r   T)rP   rN   r}   r]   rW   rT   rt   rs   rv   r   r   r`   isPrecedenceDecision)r   r-   rc   r   r   r   r   r(   i  s    


z'ATNDeserializer.markPrecedenceDecisionsc                 C   s  | j jsd S |jD ]}|d kr"q| |jp8t|jdk t|trV| |j	d k	 t|t
r| |j	d k	 | t|jdk t|jd jtr| t|jd jt | |j  n@t|jd jtr| t|jd jt | |j ntdt|tr6| t|jdk | t|jd jt
 t|trR| |j	d k	 t|trn| |jd k	 t|tr| |jd k	 t|tr| |jd k	 t|tr| t|jdkp|jdk q| t|jdkpt|t qd S )Nr0   r1   r   rp   )r   r)   rP   checkConditionr   rs   rt   rN   r{   rQ   r}   rv   StarBlockStartStater   rS   r=   r|   RuleStartStatera   rO   rR   r   rb   DecisionStater   r`   )r   r-   rc   r   r   r   r)   y  s@    

"zATNDeserializer.verifyATN)	conditionc                 C   s   |s|d krd}t |d S )Nrp   )r=   )r   r   messager   r   r   r     s    zATNDeserializer.checkConditionc                 C   s   | j | j }|  jd7  _|S )Nr0   )r   r9   )r   rU   r   r   r   r!     s    zATNDeserializer.readIntc                 C   s   |   }|   }||d> B S )N   )r!   r   lowhighr   r   r   r$     s    zATNDeserializer.readInt32c                 C   s    |   }|   }|d@ |d> B S )Nl        )r$   r   r   r   r   readLong  s    zATNDeserializer.readLongc                 C   s*   |   }|   }|d@ |d> B }t|dS )Nl    @   )int)r   r   )r   r   r   ZallBitsr   r   r   r@     s    zATNDeserializer.readUUIDc                 C   s   d S r   r   )argsr   r   r   <lambda>      zATNDeserializer.<lambda>c                 C   s   t |S r   )rx   r-   r~   r   r   r   r   r.   rv   r   r   r   r     r   c                 C   s"   |dkrt |tj|S t |||S rd   )RangeTransitionr   r^   r   r   r   r   r     s    c                 C   s   t | j| |||S r   )ru   rP   r   r   r   r   r     s    c                 C   s   t ||||dkS rd   )PredicateTransitionr   r   r   r   r     s    c                 C   s   |dkrt |tjS t ||S rd   )r   r   r^   r   r   r   r   r     s    c                 C   s   t ||||dkS rd   )ActionTransitionr   r   r   r   r     s    c                 C   s   t ||| S r   )SetTransitionr   r   r   r   r     s    c                 C   s   t ||| S r   )NotSetTransitionr   r   r   r   r     s    c                 C   s   t |S r   )WildcardTransitionr   r   r   r   r     s    c                 C   s
   t ||S r   )PrecedencePredicateTransitionr   r   r   r   r     s    )r-   typer~   r   r   r   r   r.   c	           
   	   C   s\   |j | }	|t| jks&| j| d kr<tdt| d n| j| ||||||||	S d S )NzThe specified transition type:  is not valid.)rP   rs   edgeFactoriesr=   r>   )
r   r-   r   r~   r   r   r   r   r.   rv   r   r   r   rq     s    
zATNDeserializer.edgeFactoryc                   C   s   d S r   r   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   c                   C   s   t  S r   )r{   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   c                   C   s   t  S r   )TokensStartStater   r   r   r   r     r   c                   C   s   t  S r   )r`   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   c                   C   s   t  S r   )r|   r   r   r   r   r     r   c                   C   s   t  S r   )r}   r   r   r   r   r     r   c                   C   s   t  S r   )rz   r   r   r   r   r     r   c                   C   s   t  S r   )r   r   r   r   r   r     r   )r   rW   c                 C   sP   |t | jks| j| d kr2tdt| d n| j|  }|d k	rL||_|S )NzThe specified state type r   )rs   stateFactoriesr=   r>   rW   )r   r   rW   rX   r   r   r   rK     s    zATNDeserializer.stateFactoryr   r0   r1   r
               c                 C   s   t | S r   )LexerChannelActionr   r   r   r   r   r     r   c                 C   s
   t | |S r   )LexerCustomActionr   r   r   r   r     r   c                 C   s   t | S r   )LexerModeActionr   r   r   r   r     r   c                 C   s   t jS r   )LexerMoreActionINSTANCEr   r   r   r   r     r   c                 C   s   t jS r   )LexerPopModeActionr   r   r   r   r   r     r   c                 C   s   t | S r   )LexerPushModeActionr   r   r   r   r     r   c                 C   s   t jS r   )LexerSkipActionr   r   r   r   r   r     r   c                 C   s   t | S r   )LexerTypeActionr   r   r   r   r     r   )r   r   r   c                 C   sF   |t | jks| j| d kr2tdt| d n| j| ||S d S )Nz The specified lexer action type r   )rs   actionFactoriesr=   r>   )r   r   r   r   r   r   r   r     s    z"ATNDeserializer.lexerActionFactory)N)N)2__name__
__module____qualname__r	   r   r   r   r>   r/   r   r   r   r   r   r   r   r   listr   r   r    r%   r&   r'   r*   r   rH   r   r(   r)   boolr   r!   r$   r   r@   r   rq   r   rK   CHANNELCUSTOMMODEMOREPOP_MODE	PUSH_MODESKIPTYPEr   r   r   r   r   r   r   !   s   
)/
:/	
r   N)r#   r   ior   typingr   antlr4.Tokenr   antlr4.atn.ATNr   antlr4.atn.ATNTyper   antlr4.atn.ATNStateantlr4.atn.Transitionantlr4.atn.LexerAction$antlr4.atn.ATNDeserializationOptionsr	   ZBASE_SERIALIZED_UUIDr"   r   r<   rA   objectr   r   r   r   r   <module>   s   