Avatar for the Jij-Inc user
Jij-Inc
ommx
BlogDocsChangelog

Performance History

Latest Results

Make solver adapter APIs preparation-aware (#1166) ## Summary - Make `SolverAdapter.solve()` and `SamplerAdapter.sample()` copy the supplied `Instance`, apply the Adapter's recommended Preparation, execute through the public exact-input API, and leave the caller's object unchanged. - Add `solve_without_preparation()` and `sample_without_preparation()` for callers that own Preparation and for custom Adapter implementations, without accepting untyped catch-all options. - Update HiGHS, Python-MIP, PySCIPOpt, and OpenJij to the two-layer API. OpenJij keeps `initial_state` on its exact-input constructor and preparation-free methods because it refers to prepared solver variables. - Omit HiGHS and Python-MIP dual values when output-objective projection is active, and document that OpenJij `SampleSet` objectives report the original objective rather than penalty energy in v3. - Update the English and Japanese migration guidance, Adapter tutorial, special-constraint guide, OpenJij examples, release notes, generated stub, and API reference data. ## User impact Most callers can pass an unprepared `Instance` directly to `solve()` or `sample()`. Applications that customize Preparation should prepare their `Instance` in place and call the corresponding `*_without_preparation()` API. Custom Adapters must implement that exact-input method. A concrete Adapter may give the easy and preparation-free methods different explicitly typed option sets when an option depends on the exact prepared input and no transport through Preparation is defined.
main
58 minutes ago
Make solver adapter APIs preparation-aware (#1166) ## Summary - Make `SolverAdapter.solve()` and `SamplerAdapter.sample()` copy the supplied `Instance`, apply the Adapter's recommended Preparation, execute through the public exact-input API, and leave the caller's object unchanged. - Add `solve_without_preparation()` and `sample_without_preparation()` for callers that own Preparation and for custom Adapter implementations, without accepting untyped catch-all options. - Update HiGHS, Python-MIP, PySCIPOpt, and OpenJij to the two-layer API. OpenJij keeps `initial_state` on its exact-input constructor and preparation-free methods because it refers to prepared solver variables. - Omit HiGHS and Python-MIP dual values when output-objective projection is active, and document that OpenJij `SampleSet` objectives report the original objective rather than penalty energy in v3. - Update the English and Japanese migration guidance, Adapter tutorial, special-constraint guide, OpenJij examples, release notes, generated stub, and API reference data. ## User impact Most callers can pass an unprepared `Instance` directly to `solve()` or `sample()`. Applications that customize Preparation should prepare their `Instance` in place and call the corresponding `*_without_preparation()` API. Custom Adapters must implement that exact-input method. A concrete Adapter may give the easy and preparation-free methods different explicitly typed option sets when an option depends on the exact prepared input and no transport through Preparation is defined.
main
58 minutes ago
Make solver adapter APIs preparation-aware (#1166) ## Summary - Make `SolverAdapter.solve()` and `SamplerAdapter.sample()` copy the supplied `Instance`, apply the Adapter's recommended Preparation, execute through the public exact-input API, and leave the caller's object unchanged. - Add `solve_without_preparation()` and `sample_without_preparation()` for callers that own Preparation and for custom Adapter implementations, without accepting untyped catch-all options. - Update HiGHS, Python-MIP, PySCIPOpt, and OpenJij to the two-layer API. OpenJij keeps `initial_state` on its exact-input constructor and preparation-free methods because it refers to prepared solver variables. - Omit HiGHS and Python-MIP dual values when output-objective projection is active, and document that OpenJij `SampleSet` objectives report the original objective rather than penalty energy in v3. - Update the English and Japanese migration guidance, Adapter tutorial, special-constraint guide, OpenJij examples, release notes, generated stub, and API reference data. ## User impact Most callers can pass an unprepared `Instance` directly to `solve()` or `sample()`. Applications that customize Preparation should prepare their `Instance` in place and call the corresponding `*_without_preparation()` API. Custom Adapters must implement that exact-input method. A concrete Adapter may give the easy and preparation-free methods different explicitly typed option sets when an option depends on the exact prepared input and no transport through Preparation is defined.
main
60 minutes ago
Add output objective semantics to Instance and ParametricInstance (#1167) ## Summary - Add a v2 `OutputObjective` to `Instance` and `ParametricInstance` so the active solver formulation can differ from the objective reported by `evaluate()` and `evaluate_samples()`. Parameter materialization and state reconstruction preserve that output meaning; v1 serialization rejects models that it cannot represent losslessly. - Make objective conversion an explicit Preparation phase, add canonical QUBO/HUBO input classes and policy factories, and define `to_qubo()` / `to_hubo()` as in-place Preparation followed by format extraction. Whole-problem `as_minimization_problem()` / `as_maximization_problem()` conversions keep their original meaning. - Map solver optimality through the output-objective contract in the HiGHS, PySCIPOpt, and Python-MIP adapters. A finite-penalty optimum remains `Optimality.Unspecified` when it does not prove optimality for the reported objective. ## Behavior change QUBO/HUBO conversion now keeps the prepared minimization energy as the active `Instance`, while evaluated results retain the input instance's output semantics: ```python from ommx import DecisionVariable, Instance, Sense x = DecisionVariable.binary(0) instance = Instance.from_components( sense=Sense.Maximize, objective=x, decision_variables=[x], constraints={0: x == 1}, ) qubo, offset = instance.to_qubo(uniform_penalty_weight=2.0) state = {0: 0.0} # Solver-facing energy: minimize -x + 2 (x - 1)^2. assert instance.sense == Sense.Minimize assert instance.objective.evaluate(state) == 2.0 # User-facing output: the input Maximize / x objective. solution = instance.evaluate(state) sample_set = instance.evaluate_samples({0: state}) assert solution.sense == Sense.Maximize assert solution.objective == 0.0 assert sample_set.sense == Sense.Maximize assert sample_set.objectives[0] == 0.0 ``` This intentionally corrects the Python SDK v2 behavior, which restored the active sense but evaluated the final penalized energy. Returned QUBO/HUBO coefficients retain their existing meaning. The equivalent editable workflow is `prepare(InstanceClass.qubo(), PreparationPolicy.for_qubo(...))` followed by `as_qubo_format()`; HUBO has matching helpers.
main
1 day ago
chore(deps): Bump the dependencies group with 2 updates (#1164) Bumps the dependencies group with 2 updates: [futures-util](https://github.com/rust-lang/futures-rs) and [thiserror](https://github.com/dtolnay/thiserror). Updates `futures-util` from 0.3.33 to 0.3.34 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/releases">futures-util's releases</a>.</em></p> <blockquote> <h2>0.3.34</h2> <ul> <li>Preserve cloned waker identity. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/3032">#3032</a>)</li> <li>Updato <code>syn</code> to 3. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/3028">#3028</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md">futures-util's changelog</a>.</em></p> <blockquote> <h1>0.3.34 - 2026-08-11</h1> <ul> <li>Preserve cloned waker identity. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/3032">#3032</a>)</li> <li>Updato <code>syn</code> to 3. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/3028">#3028</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/futures-rs/commit/705e6b5c0f06535b1aac1cb1989a172b3d45be8c"><code>705e6b5</code></a> Release 0.3.34</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/616dac7bf944ff9876b7f8b77b37c6224cbbb506"><code>616dac7</code></a> compat: Inline RawWaker clone function</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/41763693ee6400e2a7931530790af6e1746eb1c6"><code>4176369</code></a> Inline remaining RawWaker clone functions</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/f17a8957d9a25a2dd3c95b43f1c6caa108df6bcc"><code>f17a895</code></a> Fix cloned FuturesUnordered waker identity</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/51d62ada9bb8eab06339475e0f1b19cfa41fb2d7"><code>51d62ad</code></a> macro: bump <code>syn</code> to v3 (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/3028">#3028</a>)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/9e26177cf01155d57917ee943246d0c97843deed"><code>9e26177</code></a> ci: Reduce timeout-minutes</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/b2d098331763fca9b0665f80bb31a66e3112a2cf"><code>b2d0983</code></a> tsan: Enable Adaptive Delay</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/f733d0ea9fed49263203ae0a7cb6beb5fe1a04c4"><code>f733d0e</code></a> Miri: Ignore compat tests</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/e5def2f60c7eb1e8e6b76da540e148cc7638b115"><code>e5def2f</code></a> Rename default branch to main</li> <li>See full diff in <a href="https://github.com/rust-lang/futures-rs/compare/0.3.33...0.3.34">compare view</a></li> </ul> </details> <br /> Updates `thiserror` from 2.0.19 to 2.0.20 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/thiserror/releases">thiserror's releases</a>.</em></p> <blockquote> <h2>2.0.20</h2> <ul> <li>Suppress redundant_field_names clippy lint in generated code (<a href="https://redirect.github.com/dtolnay/thiserror/issues/454">#454</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dtolnay/thiserror/commit/b1d5db5e039275d95bf7536a2b2192aeb4dc28bf"><code>b1d5db5</code></a> Release 2.0.20</li> <li><a href="https://github.com/dtolnay/thiserror/commit/c4c3ebd337911af7bad544a9bce03a04bf465384"><code>c4c3ebd</code></a> Merge pull request <a href="https://redirect.github.com/dtolnay/thiserror/issues/454">#454</a> from dtolnay/clippy</li> <li><a href="https://github.com/dtolnay/thiserror/commit/2266152b163168df75a3b091208b86dd05485e66"><code>2266152</code></a> Suppress redundant_field_names clippy lint</li> <li><a href="https://github.com/dtolnay/thiserror/commit/2901cfdc9411e883c9709c5a3adcf1ab2e3651ff"><code>2901cfd</code></a> Raise minimum tested compiler to rust 1.88</li> <li><a href="https://github.com/dtolnay/thiserror/commit/aa9d91f75302025e0c1d4c535d84a5bfdad62508"><code>aa9d91f</code></a> Update ui tests for version 2.0.19</li> <li>See full diff in <a href="https://github.com/dtolnay/thiserror/compare/2.0.19...2.0.20">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
main
7 days ago
chore(deps): Bump astral-sh/setup-uv from 9.0.0 to 10.0.1 in the dependencies group (#1165) Bumps the dependencies group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv). Updates `astral-sh/setup-uv` from 9.0.0 to 10.0.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/setup-uv/releases">astral-sh/setup-uv's releases</a>.</em></p> <blockquote> <h2>v10.0.1 🌈 Tolerate transient manifest timeouts</h2> <h2>Changes</h2> <p>Thank you <a href="https://github.com/arguile"><code>@​arguile</code></a>- for making this action more resilient.</p> <h2>πŸ› Bug fixes</h2> <ul> <li>Tolerate transient manifest timeouts <a href="https://github.com/arguile"><code>@​arguile</code></a>- (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1016">#1016</a>)</li> </ul> <h2>🧰 Maintenance</h2> <ul> <li>chore: update known checksums for 0.12.4 @<a href="https://github.com/apps/github-actions">github-actions[bot]</a> (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1017">#1017</a>)</li> </ul> <h2>πŸ“š Documentation</h2> <ul> <li>docs: update version references to v10.0.0 @<a href="https://github.com/apps/github-actions">github-actions[bot]</a> (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1014">#1014</a>)</li> </ul> <h2>v10.0.0 🌈 Disable automatic caching for sensitive events and new QOL features</h2> <h2>Changes</h2> <p>Another breaking release, directly after v9.0.0 but we think the added security justifies that.</p> <h3>Extra security by default</h3> <p>If you use the default <code>enable-cache: auto</code> this will now <strong>DISABLE THE CACHE</strong> to protect against cache poisoning for the following events:</p> <ul> <li><code>pull_request_target</code></li> <li><code>workflow_run</code></li> <li><code>release</code></li> </ul> <p>You can read the full reasoning in <a href="https://redirect.github.com/astral-sh/setup-uv/issues/984">astral-sh/setup-uv#984</a></p> <h3><code>version: latest-known</code></h3> <pre lang="yaml"><code>- name: Install the latest version of uv known to setup-uv uses: astral-sh/setup-uv@v10.0.0 with: version: &quot;latest-known&quot; </code></pre> <p>This will now install the latest version with a checksum that is known by this action. The <a href="https://github.com/astral-sh/setup-uv/blob/4f6036f71cec78afb113b323f220c9185d983c12/src/download/checksum/known-checksums.ts">known <code>uv</code> checksums</a> are automatically updated but will take a release of this action to take effect. You won't be always using the latest &amp; greatest but you will have an extra level of security.</p> <h3>Read python version from <code>.tool-versions</code></h3> <pre lang="yaml"><code>- name: Install uv based on the version defined in .tool-versions and also set python uses: astral-sh/setup-uv@v10.0.0 with: version-file: &quot;pyproject.toml&quot; &lt;/tr&gt;&lt;/table&gt; </code></pre> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/setup-uv/commit/20cfd1bf945f4377ade1205e4dbc17946fc9a30d"><code>20cfd1b</code></a> chore: update known checksums for 0.12.4 (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1017">#1017</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/d73a0cab66a532d7afa440d9df4a67ea9fe65a30"><code>d73a0ca</code></a> Tolerate transient manifest timeouts (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1016">#1016</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/ae3b92d1bdb308a10adfe7b8f408e5cc8c30f3f6"><code>ae3b92d</code></a> docs: update version references to v10.0.0 (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1014">#1014</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d"><code>ae62891</code></a> chore(deps): roll up Dependabot updates (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1013">#1013</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/f9cdb47d487aee2be8925d1e57290177ad9e1ac2"><code>f9cdb47</code></a> Reject paths in .tool-versions (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1007">#1007</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/4f6036f71cec78afb113b323f220c9185d983c12"><code>4f6036f</code></a> Require pull requests for Dependabot rollups (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1005">#1005</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/8d6402c9b71205b2d8d0b82de531d8fed8430182"><code>8d6402c</code></a> chore(deps): roll up Dependabot updates (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/1004">#1004</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/46f427bd47c794e99536b75ffaa9f27602425027"><code>46f427b</code></a> Read Python version from .tool-versions (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/996">#996</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/8ed89c51143f65ea13eaba62db51dbb8ea52d0a3"><code>8ed89c5</code></a> ci: pin Alpine container image (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/995">#995</a>)</li> <li><a href="https://github.com/astral-sh/setup-uv/commit/8473c7fea42cdfd540f4b01317a17ac5f54126ae"><code>8473c7f</code></a> chore(deps): roll up Dependabot updates (<a href="https://redirect.github.com/astral-sh/setup-uv/issues/994">#994</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/setup-uv/compare/v9.0.0...v10.0.1">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astral-sh/setup-uv&package-manager=github_actions&previous-version=9.0.0&new-version=10.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
main
7 days ago
Define adapter applicability solely by INPUT_CLASS (#1163) ## Summary - make `INPUT_CLASS` membership the sole definition of adapter applicability - return `InstanceClassMembershipReport` directly and remove the redundant `AdapterApplicabilityReport` wrapper - remove the adapter-owned precondition hook and violation types - move OpenJij signed-ID and finite-coefficient validation to solver-input conversion - retain converter-local representation guards while removing redundant adapter-level preflight checks - align adapter tests and English/Japanese documentation with the responsibility boundary ## Rationale Adapter-owned acceptance checks can duplicate conditions already expressed by `INPUT_CLASS` and drift from its semantics. Applicability is therefore exactly input-class membership. Conversion helpers and backends may still reject representations or implementation limits while solver input is built, but those failures are conversion or backend errors rather than a second applicability result. ## Impact `SolverAdapter.check_applicability()` and `require_applicable()` now return `InstanceClassMembershipReport` directly. Callers should use `report.is_member` and access `matching_clauses` or `clause_reports` without an `input_membership` wrapper. `AdapterNotApplicableError.report` holds the same membership report, while the adapter identity is available as `error.adapter`. The public `AdapterApplicabilityReport`, `AdapterPreconditionViolation`, `ConstraintRef`, `_check_preconditions`, `preconditions_checked`, and `precondition_violations` surfaces are removed. Adapter implementations should express accepted-model semantics in `INPUT_CLASS` and keep defensive representation or backend validation at the solver-input conversion boundary.
main
8 days ago

Latest Branches

CodSpeed Performance Gauge
N/A
Add benchmarks and fix clone overhead for reduce_binary_power and log_encode#1047
2 months ago
546b615
claude/sleepy-wilbur-9b1170
CodSpeed Performance Gauge
N/A
2 months ago
3bb752e
codex/slim-benchmark-workflow
CodSpeed Performance Gauge
N/A
2 months ago
fa18b17
codex/instance-into-partial-evaluated
Β© 2026 CodSpeed Technology
Home Terms Privacy Docs