This release has several quality-of-life improvements that make it drastically easier to build and validate large GEMD material histories using fewer keystrokes. Let us know what you think!
What’s New
* We've made creating objects simpler. Instead of creating each object individually, helper functions allow you to quickly create self-contained blocks of information. (160):
* A method to make a material node, containing a material run, its corresponding spec, and the corresponding process run and spec that created them.
* A method to use one input material node as an ingredient in an output material node.
* A method to add a Measurement to a MaterialRun.
* Methods to easily build and add Attributes and Values in a type-safe way.
* We've added support for instant data validation. Any added values are automatically checked against the bounds of the relevant template, allowing you to spot errors at the source. As a user, you can specify if the results of that check are ignored, raise a warning, or throw an exception. Note that instant checks are only performed against local templates. If the template is a LinkByUID, then validation can only be done upon ingestion. (161)
* We've added a convenience method for returning a full list of every object that a single object references. Given the complex way objects can reference each other, having a central way to ask about all the objects, templates and links that they depend will help in bookkeeping for database construction. (155)
Improvements
* We've made importing easier. We've dramatically increased the number of modules that expose GEMD objects and helper functions for import -- you can now import all defined objects as easily as `from gemd import *`. (159)
* We've added up to Python 3.10 to our Travis testing. (162)
**Full Changelog**: https://github.com/CitrineInformatics/gemd-python/compare/v1.4.1...v1.8.1