Pre-release
-----------

Develop
~~~~~~~

Bugfix:

* Change the field used for pairing from 9.255 to 9.225.

Add:

* Add the :func:`NIST.fingerprint.functions.diptych` function.
* Add the functions to process the LQMetic data generated with ULW.
* Add the `tool` directory (AN-FieldDefinition parser (and other scripts in the future)).

Remove:

* Remove the deprecated functions in the NIST class.

Change:

* Split the main NIST object into the NIST_core and NIST_traditional parts.
* Move the MDD, Morpho and ULWLQMetric NIST classes to the plugin module.
* Misc refactoring.

Patch:

* Remove the duplicates minutiae in the NIST_Morpho class.

Commits since latest release:

.. git_changelog::
    :rev-list: latest..

v0.23.1 (2017-04-06)
~~~~~~~~~~~~~~~~~~~~

Major bugfix:

* Revert the commit 728a91bfa26101f229a0c60bacb9723cfe3d2f91

v0.23 (2017-04-04)
~~~~~~~~~~~~~~~~~~

Add:

* Add support for loading dict objects in NIST.
* Add support for tuple in the :func:`NIST.MDD.NIST_MDD.set_pairing()` function.
* Add the :func:`NIST.fingerprint.NISTf.get_latent_hull()` function.
* Add the :func:`NIST.fingerprint.functions.Point` and :func:`NIST.fingerprint.functions.Delta` objects.
* Overload the '>>' operator for the :func:`NIST.fingerprint.functions.Annotation` object.
* Add the function to sort :func:`NIST.fingerprint.functions.AnnotationsList` object based on the distance to a particular point.
* Add the :func:`NIST.MDD.NIST_MDD.unpair()` function.
* Add the :func:`NIST.fingerprint.NISTf.get_delta()` function, and the annotation of the deltas in the :func:`NIST.fingerprint.NISTf.annotate()` function.
* Add the :func:`NIST.Morpho.NIST_Morpho.process_imageenh()` and :func:`NIST.Morpho.NIST_Morpho.get_delta()` functions.
* Add support for WSQ as input for the :func:`NIST.fingerprint.functions.changeFormatImage()` function.
* Add the :func:`NIST.ULWLQMetric.NISTULWLQMetric.get_minutiae_by_LQM()`, :func:`NIST.ULWLQMetric.NISTULWLQMetric.get_LQMetric_map()` functions.
* Add the LQMetric Quality Map if available.
* Add support for WSQ in the Fingerprint module.
* Add support for bifurcations and undetermined minutiae type.
* Add support for the Core annotations in the Morho_NIST() class.
* Add the :func:`NIST.fingerprint.NISTf.export_latent_diptych()` function.

Change:

* Overload of the set_minutiae in the NIST_MDD class (to set the pairing information).
* The :func:`NIST.fingerprint.NISTf.get_latent_triptych()` function returns the convex hull by default.
* Set the resolution in the latent and print exported images.
* Move the processing of the field 9.331 into the NISTf module.
* Use the builtin super() function instead of the future.super() function.
* Add **options to the :func:`NIST.MDD.NIST_MDD.get_minutiae()` function.
* Remove the change of the NIST standard version (field 1.003) in the cleaning function.
* Move the processing of the 1.011 and 1.012 filds in the Fingerprint module.
* Made the WSQ module optional (raise an exception if not loaded AND used).

v0.22 (2017-01-26)
~~~~~~~~~~~~~~~~~~

Add:

* Add :func:`NIST.traditional.NIST.to_dict()` function.
* Add :func:`NIST.traditional.NIST.get_all_tagid()` function.
* Add :func:`NIST.traditional.NIST.to_json()` and  :func:`NIST.traditional.NIST.from_json()` functions.
* Add :func:`NIST.fingerprint.functions.AnnotationList.remove()` function.
* Add :func:`NIST.fingerprint.functions.changeFormatImage()` function.
* Add :func:`NIST.fingerprint.NISTf.get_tenprint_annotated()` function.
* Add :func:`NIST.fingerprint.NISTf.get_image_annotated()` function.
* Add auto funcitons (:func:`NIST.fingerprint.NISTf.export_auto()`, :func:`NIST.fingerprint.NISTf.export_auto_annotated()` and :func:`NIST.fingerprint.NISTf.crop_auto()`).
* Add :func:`NIST.MDD.NIST_MDD.get_minutiae_paired_count()` function.
* Add :func:`NIST.Morpho.NIST_Morpho.get_jar()` and :func:`NIST.Morpho.NIST_Morpho.get_cfv()` functions.
* Add :func:`NIST.Morpho.NIST_Morpho.get_minutiae()` to process the 9.184 field.
* Add support for unicode data in the :func:`~NIST.traditional.NIST.load_auto()` function.
* Add support for Type-13 NIST object as reference in the :func:`NIST.fingerprint.functions.tetraptych()` function.

Remove:

* Remove the :func:`NIST.fingerprint.NISTf.has_field()` function.

Change:

* The input data of the :func:`~NIST.fingerprint.functions.lstTo012()` function have to be an AnnotationList or list object.
* The :func:`~NIST.fingerprint.NISTf.checkMinutiae()` returns the checks for all IDC if multiple IDC are stored in the NIST object.
* The :func:`~NIST.traditional.NIST.__str__()` function do not raise an exception if the NIST object is not initialized ("NIST object not initialized..." string instead).
* Recode of the :func:`NIST.traditional.functions.tagSplitter()` function: The common tests are done inside the function, instead of outside.
* Recode of the :func:`NIST.fingerprint.NISTf.set_cores()` function.
* Recode of the :func:`NIST.MDD.NIST_MDD.set_pairing()` function.

Patch:

* :func:`NIST.fingerprint.NISTf.get_minutia_by_id()`: Error if the `format` parameter is passed to `None`.
* :func:`NIST.traditional.NIST.load()` function: If the tagid is 999, the tag was not updated correctly (error possible if the length of the tag differs).
* The width and the height variables were inverted int he :func:`NIST.fingerprint.NISTf.get_tenprint()` function.
* Critical bug in the pairing information update :func:`NIST.MDD.NIST_MDD.set_pairing()` function.


v0.21 (2016-12-25)
~~~~~~~~~~~~~~~~~~

Add:

* First Sphinx documentation.
* Add the :func:`NIST.traditional.NIST.get()` function.
* Add support for keyword arguments for the `Annotation` object.
* Add the parameter in the :func:`NIST.fingerprint.functions.AnnotationList.from_list()` class to select the type of `Annotation` stored (`Annotation`, `Minutia` or `Core`).
* Add :func:`NIST.fingerprint.NISTf.migrate_Type04_to_Type14()` function.
* Add :func:`NIST.MDD.NIST_MDD.migrate_Type13_to_type14()` function.
* Add :func:`NIST.traditional.NIST.get_field_multi_idc()` and :func:`NIST.traditional.NIST.get_fields_multi_idc()` functions.
* Add :func:`NIST.fingerprint.NISTf.get_tenprint()` function.
* Add :func:`NIST.fingerprint.NISTf.get_tenprintcard()` function (European format).

Change:

* Migrate the :func:`NIST.MDD.NIST_MDD.get_pairing()` function to return :func:`~NIST.fingerprint.functions.AnnotationList`.
* Change the location to store the default annotation format (NIST.fingerprint.functions.Annotation.defaultformat).

Patch:

* :func:`NIST.traditional.functions.bindump()` was returning the first byte at the end of the string

v0.20 (2016-12-18)
~~~~~~~~~~~~~~~~~~

Add:

* Add the :func:`~NIST.fingerprint.NISTf.init_latent()`, :func:`~NIST.fingerprint.NISTf.init_print()` and :func:`~NIST.fingerprint.NISTf.init_new()` functions in the NISTf() class.
* Add options in various functions to allow func( params ) calls.
* Add the :func:`NIST.traditional.NIST.merge()` function. 
* Add support for the Type14 in various functions.

Remove:

* Remove deprecated functions.

Change:

* The :func:`NIST.MDD.NIST_MDD.add_Type09()` overload his super() function to set the pairing information.
* Change default standard value to '0300'.
* Store the result of the self.get_ntype() if multiple calls have to be done in the same function (performance issues).

v0.19 (2016-12-01)
~~~~~~~~~~~~~~~~~~

Add:

* Add the :func:`~NIST.fingerprint.functions.Annotation`, :func:`~NIST.fingerprint.functions.Minutia` and :func:`~NIST.fingerprint.functions.Core` classes.
* Add the :func:`~NIST.fingerprint.functions.AnnotationList` class.

