Changelog

v1.7.1 (Sep. 10, 2026)

New features and support

  • Add where() function.

  • Add set_printoptions() to set the number of terms and significant digits shown.

  • Add the alpha parameter to QAOA and RQAOA, which makes the cost the Conditional Value-at-Risk (CVaR) of the measured energies.

  • Add objective_format to FixstarsClient, AmplifyAEClient, and ToshibaSQBM2Client. The default Auto sends whichever of a dense matrix and a list of terms is smaller. Give Dense to keep the earlier behavior.

  • Add __repr__ and __str__ to AcceptableDegrees, VariableGenerator, split, and the key, value, and item views of Values and of the intermediate mapping. Each of them showed only its address before.

  • Support OQTOPUS Cloud with OqtopusClient.

  • Support Pyodide with a WebAssembly wheel that micropip installs and a browser runs. Only the formulation API and AmplifyAEClient work there, and each wheel fits one version of Pyodide.

  • Support the dense coupling mode of Amplify AE for a dense quadratic Poly, which needed a Matrix before.

  • Support file output for a model whose objective function is a Matrix.

Changes of behavior

  • Change objective to always return a Poly. A model now copies the Matrix that you give it, and it accepts the addition or the subtraction of a Poly.

  • Change a model to drop the variables that a Matrix only declares. variables lists fewer variables, and the problem that the client sends becomes smaller.

  • Change input_matrix and logical_matrix to raise a NotImplementedError. Use input_poly and logical_model_poly instead.

  • Change AmplifyAEClient to warn when you give a weight to a constraint and solve with the default Constraint solver. Amplify AE sets the weight itself, so the tutorials and the examples no longer give one.

  • Change a bound that narrows a Binary or an Ising variable to raise a ValueError. Amplify dropped such a bound before, so it solved another model than the one you described. Use equal_to() to fix a variable to one value.

  • Change a lower bound of positive infinity, or an upper bound of negative infinity, to raise a ValueError, because such a bound leaves no value. Amplify read it as “no bound” before, which widened the variable.

  • Change load_lp() and load_qplib() to give a constraint for a bound that narrows a Binary variable, such as x <= 0. Amplify dropped such a bound in silence before. Give the constraint enough weight, because a solver turns it into a penalty.

  • Change load_qplib() to read an integer variable whose bounds are 0 and 1 as a Binary variable, because QPLIB writes a binary variable in that form. Such a model held integer variables and no binary variable before.

  • Change save_qplib() to warn when a variable bound or a constraint bound reaches an absolute value of 1e+20. QPLIB reads that value as infinity, so loading the file back drops the bound, or fails when the sign of the bound leaves nothing that satisfies it.

  • Change save_lp() and save_qplib() to raise a ValueError for a coefficient or a constraint bound that is NaN or infinity. Amplify wrote nan or inf into the file before, and neither format gives those a spelling.

  • Change load_lp() and load_qplib() to raise a RuntimeError for a value that is not a number, such as nan. load_qplib() read such a value as zero in silence before, and load_lp() gave a model that no solver accepts.

  • Change an integer parameter to raise a TypeError for a value that loses precision, such as numpy.float64(3.0). It truncated such a value in silence before, and a NumPy integer, such as numpy.int64(3), still works.

  • Change set_num_threads() to limit the logical cores that Amplify uses, the parallel formulation included. Amplify caps a value that is larger than the number of the cores of the hardware.

  • Change set_num_threads() and set_seed() to take a named argument, num_threads and seed. A positional call still works.

  • Change amplify.Dim0 through amplify.Dim4 from classes to aliases of tuple, and add N for one axis. PolyArray[Dim2] still works, and only isinstance with one of these names stops.

  • Change the type stub to give the dimension of the result of an index, of a matrix product, and of an elementwise operation. A PolyArray that you build from a NumPy array or a list takes PolyArray[Dim], which no PolyArray[Dim2] accepts.

  • Change the D-Wave solver names to agree with the D-Wave API. A solver name no longer holds the system revision, so Advantage_system4.1 is now Advantage_system4.

  • Remove amplify.NECVA2Client and amplify.client.NECClient. NEC Vector Annealing (VA) Service 2.0 ended on April 1, 2025, so the client reaches no machine.

  • Raise a ValueError when you solve a model whose objective function holds no variable.

Performance

  • Improve performance of model formulation, including einsum(), one_hot(), and to_unconstrained_poly(). The TSP formulation is now up to 30 times faster than v1.0. See Formulation Benchmarks.

  • Improve memory usage of model formulation. The TSP formulation now needs approximately one-fourth to one-fifth of the memory of v1.0 for a problem with more than 10,000 variables.

  • Improve performance of to_intermediate_model() for a model with many integer or real variables, or with many higher-order terms.

  • Improve performance of load_qplib(). A QPLIB file of 230 thousand terms now loads about 1.2 times faster.

  • Update save_lp() and save_qplib() to raise a RuntimeError for invalid variable names or constraint labels, and emit warnings for ignored constraint weights or duplicate variable names.

