
    *d                        d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZmZ ddlZddlmZ dd	lmZ dd
lmZmZmZmZm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; dd	l<mZ ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZEmFZF  ejG        deH           ZI G d de0          ZJdS )z
This module defines the conda.core.solve.Solver interface and its immediate helpers

We can import from conda and libmambapy. `mamba` itself should NOT be imported here.
    N)defaultdict)	lru_cache)stack)dedent)IterableMappingOptionalSequenceUnion)
IndexedSet)__version__)REPODATA_FNUNKNOWN_CHANNELChannelPriorityDepsModifierUpdateModifieron_win)context)NULL)Spinner)paths_equal)join_urlpercent_decode)
PrefixData)Solver)InvalidMatchSpecPackagesNotFoundErrorSpecsConfigurationConflictErrorUnsatisfiableError)	MatchSpec)PackageRecord)VersionOrder   )LibMambaUnsatisfiableError)LibMambaIndexHelper)init_api_contextmamba_version)SolverInputStateSolverOutputStatezconda.c            
       ~    e Zd ZdZdZdddeef fd	Ze e	d          d                         Z
eeeeedfdZd	ed
         fdZdededefdZd ZdefdZdededefdZdedefdZed             ZdedefdZdedefdZdedefdZedefd            Zedeeee         f         fd            Ze dede!eef         fd            Z"	 	 d.de#eee!f                  de!eef         fdZ$d  Z%d!e!eef         fd"Z&dededefd#Z'ded$ed%ed&ede(f
d'Z)d(edefd)Z*d* Z+d+ Z,	 	 d.ded,ee(         fd-Z- xZ.S )/LibMambaSolverzD
    Cleaner implementation using the ``state`` module helpers.
    F c           	         |r|rt          d          |r|t          u rd}t                                          |||||||           | j        t          u s| j        st
          j        | _        d | _        d | _        | j        dk    r.t          
                    dt                      t          | _        g }|D ]~}	t          |	t                    rt          t          |	                    }	n5t          |	          }
d|
v r"t           j        D ]}|
|v rt          |          }	|                    |	           t'          t          j        d |D                                 | _        d S )NzEOnly one of `specs_to_add` and `specs_to_remove` can be set at a timeremove)subdirsspecs_to_addspecs_to_removerepodata_fncommandzcurrent_repodata.jsonz<Ignoring repodata_fn='current_repodata.json', defaulting to z::c              3      K   | ]}|V  d S Nr,   .0ss     <lib/python3.11/site-packages/conda_libmamba_solver/solver.py	<genexpr>z*LibMambaSolver.__init__.<locals>.<genexpr>s   s"      6N6NQq6N6N6N6N6N6N    )
ValueErrorr   super__init__r/   r   solver_solver_options_repodata_fnlogdebugr   
isinstancer!   r    strsysargvappendr   merger0   )selfprefixchannelsr/   r0   r1   r2   r3   fixed_specsspecspec_strarg	__class__s               r9   r>   zLibMambaSolver.__init__?   s     	O 	W    	w$G%+# 	 	
 	
 	
 <4t|"?DL #  777IIbU`bbccc +D   		% 		%D$.. 2 T++t998##"x 2 2#s??#,S>>Dt$$$$&y6N6N+6N6N6N'N'NOOr;   N)maxsizec                  4    dt            dt                       S )z\
        Expose this identifier to allow conda to extend its user agent if required
        zconda-libmamba-solver/z libmambapy/)r   r'   r,   r;   r9   
user_agentzLibMambaSolver.user_agentu   s     SRRRRRr;   c           
         |                                   t          | j        | j        p| j        |||||| j                  }t          |          }|                                }	|	|	S t                       | j	        }
| 
                                r%t                              d           d|
