chemicalml 0.1.0 → 0.2.0
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 +28 -0
- data/CHANGELOG.md +52 -12
- 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/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 +28 -0
- data/lib/chemicalml/cml/base/action.rb +30 -0
- data/lib/chemicalml/cml/base/action_list.rb +33 -0
- data/lib/chemicalml/cml/base/amount.rb +28 -0
- data/lib/chemicalml/cml/base/angle.rb +32 -0
- data/lib/chemicalml/cml/base/any_cml.rb +28 -0
- data/lib/chemicalml/cml/base/array.rb +1 -1
- data/lib/chemicalml/cml/base/array_list.rb +28 -0
- data/lib/chemicalml/cml/base/atom.rb +19 -1
- data/lib/chemicalml/cml/base/atom_array.rb +1 -1
- data/lib/chemicalml/cml/base/atom_parity.rb +1 -1
- data/lib/chemicalml/cml/base/atom_set.rb +28 -0
- data/lib/chemicalml/cml/base/atom_type.rb +32 -0
- data/lib/chemicalml/cml/base/atom_type_list.rb +31 -0
- data/lib/chemicalml/cml/base/atomic_basis_function.rb +40 -0
- data/lib/chemicalml/cml/base/band.rb +32 -0
- data/lib/chemicalml/cml/base/band_list.rb +31 -0
- data/lib/chemicalml/cml/base/basis_set.rb +31 -0
- data/lib/chemicalml/cml/base/bond.rb +5 -1
- data/lib/chemicalml/cml/base/bond_array.rb +1 -1
- data/lib/chemicalml/cml/base/bond_set.rb +28 -0
- data/lib/chemicalml/cml/base/bond_stereo.rb +1 -1
- data/lib/chemicalml/cml/base/bond_type.rb +32 -0
- data/lib/chemicalml/cml/base/bond_type_list.rb +31 -0
- data/lib/chemicalml/cml/base/cell_parameter.rb +34 -0
- data/lib/chemicalml/cml/base/cml_module.rb +1 -1
- data/lib/chemicalml/cml/base/condition_list.rb +33 -0
- data/lib/chemicalml/cml/base/crystal.rb +35 -0
- data/lib/chemicalml/cml/base/definition.rb +30 -0
- data/lib/chemicalml/cml/base/description.rb +30 -0
- data/lib/chemicalml/cml/base/dictionary.rb +1 -1
- data/lib/chemicalml/cml/base/dictionary_entry.rb +1 -1
- data/lib/chemicalml/cml/base/dimension.rb +32 -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 +34 -0
- data/lib/chemicalml/cml/base/electron.rb +36 -0
- data/lib/chemicalml/cml/base/formula.rb +1 -1
- data/lib/chemicalml/cml/base/fragment.rb +35 -0
- data/lib/chemicalml/cml/base/fragment_list.rb +31 -0
- data/lib/chemicalml/cml/base/gradient.rb +32 -0
- data/lib/chemicalml/cml/base/identifier.rb +1 -1
- data/lib/chemicalml/cml/base/isotope.rb +34 -0
- data/lib/chemicalml/cml/base/isotope_list.rb +31 -0
- data/lib/chemicalml/cml/base/join.rb +30 -0
- data/lib/chemicalml/cml/base/kpoint.rb +32 -0
- data/lib/chemicalml/cml/base/kpoint_list.rb +31 -0
- data/lib/chemicalml/cml/base/label.rb +1 -1
- data/lib/chemicalml/cml/base/lattice.rb +35 -0
- data/lib/chemicalml/cml/base/lattice_vector.rb +30 -0
- data/lib/chemicalml/cml/base/length.rb +32 -0
- data/lib/chemicalml/cml/base/line3.rb +30 -0
- data/lib/chemicalml/cml/base/link.rb +38 -0
- data/lib/chemicalml/cml/base/list.rb +1 -1
- data/lib/chemicalml/cml/base/map.rb +28 -0
- data/lib/chemicalml/cml/base/matrix.rb +1 -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 +1 -1
- data/lib/chemicalml/cml/base/metadata_list.rb +1 -1
- data/lib/chemicalml/cml/base/molecule.rb +17 -1
- data/lib/chemicalml/cml/base/molecule_list.rb +31 -0
- data/lib/chemicalml/cml/base/name.rb +1 -1
- data/lib/chemicalml/cml/base/object.rb +30 -0
- data/lib/chemicalml/cml/base/observation.rb +28 -0
- data/lib/chemicalml/cml/base/parameter.rb +1 -1
- data/lib/chemicalml/cml/base/parameter_list.rb +1 -1
- data/lib/chemicalml/cml/base/particle.rb +30 -0
- data/lib/chemicalml/cml/base/peak.rb +40 -0
- data/lib/chemicalml/cml/base/peak_group.rb +31 -0
- data/lib/chemicalml/cml/base/peak_list.rb +33 -0
- data/lib/chemicalml/cml/base/peak_structure.rb +30 -0
- data/lib/chemicalml/cml/base/plane3.rb +30 -0
- data/lib/chemicalml/cml/base/point3.rb +30 -0
- data/lib/chemicalml/cml/base/potential.rb +30 -0
- data/lib/chemicalml/cml/base/potential_form.rb +30 -0
- data/lib/chemicalml/cml/base/potential_list.rb +31 -0
- data/lib/chemicalml/cml/base/product.rb +1 -1
- data/lib/chemicalml/cml/base/product_list.rb +1 -1
- data/lib/chemicalml/cml/base/property.rb +1 -1
- data/lib/chemicalml/cml/base/property_list.rb +1 -1
- data/lib/chemicalml/cml/base/reactant.rb +1 -1
- data/lib/chemicalml/cml/base/reactant_list.rb +1 -1
- data/lib/chemicalml/cml/base/reaction.rb +9 -1
- data/lib/chemicalml/cml/base/reaction_list.rb +1 -1
- data/lib/chemicalml/cml/base/reaction_scheme.rb +33 -0
- data/lib/chemicalml/cml/base/reaction_step.rb +35 -0
- data/lib/chemicalml/cml/base/reaction_step_list.rb +31 -0
- data/lib/chemicalml/cml/base/reactive_centre.rb +30 -0
- data/lib/chemicalml/cml/base/region.rb +28 -0
- data/lib/chemicalml/cml/base/sample.rb +28 -0
- data/lib/chemicalml/cml/base/scalar.rb +1 -1
- data/lib/chemicalml/cml/base/spectator.rb +28 -0
- data/lib/chemicalml/cml/base/spectator_list.rb +31 -0
- data/lib/chemicalml/cml/base/spectrum.rb +41 -0
- data/lib/chemicalml/cml/base/spectrum_data.rb +33 -0
- data/lib/chemicalml/cml/base/spectrum_list.rb +31 -0
- data/lib/chemicalml/cml/base/sphere3.rb +30 -0
- data/lib/chemicalml/cml/base/stmml.rb +28 -0
- data/lib/chemicalml/cml/base/substance.rb +1 -1
- data/lib/chemicalml/cml/base/substance_list.rb +31 -0
- data/lib/chemicalml/cml/base/symmetry.rb +32 -0
- data/lib/chemicalml/cml/base/system.rb +33 -0
- data/lib/chemicalml/cml/base/table.rb +33 -0
- data/lib/chemicalml/cml/base/table_cell.rb +30 -0
- data/lib/chemicalml/cml/base/table_content.rb +33 -0
- data/lib/chemicalml/cml/base/table_header.rb +31 -0
- data/lib/chemicalml/cml/base/table_header_cell.rb +30 -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/torsion.rb +32 -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/unit.rb +1 -1
- data/lib/chemicalml/cml/base/unit_list.rb +1 -1
- data/lib/chemicalml/cml/base/unit_type.rb +1 -1
- data/lib/chemicalml/cml/base/unit_type_list.rb +1 -1
- data/lib/chemicalml/cml/base/vector3.rb +30 -0
- data/lib/chemicalml/cml/base/xaxis.rb +32 -0
- data/lib/chemicalml/cml/base/yaxis.rb +32 -0
- data/lib/chemicalml/cml/base/z_matrix.rb +30 -0
- data/lib/chemicalml/cml/base.rb +85 -0
- data/lib/chemicalml/cml/child_mappings.rb +168 -0
- data/lib/chemicalml/cml/elements.rb +130 -42
- 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/amount.rb +12 -0
- data/lib/chemicalml/cml/role/angle.rb +12 -0
- data/lib/chemicalml/cml/role/any_cml.rb +12 -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/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/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/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/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/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/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/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/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 +86 -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/amount.rb +13 -0
- data/lib/chemicalml/cml/schema24/angle.rb +13 -0
- data/lib/chemicalml/cml/schema24/any_cml.rb +13 -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/condition_list.rb +13 -0
- 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/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/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/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/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/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/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/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 +131 -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/translator/value_translations.rb +40 -35
- data/lib/chemicalml/cml/translator.rb +319 -68
- data/lib/chemicalml/cml/wire_class_registry.rb +42 -0
- data/lib/chemicalml/cml.rb +138 -44
- 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_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_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_order_should_not_be_numeric.rb +27 -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 +20 -3
- data/lib/chemicalml/convention/molecular.rb +10 -0
- data/lib/chemicalml/model/atom.rb +28 -4
- data/lib/chemicalml/model/atom_parity.rb +21 -0
- data/lib/chemicalml/model/bond.rb +9 -3
- data/lib/chemicalml/model/bond_stereo.rb +29 -0
- data/lib/chemicalml/model/molecule.rb +13 -6
- data/lib/chemicalml/model.rb +2 -0
- data/lib/chemicalml/version.rb +1 -1
- data/lib/chemicalml/versioned_parser.rb +53 -12
- data/lib/chemicalml.rb +3 -1
- metadata +476 -40
- 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/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
|
@@ -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:
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# CIF Core Definitions Dictionary
|
|
2
|
+
#
|
|
3
|
+
# Source: http://www.xml-cml.org/dictionary/cif/
|
|
4
|
+
# License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/)
|
|
5
|
+
#
|
|
6
|
+
# Derived from the Crystallographic Information File (CIF) core
|
|
7
|
+
# dictionary. Covers crystallographic concepts referenced from CML
|
|
8
|
+
# crystal elements and properties.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
namespace: http://www.xml-cml.org/dictionary/cif/
|
|
12
|
+
prefix: cif
|
|
13
|
+
title: CIF Core Definitions
|
|
14
|
+
description: |
|
|
15
|
+
Crystallographic concepts from the CIF core dictionary, mapped
|
|
16
|
+
to CML dictionary entries. Used with the CML <crystal> element
|
|
17
|
+
and crystallographic properties.
|
|
18
|
+
|
|
19
|
+
entries:
|
|
20
|
+
- id: cell_length_a
|
|
21
|
+
term: Unit Cell Length a
|
|
22
|
+
definition: The length of the unit cell a axis.
|
|
23
|
+
data_type: xsd:double
|
|
24
|
+
unit_type: unitType:length
|
|
25
|
+
units: unit:angstrom
|
|
26
|
+
|
|
27
|
+
- id: cell_length_b
|
|
28
|
+
term: Unit Cell Length b
|
|
29
|
+
definition: The length of the unit cell b axis.
|
|
30
|
+
data_type: xsd:double
|
|
31
|
+
unit_type: unitType:length
|
|
32
|
+
units: unit:angstrom
|
|
33
|
+
|
|
34
|
+
- id: cell_length_c
|
|
35
|
+
term: Unit Cell Length c
|
|
36
|
+
definition: The length of the unit cell c axis.
|
|
37
|
+
data_type: xsd:double
|
|
38
|
+
unit_type: unitType:length
|
|
39
|
+
units: unit:angstrom
|
|
40
|
+
|
|
41
|
+
- id: cell_angle_alpha
|
|
42
|
+
term: Unit Cell Angle Alpha
|
|
43
|
+
definition: The inter-axial angle between the b and c cell axes.
|
|
44
|
+
data_type: xsd:double
|
|
45
|
+
unit_type: unitType:angle
|
|
46
|
+
units: unit:degree
|
|
47
|
+
|
|
48
|
+
- id: cell_angle_beta
|
|
49
|
+
term: Unit Cell Angle Beta
|
|
50
|
+
definition: The inter-axial angle between the a and c cell axes.
|
|
51
|
+
data_type: xsd:double
|
|
52
|
+
unit_type: unitType:angle
|
|
53
|
+
units: unit:degree
|
|
54
|
+
|
|
55
|
+
- id: cell_angle_gamma
|
|
56
|
+
term: Unit Cell Angle Gamma
|
|
57
|
+
definition: The inter-axial angle between the a and b cell axes.
|
|
58
|
+
data_type: xsd:double
|
|
59
|
+
unit_type: unitType:angle
|
|
60
|
+
units: unit:degree
|
|
61
|
+
|
|
62
|
+
- id: cell_volume
|
|
63
|
+
term: Unit Cell Volume
|
|
64
|
+
definition: The volume of the crystallographic unit cell.
|
|
65
|
+
data_type: xsd:double
|
|
66
|
+
unit_type: unitType:volume
|
|
67
|
+
units: unit:angstrom3
|
|
68
|
+
|
|
69
|
+
- id: cell_formula_units
|
|
70
|
+
term: Formula Units Per Cell (Z)
|
|
71
|
+
definition: The number of formula units in the unit cell.
|
|
72
|
+
data_type: xsd:integer
|
|
73
|
+
unit_type: unitType:dimensionless
|
|
74
|
+
|
|
75
|
+
- id: crystal_system
|
|
76
|
+
term: Crystal System
|
|
77
|
+
definition: One of the seven crystal systems (triclinic, monoclinic, orthorhombic, tetragonal, trigonal, hexagonal, cubic).
|
|
78
|
+
data_type: xsd:string
|
|
79
|
+
unit_type: unitType:none
|
|
80
|
+
units: unit:none
|
|
81
|
+
enum:
|
|
82
|
+
kind: closed
|
|
83
|
+
values:
|
|
84
|
+
- triclinic
|
|
85
|
+
- monoclinic
|
|
86
|
+
- orthorhombic
|
|
87
|
+
- tetragonal
|
|
88
|
+
- trigonal
|
|
89
|
+
- hexagonal
|
|
90
|
+
- cubic
|
|
91
|
+
|
|
92
|
+
- id: space_group_name
|
|
93
|
+
term: Space Group Name
|
|
94
|
+
definition: The Hermann-Mauguin symbol for the crystal space group.
|
|
95
|
+
data_type: xsd:string
|
|
96
|
+
unit_type: unitType:none
|
|
97
|
+
units: unit:none
|
|
98
|
+
|
|
99
|
+
- id: space_group_number
|
|
100
|
+
term: Space Group Number
|
|
101
|
+
definition: The International Tables space group number (1-230).
|
|
102
|
+
data_type: xsd:integer
|
|
103
|
+
unit_type: unitType:dimensionless
|
|
104
|
+
|
|
105
|
+
- id: symmetry_equiv_pos
|
|
106
|
+
term: Symmetry Equivalent Position
|
|
107
|
+
definition: A symmetry-equivalent atomic position in fractional coordinates.
|
|
108
|
+
data_type: xsd:string
|
|
109
|
+
unit_type: unitType:none
|
|
110
|
+
units: unit:none
|
|
111
|
+
|
|
112
|
+
- id: atom_site_fract_x
|
|
113
|
+
term: Atom Fractional X
|
|
114
|
+
definition: The x coordinate of an atom in fractional cell units.
|
|
115
|
+
data_type: xsd:double
|
|
116
|
+
unit_type: unitType:dimensionless
|
|
117
|
+
|
|
118
|
+
- id: atom_site_fract_y
|
|
119
|
+
term: Atom Fractional Y
|
|
120
|
+
definition: The y coordinate of an atom in fractional cell units.
|
|
121
|
+
data_type: xsd:double
|
|
122
|
+
unit_type: unitType:dimensionless
|
|
123
|
+
|
|
124
|
+
- id: atom_site_fract_z
|
|
125
|
+
term: Atom Fractional Z
|
|
126
|
+
definition: The z coordinate of an atom in fractional cell units.
|
|
127
|
+
data_type: xsd:double
|
|
128
|
+
unit_type: unitType:dimensionless
|
|
129
|
+
|
|
130
|
+
- id: atom_site_occupancy
|
|
131
|
+
term: Atom Site Occupancy
|
|
132
|
+
definition: The fractional occupancy of an atomic site.
|
|
133
|
+
data_type: xsd:double
|
|
134
|
+
unit_type: unitType:dimensionless
|
|
135
|
+
|
|
136
|
+
- id: atom_site_B_iso
|
|
137
|
+
term: Atom Isotropic B Factor
|
|
138
|
+
definition: The isotropic atomic displacement parameter (B factor).
|
|
139
|
+
data_type: xsd:double
|
|
140
|
+
unit_type: unitType:area
|
|
141
|
+
units: unit:angstrom2
|
|
142
|
+
|
|
143
|
+
- id: diffrn_radiation_wavelength
|
|
144
|
+
term: Radiation Wavelength
|
|
145
|
+
definition: The wavelength of the radiation used in diffraction.
|
|
146
|
+
data_type: xsd:double
|
|
147
|
+
unit_type: unitType:length
|
|
148
|
+
units: unit:angstrom
|
|
149
|
+
|
|
150
|
+
- id: refln_d_resolution
|
|
151
|
+
term: Resolution (d-spacing)
|
|
152
|
+
definition: The highest-resolution d-spacing in the diffraction data.
|
|
153
|
+
data_type: xsd:double
|
|
154
|
+
unit_type: unitType:length
|
|
155
|
+
units: unit:angstrom
|