- (:pr:`118`) Model string representations should be more user friendly and descriptive without overload the output.
- (:pr:`119`) The
molparse.to_string
keyword-argreturn_data
now returns molecule keywords for GAMESS and NWChem. Themodels.Molecule.to_string
can usereturn_data
now, too. - (:pr:`120`) Auto documentation tech is now built into the
ProtoModel
and does not need an external function.
- (:pr:`114`) The Numpy einsum calls reference the top level functions and not core C functions. This fixes an issue which can result in NumPy version dependencies.
- (:pr:`85`, :pr:`87`) Msgpack is a new serialization option for Models. Serialization defaults to msgpack when
available (
conda install msgpack-python [-c conda-forge]
), falling back to JSON otherwise. This results in substantial speedups for both serialization and deserialization actions and should be a transparent replacement for users within Elemental itself.
- (:pr:`78`) Molecular alignments can now be aligned on the derivatives of vector components.
- (:pr:`81`) Testing is now operated both on the minimal supported and the latest released versions of dependencies.
- (:pr:`82`) Molecule fragment grouping is now disabled by default to match expected behavior.
- (:pr:`84`) Testing without internet connection should now pass since PubChem testing is skipped with no connection.
- (:pr:`85`) Molecule switches from lists to numpy arrays for internal storage of per-atom fields.
- (:pr:`86`) Molecule performance and memory enhancements through reduced validation times and LRU caching of common validations.
- (:pr:`88`, :pr:`109`) The
Molecule
Model now has its attributes documented and in an on-the-fly manner derived from the Pydantic Schema of those attributes. - (:pr:`99`, :pr:`100`, :pr:`101`, :pr:`102`, :pr:`103`, :pr:`104`, :pr:`105`, :pr:`106`, :pr:`107`) Various documentation, type hints, and small changes.
- (:pr:`87`) Molecule objects built from Schema are run through validators for consistency.
- (:pr:`76`) Adds a built-in
Molecule.to_file
function for easy serialization into.numpy
,.json
,.xyz
,.psimol
, and.psi4
file formats.
- (:pr:`74`) Atom and fragment ordering are preserved when invoking
get_fragment
.
- (:pr:`68`)
molparse.to_string
learned parameterreturn_data
that contains aspects of themodels.Molecule
not expressible in the string. Implemented for dtypes xyz, cfour, psi4. - (:pr:`68`)
Datum
gained an attributenumeric
that reflects whether arithmetic ondata
is valid.Datum
s that aren't numeric can now be created by initializing withnumeric=False
.
- (:pr:`66`) Fix tests when networkx not installed.
- (:pr:`67`) Fix "unsupported format string passed to numpy.ndarray.__format__" on Mac for
testing.compare_values
.
- (:pr:`51`) Changes
models.Molecule
connectivity to default to None rather than an empty list. WARNING this change alters the hashes produced from theMolecule.get_hash
functionality. - (:pr:`52`, :pr:`53`)
models.Molecule
learnednuclear_repulsion_energy
,nelectrons
, andto_string
functions. - (:pr:`54`)
models.ResultProperties
supports CCSD and CCSD(T) properties. - (:pr:`56`) Algorithms Kabsch
molutil.kabsch_align
, Hungarianutil.linear_sum_assignment
, and Unoutil.uno
added. Utilities to generate random 3D rotationsutil.random_rotation_matrix
and reindex a NumPy array into smaller blocksutil.blockwise_expand
added. - (:pr:`56`) Molecular alignment taking into account displacement, rotation, atom exchange, and mirror symmetry for
superimposable and differing geometries was added in
molutil.B787
(basis NumPy function) andmodels.Molecule.align
(far more convenient). Suitable for QM-sized molecules. Requires addition packagenetworkx
. - (:pr:`58`)
utils
learnedwhich_import
andwhich
that provide a path or boolean result for locating modules or commands, respectively. These were migrated from QCEngine along withsafe_version
andparse_version
to colocate the import utilities. - (:pr:`61`) Add molecular visualization to the
models.Molecule
object through the optional 3dMol.js framework. - (:pr:`65`)
testing.compare_molrecs
learned parameterrelative_geoms='align'
that lets Molecules pass if geometries within a translation and rotation of each other. - (:pr:`65`)
testing.compare_recursive
learned parameterforgive
that is a list of paths that may differ without failing the comparison.
- (:pr:`52`, :pr:`53`)
molparse.to_string
NWChem and GAMESS dtypes developed. - (:pr:`57`)
molparse.to_string
learneddtype='terachem'
for writing the separate XYZ file required by TeraChem. Angstroms or Bohr allowed, though the latter requires extra in input file. - (:pr:`60`)
util.which
added the Python interpreter path to the default search$PATH
. - (:pr:`62`) Added
*
to parameter list of many functions requiring subsequent to be keyword only. Code relying heavily on positional arguments may get broken. - (:pr:`63`)
util.which
learned parameterenv
to use an alternate search$PATH
. - (:pr:`63`)
util.which
andutil.which_import
learned parametersraise_error
andraise_msg
which raisesModuleNotFoundError
(for both functions) when not located. It error will have a generic error message which can be extended byraise_msg
. It is strongly encouraged to add specific remedies (like how to install) through this parameter. This is the third exit pattern possible from the "which" functions, of which path/None is the default, True/error happens whenraise_error=True
, and True/False happens otherwise whenreturn_bool=True
. - (:pr:`65`) Testing functions
compare
,compare_values
,compare_recursive
learned parameterreturn_handler
that lets other printing, logging, and pass/fail behavior to be interjected.
- (:pr:`63`)
util.which
usesos.pathsep
rather than Linux-focused:
. - (:pr:`65`) Fixed some minor printing and tolerance errors in molecule alignment.
- (:pr:`65`)
testing.compare_recursive
stopped doingatol=10**-atol
foratol>=1
, bringing it in line with other compare functions.
- (:pr:`49`) Precompute some mass number and mass lookups and store on
qcel.periodic_table
. Also move staticre.compile
expressions out of fns on to module. Mol validation .127s --> .005s.
- (:pr:`47`)
models.DriverEnum
now has aderivative_int
function to return 1 forgradient
, etc., for easy math.properties
returns 0. - (:pr:`47`) Optional
fix_symmetry
field in qcschema_molecule was missing frommodels.Molecule
so Pydantic got mad at Psi4. Now calmed.
- (:pr:`48`) If Molecule object has passed through molparse validation because it was created with a molparse
constructor (e.g.,
from_string
), save some time by not passing it through again atmodel.Molecule
creation time.
- (:pr:`48`) Fixed a
Molecule.get_fragment
bug where ghosted fragments still asserted charge/multiplicity to the validator, which was rightly confused.
- (:pr:`37`) Documentation now pulls from the custom QC Archive Sphinx Theme, but can fall back to the standard RTD theme. This allows all docs across QCA to appear consistent with each other.
- (:pr:`41`) Conda-build recipe removed to avoid possible confusion for everyone who isn't a Conda-Forge
recipe maintainer. Tests now rely on the
conda env
setups. - (:pr:`44`) Molecule objects are now always validated against a more rigorous model and fragment multiplicities are
fixed at the correct times, even when no multiplicities are provided. Molecule defaults to
dtype=2
.
- (:pr:`39`) Fixed
setup.py
to callpytest
instead ofunittest
when running tests on install - (:pr:`41`) Pinned a minimum Pytest version to make sure errors are not because of too old of a pytest version
- (:pr:`33`)
molparse.to_schema
recognizesdtype=2
in keeping with GH:MolSSI/QCSchema#60 with internalschema_name=qcschema_molecule
andschema_version=2
fields.molparse.from_schema
recognizes external fields (existing functionality), internal fields (dtype=2), and mixed. - (:pr:`33`) Pydantic molecule model now contains schema_name and schema_version=2 information.
- (:pr:`35`) Models now have an
extra
field for extra attributes, no additional base keys are allowed.
- (:pr:`34`) Converts
qcel.Datum
to Pydantic model. Changes: (a) comment, doi, glossary fields must be accessed by keyword, (b)to_dict()
becomesdict()
and instead of only label, units, data fields in dict, now comment, doi, glossary present _if_ non-default, (c) complex values no longer list-ified byto_dict()
. - (:pr:`36`) Changelog and Models documentation.
- (:pr:`32`) Updates compliance with Pydantic v0.20.
- (:pr:`31`) Lints the code base preparing for a release and minor test improvements.
- (:pr:`30`) Fixes
dihedral
measurement code for incorrect phase in certain quadrants.
- (:pr:`27`) Adds a new
measure
feature to Molecule for distances, angles, and dihedrals. - (:pr:`25`) Adds a new
testing
module which contains testing routines for arrays, dictionaries, and molecules.
- (:pr:`28`) Reduces loading time from ~1 second to 200 ms by delaying
pint
import and ensuring git tags are only computed once.
- (:pr:`24`) Update models to be compatible with QCFractal and MongoDB objects in the QCArchive Ecosystem.
Also enhances the
Molecule
model'sjson
function to acceptas_dict
keyword, permitting a return as a dictionary of Pydantic-serialized python (primitive) objects, instead of a string.
- (:pr:`21`) Molparse's
from_schema
method now correctly parses the newqcschema_X
strings for schema names. - (:pr:`23`) Pydantic model serializations now correctly handle Numpy Array objects in nested
BaseModels
. Model serialization testing added to catch these in the future.
- (:pr:`20`) Moves several Molecule parsing functions to the molparse module.
- now requires Python 3.6+
- now requires Pydantic
- (:pr:`14`, :pr:`16`, :pr:`17`) Added new Pydantic models for Molecules, Results, and Optimizations to make common objects used in the QCArchive project all exist in one central, always imported module.
- (:pr:`13`) Function
util.unnp
that recursively list-ifies ndarray in a dict now handles lists and flattens.
- (:pr:`12`) Adds "connectivity" validation and storage consistent with QCSchema.
- (:pr:`12`) Adds single dictionary provenance consistent with QCSchema rather than previous list o'dicts.
- (:pr:`10`) Adds covalent radii data available through
covalentradii.get(atom)
function. - (:pr:`10`) Adds
to_units(unit)
toDatum
class to access the data in non-native units. - (:pr:`10`) Adds
periodictable.to_period(atom)
andto_group(atom)
functions to address periodic table.
- (:pr:`7`, :pr:`9`) Adds "comment" and "provenance" fields to internal repr to better match QCSchema.
- (:pr:`7`) Adds provenance stamp to
from_string
,from_arrays
,from_schema
functions.
- (:pr:`7`) Adds outer schema_name/schema_version to
to_schema(..., dtype=1)
output so is inverse tofrom_schema
.
- (:pr:`8`) Tests pass for installed module now that comparison tests are xfail.
This is the first alpha release of QCElemental containing the primary three components.
- (:pr:`6`) Updated molparse to write new Molecule QCSchema fields in keeping with GH:MolSSI/QCSchema#44
- Periodic Table data from NIST SRD144 (c. pre-2015?) collected into
qcelemental.periodictable
instance, with accessorsto_Z
,to_element
,to_E
,to_mass
,to_A
(and redundant accessorsto_mass_number
,to_atomic_number
,to_symbol
,to_name
) infloat
andDecimal
formats. Also includes functionality to write a corresponding "C" header. - Physical Constants data from NIST SRD121 (CODATA 2014) collected into
qcelemental.constants
instance, with access throughqcelemental.constants.Faraday_constant
(exact capitalization;float
result) orget
(free capitalization;float
orDecimal
result). Also includes functionality to write a corresponding "C" header. molparse
submodule wherefrom_string
,from_array
,from_schema
constructors parse and rearrange (if necessary) and validate molecule topology inputs from the QC and EFP domains into a QCSchema-like data structure. Current deficiencies from QCSchema are non-contiguous fragments and "provenance" fields. Accessorsto_string
andto_schema
are highly customizable.- A pint context has been built around the NIST physical constants
data so that
qcelemental.constants.conversion_factor(from_unit, to_unit)
uses the QCElemental values in its conversions. Resultingfloat
is within uncertainty range of NIST constants but won't be exact for conversions involving multiple fundamental dimensions orwavelength -> energy != 1 / (energy -> wavelength)
.