Skip to content
11 changes: 9 additions & 2 deletions pumpkin-solver-py/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ use pumpkin_solver::options::SolverOptions;
use pumpkin_solver::predicate;
use pumpkin_solver::proof::ConstraintTag;
use pumpkin_solver::proof::ProofLog;
use pumpkin_solver::rand::SeedableRng;
use pumpkin_solver::rand::rngs::SmallRng;
use pumpkin_solver::results::SolutionReference;
use pumpkin_solver::termination::Indefinite;
use pumpkin_solver::termination::TerminationCondition;
Expand Down Expand Up @@ -62,15 +64,20 @@ impl StorageKey for Tag {
#[pymethods]
impl Model {
#[new]
#[pyo3(signature = (proof=None))]
fn new(proof: Option<PathBuf>) -> PyResult<Model> {
#[pyo3(signature = (proof=None, seed=None))]
fn new(proof: Option<PathBuf>, seed: Option<u64>) -> PyResult<Model> {
let proof_log = proof
.map(|path| ProofLog::cp(&path, true))
.transpose()
.map(|proof| proof.unwrap_or_default())?;

let options = SolverOptions {
proof_log,
// TODO: The solver options should probably be refactored to accept a seed instead the
// the number generator instance. Now we cannot have a solver default that is shared
// between the rust and python interfaces without duplicating the default seed as done
// now.
random_generator: SmallRng::seed_from_u64(seed.unwrap_or(42)),
..Default::default()
};

Expand Down