Change:

* Change the format of the Minutiae and Core stored in the NIST object (from list to Minutia() and Core() object).

v0.18 (2016-11-22)
~~~~~~~~~~~~~~~~~~

Add:

* Add the :func:`~NIST.fingerprint.NISTf.add_type14()` function with default values.
* Add the NIST_MDD class to process NIST objects with pairing information (user-defined field 9.255), and add function to annotate the pairing information (:func:`NIST.MDD.NIST_MDD.annotate()`, :func:`NIST.MDD.NIST_MDD.get_latent_annotated()` and :func:`NIST.MDD.NIST_MDD.get_print_annotated()`).
* Add support for PNG format.

Change:

* Split the :func:`NIST.fingerprint.NISTf.crop()` function in :func:`~NIST.fingerprint.NISTf.crop_latent()` and :func:`~NIST.fingerprint.NISTf.crop_print()` functions.
* Delete all empty IDC and ntypes in the clean() function.
* Optimization of the :func:`~NIST.fingerprint.NISTf.get_latent_annotated()`, :func:`~NIST.fingerprint.NISTf.get_print_annotated()` and :func:`~NIST.fingerprint.NISTf.get_annotated()` functions.

Delete:

* Remove the minutiae_filter() function.

Patch:

* Monkey-patch of the x.001 field (not in agreement with the NIST standard).

v0.17 (2016-09-20)
~~~~~~~~~~~~~~~~~~

Add:

* Add the :func:`NIST.fingerprint.NISTf.set_cores()` function.
* Add support for Type04 in the :func:`NIST.fingerprint.NISTf.set_resolution()` function.
* Add the :func:`NIST.traditional.NIST.update()` function.

Change:

* Auto-increment of the Minutia id if not provided.
* Annotate all the cores if multiple cores are stored in the NIST object.
* Automatic selection of the correct diptych with the :func:`NIST.fingerprint.NISTf.get_diptych()` function.
* Change the `NIST.traditional.NIST.data` variable to `MDmisc.RecursiveDefaultDict.defDict()`.
* Clean the NIST object before printing.
* Check the IDC field (x.002) for each ntype in the clean() function.
* Patch the fields 1.011 and 1.012 according to the NIST standard.

v0.16 (2016-08-17)
~~~~~~~~~~~~~~~~~~

Add:

* Add the :func:`NIST.fingerprint.NISTf.crop_latent()`.
* Add support for uncompressed (RAW) Type-04 images, and adapt the 'changeResolution()' function.
* Add the function :func:`NIST.fingerprint.NISTf.get_image()`, with automatic determination of the main type (latent or print image).
* Add the :func:`NIST.fingerprint.NISTf.export_latent()` and :func:`NIST.fingerprint.NISTf.export_print()`, and the annotated equivalent functions.
* Add support to crop Type13 and Type04 images.

v0.15 (2016-08-14)
~~~~~~~~~~~~~~~~~~

Add:

* Add the first attempt for NIST object with M1 annotation format.
* Add misc functions.
* Add the identifier field for the NIST object.
* Add some information in the head of the string-representation of the NIST object.
* Add support for the JPEG2K format for latent images.
* Add the formatter function to print formatted binary fields.

Change:

* Change the name of the main class in the Morpho module.
* Use of the Python3 division module.

Patch:

* Bug-fix in some docstrings.

v0.14 (2016-07-11)
~~~~~~~~~~~~~~~~~~

Add:

* Add functions related to the image processing (get the latent annotated, quality map, ...).
* Add functions to set values for latent and print (set_width(), set_height(), ...).
* Add function to change the main class of the NIST object.
* Add support for passing tuple in the set_field() function instead of a tag-string.
* Add the functions get_diptych() and get_tetraptych()

Change:

* Change the format of the NIST object representation (non prittable character, ...).
* Move deprecated functions.

v0.13 (2016-07-06)
~~~~~~~~~~~~~~~~~~

Add:

* Add the function get_minutiae_all() to get the minutiae from all fingers in one list of lists.
* Add the function to add the case name (field 2.007) for Morpho NIST objects.

Change:

* Extend the NIST-fingerprint library to work with the ULWLQMetric module (added in the default installer).
* Move deprecated methods in the NISTf_deprecated. Need to import this class instead of NISTf if you want to use deprecated functions with the old code (not recommended !).
* Move the version of the standard in a class attribute (changeable on the fly).

