
    f(                        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 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! 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-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE dd
lFmZ ddlGmHZH ddlImJZJmKZK ddlLmMZMmNZN ddlOmPZPmQZQ ddlRmSZS  ej                  d eU       ZV G d! d"e5      ZWy)#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)suppress)	lru_cache)stack)dedent)IterableMappingOptionalSequenceUnion)
IndexedSet)__version__)DEFAULT_CHANNELSREPODATA_FNUNKNOWN_CHANNELChannelPriority)context)on_win)NULL)Spinnertimeout)paths_equal)join_urlpercent_decode)PackageCacheData)
PrefixData)Solver)CondaValueErrorInvalidMatchSpecInvalidSpecPackagesNotFoundError
ParseErrorUnsatisfiableError)Channel)	MatchSpec)PackageRecordPrefixRecord)VersionOrder   )LibMambaUnsatisfiableError)LibMambaIndexHelper_LibMambaIndexForCondaBuild)init_api_contextmamba_version)SolverInputStateSolverOutputState)is_channel_availablezconda.c                       e Zd 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d6d
ee   fdZd Zd7dedefdZdededefdZd Zdej2                  fdZ	 d7de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)	 	 	 	 d8d e*e#e$e(f      d#e(e$e!f   d$e(e$e!f   d
ee   fd%Z+d9d&Z,	 d9d'e(e$e!f   d(e$fd)Z-dededefd*Z.	 d:ded+e$d,e$d-e$d.e/d!e0fd/Z1d0e#e!df   d!e#e!df   fd1Z2d2 Z3d3 Z4	 	 d;ded4ee0   fd5Z5 xZ6S )<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        j                  dt                t        | _        g }|D ]  }	t        |	t              rt        t        |	            }	n`t        |	t              rPt        |	      }
d|
v rAt         j"                  D ].  }|
|v st        |      }|j$                  |	j$                  k(  s-|}	0 |j'                  |	        t)        t        j*                  d |D                    | _        y )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 ::c              3       K   | ]  }|  y wNr5   .0ss     o/home/gpsr/webserver/cgidocs/anshu/RAPID-engine/ls/lib/python3.12/site-packages/conda_libmamba_solver/solver.py	<genexpr>z*LibMambaSolver.__init__.<locals>.<genexpr>}   s     6N+Qq+s   )
ValueErrorr   super__init__r8   r   solver_solver_options_repodata_fnlogdebugr   
isinstancer&   r%   strsysargvnameappendr   merger9   )selfprefixchannelsr8   r9   r:   r;   r<   fixed_specsspecspec_strargms_from_arg	__class__s                rC   rG   zLibMambaSolver.__init__G   sW    OW  w$G%+# 	 	
 <<4t||"??DL #  77IITU`Tabc +D  D$. T+D),t98#"xx#s?*3C.K*//499<'2	  (
 t$ ! 'y6N+6N'NO    N)maxsizec                  *    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.   r5   r]   rC   
user_agentzLibMambaSolver.user_agent   s     (}L@QRRr]   c                    | j                          t        | j                  | j                  xs | j                  |||||| j
                        }t        |      }|j                         }	|	|	S | j                  }
| j                         ret        j                  d       d|
vrg |
d}
| j                  D ci c])  }|j                  j                  dk(  s|j                  d + }}t        }nt         }d}g || j"                  |j%                         }t'        t(        dd       xs i j+                  d      }t-        j.                  d	      sz|sx|D cg c]#  }t1        |      j3                  d
      D ]  }| % }}}|j5                  |      }|D ]1  }t7        dt8        |j:                  d
      s!|j=                  |       3 |j?                  |jA                                i }|D ]s  }t'        |dd       x}r]||
