CHANGELOG
=========

All notable changes to this project will be documented in this file.

The format is based on `Keep a Changelog <https://keepachangelog.com/>`_ and
this project adheres to `Semantic Versioning <https://semver.org/>`_.

Unreleased_
------------

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 an ``check`` 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 its
  ``Solution`` 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 <https://pygments.org>`_ Lexer for MiniZinc

Changed
^^^^^^^
- ``Driver.check_version`` now raises an ``ConfigurationError`` 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 a ``LimitOverrunError`` exception.
- Correctly catch the ``asyncio.TimeoutError`` and kill the process when
  reaching a hard timeout. (i.e., the solver and ``minizinc`` 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 once
- Remove '\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
<https://minizinc-python.readthedocs.io/en/0.1.0/>`_.


..  _0.2.2: https://gitlab.com/minizinc/minizinc-python/compare/0.2.1...0.2.2
..  _0.2.1: https://gitlab.com/minizinc/minizinc-python/compare/0.2.0...0.2.1
..  _0.2.0: https://gitlab.com/minizinc/minizinc-python/compare/0.1.0...0.2.0
..  _0.1.0: https://gitlab.com/minizinc/minizinc-python/compare/d14654d65eb747470e11c10747e6dd49baaab0b4...0.1.0
..  _Unreleased: https://gitlab.com/minizinc/minizinc-python/compare/master...develop
