chemicalml 0.2.1 → 0.3.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 (347) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/CLAUDE.md +49 -1
  4. data/README.adoc +154 -26
  5. data/TODO.align/61-parallel-array-attrs.md +54 -0
  6. data/TODO.align/62-per-element-attribute-gaps.md +49 -0
  7. data/TODO.align/63-universal-children-mixin.md +42 -0
  8. data/TODO.align/64-per-element-child-gaps.md +81 -0
  9. data/TODO.align/65-simple-unit-convention.md +40 -0
  10. data/TODO.align/66-schema24-legacy-children.md +32 -0
  11. data/TODO.align/67-final-verification.md +32 -0
  12. data/TODO.align/68-detection-coverage.md +33 -0
  13. data/TODO.align/69-json-yaml-roundtrip.md +27 -0
  14. data/TODO.align/70-iterative-walker.md +40 -0
  15. data/TODO.align/71-violation-value.md +25 -0
  16. data/TODO.align/72-close-child-gaps.md +66 -0
  17. data/TODO.align/73-schema24-parse-limitation.md +64 -0
  18. data/TODO.align/74-final-verification-round18.md +15 -0
  19. data/TODO.align/75-key-value-mappings.md +43 -0
  20. data/TODO.align/76-schema24-workaround.md +57 -0
  21. data/TODO.align/77-convention-coverage-matrix.md +31 -0
  22. data/TODO.align/78-fixture-audit.md +23 -0
  23. data/TODO.align/79-final-verification-round19.md +15 -0
  24. data/TODO.align/80-xsd-enum-constants.md +35 -0
  25. data/TODO.align/81-enum-validation-constraints.md +29 -0
  26. data/TODO.align/82-reference-resolver.md +33 -0
  27. data/TODO.align/83-toml-roundtrip.md +20 -0
  28. data/TODO.align/84-final-verification-round21.md +16 -0
  29. data/TODO.align/85-bond-distinct-atoms.md +25 -0
  30. data/TODO.align/86-references-should-resolve.md +20 -0
  31. data/TODO.align/87-cli-utility.md +26 -0
  32. data/TODO.align/88-diverse-fixtures.md +26 -0
  33. data/TODO.align/89-final-verification-round22.md +15 -0
  34. data/TODO.align/90-bond-stereo-completeness.md +31 -0
  35. data/TODO.align/91-atomparity-distinct.md +21 -0
  36. data/TODO.align/92-unit-dictionary-completeness.md +28 -0
  37. data/TODO.align/93-yard-docs.md +23 -0
  38. data/TODO.align/94-final-verification-round23.md +15 -0
  39. data/TODO.align/README.round17.md +28 -0
  40. data/TODO.align/README.round18.md +37 -0
  41. data/TODO.align/README.round19.md +40 -0
  42. data/TODO.align/README.round20.md +49 -0
  43. data/TODO.align/README.round21.md +35 -0
  44. data/TODO.align/README.round22.md +48 -0
  45. data/TODO.align/README.round23.md +46 -0
  46. data/TODO.align/README.round24.md +53 -0
  47. data/TODO.align/README.round25.md +66 -0
  48. data/TODO.align/README.round26.md +55 -0
  49. data/TODO.align/README.round27.md +51 -0
  50. data/TODO.align/README.round28.md +61 -0
  51. data/TODO.align/README.round29.md +64 -0
  52. data/TODO.align/README.round30.md +50 -0
  53. data/TODO.align/README.round31.md +54 -0
  54. data/TODO.align/README.round32.md +67 -0
  55. data/TODO.align/README.round33.md +62 -0
  56. data/TODO.align/README.round34.md +70 -0
  57. data/docs/constraints.md +161 -0
  58. data/docs/generate_constraint_docs.rb +44 -0
  59. data/exe/chemicalml +6 -0
  60. data/lib/chemicalml/cli/base.rb +68 -0
  61. data/lib/chemicalml/cli/command.rb +43 -0
  62. data/lib/chemicalml/cli/constraints_command.rb +27 -0
  63. data/lib/chemicalml/cli/conventions_command.rb +14 -0
  64. data/lib/chemicalml/cli/dictionaries_command.rb +14 -0
  65. data/lib/chemicalml/cli/elements_command.rb +17 -0
  66. data/lib/chemicalml/cli/enums_command.rb +17 -0
  67. data/lib/chemicalml/cli/info_command.rb +77 -0
  68. data/lib/chemicalml/cli/inspect_command.rb +39 -0
  69. data/lib/chemicalml/cli/validate_command.rb +54 -0
  70. data/lib/chemicalml/cli.rb +43 -0
  71. data/lib/chemicalml/cml/base/abundance.rb +18 -8
  72. data/lib/chemicalml/cml/base/action.rb +34 -16
  73. data/lib/chemicalml/cml/base/action_list.rb +35 -17
  74. data/lib/chemicalml/cml/base/alternative.rb +13 -4
  75. data/lib/chemicalml/cml/base/amount.rb +14 -6
  76. data/lib/chemicalml/cml/base/angle.rb +28 -13
  77. data/lib/chemicalml/cml/base/annotation.rb +14 -6
  78. data/lib/chemicalml/cml/base/any_cml.rb +12 -5
  79. data/lib/chemicalml/cml/base/appinfo.rb +14 -6
  80. data/lib/chemicalml/cml/base/arg.rb +47 -13
  81. data/lib/chemicalml/cml/base/array.rb +40 -19
  82. data/lib/chemicalml/cml/base/array_list.rb +14 -6
  83. data/lib/chemicalml/cml/base/atom.rb +84 -28
  84. data/lib/chemicalml/cml/base/atom_array.rb +60 -23
  85. data/lib/chemicalml/cml/base/atom_parity.rb +14 -6
  86. data/lib/chemicalml/cml/base/atom_set.rb +14 -6
  87. data/lib/chemicalml/cml/base/atom_type.rb +25 -9
  88. data/lib/chemicalml/cml/base/atom_type_list.rb +22 -8
  89. data/lib/chemicalml/cml/base/atomic_basis_function.rb +33 -13
  90. data/lib/chemicalml/cml/base/band.rb +21 -8
  91. data/lib/chemicalml/cml/base/band_list.rb +15 -7
  92. data/lib/chemicalml/cml/base/basis_set.rb +24 -9
  93. data/lib/chemicalml/cml/base/bond.rb +36 -10
  94. data/lib/chemicalml/cml/base/bond_array.rb +34 -11
  95. data/lib/chemicalml/cml/base/bond_set.rb +14 -6
  96. data/lib/chemicalml/cml/base/bond_stereo.rb +20 -9
  97. data/lib/chemicalml/cml/base/bond_type.rb +23 -8
  98. data/lib/chemicalml/cml/base/bond_type_list.rb +22 -8
  99. data/lib/chemicalml/cml/base/cell_parameter.rb +28 -10
  100. data/lib/chemicalml/cml/base/cml_module.rb +36 -11
  101. data/lib/chemicalml/cml/base/common_children.rb +35 -0
  102. data/lib/chemicalml/cml/base/complex_object.rb +12 -5
  103. data/lib/chemicalml/cml/base/condition_list.rb +26 -10
  104. data/lib/chemicalml/cml/base/crystal.rb +26 -10
  105. data/lib/chemicalml/cml/base/definition.rb +12 -5
  106. data/lib/chemicalml/cml/base/description.rb +14 -6
  107. data/lib/chemicalml/cml/base/dictionary.rb +27 -10
  108. data/lib/chemicalml/cml/base/dictionary_entry.rb +67 -8
  109. data/lib/chemicalml/cml/base/dimension.rb +26 -12
  110. data/lib/chemicalml/cml/base/document.rb +18 -8
  111. data/lib/chemicalml/cml/base/documentation.rb +12 -5
  112. data/lib/chemicalml/cml/base/eigen.rb +32 -8
  113. data/lib/chemicalml/cml/base/electron.rb +26 -12
  114. data/lib/chemicalml/cml/base/enumeration.rb +16 -7
  115. data/lib/chemicalml/cml/base/expression.rb +21 -6
  116. data/lib/chemicalml/cml/base/float.rb +22 -10
  117. data/lib/chemicalml/cml/base/float_array.rb +24 -11
  118. data/lib/chemicalml/cml/base/formula.rb +31 -10
  119. data/lib/chemicalml/cml/base/fragment.rb +30 -12
  120. data/lib/chemicalml/cml/base/fragment_list.rb +24 -9
  121. data/lib/chemicalml/cml/base/gradient.rb +19 -6
  122. data/lib/chemicalml/cml/base/identifier.rb +18 -8
  123. data/lib/chemicalml/cml/base/integer.rb +22 -10
  124. data/lib/chemicalml/cml/base/integer_array.rb +24 -11
  125. data/lib/chemicalml/cml/base/isotope.rb +28 -9
  126. data/lib/chemicalml/cml/base/isotope_list.rb +17 -8
  127. data/lib/chemicalml/cml/base/join.rb +25 -9
  128. data/lib/chemicalml/cml/base/kpoint.rb +16 -7
  129. data/lib/chemicalml/cml/base/kpoint_list.rb +15 -7
  130. data/lib/chemicalml/cml/base/label.rb +14 -6
  131. data/lib/chemicalml/cml/base/lattice.rb +35 -10
  132. data/lib/chemicalml/cml/base/lattice_vector.rb +16 -7
  133. data/lib/chemicalml/cml/base/length.rb +26 -12
  134. data/lib/chemicalml/cml/base/line3.rb +18 -8
  135. data/lib/chemicalml/cml/base/link.rb +41 -20
  136. data/lib/chemicalml/cml/base/list.rb +22 -10
  137. data/lib/chemicalml/cml/base/map.rb +32 -11
  138. data/lib/chemicalml/cml/base/matrix.rb +32 -15
  139. data/lib/chemicalml/cml/base/mechanism.rb +20 -7
  140. data/lib/chemicalml/cml/base/mechanism_component.rb +14 -6
  141. data/lib/chemicalml/cml/base/metadata.rb +18 -8
  142. data/lib/chemicalml/cml/base/metadata_list.rb +27 -8
  143. data/lib/chemicalml/cml/base/molecule.rb +90 -26
  144. data/lib/chemicalml/cml/base/molecule_list.rb +26 -8
  145. data/lib/chemicalml/cml/base/name.rb +10 -4
  146. data/lib/chemicalml/cml/base/object.rb +18 -8
  147. data/lib/chemicalml/cml/base/observation.rb +16 -7
  148. data/lib/chemicalml/cml/base/operator.rb +14 -6
  149. data/lib/chemicalml/cml/base/parameter.rb +33 -13
  150. data/lib/chemicalml/cml/base/parameter_list.rb +27 -8
  151. data/lib/chemicalml/cml/base/particle.rb +20 -9
  152. data/lib/chemicalml/cml/base/peak.rb +71 -26
  153. data/lib/chemicalml/cml/base/peak_group.rb +62 -26
  154. data/lib/chemicalml/cml/base/peak_list.rb +24 -9
  155. data/lib/chemicalml/cml/base/peak_structure.rb +40 -13
  156. data/lib/chemicalml/cml/base/plane3.rb +14 -6
  157. data/lib/chemicalml/cml/base/point3.rb +14 -6
  158. data/lib/chemicalml/cml/base/potential.rb +17 -6
  159. data/lib/chemicalml/cml/base/potential_form.rb +30 -7
  160. data/lib/chemicalml/cml/base/potential_list.rb +15 -7
  161. data/lib/chemicalml/cml/base/product.rb +45 -10
  162. data/lib/chemicalml/cml/base/product_list.rb +29 -9
  163. data/lib/chemicalml/cml/base/property.rb +29 -11
  164. data/lib/chemicalml/cml/base/property_list.rb +23 -8
  165. data/lib/chemicalml/cml/base/reactant.rb +45 -10
  166. data/lib/chemicalml/cml/base/reactant_list.rb +29 -9
  167. data/lib/chemicalml/cml/base/reaction.rb +74 -20
  168. data/lib/chemicalml/cml/base/reaction_list.rb +23 -8
  169. data/lib/chemicalml/cml/base/reaction_scheme.rb +43 -13
  170. data/lib/chemicalml/cml/base/reaction_step.rb +30 -12
  171. data/lib/chemicalml/cml/base/reaction_step_list.rb +30 -11
  172. data/lib/chemicalml/cml/base/reactive_centre.rb +31 -6
  173. data/lib/chemicalml/cml/base/region.rb +20 -9
  174. data/lib/chemicalml/cml/base/related_entry.rb +11 -3
  175. data/lib/chemicalml/cml/base/sample.rb +30 -7
  176. data/lib/chemicalml/cml/base/scalar.rb +32 -15
  177. data/lib/chemicalml/cml/base/spectator.rb +25 -6
  178. data/lib/chemicalml/cml/base/spectator_list.rb +20 -7
  179. data/lib/chemicalml/cml/base/spectrum.rb +57 -18
  180. data/lib/chemicalml/cml/base/spectrum_data.rb +19 -9
  181. data/lib/chemicalml/cml/base/spectrum_list.rb +28 -9
  182. data/lib/chemicalml/cml/base/sphere3.rb +14 -6
  183. data/lib/chemicalml/cml/base/stmml.rb +12 -5
  184. data/lib/chemicalml/cml/base/string.rb +14 -6
  185. data/lib/chemicalml/cml/base/string_array.rb +22 -10
  186. data/lib/chemicalml/cml/base/substance.rb +36 -14
  187. data/lib/chemicalml/cml/base/substance_list.rb +29 -10
  188. data/lib/chemicalml/cml/base/symmetry.rb +31 -9
  189. data/lib/chemicalml/cml/base/system.rb +21 -10
  190. data/lib/chemicalml/cml/base/table.rb +38 -13
  191. data/lib/chemicalml/cml/base/table_cell.rb +12 -5
  192. data/lib/chemicalml/cml/base/table_content.rb +19 -9
  193. data/lib/chemicalml/cml/base/table_header.rb +15 -7
  194. data/lib/chemicalml/cml/base/table_header_cell.rb +22 -10
  195. data/lib/chemicalml/cml/base/table_row.rb +15 -7
  196. data/lib/chemicalml/cml/base/table_row_list.rb +15 -7
  197. data/lib/chemicalml/cml/base/tcell.rb +16 -7
  198. data/lib/chemicalml/cml/base/torsion.rb +28 -13
  199. data/lib/chemicalml/cml/base/transform3.rb +12 -5
  200. data/lib/chemicalml/cml/base/transition_state.rb +23 -5
  201. data/lib/chemicalml/cml/base/trow.rb +22 -6
  202. data/lib/chemicalml/cml/base/unit.rb +39 -16
  203. data/lib/chemicalml/cml/base/unit_list.rb +34 -12
  204. data/lib/chemicalml/cml/base/unit_type.rb +27 -10
  205. data/lib/chemicalml/cml/base/unit_type_list.rb +29 -11
  206. data/lib/chemicalml/cml/base/vector3.rb +14 -6
  207. data/lib/chemicalml/cml/base/xaxis.rb +30 -10
  208. data/lib/chemicalml/cml/base/yaxis.rb +30 -10
  209. data/lib/chemicalml/cml/base/z_matrix.rb +26 -5
  210. data/lib/chemicalml/cml/base.rb +139 -138
  211. data/lib/chemicalml/cml/canonical_comparison.rb +54 -0
  212. data/lib/chemicalml/cml/elements.rb +145 -136
  213. data/lib/chemicalml/cml/enums.rb +55 -0
  214. data/lib/chemicalml/cml/namespace.rb +2 -3
  215. data/lib/chemicalml/cml/patterns.rb +33 -0
  216. data/lib/chemicalml/cml/reference_resolver.rb +137 -0
  217. data/lib/chemicalml/cml/role.rb +138 -138
  218. data/lib/chemicalml/cml/schema24/configuration.rb +11 -1
  219. data/lib/chemicalml/cml/schema24.rb +139 -139
  220. data/lib/chemicalml/cml/schema3.rb +123 -123
  221. data/lib/chemicalml/cml/visitable.rb +77 -3
  222. data/lib/chemicalml/cml/wire_class_registry.rb +3 -3
  223. data/lib/chemicalml/cml.rb +163 -129
  224. data/lib/chemicalml/context_configuration.rb +4 -2
  225. data/lib/chemicalml/convention/cascade/constraints/reaction_scheme_must_have_content.rb +33 -0
  226. data/lib/chemicalml/convention/cascade/constraints/reaction_step_list_must_contain_steps.rb +31 -0
  227. data/lib/chemicalml/convention/cascade/constraints/reaction_step_must_have_reaction_or_lists.rb +33 -0
  228. data/lib/chemicalml/convention/cascade/constraints/reactive_centre_atom_refs_should_be_present.rb +34 -0
  229. data/lib/chemicalml/convention/cascade/constraints.rb +18 -0
  230. data/lib/chemicalml/convention/cascade.rb +43 -0
  231. data/lib/chemicalml/convention/compchem/constraints/array_rules.rb +1 -1
  232. data/lib/chemicalml/convention/compchem/constraints/calculation_requires_finalization.rb +1 -1
  233. data/lib/chemicalml/convention/compchem/constraints/compchem_module_must_contain_job_list.rb +2 -1
  234. data/lib/chemicalml/convention/compchem/constraints/environment_at_most_one_property_list.rb +1 -1
  235. data/lib/chemicalml/convention/compchem/constraints/environment_must_not_contain_parameter.rb +1 -1
  236. data/lib/chemicalml/convention/compchem/constraints/finalization_at_most_one_molecule.rb +1 -1
  237. data/lib/chemicalml/convention/compchem/constraints/finalization_at_most_one_property_list.rb +1 -1
  238. data/lib/chemicalml/convention/compchem/constraints/finalization_must_have_content.rb +44 -0
  239. data/lib/chemicalml/convention/compchem/constraints/finalization_must_not_contain_parameter.rb +1 -1
  240. data/lib/chemicalml/convention/compchem/constraints/initialization_at_most_one_molecule.rb +1 -1
  241. data/lib/chemicalml/convention/compchem/constraints/initialization_at_most_one_parameter_list.rb +1 -1
  242. data/lib/chemicalml/convention/compchem/constraints/initialization_must_have_content.rb +54 -0
  243. data/lib/chemicalml/convention/compchem/constraints/initialization_must_not_contain_property.rb +1 -1
  244. data/lib/chemicalml/convention/compchem/constraints/job_list_module_must_have_id.rb +1 -0
  245. data/lib/chemicalml/convention/compchem/constraints/job_module_at_most_one_environment.rb +1 -1
  246. data/lib/chemicalml/convention/compchem/constraints/job_module_at_most_one_finalization.rb +1 -1
  247. data/lib/chemicalml/convention/compchem/constraints/job_module_must_have_id.rb +1 -0
  248. data/lib/chemicalml/convention/compchem/constraints/job_must_contain_initialization.rb +1 -0
  249. data/lib/chemicalml/convention/compchem/constraints/matrix_rules.rb +1 -1
  250. data/lib/chemicalml/convention/compchem/constraints/scalar_units.rb +1 -1
  251. data/lib/chemicalml/convention/compchem/constraints.rb +4 -0
  252. data/lib/chemicalml/convention/compchem.rb +4 -2
  253. data/lib/chemicalml/convention/constraint.rb +40 -9
  254. data/lib/chemicalml/convention/coordinator.rb +4 -3
  255. data/lib/chemicalml/convention/detection.rb +10 -4
  256. data/lib/chemicalml/convention/dictionary/constraints/dictionary_must_have_namespace.rb +1 -0
  257. data/lib/chemicalml/convention/dictionary/constraints/dictionary_namespace_should_end_with_slash_or_hash.rb +1 -1
  258. data/lib/chemicalml/convention/dictionary/constraints/entry_id_must_match_pattern.rb +1 -1
  259. data/lib/chemicalml/convention/dictionary/constraints/entry_ids_unique_within_dictionary.rb +1 -1
  260. data/lib/chemicalml/convention/dictionary/constraints/entry_must_contain_definition.rb +1 -0
  261. data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_id_and_term.rb +1 -1
  262. data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_unit_type.rb +1 -0
  263. data/lib/chemicalml/convention/dictionary/constraints/entry_units_co_constraints.rb +1 -1
  264. data/lib/chemicalml/convention/dictionary/constraints.rb +8 -8
  265. data/lib/chemicalml/convention/dictionary.rb +2 -2
  266. data/lib/chemicalml/convention/molecular/constraints/atom_array_must_be_child_of_molecule_or_formula.rb +1 -0
  267. data/lib/chemicalml/convention/molecular/constraints/atom_array_must_contain_atoms.rb +15 -6
  268. data/lib/chemicalml/convention/molecular/constraints/atom_coordinates_must_be_paired.rb +1 -1
  269. data/lib/chemicalml/convention/molecular/constraints/atom_element_type_should_be_in_periodic_table.rb +39 -0
  270. data/lib/chemicalml/convention/molecular/constraints/atom_id_must_match_pattern.rb +3 -2
  271. data/lib/chemicalml/convention/molecular/constraints/atom_ids_unique_within_molecule.rb +1 -0
  272. data/lib/chemicalml/convention/molecular/constraints/atom_must_have_element_type.rb +1 -1
  273. data/lib/chemicalml/convention/molecular/constraints/atom_must_have_id.rb +2 -1
  274. data/lib/chemicalml/convention/molecular/constraints/atom_parity_atom_refs4_should_be_distinct.rb +44 -0
  275. data/lib/chemicalml/convention/molecular/constraints/atom_parity_should_include_parent_atom.rb +65 -0
  276. data/lib/chemicalml/convention/molecular/constraints/bond_array_must_be_child_of_molecule.rb +1 -0
  277. data/lib/chemicalml/convention/molecular/constraints/bond_atom_refs2_should_be_distinct.rb +44 -0
  278. data/lib/chemicalml/convention/molecular/constraints/bond_id_should_match_pattern.rb +38 -0
  279. data/lib/chemicalml/convention/molecular/constraints/bond_ids_unique_within_molecule.rb +1 -0
  280. data/lib/chemicalml/convention/molecular/constraints/bond_must_have_atom_refs2.rb +1 -1
  281. data/lib/chemicalml/convention/molecular/constraints/bond_must_have_order.rb +2 -1
  282. data/lib/chemicalml/convention/molecular/constraints/bond_must_reference_atoms_in_same_molecule.rb +1 -0
  283. data/lib/chemicalml/convention/molecular/constraints/bond_order_other_must_have_dict_ref.rb +1 -0
  284. data/lib/chemicalml/convention/molecular/constraints/bond_order_should_be_in_enum.rb +39 -0
  285. data/lib/chemicalml/convention/molecular/constraints/bond_order_should_not_be_numeric.rb +1 -1
  286. data/lib/chemicalml/convention/molecular/constraints/bond_stereo_atom_refs4_should_be_distinct.rb +43 -0
  287. data/lib/chemicalml/convention/molecular/constraints/bond_stereo_cis_trans_must_have_atom_refs4.rb +1 -1
  288. data/lib/chemicalml/convention/molecular/constraints/bond_stereo_other_must_have_dict_ref.rb +1 -0
  289. data/lib/chemicalml/convention/molecular/constraints/bond_stereo_should_be_in_enum.rb +38 -0
  290. data/lib/chemicalml/convention/molecular/constraints/bond_stereo_wedge_hash_must_have_atom_refs2.rb +1 -1
  291. data/lib/chemicalml/convention/molecular/constraints/dict_ref_should_resolve.rb +59 -0
  292. data/lib/chemicalml/convention/molecular/constraints/molecule_atom_array_mutually_exclusive_with_children.rb +1 -0
  293. data/lib/chemicalml/convention/molecular/constraints/molecule_bond_array_mutually_exclusive_with_children.rb +1 -0
  294. data/lib/chemicalml/convention/molecular/constraints/molecule_chirality_should_be_in_enum.rb +38 -0
  295. data/lib/chemicalml/convention/molecular/constraints/molecule_count_must_not_appear_on_top_level.rb +1 -0
  296. data/lib/chemicalml/convention/molecular/constraints/molecule_id_should_match_pattern.rb +38 -0
  297. data/lib/chemicalml/convention/molecular/constraints/molecule_must_have_id.rb +1 -1
  298. data/lib/chemicalml/convention/molecular/constraints/property_must_have_dict_ref.rb +1 -1
  299. data/lib/chemicalml/convention/molecular/constraints/property_scalar_data_type_matches_dictionary.rb +58 -0
  300. data/lib/chemicalml/convention/molecular/constraints/references_should_resolve.rb +37 -0
  301. data/lib/chemicalml/convention/molecular/constraints/scalar_must_have_data_type.rb +1 -1
  302. data/lib/chemicalml/convention/molecular/constraints.rb +49 -23
  303. data/lib/chemicalml/convention/molecular.rb +15 -2
  304. data/lib/chemicalml/convention/registry.rb +79 -11
  305. data/lib/chemicalml/convention/simple_unit/constraints/root_must_be_unit_list.rb +24 -0
  306. data/lib/chemicalml/convention/simple_unit/constraints/unit_must_have_power.rb +32 -0
  307. data/lib/chemicalml/convention/simple_unit/constraints/unit_must_have_symbol.rb +31 -0
  308. data/lib/chemicalml/convention/simple_unit/constraints.rb +16 -0
  309. data/lib/chemicalml/convention/simple_unit.rb +37 -0
  310. data/lib/chemicalml/convention/spectroscopy/constraints/peak_list_must_contain_peaks.rb +31 -0
  311. data/lib/chemicalml/convention/spectroscopy/constraints/peak_should_have_values.rb +34 -0
  312. data/lib/chemicalml/convention/spectroscopy/constraints/spectrum_must_have_content.rb +31 -0
  313. data/lib/chemicalml/convention/spectroscopy/constraints/spectrum_must_have_convention.rb +32 -0
  314. data/lib/chemicalml/convention/spectroscopy/constraints/spectrum_must_have_format.rb +31 -0
  315. data/lib/chemicalml/convention/spectroscopy/constraints.rb +20 -0
  316. data/lib/chemicalml/convention/spectroscopy.rb +41 -0
  317. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_list_must_contain_at_least_one_unit.rb +1 -0
  318. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_list_must_have_namespace.rb +1 -1
  319. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_contain_definition.rb +1 -0
  320. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_id.rb +1 -0
  321. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_multiplier_or_constant_to_si.rb +34 -0
  322. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_parent_si.rb +32 -0
  323. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_symbol_and_unit_type.rb +1 -1
  324. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_title.rb +32 -0
  325. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_parent_si_should_resolve.rb +45 -0
  326. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_unit_type_should_resolve.rb +46 -0
  327. data/lib/chemicalml/convention/unit_dictionary/constraints.rb +10 -0
  328. data/lib/chemicalml/convention/unit_dictionary.rb +7 -2
  329. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_id_must_match_pattern.rb +1 -1
  330. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_list_must_contain_at_least_one_unit_type.rb +1 -0
  331. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_list_must_have_namespace.rb +1 -1
  332. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_contain_definition.rb +1 -0
  333. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_have_id_and_name.rb +1 -1
  334. data/lib/chemicalml/convention/unit_type_dictionary.rb +2 -2
  335. data/lib/chemicalml/convention/validation_report.rb +30 -3
  336. data/lib/chemicalml/convention/violation.rb +9 -3
  337. data/lib/chemicalml/convention.rb +41 -14
  338. data/lib/chemicalml/dictionary.rb +13 -9
  339. data/lib/chemicalml/logger.rb +47 -0
  340. data/lib/chemicalml/schema/definition.rb +2 -2
  341. data/lib/chemicalml/schema.rb +7 -7
  342. data/lib/chemicalml/version.rb +1 -1
  343. data/lib/chemicalml/versioned_parser.rb +10 -10
  344. data/lib/chemicalml.rb +78 -15
  345. data/lib/tasks/reference_fetch.rake +30 -31
  346. data/lib/tasks/scrape_fixtures.rake +23 -24
  347. metadata +114 -3