vrt        j                  d|||
       t1        di |jC                         jE                         D ci c]  \  }}|dk7  s|| c}}}d ||<   u tG        |      }tI        |D cg c]  }|jJ                   c}tM        d | j                  D              tO        | j                               tQ        | jS                  ||      t(        jT                   xr t(        jV                   t(        jX                        5   |g |jZ                  j]                         |j^                  j]                         ||
| j`                  t(        jb                        }|r|je                          d d d        tQ        | jg                         t(        jT                   xr t(        jV                   t(        jX                        5  | ji                  ||      }tG        |jj                  j]                               | _6        |jn                  }d d d        | jq                  d        |S c c}w c c}}w c c}}w c c}w # 1 sw Y   xY w# 1 sw Y   @xY w)N)rU   	requestedupdate_modifierdeps_modifierpruneignore_pinnedforce_remover<   )solver_input_statezDUsing solver via 'conda.plan.install_actions' (probably conda build)noarchfiler5   _argparse_argsoverride_channels0CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLEDF)seenr)   )default_returnplatformz^Channel %s defines platform %s which is not part of subdirs=%s. Ignoring platform attribute...c              3   ,   K   | ]  }|d k7  s	|  ywri   Nr5   r@   s     rC   rD   z3LibMambaSolver.solve_final_state.<locals>.<genexpr>   s     C\Q(]!\   
)rV   rp   target_prefix)conda_bld_channels)enabledjson)installed_recordsrV   r8   r;   load_pkgs_cache)9	_log_infor/   rU   r9   r:   _commandr0   
early_exitr8   _called_from_conda_buildrK   info_indexchannelschemer,   r+   rV   channels_from_specsgetattrr   getosgetenvr$   urlschannels_from_installedr   r1   base_urlrR   extendmaybe_free_channeldumpitemstupler-   canonical_namenextrN   r   _spinner_msg_metadata	verbosityquietrw   	installedvaluesvirtualrJ   offlinereload_local_channels_spinner_msg_solving_solving_loopneuteredneutered_specscurrent_solution_notify_conda_outdated)rT   rc   rd   re   rf   rg   should_retry_solvein_state	out_statenone_or_final_stater8   recru   IndexHelperall_channelsoverridecurlall_urlsinstalled_channelsr   deduped_channelschannel_platformkvindexsolutions                              rC   solve_final_statez LibMambaSolver.solve_final_state   s!    	#;;''?4+?+?+''%MM	
 &B	 (224*&& ,,((*HH[\ w&,7,H, .2[["-8cCKK<N<NRX<XT![  " 6K-K!#

]]
 ))+

 G%5t<BGGH[\yyKLU]%1T\WQZ__U=Sc=S\HT!)!A!Ax!A!P-12G4D4DUZ[ ''0 . 	H779: #G#*7J#EEE#72HH9( "aglln6J6J6L$`6LdaPQU_P_QT6L$`a(,W% $ -. 	0<=1a&&=CT\\CCdkk*	
 &&|HZ&[)))?'--.?

  "\H$6$6$=$=$?"\(BRBRBYBYB["\% -- 'E "++-
 %%')))?'--.?
 **8YFI"'	(:(:(A(A(C"DD 11H
 	##D%:a"" U, %a >

 

 
s>   :P8P8(P=QQ9Q	A-QAQQQ#rV   c                    | j                         r@d}|r:|D cg c]  }t        |      j                   }}|ddj                  |       dz  }|S t	        t
        j                  |D cg c]  }|j                   c}            }dj                  |      }d| dt        j                   d| j                   dS c c}w c c}w )	NzReloading output folderz (z, )z
 - zChannels:
 - z
Platform: z
Collecting package metadata ()
r}   r$   r   joinlistdictfromkeysr   subdirrJ   )rT   rV   ru   msgr   namescanonical_namescanonical_names_dasheds           rC   r   z$LibMambaSolver._spinner_msg_metadata  s    ((*+C!<NO<Nq22<NODIIe,-Q//Jt}}-Q1a.>.>-QRS!(o!>() * ( ),,0,=,=+>aA	
 P .Rs   B<)Cc                     t         j                  j                  | j                        }| j	                         r.d|v r)dj                  |j                  d      dd       }d| dS yy)	z<This shouldn't be our responsibility, but the CLI / app's..._env_N   zSolving environment (r   zGetting pinned dependencieszSolving environment)r   pathbasenamerU   r}   r   split)rT   prefix_nameenv_names      rC   r   z#LibMambaSolver._spinner_msg_solving  se    gg&&t{{3((*$88K$5$5c$:2A$>?.xj:: 5$r]   r   defaultc                    t         j                  j                  d      }t        |j                        }|r@	 t        |      }|dk  rt        d| d      ||kD  rt        j                  d||       |S |S |j                  j                  r|rt        | j                  |      S |S # t        $ r t        d| d      w xY w)N"CONDA_LIBMAMBA_SOLVER_MAX_ATTEMPTSz$CONDA_LIBMAMBA_SOLVER_MAX_ATTEMPTS='z'. Must be int.r)   z'. Must be >=1.zuCONDA_LIBMAMBA_SOLVER_MAX_ATTEMPTS='%s' is higher than the number of installed packages (%s). Using that one instead.)r   environr   lenr   intrE   r   rK   warningrc   FREEZE_INSTALLEDminMAX_SOLVER_ATTEMPTS_CAP)rT   r   r   from_env_varinstalled_countmax_attempts_from_envs         rC   _max_attemptszLibMambaSolver._max_attempts  s    zz~~&JKh001(+L(9%
 %q(%:;P:QQ`a  '8G)#	 '&,,%%66? t33_EEN1  %:<.X s   B' 'C r   r   c                     d}t        d| j                  |      dz         D ]  }t        j                  d|       	 | j	                  ||||      }|r ns	 t        |t        |j                        t        |j                        t        |j                        t        |j                        t        |j                              } |st        j                  d       |j                  j                  |j                  j!                         D ci c]"  \  }}|j"                  s||j%                         $ c}}       | j&                  d t(        fv rd| _        n| xj&                  dz  c_        | j	                  |||dz         }|s0| j+                  |j                  	      }t-        |      }	d|	_        |	| j1                  |||       |j3                  | 
       |S # t        t        f$ r d}Y  /w xY wc c}}w )NFr)   zStarting solver attempt %s)attempt)rh   recordsfor_historyr   	conflictspinsz2Last attempt: reporting all installed as conflictslast_solve_attemptz+last_solve_attemptr   )rH   )ranger   rK   rL   _solve_attemptr0   r   r   r   r   r   r   r#   r!   updater   r   is_unmanageableto_match_specr{   r   _prepare_problems_messager*   allow_retry_export_solved_records