vrg |
dR }
g | j        |                                |                                |                                R }t#          |                     |          t&          j         ot&          j         t&          j                  5  t/          g |j                                        |j                                        R ||
| j                  }d d d            n# 1 swxY w Y   t#          dt&          j         ot&          j         t&          j                  5  |                     |           |                     |||          }t=          |j                                                  | _         |j!        }d d d            n# 1 swxY w Y   | "                    d ||           |S )N)rK   	requestedupdate_modifierdeps_modifierpruneignore_pinnedforce_remover3   )solver_input_statezDUsing solver via 'conda.plan.install_actions' (probably conda build)noarch)enabledjson)installed_recordsrL   r/   r2   zSolving environment)#	_log_infor(   rK   r0   r1   _commandr)   
early_exitr&   r/   _called_from_conda_buildrB   inforL   channels_from_specschannels_from_installedmaybe_free_channelr   _spinner_msgr   	verbosityquietr_   r%   	installedvaluesvirtualrA   _setup_solver_solving_looptupleneuteredneutered_specscurrent_solution_notify_conda_outdated)rJ   rW   rX   rY   rZ   r[   should_retry_solvein_state	out_statenone_or_final_stater/   all_channelsindexsolutions                 r9   solve_final_statez LibMambaSolver.solve_final_state}   s    	#;'?4+?+''%M	
 	
 	
 &BBB	 (2244*&& 	,((** 	-HH[\\\ w&&,7,H,,
]
))++
 --//
 ((**	
 
 l++))?'-.?
 
 
 
	 
	
 ("\H$6$=$=$?$?"\(BRBYBYB[B["\"\% -	  E
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 !))?'-.?
 
 
 
	2 
	2
 u%%% **8YFFI"'	(:(A(A(C(C"D"DD 1H
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 	##D%:::s&   AFF!$F!AIIIrL   Channelc                     t          t                              d |D                                 }d                    |          }d| dt          j         d| j         dS )Nc                     g | ]	}|j         
S r,   canonical_name)r7   cs     r9   
<listcomp>z/LibMambaSolver._spinner_msg.<locals>.<listcomp>   s    -Q-Q-Q1a.>-Q-Q-Qr;   z
 - zChannels:
 - z
Platform: z
Collecting package metadata ())listdictfromkeysjoinr   subdirrA   )rJ   rL   canonical_namescanonical_names_dasheds       r9   ri   zLibMambaSolver._spinner_msg   s    t}}-Q-Q-Q-Q-QRRSS!(o!>!>A(A A A A -1,=A A A	
r;   rw   rx   r{   c                    d}t          dt          t          j                            dt          |j                                      dz             }t          d|          D ]}t          	                    d|           	 | 
                    |||          }|r n	 t          |t          |j                  t          |j                  t          |j                  t          |j                  t          |j                            }# t$          t&          f$ r d}Y  nw xY w|st          	                    d           |j                            d |j                                        D             d	
           d| _        | 
                    |||          }|s,|                                 }t1          |          }d|_        ||                     |||           |                    |            |S )NF   "CONDA_LIBMAMBA_SOLVER_MAX_ATTEMPTSr#   zStarting solver attempt %s)r\   specsrecordsfor_historyrr   	conflictsz2Last attempt: reporting all installed as conflictsc                 L    i | ]!\  }}|j         ||                                "S r,   )is_unmanageableto_match_spec)r7   namerecords      r9   
