
    Dd2                         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	 d dl
mZmZ d dlmZ g dZd	 Zd
 Zd Zd Zd Zd Zd Z e            dd            Z G d de	          ZdS )    )Path)search_ancestor)inference_state_method_cache)load_module_from_path)ParserTreeFilter)	NO_VALUESValueSet)infer_call_of_leaf))_pytestmonkeypatch)r   capture)r   logging)r   tmpdir)r   pytesterc                       fd}|S )Nc                     |                                  dk    r$| j                                         dk    rt          S  | |          S )Nfixturez_pytest.fixtures)
py__name__parent_contextr   )value	argumentscallbacks     3lib/python3.11/site-packages/jedi/plugins/pytest.pywrapperzexecute.<locals>.wrapper   sS     * 	(33559KK	xy)))     )r   r   s   ` r   executer      s#    * * * * * Nr   c                      d  fd}|S )Nc                 T   | j         j        M|                                 }t          d |D                       rt	          j        d |D                       S |S |                                 }|                                r|                                S |	                                S )Nc              3   T   K   | ]#}|j                             d           dk    V  $dS )Tinclude_module_names)typing	GeneratorN)nameget_qualified_names.0vs     r   	<genexpr>z=infer_anonymous_param.<locals>.get_returns.<locals>.<genexpr>#   sQ       $ $ 6--4-HH-. $ $ $ $ $ $r   c              3   d   K   | ]+}|                     d                                           V  ,dS )__next__N)py__getattribute__execute_annotationr'   s     r   r*   z=infer_anonymous_param.<locals>.get_returns.<locals>.<genexpr>&   sP       * * ((44GGII* * * * * *r   )
	tree_node
annotationexecute_with_valuesanyr	   	from_sets
as_contextis_generatormerge_yield_valuesget_return_values)r   resultfunction_contexts      r   get_returnsz*infer_anonymous_param.<locals>.get_returns    s    ?% 		..00F $ $"$ $ $ $ $   ) * *#* * *    M
 !++--((** 	8#66888#55777r   c                     | j         r |           S t          |           \  }}|rM|                                 }t          || j        |          }|r t          j        fd|D                       S  |           S )Nskip_own_modulec              3   \   K   | ]&}|                                 D ]} |          V  'd S N)infer)r(   r   r   r:   s      r   r*   z9infer_anonymous_param.<locals>.wrapper.<locals>.<genexpr>E   s`       * *!(* *   K&&* * * * * * *r   )annotation_node _is_a_pytest_param_and_inheritedget_root_context_goto_pytest_fixturestring_namer	   r3   )
param_nameis_pytest_paramparam_name_is_function_namemodulefixturesfuncr:   s        r   r   z&infer_anonymous_param.<locals>.wrapper5   s    % 	$4
###,Z88 	54 	0022F+& !<  H  ) * * * *#+* * *   
 tJr   r   )rK   r   r:   s   ` @r   infer_anonymous_paramrL      s8    8 8 8*           , Nr   c                       fd}|S )Nc                     t          |           \  }}|r-t          |                                 | j        |          }|r|S  |           S Nr<   )rB   rD   rC   rE   )rF   rG   rH   namesrK   s       r   r   z%goto_anonymous_param.<locals>.wrapperO   sk    ,Z88 	54 	(++--& ;  E
  tJr   r   rK   r   s   ` r   goto_anonymous_paramrR   N   s#              Nr   c                       fd}|S )Nc                     |                                  }t          ||          r<g }t          |          D ]&}|t          |                                          z  }'|r|S  | ||          S r?   )rC   _is_pytest_func_iter_pytest_modulesFixtureFiltervalues)context	func_namedecorator_nodesmodule_contextrP   rK   s        r   r   z%complete_param_names.<locals>.wrapper_   s     11339o66 	E"6~"F"F @ @~66==??? tGY888r   r   rQ   s   ` r   complete_param_namesr]   ^   s#    9 9 9 9 9 Nr   c                 ~    t          | |          D ]*} t          |                               |          }|r|c S +d S rO   )rV   rW   get)r\   r%   r=   rP   s       r   rD   rD   k   sY    .~___  n--11$77 	LLL	 r   c                     t          | j        d          }|dS |                                }t          |j        j        |          |j        j        | j        k    fS )z
    Pytest params are either in a `test_*` function or have a pytest fixture
    with the decorator @pytest.fixture.

    This is a heuristic and will work in most cases.
    funcdefN)FF)r   	tree_nameget_decoratorsrU   r%   r   rE   )rF   ra   