post_solve)
rT   r   r   r   solvedr   rQ   recordmessageexcs
             rC   r   zLibMambaSolver._solving_loop>  s    Q 2 28 <q @AGII2G<,,Xy%QX,Y  .'/ !2!23 $Y%:%: ;!)"4"45"9#6#67inn-	 B$ IIJK&& )1(:(:(@(@(B(Bf!11 &..00(B
 }}t, 4!66((9eWWX[(YF88inn8M09"'	 	##Hi? 	D)W '(=> s   G!'G:
!G76G7c                 0   t         j                  dt               t         j                  dt               t         j                  dt	                      t         j                  d| j
                         t         j                  dt        j                         y )Nzconda version: %sz!conda-libmamba-solver version: %szlibmambapy version: %szTarget prefix: %rzCommand: %s)rK   r~   _conda_versionr   r.   rU   rO   rP   rT   s    rC   rz   zLibMambaSolver._log_infox  sV    $n54kB)=?;$dkk2)r]   poolc                    t         j                  dfgx| _        }t        j                  t
        j                  u r!|j                  t         j                  df       | j                  r6| j                  dd t        fv r!|j                  t         j                  df       t        j                  || j                        | _        y )Nr)   r7   )apiSOLVER_FLAG_ALLOW_DOWNGRADErI   r   channel_priorityr   STRICTrR    SOLVER_FLAG_STRICT_REPO_PRIORITYr:   r{   r   SOLVER_FLAG_ALLOW_UNINSTALLr   rH   )rT   r   solver_optionss      rC   _setup_solverzLibMambaSolver._setup_solver  s    ,,a01
 	
~ ##'='==!!3#G#G"KLDMMhd5K$K!!3#B#BA"FGjjt';';<r]   r   c                    | j                  |j                         t        j                  d|       t        j	                  d|j
                         |dk(  r|j                  |       | j                  ||      }t        j                  |j                         D ci c]  \  }}|d   | c}}d      }t        j                  d|       d}	|j                         D ]  \  \  }
}}t        j	                  d|
       |
d	k(  r?|dk(  r:|D ]4  }|	dz  }	| j                  j                  |       ||j                  d
|	 <   6 c	 | j                  j                  ||        | j                  j%                         }|r|j
                  j'                          |S | j                  j)                         }|j
                  j+                         }| j-                  |||j                  |j.                        }t        j	                  d|t1        |      |       |j
                  j3                  |       yc c}}w # t        $ r}t!        t#        |            d }~ww xY w)NzSolver attempt: #%dz-Current conflicts (including learnt ones): %sr)   r      )indentzSolver tasks:
%szAdding task %sADD_PINzpin-z'Attempt %d failed with %s conflicts:
%sF)r   _poolrK   r~   rL   r   check_for_pin_conflicts_specs_to_tasksrw   dumpsr   rH   add_pinr   add_jobsRuntimeErrorr    rN   solveclearproblems_to_strcopy_maybe_raise_for_problems	_channelsr   r   )rT   r   r   r   r   tasksr   r   tasks_as_strn_pins	task_name	task_typespecsrX   r   r   problemsold_conflictsnew_conflictss                      rC   r   zLibMambaSolver._solve_attempt  s    	5;;'&0		A9CVCVW a<--e4 $$Xy9zzu{{}"E}tq!1Q47}"EaP$l3-2[[])"Y	EII&	2I%'Q, "DaKFKK''-6:INNT&?3 "
0KK((	: .;  ""$%%'M;;..0!++00266mY^^U__
 			6]ASU]	
 	""=1E #F $ 0%c#h//0s   H1