<dictcomp>z0LibMambaSolver._solving_loop.<locals>.<dictcomp>   sC       $f!1	&..00  r;   zQLast attempt: all installed packages exposed as conflicts for maximum flexibilityreasonlast_solve_attempt)r?   )maxintosenvirongetlenrl   rangerB   rC   _solve_attemptr)   r   r   r   r   rr   r   r   r   updateitemsrb   _prepare_problems_messager$   allow_retry_export_solved_records
post_solve)	rJ   rw   rx   r{   solvedmax_attemptsattemptmessageexcs	            r9   rp   zLibMambaSolver._solving_loop   s-    
CSI[E\E\]]^^abb
 
 Q-- 	 	GII2G<<<,,Xy%HH E .'/y// !233 $Y%: ; ;!)"455"9#677  			 '(=>     	IIJKKK&& (0(:(@(@(B(B  7 '    1DM((9eDDF 88::099"'	 	##Hi??? 	D)))s   DD$#D$c                    t                               d           t                               dt                     t                               dt                                 t                               d| j                   t                               dt
          j                   t                               d| j                   t                               d| j                   d S )NzUsing libmamba solverzConda version: %szMamba version: %szTarget prefix: %rzCommand: %szSpecs to add: %szSpecs to remove: %s)	rB   re   _conda_versionr'   rK   rF   rG   r0   r1   rJ   s    r9   ra   zLibMambaSolver._log_info  s    ()))$n555$moo666$dk222)))#T%6777&(<=====r;   c                 T   t           j        dft           j        dft           j        dft           j        dft           j        dfgx| _        }t          j        t          j
        u r!|                    t           j        df           t          j        |j        | j                  | _        d S )Nr#   )apiSOLVER_FLAG_ALLOW_DOWNGRADESOLVER_FLAG_ALLOW_UNINSTALL SOLVER_FLAG_INSTALL_ALSO_UPDATESSOLVER_FLAG_FOCUS_BESTSOLVER_FLAG_BEST_OBEY_POLICYr@   r   channel_priorityr   STRICTrH    SOLVER_FLAG_STRICT_REPO_PRIORITYr   _poolr?   )rJ   r{   solver_optionss      r9   ro   zLibMambaSolver._setup_solver  s    ,a0,a0115'+-q11
 	
~ #'===!!3#G"KLLLjd.BCCr;   c                    |                      |           t                              d           t                              d|j                   	 |                    |           n$# t
          $ r}| j        dk    r|Y d }~nd }~ww xY wt                              d|j                   |                     ||          }|	                                D ]?\  \  }}}t                              d||           | j
                            ||           @| j
                                        }	|	r|j                            d           |	S | j
                                        }
