+
    :1jϰ                       R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ RIHtHt ^ RIt^R	IHt ^R
IHt ^RIHtHt ^RI H!t! ^RI"H#t# ^RI$H%t% ^RI&H't'H(t(H)t)H*t*H+t+H,t, ^RIH-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5 ^RI6H7t7 ^RI8H9t9 ^RI:H;t; ^RI<H=t= ]'       d   ^ RIH>t>H?t? ^ RI<H@t@ ^ RIHAtAHBtBHCtCHDtD ^ RIHEtE ^ RIFHGtG ^RIHHItI ^RIJHKtK ^RILHMtM ^RINHOtO ^RIPHQtQ ^RI<HRtRHStSHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[H\t\H]t]H^t^H_t_H`t`HataHbtbHctcHdtdHeteHftfHgtg ]C! R ]XR!7      th]P                  ! ]j4      tk] ! R" R#4      4       tl ! R$ R%]P                  4      tn]P                  R& R' l4       tpR# )(a0  
This module contains a subclass implementation of pluggy's
`PluginManager <https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluginManager>`_.

Additionally, it contains a function we use to construct the ``PluginManager`` object and
register all plugins during conda's startup process.
)annotationsN)IterableMapping)suppress)	dataclass)distributions)	getmoduleisclass	signature)TYPE_CHECKINGoverload)__version__)NULL)APP_NAME DEFAULT_CONSOLE_REPORTER_BACKEND)context)dashlist)groupby_to_dict)AmbiguousEnvironmentSpecPluginCondaValueErrorEnvironmentExporterNotDetected EnvironmentSpecPluginNotDetected#EnvironmentSpecPluginSelectionErrorPluginError)	environment_exportersenvironment_specifierspackage_extractorspost_solvesprefix_data_loadersreporter_backendssolverssubcommandsvirtual_packagesPluginConfig)
CondaSpecs)health_checks)CondaExceptionEvent)CallableSequence)TracebackType)AnyLiteralTypeVarcast)HookImpl)AuthBase)PathType)Action)Solver)	MatchSpec)PackageRecord)CondaAuthHandlerCondaEnvironmentExporterCondaEnvironmentSpecifierCondaExceptionObserverCondaHealthCheckCondaPackageExtractorCondaPluginWithAliasesCondaPostCommandCondaPostSolveCondaPostTransactionActionCondaPreCommandCondaPrefixDataLoaderCondaPrefixDataLoaderCallableCondaPreSolveCondaPreTransactionActionCondaReporterBackendCondaRequestHeaderCondaSettingCondaSolverCondaSubcommandCondaVirtualPackageEnvironmentFormatP)boundc                  N    ] tR t^dt$ R]R&   R tR t]R 4       t]R 4       t	Rt
R# )	_HookImplWrapperr/   implc                	Z  a  S P                   P                  ! V!  pS P                   P                  '       g   S P                   P                  '       d   V# S P	                  V4      '       d%   \
        '       d   \        R V4      pV 3R lV 4       # S P                  VS P                   4      # )zIterable[Any]c              3  \   <"   T F!  pSP                  VSP                  4      x  K#  	  R # 5iN)	_set_implrP   ).0itemselfs   & 5lib/python3.14/site-packages/conda/plugins/manager.py	<genexpr>,_HookImplWrapper.function.<locals>.<genexpr>q   s#     GDNN433s   ),)rP   functionhookwrapperwrapper_isiterabler   r.   rT   )rW   argsresults   f* rX   r[   _HookImplWrapper.functionh   s    ##T*99   DII$5$5$5Mf%%}ov6GGG >>&$))44    c                	.    \        V P                  V4      # rS   )getattrrP   rW   names   &&rX   __getattr___HookImplWrapper.__getattr__v   s    tyy$''rb   c                	|    \        V \        4      ;'       d&    \        V \        \        \        \
        34      '       * # rS   )
isinstancer   strbytes	bytearrayr   )objs   &rX   r^   _HookImplWrapper._isiterablez   s7     #x( 
 
#ui12
 .
 	
rb   c                	    \        \        \        4      ;_uu_ 4        \        V R V4       RRR4       V #   + '       g   i     T # ; i)rP   N)r   AttributeError	TypeErrorsetattr)r`   rP   s   &&rX   rT   _HookImplWrapper._set_impl   s3    ni00FFD) 1 10s	   5A	 N)__name__
__module____qualname____firstlineno____annotations__r[   rg   staticmethodr^   rT   __static_attributes__ru   rb   rX   rO   rO   d   s9    
N5( 
 
  rb   rO   c                  Z  a  ] tR t^t$ RtR]R&    R]R&    R]R&    V 3R ltR	 R
 ltRR V 3R llltR R lt	RR R llt