H77	I IIc                     |j                   r| j                  ||      S | j                         r| j                  ||      S | j	                  ||      S r?   )is_removing_specs_to_tasks_remover}   _specs_to_tasks_conda_build_specs_to_tasks_add)rT   r   r   s      rC   r   zLibMambaSolver._specs_to_tasks  sP    ..xCC**,33HiHH++Hi@@r]   c                     | j                   r'| j                   j                  d      r| j                   S | j                  d      r| j                  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%   rN   )rX   s    rC   _spec_to_strzLibMambaSolver._spec_to_str  sY     !!d&<&<&G&G	&R)))88GTXXi%8T3/D4yr]   c                 	   t        t              }g |j                  |j                  |j                  |j
                  D ch c]  }||j                  v r| }}d}|j                  j                  d      }|j                  j                  d      }|r|r|j                  |       }dt        j                  f}	dt        j                  f}
dt        j                  f}dt        j                  f}dt        j                  f}dt        j                   t        j"                  z  f}|j                  D ]i  }|j                  j                  |      }|r/| j%                  | j'                  |j)                                     }nd }| j'                  |j*                  j                  |            }| j'                  |j                  j                  |            }| j'                  |j                  j                  |            }| j'                  |j,                  j                  |            }||v r"|j.                  s|s||   j1                  |       |r/|j2                  s#||	   j1                  | j%                  |             |r|j2                  r |r|j2                  s| j%                  |      }n| j%                  |      }|r*||   j1                  |       ||   j1                  |       ||
   j1                  |       ||j4                  v r*||   j1                  |       ||   j1                  |       
|j.                  r|dk(  rK|rI|sGd	j7                  |j8                  j;                  d	      d d
       }||	   j1                  d| d       h|rl|rE|j<                  dk(  r6|j8                  r| d|j8                   dn|}||
   j1                  |       ||
   j1                  | j%                  |             |s|r||   j1                  |       |j>                  j@                  }|r|j2                  rd}|r8|jB                  ,|jD                  D ]  }tG        |      jH                  dv sd} n |sV||   j1                  |       l i }|	|
||||fD ]  }||v s||   ||<    |S c c}w )NFpythonr   INSTALLUPDATEALLOW_UNINSTALLUSERINSTALLEDLOCK.r   zpython .*r    T)r  
python_abi)%r   r   historyaggressive_updatespinneddo_not_remover   r   r  matchr   SOLVER_NOOPSOLVER_INSTALLSOLVER_UPDATESOLVER_ALLOWUNINSTALLSOLVER_USERINSTALLEDSOLVER_LOCKSOLVER_WEAKr  _check_spec_compatr   rb   r   re   rR   is_name_only_specalways_updater   r  r   
strictnessrc   r   ri   dependsr%   rQ   )rT   r   r   r  pkguser_installedpython_version_might_changeinstalled_pythonto_be_installed_pythonr   r  r  r   r!  r"  rQ   r   installed_spec_strrb   r'  r)  conflictingrY   pyverrX   lockdepreturned_tasksr  s                                rC   r  z"LibMambaSolver._specs_to_tasks_add  s   D!!!,,  ''		
 h(((  	 	
" ',##--11(;!*!4!4X!> 6.D.J.JK[.\*\' S__,S///3,,,+S-F-FF')A)AAs88OOD'/'9'9'='=d'CI%)%6%6++I,C,C,EF&" &*"#'#:#:8;M;M;Q;QRV;W#XI!%!8!89I9I9M9Md9S!TG $ 7 78K8KD8Q RF%)%<%<Y=P=P=T=TUY=Z%[K~%hnn[m$++,>? f66 g%%d&7&7&?@ ..6&BZBZ  $008H#00;H&M((2/*11$7'N))(3///f$$T*o&--d3 !i!2!2!8!8!=bq!ABg%%wb&9:7#5#5#: =DOOdV1W__$5R8QUD'N))$/'N))$*;*;G*DE/*11$7 $33DDD&":":#2y7G7G7O#,#4#4C(~226NN', % $5 d**+=>O $V 
I E!,1),<y)
 k	
s   S c                    t        t              }|j                  j                         D ]d  \  }}||j                  v s||j
                  v s#|j                         j                         }|dt        j                  f   j                  |       f dt        j                  t        j                  z  f}|j                  j                         D ]3  \  }}| j                  |      }||   j                  t        |             5 t!        |      S )Nr!  zERASE | CLEANDEPS)r   r   r   r   r'  r(  r   conda_build_formr   r0  rR   SOLVER_ERASESOLVER_CLEANDEPSrb   r3  rN   r   )rT   r   r   r  rQ   r   rX   ERASEs           rC   r  z%LibMambaSolver._specs_to_tasks_removeT  s     D! &--335LD&x'''483N3N+N ++->>@(@(@ABII$O 6 %c&6&69M9M&MN",,224JD$**40D%LD	* 5 E{r]   c                 J   t        t              }dt        j                  f}|j                  j                         D ][  \  }}|j                  d      r| j                  |      }| j                  |      }||   j                  |j                                ] t        |      S )Nr  __)r   r   r   r-  rb   r   r  r3  "_fix_version_field_for_conda_buildrR   rD  r   )rT   r   r   r  r  rQ   rX   s          rC   r  z*LibMambaSolver._specs_to_tasks_conda_buildm  s     D!S///",,224JD$t$**40D::4@D'N!!$"7"7"9: 5 E{r]   rX   c                 X   | j                   rt        j                  d      }t        | j                         }t        j                  ||      r]| j                         j                         }|j                  d      dk  r	|dz   |d<   n|dz   |d<   t        dj                  |            S | S )zFix taken from mambabuildz	^[\d\.]+$r#  r)   r$  r  r%  )
