U
    	-e%K                     @   s  d dl mZmZmZ d dlmZmZmZmZm	Z	 d dl
m
Z
 d dlZd dlZd dlZd dlmZ d dlmZ deiZeeeed  eeZeesteeeeZeedZeed	Zd
ZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&e'dZ(e'dZ)e'dZ*e'dZ+e'dZ,e'dZ-e'dZ.e'dZ/d d! Z0d"d# Z1e2 d$fd%d&Z3e2 dfd'd(Z4G d)d* d*ej5Z6e6 Z7d+d, Z8d-d. Z9d/d0 Z:d1d2 Z;d3d4 Z<d5d6 Z=d7d8 Z>d9d: Z?d;d< Z@dS )=    )walkseppardir)splitjoinabspathexistsisfile)globN)raises_test_this_file_encodingr   binZexamplesz/File contains trailing whitespace: %s, line %s.z.File contains an implicit import: %s, line %s.z2File contains tabs instead of spaces: %s, line %s.z:File contains carriage returns at end of line: %s, line %sz+File contains string exception: %s, line %sz,File contains generic exception: %s, line %sz:File contains old-style raise statement: %s, line %s, "%s"z-File does not end with a newline: %s, line %sz/File ends with more than 1 newline: %s, line %sz6Function should start with 'test_' or '_': %s, line %sz.This is a duplicate test function: %s, line %sz3File contains assignments to self/cls: %s, line %s.z&File contains '.func is': %s, line %s.z+File contains bare expression: %s, line %s.z(^\s*(>>> )?(\.\.\. )?from .* import .*\*z9^\s*(>>> )?(\.\.\. )?raise(\s+(\'|\")|\s*(\(\s*)+(\'|\"))z=^\s*(>>> )?(\.\.\. )?raise(\s+Exception|\s*(\(\s*)+Exception)z1^\s*(>>> )?(\.\.\. )?raise((\s*\(\s*)|\s+)\w+\s*,z$^def\s+(?!(_|test))[^(]*\(\s*\)\s*:$z^def\s+test_.*:$z.*[/\\]test_.*\.py$z\.\s*func\s+isc                 C   s|   t | t |   }| ||d  dkr6| d| }n8| |d d }| d| |dt |t |    }| |k S )z{Returns True if there are tabs in the leading whitespace of a line,
    including the whitespace of docstring code samples.   )z...z>>>N)lenlstrip
expandtabs)sncheckZsmore r   f/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/testing/tests/test_code_quality.pytab_in_leading7   s    (r   c                    s   dd t | jD }g }|D ]}|jD ]}t|t js:q(tdd |jD rPq(|jdkr\q(|jjsfq(|jjd j	 t 
|D ]l}t|t jr~|jD ]T}t|t jr|j kr|| qt|t jrt fdd|jD r|| qq~q(q|S )zReturns a list of "bad" assignments: if there are instances
    of assigning to the first argument of the class method (except
    for staticmethod's).
    c                 S   s   g | ]}t |tjr|qS r   )
isinstanceastClassDef).0r   r   r   r   
<listcomp>H   s      z)find_self_assignments.<locals>.<listcomp>c                 s   s$   | ]}t |tjr|jd kV  qdS )staticmethodNr   r   Nameid)r   dr   r   r   	<genexpr>O   s    z(find_self_assignments.<locals>.<genexpr>__new__r   c                 3   s$   | ]}t |tjr|j kV  qd S Nr   )r   qZ	first_argr   r   r#   ^   s    )r   parsebodyr   FunctionDefanyZdecorator_listnameargsargr   Assigntargetsr    r!   appendTupleelts)r   tbadcr   mar   r'   r   find_self_assignmentsC   s2    


r9   z*.pyc                 C   s6   | sdS t | D ] \}}}ttt|||| qdS )z
    Checks all files in the directory tree (with base_path as starting point)
    with the file_check function provided, skipping files that contain
    any of the strings in the set provided by exclusions.
    N)r   check_filesr
   r   )	base_path