R V 3R llt]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R  R! l4       t]R" R# l4       t]R$ R% l4       t]R& R' l4       t]R( R) l4       t]R* R+ l4       t]R, R- l4       t]R. R/ l4       t]R0 R1 l4       t]R2 R3 l4       t]R4 R5 l4       t]R6 R7 l4       t]R8 R9 l4       t]R: R; l4       tR< tR= R> ltRR? R@ lltRA RB ltRC RD ltRE RF ltRG RH ltRI RJ ltRK RL ltRM RN ltRO RP ltRQ RR ltRS RT ltRU RV ltRW RX ltRY RZ ltR[ R\ ltR] R^ ltR_ R` ltRa Rb lt Rc Rd lt!ReRRfRg/Rh Ri llt"Rj Rk lt#Rl Rm lt$Rn Ro lt%]&Rp Rq l4       t'Rr Rs lt(RRt Ru llt)Rv Rw lt*Rx Ry lt+Rz R{ lt,R| R} lt-R~ R lt.R R lt/RR R llt0RR R llt1R R lt2R R lt3R R lt4R R lt5Rt6V ;t7# )CondaPluginManagerz_
The conda plugin manager to implement behavior additional to pluggy's default plugin manager.
z$Callable[[str | None], type[Solver]]get_cached_solver_backendzCallable[[str], dict[str, str]]get_cached_session_headersz$Callable[[str, str], dict[str, str]]get_cached_request_headersc                	  < \         SV `  ! \        .VO5/ VB  \        P                  ! V P
                  4      V n        \        P                  ! V P                  4      V n        \        P                  ! V P                  4      V n
        R # rS   )super__init__r   	functoolscacheget_solver_backendr   get_session_headersr   get_request_headersr   )rW   r_   kwargs	__class__s   &*,rX   r   CondaPluginManager.__init__   sa    3D3F3 *39P9P)Q&*3//$:R:R*S'*3//$:R:R*S'rb   c                    V ^8  d   QhRRRR/# )   pluginobjectreturnrk   ru   )formats   "rX   __annotate__CondaPluginManager.__annotate__   s     M M MC Mrb   c                	   R p\        V4      ;p'       d)   VP                  '       d   VP                  P                  pW1J d   V# \        V4      '       d   V RVP                   2# V RVP
                  P                   R\        V4       R2# )z<unknown_module>.[])r   __spec__rf   r	   rx   r   id)rW   r   prefixmodules   &&  rX   get_canonical_name%CondaPluginManager.get_canonical_name   s    #''F'V_____))F M V__XQv22344 XQv//<<=Qr&zl!LLrb   Nc                    V ^8  d   QhRRRR/# )r   rf   
str | Noner   ru   )r   s   "rX   r   r      s      Z : rb   c                N  <  \         SV `  WR7      p\        \        \        4      ;_uu_ 4        \        VRV4       RRR4       V#   + '       g   i     T# ; i  \         d     R# \         d2   p\        RT;'       g    T P                  T4       RT R24      ThRp?ii ; i)z
Call :meth:`pluggy.PluginManager.register` and return the result or
ignore errors raised, except ``ValueError``, which means the plugin
had already been registered.
rf   plugin_nameNz"Error while loading conda plugin:  ())
r   registerr   rq   rr   rs   
ValueError	Exceptionr   r   )rW   r   rf   r   errr   s   &&&  rX   r   CondaPluginManager.register   s    	  '*6*=K.)44{; 5 54 	 	4::4226:;2cU!E 	s?   ,A A	A A	A A B$)B$2B$3,BB$c                   V ^8  d   QhRR/# )r   r   intru   )r   s   "rX   r   r      s     
 
 
rb   c                `    ^ pV F%  pV P                  V4      '       g   K  V^,          pK'  	  V# )z
Load the provided list of plugins and fail gracefully on error.
The provided list of plugins can either be classes or modules with
:attr:`~conda.plugins.hookimpl`.
)r   )rW   pluginscountr   s   &*  rX   load_pluginsCondaPluginManager.load_plugins   s2     F}}V$$
  rb   c               $    V ^8  d   QhRRRRRR/# )r   grouprk   rf   r   r   r   ru   )r   s   "rX   r   r      s!     $ $c $ $s $rb   c           
        ^ p\        4        Fq  pVP                   F^  pVP                  V8w  g   Ve   VP                  V8w  d   K+   VP	                  4       pT P                  T4      '       g   KU  T^,          pK`  	  Ks  	  V#   \
         dG   p\        P                  RTP                  T\        P                  '       d   TMRR7        Rp?K  Rp?ii ; i)zLoad modules from querying the specified setuptools ``group``.

:param str group: Entry point group to load plugins.
:param str name: If given, loads only plugins with the given ``name``.
:rtype: int
:return: The number of plugins loaded by this call.
Nz.Error while loading conda entry point: %s (%s)exc_info)r   entry_pointsr   rf   loadr   logwarningr   infor   )rW   r   rf   r   distentry_pointr   r   s   &&&     rX   load_entrypoints#CondaPluginManager.load_entrypoints   s     !OD#00$$-$)9)9T)A(--/F ==((QJE3  1 $6 ! !  KKH#(((/$	    s   BC;CCc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   	hook_namerk   methodsSequence[HookImpl]r   zMapping[str, object]firstresultboolr   zobject | list[object]ru   )r   s   "rX   r   r      sC     J JJ $J %	J
 J 
Jrb   c                	   < V Uu. uF  p\        V4      NK  	  pp\        '       d   \        R V4      pMTp\        SV `  WW44      # u upi )r   )rO   r   r.   r   	_hookexec)rW   r   r   r   r   methodwrapped_methodsr   s   &&&&&  rX   r   CondaPluginManager._hookexec   sP     CJJ'+F3'J=/AG%Gw VII Ks   Ac                    V ^8  d   QhRRRR/# )r   rf   zLiteral['subcommands']r   zlist[CondaSubcommand]ru   )r   s   "rX   r   r     s     $ $*$	$rb   c                	    R # rS   ru   re   s   &&rX   get_hook_results#CondaPluginManager.get_hook_results       !$rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['virtual_packages']r   zlist[CondaVirtualPackage]ru   )r   s   "rX   r   r     s     ( (/(	"(rb   c                	    R # rS   ru   re   s   &&rX   r   r   
  s     %(rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['solvers']r   zlist[CondaSolver]ru   )r   s   "rX   r   r     s    RR%7R<MRrb   c                	    R # rS   ru   re   s   &&rX   r   r     s    ORrb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['pre_commands']r   zlist[CondaPreCommand]ru   )r   s   "rX   r   r     s     $ $+$	$rb   c                	    R # rS   ru   re   s   &&rX   r   r     r   rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['post_commands']r   zlist[CondaPostCommand]ru   )r   s   "rX   r   r          % %,%	%rb   c                	    R # rS   ru   re   s   &&rX   r   r          "%rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['auth_handlers']r   zlist[CondaAuthHandler]ru   )r   s   "rX   r   r     r   rb   c                	    R # rS   ru   re   s   &&rX   r   r     r   rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['health_checks']r   zlist[CondaHealthCheck]ru   )r   s   "rX   r   r   "  r   rb   c                	    R # rS   ru   re   s   &&rX   r   r   !  r   rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['pre_solves']r   zlist[CondaPreSolve]ru   )r   s   "rX   r   r   '  s    WW%:W?RWrb   c                	    R # rS   ru   re   s   &&rX   r   r   &  s    TWrb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['post_solves']r   zlist[CondaPostSolve]ru   )r   s   "rX   r   r   *  s     # #*#	#rb   c                	    R # rS   ru   re   s   &&rX   r   r   )  s      #rb   c               $    V ^8  d   QhRRRRRR/# )r   rf   zLiteral['session_headers']hostrk   r   list[CondaRequestHeader]ru   )r   s   "rX   r   r   /  s$     ' '.'9<'	!'rb   c               	    R # rS   ru   )rW   rf   r   s   &&$rX   r   r   .       $'rb   c               (    V ^8  d   QhRRRRRRRR/# )r   rf   zLiteral['request_headers']r   rk   pathr   r   ru   )r   s   "rX   r   r   4  s,     ' '.'9<'DG'	!'rb   c               	    R # rS   ru   )rW   rf   r   r   s   &&$$rX   r   r   3  r   rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['settings']r   zlist[CondaSetting]ru   )r   s   "rX   r   r   9  s    TT%8T=OTrb   c                	    R # rS   ru   re   s   &&rX   r   r   8  s    QTrb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['reporter_backends']r   zlist[CondaReporterBackend]ru   )r   s   "rX   r   r   <  s     ) )0)	#)rb   c                	    R # rS   ru   re   s   &&rX   r   r   ;  s     &)rb   c                    V ^8  d   QhRRRR/# )r   rf   z"Literal['pre_transaction_actions']r   zlist[CondaPreTransactionAction]ru   )r   s   "rX   r   r   A  s     . .6.	(.rb   c                	    R # rS   ru   re   s   &&rX   r   r   @       +.rb   c                    V ^8  d   QhRRRR/# )r   rf   z#Literal['post_transaction_actions']r   z list[CondaPostTransactionAction]ru   )r   s   "rX   r   r   F  s     / /7/	)/rb   c                	    R # rS   ru   re   s   &&rX   r   r   E  s     ,/rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['prefix_data_loaders']r   zlist[CondaPrefixDataLoader]ru   )r   s   "rX   r   r   K  s     * *2*	$*rb   c                	    R # rS   ru   re   s   &&rX   r   r   J       '*rb   c                    V ^8  d   QhRRRR/# )r   rf   z!Literal['environment_specifiers']r   list[CondaEnvironmentSpecifier]ru   )r   s   "rX   r   r   P  s     . .5.	(.rb   c                	    R # rS   ru   re   s   &&rX   r   r   O  r   rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['package_extractors']r   zlist[CondaPackageExtractor]ru   )r   s   "rX   r   r   U  s     * *1*	$*rb   c                	    R # rS   ru   re   s   &&rX   r   r   T  r   rb   c                    V ^8  d   QhRRRR/# )r   rf   z Literal['environment_exporters']r   zlist[CondaEnvironmentExporter]ru   )r   s   "rX   r   r   Z  s     - -4-	'-rb   c                	    R # rS   ru   re   s   &&rX   r   r   Y  s     *-rb   c                    V ^8  d   QhRRRR/# )r   rf   zLiteral['exception_observers']r   zlist[CondaExceptionObserver]ru   )r   s   "rX   r   r   _  s     + +2+	%+rb   c                	    R # rS   ru   re   s   &&rX   r   r   ^  s     (+rb   c           	     4   V P                    RV 2p\        V P                  VR4      pVf   \        RV R24      hV! R/ VB  UUu. uF  qU F  qfNK  	  K  	  upppV Uu. uFp  p\	        VR4      '       dZ   \        VP                  \        4      '       d:   VP                  VP                  P                  4       P                  4       8w  g   Kn  VNKr  	  ppV'       d%   R V 4       p\        RV R\        V4       R	24      h\        R
 V4      P                  4        UUu. uF   p\        V4      ^8  g   K  V F  pVNK  	  K"  	  p	ppV	'       d(   R V	 4       p\        RV R\        V4       RV R24      h\        XR R7      # u uppi u upi u uppi )zc
