U
    :qLe                     @   sX   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ dZG dd deZdS )    )StringIO)Token)escapeWhitespace)RuleNode	ErrorNodeTerminalNodeTree	ParseTreeNc                   @   s   e Zd ZedeeedddZedeeedddZeeddd	Z	eedd
dZ
eeedddZeeedddZeeeedddZeeeeedddZeedddZdS )TreesN)t	ruleNamesrecogc              
   C   s   |d k	r|j }t| ||d}| dkr0|S t |}|d || |d td| D ].}|dkrz|d || ||| qd|d |	 W  5 Q R  S Q R X d S )NFr   ( ))
r   r   getNodeTextgetChildCountr   writerangetoStringTreegetChildgetvalue)clsr   r   r   sbufi r   h/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/antlr4/tree/Trees.pyr      s    




zTrees.toStringTreec                 C   s   |d k	r|j }|d k	rt|trT| dkrH||  d t|  S ||  S t|trft|S t|tr|jd k	r|jj	S |
 }t|tr|j	S t|
 S )Nr   :)r   
isinstancer   getAltNumbergetRuleIndexstrr   r   symboltext
getPayloadr   )r   r   r   r   Zpayloadr   r   r   r   (   s     




zTrees.getNodeTextr   c                    s    fddt d  D S )Nc                    s   g | ]}  |qS r   )r   ).0r   r&   r   r   
<listcomp>@   s     z%Trees.getChildren.<locals>.<listcomp>r   )r   r   )r   r   r   r&   r   getChildren>   s    zTrees.getChildrenc                 C   s.   g }|  }|d k	r*|d| |  }q|S Nr   )	getParentinsert)r   r   	ancestorsr   r   r   getAncestorsE   s    
zTrees.getAncestors)r   ttypec                 C   s   |  ||dS )NTfindAllNodes)r   r   r/   r   r   r   findAllTokenNodesN   s    zTrees.findAllTokenNodes)r   	ruleIndexc                 C   s   |  ||dS )NFr0   )r   r   r3   r   r   r   findAllRuleNodesR   s    zTrees.findAllRuleNodes)r   index
findTokensc                 C   s   g }|  |||| |S )N)_findAllNodes)r   r   r5   r6   nodesr   r   r   r1   V   s    zTrees.findAllNodes)r   r5   r6   r8   c                 C   s   ddl m} |r2t|tr2|jj|krT|| n"|sTt||rT|j|krT|| td|	 D ]}| 
||||| qbd S )Nr   )ParserRuleContext)antlr4.ParserRuleContextr9   r   r   r#   typeappendr3   r   r   r7   r   )r   r   r5   r6   r8   r9   r   r   r   r   r7   \   s    

zTrees._findAllNodesc                 C   s4   |g}t d| D ]}|| || q|S r*   )r   r   extenddescendantsr   )r   r   r8   r   r   r   r   r>   j   s    zTrees.descendants)NN)NN)__name__
__module____qualname__classmethodr   listParserr   r   r)   r.   r	   intr2   r4   boolr1   r7   r>   r   r   r   r   r
      s$   r
   )ior   antlr4.Tokenr   antlr4.Utilsr   antlr4.tree.Treer   r   r   r   r	   rD   objectr
   r   r   r   r   <module>	   s
   