|j                                        }|                     |
|          }t                              dt#          |                     |j                            |	                                d	           d
S )NzNew solver attemptz-Current conflicts (including learnt ones): %sr   zComputed specs: %szAdding task %s with specs %szSolution foundr   z Attempt failed with %s conflictszNew conflict foundF)ro   rB   rC   r   prepare_specsr   rb   r   _specs_to_tasksr   r?   add_jobssolveclearproblems_to_strcopy_maybe_raise_for_problemsr   r   )rJ   rw   rx   r{   r   tasks	task_name	task_typer   r   problemsold_conflictsnew_conflictss                r9   r   zLibMambaSolver._solve_attempt(  s    	5!!!		&'''		A9CVWWW	##E****. 	 	 	
 } 444	 54444	 			&	888 $$Xy99-2[[]] 	3 	3)"Y	EII4iGGGK  	2222 ""$$ 	%%-=%>>>M;..00!+002266xOO		4c-6H6HIII""=#6#6#8#8AU"VVVus   A' '
B1BBc                    t                               dt          |j                             |j        r|                     ||          S |                                 r|                     ||          S |                     ||          S )NzCreating tasks for %s specs)	rB   rC   r   r   is_removing_specs_to_tasks_removerd   _specs_to_tasks_conda_build_specs_to_tasks_add)rJ   rw   rx   s      r9   r   zLibMambaSolver._specs_to_tasksT  s    		/Y_1E1EFFF 	D..xCCC((** 	I33HiHHH'')<<<r;   c                     | j         r!| j                             d          r| j         S |                     d          r&|                     d          st          | d          } t	          |           S )z
        Workarounds for Matchspec str-roundtrip limitations.

        Note: this might still fail for specs with local channels and version=*:
            file://path/to/channel::package_name=*=*buildstr*
        zfile://buildversion*r   )original_spec_str
startswithr   r    rE   )rN   s    r9   _spec_to_strzLibMambaSolver._spec_to_str\  su     ! 	*d&<&G&G	&R&R 	*))88G 	0TXXi%8%8 	0T3///D4yyr;   c           	         ddgt          |j                                                  z   t          |j                                                  z   }d}|j                            d          }|j                            d          }|r|r|                    |           }t          t                     }|j        	                                D ]\  }}	|
                    d          r|                     |	          }	|                     |	          }
|j                            |          }dt          j        f}|rO|M|j        z|j        D ]=}t#          |          }|j        dv r#d}|j                            ||	i|d            n>||j        v rR||vrN|d	t          j        f                             |
           |d
t          j        f                             |
           |Ydt          j        f}||v ri|                     |                                          }|dt          j        f                             |           dt          j        t          j        z  f}|j                            |          }||	|k    |	j        dk    | j        ddd t>          fv |j         tB          j"        k    |j#        tH          j%        tH          j&        fvf}tO          |          r`| j        dk    r)dt          j        t          j        z  t          j(        z  f}n,|                     t#          |	d|j)                             }
||                             |
           tU          |          S )NpythoncondaF__INSTALL)r   
python_abiz>Python version might change and this package depends on Python)r   	overwriteDISFAVORALLOWUNINSTALLUPDATEUSERINSTALLEDzUPDATE | ESSENTIALr#   r   r   zUPDATE | ESSENTIAL | FORCEBESTz!=r   )+r   historykeysaggressive_updatesrl   r   r   matchr   r   r   _check_spec_compatr   r   SOLVER_INSTALLr]   dependsr    r   r   r   SOLVER_DISFAVORrH   SOLVER_ALLOWUNINSTALLSOLVER_UPDATEr   SOLVER_USERINSTALLEDSOLVER_ESSENTIALrV   
strictnessrb   r   rX   r   	ONLY_DEPSrW   r   UPDATE_DEPSFREEZE_INSTALLEDallSOLVER_FORCEBESTr   r   )rJ   rw   rx   	protectedpython_version_might_changeinstalled_pythonto_be_installed_pythonr   r   rN   rO   rl   keydepdep_specr   installed_specrV   
conditionss                      r9   r   z"LibMambaSolver._specs_to_tasks_addj  s   
 w8#((**++,8.3355667 	 ',##-11(;;!*!4!4X!>!> 	] 6 	].D.J.JK[.\.\*\'D!!#///11 U	( U	(JD$t$$ **400D((..H *..t44IS//C + y/D#/$, 	 	C(~~H}(@@@!a!+22!4L#)&+ 3   
  A y***t9/D/Dz3#678??III')BCDKKHUUU$ 11 9$$%)%6%6y7N7N7P7P%Q%QN?C,DEFMMn]]]
 01BSEY1YZC* %.22488	I%Oq(Mh0DdD%QQ*l.DD,*68WXY
 z?? 
}(<<<<-0DDsG[[ $(#4#4%d4L9J4L4LMMM$ $ #Jh''''E{{r;   c                 2   t          t                    }|j                                        D ]d\  }}||j        v s	||j        v rM|                                                                }|dt          j	        f         
                    |           edt          j        t          j        z  f}|j                                        D ]B\  }}|                     |          }||         
                    t          |                     Ct!          |          S )Nr   zERASE | CLEANDEPS)r   r   r   r   r   r   r   conda_build_formr   r   rH   SOLVER_ERASESOLVER_CLEANDEPSrV   r   rE   r   )rJ   rw   rx   r   r   r   rN   r   s           r9   r   z%LibMambaSolver._specs_to_tasks_remove  s    D!! &-3355 	P 	PLD&x'''483N+N+N ++-->>@@(@ABII$OOO #C$4s7K$KL",2244 	) 	)JD$**400D#Jc$ii((((E{{r;   c                 |   t          t                    }dt          j        f}|j                                        D ]r\  }}|                    d          r|                     |          }|                     |          }||         	                    |
                                           st          |          S )Nr   r   )r   r   r   r   r   r   r   r   "_fix_version_field_for_conda_buildrH   r  r   )rJ   rw   rx   r   r   r   rN   s          r9   r   z*LibMambaSolver._specs_to_tasks_conda_build  s     D!!++#///11 	7 	7JD$t$$ **400D::4@@D#Jd33556666E{{r;   rN   c                 r   | j         rt          j        d          }t          | j                   }t          j        ||          rr|                                                                 }|                    d          dk    r	|dz   |d<   n|dz   |d<   t          d	                    |                    S | S )zFix taken from mambabuildz	^[\d\.]+$.r#   z.*r    )
r   recompilerE   r   r  splitcountr    r   )rN   only_dot_or_digit_reversion_strspec_fieldss       r9   r  z1LibMambaSolver._fix_version_field_for_conda_build  s     < 		8#%:l#;#; dl++Kx,k:: 8"3355;;==$$S))Q..%04%7KNN%03%6KN +!6!6777r;   c                    	 t          | t                    r,|                     dd          \  }}}t          |||          S d| d                             d          i}t          |           dk    r| d                             d          |d<   t          |           d	k    r| d                             d          |d
<   t          di |S # t          $ r}t          d|            |d }~ww xY w)N-r   )r   r   r   r   r   ,r#   r      r   zCould not parse spec: r,   )rD   rE   rsplitr    rstripr   	Exceptionr<   )rN   r   r   r   kwargsr   s         r9   _str_to_matchspecz LibMambaSolver._str_to_matchspec  s   	G$$$ 	+'+{{3':':$gu dG5IIII $q'.."5"56t99>>(,Qs(;(;F9%t99>>&*1gnnS&9&9F7O **6*** 	G 	G 	G<d<<==3F	Gs   A C B
C 
C0C++C0r   returnc                 X   g }g }|                                 D ]x}|                                }|                                }|                    d          sAd|v r|d         dk    s|d         dk    rt	          d|           |                    |                     |d                              |                    d	          }|                    |                     |d
|                              d|v rt          d t          |          D             d          }|r.|                    |                     |d                              |d
k    rdnd
}|                    |                     |||                              zd |D             d |D             dS )ux  
        Problems can signal either unsatisfiability or unavailability.
        First will raise LibmambaUnsatisfiableError.
        Second will raise PackagesNotFoundError.

        Libmamba can return spec strings in two formats:
        - With dashes, e.g. package-1.2.3-h5487548_0
        - à la conda-build, e.g. package 1.2.*
        - just names, e.g. package
        z- z&none of the providers can be installedr#   packager  requireszUnknown message: r   but   z- nothing providesc              3   ,   K   | ]\  }}|d k    |V  dS )neededNr,   )r7   iws      r9   r:   z1LibMambaSolver._parse_problems.<locals>.<genexpr>:  s*      QQVa1==q====QQr;   Nc                     i | ]
}|j         |S r,   r   r6   s     r9   r   z2LibMambaSolver._parse_problems.<locals>.<dictcomp>A      777!&!777r;   c                     i | ]
}|j         |S r,   r&  r6   s     r9   r   z2LibMambaSolver._parse_problems.<locals>.<dictcomp>B  r'  r;   )r   	not_found)

splitlinesstripr  r   r<   rH   r  r{   next	enumerate)	clsr   r   r)  linewordsendmarkerstarts	            r9   _parse_problemszLibMambaSolver._parse_problems   s    		'')) 	M 	MD::<<DJJLLE??4(( 74??8y((E!H
,B,B$%?%?%?@@@  !6!6uQx!@!@AAAkk%((  !6!6uQsU|!D!DEEEE%--QQy/?/?QQQSWXX G$$S%:%:59%E%EFFF#q[[a  !6!6uU6\7J!K!KLLL 87Y77777Y777
 
 	
r;   previous_conflictsc                 *   | j         t          d          || j                                         }t          |t                    r|                     |          }|                     i |d         |d                    |d         }|d         }|s2|r0t          |                                | j	                  }d|_
        ||pi }t          |                                          }t          |                                          }|                    |          }	t          |	          dk    rd|v r|                    d           |r||k    st          |	          dk    r,|                                 }
t!          |
          }d|_
        ||S )N9Solver is not initialized. Call `._setup_solver()` first.r   r)  Fr#   r   
   )r?   RuntimeErrorr   rD   rE   r4  _maybe_raise_for_conda_buildr   rm   rL   r   set
differencer   popr   r$   )rJ   r   r5  unsatisfiabler)  r   previousprevious_setcurrent_setdiffr   s              r9   r   z(LibMambaSolver._maybe_raise_for_problemsE  s   
 ;Z[[[{2244Hh$$ 	6++H55H))*\Xk-B*\h{F[*\]]] -[)	 	 	'	(8(8(:(:DMJJC#COI%+8??,,---..0011%%l33t99q==X66 h''' 	,+553t99??4466G,W55C#COIr;   c                     | j                                         }d|v rt                              d           |S 	 | j                                         }| d| S # t
          $ r(}t                              d|           |cY d }~S d }~ww xY w)Nzunsupported requestz0Failed to explain problems. Unsupported request.