Return results of the plugin hooks with the given name and
raise an error if there is a conflict.
_NzCould not find requested `z	` pluginsrf   c              3  l   "   T F*  p\        V4       R VP                  P                   R2x  K,  	  R# 5i)r   r   N)reprrP   r   rU   r   s   & rX   rY   6CondaPluginManager.get_hook_results.<locals>.<genexpr>x  s/      LS&4<.6;;#:#:";1=Gs   24z Invalid plugin names found for `z`:
z3

Please report this issue to the plugin author(s).c                    V P                   # rS   r   r   s   &rX   <lambda>5CondaPluginManager.get_hook_results.<locals>.<lambda>  s    &++rb   c              3     "   T FB  pVP                   P                   R VP                   RVP                  P                   R2x  KD  	  R# 5i)z(name=z) (source: r   N)r   rv   rf   rP   r   r  s   & rX   rY   r    sG      'F ##,,-VFKK=FKKLcLcKddef's   A
AzConflicting plugins found for `z1

Multiple conda plugins are registered via the `zP` hook. Please make sure that you don't have any incompatible plugins installed.c                    V P                   # rS   r   r  s   &rX   r  r    s    &++rb   )keyru   )project_namerd   hookr   hasattrrj   rf   rk   lowerstripr   r   valueslensorted)
rW   rf   r   specnamer  r   r   invalidplugin_names	conflictss
   &&,       rX   r   r   c  s   
 ''($0tyy(D1< :4&	JKK)-NggF6g6N
 "
!66**fkk3//{{fkk//17799	 F! 	 
 LSL 24&L)* +DE  ++EwOVVX
X7|a  "  " X 	 
 'L 1$tL)* +BBJ L[\  g#=>>S O
&
s   F	!A+FF#F:Fc                   V ^8  d   QhRR/# )r   r   zdict[str, CondaSolver]ru   )r   s   "rX   r   r     s     
 
3 
rb   c                d    V P                  R4       Uu/ uF  pVP                  VbK  	  up# u upi )z2Return a mapping from solver name to solver class.r    r   rf   )rW   solver_plugins   & rX   get_solversCondaPluginManager.get_solvers  s?     "&!6!6y!A
!A -!A
 	
 
   -c                    V ^8  d   QhRRRR/# )r   rf   r   r   ztype[Solver]ru   )r   s   "rX   r   r     s     +% +%z +%\ +%rb   c                `   T;'       g    \         P                  P                  4       P                  4       pV P	                  4       pVP                  VR4      pVf!   \        RV RRP                  V4       24      h\         P                  '       d   R\        VP                  P                  4      P                  9   dd   ^RIHp \        P                   ! VP                  P                  VR7      p\#        RVP                  P$                   2VP                  3RV/4      # VP                  # )	a2  
Get the solver backend with the given name (or fall back to the
name provided in the context).

See ``context.solver`` for more details.

Please use the cached version of this method called
:meth:`get_cached_solver_backend` for high-throughput code paths
which is set up as a instance-specific LRU cache.
Nz.You have chosen a non-default solver backend (z,) but it was not recognized. Choose one of: , build_repodata_subset)r"  Partialr   )r   solverr  r  r  getr   joinrepodata_use_shardsr
   backendr   