r  recompilerN   r+  rD  r   countr%   r   )rX   only_dot_or_digit_reversion_strspec_fieldss       rC   rJ  z1LibMambaSolver._fix_version_field_for_conda_build{  s     <<#%::l#; dll+Kxx,k:"335;;=$$S)Q.%04%7KN%03%6KN +!677r]   c                    	 t        | t              r$| j                  dd      \  }}}t        |||      S d| d   j	                  d      i}t        |       dk\  r| d   j	                  d      |d<   t        |       d	k(  r| d   j	                  d      |d
<   t        di |S # t        $ r}t        d|        |d }~ww xY w)N-r   )rQ   r  r  rQ   r   ,r)   r  r   r  zCould not parse spec: r5   )rM   rN   rsplitr%   rstripr   	ExceptionrE   )rX   rQ   r  r  kwargsr   s         rC   _str_to_matchspecz LibMambaSolver._str_to_matchspec  s    	G$$'+{{3':$gu dG5II $q'.."56t9>(,Qs(;F9%t9>&*1gnnS&9F7O *6** 	G5dV<=3F	Gs   3B! A*B! !	B>*B99B>r  returnc                    g }g }|j                         dd }|D ]  }|j                         }|j                         }|j                  d      s6d|v rv|d   dk7  s|d   dk7  rt	        d|       |j                  | j                  |d	                |j                  d
      }|j                  | j                  |d|              d|v rot        d t        |      D        d      }|r#|j                  | j                  |d                |dk(  rdnd}	|j                  | j                  ||	|              #d|v r)d|v r%|j                  | j                  |d                Pd|v rjd|v rf|d   j                  dd      d   }
|d   j                  dd      d   }|j                  t        |
             |j                  t        |             d|v r%|j                  | j                  |d	                t        j                  d|        |D ci c]  }|j                  | c}|D ci c]  }|j                  | c}dS c c}w c c}w )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
        r)   Nz- z&none of the providers can be installedpackager   requireszUnknown message: r   but   z- nothing providesc              3   2   K   | ]  \  }}|d k(  s|  yw)neededNr5   )rA   iws      rC   rD   z1LibMambaSolver._parse_problems.<locals>.<genexpr>  s     Q/?Va1=q/?s   zhas constraintzconflicting withzcannot install both pin-zand pin-rS  r      #is excluded by strict repo priorityz!! Problem line not recognized: %s)r   	not_found)
splitlinesstripr   r  rE   rR   rY  r   r   	enumeraterU  r%   rK   rL   rQ   )clsr  r   rg  problem_lineslinewordsendmarkerstartpin_apin_brB   s                rC   _parse_problemszLibMambaSolver._parse_problems  sL    		 ++-ab1!D::<DJJLE??4(74?8y(E!H
,B$'8%?@@  !6!6uQx!@Akk%(  !6!6uQs|!DE%-Qy/?QSWX$$S%:%:59%EF#q[a  !6!6uU67J!KL!T).@D.H   !6!6uRy!AB+t3
d8JaQ/2aQ/2  5!12  5!126$>  !6!6uQx!@A		=tD? "D .77Y!&&!)Y7-67Y!&&!)Y7
 	
77s   I8Iprevious_conflictsr   c           	      v   | j                   t        d      || j                   j                         }t        |t              r| j                  |      }| j                  i d   |d   | j                                |d   }|d   }|s|rt        j                  dt        |j                               |       t        t        |j                               t        t        j                  |xs | j                                     }d|_        ||xs i }	t%        |	j                               }
t%        |j                               }|j'                  |
      }t)        |      dkD  rd|v r|j+                  d       |	r|