Platform and dependencies

  • Update the D-Wave solver graphs for Advantage_system4, Advantage_system6, and Advantage2_system1.

  • Change supported macOS to Sonoma or later.

  • Update the required version of typing_extensions to >= 4.16.0, and of amplify-quantum to >= 1.3.0.

Documentation

  • Publish the documentation in Markdown for AI agents. Every page has a Markdown copy next to it, and each language also carries llms.txt and llms-full.txt.

  • Add an English version of Introduction to the latest version, which introduces the latest Amplify AE.

  • Add a description of every operator of Poly, PolyArray, and ConstraintList to the API reference and to help(), and remove the signatures of a PolyArray operation that no call could reach.

  • Add a description of the settings that every client carries, such as url, token, and parameters, and of each member of PenaltyFormulation.

Fixes

  • Fix: variables and get_variables() now list every variable of a Matrix objective whose first variable index is not zero.

  • Fix: load_lp() and save_lp() now support non-ASCII characters, such as Japanese, and a variable name of up to 255 characters, the indices included.

  • Fix: load_lp() now reads a file that has no objective section, and gives a model whose objective is 0. It raised an error before.

  • Fix: load_lp() now takes the type of a variable from the last variable type section that names it, as the LP format defines. A variable in both Binary and Generals became Binary before.

  • Fix: load_lp() now reads a variable name that starts with the spelling of a number, such as info or nano. Such a file failed to load before.

  • Fix: load_lp() now reads a bound that fixes a variable to one value, such as x = 3. Such a file failed to load before.

  • Fix: load_lp() now reads a file that has no End line, which the LP format allows. Such a file failed to load before.

  • Fix: save_lp() now raises a RuntimeError for a variable named inf, infinity, or nan. It wrote a file that no reader can load before.

  • Fix: save_lp() now keeps the exact value of every coefficient and bound. It wrote 10 significant digits before, so 0.1234567890123456 came back as 0.123456789.

  • Fix: save_lp() now writes -inf for a variable that has no lower bound. The LP default of a lower bound is 0, so x <= 3 alone gave the file another variable than the one you saved.

  • Fix: save_lp() now writes the bound of a Binary variable as 0 <= q <= 1. It wrote q free before, so the file gave a variable with no bound instead of a Binary one.

  • Fix: save_lp() now writes a constraint that holds a constant with the right sign. x + 5 <= 10 became x <= 15 in the file, which is another constraint than the one you gave.

  • Fix: save_lp() now writes every line within the 999 characters that the LP format allows, and it never breaks a bound over two lines. A file that held a long name failed to load.

  • Fix: load_qplib() now drops a constraint bound that reaches the infinity value of the file, as the QPLIB format defines. Such a bound became a real constraint before. A bound whose sign leaves nothing that satisfies the constraint now raises.

  • Fix: save_qplib() now keeps the exact value of every coefficient and bound. It wrote 6 significant digits before, so 0.1234567890123456 came back as 0.123457.

  • Fix: save_qplib() now writes a two-sided constraint that holds a constant with the right value on each side. 1 <= x + 5 <= 10 became 1 <= x <= 5 in the file, which is another constraint than the one you gave.

  • Fix: save_qplib() now writes the two indices of a quadratic term in the lower triangle, as the QPLIB format defines. Another reader could not load the file before.

  • Fix: save_qplib() now accepts a name that holds !, %, or # after its first character. It raised a RuntimeError for every such name before.

  • Fix: A model with an integer variable whose range exceeds 2147483647 now converts to the correct binary encoding. The solution of such a model did not solve the model that you gave before. A range that no encoding can build now raises an OverflowError.

  • Fix: to_intermediate_model() now gives a solution that is optimal for the input model when the quadratization method is IshikawaKZFD and the objective function holds Ising variables of degree three or higher.

  • Fix: to_intermediate_model() now raises a ValueError when the objective function and the constraints need different variable types. It returned a model of the forbidden variable type before.

  • Fix: An inequality constraint now gives a penalty function when Amplify cannot estimate the range of its left side, such as a left side that holds an unbounded variable. The penalty held NaN coefficients before, or it was 0, which removed the constraint from the model.

  • Fix: A constraint whose left side holds a squared term, such as a * a <= 3 with a in [-5, 5], now stays in the model. Amplify squared the two ends of the range only, so the constraint looked infeasible and its penalty became 0, or negative for an equality.

  • Fix: &=, |=, and ^= now update a PolyArray in place. The name became None before when the right side was a PolyArray, and it took a copy otherwise.

  • Fix: roll() now returns a copy of an array that holds no element. It ended the process before.

  • Fix: The display of a PolyArray no longer puts a space at the end of a wrapped line.

  • Fix: amplify no longer gives the names that its own implementation imports, such as amplify.sys and amplify.Never. from amplify import * gave them away, and none of them was ever documented.

  • Fix: The type stub of sum() and sum() now accepts axis for a zero-dimensional PolyArray. The call always worked, and only the stub rejected it.

  • Fix: The type stub of clamp() now names the second parameter bounds when you give axis for a PolyArray. A call with that keyword failed the type check although it always worked.

  • Fix: The type stub of the type parameter of HitachiClient no longer accepts None. The parameter never took None, and such an assignment raised a TypeError.

  • Fix: repr() of a Result that holds no solution now names the class, as it does for a result that holds one. It gave a text that began with { and ended with an unmatched ) before.

