chemicalml 0.1.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.
Files changed (248) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rubocop.yml +20 -0
  4. data/CHANGELOG.md +21 -0
  5. data/CLAUDE.md +198 -0
  6. data/Gemfile +14 -0
  7. data/LICENSE +24 -0
  8. data/NOTICES.adoc +115 -0
  9. data/README.adoc +87 -0
  10. data/Rakefile +8 -0
  11. data/TODO.align/01-cml-base-mixins.md +122 -0
  12. data/TODO.align/02-real-schema-hierarchies.md +88 -0
  13. data/TODO.align/03-configuration.md +50 -0
  14. data/TODO.align/04-parse-entry-points.md +59 -0
  15. data/TODO.align/05-schema-aware-translator.md +33 -0
  16. data/TODO.align/06-no-respond-to.md +44 -0
  17. data/TODO.align/07-canon-xml-comparison.md +43 -0
  18. data/TODO.align/08-expand-fixtures.md +37 -0
  19. data/TODO.align/09-final-spec-lint.md +29 -0
  20. data/TODO.align/10-role-marker-modules.md +54 -0
  21. data/TODO.align/11-dry-configuration.md +63 -0
  22. data/TODO.align/12-wire-class-macro.md +51 -0
  23. data/TODO.align/13-wire-namespace.md +44 -0
  24. data/TODO.align/14-schema24-correctness.md +37 -0
  25. data/TODO.align/15-canon-fixture-roundtrip.md +38 -0
  26. data/TODO.align/16-schema24-convention-coverage.md +33 -0
  27. data/TODO.align/17-final-spec-lint.md +28 -0
  28. data/TODO.align/README.md +27 -0
  29. data/TODO.align/README.round2.md +24 -0
  30. data/TODO.cml-full/01-reference-docs.md +43 -0
  31. data/TODO.cml-full/02-schema-versioned-model.md +70 -0
  32. data/TODO.cml-full/03-fixtures-scrape.md +52 -0
  33. data/TODO.cml-full/04-convention-framework.md +69 -0
  34. data/TODO.cml-full/05-dictionary-layer.md +77 -0
  35. data/TODO.cml-full/06-extend-canonical-translator.md +60 -0
  36. data/TODO.cml-full/07-attribution-notices.md +42 -0
  37. data/TODO.cml-full/08-autoload-only.md +48 -0
  38. data/TODO.cml-full/09-spec-coverage.md +38 -0
  39. data/TODO.cml-full/README.md +23 -0
  40. data/chemicalml.gemspec +35 -0
  41. data/data/dictionaries/_index.yaml +14 -0
  42. data/data/dictionaries/compchem.yaml +481 -0
  43. data/data/dictionaries/unit_non_si.yaml +53 -0
  44. data/data/dictionaries/unit_si.yaml +87 -0
  45. data/data/dictionaries/unit_type.yaml +113 -0
  46. data/lib/chemicalml/cml/array.rb +10 -0
  47. data/lib/chemicalml/cml/atom.rb +10 -0
  48. data/lib/chemicalml/cml/atom_array.rb +10 -0
  49. data/lib/chemicalml/cml/atom_parity.rb +10 -0
  50. data/lib/chemicalml/cml/base/array.rb +36 -0
  51. data/lib/chemicalml/cml/base/atom.rb +38 -0
  52. data/lib/chemicalml/cml/base/atom_array.rb +22 -0
  53. data/lib/chemicalml/cml/base/atom_parity.rb +24 -0
  54. data/lib/chemicalml/cml/base/bond.rb +28 -0
  55. data/lib/chemicalml/cml/base/bond_array.rb +22 -0
  56. data/lib/chemicalml/cml/base/bond_stereo.rb +28 -0
  57. data/lib/chemicalml/cml/base/cml_module.rb +40 -0
  58. data/lib/chemicalml/cml/base/dictionary.rb +32 -0
  59. data/lib/chemicalml/cml/base/dictionary_entry.rb +34 -0
  60. data/lib/chemicalml/cml/base/document.rb +26 -0
  61. data/lib/chemicalml/cml/base/formula.rb +38 -0
  62. data/lib/chemicalml/cml/base/identifier.rb +26 -0
  63. data/lib/chemicalml/cml/base/label.rb +28 -0
  64. data/lib/chemicalml/cml/base/list.rb +36 -0
  65. data/lib/chemicalml/cml/base/matrix.rb +38 -0
  66. data/lib/chemicalml/cml/base/metadata.rb +30 -0
  67. data/lib/chemicalml/cml/base/metadata_list.rb +28 -0
  68. data/lib/chemicalml/cml/base/molecule.rb +40 -0
  69. data/lib/chemicalml/cml/base/name.rb +26 -0
  70. data/lib/chemicalml/cml/base/parameter.rb +34 -0
  71. data/lib/chemicalml/cml/base/parameter_list.rb +28 -0
  72. data/lib/chemicalml/cml/base/product.rb +22 -0
  73. data/lib/chemicalml/cml/base/product_list.rb +22 -0
  74. data/lib/chemicalml/cml/base/property.rb +34 -0
  75. data/lib/chemicalml/cml/base/property_list.rb +28 -0
  76. data/lib/chemicalml/cml/base/reactant.rb +22 -0
  77. data/lib/chemicalml/cml/base/reactant_list.rb +22 -0
  78. data/lib/chemicalml/cml/base/reaction.rb +32 -0
  79. data/lib/chemicalml/cml/base/reaction_list.rb +22 -0
  80. data/lib/chemicalml/cml/base/scalar.rb +32 -0
  81. data/lib/chemicalml/cml/base/substance.rb +30 -0
  82. data/lib/chemicalml/cml/base/unit.rb +38 -0
  83. data/lib/chemicalml/cml/base/unit_list.rb +30 -0
  84. data/lib/chemicalml/cml/base/unit_type.rb +28 -0
  85. data/lib/chemicalml/cml/base/unit_type_list.rb +30 -0
  86. data/lib/chemicalml/cml/base.rb +51 -0
  87. data/lib/chemicalml/cml/bond.rb +10 -0
  88. data/lib/chemicalml/cml/bond_array.rb +10 -0
  89. data/lib/chemicalml/cml/bond_stereo.rb +10 -0
  90. data/lib/chemicalml/cml/cml_module.rb +10 -0
  91. data/lib/chemicalml/cml/dictionary.rb +10 -0
  92. data/lib/chemicalml/cml/dictionary_entry.rb +10 -0
  93. data/lib/chemicalml/cml/document.rb +10 -0
  94. data/lib/chemicalml/cml/elements.rb +58 -0
  95. data/lib/chemicalml/cml/formula.rb +10 -0
  96. data/lib/chemicalml/cml/identifier.rb +10 -0
  97. data/lib/chemicalml/cml/label.rb +10 -0
  98. data/lib/chemicalml/cml/list.rb +10 -0
  99. data/lib/chemicalml/cml/matrix.rb +10 -0
  100. data/lib/chemicalml/cml/metadata.rb +10 -0
  101. data/lib/chemicalml/cml/metadata_list.rb +10 -0
  102. data/lib/chemicalml/cml/molecule.rb +10 -0
  103. data/lib/chemicalml/cml/name.rb +10 -0
  104. data/lib/chemicalml/cml/namespace.rb +17 -0
  105. data/lib/chemicalml/cml/parameter.rb +10 -0
  106. data/lib/chemicalml/cml/parameter_list.rb +10 -0
  107. data/lib/chemicalml/cml/product.rb +10 -0
  108. data/lib/chemicalml/cml/product_list.rb +10 -0
  109. data/lib/chemicalml/cml/property.rb +10 -0
  110. data/lib/chemicalml/cml/property_list.rb +10 -0
  111. data/lib/chemicalml/cml/reactant.rb +10 -0
  112. data/lib/chemicalml/cml/reactant_list.rb +10 -0
  113. data/lib/chemicalml/cml/reaction.rb +10 -0
  114. data/lib/chemicalml/cml/reaction_list.rb +10 -0
  115. data/lib/chemicalml/cml/role/array.rb +13 -0
  116. data/lib/chemicalml/cml/role/atom.rb +13 -0
  117. data/lib/chemicalml/cml/role/atom_array.rb +13 -0
  118. data/lib/chemicalml/cml/role/atom_parity.rb +13 -0
  119. data/lib/chemicalml/cml/role/bond.rb +13 -0
  120. data/lib/chemicalml/cml/role/bond_array.rb +13 -0
  121. data/lib/chemicalml/cml/role/bond_stereo.rb +13 -0
  122. data/lib/chemicalml/cml/role/cml_module.rb +14 -0
  123. data/lib/chemicalml/cml/role/dictionary.rb +13 -0
  124. data/lib/chemicalml/cml/role/dictionary_entry.rb +13 -0
  125. data/lib/chemicalml/cml/role/document.rb +13 -0
  126. data/lib/chemicalml/cml/role/formula.rb +13 -0
  127. data/lib/chemicalml/cml/role/identifier.rb +13 -0
  128. data/lib/chemicalml/cml/role/label.rb +13 -0
  129. data/lib/chemicalml/cml/role/list.rb +13 -0
  130. data/lib/chemicalml/cml/role/matrix.rb +13 -0
  131. data/lib/chemicalml/cml/role/metadata.rb +13 -0
  132. data/lib/chemicalml/cml/role/metadata_list.rb +13 -0
  133. data/lib/chemicalml/cml/role/molecule.rb +13 -0
  134. data/lib/chemicalml/cml/role/name.rb +13 -0
  135. data/lib/chemicalml/cml/role/parameter.rb +13 -0
  136. data/lib/chemicalml/cml/role/parameter_list.rb +13 -0
  137. data/lib/chemicalml/cml/role/product.rb +13 -0
  138. data/lib/chemicalml/cml/role/product_list.rb +13 -0
  139. data/lib/chemicalml/cml/role/property.rb +13 -0
  140. data/lib/chemicalml/cml/role/property_list.rb +13 -0
  141. data/lib/chemicalml/cml/role/reactant.rb +13 -0
  142. data/lib/chemicalml/cml/role/reactant_list.rb +13 -0
  143. data/lib/chemicalml/cml/role/reaction.rb +13 -0
  144. data/lib/chemicalml/cml/role/reaction_list.rb +13 -0
  145. data/lib/chemicalml/cml/role/scalar.rb +13 -0
  146. data/lib/chemicalml/cml/role/substance.rb +13 -0
  147. data/lib/chemicalml/cml/role/unit.rb +13 -0
  148. data/lib/chemicalml/cml/role/unit_list.rb +13 -0
  149. data/lib/chemicalml/cml/role/unit_type.rb +13 -0
  150. data/lib/chemicalml/cml/role/unit_type_list.rb +13 -0
  151. data/lib/chemicalml/cml/role.rb +54 -0
  152. data/lib/chemicalml/cml/scalar.rb +10 -0
  153. data/lib/chemicalml/cml/schema24/configuration.rb +19 -0
  154. data/lib/chemicalml/cml/schema24.rb +40 -0
  155. data/lib/chemicalml/cml/schema3/configuration.rb +17 -0
  156. data/lib/chemicalml/cml/schema3.rb +40 -0
  157. data/lib/chemicalml/cml/substance.rb +10 -0
  158. data/lib/chemicalml/cml/translator/value_translations.rb +265 -0
  159. data/lib/chemicalml/cml/translator.rb +233 -0
  160. data/lib/chemicalml/cml/unit.rb +10 -0
  161. data/lib/chemicalml/cml/unit_list.rb +10 -0
  162. data/lib/chemicalml/cml/unit_type.rb +10 -0
  163. data/lib/chemicalml/cml/unit_type_list.rb +10 -0
  164. data/lib/chemicalml/cml/visitable.rb +65 -0
  165. data/lib/chemicalml/cml/wire_class_macro.rb +45 -0
  166. data/lib/chemicalml/cml.rb +55 -0
  167. data/lib/chemicalml/context_configuration.rb +127 -0
  168. data/lib/chemicalml/convention/base.rb +48 -0
  169. data/lib/chemicalml/convention/compchem/constraints/compchem_module_must_contain_job_list.rb +33 -0
  170. data/lib/chemicalml/convention/compchem/constraints/job_must_contain_initialization.rb +38 -0
  171. data/lib/chemicalml/convention/compchem/constraints.rb +14 -0
  172. data/lib/chemicalml/convention/compchem.rb +28 -0
  173. data/lib/chemicalml/convention/constraint.rb +79 -0
  174. data/lib/chemicalml/convention/dictionary/constraints/entry_ids_unique_within_dictionary.rb +33 -0
  175. data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_id_and_term.rb +34 -0
  176. data/lib/chemicalml/convention/dictionary/constraints.rb +14 -0
  177. data/lib/chemicalml/convention/dictionary.rb +28 -0
  178. data/lib/chemicalml/convention/molecular/constraints/atom_array_must_contain_atoms.rb +30 -0
  179. data/lib/chemicalml/convention/molecular/constraints/atom_ids_unique_within_molecule.rb +42 -0
  180. data/lib/chemicalml/convention/molecular/constraints/bond_must_reference_atoms_in_same_molecule.rb +54 -0
  181. data/lib/chemicalml/convention/molecular/constraints.rb +19 -0
  182. data/lib/chemicalml/convention/molecular.rb +29 -0
  183. data/lib/chemicalml/convention/registry.rb +50 -0
  184. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_symbol_and_unit_type.rb +46 -0
  185. data/lib/chemicalml/convention/unit_dictionary/constraints.rb +12 -0
  186. data/lib/chemicalml/convention/unit_dictionary.rb +27 -0
  187. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_have_id_and_name.rb +34 -0
  188. data/lib/chemicalml/convention/unit_type_dictionary/constraints.rb +12 -0
  189. data/lib/chemicalml/convention/unit_type_dictionary.rb +27 -0
  190. data/lib/chemicalml/convention/violation.rb +36 -0
  191. data/lib/chemicalml/convention.rb +39 -0
  192. data/lib/chemicalml/dictionary/entry.rb +59 -0
  193. data/lib/chemicalml/dictionary/enum.rb +51 -0
  194. data/lib/chemicalml/dictionary/link.rb +32 -0
  195. data/lib/chemicalml/dictionary/loader.rb +60 -0
  196. data/lib/chemicalml/dictionary/model.rb +64 -0
  197. data/lib/chemicalml/dictionary/registry.rb +75 -0
  198. data/lib/chemicalml/dictionary.rb +26 -0
  199. data/lib/chemicalml/errors.rb +7 -0
  200. data/lib/chemicalml/model/atom.rb +40 -0
  201. data/lib/chemicalml/model/bond.rb +33 -0
  202. data/lib/chemicalml/model/cml_array.rb +27 -0
  203. data/lib/chemicalml/model/cml_module.rb +45 -0
  204. data/lib/chemicalml/model/document.rb +29 -0
  205. data/lib/chemicalml/model/formula.rb +34 -0
  206. data/lib/chemicalml/model/identifier.rb +21 -0
  207. data/lib/chemicalml/model/label.rb +21 -0
  208. data/lib/chemicalml/model/matrix.rb +29 -0
  209. data/lib/chemicalml/model/metadata.rb +23 -0
  210. data/lib/chemicalml/model/metadata_list.rb +25 -0
  211. data/lib/chemicalml/model/molecule.rb +38 -0
  212. data/lib/chemicalml/model/name.rb +21 -0
  213. data/lib/chemicalml/model/node.rb +45 -0
  214. data/lib/chemicalml/model/parameter.rb +27 -0
  215. data/lib/chemicalml/model/parameter_list.rb +25 -0
  216. data/lib/chemicalml/model/product.rb +21 -0
  217. data/lib/chemicalml/model/product_list.rb +21 -0
  218. data/lib/chemicalml/model/property.rb +28 -0
  219. data/lib/chemicalml/model/property_list.rb +25 -0
  220. data/lib/chemicalml/model/reactant.rb +21 -0
  221. data/lib/chemicalml/model/reactant_list.rb +21 -0
  222. data/lib/chemicalml/model/reaction.rb +41 -0
  223. data/lib/chemicalml/model/reaction_list.rb +23 -0
  224. data/lib/chemicalml/model/scalar.rb +25 -0
  225. data/lib/chemicalml/model/substance.rb +25 -0
  226. data/lib/chemicalml/model.rb +38 -0
  227. data/lib/chemicalml/schema/definition.rb +41 -0
  228. data/lib/chemicalml/schema/registry.rb +30 -0
  229. data/lib/chemicalml/schema.rb +35 -0
  230. data/lib/chemicalml/version.rb +5 -0
  231. data/lib/chemicalml/versioned_parser.rb +43 -0
  232. data/lib/chemicalml.rb +47 -0
  233. data/lib/tasks/reference_fetch.rake +105 -0
  234. data/lib/tasks/scrape_fixtures.rake +133 -0
  235. data/reference-docs/conventions/compchem.md +141 -0
  236. data/reference-docs/conventions/dictionary.md +119 -0
  237. data/reference-docs/conventions/index.md +56 -0
  238. data/reference-docs/conventions/molecular.md +115 -0
  239. data/reference-docs/conventions/unit-dictionary.md +92 -0
  240. data/reference-docs/conventions/unitType-dictionary.md +51 -0
  241. data/reference-docs/dictionaries/compchem.md +335 -0
  242. data/reference-docs/dictionaries/index.md +52 -0
  243. data/reference-docs/examples/schema24-index.md +50 -0
  244. data/reference-docs/examples/schema3-compchem-index.md +14 -0
  245. data/reference-docs/examples/schema3-molecular-index.md +28 -0
  246. data/reference-docs/schemas/schema24/schema.xsd +10624 -0
  247. data/reference-docs/schemas/schema3/schema.xsd +11459 -0
  248. metadata +306 -0
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <parameter> element, regardless of schema version.
8
+ # Included by Schema3::Parameter and Schema24::Parameter.
9
+ module Parameter
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <parameterlist> element, regardless of schema version.
8
+ # Included by Schema3::ParameterList and Schema24::ParameterList.
9
+ module ParameterList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <product> element, regardless of schema version.
8
+ # Included by Schema3::Product and Schema24::Product.
9
+ module Product
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <productlist> element, regardless of schema version.
8
+ # Included by Schema3::ProductList and Schema24::ProductList.
9
+ module ProductList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <property> element, regardless of schema version.
8
+ # Included by Schema3::Property and Schema24::Property.
9
+ module Property
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <propertylist> element, regardless of schema version.
8
+ # Included by Schema3::PropertyList and Schema24::PropertyList.
9
+ module PropertyList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <reactant> element, regardless of schema version.
8
+ # Included by Schema3::Reactant and Schema24::Reactant.
9
+ module Reactant
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <reactantlist> element, regardless of schema version.
8
+ # Included by Schema3::ReactantList and Schema24::ReactantList.
9
+ module ReactantList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <reaction> element, regardless of schema version.
8
+ # Included by Schema3::Reaction and Schema24::Reaction.
9
+ module Reaction
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <reactionlist> element, regardless of schema version.
8
+ # Included by Schema3::ReactionList and Schema24::ReactionList.
9
+ module ReactionList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <scalar> element, regardless of schema version.
8
+ # Included by Schema3::Scalar and Schema24::Scalar.
9
+ module Scalar
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <substance> element, regardless of schema version.
8
+ # Included by Schema3::Substance and Schema24::Substance.
9
+ module Substance
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <unit> element, regardless of schema version.
8
+ # Included by Schema3::Unit and Schema24::Unit.
9
+ module Unit
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <unitlist> element, regardless of schema version.
8
+ # Included by Schema3::UnitList and Schema24::UnitList.
9
+ module UnitList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <unittype> element, regardless of schema version.
8
+ # Included by Schema3::UnitType and Schema24::UnitType.
9
+ module UnitType
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Role
6
+ # Type marker for any wire class implementing the CML
7
+ # <unittypelist> element, regardless of schema version.
8
+ # Included by Schema3::UnitTypeList and Schema24::UnitTypeList.
9
+ module UnitTypeList
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ # Role marker modules — one per CML element. Included by every
6
+ # schema-versioned wire class for that element (`Schema3::Molecule`
7
+ # and `Schema24::Molecule` both `include Role::Molecule`).
8
+ #
9
+ # Constraints and translator rules check `node.is_a?(Role::Molecule)`
10
+ # instead of `is_a?(Schema3::Molecule) || is_a?(Schema24::Molecule)`.
11
+ # Adding Schema5 later requires zero constraint edits — Schema5's
12
+ # classes just include the relevant Role modules.
13
+ #
14
+ # Each Role module is empty — it's a pure type marker, no methods.
15
+ module Role
16
+ autoload :Array, "chemicalml/cml/role/array"
17
+ autoload :Atom, "chemicalml/cml/role/atom"
18
+ autoload :AtomArray, "chemicalml/cml/role/atom_array"
19
+ autoload :AtomParity, "chemicalml/cml/role/atom_parity"
20
+ autoload :Bond, "chemicalml/cml/role/bond"
21
+ autoload :BondArray, "chemicalml/cml/role/bond_array"
22
+ autoload :BondStereo, "chemicalml/cml/role/bond_stereo"
23
+ autoload :Dictionary, "chemicalml/cml/role/dictionary"
24
+ autoload :DictionaryEntry, "chemicalml/cml/role/dictionary_entry"
25
+ autoload :Document, "chemicalml/cml/role/document"
26
+ autoload :Formula, "chemicalml/cml/role/formula"
27
+ autoload :Identifier, "chemicalml/cml/role/identifier"
28
+ autoload :Label, "chemicalml/cml/role/label"
29
+ autoload :List, "chemicalml/cml/role/list"
30
+ autoload :Matrix, "chemicalml/cml/role/matrix"
31
+ autoload :Metadata, "chemicalml/cml/role/metadata"
32
+ autoload :MetadataList, "chemicalml/cml/role/metadata_list"
33
+ autoload :Molecule, "chemicalml/cml/role/molecule"
34
+ autoload :Module, "chemicalml/cml/role/cml_module"
35
+ autoload :Name, "chemicalml/cml/role/name"
36
+ autoload :Parameter, "chemicalml/cml/role/parameter"
37
+ autoload :ParameterList, "chemicalml/cml/role/parameter_list"
38
+ autoload :Product, "chemicalml/cml/role/product"
39
+ autoload :ProductList, "chemicalml/cml/role/product_list"
40
+ autoload :Property, "chemicalml/cml/role/property"
41
+ autoload :PropertyList, "chemicalml/cml/role/property_list"
42
+ autoload :Reaction, "chemicalml/cml/role/reaction"
43
+ autoload :ReactionList, "chemicalml/cml/role/reaction_list"
44
+ autoload :Reactant, "chemicalml/cml/role/reactant"
45
+ autoload :ReactantList, "chemicalml/cml/role/reactant_list"
46
+ autoload :Scalar, "chemicalml/cml/role/scalar"
47
+ autoload :Substance, "chemicalml/cml/role/substance"
48
+ autoload :Unit, "chemicalml/cml/role/unit"
49
+ autoload :UnitList, "chemicalml/cml/role/unit_list"
50
+ autoload :UnitType, "chemicalml/cml/role/unit_type"
51
+ autoload :UnitTypeList, "chemicalml/cml/role/unit_type_list"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Backward-compatible alias. New code should reference the versioned
4
+ # class directly: Chemicalml::Cml::Schema3::Scalar.
5
+ module Chemicalml
6
+ module Cml
7
+ remove_const(:Scalar) if const_defined?(:Scalar, false)
8
+ const_set(:Scalar, Chemicalml::Cml::Schema3::Scalar)
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Schema24
6
+ module Configuration
7
+ extend Chemicalml::ContextConfiguration
8
+
9
+ CONTEXT_ID = :chemicalml_schema24
10
+
11
+ # Schema 2.4 lacks the generic <module> element (introduced
12
+ # in Schema 3) — skip its registration.
13
+ def self.register_models!
14
+ register_elements!(except: Chemicalml::Cml::Elements::SCHEMA3_ONLY)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ # Schema 2.4 wire classes. Same generation pattern as Schema 3,
6
+ # but skips elements that don't exist in Schema 2.4 (notably
7
+ # `<module>`, which was introduced in Schema 3).
8
+ #
9
+ # Schema-2.4-specific deviations live in additional
10
+ # `Base::Schema24Only::*` modules included by the relevant class
11
+ # via `Base::*` mixins.
12
+ module Schema24
13
+ extend Chemicalml::VersionedParser
14
+ autoload :Configuration, "chemicalml/cml/schema24/configuration"
15
+
16
+ SCHEMA = Chemicalml::Schema::Registry.lookup(:schema24)
17
+
18
+ skip = Chemicalml::Cml::Elements::SCHEMA3_ONLY.to_set
19
+ Chemicalml::Cml::Elements::ALL.each_key do |class_name|
20
+ next if skip.include?(class_name)
21
+
22
+ base_module = Chemicalml::Cml::Base.const_get(class_name)
23
+ klass = Class.new(Lutaml::Model::Serializable) do
24
+ include base_module
25
+ include Chemicalml::Cml::Visitable
26
+ end
27
+ klass.define_singleton_method(:lutaml_default_register) { :chemicalml_schema24 }
28
+ const_set(class_name, klass)
29
+ end
30
+
31
+ def self.schema
32
+ SCHEMA
33
+ end
34
+
35
+ def self.ensure_registered!
36
+ Configuration.ensure_registered!
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ module Schema3
6
+ module Configuration
7
+ extend Chemicalml::ContextConfiguration
8
+
9
+ CONTEXT_ID = :chemicalml_schema3
10
+
11
+ def self.register_models!
12
+ register_elements!
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Cml
5
+ # Schema 3 wire classes. Each is a `Lutaml::Model::Serializable`
6
+ # subclass that includes the shared declaration mixin from
7
+ # `Chemicalml::Cml::Base::*` and `Chemicalml::Cml::Visitable`.
8
+ #
9
+ # The full element set is generated in-place from
10
+ # `Chemicalml::Cml::Elements::ALL` — adding a new CML element
11
+ # means adding one entry there, not 35+ boilerplate files here.
12
+ # Schema-3-specific deviations live in additional
13
+ # `Base::Schema3Only::*` modules included by the relevant class
14
+ # via `Base::*` mixins.
15
+ module Schema3
16
+ extend Chemicalml::VersionedParser
17
+ autoload :Configuration, "chemicalml/cml/schema3/configuration"
18
+
19
+ SCHEMA = Chemicalml::Schema::Registry.lookup(:schema3)
20
+
21
+ Chemicalml::Cml::Elements::ALL.each_key do |class_name|
22
+ base_module = Chemicalml::Cml::Base.const_get(class_name)
23
+ klass = Class.new(Lutaml::Model::Serializable) do
24
+ include base_module
25
+ include Chemicalml::Cml::Visitable
26
+ end
27
+ klass.define_singleton_method(:lutaml_default_register) { :chemicalml_schema3 }
28
+ const_set(class_name, klass)
29
+ end
30
+
31
+ def self.schema
32
+ SCHEMA
33
+ end
34
+
35
+ def self.ensure_registered!
36
+ Configuration.ensure_registered!
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Backward-compatible alias. New code should reference the versioned
4
+ # class directly: Chemicalml::Cml::Schema3::Substance.
5
+ module Chemicalml
6
+ module Cml
7
+ remove_const(:Substance) if const_defined?(:Substance, false)
8
+ const_set(:Substance, Chemicalml::Cml::Schema3::Substance)
9
+ end
10
+ end