@@ -3,10 +3,21 @@
3
3
  module Chemicalml
4
4
  module Cml
5
5
  module Base
6
+ # Container for a list of atoms. Two equivalent serialisations:
7
+ #
8
+ # <atomArray><atom id="a1" elementType="C"/></atomArray>
9
+ #
10
+ # <atomArray atomID="a1 a2" elementType="C O" x3="0.0 1.0"/>
11
+ #
12
+ # The parallel-array form uses the *same* XML attribute names as
13
+ # the singular `<atom>` (e.g. `elementType`, `x3`), NOT names
14
+ # like `elementTypeArray`. The XSD names the attribute *groups*
15
+ # `elementTypeArray` etc., but the wire attribute is `elementType`.
6
16
  module AtomArray
7
17
  def self.included(klass)
8
18
  klass.class_eval do
9
19
  include Chemicalml::Cml::Role::AtomArray
20
+
10
21
  attribute :atoms, :atom, collection: true
11
22
 
12
23
  attribute :title, :string
@@ -14,8 +25,13 @@ module Chemicalml
14
25
  attribute :convention, :string
15
26
  attribute :dict_ref, :string
16
27
  attribute :ref, :string
17
- attribute :element_type_array, :string
28
+
29
+ # Parallel-array attributes. Wire names match the singular
30
+ # <atom> attributes; the Ruby names use _array suffix for
31
+ # clarity at the call site.
32
+ attribute :atom_id_array, :string
18
33
  attribute :count_array, :string
