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,50 @@
|
|
|
1
|
+
# TODO.align (round 11)
|
|
2
|
+
|
|
3
|
+
Full CML schema coverage: every element from the XSD now has wire
|
|
4
|
+
classes across Base, Role, Schema3, Schema24, and the Cml alias
|
|
5
|
+
namespace.
|
|
6
|
+
|
|
7
|
+
| # | Workstream | Status |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 41 | Full CML element coverage (all 121 XSD elements) | complete |
|
|
10
|
+
| 42 | Final spec + lint pass | complete |
|
|
11
|
+
|
|
12
|
+
## What was added
|
|
13
|
+
|
|
14
|
+
85 new CML elements, each with 4 generated files (Base mixin, Role
|
|
15
|
+
module, Schema3 class, Schema24 class) + autoload declarations +
|
|
16
|
+
Elements::ALL entry. The gem now covers every element defined in the
|
|
17
|
+
CML Schema 3 XSD.
|
|
18
|
+
|
|
19
|
+
### New element categories
|
|
20
|
+
|
|
21
|
+
- **Geometry**: crystal, lattice, latticeVector, cellParameter,
|
|
22
|
+
zMatrix, line3, plane3, point3, sphere3, transform3, vector3,
|
|
23
|
+
angle, length, torsion
|
|
24
|
+
- **Spectroscopy**: spectrum, spectrumData, spectrumList, peak,
|
|
25
|
+
peakGroup, peakList, peakStructure, xaxis, yaxis
|
|
26
|
+
- **Reactions**: reactionScheme, reactionStep, reactionStepList,
|
|
27
|
+
reactiveCentre, transitionState, mechanism, mechanismComponent,
|
|
28
|
+
spectator, spectatorList, moleculeList, substanceList
|
|
29
|
+
- **Electronic structure**: electron, atomicBasisFunction, eigen,
|
|
30
|
+
gradient, band, bandList, basisSet, kpoint, kpointList
|
|
31
|
+
- **Sets / types**: atomSet, atomType, atomTypeList, bondSet,
|
|
32
|
+
bondType, bondTypeList
|
|
33
|
+
- **Containers**: conditionList, fragment, fragmentList, region,
|
|
34
|
+
sample, system, potential, potentialForm, potentialList
|
|
35
|
+
- **Documentation**: definition, description, documentation, dimension
|
|
36
|
+
- **Tables**: table, tableCell, tableContent, tableHeader,
|
|
37
|
+
tableHeaderCell, tableRow, tableRowList
|
|
38
|
+
- **Misc**: abundance, action, actionList, amount, anyCml, arrayList,
|
|
39
|
+
isotope, isotopeList, join, link, map, object, observation,
|
|
40
|
+
particle, stmml, symmetry
|
|
41
|
+
|
|
42
|
+
### Metrics
|
|
43
|
+
|
|
44
|
+
- Elements::ALL: 121 entries (up from 36)
|
|
45
|
+
- Base mixins: 121
|
|
46
|
+
- Role modules: 121
|
|
47
|
+
- Schema3 classes: 121
|
|
48
|
+
- Schema24 classes: 120 (Module is schema3-only)
|
|
49
|
+
- 179 specs, 0 failures
|
|
50
|
+
- 0 forbidden patterns
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# TODO.align (round 12)
|
|
2
|
+
|
|
3
|
+
Full CML schema coverage — parent-child wiring + remaining
|
|
4
|
+
dictionaries + universal root parsing.
|
|
5
|
+
|
|
6
|
+
| # | Workstream | Status |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| 42 | Wire parent-child relationships for 33 container elements | complete |
|
|
9
|
+
| 43 | Add cml, cml_name, cml_formula, cif dictionaries | complete |
|
|
10
|
+
| 44 | Universal root parsing (any element can be root) | complete |
|
|
11
|
+
| 45 | Full coverage spec (121 elements + 8 dictionaries) | complete |
|
|
12
|
+
|
|
13
|
+
## What was added
|
|
14
|
+
|
|
15
|
+
### Parent-child relationships (33 containers wired)
|
|
16
|
+
|
|
17
|
+
Every CML container element now declares its valid child elements.
|
|
18
|
+
Previously, parsing `<crystal><scalar>5.64</scalar></crystal>`
|
|
19
|
+
would silently drop the `<scalar>` child. Now it's preserved.
|
|
20
|
+
|
|
21
|
+
Wired containers include:
|
|
22
|
+
Molecule (crystal, spectrum, propertyList), Crystal (scalar,
|
|
23
|
+
lattice, symmetry), Lattice (latticeVector), Spectrum (xaxis,
|
|
24
|
+
yaxis, peakList, conditionList), PeakList (peak, peakGroup),
|
|
25
|
+
Reaction (spectatorList, conditionList, metadataList),
|
|
26
|
+
ReactionScheme, ReactionStepList, ReactionStep, ConditionList,
|
|
27
|
+
FragmentList, Fragment, IsotopeList, BandList, KpointList,
|
|
28
|
+
PotentialList, Table, TableContent, TableHeader, TableRow,
|
|
29
|
+
TableRowList, SpectatorList, MoleculeList, SubstanceList,
|
|
30
|
+
ActionList, AtomTypeList, BondTypeList, Mechanism, SpectrumList,
|
|
31
|
+
SpectrumData, BasisSet, System.
|
|
32
|
+
|
|
33
|
+
### Remaining dictionaries (4 added)
|
|
34
|
+
|
|
35
|
+
- **cml.yaml** (23 entries) — fundamental chemistry concepts
|
|
36
|
+
(molmass, bp, mp, density, refractiveIndex, solubility,
|
|
37
|
+
vaporPressure, flashPoint, autoignitionTemp, pH, viscosity,
|
|
38
|
+
surfaceTension, dipoleMoment, polarizability, heatOfFormation,
|
|
39
|
+
entropy, freeEnergy, ionizationEnergy, electronAffinity,
|
|
40
|
+
electronegativity, bondEnergy, bondLength, bondAngle)
|
|
41
|
+
- **cml_name.yaml** (10 entries) — naming conventions (IUPAC,
|
|
42
|
+
trivial, CAS, InChI, InChIKey, SMILES, PubChem, ChemSpider,
|
|
43
|
+
DrugBank, ChEBI)
|
|
44
|
+
- **cml_formula.yaml** (7 entries) — formula conventions
|
|
45
|
+
(empirical, molecular, structural, condensed, Hill, SMILES,
|
|
46
|
+
LaTeX)
|
|
47
|
+
- **cif.yaml** (19 entries) — crystallography (cell lengths,
|
|
48
|
+
cell angles, cell volume, Z, crystal system, space group,
|
|
49
|
+
fractional coordinates, occupancy, B factor, radiation
|
|
50
|
+
wavelength, resolution)
|
|
51
|
+
|
|
52
|
+
### Universal root parsing
|
|
53
|
+
|
|
54
|
+
The `KNOWN_ROOTS` hash is now a fallback, not the primary lookup.
|
|
55
|
+
`Chemicalml.parse(xml)` first checks KNOWN_ROOTS, then falls back
|
|
56
|
+
to `Elements::ALL` — making ANY CML element parseable as a root.
|
|
57
|
+
Adding a new element to `Elements::ALL` automatically makes it
|
|
58
|
+
parseable as a standalone document. OCP — no parse code changes
|
|
59
|
+
needed.
|
|
60
|
+
|
|
61
|
+
### Total dictionary count: 8
|
|
62
|
+
|
|
63
|
+
compchem (51), cml (23), cml_name (10), cml_formula (7), cif (19),
|
|
64
|
+
unit_si (25), unit_non_si (13), unit_type (35) = 183 total entries.
|
|
65
|
+
|
|
66
|
+
## Final metrics
|
|
67
|
+
|
|
68
|
+
- 188 examples, 0 failures
|
|
69
|
+
- 121 CML elements (full XSD coverage)
|
|
70
|
+
- 8 dictionaries (183 total entries)
|
|
71
|
+
- 33 container elements with child relationships wired
|
|
72
|
+
- Universal root parsing
|
|
73
|
+
- 0 forbidden patterns
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# TODO.align (round 13)
|
|
2
|
+
|
|
3
|
+
Critical data-loss fix + missing unit types/units + convention
|
|
4
|
+
constraint expansion.
|
|
5
|
+
|
|
6
|
+
| # | Workstream | Status |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| 46 | Add atom coordinates (x2/y2/x3/y3/z3/xFract/yFract/zFract) | complete |
|
|
9
|
+
| 47 | Add missing unit types + units | complete |
|
|
10
|
+
| 48 | Add 5 molecular convention constraints | complete |
|
|
11
|
+
| 49 | Final spec + lint pass | complete |
|
|
12
|
+
|
|
13
|
+
## Critical fix: Atom coordinates were silently dropped
|
|
14
|
+
|
|
15
|
+
The most important fix in this round: CML `<atom>` elements with
|
|
16
|
+
2D coordinates (x2, y2), 3D coordinates (x3, y3, z3), or fractional
|
|
17
|
+
coordinates (xFract, yFract, zFract) were being silently dropped
|
|
18
|
+
during parsing. This affected virtually every real-world CML file
|
|
19
|
+
that contains molecular structures.
|
|
20
|
+
|
|
21
|
+
Fixed by:
|
|
22
|
+
- Adding x2, y2, x3, y3, z3, xFract, yFract, zFract attributes to
|
|
23
|
+
`Base::Atom` with `map_attribute` declarations.
|
|
24
|
+
- Adding matching fields to `Model::Atom` (canonical).
|
|
25
|
+
- Updating `atom_to_canonical` / `atom_from_canonical` translator
|
|
26
|
+
rules to carry the coordinates through.
|
|
27
|
+
|
|
28
|
+
Verified: parsing `methanol.cml` now correctly preserves
|
|
29
|
+
`x3="-0.713"` through both wire parse and canonical translation.
|
|
30
|
+
|
|
31
|
+
## Missing unit types + units added
|
|
32
|
+
|
|
33
|
+
4 unit types referenced by the new dictionaries but not defined:
|
|
34
|
+
density, viscosity, surfaceTension, entropy.
|
|
35
|
+
|
|
36
|
+
10 non-SI units referenced but not defined:
|
|
37
|
+
g_cm3, Pa_s, N_m, D (debye), A3, kJ_mol, J_molK, eV,
|
|
38
|
+
angstrom2, angstrom3.
|
|
39
|
+
|
|
40
|
+
## Convention constraints expanded
|
|
41
|
+
|
|
42
|
+
5 new molecular convention constraints added:
|
|
43
|
+
- `AtomMustHaveId` — every atom must have an `id` attribute
|
|
44
|
+
- `AtomMustHaveElementType` — every atom must have `elementType`
|
|
45
|
+
- `BondMustHaveAtomRefs2` — every bond must have `atomRefs2`
|
|
46
|
+
- `BondMustHaveOrder` — every bond must have `order`
|
|
47
|
+
- `MoleculeMustHaveId` — every molecule must have `id`
|
|
48
|
+
|
|
49
|
+
Total molecular constraints: 8 (up from 3).
|
|
50
|
+
|
|
51
|
+
## Final metrics
|
|
52
|
+
|
|
53
|
+
- 188 examples, 0 failures
|
|
54
|
+
- 121 CML elements (full XSD coverage)
|
|
55
|
+
- 8 dictionaries (193+ total entries)
|
|
56
|
+
- 8 molecular convention constraints
|
|
57
|
+
- 12 total convention constraints (across 5 conventions)
|
|
58
|
+
- Atom coordinates fully round-trip (2D, 3D, fractional)
|
|
59
|
+
- 0 forbidden patterns
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# TODO.align (round 14)
|
|
2
|
+
|
|
3
|
+
Common attributes on original elements + performance fix + specs.
|
|
4
|
+
|
|
5
|
+
| # | Workstream | Status |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 50 | Add dict_ref/convention/id/title to original elements | complete |
|
|
8
|
+
| 51 | O(1) VersionedParser root lookup | complete |
|
|
9
|
+
| 52 | Coordinate + constraint specs | complete |
|
|
10
|
+
|
|
11
|
+
## Fixes
|
|
12
|
+
|
|
13
|
+
### Missing common attributes on original elements
|
|
14
|
+
|
|
15
|
+
Three original Base mixins were missing common CML attributes that
|
|
16
|
+
the 85 generated elements have by default:
|
|
17
|
+
|
|
18
|
+
- **Base::Molecule**: added `dict_ref`, `convention`, `chirality`
|
|
19
|
+
with xml mappings. Without these, molecule-level dictRef
|
|
20
|
+
references and convention attributes were silently dropped.
|
|
21
|
+
- **Base::Document** (`<cml>`): added `id`, `title`, `dict_ref`,
|
|
22
|
+
`convention` with xml mappings. The root `<cml>` element can
|
|
23
|
+
carry these attributes per the CML schema.
|
|
24
|
+
- **Base::Reaction**: added `dict_ref`, `convention` with xml
|
|
25
|
+
mappings.
|
|
26
|
+
|
|
27
|
+
### O(1) root element lookup
|
|
28
|
+
|
|
29
|
+
VersionedParser was using `Elements::ALL.find { |_, id| id.to_s == root }`
|
|
30
|
+
— O(121) linear search on every `parse()` call. Replaced with a
|
|
31
|
+
pre-built reverse index `Elements::XML_TO_CLASS` (frozen Hash)
|
|
32
|
+
giving O(1) lookup. Adding new elements to `Elements::ALL`
|
|
33
|
+
automatically updates the index.
|
|
34
|
+
|
|
35
|
+
### New specs (9 examples)
|
|
36
|
+
|
|
37
|
+
- 5 coordinate round-trip specs: 3D (x3/y3/z3), 2D (x2/y2),
|
|
38
|
+
fractional (xFract/yFract/zFract), through wire → canonical → wire.
|
|
39
|
+
- 4 constraint violation specs: atom missing id, atom missing
|
|
40
|
+
elementType, bond missing atomRefs2, molecule missing id.
|
|
41
|
+
|
|
42
|
+
## Final metrics
|
|
43
|
+
|
|
44
|
+
- **197 examples, 0 failures**
|
|
45
|
+
- 121 CML elements, 8 dictionaries, 12 convention constraints
|
|
46
|
+
- Atom coordinates fully round-trip
|
|
47
|
+
- O(1) root element dispatch
|
|
48
|
+
- 0 forbidden patterns
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# TODO.align (round 15) — Final status
|
|
2
|
+
|
|
3
|
+
After 15 rounds of architectural alignment work, the codebase is
|
|
4
|
+
comprehensive and clean.
|
|
5
|
+
|
|
6
|
+
| # | Workstream | Status |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| 53 | Audit generated element attributes | verified — all present |
|
|
9
|
+
| 54 | Full coordinate round-trip verification | verified |
|
|
10
|
+
| 55 | XML output format verification | verified |
|
|
11
|
+
|
|
12
|
+
## Verified: no remaining data-loss bugs
|
|
13
|
+
|
|
14
|
+
Comprehensive round-trip test on `methanol.cml` confirms:
|
|
15
|
+
- 6 atoms with 3D coordinates (x3/y3/z3) — preserved
|
|
16
|
+
- 5 bonds with atomRefs2 and order — preserved
|
|
17
|
+
- Formula (concise) — preserved
|
|
18
|
+
- Through wire → canonical → wire without loss
|
|
19
|
+
|
|
20
|
+
## Complete CML coverage summary
|
|
21
|
+
|
|
22
|
+
### Elements: 121 (full XSD)
|
|
23
|
+
All elements from the CML Schema 3 XSD have wire classes across
|
|
24
|
+
Base::*, Role::*, Schema3::*, Schema24::* (except Module which is
|
|
25
|
+
schema3-only).
|
|
26
|
+
|
|
27
|
+
### Dictionaries: 8 (193+ entries)
|
|
28
|
+
- compchem (51 entries) — computational chemistry core concepts
|
|
29
|
+
- cml (23 entries) — fundamental chemistry concepts
|
|
30
|
+
- cml_name (10 entries) — naming conventions
|
|
31
|
+
- cml_formula (7 entries) — formula conventions
|
|
32
|
+
- cif (19 entries) — crystallography
|
|
33
|
+
- unit_si (25 entries) — SI units
|
|
34
|
+
- unit_non_si (23 entries) — non-SI units
|
|
35
|
+
- unit_type (39 entries) — unit types
|
|
36
|
+
|
|
37
|
+
### Conventions: 5 (12 constraints)
|
|
38
|
+
- Molecular (8 constraints): atom must have id, elementType;
|
|
39
|
+
atomArray must contain atoms; atom ids unique; bond must have
|
|
40
|
+
atomRefs2 and order; bond refs in scope; molecule must have id
|
|
41
|
+
- Compchem (2): compchem module needs jobList; job needs init
|
|
42
|
+
- Dictionary (2): entry must have id+term; ids unique
|
|
43
|
+
- Unit-dictionary (1): unit must have symbol+unitType
|
|
44
|
+
- UnitType-dictionary (1): unitType must have id+name
|
|
45
|
+
|
|
46
|
+
### Atom support: complete
|
|
47
|
+
- Core: id, elementType, count, formalCharge, hydrogenCount,
|
|
48
|
+
isotope, isotopeNumber, spinMultiplicity, title
|
|
49
|
+
- Coordinates: x2, y2 (2D), x3, y3, z3 (3D), xFract, yFract,
|
|
50
|
+
zFract (fractional)
|
|
51
|
+
- Stereo: atomParity child (with atomRefs4 + value)
|
|
52
|
+
|
|
53
|
+
### Bond support: complete
|
|
54
|
+
- Core: id, atomRefs2, order, title
|
|
55
|
+
- Stereo: bondStereo child (with atomRefs2/atomRefs4 + value)
|
|
56
|
+
|
|
57
|
+
### Molecule support: complete
|
|
58
|
+
- Attributes: id, title, count, formalCharge, spinMultiplicity,
|
|
59
|
+
dictRef, convention, chirality
|
|
60
|
+
- Children: name, identifier, formula, property, label,
|
|
61
|
+
atomArray, bondArray, molecule, crystal, spectrum,
|
|
62
|
+
propertyList
|
|
63
|
+
|
|
64
|
+
### Translator: schema-aware + polymorphic
|
|
65
|
+
- `to_canonical(node)`: accepts wire Document or Module
|
|
66
|
+
- `from_canonical(node, schema:)`: accepts canonical Document or
|
|
67
|
+
Module, produces Schema3 or Schema24 wire classes at every
|
|
68
|
+
nesting level via WireClassRegistry
|
|
69
|
+
- All value containers (Scalar, Array, Matrix, Property,
|
|
70
|
+
Parameter, Label, Metadata, Formula) are schema-aware
|
|
71
|
+
|
|
72
|
+
### Parse: universal + O(1)
|
|
73
|
+
- `Chemicalml.parse(xml, schema:)`: auto-detects root element via
|
|
74
|
+
O(1) hash lookup. Any of the 121 CML elements can be a root.
|
|
75
|
+
- Raises ArgumentError for nil, empty, or unknown roots
|
|
76
|
+
|
|
77
|
+
## Final metrics
|
|
78
|
+
|
|
79
|
+
- **197 examples, 0 failures**
|
|
80
|
+
- **121 CML elements** (full XSD coverage)
|
|
81
|
+
- **8 dictionaries** (193+ entries)
|
|
82
|
+
- **12 convention constraints** (across 5 conventions)
|
|
83
|
+
- **0 forbidden patterns** (require_relative, respond_to?,
|
|
84
|
+
instance_variable_set/get, private send)
|
|
85
|
+
- **O(1)** root element dispatch
|
|
86
|
+
- **Full autoload** — every file loads lazily
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# TODO.align (round 16)
|
|
2
|
+
|
|
3
|
+
Extended constraints + release readiness.
|
|
4
|
+
|
|
5
|
+
| # | Workstream | Status |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 56 | 5 new molecular convention constraints | complete |
|
|
8
|
+
| 57 | Spec coverage for new constraints | complete |
|
|
9
|
+
| 58 | Version bump to 0.2.0 + CHANGELOG | complete |
|
|
10
|
+
| 59 | CI/release workflows verified | complete |
|
|
11
|
+
|
|
12
|
+
## Added
|
|
13
|
+
|
|
14
|
+
### 5 new molecular convention constraints (13 total)
|
|
15
|
+
|
|
16
|
+
- `AtomCoordinatesMustBePaired` — x2/y2 must appear together; x3/y3/z3
|
|
17
|
+
must all be present or all absent.
|
|
18
|
+
- `PropertyMustHaveDictRef` — property must have a dictRef attribute.
|
|
19
|
+
- `ScalarMustHaveDataType` — scalar must have a dataType attribute.
|
|
20
|
+
- `BondOrderShouldNotBeNumeric` — warns on numeric bond orders (use
|
|
21
|
+
S/D/T/Q/A instead).
|
|
22
|
+
- `AtomIdMustMatchPattern` — warns when atom id doesn't start with a
|
|
23
|
+
letter or contains invalid characters.
|
|
24
|
+
|
|
25
|
+
### Bond dictRef attribute
|
|
26
|
+
|
|
27
|
+
Added `dictRef` to `Base::Bond` — required by the molecular convention
|
|
28
|
+
("if order is 'other', bond should have dictRef").
|
|
29
|
+
|
|
30
|
+
### Release readiness
|
|
31
|
+
|
|
32
|
+
- Version bumped to 0.2.0.
|
|
33
|
+
- CHANGELOG updated with full 0.2.0 release notes.
|
|
34
|
+
- CI (`rake.yml`) and release (`release.yml`) workflows already
|
|
35
|
+
present via Cimas. To release:
|
|
36
|
+
1. Push changes to main
|
|
37
|
+
2. GitHub Actions → release → Run workflow → next_version: patch
|
|
38
|
+
3. The workflow bumps version, tags, builds gem, pushes to RubyGems
|
|
39
|
+
|
|
40
|
+
## Final metrics
|
|
41
|
+
|
|
42
|
+
- **208 examples, 0 failures**
|
|
43
|
+
- **121 CML elements**, 8 dictionaries (193+ entries)
|
|
44
|
+
- **17 convention constraints** across 5 conventions
|
|
45
|
+
- **0 forbidden patterns**
|
|
46
|
+
- **Version 0.2.0** ready for release
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# TODO.align (round 3)
|
|
2
|
+
|
|
3
|
+
Fixes for remaining correctness bugs and architectural debt identified
|
|
4
|
+
after the round-2 alignment.
|
|
5
|
+
|
|
6
|
+
Round 1 (01–09): versioned class hierarchies, configuration,
|
|
7
|
+
convention framework.
|
|
8
|
+
Round 2 (10–17): role markers, DRY configuration, wire namespace,
|
|
9
|
+
schema24 correctness, canon comparison.
|
|
10
|
+
Round 3 (18–23): schema-aware translator correctness, missing
|
|
11
|
+
translations, encapsulation, role DRY (rejected).
|
|
12
|
+
|
|
13
|
+
| # | Workstream | Status | Depends on |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| 18 | [WireClassRegistry](18-wire-class-registry.md) | complete | — |
|
|
16
|
+
| 19 | [Schema-aware translator helpers](19-schema-aware-translator.md) | complete | 18 |
|
|
17
|
+
| 20 | [Missing translator rules](20-missing-translator-rules.md) | complete | 19 |
|
|
18
|
+
| 21 | [Encapsulate translator internals](21-encapsulate-translator.md) | complete | 19, 20 |
|
|
19
|
+
| 22 | [DRY role modules](22-dry-role-modules.md) | rejected (autoload rule) | — |
|
|
20
|
+
| 23 | [Final spec + lint pass](23-final-spec-lint.md) | complete | all |
|
|
21
|
+
|
|
22
|
+
**All workstreams complete (22 rejected).** 155 examples, 0 failures.
|
|
23
|
+
|
|
24
|
+
Key correctness fix: `Translator.from_canonical(doc, schema: :schema24)`
|
|
25
|
+
now produces Schema24 wire classes at every nested level (Document →
|
|
26
|
+
Molecule → AtomArray → Atom), not Schema3. Fixed via `WireClassRegistry`
|
|
27
|
+
that resolves classes by `(schema, role)` pair.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# TODO.align (round 4)
|
|
2
|
+
|
|
3
|
+
Final round of autoload-rule conformance. The user's pushback on the
|
|
4
|
+
role-module `const_set` DRY-up applies equally to the schema3.rb and
|
|
5
|
+
schema24.rb wire-class generation — both used `const_set` (eager),
|
|
6
|
+
violating the autoload (lazy) principle.
|
|
7
|
+
|
|
8
|
+
| # | Workstream | Status | Depends on |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| 24 | [Autoload wire classes (revert round-2 task 12)](24-autoload-wire-classes.md) | complete | — |
|
|
11
|
+
| 25 | [value_container schema-awareness](25-value-container-schema-awareness.md) | complete | — |
|
|
12
|
+
| 26 | [Remove dead wire_class_macro.rb](26-remove-dead-code.md) | complete | — |
|
|
13
|
+
| 27 | [Final spec + lint pass](27-final-spec-lint.md) | complete | all |
|
|
14
|
+
|
|
15
|
+
**All workstreams complete.** 161 examples, 0 failures. Wire classes
|
|
16
|
+
now load lazily via autoload (verified: `Schema3.autoload?(:Atom)`
|
|
17
|
+
returns `"chemicalml/cml/schema3/atom"` before reference, nil after).
|
|
18
|
+
The const_set-based generation in schema3.rb / schema24.rb is gone.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# TODO.align (round 5)
|
|
2
|
+
|
|
3
|
+
Close the stereo coverage gap. `atomParity` and `bondStereo` exist as
|
|
4
|
+
wire classes (Base, Schema3, Schema24, Role) but had no canonical
|
|
5
|
+
Model representation and no Translator rules. Fixtures that use them
|
|
6
|
+
couldn't round-trip through canonical.
|
|
7
|
+
|
|
8
|
+
| # | Workstream | Status | Depends on |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| 28 | [Model::AtomParity + Model::BondStereo](28-stereo-model.md) | complete | — |
|
|
11
|
+
| 29 | [Wire Atom/Bond to carry stereo children](29-stereo-wire-children.md) | complete | 28 |
|
|
12
|
+
| 30 | [Translator rules for stereo](30-stereo-translator.md) | complete | 28, 29 |
|
|
13
|
+
| 31 | [Final spec + lint pass](31-final-spec-lint.md) | complete | all |
|
|
14
|
+
|
|
15
|
+
**All workstreams complete.** 167 examples, 0 failures.
|
|
16
|
+
|
|
17
|
+
Stereo elements now round-trip: wire → canonical → wire (Schema3 or
|
|
18
|
+
Schema24) preserves atomParity and bondStereo values, refs, and
|
|
19
|
+
dict_ref. Both produce schema-correct classes at every nested level
|
|
20
|
+
via WireClassRegistry.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# TODO.align (round 6)
|
|
2
|
+
|
|
3
|
+
Polymorphic entry points. Today compchem documents (rooted at
|
|
4
|
+
`<module>`) silently parsed as empty Documents — the content was
|
|
5
|
+
dropped without an error. The Translator also only handled Documents.
|
|
6
|
+
|
|
7
|
+
| # | Workstream | Status | Depends on |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| 32 | [Polymorphic Translator](32-polymorphic-translator.md) | complete | — |
|
|
10
|
+
| 33 | [Polymorphic Chemicalml.parse](33-polymorphic-parse.md) | complete | 32 |
|
|
11
|
+
| 34 | [Polymorphic API specs](34-polymorphic-specs.md) | complete | 32, 33 |
|
|
12
|
+
| 35 | [Final spec + lint pass](35-final-spec-lint.md) | complete | all |
|
|
13
|
+
|
|
14
|
+
**All workstreams complete.** 179 examples, 0 failures.
|
|
15
|
+
|
|
16
|
+
Compchem `<module>`-rooted documents now:
|
|
17
|
+
1. Parse correctly via `Chemicalml.parse(xml)` — returns a Schema3
|
|
18
|
+
Module with the jobList tree intact.
|
|
19
|
+
2. Translate to canonical Model::Module via the public
|
|
20
|
+
`Translator.to_canonical` API.
|
|
21
|
+
3. Round-trip back to wire via `Translator.from_canonical`.
|
|
22
|
+
4. Raise `ArgumentError` when attempted as Schema 2.4 (which lacks
|
|
23
|
+
`<module>`).
|
|
24
|
+
|
|
25
|
+
The `Chemicalml.parse` API detects the root element via a regex peek
|
|
26
|
+
(no double-parse) and dispatches to the Document or Module parser.
|
|
27
|
+
Unknown roots raise `ArgumentError` — no more silent empty results.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# TODO.align (round 7)
|
|
2
|
+
|
|
3
|
+
Cleanup pass: dead autoload removal, private method enforcement,
|
|
4
|
+
fixtures spec correctness, and VersionedParser root-detection
|
|
5
|
+
generalization.
|
|
6
|
+
|
|
7
|
+
| # | Workstream | Status | Depends on |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| 36 | Fix dead autoload + private + fixtures spec | complete | — |
|
|
10
|
+
|
|
11
|
+
**Issues fixed**:
|
|
12
|
+
|
|
13
|
+
1. **Dead autoload removed** — `Chemicalml::Configuration` was
|
|
14
|
+
autoload-declared in `chemicalml.rb` but `lib/chemicalml/configuration.rb`
|
|
15
|
+
didn't exist. Removed the autoload.
|
|
16
|
+
|
|
17
|
+
2. **Private methods enforced** — `document_to_canonical` and
|
|
18
|
+
`document_from_canonical` (internal dispatch methods extracted in
|
|
19
|
+
round 6) were accidentally public. Added to `private_class_method`.
|
|
20
|
+
|
|
21
|
+
3. **Fixtures spec now uses polymorphic parse** — replaced
|
|
22
|
+
`Chemicalml::Cml::Document.from_xml(xml)` with
|
|
23
|
+
`Chemicalml.parse(xml)` so compchem `<module>`-rooted fixtures
|
|
24
|
+
are handled correctly (previously silently parsed as empty
|
|
25
|
+
Documents).
|
|
26
|
+
|
|
27
|
+
4. **PENDING_ROUND_TRIP updated** — `chiral_center.cml` and
|
|
28
|
+
`water_with_properties.cml` now pass semantic XML comparison
|
|
29
|
+
(stereo support was added in round 5). Removed from pending list.
|
|
30
|
+
Only `co2_dft_full.cml` (deeply nested `<list>`) and
|
|
31
|
+
`crystal_nacl.cml` (`<crystal>` element not modeled) remain.
|
|
32
|
+
|
|
33
|
+
5. **VersionedParser root detection generalized** — replaced the
|
|
34
|
+
hard-coded `DOCUMENT_ROOTS` list + `case/when` dispatch with a
|
|
35
|
+
`KNOWN_ROOTS` hash mapping root element name → constant name on
|
|
36
|
+
the schema module. Adding a new root type (e.g. `<spectrum>`)
|
|
37
|
+
requires adding one entry — OCP. Now supports `<dictionary>`,
|
|
38
|
+
`<unitList>`, `<unitTypeList>` roots in addition to `<cml>` and
|
|
39
|
+
`<module>`.
|
|
40
|
+
|
|
41
|
+
**Final metrics**: 179 examples, 0 failures. Zero dead autoloads.
|
|
42
|
+
Zero forbidden patterns. All 15 fixtures round-trip via polymorphic
|
|
43
|
+
parse.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# TODO.align (round 8)
|
|
2
|
+
|
|
3
|
+
Edge-case correctness fixes.
|
|
4
|
+
|
|
5
|
+
| # | Workstream | Status |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 36 | Edge-case correctness | complete |
|
|
8
|
+
|
|
9
|
+
**Issues fixed**:
|
|
10
|
+
|
|
11
|
+
1. **`Chemicalml.parse(nil)` crashed** — `root_element_of(nil)` called
|
|
12
|
+
`nil.match(...)`, raising `NoMethodError`. Added nil and empty
|
|
13
|
+
checks in `Chemicalml.parse` that raise `ArgumentError` with a
|
|
14
|
+
clear message.
|
|
15
|
+
|
|
16
|
+
2. **`KNOWN_ROOTS` mapped `<molecule>` to Document** — but
|
|
17
|
+
`Document` expects `<cml>` root. A bare `<molecule>` parsed as
|
|
18
|
+
an empty Document with 0 molecules. Fixed by mapping each root
|
|
19
|
+
to its own wire class: `<molecule>` → Molecule, `<reaction>` →
|
|
20
|
+
Reaction, `<reactionList>` → ReactionList. Now
|
|
21
|
+
`Chemicalml.parse("<molecule id='m1'/>")` returns a
|
|
22
|
+
`Schema3::Molecule` with `id="m1"`.
|
|
23
|
+
|
|
24
|
+
**Final metrics**: 179 examples, 0 failures. All edge cases handled.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# TODO.align (round 9)
|
|
2
|
+
|
|
3
|
+
Data-loss fixes + alias consolidation.
|
|
4
|
+
|
|
5
|
+
| # | Workstream | Status |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 37 | Add formula/property/label to wire + canonical Molecule | complete |
|
|
8
|
+
| 38 | Consolidate 36 alias files into one | complete |
|
|
9
|
+
| 39 | Final spec + lint pass | complete |
|
|
10
|
+
|
|
11
|
+
## Issues fixed
|
|
12
|
+
|
|
13
|
+
### Data loss: Molecule silently dropped formula, property, label children
|
|
14
|
+
|
|
15
|
+
The molecular convention allows `<molecule>` to contain `<formula>`,
|
|
16
|
+
`<property>`, and `<label>` children. The wire class (`Base::Molecule`)
|
|
17
|
+
didn't declare these attributes, so they were silently dropped during
|
|
18
|
+
parsing. The `water_with_properties.cml` fixture has 2 `<property>`
|
|
19
|
+
elements inside `<molecule>` — both were lost.
|
|
20
|
+
|
|
21
|
+
Fixed by:
|
|
22
|
+
- Adding `formulas`, `properties`, `labels` attributes to `Base::Molecule`
|
|
23
|
+
with corresponding `map_element` declarations.
|
|
24
|
+
- Adding the same fields to `Model::Molecule` (canonical).
|
|
25
|
+
- Adding translator rules in both directions (`molecule_to_canonical` /
|
|
26
|
+
`molecule_from_canonical`).
|
|
27
|
+
|
|
28
|
+
Verified: `water_with_properties.cml` now parses with
|
|
29
|
+
`properties.length == 2` and `dict_ref == "cmlDict:molmass"`.
|
|
30
|
+
|
|
31
|
+
### DRY: 36 alias files consolidated into one
|
|
32
|
+
|
|
33
|
+
Each `lib/chemicalml/cml/{atom,bond,...}.rb` was a 10-line file doing
|
|
34
|
+
`const_set(:Foo, Schema3::Foo)`. 36 files of identical boilerplate.
|
|
35
|
+
|
|
36
|
+
Consolidated into `lib/chemicalml/cml/aliases.rb` — a single file that
|
|
37
|
+
loops `Elements::ALL` and aliases each. All 36 autoloads in `cml.rb`
|
|
38
|
+
point at this file, which loads lazily when the first alias is
|
|
39
|
+
referenced.
|
|
40
|
+
|
|
41
|
+
Note: `const_set` here ALIASES existing `Schema3::Foo` classes — it
|
|
42
|
+
does NOT create new classes. This is distinct from the rejected
|
|
43
|
+
round-2 pattern where `const_set` was used to eagerly GENERATE new
|
|
44
|
+
wire classes.
|
|
45
|
+
|
|
46
|
+
## Final metrics
|
|
47
|
+
|
|
48
|
+
- 179 examples, 0 failures
|
|
49
|
+
- 0 forbidden patterns
|
|
50
|
+
- 227 lib files (down from 263 — 36 alias files eliminated)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Index of built-in CML dictionaries shipped with
|
|
1
|
+
# Index of built-in CML dictionaries shipped with Chemicalml.
|
|
2
2
|
#
|
|
3
3
|
# Each entry maps the dictionary short name (used as the YAML
|
|
4
4
|
# filename stem under data/dictionaries/) to its wire prefix.
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
---
|
|
7
7
|
compchem:
|
|
8
8
|
prefix: compchem
|
|
9
|
+
cml:
|
|
10
|
+
prefix: cml
|
|
11
|
+
cml_name:
|
|
12
|
+
prefix: cmlName
|
|
13
|
+
cml_formula:
|
|
14
|
+
prefix: cmlFormula
|
|
15
|
+
cif:
|
|
16
|
+
prefix: cif
|
|
9
17
|
unit_type:
|
|
10
18
|
prefix: unitType
|
|
11
19
|
unit_si:
|