U
    :qLeY                     @   sL  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	 G dd de
Zeedd	d
Zg g dddZG dd de
ZG dd deZG dd deZe e_G dd deZd-eedddZeeeedddZeeeedddZeeedd d!Zeeeedd"d#Zed$d%d&Zeeed'd(d)Zd.eeed*d+d,ZdS )/    )StringIOIllegalStateException)RuleContext)ATN)ATNStatec                   @   sX   e Zd ZdZdZdZeZedddZdd Z	d	d
 Z
dd ZedddZdd ZdS )PredictionContextNi   cachedHashCodec                 C   s
   || _ d S Nr
   )selfr    r   o/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/antlr4/PredictionContext.py__init__4   s    zPredictionContext.__init__c                 C   s   dS Nr   r   r   r   r   r   __len__7   s    zPredictionContext.__len__c                 C   s
   | | j kS r   )EMPTYr   r   r   r   isEmpty;   s    zPredictionContext.isEmptyc                 C   s   |  t| d | jkS Nr	   )getReturnStatelenEMPTY_RETURN_STATEr   r   r   r   hasEmptyPath>   s    zPredictionContext.hasEmptyPathindexc                 C   s   t dd S )Nzillegal!r   r   r   r   r   r   r   A   s    z PredictionContext.getReturnStatec                 C   s   | j S r   r
   r   r   r   r   __hash__D   s    zPredictionContext.__hash__)__name__
__module____qualname__r   r   ZglobalNodeCountidintr   r   r   r   r   r   r   r   r   r   r      s   r   parentreturnStatec                 C   s    | d krt dS t t | |fS )N )hashr$   r   r   r   calculateHashCodeG   s    r)   parentsreturnStatesc                 C   s.   d}t | |D ]\}}t|t||f}q|S r   )zipr(   r)   )r+   r,   hr%   r&   r   r   r   calculateListsHashCodeJ   s    r/   c                   @   s8   e Zd Zdd ZedddZedddZdd	 Zd
S )PredictionContextCachec                 C   s   t  | _d S r   )dictcacher   r   r   r   r   V   s    zPredictionContextCache.__init__)ctxc                 C   s8   |t jkrt jS | j|d }|d k	r*|S || j|< |S r   )r   r   r2   get)r   r3   existingr   r   r   add]   s    

zPredictionContextCache.addc                 C   s   | j |d S r   )r2   r4   )r   r3   r   r   r   r4   f   s    zPredictionContextCache.getc                 C   s
   t | jS r   )r   r2   r   r   r   r   r   i   s    zPredictionContextCache.__len__N)r   r    r!   r   r   r6   r4   r   r   r   r   r   r0   T   s   	r0   c                       st   e Zd ZeeedddZeed fddZdd Zedd	d
Z	edddZ
dd Zdd Zdd Z  ZS )SingletonPredictionContextr$   c                 C   s&   |t jkr| d krtjS t| |S d S r   )r   r   r7   r   r$   r   r   r   createo   s    z!SingletonPredictionContext.createc                    s&   t ||}t | || _|| _d S r   )r)   superr   	parentCtxr&   )r   r%   r&   ZhashCode	__class__r   r   r   w   s    
z#SingletonPredictionContext.__init__c                 C   s   dS r   r   r   r   r   r   r   }   s    z"SingletonPredictionContext.__len__r   c                 C   s   | j S r   )r:   r   r   r   r   	getParent   s    z$SingletonPredictionContext.getParentc                 C   s   | j S r   )r&   r   r   r   r   r      s    z)SingletonPredictionContext.getReturnStatec                 C   sB   | |krdS |d krdS t |ts&dS | j|jko<| j|jkS d S NTF)
isinstancer7   r&   r:   r   otherr   r   r   __eq__   s    
z!SingletonPredictionContext.__eq__c                 C   s   | j S r   r
   r   r   r   r   r      s    z#SingletonPredictionContext.__hash__c                 C   sV   | j d krdnt| j }t|dkr@| j| jkr4dS t| jS nt| jd | S d S )Nr'   r   $ )r:   strr   r&   r   )r   Zupr   r   r   __str__   s    z"SingletonPredictionContext.__str__)r   r    r!   staticmethodr   r#   r8   r   r   r=   r   rB   r   rF   __classcell__r   r   r;   r   r7   m   s   