v1.6.0 (May. 21, 2026)

  • Support quantum computers via the Amplify Quantum extension.

  • Support Ubuntu 26.04.

  • Support D-Wave Advantage2_system1.

  • Fix: Correct response data not being written to file with write_response_data enabled in specific cases.

v1.6.1 (Jun. 09, 2026)
  • Add dwave, quantum, and full installation options, replacing the extra option with full.

  • Fix: embed() now works without raising a ValueError in all environments.

v1.6.2 (Jul. 10, 2026)
  • Deprecate amplify.NECVA2Client. NEC Vector Annealing (VA) Service 2.0 ended on April 1, 2025, so the client reaches no machine.

  • Improve performance of to_unconstrained_poly().

  • Fix: Work around a potential dependency resolution error when installing Amplify Quantum.

  • Fix: parallel_solve() now works correctly with multiple client arguments.

  • Fix: __getitem__() now works correctly when a slice results in zero length.

v1.6.3 (Aug. 20, 2026)
  • Support Amplify Quantum v1.3.

  • Improve performance of get_variables().

  • General security hardening and robustness improvements.

  • Fix: to_unconstrained_poly() now works correctly with inequality constraints.

v1.5.0 (Apr. 05, 2026)

  • Overhaul the docstrings.

  • Support dense_objective endpoint of Amplify AE v1.1.

  • Support Gurobi Optimizer 12.0.3 on GurobiClient.

  • Change default degree reduction algorithm to Substitute from IshikawaKZFD.

v1.4.0 (Sep. 19, 2025)

  • Support Amplify Annealing Engine v1.0 on AmplifyAEClient.

  • Support D-Wave Advantage2_system1.6.

  • Deprecate D-Wave Advantage2_prototype2.6.

  • Rename AmplifyClient to BaseClient.

  • Support D-Wave solver identification updates and update the dependent dwave-system package to v1.33.0.

  • Update type hints for PolyArray and sum().

  • Fix: Substitute method for high-order polynomials now correctly reduces the degree to 2.

  • Fix: einsum() now correctly handles integer NumPy arrays.

  • Fix: FujitsuDA4Client now correctly handles inequality constraints without constants.

v1.4.1 (Oct 16, 2025)
  • Support Python 3.14, and Python 3.9 is no longer supported.

  • Fix: Resolved error of transpose operation on an unassigned PolyArray class instance.

v1.4.2 (Feb. 14, 2026)
  • Support Gurobi Optimizer 12.0.3 on GurobiClient.

  • Support D-Wave Advantage2_system1.11.

  • Fix: Update type hints for sum().

v1.3.0 (Nov. 01, 2024)

v1.3.1 (Nov. 18, 2024)

v1.2.0 (July 23, 2024)

v1.2.1 (Aug. 06, 2024)
  • Change supported macOS to Monterey or later.

v1.1.0 (May 13, 2024)

  • Support NEC Vector Annealing Service 2.0 on amplify.NECVA2Client.

  • Improve the efficiency of the Substitute quadratization method and significantly reduce the number of auxiliary variables.

  • Add support for Linux ARM64.

v1.1.1 (May 28, 2024)
  • Fix type hints for Result class.

v1.0.0 (Jan. 27, 2024)

  • Release version 1.0.

v1.0.2 (Feb. 20, 2024)
  • Add documents in English.

  • Fix redundant deprecation warnings.

  • Add client.ocean namespace for legacy compatibility.

v1.0.3 (Mar. 01, 2024)
  • Support D-Wave Advantage_system6.4.

  • Support D-Wave Advantage2_prototype2.2.

v1.0.4 (Mar. 15, 2024)
  • Fix a problem where SQBM request data is not sent correctly on Windows.

v1.0.5 (Mar. 19, 2024)
  • Support D-Wave Advantage2_prototype2.3.