34
+ attribute :element_type_array, :string
19
35
  attribute :formal_charge_array, :string
20
36
  attribute :hydrogen_count_array, :string
21
37
  attribute :occupancy_array, :string
@@ -27,30 +43,51 @@ module Chemicalml
27
43
  attribute :x_fract_array, :string
28
44
  attribute :y_fract_array, :string
29
45
  attribute :z_fract_array, :string
30
- attribute :atom_i_d_array, :string
31
46
  xml do
32
47
  namespace Chemicalml::Cml::Namespace
33
- root "atomArray"
34
- map_element "atom", to: :atoms
35
- map_attribute "title", to: :title
36
- map_attribute "id", to: :id
37
- map_attribute "convention", to: :convention
38
- map_attribute "dictRef", to: :dict_ref
39
- map_attribute "ref", to: :ref
40
- map_attribute "elementTypeArray", to: :element_type_array
41
- map_attribute "countArray", to: :count_array
42
- map_attribute "formalChargeArray", to: :formal_charge_array
43
- map_attribute "hydrogenCountArray", to: :hydrogen_count_array
44
- map_attribute "occupancyArray", to: :occupancy_array
45
- map_attribute "x2Array", to: :x2_array
46
- map_attribute "y2Array", to: :y2_array
47
- map_attribute "x3Array", to: :x3_array
48
- map_attribute "y3Array", to: :y3_array
49
- map_attribute "z3Array", to: :z3_array
50
- map_attribute "xFractArray", to: :x_fract_array
51
- map_attribute "yFractArray", to: :y_fract_array
52
- map_attribute "zFractArray", to: :z_fract_array
53
- map_attribute "atomIDArray", to: :atom_i_d_array
48
+ root 'atomArray'
49
+ map_element 'atom', to: :atoms
50
+ map_attribute 'title', to: :title
51
+ map_attribute 'id', to: :id
52
+ map_attribute 'convention', to: :convention
53
+ map_attribute 'dictRef', to: :dict_ref
54
+ map_attribute 'ref', to: :ref
55
+ map_attribute 'atomID', to: :atom_id_array
56
+ map_attribute 'count', to: :count_array
57
+ map_attribute 'elementType', to: :element_type_array
58
+ map_attribute 'formalCharge', to: :formal_charge_array
59
+ map_attribute 'hydrogenCount', to: :hydrogen_count_array
60
+ map_attribute 'occupancy', to: :occupancy_array
61
+ map_attribute 'x2', to: :x2_array
62
+ map_attribute 'y2', to: :y2_array
63
+ map_attribute 'x3', to: :x3_array
64
+ map_attribute 'y3', to: :y3_array
65
+ map_attribute 'z3', to: :z3_array
66
+ map_attribute 'xFract', to: :x_fract_array
67
+ map_attribute 'yFract', to: :y_fract_array
68
+ map_attribute 'zFract', to: :z_fract_array
69
+ end
70
+ key_value do
71
+ map 'atom', to: :atoms
72
+ map 'title', to: :title
73
+ map 'id', to: :id
74
+ map 'convention', to: :convention
75
+ map 'dictRef', to: :dict_ref
76
+ map 'ref', to: :ref
77
+ map 'atomID', to: :atom_id_array
78
+ map 'count', to: :count_array
79
+ map 'elementType', to: :element_type_array
80
+ map 'formalCharge', to: :formal_charge_array
81
+ map 'hydrogenCount', to: :hydrogen_count_array
82
+ map 'occupancy', to: :occupancy_array
83
+ map 'x2', to: :x2_array
84
+ map 'y2', to: :y2_array
85
+ map 'x3', to: :x3_array
86
+ map 'y3', to: :y3_array
87
+ map 'z3', to: :z3_array
88
+ map 'xFract', to: :x_fract_array
89
+ map 'yFract', to: :y_fract_array
90
+ map 'zFract', to: :z_fract_array
54
91
  end
