# History

## 2.1.1 (2025-06-24)

- No change - fixing the previous botched release

## 2.1.0 (2025-06-24)

- Added type annotations and mypy checks

- Added support for Python 3.13

## 2.0.2 (2025-06-07)

- Removed support for EOL Python 3.8

- Using pyproject.toml for project configurations (instead of setup.py)

## 2.0.1 (2024-06-10)

- Removed support for EOL Python 3.6 and 3.7

- Minor documentation update (#153)

- Stopped using deepcopy when duplicating Namespace (#158)

- Restricting rdflib package version to “<7” (#156)

- Raise an exception when an empty URI is registered as a namespace (#142)

- Ensure rdflib 6+ returns bytes when serializing tests (fixed #151)

- Removed fancy label output for bundle

## 2.0.0 (2020-11-01)

- Removed support for EOL Python 2

- Testing against Python 3.6+ and Pypy3

## 1.5.3 (2018-11-20)

- Reorganised source code to /src

- Added Python 3.7 support

- Removed Python 3.3 support due to end-of-life

- plus minor improvements and bug fixes

## 1.5.2 (2018-02-06)

- Fixed association relation in RDF serialisation

- Fixed compatibility with networkx 2.0+

## 1.5.1 (2017-07-18)

- Replaced pydotplus with pydot (see #111)

- Fixed datetime and bundle error in RDF serialisation

- Tested against Python 3.6

- Improved documentation

## 1.5.0 (2016-10-19)

- Added: Support for PROV-O (RDF) serialization and deserialization

- Added: direction option for `prov.dot.prov_to_dot()`

- Added: `prov.graph.graph_to_prov()` to convert a MultiDiGraph back to a `ProvDocument`

- Testing with Python 3.5

- Various minor bug fixes and improvements

## 1.4.0 (2015-08-13)

- Changed the type of qualified names to prov:QUALIFIED_NAME (fixed #68)

- Removed XSDQName class and stopped supporting parsing xsd:QName as qualified names

- Replaced pydot dependency with pydotplus

- Removed support for Python 2.6

- Various minor bug fixes and improvements

## 1.3.2 (2015-06-17)

- Added: prov-compare script to check equivalence of two PROV files (currently supporting JSON and XML)

- Fixed: deserialising Python 3’s bytes objects (issue #67)

## 1.3.1 (2015-02-27)

- Fixed unicode issue with deserialising text contents

- Set the correct version requirement for six

- Fixed format selection in prov-convert script

## 1.3.0 (2015-02-03)

- Python 3.3 and 3.4 supported

- Updated prov-convert script to support XML output

- Added missing test JSON and XML files in distributions

## 1.2.0 (2014-12-19)

- Added: `prov.graph.prov_to_graph()` to convert a `ProvDocument` to a MultiDiGraph

- Added: PROV-N serializer

- Fixed: None values for empty formal attributes in PROV-N output (issue #60)

- Fixed: PROV-N representation for xsd:dateTime (issue #58)

- Fixed: Unintended merging of Identifier and QualifiedName values

- Fixed: Cloning the records when creating a new document from them

- Fixed: incorrect SoftwareAgent records in XML serialization

## 1.1.0 (2014-08-21)

- Added: Support for PROV-XML serialization and deserialization

- A `ProvRecord` instance can now be used as the value of an attributes

- Added: convenient assertions methods for `ProvEntity`, `ProvActivity`, and `ProvAgent`

- Added: `prov.model.ProvDocument.update()` and `prov.model.ProvBundle.update()`

- Fixed: Handling default namespaces of bundles when flattened

## 1.0.1 (2014-08-18)

- Added: Default namespace inheritance for bundles

- Fixed: `prov.model.NamespaceManager.valid_qualified_name()` did not support `XSDQName`

- Added: Convenience `prov.read()` method with a lazy format detection

- Added: Convenience `plot()` method on the `ProvBundle` class (requiring matplotlib).

- Changed: The previous `add_record()` method renamed to `new_record()`

- Added: `add_record()` function which takes one argument, a `ProvRecord`, has been added

- Fixed: Document flattening (see `flattened()`)

- Added: `__hash__()` function added to `ProvRecord` (at risk: to be removed as `ProvRecord` is expected to be mutable)

- Added: `extra_attributes` added to mirror existing `formal_attributes`

## 1.0.0 (2014-07-15)

- The underlying data model has been rewritten and is incompatible with pre-1.0 versions.

- References to PROV elements (i.e. entities, activities, agents) in relation records are now QualifiedName instances.

- A document or bundle can have multiple records with the same identifier.

- PROV-JSON serializer and deserializer are now separated from the data model.

- Many tests added, including round-trip PROV-JSON encoding/decoding.

- For changes pre-1.0, see CHANGES.txt.