file_check
exclusionspatternrootdirsfilesr   r   r   check_directory_treee   s    rB   c                    s\   | sdS | D ]J t  rt s"qt fdd|D r:q|dksNt| r|  qdS )z
    Checks all files with the file_check function provided, skipping files
    that contain any of the strings in the set provided by exclusions.
    Nc                 3   s   | ]}| kV  qd S r%   r   )r   exfnamer   r   r#   {   s     zcheck_files.<locals>.<genexpr>)r   r	   r+   rematch)rA   r<   r=   r>   r   rD   r   r:   q   s    r:   c                   @   s    e Zd ZdZdd Zdd ZdS )_Visita  return the line number corresponding to the
    line on which a bare expression appears if it is a binary op
    or a comparison that is not in a with block.

    EXAMPLES
    ========

    >>> import ast
    >>> class _Visit(ast.NodeVisitor):
    ...     def visit_Expr(self, node):
    ...         if isinstance(node.value, (ast.BinOp, ast.Compare)):
    ...             print(node.lineno)
    ...     def visit_With(self, node):
    ...         pass  # no checking there
    ...
    >>> code='''x = 1    # line 1
    ... for i in range(3):
    ...     x == 2       # <-- 3
    ... if x == 2:
    ...     x == 3       # <-- 5
    ...     x + 1        # <-- 6
    ...     x = 1
    ...     if x == 1:
    ...         print(1)
    ... while x != 1:
    ...     x == 1       # <-- 11
    ... with raises(TypeError):
    ...     c == 1
    ...     raise TypeError
    ... assert x == 1
    ... '''
    >>> _Visit().visit(ast.parse(code))
    3
    5
    6
    11
    c                 C   s.   t |jtjtjfr*d s*ttd|jf d S )N )r   valuer   BinOpCompareAssertionErrormessage_bare_exprlinenoselfnoder   r   r   
visit_Expr   s    z_Visit.visit_Exprc                 C   s   d S r%   r   rP   r   r   r   
visit_With   s    z_Visit.visit_WithN)__name__
__module____qualname____doc__rS   rT   r   r   r   r   rH      s   %rH   c              
   C   s   t | }zt| W nn tk
r } zP|js4t|jd }|tddd sXtt	|
ddd d W Y S d}~X Y nX dS )z]return None or else 0-based line number of code on which
    a bare expression appeared.
    r   :    .N)r   r(   BareExprvisitrM   r-   
startswithrN   r   intrsplitrstrip)codetreemsgr   r   r   line_with_bare_expr   s    


rf   c                     s   fdd}  fdddd dD }dt  d	t  d
t  dt  dt  h}dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  dt  h t||  tt| d d!d"d#hd$ tt| | tt| | d%S )&a  
    This test tests all files in SymPy and checks that:
      o no lines contains a trailing whitespace
      o no lines end with 

      o no line uses tabs instead of spaces
      o that the file ends with a single newline
      o there are no general or string exceptions
      o there are no old style raise statements
      o name of arg-less test suite functions start with _ or test_
      o no duplicate function names that start with test_
      o no assignments to self variable in class methods
      o no lines contain ".func is" except in the test suite
      o there is no do-nothing expression like `a == b` or `x + 1`
    c              	      sH   t | dd} | | W 5 Q R X t | dd}t| | W 5 Q R X d S )Nutf8)encoding)openr   )rE   	test_file)test_this_filer   r   test   s    ztest_files.<locals>.testc           	         s  d }|  }|d t kr" n tdd }|drDt|}|d k	rddsdtt |d f d }d}t }t	|D ]\}}t
 rt|rdstt |d f t|r|d7 }||dd  dd   t||krdstt |d f |ds&|d	r@ds@tt |d f |d
rfdsftt |d f t|rdstt |d f t|rdstt |d f t|rdstt |d f t|rtt  fddsdstt! |d f t"|rFt
 sFdsFtt# |d f t$|}|d k	rzdsztt% |d |&df qz|d k	r|dkr|dkrdstt' |d f n&|dsdstt( |d f d S )Nr   rZ   Ztest_Fr   (z 