zFailed to explain problems)exc_info)r?   r   rB   re   explain_problemsr  warning)rJ   legacy_errorsexplained_errorsr   s       r9   r   z(LibMambaSolver._prepare_problems_messageo  s    3355 M11HHGHHH  	:#{;;==
 $99'7999	  	! 	! 	!KK4sKCCC       	!s   A 
B%BBBconflicting_specsc                 l   |                                  sd S ddlm}  |t          |                                                    }t          |                                          |_        | j                                        D ]}|j        dk    r|j        |_         nt          j        |_        |)Nr   )DependencyNeedsBuildingError)packagesr]   )
rd   conda_build.exceptionsrL  r   r   rm   
matchspecs_indexr   r   )rJ   rJ  rL  r   
pkg_records        r9   r:  z+LibMambaSolver._maybe_raise_for_conda_build}  s     ,,.. 	FGGGGGG**D9J9O9O9Q9Q4R4RSSS/668899+,,.. 	( 	(J H,,'.
 -
 !CJ	r;   c                    | j         t          d          t          j        |j        | j         t          j        t          j                            }|                                \  \  }}}}|D ]q\  }	}
|j	        
                                D ]7\  }}|j        r|j        |
k    r|j                            |d d            n8t                              d|
           r|D ]\  }}
}|                     |||
|          }|j	                            |j                  }|r8|j        dk    r-|j        dk    r"|j        |j        k    r|j        |j        k    r|}|j                            |j        |d           t0          rv|                                 rd|j                                        D ]L}t7          |j        j                  |j        _        t7          |j        j                  |j        _        Id S d S d S )Nr7  zUnlinked by solverr   z9Tried to unlink %s but it is not installed or manageable?r]   z'Part of solution calculated by libmamba)r?   r9  r   Transactionr   MultiPackageCacher   	pkgs_dirsto_condarl   r   r   fnr   r=  rB   warn!_package_record_from_json_payloadr   r   r   r   r   r;  r   rd   rm   r   channellocation)rJ   rw   rx   r{   transactionnames_to_addnames_to_removeto_link	to_unlink_filenamer   r   rZ  json_payloadalready_installed_records                   r9   r   z%LibMambaSolver._export_solved_records  sW    ;Z[[[oKK!'"344
 

 ?J>R>R>T>T;')$ 		` 		`KAx ( 2 8 8 : : ` `f) 9((%))$=Q)RRRE ) TV^___/6 	 	+GX|;;E7HVbccF
 (0'9'='=fk'J'J$(2MX--,3x??N&>&FFFL$<$BBB 2!!V,U "    
  	Jd3355 	J#+2244 J J*89P*Q*Q'&4V^5H&I&I##	J 	J 	J 	JJ Jr;   rZ  pkg_filenamerc  c                    |                     |          }t          j        |          }||d<   |j        |d<   t	          |j        |          |d<   |                    d          s|j        j        |d<   t          di |S )a1  
        The libmamba transactions cannot return full-blown objects from the C/C++ side.
        Instead, it returns the instructions to build one on the Python side:

        channel_info: dict
            Channel data, as built in .index.LibmambaIndexHelper._fetch_channel()
            This is retrieved from the .index._index mapping, keyed by channel URLs
        pkg_filename: str
            The filename (.tar.bz2 or .conda) of the selected record.
        json_payload: str
            A str-encoded JSON payload with the PackageRecord kwargs.
        rW  rZ  urlr   r,   )	get_infor_   loadsrZ  r   