55
92
  end
56
93
  end
@@ -7,6 +7,7 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::AtomParity
10
+
10
11
  attribute :atom_refs4, :string
11
12
  attribute :content, :string
12
13
 
@@ -16,13 +17,20 @@ module Chemicalml
16
17
  attribute :dict_ref, :string
17
18
  xml do
18
19
  namespace Chemicalml::Cml::Namespace
19
- root "atomParity"
20
- map_attribute "atomRefs4", to: :atom_refs4
20
+ root 'atomParity'
21
+ map_attribute 'atomRefs4', to: :atom_refs4
21
22
  map_content to: :content
22
- map_attribute "title", to: :title
23
- map_attribute "id", to: :id
24
- map_attribute "convention", to: :convention
25
- map_attribute "dictRef", to: :dict_ref
23
+ map_attribute 'title', to: :title
24
+ map_attribute 'id', to: :id
25
+ map_attribute 'convention', to: :convention
26
+ map_attribute 'dictRef', to: :dict_ref
27
+ end
28
+ key_value do
29
+ map 'atomRefs4', to: :atom_refs4
30
+ map 'title', to: :title
31
+ map 'id', to: :id
32
+ map 'convention', to: :convention
33
+ map 'dictRef', to: :dict_ref
26
34
  end
27
35
  end
