§
    OŠtj®
  ã                   ól   — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZ  G d„ de¦  «        Zd„ ZdS )	aƒ  
This module implements the functionality to take any Python expression as a
string and fix all numbers and other things before evaluating it,
thus

1/2

returns

Integer(1)/Integer(2)

We use the ast module for this. It is well documented at docs.python.org.

Some tips to understand how this works: use dump() to get a nice
representation of any node. Then write a string of what you want to get,
e.g. "Integer(1)", parse it, dump it and you'll see that you need to do
"Call(Name('Integer', Load()), [node], [], None, None)". You do not need
to bother with lineno and col_offset, just call fix_missing_locations()
before returning the node.
é    )ÚBasic)ÚSympifyError)ÚparseÚNodeTransformerÚCallÚNameÚLoadÚfix_missing_locationsÚConstantÚTuplec                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )Ú	Transformc                 óJ   — t          j        | ¦  «         || _        || _        d S )N)r   Ú__init__Ú
local_dictÚglobal_dict)Úselfr   r   s      úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/parsing/ast_parser.pyr   zTransform.__init__   s(   € ÝÔ  Ñ&Ô&Ð&Ø$ˆŒØ&ˆÔÐÐó    c           	      óV  — t          |j        t          ¦  «        r:t          t	          t          dt          ¦   «         ¦  «        |gg ¬¦  «        ¦  «        S t          |j        t          ¦  «        r:t          t	          t          dt          ¦   «         ¦  «        |gg ¬¦  «        ¦  «        S |S )NÚInteger©ÚfuncÚargsÚkeywordsÚFloat)Ú
isinstanceÚvalueÚintr
   r   r   r	   Úfloat)r   Únodes     r   Úvisit_ConstantzTransform.visit_Constant#   s£   € Ý�d”j¥#Ñ&Ô&ð 	/Ý(­µ4¸	Å4Á6Ä6Ñ3JÔ3JØ˜¨"ð*.ñ *.ô *.ñ /ô /ð /å˜œ
¥EÑ*Ô*ð 	/Ý(­µ4¸ÅÁÄÑ3HÔ3HØ˜¨"ð*.ñ *.ô *.ñ /ô /ð /àˆr   c           	      ól  — |j         | j        v r|S |j         | j        v r@| j        |j                  }t          |t          t
          f¦  «        st          |¦  «        r|S n|j         dv r|S t          t          t          dt          ¦   «         ¦  «        t          |j         ¦  «        gg ¬¦  «        ¦  «        S )N)ÚTrueÚFalseÚSymbolr   )Úidr   r   r   r   ÚtypeÚcallabler
   r   r   r	   r   )r   r!   Úname_objs      r   Ú
visit_NamezTransform.visit_Name,   s¼   € ØŒ7�d”oÐ%Ð%ØˆKØŒW˜Ô(Ð(Ð(ØÔ'¨¬Ô0ˆHå˜(¥U­D MÑ2Ô2ð µh¸xÑ6HÔ6Hð Ø�ðàŒWÐ)Ð)Ð)ØˆKÝ$¥T­t°H½d¹f¼fÑ/EÔ/EÝ˜tœwÑ'Ô'Ð(°2ð&7ñ &7ô &7ñ 8ô 8ð 	8r   c                 ó  ‡ — ˆ fd„|j         j         D ¦   «         }‰                      |j        ¦  «        }t          t	          dt          ¦   «         ¦  «        t          |t          ¦   «         ¦  «        |gg ¬¦  «        }t          |¦  «        S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )Úvisit)Ú.0Úargr   s     €r   ú
<listcomp>z*Transform.visit_Lambda.<locals>.<listcomp>:   s#   ø€ Ð:Ð:Ð: C�—
’
˜3‘”Ð:Ð:Ð:r   ÚLambdar   )r   r/   Úbodyr   r   r	   r   r
   )r   r!   r   r4   Úns   `    r   Úvisit_LambdazTransform.visit_Lambda9   s}   ø€ Ø:Ð:Ð:Ð:¨4¬9¬>Ð:Ñ:Ô:ˆØ�zŠz˜$œ)Ñ$Ô$ˆÝ•d˜8¥T¡V¤VÑ,Ô,Ý˜�d™fœfÑ%Ô% tÐ,°rð;ñ ;ô ;ˆå$ QÑ'Ô'Ð'r   N)Ú__name__Ú
__module__Ú__qualname__r   r"   r+   r6   r.   r   r   r   r      sP   € € € € € ð'ð 'ð 'ð
ð ð ð8ð 8ð 8ð(ð (ð (ð (ð (r   r   c                 óT  — i }t          d|¦  «         	 t          |                      ¦   «         d¬¦  «        }n-# t          $ r  t	          dt          | ¦  «        z  ¦  «        ‚w xY wt          ||¦  «                             |¦  «        }t          |dd¦  «        }t          |||¦  «        S )z³
    Converts the string "s" to a SymPy expression, in local_dict.

    It converts all numbers to Integers before feeding it to Python and
    automatically creates Symbols.
    zfrom sympy import *Úeval)ÚmodezCannot parse %s.z<string>)
Úexecr   ÚstripÚSyntaxErrorr   Úreprr   r/   Úcompiler;   )Úsr   r   ÚaÚes        r   Ú
parse_exprrE   @   s°   € ð €KÝÐ	 Ñ,Ô,Ð,ð9Ý�!—'’'‘)”) &Ð)Ñ)Ô)ˆˆøÝð 9ð 9ð 9ÝÐ-µ°Q±´Ñ7Ñ8Ô8Ð8ð9øøøå�*˜kÑ*Ô*×0Ò0°Ñ3Ô3€AÝ��:˜vÑ&Ô&€AÝ��; 
Ñ+Ô+Ð+s	   ”#8 ¸*A"N)Ú__doc__Úsympy.core.basicr   Úsympy.core.sympifyr   Úastr   r   r   r   r	   r
   r   r   r   rE   r.   r   r   ú<module>rJ      sÝ   ððð ð* #Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð"(ð "(ð "(ð "(ð "(�ñ "(ô "(ð "(ðH,ð ,ð ,ð ,ð ,r   