decoratorss      r   rB   rB   r   s`     j2I>>G |''))J7<-z::j445 5r   c                 ^    |                      d          pt          d |D                       S )Ntestc              3   B   K   | ]}d |                                 v V  dS )r   N)get_code)r(   ns     r   r*   z"_is_pytest_func.<locals>.<genexpr>   s/      BBQyAJJLL(BBBBBBr   )
startswithr2   )rZ   r[   s     r   rU   rU      s9    '' CBB/BBBBBCr   Fc              #     K   |s| V  |                                  j        }|
|                                | j                                        }d }t          fd|D                       r                    d          }t          |j                  | 	                                k    r=	 t          | j        |          }|                                V  n# t          $ r Y nw xY w                                |j        |j        k    rn}t          fd|D                       t          D ]5}| j                            |          D ]}|                                V  6d S )Nc              3   L   K   | ]}j                             |          V  d S r?   )pathrj   )r(   pfolders     r   r*   z'_iter_pytest_modules.<locals>.<genexpr>   s3      >>&+((++>>>>>>r   zconftest.py)	get_valuefile_ioget_parent_folderinference_stateget_sys_pathr2   get_file_ior   rm   
py__file__r   r4   FileNotFoundError_PYTEST_FIXTURE_MODULESimport_module)	r\   r=   rq   sys_pathlast_foldermrP   module_valuero   s	           @r   rV   rV      s      &&((0G !**,,!1>>@@ >>>>X>>>>> 	!((77GGL!!^%>%>%@%@@ -n.LgVVA,,..(((((   D--//F  6;+:J+J  K >>>>X>>>>> 	! ) , ,*:HHOO 	, 	,L))++++++	,, ,s   0+C 
C)(C)c                   $     e Zd Z fdZd Z xZS )rW   c              #      K   t                                          |          D ]?}|j        }|j        dk    r+|j        }|j        dk    r|                     |          r|V  @d S )Nra   	decorated)super_filterparenttype_is_fixture)selfrP   r%   ra   r   	__class__s        r   r   zFixtureFilter._filter   s{      GGOOE** 	 	DkG|y( #N	>[0 T5E5Ei5P5P JJJ	 	r   c                    |j         d         }|j        dk    r|j         }n|g}|D ]}|j         d         }d|                                v r|j        dk    rZ|j         d         }|                                }|dk    rt	          | j        |d	          }n5| j                            |          }n| j                            |          }|D ]%}|j                            d
          dk    r  dS &dS )Nr   rd      r   	atom_expr)T)cut_own_trailerr!   )r   rJ   r   F)	childrenr   rh   get_last_leafr
   r   
infer_noder%   r&   )	r   r   rd   	decoratordotted_namelast_trailer	last_leafrX   r   s	            r   r   zFixtureFilter._is_fixture   s?   '*
?l* 	&#,JJ$J# 	$ 	$I#,Q/KK00222 $#{2 I $/#7#;L , : : < <I C' M!3 /D"R "R "R "&!4!?!?!L!L!0;;KHHF# $ $Ez5545PPAB $#ttt$ ur   )__name__
__module____qualname__r   r   __classcell__)r   s   @r   rW   rW      sG                  r   rW   N)F)pathlibr   
parso.treer   jedi.inference.cacher   jedi.inference.importsr   jedi.inference.filtersr   jedi.inference.base_valuer   r	   jedi.inference.helpersr
   rx   r   rL   rR   r]   rD   rB   rU   rV   rW   r   r   r   <module>r      sh         & & & & & & = = = = = = 8 8 8 8 8 8 3 3 3 3 3 3 9 9 9 9 9 9 9 9 5 5 5 5 5 5   	 	 	, , ,^   
 
 
  5 5 5C C C
 , , ,  ,@$ $ $ $ $$ $ $ $ $ $r   