r7   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )EmptyPredictionContextc                    s   t  d | j d S r   )r9   r   r   r   r;   r   r   r      s    zEmptyPredictionContext.__init__c                 C   s   dS )NTr   r   r   r   r   r      s    zEmptyPredictionContext.isEmptyc                 C   s   | |kS r   r   r@   r   r   r   rB      s    zEmptyPredictionContext.__eq__c                 C   s   | j S r   r
   r   r   r   r   r      s    zEmptyPredictionContext.__hash__c                 C   s   dS )NrC   r   r   r   r   r   rF      s    zEmptyPredictionContext.__str__)	r   r    r!   r   r   rB   r   rF   rH   r   r   r;   r   rI      s
   rI   c                       sh   e Zd Zeed fddZdd Zdd Zedd	d
ZedddZ	dd Z
dd Zdd Z  ZS )ArrayPredictionContextr*   c                    s"   t  t|| || _|| _d S r   )r9   r   r/   r+   r,   )r   r+   r,   r;   r   r   r      s    zArrayPredictionContext.__init__c                 C   s   | j d tjkS r   )r,   r   r   r   r   r   r   r      s    zArrayPredictionContext.isEmptyc                 C   s
   t | jS r   )r   r,   r   r   r   r   r      s    zArrayPredictionContext.__len__r   c                 C   s
   | j | S r   r+   r   r   r   r   r=      s    z ArrayPredictionContext.getParentc                 C   s
   | j | S r   )r,   r   r   r   r   r      s    z%ArrayPredictionContext.getReturnStatec                 C   sJ   | |krdS t |tsdS t| t|kr.dS | j|jkoD| j|jkS d S r>   )r?   rJ   r(   r,   r+   r@   r   r   r   rB      s    
zArrayPredictionContext.__eq__c              
   C   s   |   rdS t }|d tdt| jD ]~}|dkrD|d | j| tjkr`|d q.|t| j|  | j	| d k	r|d |t| j	|  q.|d q.|d |
 W  5 Q R  S Q R X d S )	Nz[][r   z, rC   rD   null])r   r   writeranger   r,   r   r   rE   r+   getvalue)r   bufir   r   r   rF      s"    




zArrayPredictionContext.__str__c                 C   s   | j S r   r
   r   r   r   r   r      s    zArrayPredictionContext.__hash__)r   r    r!   listr   r   r   r#   r=   r   rB   rF   r   rH   r   r   r;   r   rJ      s   
rJ   N)atnouterContextc                 C   sZ   |d krt j}|jd ks"|t jkr(tjS t| |j}| j|j }|jd }t	||j
jS r   )r   r   r:   r    PredictionContextFromRuleContextstatesinvokingStatetransitionsr7   r8   followStatestateNumber)rU   rV   r%   stateZ
transitionr   r   r   rW      s    
rW   abrootIsWildcard
mergeCachec                 C   s   | |kr| S t | tr.t |tr.t| |||S |rNt | tr@| S t |trN|S t | trjt| jg| jg} t |trt|jg|jg}t| |||S r   )r?   r7   mergeSingletonsrI   rJ   r:   r&   mergeArraysr^   r   r   r   merge   s    



re   c           
      C   s  |d k	r@| | |fd }|d k	r$|S | || fd }|d k	r@|S t| ||}|d k	rl|d k	rh||| |f< |S | j|jkrt| j|j||}|| jkr| S ||jkr|S t|| j}|d k	r||| |f< |S d }| |ks| jd k	r| j|jkr| j}|d k	rP| j|jg}| j|jkr$|j| jg}||g}	t|	|}|d k	rL||| |f< |S | j|jg}| j|jg}	| j|jkr|j| jg}|j| jg}	t|	|}|d k	r||| |f< |S d S r   )r4   	mergeRootr&   re   r:   r7   r8   rJ   )
r_   r`   ra   rb   previousmergedr%   ZsingleParentpayloadsr+   r   r   r   rc   4  sV    