|k(  st)        |      d	k\  r&| j                  |
      }t-        |      }d|_        ||S )N9Solver is not initialized. Call `._setup_solver()` first.r   rg  )r   z4Inferred PackagesNotFoundError %s from conflicts:
%sFr)   r  r4   r   )rH   r   r  rM   rN   rt  _maybe_raise_for_conda_buildr   rK   rL   r   keysr!   r   r   r   rV   r   set
differencer   popr*   )rT   r  ru  r   rV   parsed_problemsunsatisfiablerg  r   previousprevious_setcurrent_setdiffr   s                 rC   r  z(LibMambaSolver._maybe_raise_for_problems  s    ;;Z[[{{224Hh$"228<O 	))L{+L{/KL224 	* 	

 (4#K0	IIGinn&' (i&&()5x?X4==1Y+ZC $COI%+8??,--..01%%l3t9q=X6 h',+53t9?44$4?G,W5C#COIr]   c                    | j                   j                         }d}d|vrd}d}n7d|v rt        j                  d       d}nd|v rt        j                  d       d}|r#	 | j                   j	                         }|d	|z   z  }|r1d|v r-d}|j                         D ]  \  }}|d| d| dz  } | d| S |S # t
        $ r!}t        j                  d
|       Y d }~Zd }~ww xY w)NTz - z Failed with empty error message.Fzunsupported requestz0Failed to explain problems. Unsupported request.rf  z=Skipping error explanation. Excluded by strict repo priority.
zFailed to explain problems)exc_infoz pin-zBPins seem to be involved in the conflict. Currently pinned specs:
z (labeled as 'z')
z

)rH   r  rK   r~   explain_problemsrW  r   r   )	rT   r   r   explainexplained_errorsr   pin_messagepin_namerX   s	            rC   r   z(LibMambaSolver._prepare_problems_message  s   ++--/8GG"g-HHGHG2g=HHTUGH#';;#?#?#A 4"222 Gw&_K"&**,$TF.
$GG #/Yd;-00  H83GGHs    "B7 7	C! CC!conflicting_specsr   c                     | j                         sy ddlm} t        d | j                  D        t
        j                        } |t        |j                               t        |j                               ||      }|)Nr)   )%ExplainedDependencyNeedsBuildingErrorc              3   ,   K   | ]  }|d k7  s	|  ywrr   r5   )rA   r   s     rC   rD   z>LibMambaSolver._maybe_raise_for_conda_build.<locals>.<genexpr>5  s     OL&Fh<NvLrs   )packages
