Skip to content

Python-side integration: add rer_solver fallback to rez Resolver #28

@doubleailes

Description

@doubleailes

Problem

Once rer_solver Python module exists (#5), rez needs to actually call it.

Proposed Solution

Modify rez's src/rez/resolver.py:

try:
    import rer_solver
    _RUST_AVAILABLE = True
except ImportError:
    _RUST_AVAILABLE = False
 
class Resolver:
    def _solve_rust(self):
        result = rer_solver.solve(
            [str(r) for r in self.package_requests],
            [str(p) for p in self.package_paths],
            filters=self._serialize_filters(),
            max_iterations=10000,
        )
        if result.status == "solved":
            return self._map_rust_result(result)
        elif result.status == "failed":
            # Fall back to Python solver for better error reporting
            return self._solve_python()
        else:
            raise ResolveError(result.failure_description)
 
    def _map_rust_result(self, result):
        """Map (name, version, variant_index) tuples back to rez PackageVariant objects."""
        ...
 
    def _serialize_filters(self):
        """Convert PackageFilterList to list of (type, arg) tuples for Rust."""
        ...

Gate behind config.use_rust_solver (default False) and REZ_USE_RUST_SOLVER=1 env var.

Acceptance Criteria

  • rez-env works with REZ_USE_RUST_SOLVER=1 for basic resolves
  • Falls back to Python solver when Rust module isn't installed
  • Falls back to Python solver on Rust solve failure (for better error messages)
  • rez-env -v shows whether Rust solver was used
  • Add use_rust_solver to rezconfig.py with default False

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions