§ |<ˆjúãóî—dZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddl mZddl mZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddl)m*Z*ddl)m+Z+ddl)m,Z,ddl-Z.ddl/Z.ddl0Z.ddl1m2Z2ddl1m3Z3ddl4m5Z5dd l-m6Z6dd!l-m7Z7dd"l8m9Z9dd#l:m;Z;dd$l:mZ>dd&l=m?Z?dd'l@mAZAdd(l@mBZBdd)l@mCZCdd*l@mDZDdd+l@mEZEdd,lFmGZGdd-lHmIZIdd.lHmJZJe'rdd/lKmLZLdd0lMmNZNdd1lOmPZPeQZR e*d2¦«ZSe+d2¦«ZTe;Gd3„d4ejU¦«¦«ZVGd5„d6eW¦«ZXd7e.jYjZd8e[fd9„Z\ dŠd:e!e(e e]d;fd„Z`Gd?„d@¦«ZadAe]dBe]d8e]fdC„ZbdAe]dBe]d8e]fdD„ZcdEZdeddFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]ge jed^krd_d`gng¢da‘RzZfegef¦«Zheh idb¦«eh idc¦« dŠd:e!e e]dz)_get_legacy_hook_marks..as€ÐOÐOÐO¨˜QœVÐOÐOÐOrDÚ pytestmarkú=Tz=TrueFú, )rÓÚfullnameÚ hook_opts)rÚinspectÚ isroutineÚgetattrÚAttributeErrorÚappendÚjoinÚ_pytestÚ deprecatedÚHOOK_LEGACY_MARKINGrRr;r.r r) rÝrÞrßÚ known_marksÚ must_warnÚoptsÚopt_nameÚopt_attrrëÚmessages rEÚ_get_legacy_hook_marksrûYsI€õ ð)åÔ  Ñ(Ô(Ð(Ð(Ð(ØOÐO­W°V¸\È2Ñ-NÔ-NÐOÑOÔO€KØ€IØ€DØð #ð #ˆÝ˜6 8­^Ñ<Ô<ˆØ �>Ð )Ð )Ø × Ò  Ð5Ð5¨8Ð5Ð5Ñ 6Ô 6Ð 6Ø!ˆD�‰NˆNØ ˜Ð $Ð $Ø × Ò  Ð/Ð/Ð/Ñ 0Ô 0Ð 0Ø!ˆD�‰NˆNà"ˆD�‰NˆNØð?Ø—I’I˜iÑ(Ô(ˆ ÝÔ$Ô8×?Ò?ØØÔ(Øð@ñ ô ˆõ �$�|¨VÑ4Ô4°gÑ>Ô>Ð>Ø €KrDcóʇ—eZdZdZd/ˆfd„ Zdedefˆfd„ Zdefˆfd„ Z d0dede ede efˆfd „ Z defd „Z dede fd „Z d1d„Zdeeeefde de dede edeeefddfd„Zdede fd„Zdedeeefdeddfd„Zdedeeefdedeejfd„Zdededeeefdedeejeff d„Zdedeeefdedejfd„Zdejdeddfd„Zd d!œdeed"e ddfd#„Zd$eddfd%„Zd&ejddfd'„Z d/d(„Z!dejddfd)„Z"d*edejeeefddfd+„Z#d2d,ed-e ddfd.„Z$ˆxZ%S)3rÁa;A :py:class:`pluggy.PluginManager ` with additional pytest-specific functionality: * Loading plugins from the command line, ``PYTEST_PLUGINS`` env variable and ``pytest_plugins`` global variables found in plugins being loaded. * ``conftest.py`` loading during start-up. rJNcóF•—ddl}t¦« d¦«t¦«|_i|_d|_d|_td¦«t¦«|_ t¦«|_ g|_ |  |j ¦«| |¦«tj d¦«r£t$j}t)|dd¦«} t+tj| ¦«¦«|jd|¬ ¦«}n#t2$rYnwxYw|jj |j¦«| ¦«|j  ¦«|_!d|_"dS) Nrr2FéÚ PYTEST_DEBUGÚencodingÚutf8r)ÚmodeÚ bufferingr)#Ú_pytest.assertionrMrNÚsetÚ_conftest_pluginsÚ_dirpath2confmodsÚ _confcutdirÚ _noconftestrrÜÚ_duplicatepathsÚskipped_pluginsÚ add_hookspecsÚhookspecrÕr]ÚenvironÚgetrprqrîr…Údupr‰rrUÚtraceÚrootÚ setwriterÚwriteÚenable_tracingr§ÚDummyRewriteHookÚ rewrite_hookÚ _configured)rOròÚerrrrPs €rErNzPytestPluginManager.__init__ƒsˆø€Ø Ð Ð Ð å ‰Œ×Ò˜Ñ"Ô"Ð"õ9<¹¼ˆÔðFHˆÔà+/ˆÔà ˆÔð -�i¨™nœn­^Ñ<Ô<ˆÔå*-©%¬%ˆÔð79ˆÔà ×Ò˜7Ô+Ñ,Ô,Ð,Ø � Š �dÑÔÐÝ Œ:�>Š>˜.Ñ )Ô )ð "Ýœ:ˆCÝ# C¨°VÑ<Ô<ˆHð ÝÝ”F˜3Ÿ:š:™<œ<Ñ(Ô(ØœØØ%ð ñô��øõ ð ð ð Ø�ð øøøà ŒJŒO× %Ò % c¤iÑ 0Ô 0Ð 0Ø × Ò Ñ !Ô !Ð !ð$Ô-×>Ò>Ñ@Ô@ˆÔà ˆÔÐÐsÃ7Ô>Ð>à �=Š=‰?Œ?ð FØ—[’[ Ñ)Ô)ð Fð F�Ø—8’8‘:”:ðFØ×,Ò,¨Q° ¸HÑEÔEÐEøð Fð Fð Fð FrDcó€—|jrgS| |¦«}|j |¦«}|�|Sg}t |g|j¢R¦«D]\}| |¦«rE|dz }| ¦«r,| |||¦«} |  | ¦«Œ]||j|<|S)Nz conftest.py) r rÜrrÚreversedrWrXrÚÚ_importconftestrð) rOrHrGrEÚ directoryÚexisting_clistÚclistrÛÚ conftestpathÚmods rErZz'PytestPluginManager._getconftestmodulesLsç€ð Ô ð ØˆIà×'Ò'¨Ñ-Ô-ˆ ðÔ/×3Ò3°IÑ>Ô>ˆØ Ð %Ø!Ð !ð ˆÝ  Ð>¨IÔ,=Ð>Ð>Ñ?Ô?ð &ð &ˆFØ×%Ò% fÑ-Ô-ð &Ø%¨ Ñ5� Ø×'Ò'Ñ)Ô)ð&Ø×.Ò.¨|¸ZÈÑRÔR�CØ—L’L Ñ%Ô%Ð%øØ,1ˆÔ˜yÑ)؈ rDcó¼—| |||¬¦«}t|¦«D]&} |t||¦«fcS#t$rYŒ#wxYwt |¦«‚)N)rE)rZr_rîrïÚKeyError)rOrãrHrGrEÚmodulesres rEÚ_rget_with_confmodz&PytestPluginManager._rget_with_confmodgs�€ð×*Ò*¨4°ÀhÐ*ÑOÔOˆÝ˜GÑ$Ô$ð ð ˆCð Ø�G C¨Ñ.Ô.Ð.Ð.Ð.Ð.øÝ!ð ð ð Ø�ð øøøå�t‰nŒnÐs«?¿ A Á A rdcóæ—| t|¦«¦«}|�ttj|¦«St |¦«}|€t |j¦« t|||¬¦«}nC#t$r6}|j €J‚t|¦«||j f}t||¦«|‚d}~wwxYw|  ||¦«|j |¦«|j} | |jvrI|j ¦«D]/\} } | | jvs| | kr|| vsJ‚|  |¦«Œ0| d|›�¦«| |¦«|S)N)rrzloading conftestmodule )r9rVr r5r6r+Ú_ensure_removed_sysmoduleÚstemr)rUÚ __traceback__rÓrGÚ_check_non_top_pytest_pluginsrÚaddrÛrÚitemsrWrðrÚconsider_conftest) rOrdrGrEÚexistingÚpkgpathrerzr{ÚdirpathrHÚmodss rEr`z#PytestPluginManager._importconftestvsœ€ð—?’?¥3 |Ñ#4Ô#4Ñ5Ô5ˆØ Ð Ý�Ô(¨(Ñ3Ô3Ð 3å& |Ñ4Ô4ˆØ ˆ?Ý % lÔ&7Ñ 8Ô 8Ð 8ð Gݘl°À(ÐKÑKÔKˆCˆCøÝð Gð Gð GØ”?Ð.Ð.Ð.ݘQ™œ  A¤OÐ4ˆHÝ'¨ °hÑ?Ô?ÀQÐ Føøøøð Gøøøð ×*Ò*¨3° Ñ=Ô=Ð=à Ô×"Ò" 3Ñ'Ô'Ð'ØÔ%ˆØ �dÔ,Ð ,Ð ,Ø"Ô4×:Ò:Ñ<Ô<ð %ð %‘ ��dؘdœlÐ*Ð*¨d°gªo¨oØ d˜?˜?˜?˜?Ø—K’K Ñ$Ô$Ð$øØ � Š Ð4¨SÐ4Ð4Ñ5Ô5Ð5Ø ×Ò˜sÑ#Ô#Ð#؈ sÁ%A8Á8 B8Â1B3Â3B8recó¦—t|d¦«r<|jr7|js2d}t| ||j¦«d¬¦«dSdSdSdS)NrafDefining 'pytest_plugins' in a non-top-level conftest is no longer supported: It affects the entire test suite instead of just below the conftest as expected. {} Please move it to a top level conftest file at the rootdir: {} For more information, visit: https://docs.pytest.org/en/stable/deprecations.html#pytest-plugins-in-non-top-level-conftest-filesF)Úpytrace)ÚhasattrrrJr%rRr)rOrerdrs rErnz1PytestPluginManager._check_non_top_pytest_plugins•s�€õ �CÐ)Ñ *Ô *ð LàÔ ð LðÔ&ð Lð wð õ �—’˜L¨$Ô*:Ñ;Ô;ÀUÐ KÑ KÔ KÐ KÐ KÐ Kð Lð Lð Lð Lð Lð LrDFr¿rÀcóš—d}t|¦«}||kr³||}|dz }t|t¦«r‰|dkr! ||}n#t$rYdSwxYw|dz }n!| d¦«r |dd…}nŒp| ¦«}|r| d¦«sŒœ| |¦«||k°±dSdS)r?rrz-pNr5úno:)ÚlenrÎrVÚ IndexErrorr"ÚstriprÔ)rOr`rÀrRÚnÚoptÚpargs rErÄz%PytestPluginManager.consider_preparse¯sÿ€ð ˆÝ �‰IŒIˆØ�!ŠeˆeØ�q”'ˆCØ �‰FˆAݘ#�sÑ#Ô#ð .ؘ$’;�;ðØ# Aœw˜˜øÝ%ðððØ˜˜ðøøøà˜‘F�A�AØ—^’^ DÑ)Ô)ðؘq˜r˜rœ7�D�DàØ—z’z‘|”|�Øð¨¯ª¸Ñ(>Ô(>ðØØ×'Ò'¨Ñ-Ô-Ð-ð#�!ŠeˆeˆeˆeˆeˆesÁA Á AÁAÚargcóZ—| d¦«r›|dd…}|tvrtd|z¦«‚|dkr*| d¦«| d¦«| |¦«| d¦«s| d|z¦«dSdS|}|j |d ¦«€|j|=| d¦«s)|j d|zd ¦«€ |jd|z=| |d ¬ ¦«dS) r?rzr6Nzplugin %s cannot be disabledrªr®Úpytest_stepwiserrIT)Úconsider_entry_points)r"Úessential_pluginsrÚ set_blockedÚ _name2pluginrrÆ)rOr�rãs rErÔz&PytestPluginManager.consider_pluginargÈsY€à �>Š>˜%Ñ Ô ð @Ø�q�r�r”7ˆDØÕ(Ð(Ð(Ý Ð!?À$Ñ!FÑGÔGÐGð�Ò&Ð&Ø× Ò  Ñ,Ô,Ð,Ø× Ò Ð!2Ñ3Ô3Ð3à × Ò ˜TÑ "Ô "Ð "Ø—?’? 9Ñ-Ô-ð 3Ø× Ò  ¨TÑ!1Ñ2Ô2Ð2Ð2Ð2ð 3ð 3ðˆDðÔ ×$Ò$ T¨2Ñ.Ô.Ð6ØÔ% dÐ+Ø—?’? 9Ñ-Ô-ð <ØÔ$×(Ò(¨°TÑ)9¸2Ñ>Ô>ÐFØÔ)¨)°dÑ*:Ð;Ø × Ò ˜s¸$Ð Ñ ?Ô ?Ð ?Ð ?Ð ?rDÚconftestmodulecó>—| ||j¬¦«dS)r?râN)rÕÚ__file__)rOrˆs rErqz%PytestPluginManager.consider_conftestâs!€à � Š �n¨>Ô+Bˆ ÑCÔCÐCÐCÐCrDcój—| tj d¦«¦«dS)r?ÚPYTEST_PLUGINSN)Ú_import_plugin_specsr]rrrSs rEÚ consider_envz PytestPluginManager.consider_envæs+€à ×!Ò!¥"¤*§.¢.Ð1AÑ"BÔ"BÑCÔCÐCÐCÐCrDcóN—| t|dg¦«¦«dS)r?rN)r�rî)rOres rEr7z#PytestPluginManager.consider_moduleês)€à ×!Ò!¥'¨#Ð/?ÀÑ"DÔ"DÑEÔEÐEÐEÐErDrÈcóX—t|¦«}|D]}| |¦«ŒdSrL)Ú_get_plugin_specs_as_listrÆ)rOrÈraÚ import_specs rEr�z(PytestPluginManager._import_plugin_specsîsA€õ,¨DÑ1Ô1ˆØ"ð ,ð ,ˆKØ × Ò ˜{Ñ +Ô +Ð +Ð +ð ,ð ,rDÚmodnamer„có¢—t|t¦«s Jd|z¦«‚| |¦«s| |¦«�dS|tvrd|zn|}|j |¦«|r| d|¬¦«}|rdS t|¦«tj |}|  ||¦«dS#t$r>}td|›d|j d›�¦« |j¦«|‚d}~wt $r.}|j ||jpd f¦«Yd}~dSd}~wwxYw) z™Import a plugin with ``modname``. If ``consider_entry_points`` is True, entry point names are also considered to find a plugin. z$module name as text required, got %rNz_pytest.Úpytest11râzError importing plugin "z": rÚ)rÎrVÚ is_blockedr9Úbuiltin_pluginsrÚ mark_rewriteÚload_setuptools_entrypointsÚ __import__rprhrÕÚ ImportErrorr`Úwith_tracebackrmr&r rðr)rOr“r„Ú importspecÚloadedrerzs rErÆz!PytestPluginManager.import_pluginõs¡€õ˜'¥3Ñ'Ô'ð ð Ø 2°WÑ <ñ ô Ð'ð �?Š?˜7Ñ #Ô #ð  t§¢°wÑ'?Ô'?Ð'KØ ˆFà-4½Ð-GÐ-G�Z 'Ñ)Ð)ÈWˆ Ø Ô×&Ò& zÑ2Ô2Ð2à ð Ø×5Ò5°jÀwÐ5ÑOÔOˆFØð Ø�ð (Ý �zÑ "Ô "Ð "õ”+˜jÔ)ˆCØ �MŠM˜#˜wÑ 'Ô 'Ð 'Ð 'Ð 'øõð 5ð 5ð 5ÝØB¨7ÐBÐB°q´v¸a´yÐBÐBñôçŠn˜Qœ_Ñ-Ô-°1ð 5øøøøõð @ð @ð @Ø Ô × 'Ò '¨°!´%°+¸2Ð(>Ñ ?Ô ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?øøøøð @øøøs$ÂCà EÃ9DÄ EÄ #E Å E©rJNrL)rdr¹rJN)F)&r9r:r;r<rNÚ _PluggyPluginrVr#r'rrÕr:r<r=rBrrrr*rUrXrNr5r6rZrrrir`rnrÄrÔrqrŽr7r�rÆrWrXs@rErÁrÁyspø€€€€€ððð3!ð3!ð3!ð3!ð3!ð3!ðj ¨-ð ¸sð ð ð ð ð ð ð. ¸ð ð ð ð ð ð ð<@ððØ#ðØ+3°C¬=ðà �#Œððððððð.˜cððððð +˜cð+ dð+ð+ð+ð+ð ð ð ð ð*'Cà�u˜S $˜YÔ'Ô(ð'Cðð'Cðð 'Cð ð 'Cð ˜T”Nð 'Cð˜* c˜/Ô*ð'Cð ð'Cð'Cð'Cð'CðR4 dð4¨tð4ð4ð4ð4ðFØðFØ(-¨c°:¨oÔ(>ðFØJNðFà ðFðFðFðFðØðØ&+¨C°¨OÔ&<ðØHLðà �%Ô"Ô #ððððð6 àð ðð ð˜#˜z˜/Ô*ð ð ð ð ˆuÔ Ð$Ô %ð ð ð ð ðØ ðØ.3°C¸°OÔ.DðØPTðà Ô ððððð>Là Ô ðLððLð ð LðLðLðLð6rCrSs rEÚ__repr__zNotset.__repr__9s€ØˆzrDN)r9r:r;r«rCrDrEr©r©8s#€€€€€ðððððrDr©Ú package_filesc#óxK—t|¦«}d}|D]¶}d|vo| d¦«}| d¦«dko| d¦«}|rDtj |¦«\}}|dkr| d¦«sd}|V—Œ�|r%tj |¦«}d}|V—Œ·|sig}|D]K}| d¦«} d  | dd …¦«} | r|  | ¦«ŒL|rt|¦«Ed {V—†d Sd Sd S) aMGiven an iterable of file names in a source distribution, return the "names" that should be marked for assertion rewrite. For example the package "pytest_mock/__init__.py" should be added as "pytest_mock" in the assertion rewrite mechanism. This function has to deal with dist-info based distributions and egg based distributions (which are still very much in use for "editable" installs). Here are the file names as seen in a dist-info based distribution: pytest_mock/__init__.py pytest_mock/_version.py pytest_mock/plugin.py pytest_mock.egg-info/PKG-INFO Here are the file names as seen in an egg based distribution: src/pytest_mock/__init__.py src/pytest_mock/_version.py src/pytest_mock/plugin.py src/pytest_mock.egg-info/PKG-INFO LICENSE setup.py We have to take in account those two distribution flavors in order to determine which names should be considered for assertion rewriting. More information: https://github.com/pytest-dev/pytest-mock/issues/167 Fú/z.pyrz __init__.pyÚsetupÚ __editable__TN) rÑÚendswithÚcountr]rHÚsplitextr"Údirnamer\rñrðÚ_iter_rewritable_modules) r¬Ú seen_someÚfnÚis_simple_moduleÚ is_packageÚ module_namer*Ú package_nameÚnew_package_filesÚpartsÚnew_fns rErµrµ@s—èè€õ@˜Ñ'Ô'€MØ€IØð ð ˆØ b˜=Ð?¨R¯[ª[¸Ñ-?Ô-?ÐØ—X’X˜c‘]”] aÒ'ÐF¨B¯KªK¸ Ñ,FÔ,Fˆ Ø ð ÝœW×-Ò-¨bÑ1Ô1‰NˆK˜ð˜gÒ%Ð%¨k×.DÒ.DÀ^Ñ.TÔ.TÐ%Ø � Ø!Ð!Ð!Ð!øØ ð Ýœ7Ÿ?š?¨2Ñ.Ô.ˆL؈IØÐ Ð Ð øà ð Cð ÐØð 1ð 1ˆBØ—H’H˜S‘M”MˆEØ—X’X˜e A B BœiÑ(Ô(ˆFØð 1Ø!×(Ò(¨Ñ0Ô0Ð0øØ ð CÝ/Ð0AÑBÔBÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bð Cð Cð Cð CrDcó‚—eZdZdZeejd¬¦«Gd„d¦«¦«¦«ZGd„dej ¦«Z dd œd e d e ed dfd „Z ed efd„¦«Zed e efd„¦«Zdegdfd dfd„ZdPd„ZdPd„Zd efd„Zd e deed dfd„Z dQdeede ejd dfd„Zded efd„Z e!dRd„¦«Z"dSd„Z#e$d¬ ¦«dTd"„¦«Z%de&ed dfd#„Z'de&ed dfd$„Z(dPd%„Z)deed&ed eefd'„Z*deed(eed)eed*ed+ed,e+d e,eee ffd-„Z-dUdeed.e+d dfd/„Z.e$d¬0¦«d e/d1fd2„¦«Z0dPd3„Z1dPd4„Z2dPd5„Z3d6ed dfd7„Z4d eefd8„Z5dUdeed.e+d dfd9„Z6d:e7d;e8d dfd<„Z9d=ed>ed dfd?„Z:d=efd@„Z;d=edAedBed=edEed+ed e eefdF„Z?d=ed e efdG„Z@eAdHfd=edIe+fdJ„ZBdQd=efdK„ZCdQd=efdL„ZDdMed dfdN„ZEdPdO„ZFdS)Vr¹aAccess to configuration values, pluginmanager and plugin hooks. :param PytestPluginManager pluginmanager: A pytest PluginManager. :param InvocationParams invocation_params: Object containing parameters regarding the :func:`pytest.main` invocation. T)Úfrozencó¼—eZdZUdZeedfed< eee ee fed< e ed< de edeee ee fde ddfd„Z dS) úConfig.InvocationParamsašHolds parameters passed during :func:`pytest.main`. The object attributes are read-only. .. versionadded:: 5.1 .. note:: Note that the environment variable ``PYTEST_ADDOPTS`` and the ``addopts`` ini option are handled by pytest, not being included in the ``args`` attribute. Plugins accessing ``InvocationParams`` must be aware of that. .r`rar¼rJNcóÈ—t |dt|¦«¦«t |d|¦«t |d|¦«dS)Nr`rar¼)ÚobjectÚ __setattr__Útuple)rOr`rar¼s rErNz Config.InvocationParams.__init__¥sX€õ × Ò ˜t V­U°4©[¬[Ñ 9Ô 9Ð 9Ý × Ò ˜t Y°Ñ 8Ô 8Ð 8Ý × Ò ˜t U¨CÑ 0Ô 0Ð 0Ð 0Ð 0rD)r9r:r;r<rrVÚ__annotations__rrrr¡rrrNrCrDrErÂrÂ�s¼€€€€€€ð ð ð�C˜�HŒoÐÐÑØJؘ( 5¨¨mÐ);Ô#<Ô=Ô>Ð>Ð>Ñ>Ø-Ø ˆ ˆ ‰ ØGð 1ð˜3”-ð 1ð˜h u¨S°-Ð-?Ô'@ÔAÔBð 1ð ð 1ð ð 1ð 1ð 1ð 1ð 1ð 1rDrÂcól—eZdZdZej¦«Zej¦«Zej¦«ZdS)úConfig.ArgsSourcezSIndicates the source of the test arguments. .. versionadded:: 7.2 N) r9r:r;r<ÚenumÚautoÚARGSÚINCOVATION_DIRÚ TESTPATHSrCrDrEÚ ArgsSourcerɰsA€€€€€ð ð ð ˆtŒy‰{Œ{ˆà"˜œ™œˆà�D”I‘K”Kˆ ˆ ˆ rDrÏNr½rÇr¾rJcó&—ddlm}m}|€)| ddt j¦«¬¦«}t j¦«|_ ||_ |}|d|›d|›d�|j d¬ ¦«|_ ||_ t¦«|_ |j|_dd lm}|j jj d ¦«|_||j j¦«|_i|_d|_i|_g|_|j  |d ¦«d |_|jj t=|j |j ¬¦«¬¦«t>j j!|_"g|_#tHrddl%m&}d|_'dSdS)Nr)ÚParserÚ FILE_OR_DIRrCr»z%(prog)s [options] [z] [z] [...]T)ÚusageÚ processoptÚ _ispytest)ÚPathAwareHookProxyrdÚ pytestconfigF)ÚparserrÇr-r)ÚCache)(Ú argparsingrÑrÒrÂrrÃÚargparseÚ NamespaceÚoptionr¾Ú _processoptÚ_parserrÇr,ÚstashÚ_storeÚcompatrÖrrrrkÚ _inicacheÚ _override_iniÚ _opt2destÚ_cleanuprÕrÚpytest_addoptionr3r4r¹rÏrÌÚ args_sourcer`rÚ_pytest.cacheproviderrÙÚcache)rOrÇr¾rÑrÒÚ_arÖrÙs rErNzConfig.__init__½sÝ€ð 4Ð3Ð3Ð3Ð3Ð3Ð3Ð3à Ð $Ø $× 5Ò 5Ø ­4¬8©:¬:ð!6ñ!ô!Ð õÔ(Ñ*Ô*ˆŒ ð ð "3ˆÔð ð ˆØ�vØ;¨Ð;Ð;°Ð;Ð;Ð;ØÔ'Øð ñ ô ˆŒ ð +ˆÔð õ ‘W”WˆŒ ð ð ”jˆŒ à.Ð.Ð.Ð.Ð.Ð.àÔ'Ô-Ô2×6Ò6°xÑ@Ô@ˆŒ Ø&Ð& tÔ'9Ô'>Ñ?Ô?ˆŒ Ø)+ˆŒØ,.ˆÔØ)+ˆŒØ24ˆŒ Ø Ô×#Ò# D¨.Ñ9Ô9Ð9Ø ˆÔØ Œ Ô"×0Ò0ݘtœ|¸4Ô;MÐNÑNÔNð 1ñ ô ð õ"Ô,Ô1ˆÔØ!ˆŒ å ð /Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à*.ˆDŒJˆJˆJð /ð /rDcó—|jS)znThe path to the :ref:`rootdir `. :type: pathlib.Path .. versionadded:: 6.1 )Ú _rootpathrSs rErEzConfig.rootpaths €ðŒ~ÐrDcó—|jS)zThe path to the :ref:`configfile `. :type: Optional[pathlib.Path] .. versionadded:: 6.1 )Ú_inipathrSs rEÚinipathzConfig.inipath s €ðŒ}ÐrDÚfunccó:—|j |¦«dS)zxAdd a function to be called when the config object gets out of use (usually coinciding with pytest_unconfigure).N)rærð)rOrñs rEÚ add_cleanupzConfig.add_cleanups €ð Œ ×Ò˜TÑ"Ô"Ð"Ð"Ð"rDcó—|jrJ‚d|_tj¦«5tjd¦«|jj t|¬¦«¬¦«ddd¦«dS#1swxYwYdS)NTÚdefaultrcr-)rr¯Úcatch_warningsÚ simplefilterrkrBr3r4rSs rEÚ _do_configurezConfig._do_configuresØ€ØÔ#Ð#Ð#Ð#؈ÔÝ Ô $Ñ &Ô &ð Oð OÝ Ô ! )Ñ ,Ô ,Ð ,Ø ŒIÔ &× 4Ò 4½DÈÐ %s ) rîrurkÚpytest_internalerrorÚanyrVr\rprqrrƒ)rOrIrÝrgrÚresrrs rEÚnotify_exceptionzConfig.notify_exceptionHsë€ð ð •g˜f k°5Ñ9Ô9ð Ø%+ˆEˆEàˆEØ—/’/Ø¥g¨f°lÀEÑ&JÔ&JÐRWð"ñ ô ˆðŒi×,Ò,°WÀgÐ,ÑNÔNˆÝ�3‰xŒxð #ݘG™ œ ×*Ò*¨4Ñ0Ô0ð #ð #�Ý” × Ò Ð!6¸Ñ!=Ñ>Ô>Ð>Ý” × Ò Ñ"Ô"Ð"Ð"ð #ð #ð #ð #rDÚnodeidcóx—|jj|jkr$|j|z }t|jj|¦«}|SrL)r¾r¼rEr()rOrÚfullpaths rEÚcwd_relative_nodeidzConfig.cwd_relative_nodeidZs;€à Ô !Ô %¨¬Ò 6Ð 6Ø”} vÑ-ˆHÝ  Ô!7Ô!;¸XÑFÔFˆF؈ rDcóâ—t|¦«}|jj |¦«| |d¬¦«|jjD]}|j |¦«Œ|S)z$Constructor usable for subprocesses.F©Úaddopts)rÉrÝÚ__dict__ÚupdaterrarÇrÔ)ÚclsÚ option_dictr`rdr]s rEÚ fromdictargszConfig.fromdictargsass€õ˜DÑ!Ô!ˆØŒ Ô×%Ò% kÑ2Ô2Ð2Ø� Š �T 5ˆ Ñ)Ô)Ð)Ø”Ô&ð 7ð 7ˆAØ Ô × 3Ò 3°AÑ 6Ô 6Ð 6Ð 6؈ rDrr1cóä—|j|jzD]}|j|j|<Œt |d¦«rØÔ4Ô;Ø"×)Ò)¨+Ñ6Ô6Ø'Ô9Ô=Ø!Ô*Øð 6ñ ô шˆkð Ô×1Ò1ØØÔ4Ô;Ø#Ô8ÔCØ!Ô*Ø#Ô8ÔCØ#Ô8ÔCð 2ñ ô ð ð ð rDcó<—|j |tj|j¦«¬¦«\}}t |j|j|z|jpd|¬¦«\}}}||_||_ ||_ t|j ¦«|jj d<t|j¦«|jj d<|j ddd¦«|j dd ¦«|j d d dg¬ ¦«|jpd |_dS)N©Ú namespace)Úrootdir_cmd_argrdÚrootdirÚinifilerzExtra command line optionsr`Ú minversionz!Minimally required pytest versionÚrequired_pluginsz.Plugins that must be present for pytest to run)rÓrõrC)rßÚparse_known_and_unknown_argsÚcopyrÝrÚ inifilenamer-r4rírïÚinicfgrVrEÚ extra_inforðÚaddiniÚ override_inirä)rOr`ÚnsÚ unknown_argsrErðr;s rEÚ_initinizConfig._initiniŠs-€Øœ<×DÒDØ �DœI d¤kÑ2Ô2ðEñ ô шˆLõ%4Ø ŒNØ ŒN˜\Ñ )ØœJÐ.¨$Øð % ñ% ô% Ñ!ˆ�'˜6ð "ˆŒØˆŒ ؈Œ Ý-0°´Ñ-?Ô-?ˆŒ Ô  Ñ*Ý-0°´Ñ->Ô->ˆŒ Ô  Ñ*Ø Œ ×Ò˜IÐ'CÀVÑLÔLÐLØ Œ ×Ò˜LÐ*MÑNÔNÐNØ Œ ×ÒØ Ø <ØØð ñ ô ð ð  œ_Ð2°ˆÔÐÐrDcó&—|j |¦«\}}t|dd¦«}|dkrGddl} |j |¦«}| |¦«n#t$rd}YnwxYw| |¦«dS)zïInstall the PEP 302 import hook if using assertion rewriting. Needs to parse the --assert= option from the commandline and find all the installed plugins to mark them for rewriting by the importhook. Ú assertmodeÚplainÚrewriterN) rßr8rîrr§Úinstall_importhookÚ_mark_plugins_for_rewriteÚ SystemErrorÚ_warn_about_missing_assertion)rOr`r?r@rròrks rEÚ_consider_importhookzConfig._consider_importhook£s¼€ð œ<×DÒDÀTÑJÔJшˆLÝ�r˜<¨Ñ1Ô1ˆØ �9Ò Ð Ø $Ð $Ð $Ð $ð 5ØÔ(×;Ò;¸DÑAÔA�ð×.Ò.¨tÑ4Ô4Ð4Ð4øõð ð ð Ø���ð øøøð ×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0sºA*Á* A9Á8A9cóè—||j_tj d¦«rdSd„t j¦«D¦«}t|¦«D]}| |¦«ŒdS)z‹Given an importhook, mark for rewrite any top-level modules or packages in the distribution package for all pytest plugins.ÚPYTEST_DISABLE_PLUGIN_AUTOLOADNc3óˆK—|]=}td„|jD¦«¦«¯ |jpgD]}t|¦«V—ŒŒ>dS)c3ó,K—|]}|jdkV—ŒdS)r•N)Úgroup)räÚeps rEú z=Config._mark_plugins_for_rewrite...Äs)èè€ÐFÐF¨b�2”8˜zÒ)ÐFÐFÐFÐFÐFÐFrDN)rÚ entry_pointsÚfilesrV)räÚdistÚfiles rErQz3Config._mark_plugins_for_rewrite..Ás~èè€ð ð àÝÐFÐF°DÔ4EÐFÑFÔFÑFÔFð ðœ Ð( bð  ð ðõ �‰IŒIð ð ð ð ð ð ð rD) rÇrr]rrr$Ú distributionsrµr™)rOrkr¬rãs rErGz Config._mark_plugins_for_rewrite·sŒ€ð+/ˆÔÔ'å Œ:�>Š>Ð:Ñ ;Ô ;ð à ˆFð ð å*Ô8Ñ:Ô:ð ñ ô ˆ õ-¨]Ñ;Ô;ð $ð $ˆDØ × Ò ˜dÑ #Ô #Ð #Ð #ð $ð $rDÚviacó®—||j_ |j |tj|j¦«¬¦«|j`n #|j`wxYw|S)zValidate known args.r1)rßÚ_config_source_hintr8r9rÝ)rOr`rWs rEÚ_validate_argszConfig._validate_argsËsg€à+.ˆŒ Ô(ð 1Ø ŒL× 5Ò 5Ø¥¤ ¨$¬+Ñ 6Ô 6ð 6ñ ô ð ð” Ð0Ð0ø�” Ð0Ð 0Ð 0Ð 0Ð 0àˆ s Ž3A Á ArCr(r*rEr0c óŒ—|rtjj}|}n«||kr€tjj}|r|}nlg}|D]8} | t t j| d¬¦«¦«¦«Œ9|r*|s(|r&d} | t| ¦«d¬¦«ng}|s!tjj }t|¦«g}||fS)z„Decide the args (initial paths/nodeids) to use given the relevant inputs. :param warn: Whether can issue warnings. T)Ú recursivez˜No files were found in testpaths; consider removing or adjusting your testpaths configuration. Searching recursively from the current directory instead.r6©Ú stacklevel) r¹rÏrÌrÎÚextendÚsortedr\ÚiglobÚissue_config_time_warningr-rÍrV) rOr`rCr(r*rEr0ÚsourceÚresultrHÚ warning_texts rEr+zConfig._decide_args×s€ð ð /ÝÔ&Ô+ˆF؈FˆFà Ò)Ð)ÝÔ*Ô4�ØðØ&�F�Fà�FØ )ðPðP˜ØŸ š ¥f­T¬Z¸ÈÐ-MÑ-MÔ-MÑ&NÔ&NÑOÔOÐOÐOØ ð ¨ð Øðð!\ð)ð !×:Ò:Ý 3°LÑ AÔ AÈað;ñôðøð�Øð /ÝÔ*Ô9�ݘnÑ-Ô-Ð.�Ø�vˆ~ÐrDrcó¶—|r_tj dd¦«}t|¦«r0| t j|¦«d¦«|z|dd…<| |¦«|r1| | d¦«d¦«|z|dd…<|j   |tj |j ¦«¬¦«|_ | ¦«| |¦«|j |d¬¦«tj d ¦«s|j d ¦«|j ¦«|j   |tj |j ¦«¬¦«|_ | ¦«| ¦«|j jr&| t0jjd ¬ ¦«|j j€A|j�t;|jj¦«}nt;|j¦«}||j _ |j  !|||j ¬ ¦«dS#tD$rQ}|j j#s |j j$r-| tKd|j&›�¦«d ¬ ¦«n‚Yd}~dSd}~wwxYw)NÚPYTEST_ADDOPTSr–zvia PYTEST_ADDOPTSrzvia addopts configr1Fr¿rLr•r5r])r&r`rØz"could not load initial conftests: )'r]rrr{rZÚshlexr\rAr.rßÚparse_known_argsr9rÝr,Ú _checkversionrJrÇrÄršrŽÚ_validate_pluginsÚ_warn_about_skipped_pluginsÚstrictrbròróÚ STRICT_OPTIONrFrðrVrÛrErkr/rGrrr-rH)rOr`rÚ env_addoptsrFrzs rEÚ _preparsezConfig._preparses€Ø ð Ýœ*Ÿ.š.Ð)9¸2Ñ>Ô>ˆKÝ�;ÑÔð à×'Ò'­¬ °KÑ(@Ô(@ÐBVÑWÔWØñð�Q�Q�Q‘ð � Š �dÑÔÐØ ð à×#Ò# D§K¢K° Ñ$:Ô$:ÐÑ?Ô?ð Gð Ô × :Ò :¸:Ñ FÔ FÐ FØ Ô×'Ò'Ñ)Ô)Ð)à$(¤L×$AÒ$AØ �DœI dÔ&?Ñ@Ô@ð%Bñ% ô% ˆÔ!ð ×ÒÑ Ô Ð Ø ×(Ò(Ñ*Ô*Ð*à Ô $Ô +ð Ø × *Ò *ÝÔ"Ô0¸Qð +ñ ô ð ð Ô $Ô /Ð 7ØŒ|Ð'Ý  ¤Ô!4Ñ5Ô5� � å  ¤Ñ/Ô/� Ø3=ˆDÔ %Ô 0ð Ø ŒI× 3Ò 3Ø!¨°T´\ð 4ñ ô ð ð ð øõ%ð ð ð ØÔ(Ô-ð °Ô1JÔ1Rð ð×.Ò.Ý'Ð(UÈQÌVÐ(UÐ(UÑVÔVØ ð/ñôððð ð ðððððøøøøð øøøsÉ"I=É= KÊAKËK)r!)NNNc#ó:K—dV—| ¦«dSrL)Ú_validate_config_optionsrSs rEÚpytest_collectionzConfig.pytest_collection=s)èè€ð ˆˆˆØ ×%Ò%Ñ'Ô'Ð'Ð'Ð'rDcóF—ddl}|j dd¦«}|r}ddlm}t |t ¦«s| d|jz¦«‚||¦«||j ¦«kr*| |j›d|›d|j ›d�¦«‚dSdS)Nrr6©ÚVersionz'%s: 'minversion' must be a single valuez: 'minversion' requires pytest-z, actual pytest-ú') r2r;rÚpackaging.versionrvrÎrVrrðÚ __version__)rOr2Úminverrvs rErjzConfig._checkversionDs݀؈ ˆ ˆ à”—’ ¨tÑ4Ô4ˆØ ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1å˜f¥cÑ*Ô*ð Ø×'Ò'Ø=ÀÄ ÑLñôððˆw�v‰Œ  ¨Ô);Ñ!<Ô!<Ò<Ð<Ø×'Ò'𜠘 ˜ ؘ˜ØÔ*Ð*Ð*ð ñôðð ð ð=Ðz,Config._validate_plugins..is#€ÐWÐWÐWÁÀÀ4˜DÔ-¨t¬|ÐWÐWÐWrDT)Ú prereleaseszMissing required plugins: {}ré)r`r.rxrvÚpackaging.requirementsr€r�rÇÚlist_plugin_distinforðrãÚ specifierÚcontainsrrRrñ) rOr7rvr€r�Ú plugin_infoÚplugin_dist_infoÚmissing_pluginsÚrequired_pluginÚreqs rErkzConfig._validate_plugins_s‘€Ý! $§+¢+Ð.@Ñ"AÔ"AÑBÔBÐØð Ø ˆFð .Ð-Ð-Ð-Ð-Ð-ØJÐJÐJÐJÐJÐJÐJÐJàÔ(×=Ò=Ñ?Ô?ˆ ØWÐWÈ;ÐWÑWÔWÐàˆØ/ð 8ð 8ˆOð Ø!�k /Ñ2Ô2��øØ%ð ð ð Ø×&Ò& Ñ7Ô7Ð7Ø�ð øøøðŒxÐ/Ð/Ð/Ø×&Ò& Ñ7Ô7Ð7Ð7Ø”]×+Ò+Ø�Ð(¨¬Ô2Ñ3Ô3Àð,ñôð 8ð ×&Ò& Ñ7Ô7Ð7øà ð ÝØ.×5Ò5°d·i²iÀÑ6PÔ6PÑQÔQñôð ð ð sÁ! A-Á-B  B rúcó„—|jjrt|¦«‚| t |¦«d¬¦«dS)Nr6r])r,Ú strict_configrrbr-)rOrús rEr}zConfig._warn_or_fail_if_strictsG€Ø Ô $Ô 2ð &ݘWÑ%Ô%Ð %à ×&Ò&Õ':¸7Ñ'CÔ'CÐPQÐ&ÑRÔRÐRÐRÐRrDcóB‡—|jjŠˆfd„|jD¦«S)Ncó•—g|]}|‰v¯|‘Œ SrCrC)rärãÚ parser_inicfgs €rEú z0Config._get_unknown_ini_keys..‡s#ø€ÐJÐJÐJ˜°¸MÐ0IÐ0I�Ð0IÐ0IÐ0IrD)rßÚ_inidictr;)rOr“s @rEr|zConfig._get_unknown_ini_keys…s)ø€Øœ Ô-ˆ ØJÐJÐJÐJ ¤ÐJÑJÔJÐJrDcó.—|jgks Jd¦«‚|jj t |j¬¦«¬¦«| ||¬¦«|j ||¬¦«d|j_ |j  ||j |j ¬¦«}|  ||j j| d¦«|jj|jd¬ ¦«\|_|_dS#t($rYdSwxYw) Nz:can only parse cmdline args at most once per Config object)rÇr-r)rdr`Tr1r(r))r`rkÚpytest_addhooksr3r4rÇrpÚpytest_cmdline_preparserßÚafter_preparseÚparse_setoptionrÝr+r,rCr.r¾r¼rErèr)rOr`rs rErz Config.parse‰s5€ð ŒI˜ŠOˆOˆOØ Gñ ŒOˆOà Œ Ô!×/Ò/Ý dÔ&8Ð9Ñ9Ô9ð 0ñ ô ð ð �Š�t WˆÑ-Ô-Ð-à Œ ×)Ò)°¸DÐ)ÑAÔAÐAØ&*ˆŒ Ô#ð Ø”<×/Ò/Ø�d”k¨T¬[ð0ñôˆDð+/×*;Ò*;ØØÔ0Ô7ØŸ+š+ kÑ2Ô2Ø#Ô5Ô9ØœØð +<ñ+ô+Ñ 'ˆDŒI�tÔ'Ð'Ð'øõð ð ð Ø ˆDˆDð øøøs A;DÄ DÄDÚwarningr^cóN—|j d¦«rdS|jjpg}| d¦«}t jd¬¦«5}t jdt|¦«¦«t||¦«t j ||¬¦«ddd¦«n #1swxYwY|rntj |dz ¦«}|j j|j|j jf}|jj t)|d d d |¬ ¦«¬ ¦«dSdS)aIssue and handle a warning during the "configure" stage. During ``pytest_configure`` we can't capture warnings using the ``catch_warnings_for_item`` function because it is not possible to have hookwrappers around ``pytest_configure``. This function is mainly intended for plugins that need to issue warnings during ``pytest_configure`` (or similar stages). :param warning: The warning instance. :param stacklevel: stacklevel forwarded to warnings.warn. r¯NÚfilterwarningsT)ÚrecordÚalwaysr]rrrdr–)Úwarning_messageÚwhenrÚlocationr-)rÇr—r,Úpythonwarningsr.r¯rör÷rÓÚapply_warning_filtersr0rpÚ _getframeÚf_codeÚ co_filenameÚf_linenoÚco_namerkÚpytest_warning_recordedr3r4)rOr›r^Úcmdline_filtersÚconfig_filtersÚrecordsÚframer¢s rErbz Config.issue_config_time_warning¤su€ð Ô × (Ò (¨Ñ 4Ô 4ð Ø ˆFàÔ3ÔBÐHÀbˆØŸšÐ%5Ñ6Ô6ˆå Ô $¨DÐ 1Ñ 1Ô 1ð :°WÝ Ô ! (­D°©M¬MÑ :Ô :Ð :Ý ! .°/Ñ BÔ BÐ BÝ ŒM˜'¨jÐ 9Ñ 9Ô 9Ð 9ð :ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð ð Ý”M *¨q¡.Ñ1Ô1ˆEØ”|Ô/°´ÀÄÔAUÐUˆHØ ŒIÔ -× ;Ò ;ÝØ$+¨A¤JØ!ØØ%ð ñôð <ñ ô ð ð ð ð ð sÁA B*Â*B.Â1B.rãrrcóˆ—| |¦«}t|t¦«sJ‚| |¦«dS)z©Add a line to an ini-file option. The option must have been declared but might not yet be set in which case the line becomes the first line in its value.N)r.rÎrÑrð)rOrãrrr]s rErAzConfig.addinivalue_lineÇs>€ð �KŠK˜Ñ Ô ˆÝ˜!�TÑ"Ô"Ð"Ð"Ð"Ø �Š�‰ŒˆˆˆrDcó€— |j|S#t$r$| |¦«x|j|<}|cYSwxYw)aReturn configuration value from an :ref:`ini file `. If the specified name hasn't been registered through a prior :func:`parser.addini ` call (usually from a plugin), a ValueError is raised. )rãrgÚ_getini)rOrãÚvals rEr.z Config.getiniÏsU€ð Ø”> $Ô'Ð 'øÝð ð ð Ø)-¯ª°dÑ);Ô);Ð ;ˆDŒN˜4Ñ  3؈JˆJˆJð øøøs ‚ �+=¼=rÓÚvaluecó,—d|›�}t||¦«‚)Nzunknown configuration type: )rn)rOrãrÓr³rs rEÚ_getini_unknown_typezConfig._getini_unknown_typeÞs€Ø3¨TÐ3Ð3ˆÝ˜˜eÑ$Ô$Ð$rDcóV‡ — |jj|\}}}n%#t$r}td|›�¦«|‚d}~wwxYw| |¦«}|€, |j|}n#t$r|�|cYS|€YdSgcYSwxYw|}|dkrN|j€J‚|jjŠ t|t¦«rtj |¦«n|}ˆ fd„|D¦«S|dkr+t|t¦«rtj |¦«n|S|dkrEt|t¦«r.d„td„|  d ¦«¦«D¦«S|S|d kr.tt|¦« ¦«¦«S|d kr|S|€|S| |||¦«S) Nzunknown configuration value: r–Úpathscó•—g|]}‰|z ‘ŒSrCrC)rär]Údps €rEr”z"Config._getini..sø€Ð1Ð1Ð1˜q�B˜‘FÐ1Ð1Ð1rDr`Úlinelistcó—g|]}|¯|‘ŒSrCrC)räÚts rEr”z"Config._getini.. s€ÐTÐTÐT˜aÐRSÐT˜ÐTÐTÐTrDcó*—| ¦«SrL©r})r]s rEúz Config._getini.. s€°·²±´€rDrir<Ústring)rßr•rgrnÚ_get_override_ini_valuer;rðrÛrÎrVrhr\ÚmapÚ _strtoboolr}rµ) rOrãÚ descriptionrÓrõrzÚoverride_valuer³Ú input_valuesr¹s @rEr±zConfig._getiniâsø€ð NØ)-¬Ô)>¸tÔ)DÑ &ˆK˜˜w˜wøÝð Nð Nð NÝÐE¸TÐEÐEÑFÔFÈAÐ Møøøøð Nøøøà×5Ò5°dÑ;Ô;ˆØ Ð !ð Øœ  DÔ)��øÝð ð ð ØÐ&Ø"�N�N�NØ�<ؘ2˜2Ø� � � ð  øøøð#ˆEð �7Š?ˆ?à”<Ð+Ð+Ð+Ø”Ô$ˆBÝ1;¸EÅ3Ñ1GÔ1GÐR�5œ; uÑ-Ô-Ð-ÈUˆLØ1Ð1Ð1Ð1 LÐ1Ñ1Ô1Ð 1Ø �VŠ^ˆ^Ý)3°E½3Ñ)?Ô)?ÐJ•5”;˜uÑ%Ô%Ð%ÀUÐ JØ �ZÒ Ð Ý˜%¥Ñ%Ô%ð ØTÐT¥3Ð':Ð':¸E¿KºKÈÑA?rHcóÆ— |j ||| d¦«|¦«\}}n#t$rYdSwxYw|j€J‚t |j¦«j}g}|D]s}t|tj ¦«rt |¦«}n2|  dtj ¦«}t||z ¦«}|  |¦«Œt|S)NrGr®)rÇriÚ getoptionrgrŠrrÛrÎr]rÏr1r^r'rð) rOrãrHrEreÚrelrootsÚmodpathÚvaluesÚrelroots rEÚ_getconftest_pathlistzConfig._getconftest_pathlistsô€ð Ø Ô.×AÒAØ�d˜DŸNšN¨<Ñ8Ô8¸(ñô‰MˆC��øõð ð ð Ø�4�4ð øøøàŒ|Ð'Ð'Ð'Ý�s”|Ñ$Ô$Ô+ˆØˆØð #ð #ˆGݘ'¥2¤;Ñ/Ô/ð :ݘw™-œ-��à!Ÿ/š/¨#­r¬vÑ6Ô6�Ý& w°Ñ'8Ñ9Ô9�Ø �MŠM˜'Ñ "Ô "Ð "Ð "؈ s‚36¶ AÁAcóÌ—d}|jD]Y} | dd¦«\}}||kr|}Œ%#t$r(}td |¦«¦«|‚d}~wwxYw|S)Nrèrz9-o/--override-ini expects option=value style (got: {!r}).)rär\rnrrR)rOrãr³Ú ini_configr~Úuser_ini_valuerzs rErÁzConfig._get_override_ini_value-s €ØˆðÔ,ð +ð +ˆJð +Ø&0×&6Ò&6°s¸AÑ&>Ô&>Ñ#��^ð˜$’;�;Ø*�Eøøõð ð ð Ý ØO×VÒVØ"ñôñôðð øøøøð øøøðˆ s�/¯ A!¹#AÁA!FÚskipcó6—|j ||¦«} t|j|¦«}|€|rt |¦«‚|S#t$rG}|t ur|cYd}~S|rddl}| d|›d�¦«td|›�¦«|‚d}~wwxYw)aiReturn command line option value. :param name: Name of the option. You may also specify the literal ``--OPT`` option instead of the "dest" option name. :param default: Default value if no option of that name exists. :param skip: If True, raise pytest.skip if option does not exists or has a None value. Nrzno z option foundzno option named ) rårrîrÝrïÚnotsetr2rÑrn)rOrãrõrÑr²rzr2s rErÈzConfig.getoption@sÓ€ðŒ~×!Ò! $¨Ñ-Ô-ˆð Aݘ$œ+ tÑ,Ô,ˆC؈{˜tˆ{Ý$ TÑ*Ô*Ð*؈JøÝð Að Að AØ�fÐ$Ð$Ø������Øð 9Ø� � � à— ’ Ð7 $Ð7Ð7Ð7Ñ8Ô8Ð8ÝÐ8°Ð8Ð8Ñ9Ô9¸qÐ @øøøøð Aøøøs#�)AÁ BÁ BÁBÁ!2BÂBcó,—| |¦«S)z$Deprecated, use getoption() instead.©rÈ©rOrãrHs rEÚgetvaluezConfig.getvalueXs€à�~Š~˜dÑ#Ô#Ð#rDcó0—| |d¬¦«S)z-Deprecated, use getoption(skip=True) instead.T)rÑrÕrÖs rEÚgetvalueorskipzConfig.getvalueorskip\s€à�~Š~˜d¨ˆ~Ñ.Ô.Ð.rDrcó„—t¦«s1|dkrd}nd}| t|¦«d¬¦«dSdS)NrDzRASSERTIONS ARE NOT EXECUTED and FAILING TESTS WILL PASS. Are you using python -O?z¥assertions not in test modules or plugins will be ignored because assert statements are not executed by the underlying Python interpreter (are you using python -O?) r6r])Ú_assertion_supportedrbr-)rOrres rErIz$Config._warn_about_missing_assertion`sp€Ý#Ñ%Ô%ð Ø�wŠˆð(ð� ð3ðð × *Ò *Ý# LÑ1Ô1Øð +ñ ô ð ð ð ð ð rDc ó~—|jjD]/\}}| td|›d|›�¦«d¬¦«Œ0dS)Nzskipped plugin ú: r5r])rÇr rbr-)rOrºrs rErlz"Config._warn_about_skipped_pluginsusg€Ø $Ô 2Ô Bð ð Ñ ˆK˜Ø × *Ò *Ý#Ð$L°kÐ$LÐ$LÀsÐ$LÐ$LÑMÔMØð +ñ ô ð ð ð ð rDr rL)rJr¹)rr1rJN)r&r¹rJN)T)Gr9r:r;r<r#Ú dataclassesÚ dataclassrÂrÊÚEnumrÏrÁrrNÚpropertyrrErðr rórørmr"rrrVrÖr r×rÛrÜrrÚ classmethodr rÞÚhookimplr/rrArJrGrZr<rr+rpr rsrjrrrkr}r|rÚWarningÚintrbrAr.rrµr±rÍrÁrÓrÈr×rÙrIrlrCrDrEr¹r¹�s¯€€€€€ððð Ø€[Ô $Ð'Ñ'Ô'ð1ð1ð1ð1ð1ñ1ô1ñ(Ô'ñ „Uð1ðB  ð  ð  ð  ð  �T”Yñ  ô  ð  ð"9=ð A/ðA/ðA/à*ðA/ð$Ð$4Ô5ð A/ð ð A/ðA/ðA/ðA/ðFð˜$ðððñ„Xððð˜ $œðððñ„Xðð# ¨¨T¨Ô 2ð#°tð#ð#ð#ð#ð OðOðOðOððððð$ ^ð$ð$ð$ð$ð Ø0ðØ8<¸S¼ ðà ððððð804ð#ð#à˜}Ô-ð#ð˜Ô+Ô,ð#ð ð #ð#ð#ð#ð$¨#ð°#ððððððððñ„[ðð<ð<ð<ð<ð€X�dÐÑÔð ð ð ñÔð ð,3˜X cœ]ð3¨tð3ð3ð3ð3ð21¨°#¬ð1¸4ð1ð1ð1ð1ð($ð$ð$ð$ð(  4¨¤9ð °3ð ¸4À¼9ð ð ð ð ð)ð�3Œið)ð�S” ð )𠘔9ð )ð ð )ðð)ðð)ð ˆt�CŒy˜*Ð$Ô %ð)ð)ð)ð)ðV9ð9˜d 3œið9°$ð9À$ð9ð9ð9ð9ðv€X˜$ÐÑÔð( 9Ð-=Ô#>ð(ð(ð(ñ Ôð(ð ðððð.LðLðLðLððððð@S¨sðS°tðSðSðSðSð K t¨C¤yðKðKðKðKðð˜$˜sœ)ð¨dð¸dððððð6!°ð!Àcð!Èdð!ð!ð!ð!ðF Sð°ð¸ððððð ˜3ð ð ð ð ð%¨ð%°Cð%ÀÀcÈ4ÐPSÌ9ÀnÔ@Uð%ð%ð%ð%ð4@˜Cð4@ð4@ð4@ð4@ðlØðØ#ðØ/3ðà �$�t”*Ô ððððð*¨Cð°H¸S´Mððððð&,2ÀðAðA˜cðA¸ðAðAðAðAð0$ð$˜Sð$ð$ð$ð$ð/ð/ 3ð/ð/ð/ð/ð°#ð¸$ððððð*ðððððrDcó*— J‚#t$rYdSwxYw)NFT)ÚAssertionErrorrCrDrErÛrÛ}s.€ð؈uøÝ ððð؈tˆtðøøøs ‚„ ‘rdrUcóâ—t|¬¦«}|jjdkrd|_n|jjdkrd|_|jjdkrd|_n|jjdkrd|_|S)zÚCreate a TerminalWriter instance configured according to the options in the config object. Every code which requires a TerminalWriter object and has access to a config object should use this function. )rUÚyesTÚnoF)r"rÝÚcolorÚ hasmarkupÚcode_highlight)rdrUr|s rEÚcreate_terminal_writerrî†s|€õ ˜TÐ "Ñ "Ô "€Bà „}Ô˜eÒ#Ð#؈Œ ˆ Ø ŒÔ  Ò $Ð $؈Œ à „}Ô# uÒ,Ð,Ø ˆÔÐØ ŒÔ %¨Ò -Ð -Ø!ˆÔà €IrDr²cóf—| ¦«}|dvrdS|dvrdStd|›�¦«‚)aConvert a string representation of truth to True or False. True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. .. note:: Copied from distutils.util. )Úyrér¼ÚtrueÚonÚ1T)r~rêÚfÚfalseÚoffÚ0Fzinvalid truth value )Úlowerrn)r²s rErÃrÞsJ€ð �)Š)‰+Œ+€CØ Ð2Ð2Ð2؈tØ Ð5Ð 5Ð 5؈uåÐ7°Ð7Ð7Ñ8Ô8Ð8rDé2)Úmaxsizer�Úescapezwarnings._ActionKindc ót—d}td|›d�¦«}| d¦«}t|¦«dkrHd}tdt|¦«›d|›d �¦«}t| |¬ ¦«¦«‚t|¦«dkr(| d ¦«t|¦«dk°(d „|D¦«\}}} } } t j|¦«} nG#t j$r5} t| t| ¦«¬ ¦«¦«‚d } ~ wwxYw t| ¦«}nZ#t$rMtj ¦«}| d¬¦«}t| |¬ ¦«¦«‚wxYw|r|rtj|¦«}| r|rtj| ¦«dz} | ra t#| ¦«}|dkrt%d¦«‚n=#t$$r.} t| d| ›d| ›�¬ ¦«¦«‚d } ~ wwxYwd}| ||| |fS)zíParse a warnings filter string. This is copied from warnings._setoption with the following changes: * Does not apply the filter. * Escaping is optional. * Raises UsageError so we get nice error messages on failure. TzF while parsing the following warning configuration: z8 This error occurred: {error} ú:r8zJhttps://docs.python.org/3/library/warnings.html#describing-warning-filtersz Too many fields (z�), expected at most 5 separated by colons: action:message:category:module:line For more information please consult: z )Úerrorr–c3ó>K—|]}| ¦«V—ŒdSrLr¾)räÚss rErQz'parse_warning_filter..Ûs*èè€Ð3MÐ3MÀ!°A·G²G±I´IÐ3MÐ3MÐ3MÐ3MÐ3MÐ3MrDNr )rgz\Zrznumber is negativezinvalid lineno rÝ)rr\r{rrRrðr¯Ú _getactionÚ _OptionErrorrVÚ_resolve_warning_categoryrUr Ú from_currentruÚrerûrårn)r�rûÚ__tracebackhide__Úerror_templater½Údoc_urlrþÚaction_rúÚ category_ÚmoduleÚlineno_ÚactionrzÚcategoryr{Úexception_textÚlinenos rEÚparse_warning_filterr°sÀðÐÝð ð ð ð ð ñ ô €Nð �IŠI�c‰NŒN€EÝ ˆ5�z„z�A‚~€~à Xð õð Ý! %™jœjð ð ð 3:ð  ð ð ñ ô ˆõ˜×.Ò.°UÐ.Ñ;Ô;Ñ<Ô<Ð<å ˆe‰*Œ*�qŠ.ˆ.Ø � Š �RÑÔÐõ ˆe‰*Œ*�qŠ.ˆ.à3MÐ3MÀuÐ3MÑ3MÔ3MÑ0€GˆW�i ¨ð>Ý)1Ô)<¸WÑ)EÔ)EˆˆøÝ Ô ð>ð>ð>ݘ×.Ò.µS¸±V´VÐ.Ñ<Ô<Ñ=Ô=Ð=øøøøð>øøøðFÝ";¸IÑ"FÔ"FˆˆøÝ ðFðFðFÝ Ô-Ñ/Ô/ˆØ!×)Ò)°Ð)Ñ9Ô9ˆÝ˜×.Ò.°^Ð.ÑDÔDÑEÔEÐEðFøøøðð%�6ð%Ý”)˜GÑ$Ô$ˆØ ð+�&ð+Ý”˜6Ñ"Ô" UÑ*ˆØð ð ݘ‘\”\ˆFؘŠzˆzÝ Ð!5Ñ6Ô6Ð6ðøåð ð ð ÝØ×%Ò%Ð,N¸gÐ,NÐ,NÈ1Ð,NÐ,NÐ%ÑOÔOñôð øøøøð øøøð ˆØ �7˜H f¨fÐ 4Ð4s=ÃC)Ã)D-Ã80D(Ä(D-Ä1EÅAFÇ$G6Ç6 H.È)H)È)H.rcó4—d}|stSd|vrddl}|}n,| d¦«\}}}t|dd|g¦«}t ||¦«}t |t¦«st |›d�¦«‚ttt|¦«S)z§ Copied from warnings._getcategory, but changed so it lets exceptions (specially ImportErrors) propagate so we can get access to their tracebacks (#9218). Tú.rNz is not a Warning subclass) räÚbuiltinsÚ rpartitionr›rîÚ issubclassrr r)rrråÚklassr r*Úcats rErrøs°€ð ÐØ ð݈à �(ÐÐØÐÐÐàˆˆà#×.Ò.¨sÑ3Ô3ш��5Ý �v˜t T¨E¨7Ñ 3Ô 3ˆÝ �!�UÑ Ô €CÝ �c�7Ñ #Ô #ð=ݘCÐ;Ð;Ð;Ñ<Ô<Ð<Ý ••W” ˜sÑ #Ô #Ð#rDr¬r«cóŽ—|D]}tjt|d¬¦«ŽŒ |D]}tjt|d¬¦«ŽŒ dS)z8Applies pytest-configured filters to the warnings moduleF)rûTN)r¯r�r)r¬r«r�s rEr¤r¤sp€ð ðJðJˆÝÔÕ!5°cÀ%Ð!HÑ!HÔ!HÐIÐIÐIàðIðIˆÝÔÕ!5°cÀ$Ð!GÑ!GÔ!GÐHÐHÐHðIðIrD)NN)rJrÁrL)~r<rÛÚcollections.abcr¥r9rÞrÊr\rìr]rrhrpr5r¯Ú functoolsrÚpathlibrÚtextwraprrrÚtypingrr r r r r rrrrrrrrrrrÚpluggyrrrÚ _pytest._coderòÚ_pytest.deprecatedÚ_pytest.hookspecÚ exceptionsrrÚ findpathsrr r!Ú _pytest._ior"Ú_pytest.compatr#r$Ú_pytest.outcomesr%r&Ú_pytest.pathlibr'r(r)r*r+Ú _pytest.stashr,Ú_pytest.warning_typesr-r.Ú_pytest._code.coder/Ú_pytest.terminalr0rÚr1rÄr¡rãr ÚIntEnumr4rUrGÚ_codeÚTracebackEntryr<r_rVrår€r‹r�r”r–r…Ú version_inforÅrr˜rorÉrËrjrÜrûrÁr6r‘rkr©rÓrµr¹rÛrîrÃrärrr¤rCrDrEúr1sA ðØ@Ð@Ø€€€ØÐÐÐØ € € € ØÐÐÐØ € € € Ø € € € Ø€€€Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø€€€ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ Ð Ð Ð Ð Ð ØÐÐÐÐÐà!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!Ø Ð Ð Ð Ð Ð àÐÐÐØÐÐÐØÐÐÐØ.Ð.Ð.Ð.Ð.Ð.Ø0Ð0Ð0Ð0Ð0Ð0Ø&Ð&Ð&Ð&Ð&Ð&Ø'Ð'Ð'Ð'Ð'Ð'Ø*Ð*Ð*Ð*Ð*Ð*Ø&Ð&Ð&Ð&Ð&Ð&Ø Ð Ð Ð Ð Ð Ø-Ð-Ð-Ð-Ð-Ð-Ø!Ð!Ð!Ð!Ð!Ð!Ø$Ð$Ð$Ð$Ð$Ð$Ø(Ð(Ð(Ð(Ð(Ð(Ø'Ð'Ð'Ð'Ð'Ð'Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø0Ð0Ð0Ð0Ð0Ð0ØÐÐÐÐÐØ5Ð5Ð5Ð5Ð5Ð5Ø3Ð3Ð3Ð3Ð3Ð3àð%Ø2Ð2Ð2Ð2Ð2Ð2Ø1Ð1Ð1Ð1Ð1Ð1Ø$Ð$Ð$Ð$Ð$Ð$ð€ ðð ˆ>˜(Ñ #Ô #€Ø ˆ>˜(Ñ #Ô #€ððððððˆtŒ|ñôñ„ðð,  ð  ð  ð  ð  ˜Iñ  ô  ð  ð XØ Œ=Ô 'ðXà ðXðXðXðXð<@Ø=Að-$ð-$Ø �5˜˜cœÐ$6Ð6Ô7Ô 8ð-$à �h˜u S¨-Ð%7Ô8Ô9Ô :ð-$ð ˆ3�ˆ=Ôð-$ð-$ð-$ð-$ð`�cððððð$ððððñôðð�sð Sð¨Sððððð˜ð cð¨cðððððÐð$Ø ØØØØ ØØØ ØØ ØØ ØØØ ØØØØØØØ Ø Øð1'ð258Ô4DÈÒ4NÐ4NÐÐ/Ð0Ð0ÐTVð3'ð4ð5'ð'ñ€ð:�#�oÑ&Ô&€Ø×Ò�JÑÔÐØ×ÒÐ)Ñ*Ô*Ð*ð!%Ø=AððØ �4˜”9Ô ðà �h˜u S¨-Ð%7Ô8Ô9Ô :ððððððð2&ð&ð&ð&ð<@Ø=AððØ �5˜˜cœÐ$6Ð6Ô7Ô 8ðà �h˜u S¨-Ð%7Ô8Ô9Ô :ððððððð@˜ð $ðððððØ ðàðð�S˜#�XŒðð ˆ#ˆtˆ)„_ð ðððð@ð^(ð^(ð^(ð^(ð^(˜-ñ^(ô^(ñ„ð^(ðB Ø ��uÔ'¨¨h°s¬mÐ;Ô <ðà ˆ#„Yððððð,  sð ¨tð ð ð ð ðððððñôð𠈉Œ€ð>C¨H°S¬Mð>C¸hÀs¼mð>Cð>Cð>Cð>CðBðx ðx ðx ðx ðx ñx ôx ñ„ðx ðv˜dððððð.2ððØ ðØ" 6Ô*ðàððððð09�Cð9˜Dð9ð9ð9ð9ð$ €�2ÐÑÔðD5Ø ðD5ØðD5à Ð ! 3¨¨W¬ °s¸CÐ ?Ô@ðD5ðD5ðD5ñÔðD5ðN$¨ð$°°W´ ð$ð$ð$ð$ð, IؘS”Mð IØ4<¸S´Mð Ià ð Ið Ið Ið Ið Ið IrD