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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5aff6a0c43deeff73ff9684286df7c1a7ef97d61fa919415a381e70de217995c
|
|
4
|
+
data.tar.gz: 52237d4db8715d8244b88c124cf3bdc1ad43102b4468d8217099ebdec6b89f1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b9f636c62b495c14f5ab10df0c8fd30e49aa23587731587f2fc9f4d87837376da38db8814df48482e1725751090518722ff3e6ca43ea5197fefb53ab5055183a
|
|
7
|
+
data.tar.gz: c7b42562ce98060bd3ca135d137be215f25a2ae71e2fc2693b70ab7e1030f8c6868744dea7aa9d60d078ba6adc11fc28a7c8d63de4f5f69c0a9b16ff8fe6f65f
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- 'docs/**'
|
|
8
|
+
pull_request:
|
|
9
|
+
paths:
|
|
10
|
+
- 'docs/**'
|
|
11
|
+
repository_dispatch:
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
pages: write
|
|
17
|
+
id-token: write
|
|
18
|
+
|
|
19
|
+
concurrency:
|
|
20
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
21
|
+
cancel-in-progress: false
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
build:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout
|
|
28
|
+
uses: actions/checkout@v6
|
|
29
|
+
|
|
30
|
+
- name: Setup Ruby
|
|
31
|
+
uses: ruby/setup-ruby@v1
|
|
32
|
+
with:
|
|
33
|
+
ruby-version: '3.3'
|
|
34
|
+
bundler-cache: true
|
|
35
|
+
cache-version: 0
|
|
36
|
+
working-directory: docs
|
|
37
|
+
|
|
38
|
+
- name: Setup Pages
|
|
39
|
+
id: pages
|
|
40
|
+
uses: actions/configure-pages@v5
|
|
41
|
+
|
|
42
|
+
- name: Build with Jekyll
|
|
43
|
+
run: bundle exec jekyll build --verbose --trace --baseurl "${{ steps.pages.outputs.base_path }}"
|
|
44
|
+
working-directory: docs
|
|
45
|
+
env:
|
|
46
|
+
JEKYLL_ENV: production
|
|
47
|
+
|
|
48
|
+
- name: Upload artifact
|
|
49
|
+
uses: actions/upload-pages-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
path: docs/_site
|
|
52
|
+
|
|
53
|
+
deploy:
|
|
54
|
+
environment:
|
|
55
|
+
name: github-pages
|
|
56
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
57
|
+
if: ${{ github.ref == 'refs/heads/main' }}
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
needs: build
|
|
60
|
+
steps:
|
|
61
|
+
- name: Deploy to GitHub Pages
|
|
62
|
+
id: deployment
|
|
63
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
name: links
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- 'docs/**'
|
|
9
|
+
pull_request:
|
|
10
|
+
paths:
|
|
11
|
+
- 'docs/**'
|
|
12
|
+
|
|
13
|
+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
pull-requests: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
link_checker:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- uses: ruby/setup-ruby@v1
|
|
25
|
+
with:
|
|
26
|
+
ruby-version: '3.4'
|
|
27
|
+
bundler-cache: true
|
|
28
|
+
working-directory: docs
|
|
29
|
+
|
|
30
|
+
- name: Build site
|
|
31
|
+
env:
|
|
32
|
+
JEKYLL_ENV: production
|
|
33
|
+
run: bundle exec jekyll build --trace
|
|
34
|
+
working-directory: docs
|
|
35
|
+
|
|
36
|
+
- name: Restore lychee cache
|
|
37
|
+
uses: actions/cache@v4
|
|
38
|
+
with:
|
|
39
|
+
path: .lycheecache
|
|
40
|
+
key: cache-lychee-${{ github.sha }}
|
|
41
|
+
restore-keys: cache-lychee-
|
|
42
|
+
|
|
43
|
+
- name: Check if site was built
|
|
44
|
+
run: |
|
|
45
|
+
if [ ! -d "_site" ]; then
|
|
46
|
+
echo "Error: _site directory not created"
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
echo "Site built successfully"
|
|
50
|
+
ls -la _site/
|
|
51
|
+
working-directory: docs
|
|
52
|
+
|
|
53
|
+
- name: Link Checker (Built Site)
|
|
54
|
+
uses: lycheeverse/lychee-action@v2
|
|
55
|
+
with:
|
|
56
|
+
# Check the built HTML site for rendered links
|
|
57
|
+
# Only check https and http schemes, exclude file:// due to path resolution issues
|
|
58
|
+
args: >-
|
|
59
|
+
--verbose
|
|
60
|
+
--no-progress
|
|
61
|
+
--config lychee.toml
|
|
62
|
+
--root-dir "$(pwd)/_site"
|
|
63
|
+
--scheme https,http
|
|
64
|
+
'_site/**/*.html'
|
|
65
|
+
fail: true
|
|
66
|
+
output: link-check-results.md
|
|
67
|
+
format: markdown
|
|
68
|
+
workingDirectory: docs
|
|
69
|
+
|
|
70
|
+
- name: Upload link check results
|
|
71
|
+
if: always()
|
|
72
|
+
uses: actions/upload-artifact@v4
|
|
73
|
+
with:
|
|
74
|
+
name: link-check-results
|
|
75
|
+
path: |
|
|
76
|
+
docs/link-check-results.md
|
|
77
|
+
retention-days: 30
|
|
78
|
+
|
|
79
|
+
- name: Comment PR with results
|
|
80
|
+
if: failure() && github.event_name == 'pull_request'
|
|
81
|
+
uses: actions/github-script@v7
|
|
82
|
+
with:
|
|
83
|
+
script: |
|
|
84
|
+
const fs = require('fs');
|
|
85
|
+
let comment = '## 🔗 Link Check Failed\n\n';
|
|
86
|
+
|
|
87
|
+
if (fs.existsSync('docs/link-check-results.md')) {
|
|
88
|
+
const results = fs.readFileSync('docs/link-check-results.md', 'utf8');
|
|
89
|
+
comment += '### Built Site Results\n\n' + results + '\n\n';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
comment += '\n---\n\n*Please fix the broken links and push a new commit.*';
|
|
93
|
+
|
|
94
|
+
github.rest.issues.createComment({
|
|
95
|
+
issue_number: context.issue.number,
|
|
96
|
+
owner: context.repo.owner,
|
|
97
|
+
repo: context.repo.repo,
|
|
98
|
+
body: comment
|
|
99
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: opal
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
|
+
|
|
17
|
+
- name: Set up Ruby
|
|
18
|
+
uses: ruby/setup-ruby@v1
|
|
19
|
+
with:
|
|
20
|
+
ruby-version: "3.4"
|
|
21
|
+
bundler-cache: true
|
|
22
|
+
|
|
23
|
+
- name: Set up Node.js
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: "20"
|
|
27
|
+
|
|
28
|
+
- name: Install Opal dependencies
|
|
29
|
+
run: |
|
|
30
|
+
bundle config set with opal
|
|
31
|
+
bundle install
|
|
32
|
+
|
|
33
|
+
- name: Run Opal smoke tests
|
|
34
|
+
run: bundle exec rake spec:opal
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: performance
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
performance:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 15
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
|
|
18
|
+
- name: Set up Ruby
|
|
19
|
+
uses: ruby/setup-ruby@v1
|
|
20
|
+
with:
|
|
21
|
+
ruby-version: 3.4
|
|
22
|
+
bundler-cache: true
|
|
23
|
+
|
|
24
|
+
- name: Run performance benchmarks
|
|
25
|
+
run: bundle exec rake performance:compare
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
|
2
|
+
# See https://github.com/metanorma/cimas
|
|
3
|
+
name: rake
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: write
|
|
7
|
+
packages: write
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
branches: [ master, main ]
|
|
12
|
+
tags: [ v* ]
|
|
13
|
+
pull_request:
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
rake:
|
|
17
|
+
uses: metanorma/ci/.github/workflows/generic-rake.yml@main
|
|
18
|
+
secrets:
|
|
19
|
+
pat_token: ${{ secrets.LUTAML_CI_PAT_TOKEN }}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
|
2
|
+
# See https://github.com/metanorma/cimas
|
|
3
|
+
name: release
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: write
|
|
7
|
+
packages: write
|
|
8
|
+
id-token: write
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
inputs:
|
|
13
|
+
next_version:
|
|
14
|
+
description: |
|
|
15
|
+
Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc).
|
|
16
|
+
Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version
|
|
17
|
+
required: true
|
|
18
|
+
default: 'skip'
|
|
19
|
+
acknowledge_breaking_in_patch:
|
|
20
|
+
description: 'Override the patch-release breaking-change guard when the trip is a known false-positive'
|
|
21
|
+
required: false
|
|
22
|
+
type: boolean
|
|
23
|
+
default: false
|
|
24
|
+
repository_dispatch:
|
|
25
|
+
types: [ do-release ]
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
release:
|
|
29
|
+
uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
|
|
30
|
+
with:
|
|
31
|
+
next_version: ${{ github.event.inputs.next_version }}
|
|
32
|
+
acknowledge_breaking_in_patch: ${{ inputs.acknowledge_breaking_in_patch }}
|
|
33
|
+
secrets:
|
|
34
|
+
rubygems-api-key: ${{ secrets.LUTAML_CI_RUBYGEMS_API_KEY }}
|
data/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,61 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to
|
|
3
|
+
All notable changes to Chemicalml are documented here.
|
|
4
4
|
This project follows [Semantic Versioning](https://semver.org/).
|
|
5
5
|
|
|
6
|
-
## [
|
|
6
|
+
## [0.2.0] - 2026-07-14
|
|
7
7
|
|
|
8
8
|
### Added
|
|
9
|
+
|
|
10
|
+
- Full CML Schema 3 element coverage (121 elements).
|
|
11
|
+
- Dual schema support: Schema 2.4 and Schema 3 wire classes with
|
|
12
|
+
real class hierarchies, shared declarations via `Base::*` mixins,
|
|
13
|
+
and `Role::*` type marker modules.
|
|
14
|
+
- `Chemicalml.parse(xml, schema:)` polymorphic entry point with
|
|
15
|
+
auto-detection of root element (any of the 121 CML elements).
|
|
16
|
+
- `Chemicalml::Cml::Translator` with schema-aware translation:
|
|
17
|
+
`to_canonical` / `from_canonical` handle both Schema3 and
|
|
18
|
+
Schema24 wire classes at every nesting level via
|
|
19
|
+
`WireClassRegistry`.
|
|
20
|
+
- Convention framework: 5 built-in conventions (molecular, compchem,
|
|
21
|
+
dictionary, unit-dictionary, unitType-dictionary) with 17
|
|
22
|
+
registered constraint classes.
|
|
23
|
+
- Dictionary model: 8 built-in YAML dictionaries (compchem, cml,
|
|
24
|
+
cml_name, cml_formula, cif, unit_si, unit_non_si, unit_type)
|
|
25
|
+
with 193+ entries.
|
|
26
|
+
- Atom coordinate support: 2D (x2/y2), 3D (x3/y3/z3), and
|
|
27
|
+
fractional (xFract/yFract/zFract) coordinates round-trip through
|
|
28
|
+
canonical.
|
|
29
|
+
- Stereo support: `AtomParity` and `BondStereo` round-trip through
|
|
30
|
+
canonical Model.
|
|
31
|
+
- Compchem module support: `<module>`-rooted documents parse and
|
|
32
|
+
round-trip through canonical.
|
|
33
|
+
- Property/Formula/Label as children of Molecule — no more silent
|
|
34
|
+
data loss on `<property>` inside `<molecule>`.
|
|
35
|
+
- `Visitable` mixin: uniform interface for constraint walker
|
|
36
|
+
(`wire_children`, `node_id`, `element_name`).
|
|
37
|
+
- Canon-based semantic XML comparison in specs.
|
|
38
|
+
- Attribution: NOTICES.adoc credits xml-cml.org editors and
|
|
39
|
+
CC-BY-3.0 license for upstream content.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- Namespace renamed from `ChemicalML` to `Chemicalml`.
|
|
44
|
+
- Wire classes load lazily via `autoload` — every file, every
|
|
45
|
+
constant.
|
|
46
|
+
- Serialization goes through `lutaml-model` only — no hand-rolled
|
|
47
|
+
XML.
|
|
48
|
+
- Schema 2.4 correctly lacks `<module>` (schema 3 only).
|
|
49
|
+
|
|
50
|
+
## [0.1.0] - 2026-07-13
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
9
54
|
- Initial gem scaffold: autoload tree, version, errors.
|
|
10
|
-
- CML namespace declaration
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
`Document`, `Molecule`, `AtomArray`, `Atom`, `BondArray`, `Bond`,
|
|
14
|
-
`Reaction`, `ReactantList`, `Reactant`, `ProductList`, `Product`,
|
|
15
|
-
`ReactionList`, `Name`, `Identifier`.
|
|
16
|
-
- AsciiChem extension namespace (`Chemicalml::Ext::Namespace`) for
|
|
17
|
-
attributes CML doesn't natively cover (lone pairs, radical
|
|
18
|
-
electrons, stereochemistry).
|
|
19
|
-
- Round-trip specs covering canonical CML fragments.
|
|
55
|
+
- CML namespace declaration.
|
|
56
|
+
- CML model classes for the core element set.
|
|
57
|
+
- Round-trip specs.
|
|
20
58
|
|
|
21
59
|
[Unreleased]: https://github.com/lutaml/chemicalml/commits/main
|
|
60
|
+
[0.2.0]: https://github.com/lutaml/chemicalml/releases/tag/v0.2.0
|
|
61
|
+
[0.1.0]: https://github.com/lutaml/chemicalml/releases/tag/v0.1.0
|
data/CLAUDE.md
CHANGED
|
@@ -33,23 +33,30 @@ is regenerated by RSpec on every run, and `Gemfile.lock` is development-only.
|
|
|
33
33
|
|
|
34
34
|
## Architecture (big picture)
|
|
35
35
|
|
|
36
|
-
There are **
|
|
36
|
+
There are **four namespaces** under `Chemicalml`, deliberately kept
|
|
37
37
|
independent:
|
|
38
38
|
|
|
39
39
|
```
|
|
40
40
|
Chemicalml
|
|
41
41
|
├── parse(xml, schema: :schema3) # top-level entry point
|
|
42
|
-
├──
|
|
43
|
-
├──
|
|
44
|
-
│ ├──
|
|
45
|
-
│ ├──
|
|
46
|
-
│ ├──
|
|
47
|
-
│
|
|
42
|
+
├── Cml # CML model (lutaml-model Serializables)
|
|
43
|
+
│ ├── Base::* # shared attribute + xml-mapping mixins
|
|
44
|
+
│ ├── Schema3::* # Schema 3 classes (121 elements)
|
|
45
|
+
│ ├── Schema24::* # Schema 2.4 classes (121 + 3 legacy)
|
|
46
|
+
│ ├── Role::* # type-marker modules (schema-version-agnostic)
|
|
47
|
+
│ ├── Visitable # constraint-walker interface
|
|
48
|
+
│ └── WireClassRegistry # (schema, role) → class lookup
|
|
48
49
|
├── Schema # version registry
|
|
49
50
|
├── Convention # 5 conventions + constraint framework
|
|
50
51
|
└── Dictionary # dictionary model + YAML store
|
|
51
52
|
```
|
|
52
53
|
|
|
54
|
+
The Cml classes ARE the model — every one is a
|
|
55
|
+
`Lutaml::Model::Serializable` subclass with `attribute` declarations
|
|
56
|
+
and an `xml do ... end` mapping block. lutaml-model handles XML
|
|
57
|
+
parsing and serialization directly. There is no separate "canonical"
|
|
58
|
+
layer and no translator.
|
|
59
|
+
|
|
53
60
|
### Schema-versioned wire classes (mirrors `mml` V3/V4 pattern)
|
|
54
61
|
|
|
55
62
|
Both Schema 3 and Schema 2.4 have **real, distinct** class hierarchies
|
|
@@ -83,43 +90,41 @@ Chemicalml::Cml::Schema3.parse(xml) # version-specific
|
|
|
83
90
|
Chemicalml::Cml::Schema24.parse(xml) # version-specific
|
|
84
91
|
```
|
|
85
92
|
|
|
86
|
-
### The
|
|
87
|
-
|
|
88
|
-
Plain Ruby `Node` subclasses. **No XML, no JSON, no YAML**. Format-agnostic.
|
|
89
|
-
Every adapter speaks this model; adapters never talk to each other directly.
|
|
90
|
-
`Node` provides `accept(visitor)`, `value_attributes`, `children`, and
|
|
91
|
-
class-level `short_name` so visitors written against the canonical model
|
|
92
|
-
work across every adapter.
|
|
93
|
+
### The CML model (`Chemicalml::Cml::*`)
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
Every CML element is a `Lutaml::Model::Serializable` subclass — these
|
|
96
|
+
ARE the model. lutaml-model is format-agnostic (XML/JSON/YAML/TOML
|
|
97
|
+
via adapters), so the same class supports whatever serialization
|
|
98
|
+
lutaml-model supports. Each class includes three mixins:
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
`
|
|
102
|
-
`wire_children`, `node_id`, `element_name`).
|
|
100
|
+
- a `Base::*` module (shared `attribute` declarations + `xml do ... end`
|
|
101
|
+
mapping block + `namespace Chemicalml::Cml::Namespace`)
|
|
102
|
+
- a `Role::*` marker module (type identity used by constraints —
|
|
103
|
+
independent of which schema version's class it is)
|
|
104
|
+
- `Cml::Visitable` (uniform interface for the constraint walker —
|
|
105
|
+
`wire_children`, `node_id`, `element_name`)
|
|
103
106
|
|
|
104
107
|
Wire classes are generated in-place by each schema module from the
|
|
105
|
-
shared `Chemicalml::Cml::Elements::ALL` table —
|
|
106
|
-
|
|
107
|
-
one `Base::*` mixin, and one `Role::*` module.
|
|
108
|
-
`Schema24::*` pick up the new element
|
|
109
|
-
listed in `Elements::SCHEMA3_ONLY`
|
|
108
|
+
shared `Chemicalml::Cml::Elements::ALL` table — 121 entries spanning
|
|
109
|
+
the entire Schema 3 XSD. Adding a new CML element = adding one entry
|
|
110
|
+
to `Elements::ALL`, one `Base::*` mixin, and one `Role::*` module.
|
|
111
|
+
Both `Schema3::*` and `Schema24::*` pick up the new element
|
|
112
|
+
automatically unless it's listed in `Elements::SCHEMA3_ONLY`
|
|
113
|
+
(currently `%i[AnyCml]` — the only element in Schema 3 that Schema 2.4
|
|
114
|
+
lacks; verified by direct XSD diff).
|
|
115
|
+
|
|
116
|
+
Schema 2.4 actually declares 137 elements (a superset of Schema 3 in
|
|
117
|
+
most respects); 17 legacy elements (`alternative`, `annotation`,
|
|
118
|
+
`appinfo`, `arg`, `complexObject`, `enumeration`, `expression`,
|
|
119
|
+
`float`, `floatArray`, `integer`, `integerArray`, `operator`,
|
|
120
|
+
`relatedEntry`, `string`, `stringArray`, `tcell`, `trow`) are
|
|
121
|
+
Schema-2.4-only. Three of them (`annotation`, `appinfo`,
|
|
122
|
+
`enumeration`) are explicitly modeled in `Elements::SCHEMA24_ONLY`
|
|
123
|
+
because they carry semantic meaning; the rest are redundant with
|
|
124
|
+
Schema 3's unified `scalar`/`array`/`table` machinery.
|
|
110
125
|
|
|
111
126
|
The framework handles (de)serialization; **never** add `def to_xml` /
|
|
112
|
-
`def from_xml` /
|
|
113
|
-
`def to_h` to these classes.
|
|
114
|
-
|
|
115
|
-
### The translator (`Chemicalml::Cml::Translator`)
|
|
116
|
-
|
|
117
|
-
Pure transformation. `to_canonical(wire_doc)` accepts either Schema3
|
|
118
|
-
or Schema24 wire documents (dispatches via `is_a?`).
|
|
119
|
-
`from_canonical(model_doc, schema: :schema3)` produces the requested
|
|
120
|
-
schema's wire format. It is the **only** place that imports both
|
|
121
|
-
`Chemicalml::Model` and `Chemicalml::Cml`. Adding a new CML element
|
|
122
|
-
means updating translator rules — the two namespaces stay decoupled.
|
|
127
|
+
`def from_xml` / `def to_h` to these classes.
|
|
123
128
|
|
|
124
129
|
### Schema versions
|
|
125
130
|
|
|
@@ -172,9 +177,11 @@ These are non-negotiable and apply in addition to the user's global rules:
|
|
|
172
177
|
or `respond_to?` for type checks.** Use `is_a?` or design the type
|
|
173
178
|
hierarchy so the check isn't needed.
|
|
174
179
|
|
|
175
|
-
5. **One concern, one place (MECE).** Adding a CML element = adding
|
|
176
|
-
|
|
177
|
-
|
|
180
|
+
5. **One concern, one place (MECE).** Adding a CML element = adding
|
|
181
|
+
one `Base::*` mixin + one `Role::*` module + one entry to
|
|
182
|
+
`Elements::ALL` + (if needed) one entry to `SCHEMA3_ONLY` or
|
|
183
|
+
`SCHEMA24_ONLY`. Both Schema3::* and Schema24::* pick it up
|
|
184
|
+
automatically.
|
|
178
185
|
|
|
179
186
|
## Reference docs (in-tree)
|
|
180
187
|
|
data/Gemfile
CHANGED
|
@@ -4,10 +4,11 @@ source "https://rubygems.org"
|
|
|
4
4
|
|
|
5
5
|
gemspec
|
|
6
6
|
|
|
7
|
+
gem "rake", "~> 13.2"
|
|
8
|
+
|
|
7
9
|
group :development do
|
|
8
10
|
gem "canon"
|
|
9
11
|
gem "nokogiri"
|
|
10
|
-
gem "rake", "~> 13.2"
|
|
11
12
|
gem "rspec", "~> 3.13"
|
|
12
13
|
gem "rubocop", "~> 1.66", require: false
|
|
13
14
|
gem "simplecov", "~> 0.22", require: false
|
data/Rakefile
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
|
-
require "rspec/core/rake_task"
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
begin
|
|
6
|
+
require "rspec/core/rake_task"
|
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
8
|
+
task default: :spec
|
|
9
|
+
rescue LoadError
|
|
10
|
+
task :default do
|
|
11
|
+
warn "rspec not available — skipping specs"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 18 — WireClassRegistry
|
|
2
|
+
|
|
3
|
+
**Status:** complete
|
|
4
|
+
**Depends on:** —
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
A central registry that, given a schema symbol and a Role module,
|
|
9
|
+
returns the right wire class. Eliminates the hardcoded `Cml::Foo`
|
|
10
|
+
references in the Translator (which are all Schema3 aliases).
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
Chemicalml::Cml::WireClassRegistry.for(:schema24, Chemicalml::Cml::Role::Molecule)
|
|
14
|
+
# => Chemicalml::Cml::Schema24::Molecule
|
|
15
|
+
|
|
16
|
+
Chemicalml::Cml::WireClassRegistry.for(:schema3, Chemicalml::Cml::Role::Atom)
|
|
17
|
+
# => Chemicalml::Cml::Schema3::Atom
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Why
|
|
21
|
+
|
|
22
|
+
The Translator today hardcodes `Cml::Molecule` (which is an alias for
|
|
23
|
+
`Schema3::Molecule`). When the user asks for a Schema24 document,
|
|
24
|
+
`Translator.from_canonical(doc, schema: :schema24)` returns a
|
|
25
|
+
`Schema24::Document` but its `molecules` collection contains
|
|
26
|
+
`Schema3::Molecule` instances. **This is a correctness bug.**
|
|
27
|
+
|
|
28
|
+
The registry centralizes the lookup so every helper can resolve the
|
|
29
|
+
right class for the requested schema.
|
|
30
|
+
|
|
31
|
+
## Deliverables
|
|
32
|
+
|
|
33
|
+
- [ ] `lib/chemicalml/cml/wire_class_registry.rb` — module with
|
|
34
|
+
`for(schema, role)` class method.
|
|
35
|
+
- [ ] Raises `ArgumentError` on unknown schema or role.
|
|
36
|
+
- [ ] Lazily resolves via `Schema3::Foo` / `Schema24::Foo` constants
|
|
37
|
+
(no eager loading).
|
|
38
|
+
- [ ] Spec coverage.
|
|
39
|
+
|
|
40
|
+
## Acceptance
|
|
41
|
+
|
|
42
|
+
- `WireClassRegistry.for(:schema24, Role::Molecule)` returns
|
|
43
|
+
`Chemicalml::Cml::Schema24::Molecule`.
|
|
44
|
+
- `WireClassRegistry.for(:schema3, Role::Atom)` returns
|
|
45
|
+
`Chemicalml::Cml::Schema3::Atom`.
|
|
46
|
+
- Unknown schema raises `ArgumentError`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 19 — Schema-aware translator helpers
|
|
2
|
+
|
|
3
|
+
**Status:** complete
|
|
4
|
+
**Depends on:** 18
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
Replace every `Cml::Foo.new(...)` in the Translator with
|
|
9
|
+
`WireClassRegistry.for(schema, Role::Foo).new(...)`. Pass the schema
|
|
10
|
+
through every `*_from_canonical` helper.
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
Today `Translator.from_canonical(doc, schema: :schema24)` returns a
|
|
15
|
+
Schema24 Document whose children are Schema3 instances — silent
|
|
16
|
+
correctness bug. Fixing it requires the WireClassRegistry (task 18)
|
|
17
|
+
plus threading `schema:` through every helper.
|
|
18
|
+
|
|
19
|
+
## Deliverables
|
|
20
|
+
|
|
21
|
+
- [ ] Every `*_from_canonical` helper takes `schema:` keyword.
|
|
22
|
+
- [ ] `from_canonical` itself passes its `schema:` to each helper.
|
|
23
|
+
- [ ] No hardcoded `Cml::Foo` in `lib/chemicalml/cml/translator.rb`
|
|
24
|
+
or `value_translations.rb`.
|
|
25
|
+
- [ ] Spec verifying `from_canonical(schema: :schema24)` produces
|
|
26
|
+
Schema24 children at every level (Document, Molecule, Atom,
|
|
27
|
+
Bond, Name, Identifier, etc.).
|
|
28
|
+
|
|
29
|
+
## Acceptance
|
|
30
|
+
|
|
31
|
+
- Round-trip canonical → Schema24 wire → canonical yields equal doc.
|
|
32
|
+
- `wire.molecules.first` is a `Schema24::Molecule` (not Schema3).
|
|
33
|
+
- `wire.molecules.first.atom_array.atoms.first` is a `Schema24::Atom`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 20 — Missing translator rules
|
|
2
|
+
|
|
3
|
+
**Status:** complete
|
|
4
|
+
**Depends on:** 19
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
The Translator today handles: Document, Molecule, AtomArray,
|
|
9
|
+
Atom, BondArray, Bond, Name, Identifier, Reaction, ReactionList,
|
|
10
|
+
ReactantList, Reactant, ProductList, Product, Substance, plus
|
|
11
|
+
value containers (Scalar, Array, Matrix, Property, Parameter),
|
|
12
|
+
Label, Metadata, Formula via the ValueTranslations module.
|
|
13
|
+
|
|
14
|
+
Missing: **Module** (compchem), **PropertyList**, **ParameterList**,
|
|
15
|
+
**MetadataList**, **AtomParity**, **BondStereo**, **Dictionary**,
|
|
16
|
+
**DictionaryEntry**, **Unit**, **UnitList**, **UnitType**,
|
|
17
|
+
**UnitTypeList**, **List**.
|
|
18
|
+
|
|
19
|
+
Add canonical ↔ wire rules for each so compchem modules and
|
|
20
|
+
dictionaries can round-trip through canonical.
|
|
21
|
+
|
|
22
|
+
## Why
|
|
23
|
+
|
|
24
|
+
- Compchem modules can't be translated today — the wire class exists
|
|
25
|
+
but no canonical mapping does.
|
|
26
|
+
- Dictionary / Unit / UnitType wire classes have no canonical
|
|
27
|
+
counterpart. They could reuse `Chemicalml::Dictionary::Model` etc.
|
|
28
|
+
but the Translator doesn't connect them.
|
|
29
|
+
|
|
30
|
+
## Deliverables
|
|
31
|
+
|
|
32
|
+
- [ ] `module_to_canonical` / `module_from_canonical` — handles
|
|
33
|
+
nested modules, parameter_lists, property_lists,
|
|
34
|
+
metadata_lists, molecules, lists.
|
|
35
|
+
- [ ] `property_list_to_canonical` / `property_list_from_canonical`.
|
|
36
|
+
- [ ] `parameter_list_to_canonical` / `parameter_list_from_canonical`.
|
|
37
|
+
- [ ] `metadata_list_to_canonical` / `metadata_list_from_canonical`.
|
|
38
|
+
- [ ] Specs covering each new rule.
|
|
39
|
+
|
|
40
|
+
## Acceptance
|
|
41
|
+
|
|
42
|
+
- Round-trip a compchem module fixture through canonical → wire →
|
|
43
|
+
canonical yields equal model.
|
|
44
|
+
- Specs green.
|