Patch:

* Bug around : if the 1.003 field is malformed (an IDC is missing), the missing value is replaced with a 1.
* Misc patches.

v0.12 (2016-06-29)
~~~~~~~~~~~~~~~~~~

Add:

* First version of the function to work with fingerprints (get_print() to get the PIL or WSQ image) from 4.999 WSQ encoded image.
* Update the names of the imports.
* Patch the get_minutiae() function (order of values).
* Deprecation of the get_image() function.

v0.11 (2016-06-26)
~~~~~~~~~~~~~~~~~~

Add:

* Add the versioneer module to manage the version name in the setup file produced. 

Change:

* Modification of the structure of the module: separation of the traditional module from the fingerprint functions.
* Change the parameter 'minutiae' in NIST.fingerprint.NISTf.add_Type09() to optional.
* Misc optimizations.

v0.10 (2016-06-25)
~~~~~~~~~~~~~~~~~~

Add:

* Add function returning the number of minutiae present in the NIST object (field 9.010).
* Add function to add default empty records (Type-01, Type-02, Type-09 and Type-13).

Change:

* Update from distutils.core to setuptools
* Checker for the minutiae field (all minutiae have to be on the image).
* Code cleaning.

v0.9 (2016-06-19)
~~~~~~~~~~~~~~~~~

Add:

* Type-14, Type-10, Type-15, Type-16, Type-17, Type-18, Type-19, Type-20, Type-21, Type-98 and Type-99 parser

Change:

* Change in the structure of the package, and addition of the __init__ file to load the NIST package
* Rewriting of the doctest.py module.
* get_fields() and set_fields() to get and set multiple fields at once
* Documentation of all fields (name and abbreviation) 

v0.8 (2016-06-18)
~~~~~~~~~~~~~~~~~

Add:

* Function to delete a ntype, idc or field
* Type-04 dumper

Change:

* Updater for the File Content field (1.003) based on the content of the NIST object
* Field 4.005 checker (conformation to the standard)

Patch:

* Patch the type for the Type-04 data
* Bug fix for the unsupported Type (allowing to skip the record)
* Bug fix for the data in 999 tagid
* Bug fix for the order of the excepted ntype

v0.7 (2016-06-17)
~~~~~~~~~~~~~~~~~

Add:

* Type-04 parser
* get_caseName, get_center
* 'Grayscale Compression Algorithm' field decoder
* Get and set the latent friction ridge image (Type-13) in PIL and RAW format
* Functions for image format transform (PIL <-> RAW)

Change:

* Warning for unsupported Type

v0.6 (2016-06-17)
~~~~~~~~~~~~~~~~~

Add:

* Parser between the 9.012 field and the minutiae table
* Function to return the minutiae table

v0.5 (2016-06-16)
~~~~~~~~~~~~~~~~~

Add:

* Autoloader (to detect the type (NIST object or URI to file) and load it in memory
* @deprecated decorator for sort deprecation (backward compatibility)
* Function to check and return the IDC (if unique) of a ntype
* Function to get the content of a field via the field-tag
* tagSplitter function

v0.4 (2016-06-16)
~~~~~~~~~~~~~~~~~

Add:

* __str__ and __repr__ functions
* Function to write the NIST object to disk
* Function do dump the content of the NIST object in binary (ready to write to disk)
* Function to check some errors possible in the content of the NIST object
* Function to return the tag from a ntype and a tagid
* Function to clean the self.data (deletion of empty fields)
* Add some fields in the LABEL variable

Change:

* Set an IDC for Type-01, even if the standard says nothing about it. For simplification of the code later

v0.3 (2016-06-12)
~~~~~~~~~~~~~~~~~

Add:

* Function to dump the content of the NIST object in a string variable
* Add the leveler function
* Function to get the abbreviation and description of fields
* Functions to get the list of ntype and idc's

Change:

* Move the Logger class to the misc library.

v0.2 (2016-06-12)
~~~~~~~~~~~~~~~~~

Add:

* Function to process the File Content (field 1.003)
* LABEL of some fields
* Debug information
* Binary onscreen dumper

v0.1 (2016-06-11)
~~~~~~~~~~~~~~~~~

* First version of the parser for Type-01, Type-02, Type-09 and Type-13
* Initial commit