z	
z
c                    s   |  kS r%   r   )rC   rD   r   r   <lambda>       z4test_files.<locals>.test_this_file.<locals>.<lambda>   
))readseekr   ra   r_   rf   rM   rN   set	enumeratetest_file_rerG   test_suite_def_remessage_test_suite_deftest_ok_def_readdr   stripr   message_duplicate_testendswithmessage_spacemessage_carriager   message_tabsstr_raise_researchmessage_str_raisegen_raise_remessage_gen_raiseimplicit_test_relistfiltermessage_implicit
func_is_remessage_func_isold_raise_remessage_old_raisegroupmessage_multi_eofmessage_eof)	rE   rj   idxrc   pylineteststest_setresult)import_excluderD   r   rk      s`    


 

  

z"test_files.<locals>.test_this_filec                 S   s   g | ]}t t|qS r   )r   TOP_PATH)r   filer   r   r   r   
  s     ztest_files.<locals>.<listcomp>)z	isympy.pyzbuild.pyzsetup.pyzL%(sep)ssympy%(sep)sparsing%(sep)sautolev%(sep)s_antlr%(sep)sautolevparser.pyzK%(sep)ssympy%(sep)sparsing%(sep)sautolev%(sep)s_antlr%(sep)sautolevlexer.pyzN%(sep)ssympy%(sep)sparsing%(sep)sautolev%(sep)s_antlr%(sep)sautolevlistener.pyzH%(sep)ssympy%(sep)sparsing%(sep)slatex%(sep)s_antlr%(sep)slatexparser.pyzG%(sep)ssympy%(sep)sparsing%(sep)slatex%(sep)s_antlr%(sep)slatexlexer.pyz%(sep)ssympy%(sep)s__init__.pyz%(sep)svector%(sep)s__init__.pyz"%(sep)smechanics%(sep)s__init__.pyz %(sep)squantum%(sep)s__init__.pyz%(sep)spolys%(sep)s__init__.pyz,%(sep)spolys%(sep)sdomains%(sep)s__init__.pyz#%(sep)sinteractive%(sep)ssession.pyz%(sep)sisympy.pyz%(sep)sbin%(sep)ssympy_time.pyz$%(sep)sbin%(sep)ssympy_time_cache.pyz&%(sep)sparsing%(sep)ssympy_tokenize.pyz'%(sep)splotting%(sep)spygletplot%(sep)sz)%(sep)sbin%(sep)stest_external_imports.pyz*%(sep)sbin%(sep)stest_submodule_imports.pyz"%(sep)sutilities%(sep)sruntests.pyz %(sep)sutilities%(sep)spytest.pyz"%(sep)sutilities%(sep)srandtest.pyz"%(sep)sutilities%(sep)stmpfiles.pyz)%(sep)sutilities%(sep)squality_unicode.py~z.pycz.shz.mjs*N)sepdr:   rB   BIN_PATH
SYMPY_PATHEXAMPLES_PATH)rl   Ztop_level_filesexcluder   )r   rk   r   
test_files   sB    5

r   c                 C   s   t ddd |  S )Nr   
   r[   )randomrandint)r6   r   r   r   _with_space=  s    r   c                  C   s4  ddddddddg} dd	d
ddg}dddddddddddg}dddddddddddddddd d!d"d#d$g}| D ]R}t t|d kst|tt|d kst|tt|d kslt|ql|D ]}t t|d k	st|q|D ]}tt|d k	st|q|D ]"}tt|d k	st|qd S )%Nz#some text # raise Exception, 'text'z2raise ValueError('text') # raise Exception, 'text'zraise ValueError('text')zraise ValueErrorzraise ValueError('text') #,zB'"""This function will raise ValueError, except when it doesn't"""zraise (ValueError('text')zraise 'exception'zraise 'Exception'zraise "exception"zraise "Exception"zraise 'ValueError'z1raise Exception('text') # raise Exception, 'text'zraise Exception('text')zraise Exceptionzraise Exception('text') #,zraise Exception, 'text'z1raise Exception, 'text' # raise Exception('text')z1raise Exception, 'text' # raise Exception, 'text'z>>> raise Exception, 'text'z5>>> raise Exception, 'text' # raise Exception('text')z5>>> raise Exception, 'text' # raise Exception, 'text'zraise ValueError, 'text'z2raise ValueError, 'text' # raise Exception('text')z2raise ValueError, 'text' # raise Exception, 'text'z>>> raise ValueError, 'text'z6>>> raise ValueError, 'text' # raise Exception('text')z6>>> raise ValueError, 'text' # raise Exception, 'text'zraise(ValueError,zraise (ValueError,zraise( ValueError,zraise ( ValueError,zraise(ValueError ,zraise (ValueError ,zraise( ValueError ,zraise ( ValueError ,)r   r   r   rM   r   r   )candidates_okZstr_candidates_failZgen_candidates_failZold_candidates_failr6   r   r   r   'test_raise_statement_regular_expressionB  st    r   c                  C   s|   ddddddddd	d
ddddg} ddddddg}| D ]}t t|d ks4t|q4|D ]}t t|d k	sXt|qXd S )Nzfrom sympy import somethingz>>> from sympy import somethingz%from sympy.somewhere import somethingz)>>> from sympy.somewhere import somethingzimport sympyz>>> import sympyz import sympy.something.somethingz... import sympyz$... import sympy.something.somethingz... from sympy import somethingz)... from sympy.somewhere import somethingz>> from sympy import *z# from sympy import *zsome text # from sympy import *zfrom sympy import *z>>> from sympy import *zfrom sympy.somewhere import *z!>>> from sympy.somewhere import *z... from sympy import *z!... from sympy.somewhere import *)r   r   r   rM   r   candidates_failr6   r   r   r   (test_implicit_imports_regular_expression  s4    r   c                  C   s\   ddddg} ddddg}| D ]}t |d kst|q|D ]}t |d k	s<t|q<d S )	Nz    def foo():
zdef foo(arg):
zdef _foo():
zdef test_foo():
zdef foo():
zdef foo() :
zdef foo( ):
zdef  foo():
)rx   r   rM   r   r   r   r   test_test_suite_defs  s    r   c                  C   sV   dddg} ddg}d}dd }| D ]}|||ks"t q"|D ]}|||ks<t q<d S )	Nzdef foo():
def foo():
zdef test():
def test_():
zdef test_():
def test__():
zdef test_():
def test_ ():
zdef test_1():
def  test_1():
Nr   c                 S   sz   d}t  }t|  D ]^\}}t|r|d7 }||dd  dd   t||krdt	d|d f f  S qdS )Nr   rZ   r   rn   Fr   r   )
ru   rv   
splitlinesrz   rG   r{   r   r|   r   r}   )r   r   r   r   r   r   r   r   r     s    
 z'test_test_duplicate_defs.<locals>.check)rM   )r   r   okr   r6   r   r   r   test_test_duplicate_defs  s    
r   c                  C   sT   dddddg} dddd	d
g}| D ]}t |g ks tq |D ]}t |g ks:tq:d S )Nz4class A(object):
    def foo(self, arg): arg = self
z9class A(object):
    def foo(self, arg): self.prop = arg
z?class A(object):
    def foo(self, arg): obj, obj2 = arg, self
zCclass A(object):
    @classmethod
    def bar(cls, arg): arg = cls
z2class A(object):
    def foo(var, arg): arg = var
z4class A(object):
    def foo(self, arg): self = arg
z>class A(object):
    def foo(self, arg): obj, self = arg, arg
zCclass A(object):
    def foo(self, arg):
        if arg: self = argzCclass A(object):
    @classmethod
    def foo(cls, arg): cls = arg
z2class A(object):
    def foo(var, arg): var = arg
)r9   rM   r   r   r   r   test_find_self_assignments  s     r   c                      s   dgdgd dgt t fdd d dgt  d dgt t fdd d dgt  d S )NZfoobarabcu   αc                      s   t  S r%   r   r   rE   rj   Zunicode_strict_whitelistZunicode_whitelistr   r   ro     s
      z,test_test_unicode_encoding.<locals>.<lambda>c                      s   t  S r%   r   r   r   r   r   ro     s
      )r   rM   r   r   r   r   r   test_test_unicode_encoding  s0          r   )Aosr   r   r   os.pathr   r   r   r   r	   r
   rF   r   r   Zsympy.testing.pytestr   Zsympy.testing.quality_unicoder   r   __file__r   rM   r   r   r   r   r   r   r   r   r   r   r   r   ry   r}   Zmessage_self_assignmentsr   rN   compiler   r   r   r   rx   rz   rw   r   r   r9   ru   rB   r:   NodeVisitorrH   r]   rf   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sl   







"-~C