matchspecsr   explanation)
r}   conda_build_exceptionsr  r   r8   r   r   r   ry  r   )rT   r  r   r  r   r   s         rC   rx  z+LibMambaSolver._maybe_raise_for_conda_build$  sp     ,,.Q ODLLOQXQ_Q_`3+0023-4467	
 	r]   c                    | j                   t        d      t        j                  |j                  | j                   t        j
                  t        j                              }|j                         \  \  }}}}|D ]w  \  }	}
|j                  j                         D ]?  \  }}|j                  r|j                  |
k(  s#|j                  j                  |d         a t        j!                  d|
       y | j#                         }|D ]  \  }}
}| j%                  |||
||      }|j                  j'                  |j(                        }|rR|j*                  dk(  rC|j*                  dk(  r4|j,                  |j,                  k(  r|j.                  |j.                  k(  r|}||j                  |j(                  <    t0        r|r|j                  j3                         D ]  }dt5        |      vr|j6                  j8                  r.t;        |j6                  j8                        |j6                  _        t;        |j6                  j(                        |j6                  _         y y y )Nrw  z9Tried to unlink %s but it is not installed or manageable?)for_conda_buildri   %)rH   r   r   Transactionr   MultiPackageCacher   	pkgs_dirsto_condar   r   r   fnr   r|  rK   r   r}   !_package_record_from_json_payloadr   rQ   r   r  r  r   r   rN   r   locationr   )rT   r   r   r   transactionnames_to_addnames_to_removeto_link	to_unlinkr   filenamerQ   r   r  r   json_payloadalready_installed_records                    rC   r   z%LibMambaSolver._export_solved_records>  s
    ;;Z[[ooKKKK!!'"3"34

 ?J>R>R>T;')$KAx ( 2 2 8 8 :f))99(%%))$5 !; WYab % 779/6+GX|;;w, < F (0'9'9'='=fkk'J$(MMX-,33x?NN&>&F&FFLL$<$B$BB 2-3Ifkk*' 07, o#++224c&k)>>**.<V^^=T=T.UFNN+&4V^^5H5H&I# 5 &6r]   r   pkg_filenamer  r  c                    	 t        j                  |      }j                  d      rd|v rt        di |S 	 |j                  |      }
|d	<   |
j.                  |d
<   |rct        j0                  j3                         D ]B  \  }}|D cg c]  }|j5                  d      D ]  }|  }}}|
j6                  |v s=||d
<    n t9        |
j:                        |d<   |j+                  d      s|
j.                  j<                  |d<   |d   dk(  r-t?        d |j+                  dd      D              rd|d<   nd|d<   t        di |S # t        t        t         j                  f$ r.}t        |      j                  }d| d }	t        |	      |d}~ww xY w# t        $ r t        j                  r[t        j                  D ]H  }t        |      }|j!                          t#        fd|j%                         D        d      }|sD|c cY S  t'        | j(                        }|j+                  |d   d      }|r|j,                  k(  r|cY S t        di |cY S w xY wc c}}w )a2  
        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 datas, 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.
        z!Could not parse JSON payload for r=   NrI  z/@/c              3   B   K   | ]  }|j                   k(  s|  y wr?   )r  )rA   rr  s     rC   rD   zCLibMambaSolver._package_record_from_json_payload.<locals>.<genexpr>  s     "Sladdl>R1ls   rQ   )r   r  r   F)with_credentialsr   r   ri   c              3   F   K   | ]  }|j                         d    dv   yw)r   )r  pypyN)r   )rA   rA  s     rC   rD   zCLibMambaSolver._package_record_from_json_payload.<locals>.<genexpr>  s#     ]C\C399;q>%77C\s   !r7  r5   r  generic) rw   loads	TypeErrorrE   JSONDecodeErrorr$   r   r"   r  r&   get_infoKeyErrorr   r   r  r   loadr   r   r   rU   r   r  r   custom_multichannelsr   r   
noauth_urlr   full_urlr   any)rT   r   r   r  r  r  rX  r   channel_namer   channel_infor   pcdr   pdmultichannel_namemc_channelsr   r   r   s      `                rC   r  z0LibMambaSolver._package_record_from_json_payloadx  sL   (	+ZZ-F ""4(Ug-= *6**	+ >>'2L, $t(00y 3:2N2N2T2T2V.!;%0[[AFFTYF<ZS<Z[[**d2(9F9%	 3W
 !!6!6Euzz(#+33::F8(x']6::iY[C\]]#+x #,x &v&&g :t';';< 	+"7+::L5l^2l^TCS/s*	+  	+ #--D*40CHHJ!"Scjjl"SUYZF% . DKK(BVVF6NDV9F&))|3 *6**%	+6 \sA   E F 	 IF$)FFA,II?I	II
match_specc           	         |yd}d}g }t               }i }|j                  D ]c  }|j                  |      }|s|dk(  rt        |      dk(  s|dk(  rd|v s||v r|j	                  |       I||vr|j                  |       _|||<   e |rt        |d| dt        |       d	      |r+t        j                  d
|t        |             t        di |}|j                  d      dk(  rlt        j                  t        k(  rU|j                  j!                         }	|	dv s|	j#                  d      rd}
n|	j#                  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.
        N)rQ   r  r  r   r   )r   md5sha256r   z	<unknown>r   zULibmamba only supports a subset of the MatchSpec interface for now. You can only use z, but you tried to use r#  z'Dropping unsupported fields from %s: %sdefaults)r  rpy2rstudio)zr-z_r-zmro-zpkgs/r)zm2-zm2w64-zmsys2-z
pkgs/msys2z	pkgs/main)r   r5   )rz  FIELD_NAMESget_raw_valuerN   addrR   r   r   rK   rL   sortedr%   r   default_channelsr   rQ   lowerr  )rT   r  	supported	droppableunsupported_but_setto_dropto_keepfieldvaluerQ   r   s              rC   r3  z!LibMambaSolver._check_spec_compat  sy    C	,	 %++E,,U3Ei'CJ+,E)i7.B	) KK&)+'..u5%*GEN , "$$-;.E,-.a1  II?VT[_]"-W-J$$Y/:=((,<< ??((*D//4??CX3Y"!<=&%":w?Jr]   c                      d | _         d | _        y r?   )rH   rI   r   s    rC   _resetzLibMambaSolver._reset  s    #r]   c                     t        | dd      xr4 dt        j                  v xr  ddht               D ch c]  }|d   	 c}k  S c c}w )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.
        r   Nconda_buildinstall_actionsget_install_actionsr   )r   rO   modulesr   )rT   frames     rC   r}   z'LibMambaSolver._called_from_conda_build  s\     D(D) ^,^ #$9:UZU\>]U\EuQxU\>]]	
 ?^s   Afinal_statec                    ||yt         j                  rt         j                  ryd}t        j                  j                  t         j                  d      }t        t        t              5  t        j                  j                  |      rt        j                  |      D ]  }|j                         s|j                  j                  d      s0|j                  j                  dd      d   dk(  sSt!        |j                        5 }t#        di t%        j&                  |j)                               }ddd        n ddd       |sy|j*                  j,                  }|t.        dd	d