28
36
  end
@@ -7,6 +7,7 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::AtomSet
10
+
10
11
  attribute :id, :string
11
12
  attribute :title, :string
12
13
  attribute :dict_ref, :string
@@ -15,12 +16,19 @@ module Chemicalml
15
16
  attribute :size, :string
16
17
  xml do
17
18
  namespace Chemicalml::Cml::Namespace
18
- root "atomSet"
19
- map_attribute "id", to: :id
20
- map_attribute "title", to: :title
21
- map_attribute "dictRef", to: :dict_ref
22
- map_attribute "convention", to: :convention
23
- map_attribute "size", to: :size
19
+ root 'atomSet'
20
+ map_attribute 'id', to: :id
21
+ map_attribute 'title', to: :title
22
+ map_attribute 'dictRef', to: :dict_ref
23
+ map_attribute 'convention', to: :convention
24
+ map_attribute 'size', to: :size
25
+ end
26
+ key_value do
27
+ map 'id', to: :id
28
+ map 'title', to: :title
29
+ map 'dictRef', to: :dict_ref
30
+ map 'convention', to: :convention
31
+ map 'size', to: :size
24
32
  end
25
33
  end
26
34
  end
@@ -7,6 +7,8 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::AtomType
10
+ include Chemicalml::Cml::Base::CommonChildren
11
+
10
12
  attribute :id, :string
