CHANGELOG
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
Removed
BREAKING: The project no longer supports Python 3.7. This change will make it easier to manage MiniZinc Python’s build system.
Changed
Minimum supported version of MiniZinc has increased from 2.5.4 to 2.6.0.
Instance.solutions
is now able to use theintermediate_solutions
flag correctly and will only yield a single solution when it is set toFalse
.helpers.check_solution
now includes an optional time limit flag. If the time limit is exceeded, then aTimeoutError
exception will be raised.helpers.check_solution
will no longer capture MiniZinc exceptions. Capturing these exceptions sometimes hid problems.The
timeout
parameter has been renamed totime_limit
inInstance.solve
,Instance.solve_async
, andInstance.solutions
. Thetimeout
parameter is still accepted, but will add aDeprecationWarning
and will be removed in future versions.
Fixed
Fix problem where some exceptions when creating processes where hidden and would then cause errors where the
proc
variable did not exist.
0.9.0 - 2023-04-04
Added
Add support for MiniZinc tuple and record types.
Changed
Minimum supported version of MiniZinc has increased from 2.5.0 to 2.5.4.
Fixed
Ensure time events send using the JSON stream are parsed as
timedelta
objects.Pass JSON definitions in using JSON instead of generated DZN files..
0.8.0 - 2023-02-06
Removed
BREAKING: The project no longer supports Python 3.6. This change will make it easier to manage MiniZinc Python’s build system.
Fixed
Fix the conversion when using a Python enumerated type in MiniZinc that uses non-ascii identifiers.
0.7.0 - 2022-07-13
Added
Add additional
Driver.executable
property to safely access the location of the executable used by theDriver
object.Support for input and output of complex MiniZinc enumerated types, such as anonymous enumerated types or enumerated types using constructor functions.
Removed
BREAKING: The project no longer contains the (uncompleted) direct library connection to libminizinc. With this change come some simplications in methods of relocated from
CLIDriver
andCLIInstance
, and the move offind_driver
toDriver.find
.
Fixed
Store statistics as a string when incorrectly reported by the solver.
Fix the conversion of statistics when using MiniZinc 2.6+
0.6.0 - 2022-03-02
Added
Add support for the usage of JSON Stream output when using MiniZinc 2.6+
Fixed
Do not raise error about unsupported solver flags when MiniZinc driver would not raise an error.
Fix warnings caused by unterminated coroutines when using the asynchronous iterators
0.5.0 - 2021-10-07
Added
Add (generated)
__version__
field to the package to abide by the PEP recommendations.Add support for using NumPy types to instantiate Models. (
np.array
and any type that falls undernp.generic
).Add
available_solvers
method to theDriver
objects to explicitly report the available solvers according to the current environment.Add support for Python 3.10.
Changed
BREAKING: Update minimal supported MiniZinc version to 2.5.0 to ensure full functionality.
Remove the (additional) hard time-out in from the CLI driver. MiniZinc should correctly enforce set time limit.
Solver.lookup
now has an extrarefresh
argument to signal whether the driver should refresh the found solver configurations.
Fixed
Always close temporary files before removing them, so that if an exception is raised while a file is still open, it gets removed correctly on Windows.
Set the required process creation flags on Windows to allow MiniZinc to terminate its subprocesses correctly.
Pass
--intermediate-solutions
flag when-i
or-a
is supported by the solver.Pygments parser generated by Iro did not contain the correct
#pop
rules. The parser was manually edited to work correctly, but we can no longer generate is automatically unless the bug in upstream Iro is resolved.Resolve a syntax error (a missing semicolon) in the meta-heuristics example in the documentation.
Correctly pass the
-O0
flag to the CLI whenoptimisation_level
is set to zero.Set type of MiniZinc annotation output type ann to str in Python in accordance with the JSON output format.
0.4.2 - 2020-11-25
Fixed
Terminate the MiniZinc process when stopping early (instead of killing it). This allows MiniZinc to correctly stop any solver processes.
Changed
Revert change from 0.4.1 where enumerated types unknown to Python would be made stored as anonymous enumerations. Interoperability between the MiniZinc driver and the MiniZinc Python has instead changed to allow JSON strings as valid input for enumerated types. (required MiniZinc 2.5.3)
0.4.1 - 2020-11-11
Added
Support for Python 3.9. (MiniZinc Python will aim to support all versions of Python that are not deprecated)
Experimental support for capturing the error output of the MiniZinc process in
CLIInstance
.Experimental support for verbose compiler and solver output (using the
-v
flag) inCLIInstance
.
Changed
The MiniZinc Python repository moved from GitLab to GitHub, replacing GitLab CI for GitHub Actions for the continuous testing.
Values of an enumerated type defined in MiniZinc will now appear in solutions as a member of a singular anonymous
enum.Enum
class.
Fixed
Handle the cancellation of asynchronous solving and correctly dispose of the process
Correct the JSON representation of sets of with
IntEnum
members. (Lists are still not correctly represented).check_solution
will now correctly handle solution values of an enumerated type defined in MiniZinc.
0.4.0 - 2020-10-06
Changed
The
check_solution
has been split into two separate functions. Thecheck_result
function allows the user to check the correctness of aResult
object and the newcheck_solution
function can check the correctness of an individual solution in the form of a data class object or a dictionary.Model.add_file
no longer has itsparse_data
flag enabled by default.
Fixed
Catch lark
ImportError
beforeLarkError
duringModel.add_file()
sinceLarkError
will not exist if the import failed.Ensure a DZN file does not get included if its data is parsed.
0.3.3 - 2020-08-17
Added
Add
requiredFlags
field to theSolver
data class.
Fixed
Ignore extra (undocumented) fields from MiniZinc’s
--solvers-json
output when initialisingSolver
objects.
0.3.2 - 2020-08-14
Fixed
Add full support for string input and output. The usage of strings would previously incorrectly give a warning.
0.3.1 - 2020-07-21
Changed
Store path of loaded solver configuration paths so that no configuration file has to be generated if no changes are made to the solver.
Fixed
Ensure generated solver configurations exists during the full existence of the created asynchronous process.
0.3.0 - 2020-07-21
Added
Add support for different MiniZinc compiler optimisation levels. All methods that compile an instance now have an additional optimisation_level argument.
Changed
The DZN parser functionality has been moved into the
dzn
extra. If your application requires parseddzn
information, then you have to ensure your MiniZinc Python is installed with this extra enabled:pip install minizinc[dzn]
.Solver
has been turned into adataclass
and has been updated with all attributes used in the compiler.
Fixed
Resolve relative paths when directly loading a solver configuration. This ensures that when a temporary solver configuration is created, the paths are correct.
0.2.3 - 2020-03-31
Changed
Add text to the empty MiniZincError that occurs when MiniZinc exits with a non-zero exit status
Fixed
Close generated solver configuration before handing it to MiniZinc. This fixes the usage of generated solver configurations on Windows.
The DZN parser now constructs correct range objects. The parser was off by one due to the exclusive upper bound in Python range objects.
Rewrite MiniZinc fields that are keywords in Python. These names cannot be used directly as members of a dataclass. Python keywords used in MiniZinc are rewritten to
"mzn_" + {keyword}
and a warning is thrown.
0.2.2 - 2020-02-17
Added
Add output property to
CLIInstance
to expose the output interface given by MiniZinc.
Changed
Improved interaction with solution checker models. Solution checkers can now be added to an
`Instance
/Model
and ancheck
method will be added to the generated solution objects.Change the Python packaging system back to setuptools due to the excessive required dependencies of Poetry.
Fixed
Fix the MiniZinc output parsing of sets of an enumerated type.
Fix the TypeError that occurred when a hard timeout occurred.
Allow trailing commas for sets and arrays in DZN files.
0.2.1 - 2020-01-13
Added
Add support for other command line flags for
CLIInstance.flatten()
through the use of**kwargs
.Add initial
Checker
class to allow the usage of MiniZinc solution checkers.
Changed
The string method for
Result
will now refer to the string method of itsSolution
attribute.
Fixed
Ensure the event loop selection on Windows to always selects
ProactorEventLoop
. This ensures the usage on Windows when the python version<= 3.8.0
.
0.2.0 - 2019-12-13
Added
Support and testing for Python 3.8
Logging of started processes and attributes of generated output items
Export Pygments Lexer for MiniZinc
Changed
Driver.check_version
now raises anConfigurationError
exception when an incompatible function is detected; otherwise, the method not return a value.Output classes generated by
CLIIinstance.analyse()
no longer contain the _output_item str attribute when MiniZinc does not find a output item. (New in MiniZinc 2.3.3)Improved parsing of non-standard (numerical) statistical information provided by the solver.
Fixed
CLIInstance.solutions()
: The separator detection is now OS independent. The separator previously included a\n
literal instead of\r\n
on Windows.Solve an issue in
CLIInstance.solution()
where a solution with a size bigger than the buffer size would result in aLimitOverrunError
exception.Correctly catch the
asyncio.TimeoutError
and kill the process when reaching a hard timeout. (i.e., the solver andminizinc
do not stop in time)Check if file exists before opening file when an error occurs. (File might have been part of a compiled solver)
Ensure the
objective
attribute is only added to the generated solution type onceRemove ‘r’ characters from input when parsing statistics (Windows Specific).
0.1.0 - 2019-10-11
Initial release of MiniZinc Python. This release contains an initial
functionality to use MiniZinc directly from Python using an interface to the
minizinc
command line application. The exact functionality available in this
release is best described in the documentation.