2.1.4
-----

In :py:mod:`fasta`, :py:func:`decoy_db` now doesn't write to file, but returns
an iterator over FASTA records. The old :py:func:`decoy_db` is now called
:py:func:`write_decoy_db`, which is equivalent to :py:func:`decoy_db` combined
with :py:func:`write`.

Bugfixes:

 - in :py:func:`mgf.read`: the charges, if present, are returned as a
masked array now. Previously, an exception occurred if charges were missing
for some of the fragments;
 - values in :py:data:`mass.nist_mass` corrected;
 - other minor corrections.

2.1.3
-----

Adjust the behavior affected by the bug fixed in 2.1.2. `name` attributes
of `<cvParam>` elements in the absence of `value` attributes are now collected
in a list under the `'name'` key.

Add support for overlapping matches in :py:func:`parser.cleave`.

2.1.2
-----

Bugfix in XML parsers. The bug caused the mzML parser break on some files.
The fix can slightly change the format of the output.

2.1.1
-----

Rename keys in the dicts returned by :py:func:`mgf.read` to facilitate
writing code working with both MGF and mzML.

The items yielded by :py:func:`fasta.read` now have attributes `description`
and `sequence`.

2.1.0
-----

New sets of retention coefficients in :py:mod:`achrom`.

:py:class:`mass.Composition` now only stores non-zero ints.

:py:mod:`fasta` now has tools for parsing of FASTA headers.

File parsers now implement the `context manager protocol 
<http://docs.python.org/reference/datamodel.html#with-statement-context-managers>`_.
We recommend using `with` statements to avoid resource leaks.

API changes
...........

 - 'pepmass' is now a tuple in the output of :py:func:`mgf.read` (to allow reading
precursor intensities).

 - new function :py:func:`fasta.parse` for convenient parsing of FASTA headers.

 - :py:data:`fasta.std_parsers` stores parsers for common UniProt header formats.

 - new parameter *parser* in :py:func:`fasta.read` allows to apply parsing while
reading a FASTA file.

 - `close` parameter removed in all functions that do file I/O. The unified behavior
 is: if the parameter is a file object, it won't be closed by the function. If a file
 path is given, the file object will be created and closed inside the corresponding
 function.

2.0.3
-----

Added new class :py:class:`Unimod` in :py:mod:`mass`. The interface is experimental and may
change.

Improved :py:func:`iterfind` function in XML-reading modules.

:py:class:`mass.Composition` objects now support multiplication by int.

Bugfix in :py:func:`auxiliary.linear_regression`.

2.0.2
-----

Added new function :py:func:`iterfind` in :py:mod:`mzid`, :py:mod:`pepxml` and :py:mod:`mzml`.

2.0.1
-----

API changes
...........

  - :py:func:`parser.peptide_length` is renamed to :py:func:`length`.

2.0.0
-----

Added :py:mod:`mzid` module for parsing of mzIdentML files.

Fixed bugs, improved tests.

API changes
...........

  - top-module functions in :py:mod:`fasta`, :py:mod:`mgf`, :py:mod:`mzml`, :py:mod:`pepxml`, as well
  as :py:mod:`mzid`, are now called :py:func:`read`.

  - in :py:mod:`parser`, :py:func:`parse_sequence` renamed to :py:func:`parse`. It now accepts
  an optional parameter `allow_unknown_modifications`.   

  - :py:func:`mgf.write_mgf` and :py:func:`fasta.write_fasta` renamed to :py:func:`write`.

  - the output format of all :py:func:`read` functions has changed.

1.2.5
-----

Include Apache license version 2.0:
http://www.opensource.org/licenses/Apache-2.0

Minor bugfix in :py:mod:`fasta`.

1.2.4
-----

Changes in :py:mod:`mass`.

API changes
...........

    - :py:class:`Composition` objects can be created using positional first argument,
    which will be treated as a sequence or (upon failure) as a formula. That
    means that all functions relying on Composition (:py:func:`calculate_mass`,
    :py:func:`most_probable_isotopic_composition`, :py:func:`isotopic_composition_abundance`)
    allow that as well. However, it's of no use for the latter.

    - :py:class:`Composition` entries for modifications can be added to *aa_comp* and
    used in composition and mass calculations. This way the specified group will
    be added to any residue bearing this modification.

    - That being said, the :py:func:`add_modifications` function is not needed anymore
    and has been removed.

    - Addition and subtraction of :py:class:`Composition` objects now produces a
    :py:class:`Composition` object, allowing addition/subtraction of multiple objects.

    - :py:class:`Composition` is now a subclass of :py:class:`collections.defaultdict` so one
    can safely retrieve values without checking if a key exists.

1.2.3
-----

:py:func:`parser.isoforms` now allows terminal modifications.

Bugfixes in :py:func:`parser.parse_sequence`.

New function :py:func:`parser.tostring` converts parsed sequences to strings.
Helper function :py:func:`parser.is_modX` added to check *modX* labels.

API changes
...........

    - :py:func:`parser.isoforms` now returns a generator object

1.2.2
-----

Bugfix in :py:mod:`pepxml`: modification info is now extracted.
New optional bool argument 'split' in :py:func:`parser.parse_sequence()` allows to
generate a list of tuples where modifications are separated from the residues
instead of a regular list of labels. In *labels* not only *modX* labels are
now allowed, but also separate *mod* prefixes. Such modificatiuons are assumed
to be applicable to any residue.


1.2.1
-----

Memory usage **significantly** decreased when parsing large mzML and pepXML
files.

1.2.0
-----

Added support for Python 3. Python 2.7 is still supported, Python 2.6 is not.

1.1.1
-----

New function called :py:func:`add_modifications()` added in
:py:mod:`pyteomics.mass`. It updates *aa_comp*. Also,
:py:func:`isoforms()` is a new function in :py:mod:`parser` to get all possible
modified sequences of a peptide.

1.1.0
-----

New module added - :py:mod:`pyteomics.mgf`. It is intended for reading and writing
files in Mascot Generic Format.

1.0.2
-----

In :py:mod:`pepxml` module, now all search hits are read from file (not only the top
hit).

API changes:
............

    - :py:func:`pepxml.read`: information specific to search hits is now stored in a list
    under the 'search_hits' key. The list is sorted by hit rank.


1.0.1
-----

Fix compatibility issues in :py:mod:`pepxml` module.

1.0.0
-----

The first public release of Pyteomics.

API changes:
............

    - :py:mod:`achrom`: rename 'length correction factor' to 'length correction parameter'.
      achrom.get_RCs_vary_lcf() was renamed to achrom.get_RCs_vary_lcp(),
      'length_correction_factor' keyword argument of achrom.get_RCs() was 
      renamed to 'lcp'.
      