11
13
  attribute :title, :string
12
14
  attribute :dict_ref, :string
@@ -18,15 +20,29 @@ module Chemicalml
18
20
  attribute :atom_ref, :string
19
21
  xml do
20
22
  namespace Chemicalml::Cml::Namespace
21
- root "atomType"
22
- map_attribute "id", to: :id
23
- map_attribute "title", to: :title
24
- map_attribute "dictRef", to: :dict_ref
25
- map_attribute "convention", to: :convention
26
- map_attribute "elementType", to: :elementType
27
- map_attribute "ref", to: :ref
28
- map_attribute "name", to: :name
29
- map_attribute "atomRef", to: :atom_ref
23
+ root 'atomType'
24
+ map_attribute 'id', to: :id
25
+ map_attribute 'title', to: :title
26
+ map_attribute 'dictRef', to: :dict_ref
27
+ map_attribute 'convention', to: :convention
28
+ map_attribute 'elementType', to: :elementType
29
+ map_attribute 'ref', to: :ref
30
+ map_attribute 'name', to: :name
31
+ map_attribute 'atomRef', to: :atom_ref
32
+ end
33
+ key_value do
34
+ map 'metadataList', to: :metadata_lists
35
+ map 'label', to: :labels
36
+ map 'name', to: :names
37
+ map 'description', to: :descriptions
38
+ map 'id', to: :id
39
+ map 'title', to: :title
40
+ map 'dictRef', to: :dict_ref
41
+ map 'convention', to: :convention
42
+ map 'elementType', to: :elementType
43
+ map 'ref', to: :ref
44
+ map 'name', to: :name
45
+ map 'atomRef', to: :atom_ref
30
46
  end
31
47
  end
32
48
  end
@@ -7,23 +7,37 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::AtomTypeList
10
+ include Chemicalml::Cml::Base::CommonChildren
11
+
10
12
  attribute :id, :string
11
13
  attribute :title, :string
12
14
  attribute :dict_ref, :string
13
15
  attribute :convention, :string
14
16
 
15
- attribute :atom_types, :atomType, collection: true
17
+ attribute :atom_types, :atomType, collection: true
16
18
 
17
19
  attribute :ref, :string
18
20
  xml do
19
21
  namespace Chemicalml::Cml::Namespace
20
- map_element "atomType", to: :atom_types
21
- root "atomTypeList"
22
- map_attribute "id", to: :id
23
- map_attribute "title", to: :title
24
- map_attribute "dictRef", to: :dict_ref
25
- map_attribute "convention", to: :convention
26
- map_attribute "ref", to: :ref
22
+ map_element 'atomType', to: :atom_types
23
+ root 'atomTypeList'
24
+ map_attribute 'id', to: :id
25
+ map_attribute 'title', to: :title
26
+ map_attribute 'dictRef', to: :dict_ref
27
+ map_attribute 'convention', to: :convention
28
+ map_attribute 'ref', to: :ref
29
+ end
30
+ key_value do
31
+ map 'metadataList', to: :metadata_lists
32
+ map 'label', to: :labels
33
+ map 'name', to: :names
34
+ map 'description', to: :descriptions
35
+ map 'atomType', to: :atom_types
36
+ map 'id', to: :id
37
+ map 'title', to: :title
38
+ map 'dictRef', to: :dict_ref
39
+ map 'convention', to: :convention
40
+ map 'ref', to: :ref
27
41
  end
28
42
  end
29
43
  end
@@ -7,6 +7,8 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::AtomicBasisFunction
10
+ include Chemicalml::Cml::Base::CommonChildren
11
+
10
12
  attribute :id, :string
11
13
  attribute :title, :string
12
14
  attribute :dict_ref, :string
@@ -22,19 +24,37 @@ module Chemicalml
22
24
  attribute :lm, :string
23
25
  xml do
24
26
  namespace Chemicalml::Cml::Namespace