fv rd}|j0                  D 	ch c]  }	t3        |	d|	       }
}	||
vry| dt4         }t7        |      t9        | j:                  t         j                        rt=        fd|D              ry|j?                  |      }|rKtA        |d       }tC        tE        dt4         d|jF                   d| d      tH        jJ                         yy# 1 sw Y   xY w# 1 sw Y   xY wc c}	w )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.
        Nz
conda-metaz.jsonrS  r   r   conda@z	<develop>pypir  r   z::conda>c              3   @   K   | ]  }j                  |        y wr?   )r+  )rA   r   conda_newer_specs     rC   rD   z8LibMambaSolver._notify_conda_outdated.<locals>.<genexpr>Y  s     Lf#))&1s   c                 ,    t        | j                        S r?   )r(   r  )xs    rC   <lambda>z7LibMambaSolver._notify_conda_outdated.<locals>.<lambda>a  s    L<Sr]   )keyzq

                    ==> 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

                    )rj   r5   )&r   notify_outdated_condar   r   r   r   conda_prefixr   OSErrorrE   lexistsscandiris_filerQ   endswithrU  openr'   rw   r  readr   r   r   r  r   r   r%   r   rU   r  searchmaxprintr   r  rO   stderr)rT   
link_precsr   r  current_conda_prefix_recconda_meta_prefix_directoryentryfr  chnindex_channelsconda_newer_strconda_newer_recordsnewestr  s                 @rC   r   z%LibMambaSolver._notify_conda_outdated  s#    =[0 ,, $( &(ggll73G3G&V#gz*ww:;ZZ(CDE!JJ//8!JJ--c15a8GC!%**-7C7[djjQRQWQWQYFZ7[4 . E + ( /77FFOS+vFF%L JOY#'#'7=Y~- *N(>2BC$_5
 t{{G$8$89LLL $ll?; ,2STF* +9)9 :))/(8 93 4@. A
 ZZ C .- +*, Zs=   ,AI5I"I4I	-I6I>I!III)r5   )r)   )NNNr5   r?   )F)NN)7__name__
__module____qualname____doc__r   	_uses_sscr   r   rG   staticmethodr   r`   r   r   r$   r   r   r/   r   r   r0   r+   r   rz   r   Poolr   r   r   r  r  r  r  r%   rJ  r   rN   r   rY  classmethodr	   rt  r
   r  r   rx  r   boolr&   r  r3  r  r}   r   __classcell__)r\   s   @rC   r3   r3   ?   s6    !I 6Pp tS  S  yv
hw.? 
 
%&6  @8"8 %8 #	8t*	=#(( 	=  4"4 %4 #	4
 4lA(8 AEV A  |,< |IZ ||/? L] 2(5F    Gc8C=&8 9 G G 2
s 2
wsI~/F 2
 2
l 376:(,&(55g./5 $CN35 c9n%	5
 7#5nB "3	>2 48J"8J %8J #	8J@ !&I'"I' I' 	I'
 I' I' 
I'V:U9d?-C :iY]oH^ :x$
. &*/3	Z #Z m,	Zr]   r3   )Xr  rw   loggingr   rL  rO   collectionsr   
contextlibr   	functoolsr   inspectr   textwrapr   typingr   r	   r
   r   r   
libmambapyr   boltons.setutilsr   r  r   r   conda.base.constantsr   r   r   r   conda.base.contextr   conda.common.compatr   conda.common.constantsr   conda.common.ior   r   conda.common.pathr   conda.common.urlr   r   conda.core.package_cache_datar   conda.core.prefix_datar   conda.core.solver   conda.exceptionsr   r   r    r!   r"   r#   conda.models.channelr$   conda.models.match_specr%   conda.models.recordsr&   r'   conda.models.versionr(    
exceptionsr*   r   r+   r,   mamba_utilsr-   r.   stater/   r0   utilsr1   	getLoggerr  rK   r3   r5   r]   rC   <module>r#     s      	 	 
 #     ? ?  ' /  ' & ' , ) 5 : - #  ) - < -  2 C 8 6 'g&
+,rV rr]   