'L i"ZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z ddl Z ddl Z ddl Z dd lmZdd lmZdd lmZdd lmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'erddl(m)Z)dZ*Gdde jVZ,e,jZZ.dBdZ/ dCd!Z0Gd"d#eZ1ee jdd$%Gd&d'Z3ed(ed)e4fe5z*Z6e jdGd+d Z7d$d, dDd-Z8 dEd.Z9dd/dFd0Z:erBGd1d2e7Z;Gd3d4e7Z<Gd5d6e7Z=Gd7d8e7Z>Gd9d:e7Z?Gd;dZAeAd$?ZBeGd@dAe eCefZDy)G) annotationsN)Callable) Collection)Iterable)Iterator)Mapping)MutableMapping)Sequence)Any)final) NamedTuple)overload) TYPE_CHECKING)TypeVar) getfslineno)NOTSET) NotSetType)Config)check_ispytest)MARKED_FIXTURE)fail)AbstractRaises) _ScopeName)PytestUnknownMarkWarning)Nodeempty_parameter_set_markceZdZdZy) _HiddenParamrN)__name__ __module__ __qualname__token]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/_pytest/mark/structures.pyrr,s Er%rc<t|xrt|dddk7S)Nr z)callablegetattr)funcs r& istestfuncr+4s D> QgdJ CzQQr% MarkDecoratorc^ddlm}dj|}t|\}}d|d}|j t }|dvrt j|} | S|dk(rt j|d } | S|d k(r$|jd |jd |dzt|)Nr) Collectorz, zgot empty parameter set for ())NskipreasonxfailF)r3runfail_at_collectzEmpty parameter set in 'z ' at line ) nodesr.joinrgetiniEMPTY_PARAMETERSET_OPTIONMARK_GENr1r4 CollectErrorr LookupError) configargnamesr*r. argslisting_fslinenor3requested_markmarks r&get_empty_parameterset_markrF8s"))H%Kd#KC,[M ;F]]#<=N++}}F}+ K 7 "~~V~7 K , ,$$&t}}oZ | L  .))r%ceZdZUdZded<ded<ded<edd d  dd Ze d dd Ze dd Z e ddZ e ddZ y ) ParameterSetaxA set of values for a set of parameters along with associated marks and an optional ID for the set. Examples:: pytest.param(1, 2, 3) # ParameterSet(values=(1, 2, 3), marks=(), id=None) pytest.param("hello", id="greeting") # ParameterSet(values=("hello",), marks=(), id="greeting") # Parameter set with marks pytest.param(42, marks=pytest.mark.xfail) # ParameterSet(values=(42,), marks=(MarkDecorator(...),), id=None) # From parametrize mark (parameter names + list of parameter sets) pytest.mark.parametrize( ("a", "b", "expected"), [ (1, 2, 3), pytest.param(40, 2, 42, id="everything"), ], ) # ParameterSet(values=(1, 2, 3), marks=(), id=None) # ParameterSet(values=(40, 2, 42), marks=(), id="everything") zSequence[object | NotSetType]valuesz Collection[MarkDecorator | Mark]marksstr | _HiddenParam | Noneidr$NrJrLc,t|tr|f}n&t|tjjsJt d|Dr t d|2t|ts"|turtdt|d|||||S)Nc3:K|]}|jdk(yw) usefixturesNname).0is r& z%ParameterSet.param..zs61qvv&6sz|pytest.param cannot add pytest.mark.usefixtures; see https://docs.pytest.org/en/stable/reference/reference.html#pytest-paramzDExpected id to be a string or a `pytest.HIDDEN_PARAM` sentinel, got z: ) isinstancer, collectionsabcrany ValueErrorstr HIDDEN_PARAM TypeErrortype)clsrJrLrIs r&paramzParameterSet.paramos e] +HEe[__%?%?@ @@ 66 6Z  >b#&2\+A8*Brf.65"%%r%cZt||r|S|r|j|S||gdS)ajExtract from an object or objects. :param parameterset: A legacy style parameterset that may or may not be a tuple, and may or may not be wrapped into a mess of mark objects. :param force_tuple: Enforce tuple wrapping so single argument tuple values don't get decomposed and break tests. NrM)rVr`)r_ parameterset force_tuples r& extract_fromzParameterSet.extract_froms7 lC (  99\* *|2$7 7r%ct|trO|jdDcgc]#}|js|j%}}t |dk(}||fSd}||fScc}w)N,r7F)rVr[splitstriplen)r@ argvaluesargskwargsxrcs r&_parse_parametrize_argsz$ParameterSet._parse_parametrize_argssk h $+3>>#+>La!'') LHLh-1,K$$ K$$ Ms A&A&cV|Dcgc]}tj||c}Scc}w)N)rc)rHrd)rjrcrms r&_parse_parametrize_parametersz*ParameterSet._parse_parametrize_parameterss3 LU FGL % %a[ % A   s&c |j||\}}|j||}~|rv|D]m}t|jt|k7s%d} t | j ||j|t|t|jdo||fSt |||} |jttft|z| gd||fS)Nz{nodeid}: in "parametrize" the number of names ({names_len}): {names} must be equal to the number of values ({values_len}): {values})nodeidrInames names_len values_lenFpytracer)rIrJrL) rnrprirIrformatrFappendrHr) r_r@rjr*r?rrrc parametersr`msgrEs r&_for_parametrizezParameterSet._for_parametrizes!$ ; ;Hi P+66y+N  # u||$H 5%  #)#(<<"*&)(m'*5<<'8 #!&  6## /vxFD   "9s8}4TFx  ##r%)rIobjectrJz0MarkDecorator | Collection[MarkDecorator | Mark]rLrKreturnrHF)rbz(ParameterSet | Sequence[object] | objectrcboolr~rH)r@str | Sequence[str]rj2Iterable[ParameterSet | Sequence[object] | object]r~ztuple[Sequence[str], bool])rjrrcrr~zlist[ParameterSet]) r@rrjrr?rrrr[r~z(tuple[Sequence[str], list[ParameterSet]]) r r!r"__doc____annotations__ classmethodr`rd staticmethodrnrpr|r$r%r&rHrHOs46 *) ++!!CE(, &&@& & &  &&0"8>88  886 %% %E % $ % % E     )$%)$F)$  )$  )$ 2)$)$r%rHT)frozenceZdZUdZded<ded<ded<ej dd Zd ed <ej dd Zd ed< dd d ddZ ddZ ddZ y)MarkzA pytest mark.r[rRtuple[Any, ...]rkMapping[str, Any]rlNF)defaultrepr Mark | None_param_ids_fromSequence[str] | None_param_ids_generated _ispytestct|tj|d|tj|d|tj|d|tj|d|tj|d|y):meta private:rRrkrlrrN)rr} __setattr__)selfrRrkrlparam_ids_fromparam_ids_generatedrs r&__init__z Mark.__init__si y!4.4.4624!2NC4!79LMr%cRd|jvxst|jdk\S)Nids)rlrirkrs r&_has_param_idszMark._has_param_idss# #:s499~'::r%c B|j|jk(sJd}|jdk(r%|jr|}n|jr|}t|j|j|jzt |j fi|j |dS)zReturn a new Mark which is a combination of this Mark and another Mark. Combines by appending args and merging kwargs. :param Mark other: The mark to combine with. :rtype: Mark N parametrizeT)rr)rRrrrkdictrl)rotherrs r& combined_withzMark.combined_withsyyEJJ&&&'+ 99 %##%!&$$&!% II II "  - -)   r%)NN)rRr[rkrrlrrrrrrrr~Noner~r)rrr~r) r r!r"rr dataclassesfieldrrrrrr$r%r&rrs I  $5;#4#4T#NO[N1B1B1B52.'+48 N NNN" N $ N 2 NN N&; r%rMarkable.)boundceZdZUdZded<ddddZeddZeddZedd Z edd Z dd Z e dd Z e dd Z ddZ y)r,aWA decorator for applying a mark on test functions and classes. ``MarkDecorators`` are created with ``pytest.mark``:: mark1 = pytest.mark.NAME # Simple MarkDecorator mark2 = pytest.mark.NAME(name1=value) # Parametrized MarkDecorator and can then be applied as decorators to test functions:: @mark2 def test_function(): pass When a ``MarkDecorator`` is called, it does the following: 1. If called with a single class as its only positional argument and no additional keyword arguments, it attaches the mark to the class so it gets applied automatically to all test cases found in that class. 2. If called with a single function as its only positional argument and no additional keyword arguments, it attaches the mark to the function, containing all the arguments already stored internally in the ``MarkDecorator``. 3. When called in any other case, it returns a new ``MarkDecorator`` instance with the original ``MarkDecorator``'s content updated with the arguments passed to this call. Note: The rules above prevent a ``MarkDecorator`` from storing only a single function or class reference as its positional argument with no additional keyword or positional arguments. You can work around this by using `with_args()`. rrEFrc(t|||_y)rN)rrE)rrErs r&rzMarkDecorator.__init__Ysy! r%c.|jjS)zAlias for mark.name.)rErRrs r&rRzMarkDecorator.name^yy~~r%c.|jjS)zAlias for mark.args.)rErkrs r&rkzMarkDecorator.argscrr%c.|jjS)zAlias for mark.kwargs.)rErlrs r&rlzMarkDecorator.kwargshsyyr%c|jS)rrQrs r&marknamezMarkDecorator.marknamemsyyr%ct|j||d}t|jj |dS)zReturn a MarkDecorator with extra arguments added. Unlike calling the MarkDecorator, with_args() can be used even if the sole argument is a callable/class. Tr)rrRr,rEr)rrkrlrEs r& with_argszMarkDecorator.with_argsrs4 DIItVt<TYY44T:dKKr%cyNr$rargs r&__call__zMarkDecorator.__call__~ r%cyrr$)rrkrls r&rzMarkDecorator.__call__rr%c|rv|st|d}tj|}|}t|ttzr |j }t |dk(r't|s|rt||jd|S|j|i|S)zCall the MarkDecorator.rr7 stacklevel) inspectisclassrVrr__func__rir+ store_markrEr)rrkrlr*is_classunwrapped_funcs r&rzMarkDecorator.__call__s| 7Dt,H"N$ { :;!%4yA~:n#=>499C t~~t.v..r%N)rErrrr~rr~r[)r~r)r~r)rkr}rlr}r~r,rrr~r)rkr}rlr})r r!r"rrrpropertyrRrkrlrrrrr$r%r&r,r,3s D J8=   L     /r% consider_mroct|tr|s|jjdgg}n?@ @ s9;rct|tsJ|ddlm}||t j t |gt|d||_y)zjStore a Mark on an object. This is used to implement the Mark declarations/decorators correctly. r)getfixturemarkerNrFr) rVrfixturesrwarningswarnrrr)rrErrs r&rrsQ dD !'4' !+( n<J)#EBIDICNr%c2eZdZeddZedddZy)_SkipMarkDecoratorcyrr$rs r&rz_SkipMarkDecorator.__call__7:r%cyrr$)rr3s r&rz_SkipMarkDecorator.__call__s@Cr%Nr.)r3r[r~r,r r!r"rrr$r%r&rrs : : C Cr%rc,eZdZ ddd ddZy)_SkipifMarkDecorator.r2cyrr$)r conditionr3 conditionss r&rz_SkipifMarkDecorator.__call__s  r%Nr)r str | boolrrr3r[r~r,r r!r"rr$r%r&rrs<%(   ! $     r%rcZeZdZeddZe dddddd ddZy) _XfailMarkDecoratorcyrr$rs r&rz_XfailMarkDecorator.__call__rr%.)r3r5raisesstrictcyrr$)rrr3r5rrrs r&rz_XfailMarkDecorator.__call__s r%Nrr)rrrrr3r[r5rrz\None | type[BaseException] | tuple[type[BaseException], ...] | AbstractRaises[BaseException]rrr~r,rr$r%r&rrs : : %* /2 ! $   ,     r%rc4eZdZdddd ddZy)_ParametrizeMarkDecorator.)indirectrscopecyrr$)rr@rjrrrs r&rz"_ParametrizeMarkDecorator.__call__s r%N) r@rrjrrzbool | Sequence[str]rzQIterable[None | str | float | int | bool] | Callable[[Any], object | None] | Nonerz_ScopeName | Noner~r,rr$r%r&rrsO .1'* ) J +  %  r%rceZdZddZy)_UsefixturesMarkDecoratorcyrr$)rrs r&rz"_UsefixturesMarkDecorator.__call__  r%N)rr[r~r,rr$r%r&rr  r%rceZdZddZy)_FilterwarningsMarkDecoratorcyrr$)rfilterss r&rz%_FilterwarningsMarkDecorator.__call__rr%N)rr[r~r,rr$r%r&rrrr%rcheZdZUdZerded<ded<ded<ded <d ed <d ed <ddddZddZy) MarkGeneratoraFactory for :class:`MarkDecorator` objects - exposed as a ``pytest.mark`` singleton instance. Example:: import pytest @pytest.mark.slowtest def test_function(): pass applies a 'slowtest' :class:`Mark` on ``test_function``. rr1rskipifrr4rrrrPrfilterwarningsFrcFt|d|_t|_yr)r_configset_markers)rrs r&rzMarkGenerator.__init__.sy!&* "%% r%c|ddk(r td|j ||jvro|jjdD]Q}|j ddj ddj }|jj |S||jvr~|dvrd}td |d |jjd }||jjd }|rt|d dtjd|dtdtt|diddS)z:Generate a new :class:`MarkDecorator` with the given name.r_z*Marker name must NOT start with underscoremarkers:() parameterize parametrise parameteriseTz Unknown 'z#' mark, did you mean 'parametrize'?strict_markersrz, not found in `markers` configuration optionFrvzUnknown pytest.mark.z - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.htmlrr$r) AttributeErrorrr r:rgrhaddrrrrr,r)rrRlinemarker__tracebackhide__rs r& __getattr__zMarkGenerator.__getattr__3sH 7c> !MN N << #4==( LL// :.D"ZZ_Q/55c:1=CCEFMM%%f- .4==(JJ(,%9TF*MNO!%!4!45E!F!)%)\\%8%8%BN!("NO %  *4&1II- T$B$?4PPr%N)rrr~r)rRr[r~r,)r r!r"rrrrrr$r%r&rrs>    $$""....44,1( *Qr%rrcfeZdZdZd dZd dZddZddZ d ddZddZ ddZ dd Z dd Z y ) NodeKeywords)r nodeparentcZ||_|j|_|jdi|_y)NT)rrrRr )rrs r&rzNodeKeywords.__init__gs$ kk D) r%c |j|S#t$r)|j|jj|cYSwxYwr)r KeyErrorrkeywordsrkeys r& __getitem__zNodeKeywords.__getitem__lsG -==% % -{{";;'', , -s/AAc"||j|<yr)r )rr#values r& __setitem__zNodeKeywords.__setitem__ts" cr%cr||jvxs(|jduxr||jjvSrr rr!r"s r& __contains__zNodeKeywords.__contains__zs8dmm# KKt # Ct{{/C/C(C r%c p|jj||jj|yr)r update)rrkwdss r&r,zNodeKeywords.updates( U# T"r%ctd)Nz"cannot delete key in keywords dict)rZr"s r& __delitem__zNodeKeywords.__delitem__s=>>r%c#K|jEd{|j/|jjD]}||jvs|yy7@wrr))rkeywords r&__iter__zNodeKeywords.__iter__sQ==  ;; ";;// "$--/!M " # !sAA7A Ac&td|DS)Nc3 K|]}dyw)r7Nr$)rSr1s r&rUz'NodeKeywords.__len__..s)1)s )sumrs r&__len__zNodeKeywords.__len__s)D)))r%c"d|jdS)Nz)rrs r&__repr__zNodeKeywords.__repr__s( 155r%N)rrr~r)r#r[r~r )r#r[r&r r~r)r#r}r~r)r$)rz-Mapping[str, Any] | Iterable[tuple[str, Any]]r-r r~r)r#r[r~r)r~z Iterator[str])r~intr) r r!r" __slots__rr$r'r*r,r/r2r6r9r$r%r&rrcsW.I* -#  @B#<##  #?"*6r%rr)r?rr@z Sequence[str]r~r,)rz object | typerrr~z list[Mark])rzIterable[Mark | MarkDecorator]r~zIterable[Mark])rErrr:r~r)E __future__rcollections.abcrWrrrrrr r renumrtypingr r r rrrr_codercompatrr_pytest.configr_pytest.deprecatedrr_pytest.outcomesr_pytest.raisesr _pytest.scoper_pytest.warning_typesrr8rr;Enumrr#r\r+rFrH dataclassrr}r^rr,rrrrrrrrrrr<r[rr$r%r&rJs"$&$$#*$  !--!)$:7 499 !! R +.V$:V$rd#@ @ $@ L :Xc6k%:T%A B _/_/_/J0 00 0B-"67J&D]D }  m $  M  M} HQHQHQV 4 (46>#s(+4646r%