parametersgateways.shardsr"  r   partialmethodtyperv   )rW   rf   solvers_mappingr  r"  new_inits   &&    rX   r   %CondaPluginManager.get_solver_backend  s    &&--/557**, (++D$7 !@ G=99_-.0  ''''..778CCD @ ..%%..&;H -//889:&&(X&  $$$rb   c                    V ^8  d   QhRRRR/# )r   rf   rk   r   ztype[AuthBase] | Noneru   )r   s   "rX   r   r     s     
 
S 
-B 
rb   c                    VP                  4       P                  4       pV P                  R4      pV Uu. uF  q3P                  V8X  g   K  VNK  	  pp\	        V4      ^ 8  d   V^ ,          P
                  # R# u upi )z2
Get the auth handler with the given name or None
auth_handlersN)r  r  r   rf   r  handler)rW   rf   r2  rV   matchess   &&   rX   get_auth_handler#CondaPluginManager.get_auth_handler  sl     zz|!!#--o>$1GMDYY$5F44MGw<!1:%%%	 Hs   A8A8c                   V ^8  d   QhRR/# )r   r   zdict[str, CondaSetting]ru   )r   s   "rX   r   r     s     	
 	
5 	
rb   c                d    V P                  R4       Uu/ uF  pVP                  VbK  	  up# u upi )z
Return a mapping of plugin setting name to CondaSetting objects.

This method intentionally overwrites any duplicates that may be present
settingsr  )rW   config_params   & rX   get_settingsCondaPluginManager.get_settings  s?     !% 5 5j A
 A |+ A
 	
 
r  c                    V ^8  d   QhRRRR/# r   commandrk   r   Noneru   )r   s   "rX   r   r     s     % %3 %4 %rb   c                |    V P                  R4       F&  pWP                  9   g   K  VP                  V4       K(  	  R# )z
Invokes ``CondaPreCommand.action`` functions registered with ``conda_pre_commands``.

:param command: name of the command that is currently being invoked
pre_commandsNr   run_foractionrW   r?  r  s   && rX   invoke_pre_commands&CondaPluginManager.invoke_pre_commands  s/     )).9D,,&G$ :rb   c                    V ^8  d   QhRRRR/# r>  ru   )r   s   "rX   r   r     s     % %C %D %rb   c                |    V P                  R4       F&  pWP                  9   g   K  VP                  V4       K(  	  R# )z
Invokes ``CondaPostCommand.action`` functions registered with ``conda_post_commands``.

:param command: name of the command that is currently being invoked
post_commandsNrC  rF  s   && rX   invoke_post_commands'CondaPluginManager.invoke_post_commands  s/     ))/:D,,&G$ ;rb   c               $    V ^8  d   QhRRRRRR/# )r   exc_valBaseExceptionexc_tbr*   r   r@  ru   )r   s   "rX   r   r     s2     QJ QJQJ QJ 
	QJrb   c                  aa  V P                  R4      pV'       g   R# \        R \        V4      P                   4       4      o\        ;QJ d    V3R lV 4       F  '       d   K   RM	  RM! V3R lV 4       4      '       d   R# \        V\        4      '       d   VP                  pM\        VR^4      p ^RI	H
o \        \        V4      TT\        \        P                  4      \        T\         P"                  \%        \         P&                  4      \        ;QJ d%    . V3R	 l\         P(                   4       F  NK  	  5M! V3R	 l\         P(                   4       4      \         P*                  \         P,                  \         P.                  \         P0                  \         P2                  R
7      pV F8  pVP6                  P9                  S4      '       d   K&   VP;                  V4       K:  	  ??R#   \4         d    \        \        T4      TTR7      p Lfi ; i  \4         d'    \<        P?                  RTP@                  RR7        K  i ; i  \4         d    \<        P?                  RRR7        R# i ; i)a&  
Invokes ``CondaExceptionObserver.hook`` functions registered with
``conda_exception_observers``.

Observers are purely observational (following CPython's ``sys.excepthook``
model) and cannot suppress, modify, or redirect the exception. Return
values are ignored.

Any exception raised by an observer is caught at the ``BaseException``
level and logged -- a buggy plugin raising ``SystemExit`` or
``KeyboardInterrupt`` cannot kill conda's error reporting.

:param exc_val: the exception instance being handled
:param exc_tb: the associated traceback
exception_observersNc              3  8   "   T F  qP                   x  K  	  R # 5irS   )rv   )rU   clss   & rX   rY   @CondaPluginManager.invoke_exception_observers.<locals>.<genexpr>  s     %T>Ssll>Ss   c              3  X   <"   T F  qP                   P                  S4      x  K!  	  R # 5irS   )	watch_for
isdisjoint)rU   observerexc_mro_namess   & rX   rY   rV    s&      MV""--m<<Ys   '*FTreturn_code)Channelc              3  Z   <"   T F   pSP                  V4      P                  x  K"  	  R # 5irS   )
from_valuecanonical_name)rU   cr]  s   & rX   rY   rV  (  s&      #FV**1-<<FVs   (+)exc_type	exc_valueexc_tracebackargvconda_versionr\  active_prefixtarget_prefixchannelssubdirofflinedry_runquietjson)rb  rc  rd  z#Exception observer plugin %r failedr   z!invoke_exception_observers failed)!r   	frozensetr,  __mro__allrj   
SystemExitcoderd   models.channelr]  r'   tuplesysre  r   r   rg  rk   rh  ri  rj  rk  rl  rm  rn  rP  rX  rY  r  r   debugrf   )	rW   rO  rQ  	observersr\  eventrZ  r]  r[  s	   &&&    @@rX   invoke_exception_observers-CondaPluginManager.invoke_exception_observers  s   (=	J--.CDI%%Td7m>S>S%TTMs MVsss MV   ':..%ll%g}a@4+!']%"(sxx"- +")"7"7"%g&;&;"<"U #FMFVFV#UU #FMFVFV#  #>>#OO#OO!-- !2 &%%00??MM%(	 & v+ ! +!']%"( % II= !%    	JII9DII	Jsl   I AI &I 0I 7C:G3 1(I H+I 3"HI HI -II II "I54I5c                   V ^8  d   QhRR/# r   r   r@  ru   )r   s   "rX   r   r   J  s     ' '$ 'rb   c                    V P                  4        FH  w  rVP                  R4      '       d   K  V P                  V4      '       d   K7  V P                  V4       KJ  	  R# )zI
Disables all currently registered plugins except built-in conda plugins
zconda.plugins.N)list_name_plugin
startswith
is_blockedset_blocked)rW   rf   r   s   &  rX   disable_external_plugins+CondaPluginManager.disable_external_pluginsJ  sE     !113LD??#344T__T=R=R  & 4rb   c                   V ^8  d   QhRR/# )r   r   zdict[str, CondaSubcommand]ru   )r   s   "rX   r   r   R  s     
 
!; 
rb   c                	d    V P                  R 4       Uu/ uF  pVP                  VbK  	  up# u upi )r!   r  )rW   
subcommands   & rX   get_subcommands"CondaPluginManager.get_subcommandsR  s=     #33MB
B
 OOZ'B
 	
 
r  c                   V ^8  d   QhRR/# )r   r   zdict[str, CondaHealthCheck]ru   )r   s   "rX   r   r   X  s     W W#> Wrb   c                b    V P                  R4       Uu/ uF  qP                  VbK  	  up# u upi )z6Return a mapping of health check name to health check.r&   r  )rW   checks   & rX   get_health_checks$CondaPluginManager.get_health_checksX  s.    /3/D/D_/UV/Ue

E!/UVVVs   ,c                   V ^8  d   QhRR/# )r   r   z tuple[CondaReporterBackend, ...]ru   )r   s   "rX   r   r   \  s     A A'G Arb   c                	6    \        V P                  R 4      4      # )r   ru  r   rW   s   &rX   get_reporter_backends(CondaPluginManager.get_reporter_backends\  s    T**+>?@@rb   c                    V ^8  d   QhRRRR/# )r   rf   rk   r   rE   ru   )r   s   "rX   r   r   _  s     $ $ $1E $rb   c                    V P                  4        Uu/ uF  pVP                  VbK  	  ppVP                  VR4      pVf1   \        P	                  RV\
        4       VP                  \
        4      # V# u upi )z
Attempts to find a reporter backend while providing a fallback option if it is
not found.

This method must return a valid ``CondaReporterBackend`` object or else it will
raise an exception.
NzAUnable to find reporter backend: "%s"; falling back to using "%s")r  rf   r%  r   r   r   )rW   rf   reporter_backendreporter_backends_maps   &&  rX   get_reporter_backend'CondaPluginManager.get_reporter_backend_  s     %)$>$>$@!
$@  !!#33$@ 	 !
 144T4@#KKS0
 ),,-MNN##!
s   A3c                   V ^8  d   QhRR/# )r   r   tuple[PackageRecord, ...]ru   )r   s   "rX   r   r   v  s     
 
-F 
rb   c                	   a \         ;QJ d&    . V3R  lV P                  R4       4       F  NK  	  5# ! V3R  lV P                  R4       4       4      # )c              3  `   <"   T F#  pVP                  4       ;o\        Jg   K  Sx  K%  	  R # 5irS   )to_virtual_packager   )rU   r  virtual_packages   & rX   rY   ACondaPluginManager.get_virtual_package_records.<locals>.<genexpr>w  s0      
A#'#:#:#<<TI OAs   .
.r"   r  )rW   r  s   &@rX   get_virtual_package_records.CondaPluginManager.get_virtual_package_recordsv  sM    u 
--.@A
u 	
u 
--.@A
 
 	
rb   c                    V ^8  d   QhRRRR/# )r   r   rk   r   dict[str, str]ru   )r   s   "rX   r   r   }  s     
 
 
 
rb   c                	|    V P                  R VR7       Uu/ uF  pVP                  VP                  bK  	  up# u upi )session_headers)r   r   rf   value)rW   r   r  s   && rX   r   &CondaPluginManager.get_session_headers}  sG     --.?d-K
K IItzz!K
 	
 
    9c               $    V ^8  d   QhRRRRRR/# )r   r   rk   r   r   r  ru   )r   s   "rX   r   r     s!     
 
 
3 
> 
rb   c                	|    V P                  R WR7       Uu/ uF  pVP                  VP                  bK  	  up# u upi )request_headers)r   r   r  )rW   r   r   r  s   &&& rX   r   &CondaPluginManager.get_request_headers  sG     --.?d-V
V IItzz!V
 	
 
r  c                   V ^8  d   QhRR/# )r   r   z'Iterable[CondaPrefixDataLoaderCallable]ru   )r   s   "rX   r   r     s      )P rb   c              #  	Z   "   V P                  R 4       F  pVP                  x  K  	  R# 5i)r   N)r   loader)rW   r  s   & rX   get_prefix_data_loaders*CondaPluginManager.get_prefix_data_loaders  s&     ))*?@D++ As   )+c               $    V ^8  d   QhRRRRRR/# )r   specs_to_addzfrozenset[MatchSpec]specs_to_remover   r@  ru   )r   s   "rX   r   r     s(     7 7*7 .7 
	7rb   c                X    V P                  R4       F  pVP                  W4       K  	  R# )z
Invokes ``CondaPreSolve.action`` functions registered with ``conda_pre_solves``.

:param specs_to_add:
:param specs_to_remove:

pre_solvesNr   rE  )rW   r  r  r  s   &&& rX   invoke_pre_solves$CondaPluginManager.invoke_pre_solves  s%     )),7DKK6 8rb   c               (    V ^8  d   QhRRRRRRRR/# )r   repodata_fnrk   unlink_precsr  
link_precsr   r@  ru   )r   s   "rX   r   r     s2     ? ?? 0? .	?
 
?rb   c                Z    V P                  R4       F  pVP                  WV4       K  	  R# )z
Invokes ``CondaPostSolve.action`` functions registered with ``conda_post_solves``.

:param repodata_fn:
:param unlink_precs:
:param link_precs:
r   Nr  )rW   r  r  r  r  s   &&&& rX   invoke_post_solves%CondaPluginManager.invoke_post_solves  s'     ))-8DKK:> 9rb   c                   V ^8  d   QhRR/# r}  ru   )r   s   "rX   r   r     s     V Vt Vrb   c                    V P                  4       P                  4        F0  w  r\        P                  ! WP                  VP
                  4       K2  	  R# )zw
Iterates through all registered settings and adds them to the
:class:`conda.common.configuration.PluginConfig` class.
N)r;  itemsr$   add_plugin_setting	parameteraliases)rW   rf   settings   &  rX   load_settings CondaPluginManager.load_settings  s<    
 "..0668MD++D2C2CW__U 9rb   c                   V ^8  d   QhRR/# )r   r   r$   ru   )r   s   "rX   r   r     s     " ", "rb   c                    \        V4      # )z
Retrieve the configuration for the plugin.
Returns:
    PluginConfig: The configuration object for the plugin, initialized with raw data from the context.
r#   )rW   datas   &&rX   
get_configCondaPluginManager.get_config  s     D!!rb   supports_detectionwith_aliasesTc               $    V ^8  d   QhRRRRRR/# )r   r  zbool | Noner  r   r   $dict[str, CondaEnvironmentSpecifier]ru   )r   s   "rX   r   r     s$      %0GK	-rb   c                  Vf!   V P                  R4       Uu. uF  q3NK  	  ppM=V P                  R4       Uu. uF"  pVP                  P                  V8X  g   K   VNK$  	  ppV'       g   V Uu/ uF  qUP                  VbK  	  up#  V P	                  V4      # u upi u upi u upi   \
         d   p\        RT 24      hRp?ii ; i)a<  
Returns a mapping from environment specifier name to environment specifier.

:param supports_detection: ternary value that returns either everything, only supporting
                            detection or not supporting detection.
:param with_aliases: whether to include aliased values of environment specifiers.
Nr   z:Plugin name conflicts detected in environment specifiers.
)r   environment_specdetection_supportedrf   _get_name_and_alias_mappingr   )rW   r  r  henv_spec_hooksr  r   s   &$$    rX   get_environment_specifiers-CondaPluginManager.get_environment_specifiers  s     %001IJJaJ  N ../GHHA%%99=OO H   0>?IItO??	33NCC @  	McUS 	s.   
BBB.B"B' 'C2C  Cc                    V ^8  d   QhRRRR/# )r   r   zIterable[P]r   zdict[str, P]ru   )r   s   "rX   r   r     s     ! !; !< !rb   c                   / p/ pV Fk  pVP                   .VP                  O FK  pWR9   d?   WS9  d   W%,          P                   0W5&   W5,          P                  VP                   4       KG  WBV&   KM  	  Km  	  V'       dn   . p\        VP	                  4       4       F6  w  rWRP                  \        V4      4      pVP                  RV RV 24       K8  	  \        R\        V4       R24      hV# )a  
Get a mapping from plugin names (including aliases) to plugin.

:param plugins: Plugins that expose a ``name`` and ``aliases``.
:return: Mapping from each canonical name and alias to the corresponding plugin.
:raises PluginError: If multiple plugins use the same name or alias.
r!  'z!' name or alias used by plugins: z3Multiple plugins cannot use the same name or alias:
)	rf   r  addr  r  r&  appendr   r   )	rW   r   mappingr  r   format_nameconflict_detailsr  plugins_strs	   &&       rX   r  .CondaPluginManager._get_name_and_alias_mapping  s     !#	F &=fnn=)"3292F2K2K1L	.*..v{{;+1K(  >  !-3IOO4E-F)"ii|(<= ''}$Ek]S .G E,-.b2 
 rb   c               $    V ^8  d   QhRRRRRR/# )r   sourcerk   rf   r   r8   ru   )r   s   "rX   r   r     s(     . .. . 
#	.rb   c                   VP                  4       P                  4       pV P                  4       p W2,          p VP                  V4      P	                  4       '       d   V#  \        RV RV R24      h  \         dN   p\        RT RT RT R\        T4      P                   R\        T4       R	2T P                  R
4      R7      hRp?ii ; i  \         d"    \        RT R2T P                  R
4      R7      hi ; i)a  Get an environment specifier plugin by name

:param source: full path to the environment spec file/source
:param name: name of the environment plugin to load
:raises CondaValueError: if the requested plugin is not available.
:raises PluginError: if the requested plugin is unable to handle the provided file.
:returns: an environment specifier plugin that matches the provided plugin name, or can handle the provided file
zRequested plugin 'z(' is unable to handle environment spec 'r  zCould not parse 'z' as 'zQ'. Check that the file contents match the expected format. Errors reported from 'z':

    ->  z: r  r   )msgplugin_specsNz<You have chosen an unrecognized environment specifier type (z.). Please choose one of the available formats.)r  r  r  r  
can_handler   r   r   r,  rv   rk   r   KeyError)rW   r  rf   r   r   es   &&&   rX   !get_environment_specifier_by_name4CondaPluginManager.get_environment_specifier_by_name  s2    zz|!!#113	]F**62==??!M @ "(.VW]V^^_`   	9+F86$ @115 7##'7#3#3"4Bs1vhbB
 "&!6!67O!P 	  	5''+f -00 "223KL 	s#   C &A3 3C>ACC,C:c               (    V ^8  d   QhRRRRRRRR/# )r   r  rk   basenamehooksr  r   r   ru   )r   s   "rX   r   r   -  s2     $ $$ $ 4	$
 
)$rb   c                8  a VP                  4        UUu. uFq  w  rEVP                  '       g   K  \        ;QJ d)    V3R lVP                   4       F  '       g   K   RM	  RM! V3R lVP                   4       4      '       g   Ko  VNKs  	  ppp\        V4      ^8  d   \	        RV R2VR7      h\        V4      ^8X  d3    V^ ,          P                  V4      P                  4       '       d   V#  V# V# u uppi   \         d   p\        RT 24      ThRp?ii ; i)	zDetect environment specifier by filename pattern matching.

:param basename: basename of the source file
:param hooks: mapping of environment specifier plugins
:returns: list of matching plugins, or None if no filename matches
c              3  R   <"   T F  p\         P                   ! SV4      x  K  	  R # 5irS   fnmatchrU   patternr  s   & rX   rY   ?CondaPluginManager._detect_filename_env_spec.<locals>.<genexpr>=  s#      BXw'22BX   $'TFFile 'z<' matches the default filename pattern for multiple formats.r  r   z5Failed to parse environment specification from file: N)	r  default_filenamesanyr  r   r  r  r   r   )rW   r  r  r  r   r  foundr  s   &&f&    rX   _detect_filename_env_spec,CondaPluginManager._detect_filename_env_spec-  s    $);;=
#0	%%   BFBXBX BFBXBX  D#0 	 
 u:>0VH$`a 
 u:?8,,V4??AA L B u1
&  !KA3Os9   C4
C4C4%C4C4+C: -C: :DDDc               $    V ^8  d   QhRRRRRR/# )r   r  rk   r  r  r   r   ru   )r   s   "rX   r   r   T  s&      3 
)rb   c                ,   . pVP                  4        Fk  w  r4\        P                  RV4        VP                  V 4      P	                  4       '       d+   \        P                  RV V4       VP                  V4       Kk  Km  	  V#   \         d     K  i ; i)zDetect environment specifier by content-based autodetection.

:param source: full path to the environment spec file or source
:param hooks: mapping of environment specifier plugins
:returns: tuple of (found plugins, autodetect disabled plugin names)
z!EnvironmentSpec hook: checking %sz"EnvironmentSpec hook: %s can be %s)r  r   rw  r  r  r  r   )r  r  r  r   r  s   &&   rX   _detect_content_env_spec+CondaPluginManager._detect_content_env_specS  s     ${{}OIII99E	((0;;==II<!
 LL& >  -   s   ABBBc                    V ^8  d   QhRRRR/# )r   r  rk   r   r8   ru   )r   s   "rX   r   r   o  s     2 23 2;T 2rb   c                   V P                  RRR7      p\        P                  P                  V4      pV P	                  WV4      p\        V4      ^ 8X  d3   V P                  W4      p\        V4      ^8  d   \        RV R2VR7      h\        V4      ^8X  d
   V^ ,          #  V P                  VRR7      #   \        \        \        3 d"   p\        T P                  R	4      R
7      ThRp?ii ; i)a  Detect the environment specifier plugin for a given spec source

Uses two-phase detection:
1. Filename-based filtering using fnmatch patterns
2. Fallback to content-based autodetection (can_handle())

Raises PluginError if more than one environment_spec plugin is found to be able to handle the file.
Raises EnvironmentSpecPluginNotDetected if no plugins were found.

:param source: full path to the environment spec file or source
:returns: an environment specifier plugin that can handle the provided file
TF)r  r  r  z%' can be handled by multiple formats.r  zenvironment.ymlr  rf   r   )r  N)r  osr   r  r  r  r  r   r  r   r   r   r   r   )rW   r  r  r  r  excs   &&    rX   detect_environment_specifier/CondaPluginManager.detect_environment_specifiero  s    //#% 0 
 77##F+ ..vGu:?11&@E5zA~4 (MN! 
 u:?8O	99$5 :   /
 	 3!223KL	s   !B4 4C+
C&&C+c               $    V ^8  d   QhRRRRRR/# )r   r  rk   rf   r   r   r8   ru   )r   s   "rX   r   r     s-     T TT T 
#	Trb   c                X    V'       g   V P                  V4      # V P                  WR7      # )a!  Get the environment specifier plugin for a given spec source, or given a plugin name
Raises PluginError if more than one environment_spec plugin is found to be able to handle the file.
Raises EnvironmentSpecPluginNotDetected if no plugins were found.
Raises CondaValueError if the requested plugin is not available.

:param filename: full path to the environment spec file/source
:param name: name of the environment plugin to load
:returns: an environment specifier plugin that matches the provided plugin name, or can handle the provided file
r  )r  r  )rW   r  rf   s   &&&rX   get_environment_specifier,CondaPluginManager.get_environment_specifier  s,     44V<<999SSrb   c                   V ^8  d   QhRR/# )r   r   z8dict[EnvironmentFormat, list[CondaEnvironmentSpecifier]]ru   )r   s   "rX   r   r     s     
 
	A
rb   c                :    \        R V P                  R4      4      # )zPGroup environment specifiers by :class:`~conda.plugins.types.EnvironmentFormat`.c                    V P                   # rS   environment_formatr  s   &rX   r  GCondaPluginManager.get_environment_specifiers_grouped.<locals>.<lambda>  
    644rb   r   )r   r   r  s   &rX   "get_environment_specifiers_grouped5CondaPluginManager.get_environment_specifiers_grouped  s#     4!!":;
 	
rb   c                   V ^8  d   QhRR/# )r   r   z"Iterable[CondaEnvironmentExporter]ru   )r   s   "rX   r   r     s     B B+M Brb   c              #  D   "   V P                  R4       Rj  xL
  R#  L5i)z,
Yields all detected environment exporters.
r   N)r   r  s   &rX   get_environment_exporters,CondaPluginManager.get_environment_exporters  s      (()@AAAs     c                   V ^8  d   QhRR/# )r   r   z#dict[str, CondaEnvironmentExporter]ru   )r   s   "rX   r   r     s      -P rb   c                     V P                  V P                  4       4      #   \         d   p\        RT 24      hRp?ii ; i)z
Get a mapping from format names (including aliases) to environment exporters.

:return: Dict mapping format name to CondaEnvironmentExporter
:raises PluginError: If multiple exporters use the same format name or alias
z9Format name conflicts detected in environment exporters.
N)r  r  r   )rW   r   s   & rX   get_exporter_format_mapping.CondaPluginManager.get_exporter_format_mapping  sH    	33D4R4R4TUU 	LSER 	s   ! ?:?c                    V ^8  d   QhRRRR/# )r   filenamerk   r   r7   ru   )r   s   "rX   r   r     s     # #C #<T #rb   c                ,  a \         P                  P                  V4      o. pV P                  4        Fj  p\        ;QJ d)    V3R lVP
                   4       F  '       g   K   RM	  RM! V3R lVP
                   4       4      '       g   KY  VP                  V4       Kl  	  V'       g   \        SV P                  4       R7      h\        V4      ^8  d5   \        RS R\        V Uu. uF  qDP                  NK  	  up4       R24      hV^ ,          # u upi )a  
Detect an environment exporter based on filename matching against default_filenames.

Uses fnmatch pattern matching for flexible filename patterns (e.g., *.conda-lock.yml).

:param filename: Filename to find an exporter for (basename is used for detection)
:return: CondaEnvironmentExporter that supports the filename
:raises EnvironmentExporterNotDetected: If no exporter supports the filename
:raises PluginError: If multiple exporters claim to support the same filename
c              3  R   <"   T F  p\         P                   ! SV4      x  K  	  R # 5irS   r  r  s   & rX   rY   ACondaPluginManager.detect_environment_exporter.<locals>.<genexpr>  s&      @G '22@r  TF)r&  	exportersz?Multiple environment exporters found that can handle filename 'z':zR

Please make sure that you don't have any conflicting exporter plugins installed.)r  r   r  r  r  r   r  r   r  r   r   rf   )rW   r&  r4  exporter_configmatchr  s   &&   @rX   detect_environment_exporter.CondaPluginManager.detect_environment_exporter  s     77##H-#==?Os .@@sss .@@   /  @ 0!88:  \AQRZQ[[]W=WEZZW=>? @cd  qz	 >s   &Dc                    V ^8  d   QhRRRR/# )r   r  rk   r   r7   ru   )r   s   "rX   r   r     s      	!rb   c                    V P                  4       pVP                  V4      pVf2   \        RV R\        \	        VP                  4       4      4       24      hV# )a  
Get an environment exporter based on the format name.

:param format_name: Format name to find an exporter for (e.g., 'yaml', 'json', 'environment-yaml')
:return: CondaEnvironmentExporter that supports the format
:raises CondaValueError: If no exporter is found for the given format
zUnknown export format 'z'. Available formats:)r#  r%  r   r   r  keys)rW   r  format_mappingexporters   &&  rX   "get_environment_exporter_by_format5CondaPluginManager.get_environment_exporter_by_format  sg     99;!%%k2!)+ 7%%-f^5H5H5J.K%L$MO 
 rb   c                   V ^8  d   QhRR/# )r   r   z7dict[EnvironmentFormat, list[CondaEnvironmentExporter]]ru   )r   s   "rX   r   r     s     
 
	@
rb   c                8    \        R V P                  4       4      # )zOGroup environment exporters by :class:`~conda.plugins.types.EnvironmentFormat`.c                    V P                   # rS   r  r  s   &rX   r  FCondaPluginManager.get_environment_exporters_grouped.<locals>.<lambda>  r  rb   )r   r  r  s   &rX   !get_environment_exporters_grouped4CondaPluginManager.get_environment_exporters_grouped  s      4**,
 	
rb   c               8    V ^8  d   QhRRRRRRRRRR	R
R	RR	RR/# r   transaction_contextzdict[str, str] | Nonerh  r   r  zIterable[PackageRecord] | Noner  remove_specszIterable[MatchSpec] | Noneupdate_specsneutered_specsr   zlist[Action]ru   )r   s   "rX   r   r     Z     !
 !
2!
 "!
 5	!

 3!
 1!
 1!
 3!
 
!
rb   c                x    V P                  R4       Uu. uF  pVP                  VVVVVVV4      NK  	  up# u upi )a  Get the plugin-defined pre-transaction actions.

:param transaction_context: Mapping between target prefixes and PrefixActionGroup
    instances
:param target_prefix: Target prefix for the action
:param unlink_precs: Package records to be unlinked
:param link_precs: Package records to link
:param remove_specs: Specs to be removed
:param update_specs: Specs to be updated
:param neutered_specs: Specs to be neutered
:return: The plugin-defined pre-transaction actions
pre_transaction_actionsr  	rW   r>  rh  r  r  r?  r@  rA  r  s	   &&&&&&&& rX   get_pre_transaction_actions.CondaPluginManager.get_pre_transaction_actions  sZ    @ --.GH
 I KK# I
 	
 
    7c               8    V ^8  d   QhRRRRRRRRRR	R
R	RR	RR/# r=  ru   )r   s   "rX   r   r   9  rB  rb   c                x    V P                  R4       Uu. uF  pVP                  VVVVVVV4      NK  	  up# u upi )a  Get the plugin-defined post-transaction actions.

:param transaction_context: Mapping between target prefixes and PrefixActionGroup
    instances
:param target_prefix: Target prefix for the action
:param unlink_precs: Package records to be unlinked
:param link_precs: Package records to link
:param remove_specs: Specs to be removed
:param update_specs: Specs to be updated
:param neutered_specs: Specs to be neutered
:return: The plugin-defined post-transaction actions
post_transaction_actionsr  rE  s	   &&&&&&&& rX   get_post_transaction_actions/CondaPluginManager.get_post_transaction_actions9  sZ    @ --.HI
 J KK# J
 	
 
rH  c                   V ^8  d   QhRR/# )r   r   z dict[str, CondaPackageExtractor]ru   )r   s   "rX   r   r   \  s     
 
(H 
rb   c                    V P                  R4       UUu/ uF'  pVP                   F  pVP                  4       VbK  	  K)  	  upp# u uppi )a  
Return a mapping from file extension to package extractor plugin.

Extensions are lowercased for case-insensitive matching.

:return: Dictionary mapping lowercased extensions (e.g., ``".conda"``) to their
    :class:`~conda.plugins.types.CondaPackageExtractor` plugins.
r   )r   
extensionsr  )rW   r  	extensions   &  rX   get_package_extractors)CondaPluginManager.get_package_extractors\  sR     --.BC
C!__	 OOt#, C
 	
 
s   -Ac                    V ^8  d   QhRRRR/# )r   source_full_pathr1   r   r;   ru   )r   s   "rX   r   r   k  s     
 
"
 

rb   c                    \         P                  ! V4      P                  4       pV P                  4       P	                  4        F   w  r4VP                  V4      '       g   K  Vu # 	  \        RV 24      h)a  
Get the package extractor plugin for a given package path.

Searches through registered package extractor plugins to find one that
handles the file extension of the provided package path.

:param source_full_path: Full path to the package archive file.
:return: The matching :class:`~conda.plugins.types.CondaPackageExtractor` plugin.
:raises PluginError: If no registered extractor handles the file extension.
z=No registered 'package_extractors' plugin found for package: )r  fspathr  rR  r  endswithr   )rW   rU  
source_strrQ  	extractors   &&   rX   get_package_extractor(CondaPluginManager.get_package_extractork  sn     YY/0668
$($?$?$A$G$G$I I""9--   %J KL\K]^
 	
rb   c               $    V ^8  d   QhRRRRRR/# )r   rU  r1   destination_directoryr   r@  ru   )r   s   "rX   r   r     s-     C C"C  (C 
	Crb   c                J    V P                  V4      pVP                  W4       R# )an  
Extract a package archive to a destination directory.

Finds the appropriate extractor plugin based on the file extension
and extracts the package.

:param source_full_path: Full path to the package archive file.
:param destination_directory: Directory to extract the package contents to.
:raises PluginError: If no registered extractor handles the file extension.
N)r[  extract)rW   rU  r^  rZ  s   &&& rX   extract_package"CondaPluginManager.extract_package  s$     ../?@	*Brb   c                    V ^8  d   QhRRRR/# )r   r   r1   r   r   ru   )r   s   "rX   r   r     s      ( z rb   c                    \         P                  ! V4      P                  4       pV P                  4        F  pVP	                  V4      '       g   K  Vu # 	  R# )z
Check if a path has a supported package file extension.

:param path: Path to check.
:return: The matched extension (lowercased) if found, None otherwise.
N)r  rW  r  rR  rX  )rW   r   path_strexts   &&  rX   has_package_extension(CondaPluginManager.has_package_extension  sH     99T?((*..0C  %%
 1 rb   )r   r   r   rS   )NNNNNNN)8rv   rw   rx   ry   __doc__rz   r   r   r   r   r   r   r   r   r  r   r5  r;  rG  rL  rz  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r{   r  r  r  r  r  r#  r-  r4  r:  rF  rL  rR  r[  ra  rg  r|   __classcell__)r   s   @rX   r~   r~      s     DCl ??m DDmTM$ *
$LJ J $ $ ( ( R R$ $ % % % % % % W W# # ' ' ' ' T T) ) . . / / * * . . * * - - + +3?j
+%Z
	
%%QJf'
WA$.


7? V"37NR>!F.`$L  62hT&
B#J*
!
F!
F

.C$ rb   r~   c                   V ^8  d   QhRR/# )r   r   r~   ru   )r   s   "rX   r   r     s      . rb   c                    \        4       p V P                  \        4       V P                  ! \        .\
        P                  O\        P                  O\        P                  O\        P                  O\        P                  O\        P                  O\        P                  O\        P                  O\        P                  O5!   V P                  \         4       V # )z
Get a cached version of the :class:`~conda.plugins.manager.CondaPluginManager` instance,
with the built-in and entrypoints provided by the plugins loaded.
)r~   add_hookspecsr%   r   r    r"   r   r!   r&   r   r   r   r   r   r   r   r   )plugin_managers    rX   get_plugin_managerro    s     ()N  ,		!	! 
		 
			
 
		 
	"	" 
	#	# 
	$	$ 
 	'	' 
	&	& ##H-rb   )qri  
__future__r   r  r   loggingr  rv  collections.abcr   r   
contextlibr   dataclassesr   importlib.metadatar   inspectr   r	   r
   typingr   r   pluggy r   auxlibr   base.constantsr   r   base.contextr   	common.ior   common.iteratorsr   
exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   configr$   hookspecr%   subcommands.doctorr&   typesr'   r(   r)   r*   r+   r,   r-   r.   r/   requests.authr0   common.pathr1   core.path_actionsr2   
core.solver3   models.match_specr4   models.recordsr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   	getLoggerrv   r   rO   PluginManagerr~   r   ro  ru   rb   rX   <module>r     s   #    	 
 -  ! , 1 1 *    G "   . 
 
 
 !   - &2#22&&*#-.     2 	12A!      FW-- Wt   rb   