
    sgi                     ~    d dl Z d dlZd dlZd dlmZ d dlmZ  ed      Z G d d      Ze e       Z	de
fdZd
d	Zy)    N)import_module)TransformToSymPyExprlarkc                   $    e Zd ZdZddZdefdZy)LarkLaTeXParseraF  Class for converting input `\mathrm{\LaTeX}` strings into SymPy Expressions.
    It holds all the necessary internal data for doing so, and exposes hooks for
    customizing its behavior.

    Parameters
    ==========

    print_debug_output : bool, optional

        If set to ``True``, prints debug output to the logger. Defaults to ``False``.

    transform : bool, optional

        If set to ``True``, the class runs the Transformer class on the parse tree
        generated by running ``Lark.parse`` on the input string. Defaults to ``True``.

        Setting it to ``False`` can help with debugging the `\mathrm{\LaTeX}` grammar.

    grammar_file : str, optional

        The path to the grammar file that the parser should use. If set to ``None``,
        it uses the default grammar, which is in ``grammar/latex.lark``, relative to
        the ``sympy/parsing/latex/lark/`` directory.

    transformer : str, optional

        The name of the Transformer class to use. If set to ``None``, it uses the
        default transformer class, which is :py:func:`TransformToSymPyExpr`.

    Nc                 .   t         j                  j                  t         j                  j                  t              d      }|Et        t         j                  j                  |d      d      5 }|j                         }d d d        n&t        |d      5 }|j                         }d d d        t        j                  |ddddd	d	d
	      | _	        || _
        || _        |t               | _        y  |       | _        y # 1 sw Y   YxY w# 1 sw Y   exY w)Nzgrammar/z
latex.larkzutf-8)encodingearleylatex_stringautoexplicitFT)source_pathparserstartlexer	ambiguitypropagate_positionsmaybe_placeholderskeep_all_tokens)ospathjoindirname__file__openread_larkLarkr   print_debug_outputtransform_exprr   transformer)selfr   	transformgrammar_filer!   grammar_dir_pathflatex_grammars           X/var/www/html/venv/lib/python3.12/site-packages/sympy/parsing/latex/lark/latex_parser.py__init__zLarkLaTeXParser.__init__*   s    77<<(A:Nbggll#3\BWU )YZ !) ) lW5 ) !) jj(   %$  ! 	" #5'35D*}D/) )) )s   /C?D?DDsc                    | j                   r-t        j                  j                  t        j
                         | j                  j                  |      }| j                  snt        j                  j                  d|       t        j                  j                  |       t        j                  j                  |j                                |S | j                   rMt        j                  j                  d|       t        j                  j                  |j                                | j                  j                  |      }| j                   r t        j                  j                  d|       |S )Nzexpression = %szSymPy expression = %s)r   r   loggersetLevelloggingDEBUGr   parser    debugprettyr!   r#   )r"   r*   
parse_treesympy_expressions       r(   doparsezLarkLaTeXParser.doparseG   s    ""LL!!'--0[[&&q)
""LL0!4LLz*LLz0023""LL0!4LLz0023++55jA""LL68HI    )FTNN)__name__
__module____qualname____doc__r)   strr5    r6   r(   r   r      s    <-:   r6   r   r*   c                 N    t         t        d      t        j                  |       S )z
    Experimental LaTeX parser using Lark.

    This function is still under development and its API may change with the
    next releases of SymPy.
    zLark is probably not installed)r   ImportError_lark_latex_parserr5   )r*   s    r(   parse_latex_larkr@   f   s&     }:;;%%a((r6   c                 <   t        | t        j                        r| j                  S t	        | j
                        }|j                  d      }|rt        j                  dd|      }|dk(  }|r|dz   }n|}d}| xs |}|r|t	        |      dz   z  }|rA|ddj                  | j                  D 	cg c]  }	d	|z  t        |	||      z    c}	      z   z  }n7|d
j                  | j                  D 	cg c]  }	t        |	||       c}	      z  }|r|dz  }|S c c}	w c c}	w )N
expressionz^expressionE_ambig    (
 ,))
isinstancer   Tokenvaluer;   data
startswithresubr   children_pretty_print_lark_trees)
treeindent	show_exprrO   is_expris_ambig
new_indentoutput	show_nodeis
             r(   rT   rT   r   s1   $$zztyy>Dool+Gvvnc40 HaZ

F(yI#d)c/!$sw  tA  tA  $BnoC*$47OPQS]_h7i$i  $B  C  C  	C#((X\XeXefST4Q
INfgg#M $Bfs   .D.D
)r   T)r   r.   rQ   sympy.externalr   $sympy.parsing.latex.lark.transformerr   r   r   r?   r;   r@   rT   r<   r6   r(   <module>r`      sM    	  	 ( EfT  T n 	(*	) 	) r6   