BVc@sdZddkZddkZddkZddkiZddkii Z ddk Zddk Zddk i Z ddkZddkiZddklZddklZddklZddklZddklZlZddk lZlZlZd Zd Z d Z!d Z"d Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5d Z6d!Z7d"Z8d#Z9d$Z:d%e;fd&YZ<d'e=fd(YZ>dS()sProvides the interfaces and exceptions needed to determine which packages should be installed, updated, or removed to perform a requested operation.iN(t defaultdict(tchain(t DebugValues(tFirmware(tPKG_OP_UNINSTALLt PKG_OP_UPDATE(tEmptyIt EmptyDicttN_t Initializeds Not possibletFailedt Succeedediiiiiiiiii i i i i iiiiiiiiiitDependencyExceptioncBsGeZdZedZedZedZedZRS(sglocal exception used to pass failure to match dependencies in packages out of nested evaluationcCs,ti|||_||_||_dS(N(t Exceptiont__init__t_DependencyException__fmrist_DependencyException__reason_idt_DependencyException__reason(tselft reason_idtreasontfmris((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyR[s   cCs|iS(s#The FMRIs related to the exception.(R(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRascCs|iS(s:A constant indicating why the related FMRIs were rejected.(R(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRfscCs|iS(s8A string describing why the related FMRIs were rejected.(R(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRks( t__name__t __module__t__doc__RRtpropertyRRR(((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyR Ws  t PkgSolverc BseZdZdZdZdZdZeedZ dZ dZ e e dZ d Zed Zeed Zd Zeed ZdZdZedZeedZdZdZee eeeeeedZe edZedZdZdZ dZ!eddZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)eed#Z*d$Z+d%Z,d&Z-eed'Z.eed(Z/d)Z0e d*Z1e d+Z2e ed,Z3e ed-Z4e ed.Z5d/Z6d0Z7d1Z8e eeed2Z9e eed3Z:e d4Z;e d5Z<d6Z=d7Z>d8Z?eed9Z@d:ZAe d;ZBd<ZCd=ZDd>eeed?ZEd>eeed@ZFdAZGedBZHdCZIdDZJdEZKdFZLdGZMdHZNdIZOe dJZPe dKZQdLZRdMZSe dNZTdOZUdPZVdQZWedRZXeedSZYdTZZdUZ[dVZ\dWZ]RS(XsProvides a SAT-based solution solver to determine which packages should be installed, updated, or removed to perform a requested operation.c Cstdotdn||_t|_h|_tt|_||_ t |_ tt|_ |i |_t|i|_t|ii|_h|_t|_t|_x@|iD]5}|i} |i | do| |i|i|_?hhtt@6ttA6tA6|_BdS(sCreate a PkgSolver instance; catalog should contain all known pkgs, installed fmris should be a dict of fmris indexed by name that define pkgs current installed in the image. Pub_ranks dict contains (rank, stickiness, enabled) for each publisher. variants are the current image variants; avoids is the set of pkg stems being avoided in the image.t no_solvers!no_solver set, but solver invokediiN(CRt RuntimeErrort_PkgSolver__catalogtsett_PkgSolver__known_incst_PkgSolver__publisherRtlistt_PkgSolver__possible_dictt_PkgSolver__pub_rankstFalset_PkgSolver__depend_tst_PkgSolver__trim_dicttcopyt_PkgSolver__installed_dictt frozensett_PkgSolver__installed_pkgstvaluest_PkgSolver__installed_fmrist_PkgSolver__pub_trimt_PkgSolver__removal_fmrist_PkgSolver__req_pkg_namest publishertpkg_namet_PkgSolver__id2fmrit_PkgSolver__fmri2idtpkgtsolvert msat_solvert_PkgSolver__solvert_PkgSolver__progtracktNonet_PkgSolver__progitemt_PkgSolver__addclause_failuret_PkgSolver__variant_dictt_PkgSolver__variantst_PkgSolver__cachet_PkgSolver__actcachet_PkgSolver__trimdonet_PkgSolver__fmri_statet SOLVER_INITt_PkgSolver__statet_PkgSolver__iterationst_PkgSolver__clausest_PkgSolver__variablest_PkgSolver__subphasenamet_PkgSolver__timingst_PkgSolver__start_timet_PkgSolver__inc_listt_PkgSolver__dependentst_PkgSolver__root_fmrist_PkgSolver__avoid_sett_PkgSolver__obs_sett_PkgSolver__reject_sett_PkgSolver__fmridictt_PkgSolver__expl_install_dictt isinstancettypetAssertionErrort_PkgSolver__parent_pkgstdictt_PkgSolver__parent_dictRt_PkgSolver__firmwareRRt_PkgSolver__triggered_ops( Rtcattinstalled_dictt pub_rankstvariantstavoidst parent_pkgst progtracktftpubt_[1]((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRvsx                                    #  0  cCsd}|ittgjo&|di|i|i|i7}n|di|i7}|d7}|dig}|iD]}|di|qy~7}|d7}|i o7dig}|i D]}|t |q~}nd }|d i|7}|S( Ns Solver: [s2 Variables: {0:d} Clauses: {1:d} Iterations: {2:d}s State: {0}]s Timings: [s, s{0}: {1: 6.3f}t]s R9s Maintained incorporations: {0} ( RCt SOLVER_FAILtSOLVER_SUCCESStformatRFRERDtjoinRHRJtstr(RtsRctat_[2]tincs((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__str__s     *  7cCsd|_h|_t|_t|_h|_h|_d|_h|_ t |_ d|_ d|_ d|_d|_t|_d|_d|_d|_d|_d|_d|_d|_d|_h|_d|_tdo|Sd|_|S(sDiscards all solver information except for that needed to show failure information or to stringify the solver object. This allows early garbage collection to take place, and should be performed after a solution is successfully returned.tplanN(R9RR(R)R*R,R R"R#R-RR.R2R3R7R8R$R;R<R=R>R?R@RARIRKRPRXRR&(Rtrval((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __cleanups8                          cCs(|ipt|ii|idS(s7Bump progress tracker to indicate processing is active.N(R:RTR8tplan_add_progress(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __progressscCsa|o g|_n|idj o|inti|_di||_|idS(scAdd timing records and tickle progress tracker. Ends previous subphase if ongoing.s phase {0:d}N(RHRGR9t_PkgSolver__end_subphasettimeRIRgt_PkgSolver__progress(Rtsubphasetreset((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__start_subphase$s cCsBti}|ii|i||ifd|_d|_dS(s8Mark the end of a solver subphase, recording time taken.N(RuRHtappendRGRIR9(Rtnow((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__end_subphase/s   cCsx|D]\}}}|o+td|i|ii|ff}n%td|i|iiff}|i|i|dtdt|qWdS(s2Trim any packages we cannot update due to freezes.s^This version is excluded by a freeze on {0} at version {1}. The reason for the freeze is: {2}s;This version is excluded by a freeze on {0} at version {1}.tdotrimiN(RR1tversiontget_short_versiont_PkgSolver__trimt_PkgSolver__comb_auto_fmrisR$t _TRIM_FREEZE(Rtexisting_freezesRatrt_tR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __trim_frozen7s  cCsCd}tdo|i}ntid|d|d|dS(s.Raise a plan exception due to solution errors.Rot no_solutiont no_versiont solver_errorsN(R9Rtget_trim_errorst api_errorstPlanCreationException(RRRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__raise_solution_errorGs  cCs|djodSt}g}xx|D]p}|i||}|o|||q>~g}|iD]!}|i|p ||qzqz~O_||_x0|D](}|i|i |t t dqW|i |B||_ |i td|iD8_ dS(s]Sets the list of package to be removed from the image, the list of packages to reject, the list of packages to avoid during the operation, and the list of packages that must not be removed from the image. 'rejected' is a set of package stems to reject. 'proposed' is an optional set of FMRI objects representing packages to install or update. Upon return: * self.__removal_fmris will contain the list of FMRIs to be removed from the image due to user request or due to past bugs that caused wrong variant to be installed by mistake. * self.__reject_set will contain the list of packages to avoid or that were rejected by user request as appropriate.s%This version rejected by user requestcssx|]}|iVqWdS(N(R1(t.0Ra((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s N(R9RRMR.R(R,t%_PkgSolver__trim_nonmatching_variantsRORt_PkgSolver__get_catalog_fmrist _TRIM_REJECTRR*R/(RtrejectedtproposedRcRRlRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt#__set_removed_and_required_packagesks*    ( *  c Cst}xto{t|i}|i|d|d|d|}|o|i|t}nt|i}| p ||joPq q W|i|iidS(sUpdate the provided possible set of fmris with the transitive closure of dependencies that can be satisfied, trimming those packages that cannot be installed. 'possible' is a set of FMRI objects representing all possible versions of packages to consider for the operation. 'full_trim' is an optional boolean indicating whether a full trim of the dependency graph should be performed. This is NOT required for the solver to find a solution. Trimming is only needed to reduce the size of clauses and to provide error messages. This requires multiple passes to determine if the transitive closure of dependencies can be satisfied. This is not required for correctness (and it greatly increases runtime). However, it does greatly improve error messaging for some error cases. 'filter_explicit' is an optional boolean indicating whether packages with pkg.depend.explicit-install set to true will be filtered out. An example of a case where full_trim will be useful (dueling incorporations): Installed: entire incorporates java-7-incorporation Proposed: osnet-incorporation incorporates system/resource-mgmt/dynamic-resource-pools system/resource-mgmt/dynamic-resource-pools requires new version of java not allowed by installed java-7-incorporationtexcludest full_trimtfilter_explicitN(tTruetlenR&t'_PkgSolver__generate_dependency_closuretupdateR$tdifference_updatetiterkeys( RtpossibleRRRtfirstttsizetrestnsize((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__update_possible_closures$    cCsx|iD]~}|i|i|i|i|xN|i|D]?}x6|i|d|D]}|i|i||qaWqEWq WdS(sConstrain the solver solution so that only one version of each package can be installed and generate dependency clauses for possible packages.RN(R"Rvt_PkgSolver__addclausest"_PkgSolver__gen_highlander_clausest"_PkgSolver__get_dependency_actionst"_PkgSolver__gen_dependency_clauses(RRRtfmritda((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__enforce_unique_packagess    cCs;|djo |djp!|dj o |dj pt|djo t}n|djo t}nxI|D]A}|i|i|it||t|i|@qsWx||i||i |i D]_}|i|i ||i joqn||ijo!|i|i|i|qqWdS(szGenerate initial solver clauses for the proposed packages (if any) and installed packages. 'proposed' is a set of FMRI objects representing packages to install or update. 'proposed_dict' contains user specified FMRI objects indexed by pkg_name that should be installed or updated within an image.N( R9RTRRRvRt$_PkgSolver__gen_one_of_these_clausesR"R*RORMR(R.(RRRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__generate_operation_clausess0 !         cCsp|itjptt|_|i}|idjo |i|_|i|in|i ddt |S(svPrepares solver for solution creation returning a ProgressTracker object to be used for the operation.iRxN( RCRBRTt SOLVER_OXYR8R:R9tPLAN_SOLVE_SETUPt plan_startt_PkgSolver__start_subphaseR(Rtpt((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __begin_solves   cCsN|i}|i|i|i|i|i|||i|iffS(sjReturns the solution result to the caller after completing all necessary solution cleanup.(R8Rtt plan_donetPLAN_SOLVE_SOLVERt_PkgSolver__cleanupt"_PkgSolver__elide_possible_renamesRMRN(RtsolutionRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __end_solve,s   cCs|djo t}nt}g}x|i||i|iD]}|i|i||ijoqEn||ijoqEn|i |i|gd|}|o0|i t di |g|i |qEqEW|o|i d|ndS(sRaises a PlanCreationException if the proposed operation would require the removal of installed packages that are not marked for removal by the proposed operation.RsPPackage {0} must be uninstalled before the requested operation can be performed.RN(R9RR*RORMRvR(R.R"RRRRgR(RRRRRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__assert_installed_allowed6s,        cCsSt|_|i||dtdt|i||i||id|dS(s+Raises a PlanCreationException if any further trims would prevent the installation or update of proposed or installed/required packages. 'proposed' is an optional set of FMRI objects representing packages to install or update. 'proposed_dict' contains user specified FMRIs indexed by pkg_name that should be installed within an image. 'possible_set' is the set of FMRIs potentially allowed for use in the proposed operation.RRRN(R$R@t#_PkgSolver__update_possible_closureRt_PkgSolver__trim_proposedt_PkgSolver__assign_possiblet$_PkgSolver__assert_installed_allowed(Rt possible_setRRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__assert_trim_errors_s     c CsB|i||d|g}g}|id|oY|idtid}xGt|d|D]"} |idi| iqeWn|id|id|ig} |iD]} | D] } | | qq~ d|} | oX|id|it d |idx(| D]}|idi|q'Wn|i } | oX|id|it d |idx(| D]}|idi|qWn|pP|it d |it d |it d |it dn|||_ t do|i |_n|dS(sPrivate logic for solve_install() to process a PlanCreationException and re-raise as appropriate. 'exp' is the related exception object raised by the solver when no solution was found. 'inc_list' is a list of package FMRIs representing installed incorporations that are being maintained. 'proposed_dict' contains user specified FMRIs indexed by pkg_name that should be installed within an image. 'possible_set' is the set of FMRIs potentially allowed for use in the proposed operation. Rtsmaintained incorporations:R1tkeys {0}smaintained incorporations: NoneRs8Plan Creation: dependency error(s) in proposed packages:sDPlan Creation: Errors in installed packages due to proposed changes:s<Plan Creation: Package solver is unable to compute solution.s7Dependency analysis is unable to determine exact cause.sGTry specifying expected results to obtain more detailed error messages.s8Include specific version of packages you wish installed.RoN(t_PkgSolver__assert_trim_errorsRztoperatort attrgettertsortedRgtget_short_fmrit&_PkgSolver__generate_dependency_errorsR+Rt_PkgSolver__check_installedRRRR(Rtexptinc_listRRRtinfoRmtskeytilRcRktbtmsRj((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__raise_install_errorsR  $          cCsr||ijptd|||i|jptd|t|tpt|i||c|O} | i|jo|| ii| q*| g|| i| i?|_@| iA| i?|id|iB} y|iC}!Wn1t)i*j o"}|i+|||||nX|id|iD| x;|!D]3}|i|jo|iE|iF|gqqW|id|iB} |iCdt}!|id|iD| x.|!|i @D]}|iE|iF|gqGW|iC}"|i|iG|"|}"|iH|"|S(sm Logic to install packages, change variants, and/or change facets. Returns FMRIs to be installed / upgraded in system and a new set of packages to be avoided. 'existing_freezes' is a list of incorp. style FMRIs that constrain package motion. 'proposed_dict' contains user specified FMRIs indexed by pkg_name that should be installed within an image. 'new_variants' a dictionary containing variants which are being updated. (It should not contain existing variants which are not changing.) 'reject_set' contains user specified package names that should not be present within the final image. (These packages may or may not be currently installed.) 'trim_proposed_installed' is a boolean indicating whether the solver should elide versions of proposed packages older than those installed from the set of possible solutions. If False, package downgrades are allowed, but only for installed packages matching those in the proposed_dict. 'relax_all' indicates if the solver should relax all install holds, or only install holds specified by proposed packages. 'ignore_inst_parent_deps' indicates if the solver should ignore parent dependencies for installed packages. This allows us to modify images with unsatisfied parent dependencies (ie, out of sync images). Any packaging operation which needs to guarantee that we have an in sync image (for example, sync-linked operations, or any recursive packaging operations) should NOT enable this behavior. 'exact_install' is a flag to indicate whether we treat the current image as an empty one. Any previously installed packages that are not either specified in proposed_dict or are a dependency (require, origin and parent dependencies) of those packages will be removed. 'installed_dict_tmp' a dictionary containing the current installed FMRIs indexed by pkg_name. Used when exact_install is on.iRRRiis7This version excluded by specified installation versionis7This version is excluded by installed incorporation {0}tanarchytinclude_schemeiR}iiiiii t exact_installtinstalled_dict_tmpi i i Ri iitolderi(It_PkgSolver__begin_solveRRYRRR1RztaddR)R=R,t_PkgSolver__get_variant_dictR.R(t_PkgSolver__mark_pub_trimmedR0R t-_PkgSolver__set_removed_and_required_packagesRvR*t)_PkgSolver__relax_parent_self_constrainedt*_PkgSolver__get_installed_unbound_inc_listRJRR+R~R$t_PkgSolver__trim_olderRRRt_TRIM_PROPOSED_VERRt"_PkgSolver__trim_recursive_incorpstzipRRt_TRIM_INSTALLED_INCt_PkgSolver__trim_frozenRRRRt_PkgSolver__raise_install_errort_PkgSolver__comb_newer_fmrisRR!RQtitemsRt_PkgSolver__is_explicit_installRt$_PkgSolver__trim_nonmatching_parentst$_PkgSolver__trim_nonmatching_originsRR&Rt_PkgSolver__assign_fmri_idst#_PkgSolver__enforce_unique_packagest&_PkgSolver__generate_operation_clausesRRRRR:Rt_PkgSolver__save_solvert_PkgSolver__solvet_PkgSolver__restore_solverRRt_PkgSolver__update_solution_sett_PkgSolver__end_solve(#RRRt new_variantsRt reject_setttrim_proposed_installedt relax_alltignore_inst_parent_depsRRRtr_setRat proposed_pkgstdtkRt relax_pkgsRt con_liststinstalled_fmris_tmptcandidate_fmristverlistt valid_triggerttftitflistRRRRt saved_solvertsaved_solutionR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt solve_installsb4      (                              (                         cCs6|i}|id||ix(|iD]}|i|i|q0W|i||idt}xY|i|iD]G}|i|i |d}|pt|g}n||O}qW|id|i ||xI|D]A}|i ||o(|i |o|i ||q5qqW|id|i|ii|i||i||id|iy|iWn)tij o|i||nX|i|i|i|_|i|i|idy|i}Wn)tij o|i||nX|i||x5|iD]'}|i |o|i!|qYqYW||ijo|i"||S|i#|} | p |i$o|i"||S|i||t%i&d} g} | i't(d | i't(d | i'd | i't(d | i'd | i)d t*| d| D| i'd |i+| d|} | i)|i,| oK| i't(d| i'd xN| D]} | i'di-| qWn'| i't(d| i't(d|i.d| dS(s"Logic to update all packages within an image to the latest versions possible. Returns FMRIs to be installed / upgraded in system and a new set of packages to be avoided. 'existing_freezes' is a list of incorp. style FMRIs that constrain pkg motion 'reject_set' contains user specified FMRIs that should not be present within the final image. (These packages may or may not be currently installed.) RiiiiiiR1s9No solution found to update to latest available versions.sFThis may indicate an overly constrained set of packages are installed.t slatest incorporations:css"x|]}di|VqWdS(s {0}N(Rg(RRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s RRsKThe following indicates why the system cannot update to the latest version:s {0}s5Dependency analysis is unable to determine the cause.sHTry specifying expected versions to obtain more detailed error messages.RN(/RRRvR,RRRRR.RRRRRRR&RRRRRRRRRRRR:RRRR't_PkgSolver__fmri_is_obsoletetremoveRt-_PkgSolver__get_installed_upgradeable_incorpst_PkgSolver__is_childRRRzRRRRRRgR(RRRRRRaRtmatchingRtincorpsRRRRj((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pytsolve_update_all&s                         c s|i|i}||i||}t||B|ittB}tx&|ittD]}i|qcWx |D]} |i|i | ||} t fd| D} x| D]} t } xo|i | |D][}|i ddjoqntii|i ddi}|| ijo t} PqqW| o| i| | qqW| oti| | qqWtd|D}t|_|i|hd|d|d |S( s$Compute changes needed for uninstallc3sGx@|]9}x0D](}|i|ijo||fVqqWqWdS(N(R1(RRaR(t triggered_set(s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s  RStrequireRs5.11cssx|]}|iVqWdS(N(R1(RRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s RRR(RR,RRRYRRRRvt_PkgSolver__get_dependentsRVRRtattrsR4RtPkgFmriR1R$RRtNonLeafPackageExceptionRBRCR(RRtuninstall_listRRtorig_installed_sett renamed_settproposed_removalsRatpfmrit dependentst candidatesRRRR1R((Rs;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pytsolve_uninstallsR             c CsRtd|D}t}x|D]}x|i|d|dtD]}|iddjoqHn|id}y|i|}Wn5tj o)tii|d}||i|s Rt trim_invalidRStgroupRs5.11(RRR$RRPtKeyErrorR4RR RR1RMR'RRRN( RRRtsolution_stemst tracked_stemsRRkttttmpRtobsRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__update_solution_set s4       cCs|itii|ifS(s5Duplicate current current solver state and return it.(R;R4R5R6R7(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __save_solver.scCs|\|_|_d|_dS(s8Set the current solver state to the previously saved oneiN(R;R7RD(RR5((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__restore_solver3sicCsg}t|_t}x |i o|iigo|i|id7_|i|joPn|i}|pPnx|D]}|i |}|i |\}}|p |} n|t|g|} x+| D]#} |i |i |  ggqWqW|i g} |D]} | | q~ gqW|ip|i dtnt|_tg} |D]} | |i | qp~ }|S(sQPerform iterative solution; try for newest pkgs unless older=TrueiR(ReRCRR;R7tsolveRvRDt_PkgSolver__get_solution_vectort_PkgSolver__getfmriRRt_PkgSolver__getidRRRf(RRtmax_iterationstsolution_vectort eliminatedtfidR&Rt remainingRRaRcRRlR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__solve8s:     %1  0cCsOtg}t|iiD](}|ii|o||dqq~S(s"Return solution vector from solveri(R)trangeR7t get_variablest dereference(RRcR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__get_solution_vectords cCsg|iix%|D]}|i|ii|qWx"|iD]}|i|iq?Wt|_dS(shAssign __possible_dict of possible package FMRIs by pkg stem and mark trimming complete.N(R"tclearR1RztsortRR@(RRRaR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__assign_possibleks  cCs|i|d}x_t|iiD]H}x?t|i|D]*}||i|<||i|<|d7}qCWq)W|d|_dS(s) give a set of possible fmris, assign idsiN(RRR"RtreversedR2R3RF(RRtpkgidRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__assign_fmri_idsxs   cCs |i|S(s&Translate fmri to variable number (id)(R3(RR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__getidscCs |i|S(s'Translate variable number (id) to fmris(R2(RR<((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __getfmriscCsS||ijo8g}|ii|D] }||q'~|i|Rtfmris_by_version(RR1RcR/((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__get_fmris_by_versions1cCsx||ijo|i|n|io|ii|gSg}|i|D]}|dD] }||qaqS~S(s6 return the list of fmris in catalog for this pkg namei(R-t_PkgSolver__filter_publishersR@R"tgett _PkgSolver__get_fmris_by_version(RR1RcttpRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__get_catalog_fmriss c Cst|p!| p|i p|ii o|i||ti|S||ti|f}y|i|SWntj onX|i}|i|iddd}d}xFt |D]8\}} || ijo |}q|dj oPqqW|dj o,t ||d } t ||d} nt } t |} |i p | | fS| | f|i|<|i|S(sReturns tuple of set of fmris that are matched within CONSTRAINT.NONE of specified version and set of remaining fmris.Nii( R~ttimestrt_PkgSolver__comb_commontCONSTRAINT_NONER>R,RR1R9t enumerateR)R@( RRR}t obsolete_okRPtmvert all_fmristlast_verRRaRR=((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__comb_newer_fmriss6            csTi|i}tfd|D}tt||}||fS(s"Implements versionless comb logic.c3sQxJ|]C} p|ijo!pi| o |VqIqqWdS(N(R&R(RRa(R}RRV(s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s (RR1R)R(RRR}RVRXRR=((RR}RVs;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__comb_common_noversions  c Cs|i}|i o,|io"|titititifj}|i|i}|o.t i dd}t |d|dt } n|ddd} d} d} xyt| D]k\} } | i}|i|d|p ||jo!| djo | } n| } q| dj oPqqW| dj og}g}xg| | | d!D]T} | p| |ijo)|p|i|  o|i| qO|i| qOWt|}tt| | || | d}nt}t| }||fS( s Implements versioned comb logic.sversion.branchsversion.releaseRtreverseNit constrainti(R~RRtbranchRTtCONSTRAINT_RELEASEtCONSTRAINT_RELEASE_MAJORtCONSTRAINT_RELEASE_MINORRR1RRRRR9RUt is_successorR&RRzR)R(RRR}R]RVRWt branch_sortRXRt comb_fmrist first_verRYRRatfverRR=((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__comb_common_versionsX                 cCs|i||||f}|i o|p||ijo|i p|ii o|i|||\}}n|i||||\}}|ip ||fS||f|i|R~treleaset!_PkgSolver__comb_common_noversiont_PkgSolver__comb_common_version(RRR}R]RVRPRR=((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __comb_common=s "    c Cs|i|dtd|\}}|p ||fStg}|D]!}||ijo ||qAqA~}||||BfS(soReturns tuple of set of fmris that are older than specified version and set of remaining fmris.R}RV(RR$RR&( RRR}RVtnewerRRcRat trimmed_older((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__comb_older_fmrisXs  'cCs|i||ti|S(sReturns tuple of set of fmris that are match within CONSTRAINT.AUTO of specified version and set of remaining fmris.(RSR~tCONSTRAINT_AUTO(RRR}RV((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__comb_auto_fmrisksc Csytg}|ii|tiigd|D]I}|idjo3|idd jo||id|idfq/q/~}Wn1ti j o"d |i |<|i |dSX|i ddi d j|i ddi d jf|i |tj o2}|i||i|id |i tgSXd S( sreturn set of direct (possible) dependencies of this pkg; trim those packages whose dependencies cannot be satisfiedRSRR+t conditionals require-anyt incorporatetoptionaltexcludet check_reqit fmri_addsN( RRRt_PkgSolver__parse_dependencyRR RRRR( RRRR}RRcRRate((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__generate_dependenciess&   3 c Cstg}|D]$}|i||o ||qq~}|p t|Std|D}t||}t}x|o|i}|i|x|i||D]} | iddjox| idD]} y|i| } Wn5t j o)t i i | d} | |i| 5s RSRRtoriginRs5.11(s incorporatesoptionalR(Rt_PkgSolver__fmri_is_renamedRVRRRRtattrlistRPR,R4RR R1tdiscard(RRRRcR&t renamed_fmrist fmris_by_nameRRRRaR0Rtnew_fmri((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__elide_possible_renames$sL *                cCs|idjoh|_x|iD]}xz|i||D]f}|iddjoq<ntii|iddi}|ii |i |t i |q<Wq#Wn|ii |t S(shreturn set of installed fmris that have require dependencies on specified installed fmriRSRRs5.11N(RKR9R,RRR4RR R1t setdefaultR(RRRN(RR&RRaRR1((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__get_dependents]s      c Cst}|g}x|o|i}|it||i||}x~|D]v}|i||dttd|diff||d}|o*t||jo|i t |qTqTWqWdS(s(trim packages affected by incorporationsis(Excluded by proposed incorporation '{0}'iN( RRRR)t_PkgSolver__combine_incorpsRt_TRIM_PROPOSED_INCRR1RzR!( Rt fmri_listRt processedtworkRRRtto_do((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_recursive_incorpsns    cscg}|D]}||i||q ~ttidD}tfd|DS(sGiven a list of fmris, one of which must be present, produce a dictionary indexed by package name, which contains a tuple of two sets (matching fmris, nonmatching)css%x|]}t|iVqWdS(N(Rtkeys(RR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s c 3s]xV|]OttifdDttifdDffVqWdS(c3s5x.|]'}|ittfdVqWdS(iN(RNR(RR(R(s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s c3s5x.|]'}|ittfdVqWdS(iN(RNR(RR(R(s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s N(treduceRtuniont intersection(R(t dict_list(Rs;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s (t$_PkgSolver__get_incorp_nonmatch_dictRRRRV(RRRRcRatall_keys((Rs;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__combine_incorpss&  c Cst}x|i|d|D]}|iddjoqn|i||dt\}}}}} } |i| ittf|| idit ||| idit |qWxF|D]>} t t i || dt t i || df|| }|i||d| \}}| i||i|qWt| } t|}nB|d joI|ipt} }n"|i|dt dt \} }t } n|djo+|i|dt d| \} }t } n|djot } |idj o|i}d|_n|i|ijp|i|ijot } t} }qQ|i||d| \} }ntidi|| p| p| o|| | || |fS|idt dt }|djo|i|dt dt \} }t }x)|D]!}||i jo t }PqqW| o)|o"t!t"t#d|ffq+| o*| o"t!t"t#d|ffq+t!t$t#d|ff| n|d jo%|i|dt d| \} }n{| t joLt%|djo"|i||dt \} }nVg} g}xF|D]>}|i||dt \}}| i||i|qW| ot%|djo%t!t&t#d||ffqtg}|D]}||idt dt q~}t!t&t#d||ffn|i|dt d| \} }n"|i|dt d| \} }| p%t!t't#d||ffn%t!t$t#d||ff| dS(svReturn tuple of (disallowed fmri list, allowed fmri list, conditional_list, dependency_type, required)RSRs5.11iRRVRRRRt predicates require-anytparentR}RR+sUnknown dependency type {0}RRs>Package contains 'exclude' dependency {0} on installed packages=Package contains 'exclude' dependency {0} on proposed packagesANo version allowed by 'exclude' dependency {0} could be installedis?All acceptable versions of '{0}' dependency on {1} are obsoletesAAll acceptable versions of '{0}' dependencies on {1} are obsoletes3No version for '{0}' dependency on {1} can be founds9No version matching '{0}' dependency {1} can be installedN((RRRPR,R4RR R%R~RRRRzR9R$RR1R/t_PkgSolver__comb_older_fmrisRRRRRRR)R'RMRORRxRgtget_fmriR,R t_TRIM_INSTALLED_EXCLUDERt_TRIM_DEP_TRIMMEDRt_TRIM_DEP_OBSOLETEt_TRIM_DEP_MISSING(Rtdependency_actiontsourceR}RtdtypeRtfmristrRRftrequiredRRVRt nonmatchingt cond_fmriRaRRtfstrt installedRctsfmris((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__parse_dependencys*                                   /     cCst}|ip|S|o|Sx}|iD]r}xi|i||D]U}|iddjoqJntiii|i djo|i |i PqJqJWq1W|S(sIf we're a child image then we need to relax packages that are dependent upon themselves in the parent image. This is necessary to keep those packages in sync.RSRR( RRR,RRR4tactionsRt DEPEND_SELFRRR1(RRRRRaR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__relax_parent_self_constraineds      c Csg}t|}t}t}x[|oS|i}|i|||\}} |i||i||| |O}q'W|S(s Returns a list of strings describing why fmris cannot be installed, or returns an empty list if installation is possible. (RRt_PkgSolver__do_error_workRR( RRRRRRRRterrorstnewfmris((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__generate_dependency_errorss       cCsN|itjpttdpt|i|iidtdtS(sReturns a list of strings for all FMRIs evaluated by the solver explaining why they were rejected. (All packages found in solver's trim database.)RoRtverbose( RCRBRTRRR&RRR(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRscCst}g}x|i|iD]}|i|dtdtd}|oq n|i|dtdtd}|itdi|i |i |i |d|q W|S(swGenerate list of strings describing why currently installed packages cannot be installed, or empty listR}RVis2No suitable version of installed package {0} foundR( RR,R.RRR$RzRRgR1RR(RRRRaR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__check_installeds    Rc sg|d jo t}ng}tid}x\t|d|D]H}i||d|d|d} | d j o|i| qHqHWgfd} d } x|D]\} } | | joHdt| d}pi|ni|| d qq| | oi| ni| d| d | } qW| o| i| nS( saGiven a list of FMRIs, return indented strings indicating why they were rejected.R1RRtomitRcsoid}ptdjoiqi o"didioqi|dtdidngddd||jodStdid|d|}||gfS|i||pQxN|i |D]*\} } } | t t t fjoPqqW|i|dSng} xt |i |D]\} } } |p!| t t t fjoq_qnt| to!t| di| d}n t| }| id i|||||joq_n|i|| om| tjo`t| dd joI| d\} }| d jo(d |jo||ijoq_qqn|ig}t | D]6}||jo|p ||jo ||qqq~|d d|d|d|}|oC| i|ddd| i|| i|dddq_q_W|| fS(sQreturn a list of strings w/ indents why this fmri is not suitables{0} Reject: sReason:Ns.{indent} {tag} [already rejected; see above]Rttagiis {0} {1} {2}iRt@s RRRs t-i((R9RRRgR%RzRRRR&t_TRIM_INSTALLED_NEWERt_TRIM_PROPOSED_PUBRRRRttupleRRRRR(RRRRRRRRRRtreason_tRRRRRcRaR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __fmri_errors8 sz            !     )   !c Cst}||ijo|i|gd||fSx|i||D]}y |i||dtd}Wnrtj of}|i||i|i d|i t di |i }|g|i|gd|tfSX||O}qIWg|fS(suPrivate helper function used by __generate_dependency_errors to determine why packages were rejected.RRiRs2No suitable version of required package {0} found:(RR&RRRRR RRRRRRgR1( RRRRRRkRRRj((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__do_error_work s&     c Cs|i|||\}}}}}} |djp |djo|i||S|djo)| o | ogS|i||SnD|djo|i|||S|djogS|i||SdS( s+Return clauses to implement this dependencyRs require-anyR+RRRN(soriginsparent(Rt_PkgSolver__gen_require_clausest+_PkgSolver__gen_require_conditional_clausest _PkgSolver__gen_negation_clauses( RRRR}RRtcondRt_reqt_depf((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__gen_dependency_clauses s     c Cst|djogSg}|D]}||i| q#~}t|}g}t|dD]5}t|d|D]}|||||gq{qd~S(sReturn a list of clauses that specifies only one or zero of the fmris in fmri_list may be installed. This prevents multiple versions of the same package being installed at oncei(RR8R?( RRRcRtid_listtlRlRtj((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__gen_highlander_clauses s+ cCs<|i| gg}|D]}||i|q~gS(sjgenerate clause for require dependency: if fmri is installed, one of fmri_list is required(R8(RRtmatching_fmri_listRc((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__gen_require_clauses sc Cskg}|D]}||i|q ~}g}|D]/}||i| g|i| g|q5~S(sGenerate clauses for conditional dependency: if fmri is installed and one of conditional_fmri_list is installed, one of fmri list is required(R8( RRRtconditional_fmri_listRcRatmlistRltc((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt!__gen_require_conditional_clauses s*cCs?|i|}g}|D]}|| |i| gq~S(sw generate clauses for optional, incorporate and exclude dependencies to exclude non-acceptable versions(R8(RRtnon_matching_fmri_listRRcRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__gen_negation_clauses s cCs<|p tdg}|D]}||i|q~gS(s_generate clauses such that at least one of the fmri_list members gets installeds#Empty list of which one is required(RTR8(RRRcR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__gen_one_of_these_clauses scCsyxr|D]j}y3|ii|p t|_n|id7_Wqtj o"ttdi|qXqWdS(s"add list of clause lists to solveris#List of integers, not {0}, expectedN(R7t add_clauseRR;REt TypeErrorRRg(RtclausesR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __addclauses% s c CsFt|}t}t}t}x|o|i|i}|i|||ijoq*n|i|g} | o!|i|jo|i|nx| D]} | i|jp | |joqnt|i| d} t | djo*| d|jo|i| dq9q|i| qWq*W|S(sReturns the list of installed packages that are incorporated by packages, delivering an install-hold, and that do not have an install-hold but incorporate packages. 'install_holds' is a dict of installed package stems indicating the pkg.depend.install-hold delivered by the package that are not being removed. 'pkg_cons' is a dict of installed package fmris and the incorporate constraints they deliver. 'inc_set' is a list of packages that incorporate other packages and deliver install-hold actions. It acts as the starting point where we fan out to find "child" packages that incorporate other packages.ii( RRvRRR.RNR1R!RR( Rt install_holdstpkg_constinc_sett unprocessedRt proc_consRtifmritconstconR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__get_child_holds1 s4        cCsg}x||i|iD]j}xa|ii|tiigd|D];}|idjo%|iddjo|i |qBqBWqWg}x[|D]S}|i |dt d}t |dt d}||jo|i |qqW|S(sbReturn the latest version of installed upgradeable incorporations w/ install holdsRRRspkg.depend.install-holdR}iR\(R,R.RRtRuRvRwRRRzRR$RR(RRtinstalled_incsRaRRRtlatest((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt#__get_installed_upgradeable_incorpst s"  cst}t}h}hxi|i|iD]W}xN|ii|tiigd|D](}|idjog}xm|i dD]\} y|i | } Wn5t j o)t i i| d} | |i | s RRspkg.depend.install-holdRqt.c3sAx:|]3}|ijo|ijo |VqqWdS(N(R1(Rtinc(Rt relaxed_holds(s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pys s (RR,R.RRtRuRvRwRRRPR,R4RR RzRRR1RRt itervaluest startswitht_PkgSolver__get_child_holdsRTt iteritemsR((RRRRtversioned_dependentsRRaRRtflR0RcRRltholdt_[3]Rt child_holdst child_holdt_[4]R1t hold_valueR[t_[5]Rt_[6]Rt_[7]RR ((RRs;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __get_installed_unbound_inc_list st         (R "%  09cCst|i| s iiis(Higher ranked publisher {0} was selecteds1Package publisher is ranked lower in search order(R-RRR R(t_TRIM_PUB_STICKYRRRRR#RNR$t_TRIM_PUB_RANKRR0R~(RR1Rtacceptable_pubsRRt pubs_foundRctptrankedRlRtinst_fRRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__filter_publishers sD   K 1   $cCs|iyt|}Wntj o|g}nX|ttjpt||t|f}x"|D]}|i|i|qoWdS(sQRemove specified fmri(s) from consideration for specified reason.N( RvtiterRR?t _TRIM_MAXRTR)R&R(RRRRRtitttupR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim4 s cCs?td|ff}|i|i|dtdt|dS(s"Trim any fmris older than this ones&Newer version {0} is already installedR}iN(RRRR$R(RRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __trim_olderD scCs|i|}d}x|iiD]}||jor|i|||joZ|djotd}n'td||||i|ff}|i|t|q%q%W|djS(s[Trim packages that don't support image architecture or other image variant.Rs variant.archs*Package doesn't support image architecturesSPackage supports image variant {0}=[{1}] but doesn't support this image's {0} ({2})(RR=RRRt _TRIM_VARIANT(RRtvdRtv((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_nonmatching_variantsJ s%  cCs||ijotS|i|ijoY|iotd|iff}ntd|iff}|i|t|tS|i|i}|i of|i |i joS|iotd|ff}ntd|ff}|i|t |tS|i |i jp|i i |i t i otS|i i |i t ioEt}|iotd|ff}qtd|ff}nBt}|iotd|ff}ntd|ff}|i|||tS( sNPrivate helper function for __trim_nonmatching_parents that trims any pkg_fmri that matches a parent dependency and that is not installed in the parent image, that is from a different publisher than the parent image, or that is a different version than the parent image.s,Package {0} is not installed in global zone.s-Package {0} is not installed in parent image.s9Package in global zone is from a different publisher: {0}s4Package in parent is from a different publisher: {0}s$Global zone has a newer version: {0}s%Parent image has a newer version: {0}s0Global zone has an older version of package: {0}s1Parent image has an older version of package: {0}(RURR1RWt_PkgSolver__is_zoneRRt_TRIM_PARENT_MISSINGR$R0t_TRIM_PARENT_PUBR~RbRoRTt_TRIM_PARENT_NEWERt_TRIM_PARENT_OLDER(Rtpkg_fmriRRtpfR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_nonmatching_parents1_ sL               c Cs|ipt|iptS|o||ijotStg}|i||D]J}|iddjo0|idD] }|t i i |dqqYqY~}|ptSt}xT|D]L}|} |i t i iijo |} n|i|| p t}qqW|S(snTrim any pkg_fmri that contains a parent dependency that is not satisfied by the parent image.RSRRs5.11(R0RTRRR,RRRRR4RR R1RRRt%_PkgSolver__trim_nonmatching_parents1R$( RR<RRRcRRatpkg_depstallowedR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_nonmatching_parents s, < c Cs)x"|i||D]}|iddjoqntii|idd}|iiddidjo|iidoD|i i ||i\}}|p|i |t |t Sqn|idjojtiiitid t d td t} tg} | iD]} | | i| fq~ |_n|ii|i} t} td |ff}nN|o|i|i} n|ii|i} t} td |ff}| p:|i p/|i| ijp| ii|itioqn|i || |t SWtS(sxTrim any fmri that contains a origin dependency that is not satisfied by the current image or root-imageRSRRs5.11s root-imageRRssfeature/firmware/tallow_ondisk_upgradetuser_provided_dirt should_existsDInstalled version in root image is too old for origin dependency {0}sNInstalled version in image being upgraded is too old for origin dependency {0}N(RRR4RR RNRzR1RRXtcheck_firmwareRt_TRIM_FIRMWARER$RLR9tclienttimagetImagetmisctliverootRRVtgen_installed_pkgst_TRIM_INSTALLED_ROOT_ORIGINRR(t_TRIM_INSTALLED_ORIGINR~RbRT(RRRRRRtreq_fmritfw_okRtimgRcRaRR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_nonmatching_origins sZ"        3        cCs|i|ttddS(s+Indicate given package FMRI is unsupported.s/Package contains invalid or unsupported actionsN(Rt_TRIM_UNSUPPORTEDR(RR((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__trim_unsupported s cCs3g}|D]!}||ijo ||q q ~S(s9Return fmri_list trimmed of any fmris in self.__trim_dict(R&(RRRcRa((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt__dotrim s cCs |idj S(s2Return True if this image is a linked image child.N(RUR9(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __is_child scCs*d|ijo|iddjStSdS(s(Return True if image is a nonglobal zonesvariant.opensolaris.zonet nonglobalN(R=R$(R((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyt __is_zone s (^RRRRRnRRvR9R$RRtRRRRRRRRRRRRRRRR)RRRR)RRRRR6RRR8R7RORRRiRjRSRRR}RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRMRRRR?RRRyRRR7(((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyRqs k  &     39  +  )  K  K I $  ,     8 R          9       @m      C  e  @    > )E  (?RRRut pkg.actionsR4t pkg.catalogRutpkg.client.api_errorsRHRtpkg.client.imagetpkg.fmritpkg.miscRKt pkg.solvert pkg.versionR~t collectionsRt itertoolsRtpkg.client.debugvaluesRtpkg.client.firmwareRtpkg.client.pkgdefsRRRRRRBRReRfRRRRGRRRRRORNR8R:R;R9RRRR&R%RRTR3RR.R R tobjectR(((s;/usr/lib/python2.6/vendor-packages/pkg/client/pkg_solver.pyts\