chemicalml 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/docs.yml +63 -0
- data/.github/workflows/links.yml +99 -0
- data/.github/workflows/opal.yml +34 -0
- data/.github/workflows/performance.yml +25 -0
- data/.github/workflows/rake.yml +19 -0
- data/.github/workflows/release.yml +34 -0
- data/CHANGELOG.md +52 -12
- data/CLAUDE.md +48 -41
- data/Gemfile +2 -1
- data/Rakefile +9 -4
- data/TODO.align/18-wire-class-registry.md +46 -0
- data/TODO.align/19-schema-aware-translator.md +33 -0
- data/TODO.align/20-missing-translator-rules.md +44 -0
- data/TODO.align/21-encapsulate-translator.md +33 -0
- data/TODO.align/22-dry-role-modules.md +32 -0
- data/TODO.align/23-final-spec-lint.md +25 -0
- data/TODO.align/24-autoload-wire-classes.md +84 -0
- data/TODO.align/25-value-container-schema-awareness.md +44 -0
- data/TODO.align/26-remove-dead-code.md +16 -0
- data/TODO.align/27-final-spec-lint.md +26 -0
- data/TODO.align/28-stereo-model.md +40 -0
- data/TODO.align/29-stereo-wire-children.md +30 -0
- data/TODO.align/30-stereo-translator.md +32 -0
- data/TODO.align/31-final-spec-lint.md +20 -0
- data/TODO.align/32-polymorphic-translator.md +43 -0
- data/TODO.align/33-polymorphic-parse.md +43 -0
- data/TODO.align/34-polymorphic-specs.md +16 -0
- data/TODO.align/35-final-spec-lint.md +10 -0
- data/TODO.align/36-molecular-convention-coverage.md +46 -0
- data/TODO.align/37-compchem-convention-coverage.md +55 -0
- data/TODO.align/38-dictionary-convention-coverage.md +34 -0
- data/TODO.align/39-unit-dictionary-convention-coverage.md +33 -0
- data/TODO.align/40-unit-type-dictionary-convention-coverage.md +28 -0
- data/TODO.align/41-expand-canonical-model-layer.md +43 -0
- data/TODO.align/42-translator-wire-new-models.md +31 -0
- data/TODO.align/43-dictionary-model-no-to-h.md +39 -0
- data/TODO.align/44-schema3-only-and-schema24-module.md +44 -0
- data/TODO.align/45-documentation-and-final-verification.md +23 -0
- data/TODO.align/46-lattice-vector-content.md +24 -0
- data/TODO.align/47-molecule-crystal-spectra-property-lists.md +23 -0
- data/TODO.align/48-model-list-and-module-lists.md +21 -0
- data/TODO.align/49-more-chemistry-models.md +34 -0
- data/TODO.align/50-validation-report.md +29 -0
- data/TODO.align/51-convention-auto-detection.md +30 -0
- data/TODO.align/52-schema24-legacy-elements.md +28 -0
- data/TODO.align/53-round-trip-integration-specs.md +30 -0
- data/TODO.align/54-document-versioned-parser-shim.md +38 -0
- data/TODO.align/55-molecule-missing-attributes.md +20 -0
- data/TODO.align/56-geometry-models.md +24 -0
- data/TODO.align/57-compchem-models.md +26 -0
- data/TODO.align/58-remaining-models.md +24 -0
- data/TODO.align/59-wire-new-models-translator.md +18 -0
- data/TODO.align/60-docs-and-final-verification.md +19 -0
- data/TODO.align/README.round10.md +30 -0
- data/TODO.align/README.round11.md +50 -0
- data/TODO.align/README.round12.md +73 -0
- data/TODO.align/README.round13.md +59 -0
- data/TODO.align/README.round14.md +48 -0
- data/TODO.align/README.round15.md +86 -0
- data/TODO.align/README.round16.md +46 -0
- data/TODO.align/README.round3.md +27 -0
- data/TODO.align/README.round4.md +18 -0
- data/TODO.align/README.round5.md +20 -0
- data/TODO.align/README.round6.md +27 -0
- data/TODO.align/README.round7.md +43 -0
- data/TODO.align/README.round8.md +24 -0
- data/TODO.align/README.round9.md +50 -0
- data/data/dictionaries/_index.yaml +9 -1
- data/data/dictionaries/cif.yaml +155 -0
- data/data/dictionaries/cml.yaml +172 -0
- data/data/dictionaries/cml_formula.yaml +63 -0
- data/data/dictionaries/cml_name.yaml +84 -0
- data/data/dictionaries/unit_non_si.yaml +30 -0
- data/data/dictionaries/unit_type.yaml +12 -0
- data/lib/chemicalml/cml/aliases.rb +20 -0
- data/lib/chemicalml/cml/base/abundance.rb +34 -0
- data/lib/chemicalml/cml/base/action.rb +50 -0
- data/lib/chemicalml/cml/base/action_list.rb +51 -0
- data/lib/chemicalml/cml/base/alternative.rb +28 -0
- data/lib/chemicalml/cml/base/amount.rb +30 -0
- data/lib/chemicalml/cml/base/angle.rb +44 -0
- data/lib/chemicalml/cml/base/annotation.rb +30 -0
- data/lib/chemicalml/cml/base/any_cml.rb +28 -0
- data/lib/chemicalml/cml/base/appinfo.rb +32 -0
- data/lib/chemicalml/cml/base/arg.rb +46 -0
- data/lib/chemicalml/cml/base/array.rb +23 -1
- data/lib/chemicalml/cml/base/array_list.rb +30 -0
- data/lib/chemicalml/cml/base/atom.rb +37 -1
- data/lib/chemicalml/cml/base/atom_array.rb +39 -1
- data/lib/chemicalml/cml/base/atom_parity.rb +9 -1
- data/lib/chemicalml/cml/base/atom_set.rb +30 -0
- data/lib/chemicalml/cml/base/atom_type.rb +36 -0
- data/lib/chemicalml/cml/base/atom_type_list.rb +33 -0
- data/lib/chemicalml/cml/base/atomic_basis_function.rb +44 -0
- data/lib/chemicalml/cml/base/band.rb +34 -0
- data/lib/chemicalml/cml/base/band_list.rb +31 -0
- data/lib/chemicalml/cml/base/basis_set.rb +35 -0
- data/lib/chemicalml/cml/base/bond.rb +11 -1
- data/lib/chemicalml/cml/base/bond_array.rb +17 -1
- data/lib/chemicalml/cml/base/bond_set.rb +30 -0
- data/lib/chemicalml/cml/base/bond_stereo.rb +11 -1
- data/lib/chemicalml/cml/base/bond_type.rb +34 -0
- data/lib/chemicalml/cml/base/bond_type_list.rb +33 -0
- data/lib/chemicalml/cml/base/cell_parameter.rb +38 -0
- data/lib/chemicalml/cml/base/cml_module.rb +1 -1
- data/lib/chemicalml/cml/base/complex_object.rb +30 -0
- data/lib/chemicalml/cml/base/condition_list.rb +37 -0
- data/lib/chemicalml/cml/base/crystal.rb +37 -0
- data/lib/chemicalml/cml/base/definition.rb +30 -0
- data/lib/chemicalml/cml/base/description.rb +32 -0
- data/lib/chemicalml/cml/base/dictionary.rb +7 -1
- data/lib/chemicalml/cml/base/dictionary_entry.rb +1 -1
- data/lib/chemicalml/cml/base/dimension.rb +42 -0
- data/lib/chemicalml/cml/base/document.rb +9 -1
- data/lib/chemicalml/cml/base/documentation.rb +30 -0
- data/lib/chemicalml/cml/base/eigen.rb +36 -0
- data/lib/chemicalml/cml/base/electron.rb +42 -0
- data/lib/chemicalml/cml/base/enumeration.rb +32 -0
- data/lib/chemicalml/cml/base/expression.rb +32 -0
- data/lib/chemicalml/cml/base/float.rb +40 -0
- data/lib/chemicalml/cml/base/float_array.rb +42 -0
- data/lib/chemicalml/cml/base/formula.rb +1 -1
- data/lib/chemicalml/cml/base/fragment.rb +41 -0
- data/lib/chemicalml/cml/base/fragment_list.rb +35 -0
- data/lib/chemicalml/cml/base/gradient.rb +32 -0
- data/lib/chemicalml/cml/base/identifier.rb +9 -1
- data/lib/chemicalml/cml/base/integer.rb +40 -0
- data/lib/chemicalml/cml/base/integer_array.rb +42 -0
- data/lib/chemicalml/cml/base/isotope.rb +36 -0
- data/lib/chemicalml/cml/base/isotope_list.rb +33 -0
- data/lib/chemicalml/cml/base/join.rb +36 -0
- data/lib/chemicalml/cml/base/kpoint.rb +34 -0
- data/lib/chemicalml/cml/base/kpoint_list.rb +31 -0
- data/lib/chemicalml/cml/base/label.rb +3 -1
- data/lib/chemicalml/cml/base/lattice.rb +37 -0
- data/lib/chemicalml/cml/base/lattice_vector.rb +32 -0
- data/lib/chemicalml/cml/base/length.rb +42 -0
- data/lib/chemicalml/cml/base/line3.rb +36 -0
- data/lib/chemicalml/cml/base/link.rb +58 -0
- data/lib/chemicalml/cml/base/list.rb +3 -1
- data/lib/chemicalml/cml/base/map.rb +40 -0
- data/lib/chemicalml/cml/base/matrix.rb +13 -1
- data/lib/chemicalml/cml/base/mechanism.rb +31 -0
- data/lib/chemicalml/cml/base/mechanism_component.rb +30 -0
- data/lib/chemicalml/cml/base/metadata.rb +5 -1
- data/lib/chemicalml/cml/base/metadata_list.rb +7 -1
- data/lib/chemicalml/cml/base/molecule.rb +27 -1
- data/lib/chemicalml/cml/base/molecule_list.rb +33 -0
- data/lib/chemicalml/cml/base/name.rb +3 -1
- data/lib/chemicalml/cml/base/object.rb +34 -0
- data/lib/chemicalml/cml/base/observation.rb +32 -0
- data/lib/chemicalml/cml/base/operator.rb +32 -0
- data/lib/chemicalml/cml/base/parameter.rb +11 -1
- data/lib/chemicalml/cml/base/parameter_list.rb +7 -1
- data/lib/chemicalml/cml/base/particle.rb +36 -0
- data/lib/chemicalml/cml/base/peak.rb +70 -0
- data/lib/chemicalml/cml/base/peak_group.rb +69 -0
- data/lib/chemicalml/cml/base/peak_list.rb +35 -0
- data/lib/chemicalml/cml/base/peak_structure.rb +44 -0
- data/lib/chemicalml/cml/base/plane3.rb +32 -0
- data/lib/chemicalml/cml/base/point3.rb +32 -0
- data/lib/chemicalml/cml/base/potential.rb +30 -0
- data/lib/chemicalml/cml/base/potential_form.rb +32 -0
- data/lib/chemicalml/cml/base/potential_list.rb +31 -0
- data/lib/chemicalml/cml/base/product.rb +17 -1
- data/lib/chemicalml/cml/base/product_list.rb +15 -1
- data/lib/chemicalml/cml/base/property.rb +7 -1
- data/lib/chemicalml/cml/base/property_list.rb +7 -1
- data/lib/chemicalml/cml/base/reactant.rb +17 -1
- data/lib/chemicalml/cml/base/reactant_list.rb +15 -1
- data/lib/chemicalml/cml/base/reaction.rb +25 -1
- data/lib/chemicalml/cml/base/reaction_list.rb +13 -1
- data/lib/chemicalml/cml/base/reaction_scheme.rb +43 -0
- data/lib/chemicalml/cml/base/reaction_step.rb +41 -0
- data/lib/chemicalml/cml/base/reaction_step_list.rb +39 -0
- data/lib/chemicalml/cml/base/reactive_centre.rb +30 -0
- data/lib/chemicalml/cml/base/region.rb +36 -0
- data/lib/chemicalml/cml/base/related_entry.rb +26 -0
- data/lib/chemicalml/cml/base/sample.rb +32 -0
- data/lib/chemicalml/cml/base/scalar.rb +19 -1
- data/lib/chemicalml/cml/base/spectator.rb +30 -0
- data/lib/chemicalml/cml/base/spectator_list.rb +31 -0
- data/lib/chemicalml/cml/base/spectrum.rb +53 -0
- data/lib/chemicalml/cml/base/spectrum_data.rb +35 -0
- data/lib/chemicalml/cml/base/spectrum_list.rb +35 -0
- data/lib/chemicalml/cml/base/sphere3.rb +32 -0
- data/lib/chemicalml/cml/base/stmml.rb +28 -0
- data/lib/chemicalml/cml/base/string.rb +32 -0
- data/lib/chemicalml/cml/base/string_array.rb +40 -0
- data/lib/chemicalml/cml/base/substance.rb +13 -1
- data/lib/chemicalml/cml/base/substance_list.rb +37 -0
- data/lib/chemicalml/cml/base/symmetry.rb +36 -0
- data/lib/chemicalml/cml/base/system.rb +37 -0
- data/lib/chemicalml/cml/base/table.rb +43 -0
- data/lib/chemicalml/cml/base/table_cell.rb +30 -0
- data/lib/chemicalml/cml/base/table_content.rb +35 -0
- data/lib/chemicalml/cml/base/table_header.rb +31 -0
- data/lib/chemicalml/cml/base/table_header_cell.rb +40 -0
- data/lib/chemicalml/cml/base/table_row.rb +31 -0
- data/lib/chemicalml/cml/base/table_row_list.rb +31 -0
- data/lib/chemicalml/cml/base/tcell.rb +34 -0
- data/lib/chemicalml/cml/base/torsion.rb +44 -0
- data/lib/chemicalml/cml/base/transform3.rb +30 -0
- data/lib/chemicalml/cml/base/transition_state.rb +28 -0
- data/lib/chemicalml/cml/base/trow.rb +32 -0
- data/lib/chemicalml/cml/base/unit.rb +13 -1
- data/lib/chemicalml/cml/base/unit_list.rb +13 -1
- data/lib/chemicalml/cml/base/unit_type.rb +11 -1
- data/lib/chemicalml/cml/base/unit_type_list.rb +11 -1
- data/lib/chemicalml/cml/base/vector3.rb +32 -0
- data/lib/chemicalml/cml/base/xaxis.rb +38 -0
- data/lib/chemicalml/cml/base/yaxis.rb +38 -0
- data/lib/chemicalml/cml/base/z_matrix.rb +30 -0
- data/lib/chemicalml/cml/base.rb +102 -0
- data/lib/chemicalml/cml/elements.rb +166 -43
- data/lib/chemicalml/cml/role/abundance.rb +12 -0
- data/lib/chemicalml/cml/role/action.rb +12 -0
- data/lib/chemicalml/cml/role/action_list.rb +12 -0
- data/lib/chemicalml/cml/role/alternative.rb +10 -0
- data/lib/chemicalml/cml/role/amount.rb +12 -0
- data/lib/chemicalml/cml/role/angle.rb +12 -0
- data/lib/chemicalml/cml/role/annotation.rb +10 -0
- data/lib/chemicalml/cml/role/any_cml.rb +12 -0
- data/lib/chemicalml/cml/role/appinfo.rb +10 -0
- data/lib/chemicalml/cml/role/arg.rb +10 -0
- data/lib/chemicalml/cml/role/array_list.rb +12 -0
- data/lib/chemicalml/cml/role/atom_set.rb +12 -0
- data/lib/chemicalml/cml/role/atom_type.rb +12 -0
- data/lib/chemicalml/cml/role/atom_type_list.rb +12 -0
- data/lib/chemicalml/cml/role/atomic_basis_function.rb +12 -0
- data/lib/chemicalml/cml/role/band.rb +12 -0
- data/lib/chemicalml/cml/role/band_list.rb +12 -0
- data/lib/chemicalml/cml/role/basis_set.rb +12 -0
- data/lib/chemicalml/cml/role/bond_set.rb +12 -0
- data/lib/chemicalml/cml/role/bond_type.rb +12 -0
- data/lib/chemicalml/cml/role/bond_type_list.rb +12 -0
- data/lib/chemicalml/cml/role/cell_parameter.rb +12 -0
- data/lib/chemicalml/cml/role/cml_module.rb +2 -3
- data/lib/chemicalml/cml/role/complex_object.rb +10 -0
- data/lib/chemicalml/cml/role/condition_list.rb +12 -0
- data/lib/chemicalml/cml/role/crystal.rb +12 -0
- data/lib/chemicalml/cml/role/definition.rb +12 -0
- data/lib/chemicalml/cml/role/description.rb +12 -0
- data/lib/chemicalml/cml/role/dimension.rb +12 -0
- data/lib/chemicalml/cml/role/documentation.rb +12 -0
- data/lib/chemicalml/cml/role/eigen.rb +12 -0
- data/lib/chemicalml/cml/role/electron.rb +12 -0
- data/lib/chemicalml/cml/role/enumeration.rb +10 -0
- data/lib/chemicalml/cml/role/expression.rb +10 -0
- data/lib/chemicalml/cml/role/float.rb +10 -0
- data/lib/chemicalml/cml/role/float_array.rb +10 -0
- data/lib/chemicalml/cml/role/fragment.rb +12 -0
- data/lib/chemicalml/cml/role/fragment_list.rb +12 -0
- data/lib/chemicalml/cml/role/gradient.rb +12 -0
- data/lib/chemicalml/cml/role/integer.rb +10 -0
- data/lib/chemicalml/cml/role/integer_array.rb +10 -0
- data/lib/chemicalml/cml/role/isotope.rb +12 -0
- data/lib/chemicalml/cml/role/isotope_list.rb +12 -0
- data/lib/chemicalml/cml/role/join.rb +12 -0
- data/lib/chemicalml/cml/role/kpoint.rb +12 -0
- data/lib/chemicalml/cml/role/kpoint_list.rb +12 -0
- data/lib/chemicalml/cml/role/lattice.rb +12 -0
- data/lib/chemicalml/cml/role/lattice_vector.rb +12 -0
- data/lib/chemicalml/cml/role/length.rb +12 -0
- data/lib/chemicalml/cml/role/line3.rb +12 -0
- data/lib/chemicalml/cml/role/link.rb +12 -0
- data/lib/chemicalml/cml/role/map.rb +12 -0
- data/lib/chemicalml/cml/role/mechanism.rb +12 -0
- data/lib/chemicalml/cml/role/mechanism_component.rb +12 -0
- data/lib/chemicalml/cml/role/molecule_list.rb +12 -0
- data/lib/chemicalml/cml/role/object.rb +12 -0
- data/lib/chemicalml/cml/role/observation.rb +12 -0
- data/lib/chemicalml/cml/role/operator.rb +10 -0
- data/lib/chemicalml/cml/role/particle.rb +12 -0
- data/lib/chemicalml/cml/role/peak.rb +12 -0
- data/lib/chemicalml/cml/role/peak_group.rb +12 -0
- data/lib/chemicalml/cml/role/peak_list.rb +12 -0
- data/lib/chemicalml/cml/role/peak_structure.rb +12 -0
- data/lib/chemicalml/cml/role/plane3.rb +12 -0
- data/lib/chemicalml/cml/role/point3.rb +12 -0
- data/lib/chemicalml/cml/role/potential.rb +12 -0
- data/lib/chemicalml/cml/role/potential_form.rb +12 -0
- data/lib/chemicalml/cml/role/potential_list.rb +12 -0
- data/lib/chemicalml/cml/role/reaction_scheme.rb +12 -0
- data/lib/chemicalml/cml/role/reaction_step.rb +12 -0
- data/lib/chemicalml/cml/role/reaction_step_list.rb +12 -0
- data/lib/chemicalml/cml/role/reactive_centre.rb +12 -0
- data/lib/chemicalml/cml/role/region.rb +12 -0
- data/lib/chemicalml/cml/role/related_entry.rb +10 -0
- data/lib/chemicalml/cml/role/sample.rb +12 -0
- data/lib/chemicalml/cml/role/spectator.rb +12 -0
- data/lib/chemicalml/cml/role/spectator_list.rb +12 -0
- data/lib/chemicalml/cml/role/spectrum.rb +12 -0
- data/lib/chemicalml/cml/role/spectrum_data.rb +12 -0
- data/lib/chemicalml/cml/role/spectrum_list.rb +12 -0
- data/lib/chemicalml/cml/role/sphere3.rb +12 -0
- data/lib/chemicalml/cml/role/stmml.rb +12 -0
- data/lib/chemicalml/cml/role/string.rb +10 -0
- data/lib/chemicalml/cml/role/string_array.rb +10 -0
- data/lib/chemicalml/cml/role/substance_list.rb +12 -0
- data/lib/chemicalml/cml/role/symmetry.rb +12 -0
- data/lib/chemicalml/cml/role/system.rb +12 -0
- data/lib/chemicalml/cml/role/table.rb +12 -0
- data/lib/chemicalml/cml/role/table_cell.rb +12 -0
- data/lib/chemicalml/cml/role/table_content.rb +12 -0
- data/lib/chemicalml/cml/role/table_header.rb +12 -0
- data/lib/chemicalml/cml/role/table_header_cell.rb +12 -0
- data/lib/chemicalml/cml/role/table_row.rb +12 -0
- data/lib/chemicalml/cml/role/table_row_list.rb +12 -0
- data/lib/chemicalml/cml/role/tcell.rb +10 -0
- data/lib/chemicalml/cml/role/torsion.rb +12 -0
- data/lib/chemicalml/cml/role/transform3.rb +12 -0
- data/lib/chemicalml/cml/role/transition_state.rb +12 -0
- data/lib/chemicalml/cml/role/trow.rb +10 -0
- data/lib/chemicalml/cml/role/vector3.rb +12 -0
- data/lib/chemicalml/cml/role/xaxis.rb +12 -0
- data/lib/chemicalml/cml/role/yaxis.rb +12 -0
- data/lib/chemicalml/cml/role/z_matrix.rb +12 -0
- data/lib/chemicalml/cml/role.rb +103 -1
- data/lib/chemicalml/cml/schema24/abundance.rb +13 -0
- data/lib/chemicalml/cml/schema24/action.rb +13 -0
- data/lib/chemicalml/cml/schema24/action_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/alternative.rb +14 -0
- data/lib/chemicalml/cml/schema24/amount.rb +13 -0
- data/lib/chemicalml/cml/schema24/angle.rb +13 -0
- data/lib/chemicalml/cml/schema24/annotation.rb +15 -0
- data/lib/chemicalml/cml/schema24/any_cml.rb +13 -0
- data/lib/chemicalml/cml/schema24/appinfo.rb +15 -0
- data/lib/chemicalml/cml/schema24/arg.rb +14 -0
- data/lib/chemicalml/cml/schema24/array.rb +15 -0
- data/lib/chemicalml/cml/schema24/array_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/atom.rb +15 -0
- data/lib/chemicalml/cml/schema24/atom_array.rb +15 -0
- data/lib/chemicalml/cml/schema24/atom_parity.rb +15 -0
- data/lib/chemicalml/cml/schema24/atom_set.rb +13 -0
- data/lib/chemicalml/cml/schema24/atom_type.rb +13 -0
- data/lib/chemicalml/cml/schema24/atom_type_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/atomic_basis_function.rb +13 -0
- data/lib/chemicalml/cml/schema24/band.rb +13 -0
- data/lib/chemicalml/cml/schema24/band_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/basis_set.rb +13 -0
- data/lib/chemicalml/cml/schema24/bond.rb +15 -0
- data/lib/chemicalml/cml/schema24/bond_array.rb +15 -0
- data/lib/chemicalml/cml/schema24/bond_set.rb +13 -0
- data/lib/chemicalml/cml/schema24/bond_stereo.rb +15 -0
- data/lib/chemicalml/cml/schema24/bond_type.rb +13 -0
- data/lib/chemicalml/cml/schema24/bond_type_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/cell_parameter.rb +13 -0
- data/lib/chemicalml/cml/schema24/cml_module.rb +18 -0
- data/lib/chemicalml/cml/schema24/complex_object.rb +14 -0
- data/lib/chemicalml/cml/schema24/condition_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/configuration.rb +5 -2
- data/lib/chemicalml/cml/schema24/context.rb +18 -0
- data/lib/chemicalml/cml/schema24/crystal.rb +13 -0
- data/lib/chemicalml/cml/schema24/definition.rb +13 -0
- data/lib/chemicalml/cml/schema24/description.rb +13 -0
- data/lib/chemicalml/cml/schema24/dictionary.rb +15 -0
- data/lib/chemicalml/cml/schema24/dictionary_entry.rb +15 -0
- data/lib/chemicalml/cml/schema24/dimension.rb +13 -0
- data/lib/chemicalml/cml/schema24/document.rb +15 -0
- data/lib/chemicalml/cml/schema24/documentation.rb +13 -0
- data/lib/chemicalml/cml/schema24/eigen.rb +13 -0
- data/lib/chemicalml/cml/schema24/electron.rb +13 -0
- data/lib/chemicalml/cml/schema24/enumeration.rb +16 -0
- data/lib/chemicalml/cml/schema24/expression.rb +14 -0
- data/lib/chemicalml/cml/schema24/float.rb +14 -0
- data/lib/chemicalml/cml/schema24/float_array.rb +14 -0
- data/lib/chemicalml/cml/schema24/formula.rb +15 -0
- data/lib/chemicalml/cml/schema24/fragment.rb +13 -0
- data/lib/chemicalml/cml/schema24/fragment_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/gradient.rb +13 -0
- data/lib/chemicalml/cml/schema24/identifier.rb +15 -0
- data/lib/chemicalml/cml/schema24/integer.rb +14 -0
- data/lib/chemicalml/cml/schema24/integer_array.rb +14 -0
- data/lib/chemicalml/cml/schema24/isotope.rb +13 -0
- data/lib/chemicalml/cml/schema24/isotope_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/join.rb +13 -0
- data/lib/chemicalml/cml/schema24/kpoint.rb +13 -0
- data/lib/chemicalml/cml/schema24/kpoint_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/label.rb +15 -0
- data/lib/chemicalml/cml/schema24/lattice.rb +13 -0
- data/lib/chemicalml/cml/schema24/lattice_vector.rb +13 -0
- data/lib/chemicalml/cml/schema24/length.rb +13 -0
- data/lib/chemicalml/cml/schema24/line3.rb +13 -0
- data/lib/chemicalml/cml/schema24/link.rb +13 -0
- data/lib/chemicalml/cml/schema24/list.rb +15 -0
- data/lib/chemicalml/cml/schema24/map.rb +13 -0
- data/lib/chemicalml/cml/schema24/matrix.rb +15 -0
- data/lib/chemicalml/cml/schema24/mechanism.rb +13 -0
- data/lib/chemicalml/cml/schema24/mechanism_component.rb +13 -0
- data/lib/chemicalml/cml/schema24/metadata.rb +15 -0
- data/lib/chemicalml/cml/schema24/metadata_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/molecule.rb +15 -0
- data/lib/chemicalml/cml/schema24/molecule_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/name.rb +15 -0
- data/lib/chemicalml/cml/schema24/object.rb +13 -0
- data/lib/chemicalml/cml/schema24/observation.rb +13 -0
- data/lib/chemicalml/cml/schema24/operator.rb +14 -0
- data/lib/chemicalml/cml/schema24/parameter.rb +15 -0
- data/lib/chemicalml/cml/schema24/parameter_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/particle.rb +13 -0
- data/lib/chemicalml/cml/schema24/peak.rb +13 -0
- data/lib/chemicalml/cml/schema24/peak_group.rb +13 -0
- data/lib/chemicalml/cml/schema24/peak_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/peak_structure.rb +13 -0
- data/lib/chemicalml/cml/schema24/plane3.rb +13 -0
- data/lib/chemicalml/cml/schema24/point3.rb +13 -0
- data/lib/chemicalml/cml/schema24/potential.rb +13 -0
- data/lib/chemicalml/cml/schema24/potential_form.rb +13 -0
- data/lib/chemicalml/cml/schema24/potential_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/product.rb +15 -0
- data/lib/chemicalml/cml/schema24/product_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/property.rb +15 -0
- data/lib/chemicalml/cml/schema24/property_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/reactant.rb +15 -0
- data/lib/chemicalml/cml/schema24/reactant_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/reaction.rb +15 -0
- data/lib/chemicalml/cml/schema24/reaction_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/reaction_scheme.rb +13 -0
- data/lib/chemicalml/cml/schema24/reaction_step.rb +13 -0
- data/lib/chemicalml/cml/schema24/reaction_step_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/reactive_centre.rb +13 -0
- data/lib/chemicalml/cml/schema24/region.rb +13 -0
- data/lib/chemicalml/cml/schema24/related_entry.rb +14 -0
- data/lib/chemicalml/cml/schema24/sample.rb +13 -0
- data/lib/chemicalml/cml/schema24/scalar.rb +15 -0
- data/lib/chemicalml/cml/schema24/spectator.rb +13 -0
- data/lib/chemicalml/cml/schema24/spectator_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/spectrum.rb +13 -0
- data/lib/chemicalml/cml/schema24/spectrum_data.rb +13 -0
- data/lib/chemicalml/cml/schema24/spectrum_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/sphere3.rb +13 -0
- data/lib/chemicalml/cml/schema24/stmml.rb +13 -0
- data/lib/chemicalml/cml/schema24/string.rb +14 -0
- data/lib/chemicalml/cml/schema24/string_array.rb +14 -0
- data/lib/chemicalml/cml/schema24/substance.rb +15 -0
- data/lib/chemicalml/cml/schema24/substance_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/symmetry.rb +13 -0
- data/lib/chemicalml/cml/schema24/system.rb +13 -0
- data/lib/chemicalml/cml/schema24/table.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_cell.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_content.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_header.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_header_cell.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_row.rb +13 -0
- data/lib/chemicalml/cml/schema24/table_row_list.rb +13 -0
- data/lib/chemicalml/cml/schema24/tcell.rb +14 -0
- data/lib/chemicalml/cml/schema24/torsion.rb +13 -0
- data/lib/chemicalml/cml/schema24/transform3.rb +13 -0
- data/lib/chemicalml/cml/schema24/transition_state.rb +13 -0
- data/lib/chemicalml/cml/schema24/trow.rb +14 -0
- data/lib/chemicalml/cml/schema24/unit.rb +15 -0
- data/lib/chemicalml/cml/schema24/unit_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/unit_type.rb +15 -0
- data/lib/chemicalml/cml/schema24/unit_type_list.rb +15 -0
- data/lib/chemicalml/cml/schema24/vector3.rb +13 -0
- data/lib/chemicalml/cml/schema24/xaxis.rb +13 -0
- data/lib/chemicalml/cml/schema24/yaxis.rb +13 -0
- data/lib/chemicalml/cml/schema24/z_matrix.rb +13 -0
- data/lib/chemicalml/cml/schema24.rb +159 -19
- data/lib/chemicalml/cml/schema3/abundance.rb +13 -0
- data/lib/chemicalml/cml/schema3/action.rb +13 -0
- data/lib/chemicalml/cml/schema3/action_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/amount.rb +13 -0
- data/lib/chemicalml/cml/schema3/angle.rb +13 -0
- data/lib/chemicalml/cml/schema3/any_cml.rb +13 -0
- data/lib/chemicalml/cml/schema3/array.rb +15 -0
- data/lib/chemicalml/cml/schema3/array_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/atom.rb +15 -0
- data/lib/chemicalml/cml/schema3/atom_array.rb +15 -0
- data/lib/chemicalml/cml/schema3/atom_parity.rb +15 -0
- data/lib/chemicalml/cml/schema3/atom_set.rb +13 -0
- data/lib/chemicalml/cml/schema3/atom_type.rb +13 -0
- data/lib/chemicalml/cml/schema3/atom_type_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/atomic_basis_function.rb +13 -0
- data/lib/chemicalml/cml/schema3/band.rb +13 -0
- data/lib/chemicalml/cml/schema3/band_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/basis_set.rb +13 -0
- data/lib/chemicalml/cml/schema3/bond.rb +15 -0
- data/lib/chemicalml/cml/schema3/bond_array.rb +15 -0
- data/lib/chemicalml/cml/schema3/bond_set.rb +13 -0
- data/lib/chemicalml/cml/schema3/bond_stereo.rb +15 -0
- data/lib/chemicalml/cml/schema3/bond_type.rb +13 -0
- data/lib/chemicalml/cml/schema3/bond_type_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/cell_parameter.rb +13 -0
- data/lib/chemicalml/cml/schema3/cml_module.rb +15 -0
- data/lib/chemicalml/cml/schema3/condition_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/context.rb +18 -0
- data/lib/chemicalml/cml/schema3/crystal.rb +13 -0
- data/lib/chemicalml/cml/schema3/definition.rb +13 -0
- data/lib/chemicalml/cml/schema3/description.rb +13 -0
- data/lib/chemicalml/cml/schema3/dictionary.rb +15 -0
- data/lib/chemicalml/cml/schema3/dictionary_entry.rb +15 -0
- data/lib/chemicalml/cml/schema3/dimension.rb +13 -0
- data/lib/chemicalml/cml/schema3/document.rb +15 -0
- data/lib/chemicalml/cml/schema3/documentation.rb +13 -0
- data/lib/chemicalml/cml/schema3/eigen.rb +13 -0
- data/lib/chemicalml/cml/schema3/electron.rb +13 -0
- data/lib/chemicalml/cml/schema3/formula.rb +15 -0
- data/lib/chemicalml/cml/schema3/fragment.rb +13 -0
- data/lib/chemicalml/cml/schema3/fragment_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/gradient.rb +13 -0
- data/lib/chemicalml/cml/schema3/identifier.rb +15 -0
- data/lib/chemicalml/cml/schema3/isotope.rb +13 -0
- data/lib/chemicalml/cml/schema3/isotope_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/join.rb +13 -0
- data/lib/chemicalml/cml/schema3/kpoint.rb +13 -0
- data/lib/chemicalml/cml/schema3/kpoint_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/label.rb +15 -0
- data/lib/chemicalml/cml/schema3/lattice.rb +13 -0
- data/lib/chemicalml/cml/schema3/lattice_vector.rb +13 -0
- data/lib/chemicalml/cml/schema3/length.rb +13 -0
- data/lib/chemicalml/cml/schema3/line3.rb +13 -0
- data/lib/chemicalml/cml/schema3/link.rb +13 -0
- data/lib/chemicalml/cml/schema3/list.rb +15 -0
- data/lib/chemicalml/cml/schema3/map.rb +13 -0
- data/lib/chemicalml/cml/schema3/matrix.rb +15 -0
- data/lib/chemicalml/cml/schema3/mechanism.rb +13 -0
- data/lib/chemicalml/cml/schema3/mechanism_component.rb +13 -0
- data/lib/chemicalml/cml/schema3/metadata.rb +15 -0
- data/lib/chemicalml/cml/schema3/metadata_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/molecule.rb +15 -0
- data/lib/chemicalml/cml/schema3/molecule_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/name.rb +15 -0
- data/lib/chemicalml/cml/schema3/object.rb +13 -0
- data/lib/chemicalml/cml/schema3/observation.rb +13 -0
- data/lib/chemicalml/cml/schema3/parameter.rb +15 -0
- data/lib/chemicalml/cml/schema3/parameter_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/particle.rb +13 -0
- data/lib/chemicalml/cml/schema3/peak.rb +13 -0
- data/lib/chemicalml/cml/schema3/peak_group.rb +13 -0
- data/lib/chemicalml/cml/schema3/peak_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/peak_structure.rb +13 -0
- data/lib/chemicalml/cml/schema3/plane3.rb +13 -0
- data/lib/chemicalml/cml/schema3/point3.rb +13 -0
- data/lib/chemicalml/cml/schema3/potential.rb +13 -0
- data/lib/chemicalml/cml/schema3/potential_form.rb +13 -0
- data/lib/chemicalml/cml/schema3/potential_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/product.rb +15 -0
- data/lib/chemicalml/cml/schema3/product_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/property.rb +15 -0
- data/lib/chemicalml/cml/schema3/property_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/reactant.rb +15 -0
- data/lib/chemicalml/cml/schema3/reactant_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/reaction.rb +15 -0
- data/lib/chemicalml/cml/schema3/reaction_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/reaction_scheme.rb +13 -0
- data/lib/chemicalml/cml/schema3/reaction_step.rb +13 -0
- data/lib/chemicalml/cml/schema3/reaction_step_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/reactive_centre.rb +13 -0
- data/lib/chemicalml/cml/schema3/region.rb +13 -0
- data/lib/chemicalml/cml/schema3/sample.rb +13 -0
- data/lib/chemicalml/cml/schema3/scalar.rb +15 -0
- data/lib/chemicalml/cml/schema3/spectator.rb +13 -0
- data/lib/chemicalml/cml/schema3/spectator_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/spectrum.rb +13 -0
- data/lib/chemicalml/cml/schema3/spectrum_data.rb +13 -0
- data/lib/chemicalml/cml/schema3/spectrum_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/sphere3.rb +13 -0
- data/lib/chemicalml/cml/schema3/stmml.rb +13 -0
- data/lib/chemicalml/cml/schema3/substance.rb +15 -0
- data/lib/chemicalml/cml/schema3/substance_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/symmetry.rb +13 -0
- data/lib/chemicalml/cml/schema3/system.rb +13 -0
- data/lib/chemicalml/cml/schema3/table.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_cell.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_content.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_header.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_header_cell.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_row.rb +13 -0
- data/lib/chemicalml/cml/schema3/table_row_list.rb +13 -0
- data/lib/chemicalml/cml/schema3/torsion.rb +13 -0
- data/lib/chemicalml/cml/schema3/transform3.rb +13 -0
- data/lib/chemicalml/cml/schema3/transition_state.rb +13 -0
- data/lib/chemicalml/cml/schema3/unit.rb +15 -0
- data/lib/chemicalml/cml/schema3/unit_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/unit_type.rb +15 -0
- data/lib/chemicalml/cml/schema3/unit_type_list.rb +15 -0
- data/lib/chemicalml/cml/schema3/vector3.rb +13 -0
- data/lib/chemicalml/cml/schema3/xaxis.rb +13 -0
- data/lib/chemicalml/cml/schema3/yaxis.rb +13 -0
- data/lib/chemicalml/cml/schema3/z_matrix.rb +13 -0
- data/lib/chemicalml/cml/schema3.rb +132 -17
- data/lib/chemicalml/cml/wire_class_registry.rb +42 -0
- data/lib/chemicalml/cml.rb +136 -44
- data/lib/chemicalml/context_configuration.rb +8 -2
- data/lib/chemicalml/convention/base.rb +17 -3
- data/lib/chemicalml/convention/compchem/constraints/array_rules.rb +44 -0
- data/lib/chemicalml/convention/compchem/constraints/calculation_requires_finalization.rb +28 -0
- data/lib/chemicalml/convention/compchem/constraints/compchem_module_must_contain_job_list.rb +4 -4
- data/lib/chemicalml/convention/compchem/constraints/environment_at_most_one_property_list.rb +26 -0
- data/lib/chemicalml/convention/compchem/constraints/environment_must_not_contain_parameter.rb +28 -0
- data/lib/chemicalml/convention/compchem/constraints/finalization_at_most_one_molecule.rb +26 -0
- data/lib/chemicalml/convention/compchem/constraints/finalization_at_most_one_property_list.rb +26 -0
- data/lib/chemicalml/convention/compchem/constraints/finalization_must_not_contain_parameter.rb +27 -0
- data/lib/chemicalml/convention/compchem/constraints/initialization_at_most_one_molecule.rb +26 -0
- data/lib/chemicalml/convention/compchem/constraints/initialization_at_most_one_parameter_list.rb +26 -0
- data/lib/chemicalml/convention/compchem/constraints/initialization_must_not_contain_property.rb +28 -0
- data/lib/chemicalml/convention/compchem/constraints/job_list_module_must_have_id.rb +24 -0
- data/lib/chemicalml/convention/compchem/constraints/job_module_at_most_one_environment.rb +25 -0
- data/lib/chemicalml/convention/compchem/constraints/job_module_at_most_one_finalization.rb +25 -0
- data/lib/chemicalml/convention/compchem/constraints/job_module_must_have_id.rb +24 -0
- data/lib/chemicalml/convention/compchem/constraints/job_must_contain_initialization.rb +6 -9
- data/lib/chemicalml/convention/compchem/constraints/matrix_rules.rb +48 -0
- data/lib/chemicalml/convention/compchem/constraints/module_predicates.rb +50 -0
- data/lib/chemicalml/convention/compchem/constraints/scalar_units.rb +42 -0
- data/lib/chemicalml/convention/compchem/constraints.rb +36 -2
- data/lib/chemicalml/convention/compchem.rb +16 -0
- data/lib/chemicalml/convention/constraint.rb +31 -18
- data/lib/chemicalml/convention/coordinator.rb +89 -0
- data/lib/chemicalml/convention/detection.rb +33 -0
- data/lib/chemicalml/convention/dictionary/constraints/dictionary_must_have_namespace.rb +28 -0
- data/lib/chemicalml/convention/dictionary/constraints/dictionary_namespace_should_end_with_slash_or_hash.rb +32 -0
- data/lib/chemicalml/convention/dictionary/constraints/entry_id_must_match_pattern.rb +33 -0
- data/lib/chemicalml/convention/dictionary/constraints/entry_ids_unique_within_dictionary.rb +3 -3
- data/lib/chemicalml/convention/dictionary/constraints/entry_must_contain_definition.rb +28 -0
- data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_id_and_term.rb +5 -5
- data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_unit_type.rb +30 -0
- data/lib/chemicalml/convention/dictionary/constraints/entry_units_co_constraints.rb +44 -0
- data/lib/chemicalml/convention/dictionary/constraints.rb +12 -0
- data/lib/chemicalml/convention/dictionary.rb +6 -0
- data/lib/chemicalml/convention/molecular/constraints/atom_array_must_be_child_of_molecule_or_formula.rb +40 -0
- data/lib/chemicalml/convention/molecular/constraints/atom_array_must_contain_atoms.rb +3 -3
- data/lib/chemicalml/convention/molecular/constraints/atom_coordinates_must_be_paired.rb +32 -0
- data/lib/chemicalml/convention/molecular/constraints/atom_id_must_match_pattern.rb +26 -0
- data/lib/chemicalml/convention/molecular/constraints/atom_ids_unique_within_molecule.rb +2 -2
- data/lib/chemicalml/convention/molecular/constraints/atom_must_have_element_type.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/atom_must_have_id.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_array_must_be_child_of_molecule.rb +36 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_ids_unique_within_molecule.rb +43 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_must_have_atom_refs2.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_must_have_order.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_must_reference_atoms_in_same_molecule.rb +3 -3
- data/lib/chemicalml/convention/molecular/constraints/bond_order_other_must_have_dict_ref.rb +33 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_order_should_not_be_numeric.rb +27 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_stereo_cis_trans_must_have_atom_refs4.rb +45 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_stereo_other_must_have_dict_ref.rb +32 -0
- data/lib/chemicalml/convention/molecular/constraints/bond_stereo_wedge_hash_must_have_atom_refs2.rb +45 -0
- data/lib/chemicalml/convention/molecular/constraints/molecule_atom_array_mutually_exclusive_with_children.rb +32 -0
- data/lib/chemicalml/convention/molecular/constraints/molecule_bond_array_mutually_exclusive_with_children.rb +31 -0
- data/lib/chemicalml/convention/molecular/constraints/molecule_count_must_not_appear_on_top_level.rb +34 -0
- data/lib/chemicalml/convention/molecular/constraints/molecule_must_have_id.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/property_must_have_dict_ref.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints/scalar_must_have_data_type.rb +20 -0
- data/lib/chemicalml/convention/molecular/constraints.rb +40 -3
- data/lib/chemicalml/convention/molecular.rb +20 -0
- data/lib/chemicalml/convention/registry.rb +17 -0
- data/lib/chemicalml/convention/unit_dictionary/constraints/unit_list_must_contain_at_least_one_unit.rb +28 -0
- data/lib/chemicalml/convention/unit_dictionary/constraints/unit_list_must_have_namespace.rb +36 -0
- data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_contain_definition.rb +27 -0
- data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_id.rb +27 -0
- data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_symbol_and_unit_type.rb +3 -3
- data/lib/chemicalml/convention/unit_dictionary/constraints.rb +9 -1
- data/lib/chemicalml/convention/unit_dictionary.rb +4 -0
- data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_id_must_match_pattern.rb +31 -0
- data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_list_must_contain_at_least_one_unit_type.rb +27 -0
- data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_list_must_have_namespace.rb +35 -0
- data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_contain_definition.rb +27 -0
- data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_have_id_and_name.rb +5 -5
- data/lib/chemicalml/convention/unit_type_dictionary/constraints.rb +9 -1
- data/lib/chemicalml/convention/unit_type_dictionary.rb +4 -0
- data/lib/chemicalml/convention/validation_report.rb +63 -0
- data/lib/chemicalml/convention.rb +11 -0
- data/lib/chemicalml/dictionary/entry.rb +6 -6
- data/lib/chemicalml/dictionary/enum.rb +1 -1
- data/lib/chemicalml/dictionary/link.rb +3 -3
- data/lib/chemicalml/dictionary/loader.rb +19 -19
- data/lib/chemicalml/dictionary/model.rb +5 -5
- data/lib/chemicalml/dictionary/registry.rb +9 -9
- data/lib/chemicalml/version.rb +1 -1
- data/lib/chemicalml/versioned_parser.rb +71 -12
- data/lib/chemicalml.rb +4 -3
- metadata +594 -69
- data/lib/chemicalml/cml/array.rb +0 -10
- data/lib/chemicalml/cml/atom.rb +0 -10
- data/lib/chemicalml/cml/atom_array.rb +0 -10
- data/lib/chemicalml/cml/atom_parity.rb +0 -10
- data/lib/chemicalml/cml/bond.rb +0 -10
- data/lib/chemicalml/cml/bond_array.rb +0 -10
- data/lib/chemicalml/cml/bond_stereo.rb +0 -10
- data/lib/chemicalml/cml/cml_module.rb +0 -10
- data/lib/chemicalml/cml/dictionary.rb +0 -10
- data/lib/chemicalml/cml/dictionary_entry.rb +0 -10
- data/lib/chemicalml/cml/document.rb +0 -10
- data/lib/chemicalml/cml/formula.rb +0 -10
- data/lib/chemicalml/cml/identifier.rb +0 -10
- data/lib/chemicalml/cml/label.rb +0 -10
- data/lib/chemicalml/cml/list.rb +0 -10
- data/lib/chemicalml/cml/matrix.rb +0 -10
- data/lib/chemicalml/cml/metadata.rb +0 -10
- data/lib/chemicalml/cml/metadata_list.rb +0 -10
- data/lib/chemicalml/cml/molecule.rb +0 -10
- data/lib/chemicalml/cml/name.rb +0 -10
- data/lib/chemicalml/cml/parameter.rb +0 -10
- data/lib/chemicalml/cml/parameter_list.rb +0 -10
- data/lib/chemicalml/cml/product.rb +0 -10
- data/lib/chemicalml/cml/product_list.rb +0 -10
- data/lib/chemicalml/cml/property.rb +0 -10
- data/lib/chemicalml/cml/property_list.rb +0 -10
- data/lib/chemicalml/cml/reactant.rb +0 -10
- data/lib/chemicalml/cml/reactant_list.rb +0 -10
- data/lib/chemicalml/cml/reaction.rb +0 -10
- data/lib/chemicalml/cml/reaction_list.rb +0 -10
- data/lib/chemicalml/cml/scalar.rb +0 -10
- data/lib/chemicalml/cml/substance.rb +0 -10
- data/lib/chemicalml/cml/translator/value_translations.rb +0 -265
- data/lib/chemicalml/cml/translator.rb +0 -233
- data/lib/chemicalml/cml/unit.rb +0 -10
- data/lib/chemicalml/cml/unit_list.rb +0 -10
- data/lib/chemicalml/cml/unit_type.rb +0 -10
- data/lib/chemicalml/cml/unit_type_list.rb +0 -10
- data/lib/chemicalml/cml/wire_class_macro.rb +0 -45
- data/lib/chemicalml/model/atom.rb +0 -40
- data/lib/chemicalml/model/bond.rb +0 -33
- data/lib/chemicalml/model/cml_array.rb +0 -27
- data/lib/chemicalml/model/cml_module.rb +0 -45
- data/lib/chemicalml/model/document.rb +0 -29
- data/lib/chemicalml/model/formula.rb +0 -34
- data/lib/chemicalml/model/identifier.rb +0 -21
- data/lib/chemicalml/model/label.rb +0 -21
- data/lib/chemicalml/model/matrix.rb +0 -29
- data/lib/chemicalml/model/metadata.rb +0 -23
- data/lib/chemicalml/model/metadata_list.rb +0 -25
- data/lib/chemicalml/model/molecule.rb +0 -38
- data/lib/chemicalml/model/name.rb +0 -21
- data/lib/chemicalml/model/node.rb +0 -45
- data/lib/chemicalml/model/parameter.rb +0 -27
- data/lib/chemicalml/model/parameter_list.rb +0 -25
- data/lib/chemicalml/model/product.rb +0 -21
- data/lib/chemicalml/model/product_list.rb +0 -21
- data/lib/chemicalml/model/property.rb +0 -28
- data/lib/chemicalml/model/property_list.rb +0 -25
- data/lib/chemicalml/model/reactant.rb +0 -21
- data/lib/chemicalml/model/reactant_list.rb +0 -21
- data/lib/chemicalml/model/reaction.rb +0 -41
- data/lib/chemicalml/model/reaction_list.rb +0 -23
- data/lib/chemicalml/model/scalar.rb +0 -25
- data/lib/chemicalml/model/substance.rb +0 -25
- data/lib/chemicalml/model.rb +0 -38
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 40 — UnitType-dictionary convention: full upstream constraint coverage
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`reference-docs/conventions/unitType-dictionary.md` requires
|
|
6
|
+
namespace, definition child, and id pattern. The gem ships 1 rule.
|
|
7
|
+
|
|
8
|
+
## Current constraints (1)
|
|
9
|
+
|
|
10
|
+
UnitTypeMustHaveIdAndName.
|
|
11
|
+
|
|
12
|
+
## Missing rules
|
|
13
|
+
|
|
14
|
+
- `unitTypeList` MUST have `namespace` attribute.
|
|
15
|
+
- `unitType` MUST contain a single `definition` child.
|
|
16
|
+
- `unitType` `id` MUST match `[A-Za-z][A-Za-z0-9._-]*`.
|
|
17
|
+
- `unitTypeList` MUST contain at least one `unitType` child.
|
|
18
|
+
|
|
19
|
+
## Implementation
|
|
20
|
+
|
|
21
|
+
NodeConstraint subclasses. Register in
|
|
22
|
+
`lib/chemicalml/convention/unit_type_dictionary.rb`.
|
|
23
|
+
|
|
24
|
+
## Acceptance
|
|
25
|
+
|
|
26
|
+
- 4 new constraint classes registered.
|
|
27
|
+
- Per-class spec under `spec/chemicalml/convention/unit_type_dictionary/`.
|
|
28
|
+
- Full suite still green.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 41 — Expand canonical Model layer for chemistry completeness
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
The canonical `Model::*` layer has 28 classes but the CML wire layer
|
|
6
|
+
has 121. Many chemistry concepts (crystallography, spectroscopy,
|
|
7
|
+
z-matrix, isotopes, samples, reaction schemes) have no canonical
|
|
8
|
+
representation, forcing callers to use wire classes directly —
|
|
9
|
+
breaking the "all adapters speak the canonical model" invariant.
|
|
10
|
+
|
|
11
|
+
## New Model classes
|
|
12
|
+
|
|
13
|
+
- `Model::Lattice` — `lattice_type`, `a/b/c/alpha/beta/gamma`,
|
|
14
|
+
children: cell_parameters, lattice_vectors
|
|
15
|
+
- `Model::Crystal` — wraps lattice + scalar/array geometry
|
|
16
|
+
- `Model::ZMatrix` — internal coordinates (atomRefs + lengths/angles)
|
|
17
|
+
- `Model::Isotope` — number, spin, abundance, mass
|
|
18
|
+
- `Model::IsotopeList` — collection
|
|
19
|
+
- `Model::Sample` — sample metadata (state, amount, count)
|
|
20
|
+
- `Model::Spectrum` — `id`, `title`, `dict_ref`, xaxis/yaxis,
|
|
21
|
+
spectrum_data
|
|
22
|
+
- `Model::Peak` — `atomRefs`, `xValue`, `yValue`, `multiplicity`,
|
|
23
|
+
`peakShape`
|
|
24
|
+
- `Model::PeakList` — collection
|
|
25
|
+
- `Model::ReactionScheme` — `id`, `name`, reaction_step_list
|
|
26
|
+
- `Model::ReactionStep` — `atoms`, `reactiveCentre`, `type`
|
|
27
|
+
- `Model::Spectator` / `Model::SpectatorList`
|
|
28
|
+
- `Model::MoleculeList` — collection (distinct from `molecule[]`)
|
|
29
|
+
- `Model::Observation` — observation record
|
|
30
|
+
|
|
31
|
+
## Implementation pattern
|
|
32
|
+
|
|
33
|
+
Each class subclasses `Model::Node` and provides:
|
|
34
|
+
- `attr_accessor` for every value
|
|
35
|
+
- `initialize` with keyword args + sensible defaults
|
|
36
|
+
- `children` returning child Model nodes
|
|
37
|
+
- `value_attributes` returning the equality/hash snapshot
|
|
38
|
+
|
|
39
|
+
## Acceptance
|
|
40
|
+
|
|
41
|
+
- 14 new Model classes.
|
|
42
|
+
- Per-class spec under `spec/chemicalml/model/`.
|
|
43
|
+
- Full suite still green.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 42 — Wire new Model classes through the translator
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
New `Model::*` classes from TODO 41 are inert until the translator
|
|
6
|
+
maps them to/from CML wire format.
|
|
7
|
+
|
|
8
|
+
## Translator additions
|
|
9
|
+
|
|
10
|
+
- `molecule_to_canonical`: include `crystal`, `spectra`,
|
|
11
|
+
`spectra_lists`, `z_matrix`, `isotope_list`, `sample` fields.
|
|
12
|
+
- `molecule_from_canonical`: reverse of above.
|
|
13
|
+
- New helpers: `crystal_to/from_canonical`,
|
|
14
|
+
`lattice_to/from_canonical`, `spectrum_to/from_canonical`,
|
|
15
|
+
`peak_to/from_canonical`, `z_matrix_to/from_canonical`,
|
|
16
|
+
`isotope_to/from_canonical`, `sample_to/from_canonical`,
|
|
17
|
+
`reaction_scheme_to/from_canonical`, `spectator_to/from_canonical`.
|
|
18
|
+
- `module_to_canonical`: stop hardcoding `lists: []` — collect
|
|
19
|
+
`<list>` children into Model::List collection.
|
|
20
|
+
|
|
21
|
+
## Implementation
|
|
22
|
+
|
|
23
|
+
All schema-aware (take `schema:` keyword). Use `WireClassRegistry`
|
|
24
|
+
for every wire class lookup. Add to existing
|
|
25
|
+
`translator.rb` + `translator/value_translations.rb`.
|
|
26
|
+
|
|
27
|
+
## Acceptance
|
|
28
|
+
|
|
29
|
+
- Round-trip spec: parse CML with crystal/spectrum/zMatrix →
|
|
30
|
+
Model → serialize → same CML (canon-compared).
|
|
31
|
+
- Full suite still green.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 43 — Refactor Dictionary::Model away from hand-rolled `to_h`
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`lib/chemicalml/dictionary/model.rb`, `entry.rb`, `enum.rb`, `link.rb`
|
|
6
|
+
define `def to_h` — hand-rolled serialization. The project's coding
|
|
7
|
+
standard #2 forbids this. The Loader uses `to_h` to round-trip YAML,
|
|
8
|
+
but the canonical Model layer uses `value_attributes` for the same
|
|
9
|
+
purpose. Align Dictionary with the rest of the codebase.
|
|
10
|
+
|
|
11
|
+
## Current state
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
class Model
|
|
15
|
+
def to_h
|
|
16
|
+
{ namespace: ..., prefix: ..., title: ...,
|
|
17
|
+
description: ..., entries: entries.map(&:to_h) }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Same pattern in Entry, Enum, Link.
|
|
23
|
+
|
|
24
|
+
## Target
|
|
25
|
+
|
|
26
|
+
- Drop `def to_h`.
|
|
27
|
+
- `value_attributes` returns the same shape (used by Loader to dump
|
|
28
|
+
YAML, by `==`/`hash` for equality).
|
|
29
|
+
- Loader's `dump_to_hash` calls `model.value_attributes`.
|
|
30
|
+
|
|
31
|
+
If Loader needs a specific YAML shape (string keys vs symbol keys),
|
|
32
|
+
add a thin `as_yaml` adapter — but the model itself only exposes
|
|
33
|
+
`value_attributes`.
|
|
34
|
+
|
|
35
|
+
## Acceptance
|
|
36
|
+
|
|
37
|
+
- No `def to_h` / `to_hash` anywhere in `lib/chemicalml/dictionary/`.
|
|
38
|
+
- Loader round-trip still works (specs pass).
|
|
39
|
+
- Full suite still green.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 44 — Fix SCHEMA3_ONLY and add Schema24 Module class
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Actual XSD diff (via `grep '<xsd:element name='`):
|
|
6
|
+
|
|
7
|
+
- Schema3 has **121** elements. Our `Elements::ALL` matches.
|
|
8
|
+
- Schema24 has **137** elements (a superset of Schema3 for most parts).
|
|
9
|
+
- **`anyCml` is in Schema3 but NOT Schema24** → must be in
|
|
10
|
+
`SCHEMA3_ONLY`.
|
|
11
|
+
- `module` is in BOTH schemas → currently listed in SCHEMA3_ONLY
|
|
12
|
+
is **wrong**.
|
|
13
|
+
|
|
14
|
+
Current `SCHEMA3_ONLY = %i[Module]` is incorrect and Schema24 is
|
|
15
|
+
missing its `cml_module.rb` wire class entirely.
|
|
16
|
+
|
|
17
|
+
## Fix
|
|
18
|
+
|
|
19
|
+
1. `lib/chemicalml/cml/elements.rb`:
|
|
20
|
+
`SCHEMA3_ONLY = %i[AnyCml].freeze`
|
|
21
|
+
2. Create `lib/chemicalml/cml/schema24/cml_module.rb` mirroring
|
|
22
|
+
`schema3/cml_module.rb`.
|
|
23
|
+
3. Update Schema24 autoload list to include `cml_module`.
|
|
24
|
+
4. Update translator comment ("Schema 3 only — Schema 2.4 lacks
|
|
25
|
+
`<module>`") — no longer accurate.
|
|
26
|
+
5. Verify Schema24 Configuration registers Module.
|
|
27
|
+
|
|
28
|
+
## Schema24-only elements (not modeled yet)
|
|
29
|
+
|
|
30
|
+
Schema24 has 16 elements not in Schema3: alternative, annotation,
|
|
31
|
+
appinfo, arg, complexObject, enumeration, expression, float,
|
|
32
|
+
floatArray, integer, integerArray, operator, relatedEntry, string,
|
|
33
|
+
stringArray, tcell, trow.
|
|
34
|
+
|
|
35
|
+
These are Schema-2.4-only legacy elements. They're outside the
|
|
36
|
+
gem's current scope (the gem focuses on Schema 3 + intersection).
|
|
37
|
+
Document them in CLAUDE.md so future contributors know.
|
|
38
|
+
|
|
39
|
+
## Acceptance
|
|
40
|
+
|
|
41
|
+
- SCHEMA3_ONLY = %i[AnyCml].
|
|
42
|
+
- Schema24::CmlModule wire class exists, parses, serializes.
|
|
43
|
+
- Translator's module_from_canonical works for schema24.
|
|
44
|
+
- Full suite still green.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 45 — Documentation cleanup and final spec verification
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Stale comments and docs rot fast. After TODOs 36–44 land, sweep the
|
|
6
|
+
codebase for outdated references and run the full suite end-to-end.
|
|
7
|
+
|
|
8
|
+
## Updates
|
|
9
|
+
|
|
10
|
+
- `lib/chemicalml/cml.rb`: comment says "All 36 aliases load from a
|
|
11
|
+
single file" — actually 121 now.
|
|
12
|
+
- `CLAUDE.md`: refresh any counts (121 elements, ~45 constraints,
|
|
13
|
+
14 model classes added, etc.).
|
|
14
|
+
- `CLAUDE.md`: note Schema24-only legacy elements not modeled.
|
|
15
|
+
- Verify `bundle exec rspec` is fully green.
|
|
16
|
+
- Verify `bundle exec rubocop` is clean (or autocorrect what's
|
|
17
|
+
safe).
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
- All counts in docs match the actual codebase.
|
|
22
|
+
- Full rspec suite passes.
|
|
23
|
+
- Rubocop reports no new offenses.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 46 — Fix LatticeVector content attribute
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`<latticeVector>1 0 0</latticeVector>` carries vector components as
|
|
6
|
+
element content. `lib/chemicalml/cml/base/lattice_vector.rb` declares
|
|
7
|
+
only id/title/dictRef/convention/units — **no content attribute**.
|
|
8
|
+
The translator's workaround maps `lv.content` ↔ wire `units` —
|
|
9
|
+
semantically wrong (units ≠ vector components).
|
|
10
|
+
|
|
11
|
+
## Fix
|
|
12
|
+
|
|
13
|
+
1. Add `attribute :content, :string` + `map_content` to Base::LatticeVector.
|
|
14
|
+
2. Update Model::LatticeVector to carry `units` and `content` as
|
|
15
|
+
independent fields.
|
|
16
|
+
3. Update translator `lattice_vector_to/from_canonical` to map both.
|
|
17
|
+
4. Spec round-trip.
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
- `<latticeVector units="unit:nm">1 0 0</latticeVector>` round-trips
|
|
22
|
+
with units and content preserved.
|
|
23
|
+
- Translator spec covers the fix.
|
|
24
|
+
- Full suite green.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 47 — Wire Molecule#crystal/spectra/property_lists through translator
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`Base::Molecule` declares `crystal`, `spectra`, `property_lists`
|
|
6
|
+
children, but `Model::Molecule` doesn't have those fields and
|
|
7
|
+
`molecule_to_canonical/from_canonical` silently drops them. Silent
|
|
8
|
+
data loss.
|
|
9
|
+
|
|
10
|
+
## Fix
|
|
11
|
+
|
|
12
|
+
1. Add `crystal`, `spectra`, `property_lists` accessors to
|
|
13
|
+
`Model::Molecule`.
|
|
14
|
+
2. Wire through `molecule_to_canonical` (read wire, build Model) and
|
|
15
|
+
`molecule_from_canonical` (read Model, build wire).
|
|
16
|
+
3. Update `Model::Molecule#children` and `#value_attributes`.
|
|
17
|
+
4. Spec round-trip with a molecule containing crystal + propertyList.
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
- A molecule with `<crystal>` and `<propertyList>` children round-trips
|
|
22
|
+
through canonical without loss.
|
|
23
|
+
- Full suite green.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 48 — Add Model::List and wire Module#lists
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`Model::Module` has a `lists` accessor but `module_to_canonical`
|
|
6
|
+
hardcodes `lists: []`. There is no `Model::List` canonical class, so
|
|
7
|
+
wire `<list>` children of `<module>` are silently dropped.
|
|
8
|
+
|
|
9
|
+
## Fix
|
|
10
|
+
|
|
11
|
+
1. Add `Model::List` mirroring `Base::List` shape: id/title/dictRef/
|
|
12
|
+
convention + scalar/array/matrix/list children.
|
|
13
|
+
2. Wire `module_to_canonical` to map `wire_module.lists` (drop the
|
|
14
|
+
hardcoded `[]`).
|
|
15
|
+
3. Wire `module_from_canonical` reverse.
|
|
16
|
+
4. Spec round-trip.
|
|
17
|
+
|
|
18
|
+
## Acceptance
|
|
19
|
+
|
|
20
|
+
- A `<module>` containing a `<list>` child round-trips without loss.
|
|
21
|
+
- Full suite green.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 49 — Add more chemistry Model classes
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Several chemically-meaningful CML elements still lack canonical Model
|
|
6
|
+
classes, forcing callers to use wire classes directly and breaking the
|
|
7
|
+
"all adapters speak canonical" invariant.
|
|
8
|
+
|
|
9
|
+
## New Model classes
|
|
10
|
+
|
|
11
|
+
- `Model::Torsion` — `<torsion>` (4-atom dihedral)
|
|
12
|
+
- `Model::Angle` — `<angle>` (3-atom angle)
|
|
13
|
+
- `Model::Length` — `<length>` (2-atom distance)
|
|
14
|
+
- `Model::Action` / `Model::ActionList` — `<action>` / `<actionList>`
|
|
15
|
+
- `Model::Map` — `<map>` (atom mapping across reaction)
|
|
16
|
+
- `Model::Fragment` / `Model::FragmentList` — substructure references
|
|
17
|
+
- `Model::ReactionStepList` — list of `<reactionStep>`
|
|
18
|
+
- `Model::ReactiveCentre` — `<reactiveCentre>`
|
|
19
|
+
- `Model::TransitionState` — `<transitionState>`
|
|
20
|
+
- `Model::PeakGroup` — `<peakGroup>`
|
|
21
|
+
- `Model::SpectrumList` — `<spectrumList>`
|
|
22
|
+
- `Model::SpectrumData` — `<spectrumData>`
|
|
23
|
+
- `Model::Region` — `<region>`
|
|
24
|
+
|
|
25
|
+
## Wire translator mappings
|
|
26
|
+
|
|
27
|
+
For each new Model class, add `*_to_canonical` / `*_from_canonical`
|
|
28
|
+
helpers. Most are simple (id/title/dictRef/convention).
|
|
29
|
+
|
|
30
|
+
## Acceptance
|
|
31
|
+
|
|
32
|
+
- Each new Model class has instantiation + value_attributes specs.
|
|
33
|
+
- Translator mappings round-trip.
|
|
34
|
+
- Full suite green.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 50 — ValidationReport with severity filtering
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`Convention.validate` returns a flat array of `Violation`s. Callers
|
|
6
|
+
that want only errors or only warnings have to filter manually. Add
|
|
7
|
+
a `ValidationReport` value object that wraps the array and exposes
|
|
8
|
+
severity-based views.
|
|
9
|
+
|
|
10
|
+
## API
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
report = Chemicalml::Convention::ValidationReport.new(violations)
|
|
14
|
+
report.errors # [Violation] with severity == :error
|
|
15
|
+
report.warnings # [Violation] with severity == :warning
|
|
16
|
+
report.ok? # errors.empty?
|
|
17
|
+
report.has_warnings? # warnings.any?
|
|
18
|
+
report.violations # raw array (backward compat)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Also add `Convention.validate_report(doc)` returning a
|
|
22
|
+
`ValidationReport` instead of an array. Existing `validate` keeps its
|
|
23
|
+
array return shape (backward compatible).
|
|
24
|
+
|
|
25
|
+
## Acceptance
|
|
26
|
+
|
|
27
|
+
- New spec covers all 5 helpers.
|
|
28
|
+
- Existing validate specs unchanged.
|
|
29
|
+
- Full suite green.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 51 — Convention auto-detection
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Currently a caller has to know the convention QName and pass it to
|
|
6
|
+
`Convention::Registry.validate(doc, qname: "convention:molecular")`.
|
|
7
|
+
The document itself declares its convention via the `convention`
|
|
8
|
+
attribute on its root element — the gem should be able to detect and
|
|
9
|
+
dispatch automatically.
|
|
10
|
+
|
|
11
|
+
## API
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
Chemicalml::Convention::Registry.detect_and_validate(doc)
|
|
15
|
+
# → [Violation, ...] (or ValidationReport)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Internally:
|
|
19
|
+
1. Find the root element (Document or Molecule or Module).
|
|
20
|
+
2. Read its `convention` attribute.
|
|
21
|
+
3. Look up in `Registry`.
|
|
22
|
+
4. If found → run `convention.validate(doc)`.
|
|
23
|
+
5. If not found → raise ArgumentError naming the convention.
|
|
24
|
+
|
|
25
|
+
## Acceptance
|
|
26
|
+
|
|
27
|
+
- Spec: a doc with `convention="convention:molecular"` auto-validates.
|
|
28
|
+
- Spec: unknown convention raises ArgumentError.
|
|
29
|
+
- Spec: doc without convention raises ArgumentError.
|
|
30
|
+
- Full suite green.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 52 — Schema24 legacy elements (selective)
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Schema 2.4 XSD declares 17 elements not in Schema 3. Three of them
|
|
6
|
+
are useful enough to model: `annotation` (documentation wrapper),
|
|
7
|
+
`appinfo` (application info), `enumeration` (dictionary enum, used
|
|
8
|
+
by entries that predate the schema3 enum attribute).
|
|
9
|
+
|
|
10
|
+
The other 14 (`alternative`, `arg`, `complexObject`, `expression`,
|
|
11
|
+
`float`, `floatArray`, `integer`, `integerArray`, `operator`,
|
|
12
|
+
`relatedEntry`, `string`, `stringArray`, `tcell`, `trow`) are either
|
|
13
|
+
redundant with Schema 3's unified `scalar`/`array`/`table` or relate
|
|
14
|
+
to legacy expression machinery. Out of scope for now.
|
|
15
|
+
|
|
16
|
+
## Implementation
|
|
17
|
+
|
|
18
|
+
- Add `Base::Annotation`, `Base::Appinfo`, `Base::Enumeration`.
|
|
19
|
+
- Add `Role::Annotation`, `Role::Appinfo`, `Role::Enumeration`.
|
|
20
|
+
- Add `Schema24::Annotation`, `Schema24::Appinfo`, `Schema24::Enumeration`.
|
|
21
|
+
- Add to `Elements::ALL` with new `SCHEMA24_ONLY` list.
|
|
22
|
+
- Schema3 skips these; Schema24 registers them.
|
|
23
|
+
|
|
24
|
+
## Acceptance
|
|
25
|
+
|
|
26
|
+
- Three new wire classes registered for Schema24 only.
|
|
27
|
+
- Schema3 lookup raises ArgumentError for these (not in Schema 3).
|
|
28
|
+
- Full suite green.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 53 — Round-trip integration specs
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Per-element translator specs cover individual `*_to_canonical` /
|
|
6
|
+
`*_from_canonical` calls. They miss integration issues — wire-format
|
|
7
|
+
mismatches, attribute renames, namespace leaks — that only surface
|
|
8
|
+
when you go XML → canonical → XML → canonical and compare.
|
|
9
|
+
|
|
10
|
+
## Specs
|
|
11
|
+
|
|
12
|
+
A new `spec/chemicalml/integration/round_trip_spec.rb` that, for each
|
|
13
|
+
fixture under `spec/fixtures/schema3/`:
|
|
14
|
+
|
|
15
|
+
1. Parse the CML XML → wire tree.
|
|
16
|
+
2. Translate wire → canonical Model.
|
|
17
|
+
3. Translate canonical → wire.
|
|
18
|
+
4. Serialize wire → XML.
|
|
19
|
+
5. Re-parse → second wire tree.
|
|
20
|
+
6. Compare first and second wire trees via `value_attributes`.
|
|
21
|
+
|
|
22
|
+
Uses real wire instances throughout (no doubles per project rule).
|
|
23
|
+
Also includes synthetic minimal docs for: crystal-bearing molecule,
|
|
24
|
+
spectrum-bearing molecule, zMatrix molecule, isotopeList molecule.
|
|
25
|
+
|
|
26
|
+
## Acceptance
|
|
27
|
+
|
|
28
|
+
- Every fixture round-trips.
|
|
29
|
+
- Synthetic minimal docs round-trip.
|
|
30
|
+
- Full suite green.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 54 — Document VersionedParser namespace shim
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`lib/chemicalml/versioned_parser.rb` uses regex for two pre-processing
|
|
6
|
+
steps before delegating to `lutaml-model`:
|
|
7
|
+
|
|
8
|
+
1. `root_element_of(xml)` — peeks the XML for the root element local
|
|
9
|
+
name so the parser can dispatch to the right wire class.
|
|
10
|
+
2. `inject_namespace(xml, uri, root)` — when the caller passes
|
|
11
|
+
`namespace_exist: false`, injects `xmlns="..."` into the root
|
|
12
|
+
start tag.
|
|
13
|
+
|
|
14
|
+
Both are pre-processing shims. The actual parse goes through
|
|
15
|
+
`Lutaml::Model::Serializable.from_xml` (line 45). Neither function
|
|
16
|
+
serializes, deserializes, or constructs XML nodes — they're string
|
|
17
|
+
pre-processing for input normalization.
|
|
18
|
+
|
|
19
|
+
The user asked to confirm this. The answer:
|
|
20
|
+
|
|
21
|
+
- All actual XML parsing and serialization goes through lutaml-model.
|
|
22
|
+
- 242 wire classes extend `Lutaml::Model::Serializable`.
|
|
23
|
+
- Zero `def to_xml`/`from_xml`/`to_h`/`from_h` on any model class.
|
|
24
|
+
- Zero Nokogiri/REXML references in `lib/`.
|
|
25
|
+
- The two regex helpers in `versioned_parser.rb` are pre-processing
|
|
26
|
+
for input normalization, not serialization. They are explicitly
|
|
27
|
+
documented as such.
|
|
28
|
+
|
|
29
|
+
## Action
|
|
30
|
+
|
|
31
|
+
- Add a clear comment block at the top of `versioned_parser.rb`
|
|
32
|
+
explaining the boundary.
|
|
33
|
+
- No code change.
|
|
34
|
+
|
|
35
|
+
## Acceptance
|
|
36
|
+
|
|
37
|
+
- Comment added.
|
|
38
|
+
- Full suite green.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 55 — Fix Model::Molecule missing attributes (correctness)
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
`Base::Molecule` declares `spin_multiplicity`, `dict_ref`,
|
|
6
|
+
`convention`, `chirality` attributes, but `Model::Molecule` doesn't
|
|
7
|
+
have them and the translator drops them silently. These are
|
|
8
|
+
chemically important (chirality in particular).
|
|
9
|
+
|
|
10
|
+
## Fix
|
|
11
|
+
|
|
12
|
+
Add `spin_multiplicity`, `dict_ref`, `convention`, `chirality` to
|
|
13
|
+
`Model::Molecule`. Update translator molecule_to_canonical and
|
|
14
|
+
molecule_from_canonical to map them.
|
|
15
|
+
|
|
16
|
+
## Acceptance
|
|
17
|
+
|
|
18
|
+
- All 4 attributes round-trip through translator.
|
|
19
|
+
- Existing specs unchanged.
|
|
20
|
+
- Full suite green.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 56 — Geometry Model classes
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
CML declares 6 geometry primitives (`point3`, `vector3`, `line3`,
|
|
6
|
+
`plane3`, `sphere3`, `transform3`) plus `cellParameter` and
|
|
7
|
+
`dimension` — all share the same shape (id/title/dictRef/convention +
|
|
8
|
+
content). They're used as children of `atom`, `molecule`, `crystal`,
|
|
9
|
+
etc. Without canonical Models, callers must use wire classes directly.
|
|
10
|
+
|
|
11
|
+
## Implementation
|
|
12
|
+
|
|
13
|
+
One Model class per element. Each carries `id`, `title`, `dict_ref`,
|
|
14
|
+
`convention`, `content` (the geometry string). Identical shape, so
|
|
15
|
+
specs can be parametrized.
|
|
16
|
+
|
|
17
|
+
For `cellParameter`: also `cellType` attribute (per Schema 3 XSD).
|
|
18
|
+
For `dimension`: also `name` attribute.
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
|
|
22
|
+
- 8 new Model classes registered.
|
|
23
|
+
- Per-class spec.
|
|
24
|
+
- Full suite green.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 57 — Compchem Model classes
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Schema 3 declares 10 compchem-specific elements not yet modeled:
|
|
6
|
+
`gradient`, `eigen`, `kpoint`, `kpointList`, `band`, `bandList`,
|
|
7
|
+
`basisSet`, `atomicBasisFunction`, `particle`, `electron`. All
|
|
8
|
+
are common in computational chemistry output.
|
|
9
|
+
|
|
10
|
+
## Implementation
|
|
11
|
+
|
|
12
|
+
- `Model::Gradient` — id/title/dictRef/convention/units/content
|
|
13
|
+
- `Model::Eigen` — id/title/dictRef/convention/units/type/content
|
|
14
|
+
- `Model::Kpoint` / `Model::KpointList`
|
|
15
|
+
- `Model::Band` / `Model::BandList`
|
|
16
|
+
- `Model::BasisSet` / `Model::AtomicBasisFunction`
|
|
17
|
+
- `Model::Particle` / `Model::Electron`
|
|
18
|
+
|
|
19
|
+
Each follows the Node pattern: attr_accessor, initialize, children,
|
|
20
|
+
value_attributes.
|
|
21
|
+
|
|
22
|
+
## Acceptance
|
|
23
|
+
|
|
24
|
+
- 10 new Model classes.
|
|
25
|
+
- Per-class spec.
|
|
26
|
+
- Full suite green.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 58 — Remaining Model classes for full element coverage
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Several wire elements still lack canonical Models, breaking the "all
|
|
6
|
+
adapters speak canonical" invariant for these element types.
|
|
7
|
+
|
|
8
|
+
## New Model classes (25)
|
|
9
|
+
|
|
10
|
+
- **Documentation**: Definition, Description, Documentation, Link
|
|
11
|
+
- **Chemistry**: Symmetry (pointGroup/spaceGroup), System
|
|
12
|
+
(atomArray/molecules), Stmml
|
|
13
|
+
- **Containers**: ArrayList, ConditionList, SubstanceList
|
|
14
|
+
- **Sets**: AtomSet, BondSet
|
|
15
|
+
- **Typing**: AtomType, AtomTypeList, BondType, BondTypeList
|
|
16
|
+
- **Mechanism**: Mechanism, MechanismComponent, Join
|
|
17
|
+
- **Other**: Object, Observation, PeakStructure, Potential,
|
|
18
|
+
PotentialForm, PotentialList
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
|
|
22
|
+
- 25 new Model classes.
|
|
23
|
+
- Per-class spec (lightweight — just instantiation + value_attributes).
|
|
24
|
+
- Full suite green.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 59 — Wire new Models through translator
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Models added in TODOs 56-58 are inert without translator mappings.
|
|
6
|
+
Add `*_to_canonical` / `*_from_canonical` for each.
|
|
7
|
+
|
|
8
|
+
## Implementation
|
|
9
|
+
|
|
10
|
+
Most share the geometry-simple shape (id/title/dictRef/convention +
|
|
11
|
+
content). Factor a shared helper to avoid copy-paste.
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
- Translator spec for each new Model class.
|
|
16
|
+
- Round-trip integration test covers a synthetic doc using one new
|
|
17
|
+
Model class end-to-end.
|
|
18
|
+
- Full suite green.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 60 — Update CLAUDE.md and final verification
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
Counts in CLAUDE.md and project docs are stale after TODOs 36-59.
|
|
6
|
+
|
|
7
|
+
## Updates
|
|
8
|
+
|
|
9
|
+
- CLAUDE.md model count (was 43, now ~100).
|
|
10
|
+
- Constraint count (was 17, now 60).
|
|
11
|
+
- Note ValidationReport, detect_and_validate APIs.
|
|
12
|
+
- Note Schema24 legacy elements.
|
|
13
|
+
- Verify `bundle exec rspec` fully green.
|
|
14
|
+
- Verify zero forbidden patterns.
|
|
15
|
+
|
|
16
|
+
## Acceptance
|
|
17
|
+
|
|
18
|
+
- Docs reflect current state.
|
|
19
|
+
- Full suite green.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# TODO.align (round 10)
|
|
2
|
+
|
|
3
|
+
Code cleanliness fixes.
|
|
4
|
+
|
|
5
|
+
| # | Workstream | Status |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 40 | Fix Base file indentation + extract Translator helpers | complete |
|
|
8
|
+
|
|
9
|
+
## Issues fixed
|
|
10
|
+
|
|
11
|
+
### 1. Base file indentation
|
|
12
|
+
|
|
13
|
+
All 36 Base mixin files had inconsistent indentation on the
|
|
14
|
+
`namespace` line inside `xml do` blocks — 12 spaces instead of 14.
|
|
15
|
+
Fixed via automated `ruby -i -pe` across `lib/chemicalml/cml/base/*.rb`.
|
|
16
|
+
|
|
17
|
+
### 2. Translator DRY: extracted name_to_canonical / identifier_to_canonical
|
|
18
|
+
|
|
19
|
+
`molecule_to_canonical` was constructing `Model::Name` and
|
|
20
|
+
`Model::Identifier` inline (two multi-argument `.new` calls in a
|
|
21
|
+
single hash value) instead of calling dedicated helper methods —
|
|
22
|
+
unlike every other element type which has its own `X_to_canonical`
|
|
23
|
+
helper. Extracted to `name_to_canonical` / `identifier_to_canonical`
|
|
24
|
+
methods for consistency with the rest of the Translator.
|
|
25
|
+
|
|
26
|
+
## Final metrics
|
|
27
|
+
|
|
28
|
+
- 179 examples, 0 failures
|
|
29
|
+
- 0 forbidden patterns
|
|
30
|
+
- 227 lib files
|