noauth_urlr   r   r!   )rJ   r{   rZ  re  rc  channel_infor  s          r9   rY  z0LibMambaSolver._package_record_from_json_payload  s     ~~g..L))#t(0y !8,GGuzz(## 	;+3:F8&&v&&&r;   
match_specc           	         d}g }|j         D ]2}|                    |          }|r||vr|                    |           3|r$t          |d| dt	          |           d          |                    d          dk    r`|j                                        }|dv s|                    d          rd	}n|                    d
          rd}nd}t          ||          }|S )z
        Make sure we are not silently ingesting MatchSpec fields we are not
        doing anything with!

        TODO: We currently allow `subdir` but we are not handling it right now.
        )r   r   r   rZ  r   zULibmamba only supports a subset of the MatchSpec interface for now. You can only use z, but you tried to use r  rZ  defaults)rrpy2rstudio)zr-z_r-zmro-zpkgs/r)zm2-zm2w64-zmsys2-z
pkgs/msys2z	pkgs/main)rZ  )	FIELD_NAMESget_raw_valuerH   r   rq   r   lowerr   r    )rJ   rl  	supportedunsupported_but_setfieldvaluer   rZ  s           r9   r   z!LibMambaSolver._check_spec_compat  s4    D	 + 	2 	2E,,U33E 2i//#**5111 	"1$-1 1,--1 1 1   ##I..*<< ?((**D///4??CX3Y3Y/"!<== &&%":w???Jr;   c                 "    d | _         d | _        d S r5   )r?   r@   r   s    r9   _resetzLibMambaSolver._reset	  s    #r;   c                 |    t          | dd          o+dt          j        v oddhd t                      D             k    S )a+  
        conda build calls the solver via `conda.plan.install_actions`, which
        overrides Solver._index (populated in the classic solver, but empty for us)
        with a custom index. We can use this to detect whether conda build is in use
        and apply some compatibility fixes.
        rP  Nconda_buildinstall_actionsget_install_actionsc                     h | ]
}|d          S )r  r,   )r7   frames     r9   	<setcomp>z:LibMambaSolver._called_from_conda_build.<locals>.<setcomp>  s    >]>]>]EuQx>]>]>]r;   )getattrrF   modulesr   r   s    r9   rd   z'LibMambaSolver._called_from_conda_build  sT     D(D)) ^,^ #$9:>]>]UZU\U\>]>]>]]	
r;   final_statec                   
 ||dS t           j        rt           j        rdS t          t           j                                      dd          }|sdS |j        j        }|t          dddfv rd}d |j	        D             }||vrdS | d|j
         }t          |          
t          | j        t           j                  rt          
fd	|D                       rdS |                    |          }|rPt!          |d
           }	t#          t%          dt&           d|	j
         d| d          t(          j                   dS dS )a  
        We are overriding the base class implementation, which gets called in
        Solver.solve_for_diff() once 'link_precs' is available. However, we
        are going to call it before (in .solve_final_state(), right after the solve).
        That way we can reuse the IndexHelper and SolverOutputState instances we have
        around, which contains the channel and env information we need, before losing them.
        Nr   @z	<develop>pypirn  c                 0    h | ]}t          |d |          S r   )r  )r7   chns     r9   r  z8LibMambaSolver._notify_conda_outdated.<locals>.<setcomp>I  s%    YYY#'#'7==YYYr;   z::conda>c              3   B   K   | ]}                     |          V  d S r5   )r   )r7   r   conda_newer_specs     r9   r:   z8LibMambaSolver._notify_conda_outdated.<locals>.<genexpr>U  s2      LLf#))&11LLLLLLr;   c                 *    t          | j                  S r5   )r"   r   )xs    r9   <lambda>z7LibMambaSolver._notify_conda_outdated.<locals>.<lambda>]  s    L<S<S r;   )r   zq

                    ==> WARNING: A newer version of conda exists. <==
                        current version: z)
                        latest version: zh

                    Please update conda by running

                        $ conda update -n base -c z conda

                    )file)r   notify_outdated_condark   r   conda_prefixr   rZ  r   r   	_channelsr   r    r   rK   anysearchr   printr   r   rF   stderr)rJ   
link_precsr{   r  current_conda_prefix_recchannel_nameindex_channelsconda_newer_strconda_newer_recordsnewestr  s             @r9   ru   z%LibMambaSolver._notify_conda_outdated!  s    =[0 F, 	 	F#-g.B#C#C#G#GQU#V#V ' 	 F/7FOS+vFFF%L ZYYYY~--F *UU3K3SUU$_55
 t{G$899 	LLLLLLLLL  $ll?;;  	,2S2STTTF
 +9
 
 *0	
 
 4@
 
 
  Z     	 	r;   )NN)/__name__
__module____qualname____doc__	_uses_sscr   r   r>   staticmethodr   rT   r}   r   ri   r(   r)   r%   rp   ra   ro   r   r   r   r   r   r   r    r  r   rE   r
   r  classmethodr   r4  r	   r   r   r:  r   r!   rY  r   rz  rd   ru   __classcell__)rQ   s   @r9   r+   r+   8   s>         I 4P 4P 4P 4P 4P 4Pl YtS S  \S  L L L L\
Xi%8 
 
 
 
;"; %; #	; ; ; ;z> > >D#6 D D D D*"* %* #	* * * *X=(8 =EV = = = =   \n,< nIZ n n n n`/? L]    2(5F        \ Gc8C=&8 9 G G G \G "
s "
wsI~/F "
 "
 "
 ["
L 376:( (5g./( $CN3( ( ( (T: : :gc9n>U    .4J"4J %4J #	4J 4J 4J 4Jl'('36'FI'Y\'	' ' ' '0%Y %9 % % % %N$ $ $
 
 
. &*/3	L L #L m,	L L L L L L L Lr;   r+   )Kr  r_   loggingr   r
  rF   collectionsr   	functoolsr   inspectr   textwrapr   typingr   r   r	   r
   r   
libmambapyr   boltons.setutilsr   r   r   r   conda.base.constantsr   r   r   r   r   r   conda.base.contextr   conda.common.constantsr   conda.common.ior   conda.common.pathr   conda.common.urlr   r   conda.core.prefix_datar   conda.core.solver   conda.exceptionsr   r   r   r   conda.models.match_specr    conda.models.recordsr!   conda.models.versionr"    
exceptionsr$   r{   r%   mamba_utilsr&   r'   stater(   r)   	getLoggerr  rB   r+   r,   r;   r9   <module>r     s   
   				 				 



 # # # # # #                   ? ? ? ? ? ? ? ? ? ? ? ? ? ?     ' ' ' ' ' ' / / / / / /                ' & & & & & ' ' ' ' ' ' # # # # # # ) ) ) ) ) ) 5 5 5 5 5 5 5 5 - - - - - - # # # # # #            . - - - - - . . . . . . - - - - - -       2 2 2 2 2 2 & & & & & & 8 8 8 8 8 8 8 8 6 6 6 6 6 6 6 6g+++,,u u u u uV u u u u ur;   