25
- root "atomicBasisFunction"
26
- map_attribute "id", to: :id
27
- map_attribute "title", to: :title
28
- map_attribute "dictRef", to: :dict_ref
29
- map_attribute "convention", to: :convention
30
- map_attribute "atomRef", to: :atomRef
31
- map_attribute "n", to: :n
32
- map_attribute "l", to: :l
33
- map_attribute "m", to: :m
34
- map_attribute "ms", to: :ms
35
- map_attribute "type", to: :type
36
- map_attribute "symbol", to: :symbol
37
- map_attribute "lm", to: :lm
27
+ root 'atomicBasisFunction'
28
+ map_attribute 'id', to: :id
29
+ map_attribute 'title', to: :title
30
+ map_attribute 'dictRef', to: :dict_ref
31
+ map_attribute 'convention', to: :convention
32
+ map_attribute 'atomRef', to: :atomRef
33
+ map_attribute 'n', to: :n
34
+ map_attribute 'l', to: :l
35
+ map_attribute 'm', to: :m
36
+ map_attribute 'ms', to: :ms
37
+ map_attribute 'type', to: :type
38
+ map_attribute 'symbol', to: :symbol
39
+ map_attribute 'lm', to: :lm
40
+ end
41
+ key_value do
42
+ map 'metadataList', to: :metadata_lists
43
+ map 'label', to: :labels
44
+ map 'name', to: :names
45
+ map 'description', to: :descriptions
46
+ map 'id', to: :id
47
+ map 'title', to: :title
48
+ map 'dictRef', to: :dict_ref
49
+ map 'convention', to: :convention
50
+ map 'atomRef', to: :atomRef
51
+ map 'n', to: :n
52
+ map 'l', to: :l
53
+ map 'm', to: :m
54
+ map 'ms', to: :ms
55
+ map 'type', to: :type
56
+ map 'symbol', to: :symbol
57
+ map 'lm', to: :lm
38
58
  end
39
59
  end
40
60
  end
@@ -7,24 +7,37 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::Band
10
+
10
11
  attribute :id, :string
11
12
  attribute :title, :string
12
13
  attribute :dict_ref, :string
13
14
  attribute :convention, :string
14
15
  attribute :kpointRef, :string
16
+ attribute :kpoint, :string
15
17
  attribute :weight, :string
16
18
 
17
19
  attribute :label, :string
18
20
  xml do
19
21
  namespace Chemicalml::Cml::Namespace
20
- root "band"
21
- map_attribute "id", to: :id
22
- map_attribute "title", to: :title
23
- map_attribute "dictRef", to: :dict_ref
24
- map_attribute "convention", to: :convention
25
- map_attribute "kpointRef", to: :kpointRef
26
- map_attribute "weight", to: :weight
27
- map_attribute "label", to: :label
22
+ root 'band'
23
+ map_attribute 'id', to: :id
24
+ map_attribute 'title', to: :title
25
+ map_attribute 'dictRef', to: :dict_ref
26
+ map_attribute 'convention', to: :convention
27
+ map_attribute 'kpointRef', to: :kpointRef
28
+ map_attribute 'kpoint', to: :kpoint
29
+ map_attribute 'weight', to: :weight
30
+ map_attribute 'label', to: :label
31
+ end
32
+ key_value do
33
+ map 'id', to: :id
34
+ map 'title', to: :title
35
+ map 'dictRef', to: :dict_ref
36
+ map 'convention', to: :convention
37
+ map 'kpointRef', to: :kpointRef
38
+ map 'kpoint', to: :kpoint
39
+ map 'weight', to: :weight
40
+ map 'label', to: :label
28
41
  end
29
42
  end
30
43
  end
@@ -7,21 +7,29 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::BandList
10
+
10
11
  attribute :id, :string
11
12
  attribute :title, :string
12
13
  attribute :dict_ref, :string
13
14
  attribute :convention, :string
14
15
 
15
- attribute :bands, :band, collection: true
16
+ attribute :bands, :band, collection: true
16
17
 
17
18
  xml do
18
19
  namespace Chemicalml::Cml::Namespace
19
- map_element "band", to: :bands
20
- root "bandList"
21
- map_attribute "id", to: :id
22
- map_attribute "title", to: :title
23
- map_attribute "dictRef", to: :dict_ref
24
- map_attribute "convention", to: :convention
20
+ map_element 'band', to: :bands
21
+ root 'bandList'
22
+ map_attribute 'id', to: :id
23
+ map_attribute 'title', to: :title
24
+ map_attribute 'dictRef', to: :dict_ref
25
+ map_attribute 'convention', to: :convention
26
+ end
27
+ key_value do
28
+ map 'band', to: :bands
29
+ map 'id', to: :id
30
+ map 'title', to: :title
31
+ map 'dictRef', to: :dict_ref
32
+ map 'convention', to: :convention
25
33
  end
26
34
  end
27
35
  end
@@ -7,25 +7,40 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::BasisSet
10
+ include Chemicalml::Cml::Base::CommonChildren
11
+
10
12
  attribute :id, :string
11
13
  attribute :title, :string
12
14
  attribute :dict_ref, :string
13
15
  attribute :convention, :string
14
16
 
15
- attribute :atomic_basis_functions, :atomicBasisFunction, collection: true
17
+ attribute :atomic_basis_functions, :atomicBasisFunction, collection: true
16
18
 
17
19
  attribute :ref, :string
18
20
  attribute :role, :string
19
21
  xml do
20
22
  namespace Chemicalml::Cml::Namespace
21
- map_element "atomicBasisFunction", to: :atomic_basis_functions
22
- root "basisSet"
23
- map_attribute "id", to: :id
24
- map_attribute "title", to: :title
25
- map_attribute "dictRef", to: :dict_ref
26
- map_attribute "convention", to: :convention
27
- map_attribute "ref", to: :ref
28
- map_attribute "role", to: :role
23
+ map_element 'atomicBasisFunction', to: :atomic_basis_functions
24
+ root 'basisSet'
25
+ map_attribute 'id', to: :id
26
+ map_attribute 'title', to: :title
27
+ map_attribute 'dictRef', to: :dict_ref
28
+ map_attribute 'convention', to: :convention
29
+ map_attribute 'ref', to: :ref
30
+ map_attribute 'role', to: :role
31
+ end
32
+ key_value do
33
+ map 'metadataList', to: :metadata_lists
34
+ map 'label', to: :labels
35
+ map 'name', to: :names
36
+ map 'description', to: :descriptions
37
+ map 'atomicBasisFunction', to: :atomic_basis_functions
38
+ map 'id', to: :id
39
+ map 'title', to: :title
40
+ map 'dictRef', to: :dict_ref
41
+ map 'convention', to: :convention
42
+ map 'ref', to: :ref
43
+ map 'role', to: :role
29
44
  end
30
45
  end
31
46
  end
@@ -7,28 +7,54 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::Bond
10
+ include Chemicalml::Cml::Base::CommonChildren
11
+
10
12
  attribute :id, :string