rc   )r_   r`   ra   c                 C   s   |r&| t jkrt jS |t jkrt jS nn| t jkr@|t jkr@t jS | t jkrj|jt jg}|jd g}t||S |t jkr| jt jg}| jd g}t||S d S r   )r   r   r&   r   r:   rJ   )r_   r`   ra   ri   r+   r   r   r   rf     s     







rf   c                 C   s  |d k	r@| | |fd }|d k	r$|S | || fd }|d k	r@|S d}d}d}d gt| jt|j  }d gt| }	|t| jk r|t|jk r| j| }
|j| }| j| |j| krH| j| }|tjko|
d ko|d k}|
d k	o|d k	o|
|k}|s|r|
|	|< |||< nt|
|||}||	|< |||< |d7 }|d7 }nT| j| |j| k r~|
|	|< | j| ||< |d7 }n||	|< |j| ||< |d7 }|d7 }qt|t| jk rt|t| jD ]*}| j| |	|< | j| ||< |d7 }qn<t|t|jD ]*}|j| |	|< |j| ||< |d7 }q|t|	k r|dkrvt	|	d |d }|d k	rr||| |f< |S |	d| }	|d| }t
|	|}|| kr|d k	r| || |f< | S ||kr|d k	r||| |f< |S t|	 |d k	r||| |f< |S )Nr   r	   )r4   r   r,   r+   r   r   re   rP   r7   r8   rJ   combineCommonParents)r_   r`   ra   rb   rg   rS   jkZmergedReturnStatesZmergedParentsZa_parentZb_parentpayloadZbothDollarsZax_axZmergedParentprh   r   r   r   rd     s     















rd   rK   c                 C   sb   t  }tdt| D ]$}| | }||d d kr|||< qtdt| D ]}|| |  | |< qHd S r   )r1   rP   r   r4   )r+   ZuniqueParentsrn   r%   r   r   r   rj     s    
rj   )contextcontextCachevisitedc           	         s6     r S | }|d k	r"|S | }|d k	r@|| < |S d}d gt  }tdt|D ]R}t |||}|s| |k	r`|s fddtt D }d}|||< q`|s|   | <  S d }t|dkrtj}n2t|dkrt	
|d  d}nt| j}|| |||< || < |S )NFr   c                    s   g | ]}  |qS r   )r=   ).0rk   ro   r   r   
<listcomp>2  s     z.getCachedPredictionContext.<locals>.<listcomp>Tr	   )r   r4   r   rP   getCachedPredictionContextr=   r6   r   r   r7   r8   r   rJ   r,   )	ro   rp   rq   r5   changedr+   rS   r%   updatedr   rs   r   ru   "  s@    




ru   )ro   nodesrq   c                 C   s   |d krt  }t| ||S |d kr4t }t| ||S | d ksL|| d d k	rP|S || |  ||  tdt| D ]}t| ||| qt|S d S r   )	rT   getAllContextNodesr1   r4   putr6   rP   r   r=   )ro   rx   rq   rS   r   r   r   ry   `  s    
ry   )N)NN)ior   antlr4.error.Errorsr   antlr4.RuleContextr   antlr4.atn.ATNr   antlr4.atn.ATNStater   objectr   r#   r)   r/   r0   r7   rI   r   rJ   rW   boolr1   re   rc   rf   rd   rT   rj   ru   ry   r   r   r   r   <module>   s(   8
1>4a'[>