11
13
  attribute :atom_refs2, :string
14
+ attribute :atom_refs, :string
12
15
  attribute :order, :string
13
16
  attribute :title, :string
14
17
  attribute :dict_ref, :string
15
18
  attribute :bond_stereo, :bondStereo
19
+ attribute :bond_type, :bondType
20
+ attribute :electrons, :electron, collection: true
16
21
 
17
22
  attribute :convention, :string
18
23
  attribute :ref, :string
19
24
  attribute :bond_refs, :string
20
25
  xml do
21
26
  namespace Chemicalml::Cml::Namespace
22
- root "bond"
23
- map_attribute "id", to: :id
24
- map_attribute "atomRefs2", to: :atom_refs2
25
- map_attribute "order", to: :order
26
- map_attribute "title", to: :title
27
- map_attribute "dictRef", to: :dict_ref
28
- map_element "bondStereo", to: :bond_stereo
29
- map_attribute "convention", to: :convention
30
- map_attribute "ref", to: :ref
31
- map_attribute "bondRefs", to: :bond_refs
27
+ root 'bond'
28
+ map_attribute 'id', to: :id
29
+ map_attribute 'atomRefs2', to: :atom_refs2
30
+ map_attribute 'atomRefs', to: :atom_refs
31
+ map_attribute 'order', to: :order
32
+ map_attribute 'title', to: :title
33
+ map_attribute 'dictRef', to: :dict_ref
34
+ map_element 'bondStereo', to: :bond_stereo
35
+ map_element 'bondType', to: :bond_type
36
+ map_element 'electron', to: :electrons
37
+ map_attribute 'convention', to: :convention
38
+ map_attribute 'ref', to: :ref
39
+ map_attribute 'bondRefs', to: :bond_refs
40
+ end
41
+ key_value do
42
+ map 'metadataList', to: :metadata_lists
43
+ map 'label', to: :labels
44
+ map 'name', to: :names
45
+ map 'description', to: :descriptions
46
+ map 'bondStereo', to: :bond_stereo
47
+ map 'bondType', to: :bond_type
48
+ map 'electron', to: :electrons
49
+ map 'id', to: :id
50
+ map 'atomRefs2', to: :atom_refs2
51
+ map 'atomRefs', to: :atom_refs
52
+ map 'order', to: :order
53
+ map 'title', to: :title
54
+ map 'dictRef', to: :dict_ref
55
+ map 'convention', to: :convention
56
+ map 'ref', to: :ref
57
+ map 'bondRefs', to: :bond_refs
32
58
  end
33
59
  end
34
60
  end
@@ -3,32 +3,55 @@
3
3
  module Chemicalml
4
4
  module Cml
5
5
  module Base
6
+ # Container for a list of bonds. Two equivalent serialisations:
7
+ #
8
+ # <bondArray><bond atomRefs2="a1 a2" order="1"/></bondArray>
9
+ #
10
+ # <bondArray atomRef1="a1 a2" atomRef2="a2 a3" order="1 2"/>
11
+ #
12
+ # The parallel-array form uses the wire attribute names
13
+ # `atomRef1`, `atomRef2`, `bondID`, `order` — the XSD attribute
14
+ # *group* is named `atomRef1Array` etc., but the wire attribute
15
+ # is `atomRef1`.
6
16
  module BondArray
7
17
  def self.included(klass)
8
18
  klass.class_eval do
9
19
  include Chemicalml::Cml::Role::BondArray
20
+
10
21
  attribute :bonds, :bond, collection: true
11
22
 
12
23
  attribute :title, :string
13
24
  attribute :id, :string
14
25
  attribute :convention, :string
15
26
  attribute :dict_ref, :string
16
- attribute :bond_i_d_array, :string
27
+
28
+ attribute :bond_id_array, :string
17
29
  attribute :atom_ref1_array, :string
18
30
  attribute :atom_ref2_array, :string
19
31
  attribute :order_array, :string
20
32
  xml do
21
33
  namespace Chemicalml::Cml::Namespace
22
- root "bondArray"
23
- map_element "bond", to: :bonds
24
- map_attribute "title", to: :title
25
- map_attribute "id", to: :id
26
- map_attribute "convention", to: :convention
27
- map_attribute "dictRef", to: :dict_ref
28
- map_attribute "bondIDArray", to: :bond_i_d_array
29
- map_attribute "atomRef1Array", to: :atom_ref1_array
30
- map_attribute "atomRef2Array", to: :atom_ref2_array
31
- map_attribute "orderArray", to: :order_array
34
+ root 'bondArray'
35
+ map_element 'bond', to: :bonds
36
+ map_attribute 'title', to: :title
37
+ map_attribute 'id', to: :id
38
+ map_attribute 'convention', to: :convention
39
+ map_attribute 'dictRef', to: :dict_ref
40
+ map_attribute 'bondID', to: :bond_id_array
41
+ map_attribute 'atomRef1', to: :atom_ref1_array
42
+ map_attribute 'atomRef2', to: :atom_ref2_array
43
+ map_attribute 'order', to: :order_array
44
+ end
45
+ key_value do
46
+ map 'bond', to: :bonds
47
+ map 'title', to: :title
48
+ map 'id', to: :id
49
+ map 'convention', to: :convention
50
+ map 'dictRef', to: :dict_ref
51
+ map 'bondID', to: :bond_id_array
52
+ map 'atomRef1', to: :atom_ref1_array
53
+ map 'atomRef2', to: :atom_ref2_array
54
+ map 'order', to: :order_array
32
55
  end
33
56
  end
34
57
  end
@@ -7,6 +7,7 @@ module Chemicalml
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
9
  include Chemicalml::Cml::Role::BondSet
10
+
10
11
  attribute :id, :string
11
12
  attribute :title, :string
12
13
  attribute :dict_ref, :string
@@ -15,12 +16,19 @@ module Chemicalml
15
16
  attribute :size, :string
16
17
  xml do
17
18
  namespace Chemicalml::Cml::Namespace
18
- root "bondSet"
19
- map_attribute "id", to: :id
20
- map_attribute "title", to: :title
21
- map_attribute "dictRef", to: :dict_ref
22
- map_attribute "convention", to: :convention
23
- map_attribute "size", to: :size
19
+ root 'bondSet'
20
+ map_attribute 'id', to: :id
21
+ map_attribute 'title', to: :title
22
+ map_attribute 'dictRef', to: :dict_ref
23
+ map_attribute 'convention', to: :convention
24
+ map_attribute 'size', to: :size
25
+ end
26
+ key_value do
27
+ map 'id', to: :id
28
+ map 'title', to: :title
29
+ map 'dictRef', to: :dict_ref
30
+ map 'convention', to: :convention
31
+ map 'size', to: :size
24
32
  end
25
33
  end
26
34
  end