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.
Files changed (568) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +63 -0
  3. data/.github/workflows/links.yml +99 -0
  4. data/.github/workflows/opal.yml +34 -0
  5. data/.github/workflows/performance.yml +25 -0
  6. data/.github/workflows/rake.yml +19 -0
  7. data/.github/workflows/release.yml +28 -0
  8. data/CHANGELOG.md +52 -12
  9. data/Gemfile +2 -1
  10. data/Rakefile +9 -4
  11. data/TODO.align/18-wire-class-registry.md +46 -0
  12. data/TODO.align/19-schema-aware-translator.md +33 -0
  13. data/TODO.align/20-missing-translator-rules.md +44 -0
  14. data/TODO.align/21-encapsulate-translator.md +33 -0
  15. data/TODO.align/22-dry-role-modules.md +32 -0
  16. data/TODO.align/23-final-spec-lint.md +25 -0
  17. data/TODO.align/24-autoload-wire-classes.md +84 -0
  18. data/TODO.align/25-value-container-schema-awareness.md +44 -0
  19. data/TODO.align/26-remove-dead-code.md +16 -0
  20. data/TODO.align/27-final-spec-lint.md +26 -0
  21. data/TODO.align/28-stereo-model.md +40 -0
  22. data/TODO.align/29-stereo-wire-children.md +30 -0
  23. data/TODO.align/30-stereo-translator.md +32 -0
  24. data/TODO.align/31-final-spec-lint.md +20 -0
  25. data/TODO.align/32-polymorphic-translator.md +43 -0
  26. data/TODO.align/33-polymorphic-parse.md +43 -0
  27. data/TODO.align/34-polymorphic-specs.md +16 -0
  28. data/TODO.align/35-final-spec-lint.md +10 -0
  29. data/TODO.align/README.round10.md +30 -0
  30. data/TODO.align/README.round11.md +50 -0
  31. data/TODO.align/README.round12.md +73 -0
  32. data/TODO.align/README.round13.md +59 -0
  33. data/TODO.align/README.round14.md +48 -0
  34. data/TODO.align/README.round15.md +86 -0
  35. data/TODO.align/README.round16.md +46 -0
  36. data/TODO.align/README.round3.md +27 -0
  37. data/TODO.align/README.round4.md +18 -0
  38. data/TODO.align/README.round5.md +20 -0
  39. data/TODO.align/README.round6.md +27 -0
  40. data/TODO.align/README.round7.md +43 -0
  41. data/TODO.align/README.round8.md +24 -0
  42. data/TODO.align/README.round9.md +50 -0
  43. data/data/dictionaries/_index.yaml +9 -1
  44. data/data/dictionaries/cif.yaml +155 -0
  45. data/data/dictionaries/cml.yaml +172 -0
  46. data/data/dictionaries/cml_formula.yaml +63 -0
  47. data/data/dictionaries/cml_name.yaml +84 -0
  48. data/data/dictionaries/unit_non_si.yaml +30 -0
  49. data/data/dictionaries/unit_type.yaml +12 -0
  50. data/lib/chemicalml/cml/aliases.rb +20 -0
  51. data/lib/chemicalml/cml/base/abundance.rb +28 -0
  52. data/lib/chemicalml/cml/base/action.rb +30 -0
  53. data/lib/chemicalml/cml/base/action_list.rb +33 -0
  54. data/lib/chemicalml/cml/base/amount.rb +28 -0
  55. data/lib/chemicalml/cml/base/angle.rb +32 -0
  56. data/lib/chemicalml/cml/base/any_cml.rb +28 -0
  57. data/lib/chemicalml/cml/base/array.rb +1 -1
  58. data/lib/chemicalml/cml/base/array_list.rb +28 -0
  59. data/lib/chemicalml/cml/base/atom.rb +19 -1
  60. data/lib/chemicalml/cml/base/atom_array.rb +1 -1
  61. data/lib/chemicalml/cml/base/atom_parity.rb +1 -1
  62. data/lib/chemicalml/cml/base/atom_set.rb +28 -0
  63. data/lib/chemicalml/cml/base/atom_type.rb +32 -0
  64. data/lib/chemicalml/cml/base/atom_type_list.rb +31 -0
  65. data/lib/chemicalml/cml/base/atomic_basis_function.rb +40 -0
  66. data/lib/chemicalml/cml/base/band.rb +32 -0
  67. data/lib/chemicalml/cml/base/band_list.rb +31 -0
  68. data/lib/chemicalml/cml/base/basis_set.rb +31 -0
  69. data/lib/chemicalml/cml/base/bond.rb +5 -1
  70. data/lib/chemicalml/cml/base/bond_array.rb +1 -1
  71. data/lib/chemicalml/cml/base/bond_set.rb +28 -0
  72. data/lib/chemicalml/cml/base/bond_stereo.rb +1 -1
  73. data/lib/chemicalml/cml/base/bond_type.rb +32 -0
  74. data/lib/chemicalml/cml/base/bond_type_list.rb +31 -0
  75. data/lib/chemicalml/cml/base/cell_parameter.rb +34 -0
  76. data/lib/chemicalml/cml/base/cml_module.rb +1 -1
  77. data/lib/chemicalml/cml/base/condition_list.rb +33 -0
  78. data/lib/chemicalml/cml/base/crystal.rb +35 -0
  79. data/lib/chemicalml/cml/base/definition.rb +30 -0
  80. data/lib/chemicalml/cml/base/description.rb +30 -0
  81. data/lib/chemicalml/cml/base/dictionary.rb +1 -1
  82. data/lib/chemicalml/cml/base/dictionary_entry.rb +1 -1
  83. data/lib/chemicalml/cml/base/dimension.rb +32 -0
  84. data/lib/chemicalml/cml/base/document.rb +9 -1
  85. data/lib/chemicalml/cml/base/documentation.rb +30 -0
  86. data/lib/chemicalml/cml/base/eigen.rb +34 -0
  87. data/lib/chemicalml/cml/base/electron.rb +36 -0
  88. data/lib/chemicalml/cml/base/formula.rb +1 -1
  89. data/lib/chemicalml/cml/base/fragment.rb +35 -0
  90. data/lib/chemicalml/cml/base/fragment_list.rb +31 -0
  91. data/lib/chemicalml/cml/base/gradient.rb +32 -0
  92. data/lib/chemicalml/cml/base/identifier.rb +1 -1
  93. data/lib/chemicalml/cml/base/isotope.rb +34 -0
  94. data/lib/chemicalml/cml/base/isotope_list.rb +31 -0
  95. data/lib/chemicalml/cml/base/join.rb +30 -0
  96. data/lib/chemicalml/cml/base/kpoint.rb +32 -0
  97. data/lib/chemicalml/cml/base/kpoint_list.rb +31 -0
  98. data/lib/chemicalml/cml/base/label.rb +1 -1
  99. data/lib/chemicalml/cml/base/lattice.rb +35 -0
  100. data/lib/chemicalml/cml/base/lattice_vector.rb +30 -0
  101. data/lib/chemicalml/cml/base/length.rb +32 -0
  102. data/lib/chemicalml/cml/base/line3.rb +30 -0
  103. data/lib/chemicalml/cml/base/link.rb +38 -0
  104. data/lib/chemicalml/cml/base/list.rb +1 -1
  105. data/lib/chemicalml/cml/base/map.rb +28 -0
  106. data/lib/chemicalml/cml/base/matrix.rb +1 -1
  107. data/lib/chemicalml/cml/base/mechanism.rb +31 -0
  108. data/lib/chemicalml/cml/base/mechanism_component.rb +30 -0
  109. data/lib/chemicalml/cml/base/metadata.rb +1 -1
  110. data/lib/chemicalml/cml/base/metadata_list.rb +1 -1
  111. data/lib/chemicalml/cml/base/molecule.rb +17 -1
  112. data/lib/chemicalml/cml/base/molecule_list.rb +31 -0
  113. data/lib/chemicalml/cml/base/name.rb +1 -1
  114. data/lib/chemicalml/cml/base/object.rb +30 -0
  115. data/lib/chemicalml/cml/base/observation.rb +28 -0
  116. data/lib/chemicalml/cml/base/parameter.rb +1 -1
  117. data/lib/chemicalml/cml/base/parameter_list.rb +1 -1
  118. data/lib/chemicalml/cml/base/particle.rb +30 -0
  119. data/lib/chemicalml/cml/base/peak.rb +40 -0
  120. data/lib/chemicalml/cml/base/peak_group.rb +31 -0
  121. data/lib/chemicalml/cml/base/peak_list.rb +33 -0
  122. data/lib/chemicalml/cml/base/peak_structure.rb +30 -0
  123. data/lib/chemicalml/cml/base/plane3.rb +30 -0
  124. data/lib/chemicalml/cml/base/point3.rb +30 -0
  125. data/lib/chemicalml/cml/base/potential.rb +30 -0
  126. data/lib/chemicalml/cml/base/potential_form.rb +30 -0
  127. data/lib/chemicalml/cml/base/potential_list.rb +31 -0
  128. data/lib/chemicalml/cml/base/product.rb +1 -1
  129. data/lib/chemicalml/cml/base/product_list.rb +1 -1
  130. data/lib/chemicalml/cml/base/property.rb +1 -1
  131. data/lib/chemicalml/cml/base/property_list.rb +1 -1
  132. data/lib/chemicalml/cml/base/reactant.rb +1 -1
  133. data/lib/chemicalml/cml/base/reactant_list.rb +1 -1
  134. data/lib/chemicalml/cml/base/reaction.rb +9 -1
  135. data/lib/chemicalml/cml/base/reaction_list.rb +1 -1
  136. data/lib/chemicalml/cml/base/reaction_scheme.rb +33 -0
  137. data/lib/chemicalml/cml/base/reaction_step.rb +35 -0
  138. data/lib/chemicalml/cml/base/reaction_step_list.rb +31 -0
  139. data/lib/chemicalml/cml/base/reactive_centre.rb +30 -0
  140. data/lib/chemicalml/cml/base/region.rb +28 -0
  141. data/lib/chemicalml/cml/base/sample.rb +28 -0
  142. data/lib/chemicalml/cml/base/scalar.rb +1 -1
  143. data/lib/chemicalml/cml/base/spectator.rb +28 -0
  144. data/lib/chemicalml/cml/base/spectator_list.rb +31 -0
  145. data/lib/chemicalml/cml/base/spectrum.rb +41 -0
  146. data/lib/chemicalml/cml/base/spectrum_data.rb +33 -0
  147. data/lib/chemicalml/cml/base/spectrum_list.rb +31 -0
  148. data/lib/chemicalml/cml/base/sphere3.rb +30 -0
  149. data/lib/chemicalml/cml/base/stmml.rb +28 -0
  150. data/lib/chemicalml/cml/base/substance.rb +1 -1
  151. data/lib/chemicalml/cml/base/substance_list.rb +31 -0
  152. data/lib/chemicalml/cml/base/symmetry.rb +32 -0
  153. data/lib/chemicalml/cml/base/system.rb +33 -0
  154. data/lib/chemicalml/cml/base/table.rb +33 -0
  155. data/lib/chemicalml/cml/base/table_cell.rb +30 -0
  156. data/lib/chemicalml/cml/base/table_content.rb +33 -0
  157. data/lib/chemicalml/cml/base/table_header.rb +31 -0
  158. data/lib/chemicalml/cml/base/table_header_cell.rb +30 -0
  159. data/lib/chemicalml/cml/base/table_row.rb +31 -0
  160. data/lib/chemicalml/cml/base/table_row_list.rb +31 -0
  161. data/lib/chemicalml/cml/base/torsion.rb +32 -0
  162. data/lib/chemicalml/cml/base/transform3.rb +30 -0
  163. data/lib/chemicalml/cml/base/transition_state.rb +28 -0
  164. data/lib/chemicalml/cml/base/unit.rb +1 -1
  165. data/lib/chemicalml/cml/base/unit_list.rb +1 -1
  166. data/lib/chemicalml/cml/base/unit_type.rb +1 -1
  167. data/lib/chemicalml/cml/base/unit_type_list.rb +1 -1
  168. data/lib/chemicalml/cml/base/vector3.rb +30 -0
  169. data/lib/chemicalml/cml/base/xaxis.rb +32 -0
  170. data/lib/chemicalml/cml/base/yaxis.rb +32 -0
  171. data/lib/chemicalml/cml/base/z_matrix.rb +30 -0
  172. data/lib/chemicalml/cml/base.rb +85 -0
  173. data/lib/chemicalml/cml/child_mappings.rb +168 -0
  174. data/lib/chemicalml/cml/elements.rb +130 -42
  175. data/lib/chemicalml/cml/role/abundance.rb +12 -0
  176. data/lib/chemicalml/cml/role/action.rb +12 -0
  177. data/lib/chemicalml/cml/role/action_list.rb +12 -0
  178. data/lib/chemicalml/cml/role/amount.rb +12 -0
  179. data/lib/chemicalml/cml/role/angle.rb +12 -0
  180. data/lib/chemicalml/cml/role/any_cml.rb +12 -0
  181. data/lib/chemicalml/cml/role/array_list.rb +12 -0
  182. data/lib/chemicalml/cml/role/atom_set.rb +12 -0
  183. data/lib/chemicalml/cml/role/atom_type.rb +12 -0
  184. data/lib/chemicalml/cml/role/atom_type_list.rb +12 -0
  185. data/lib/chemicalml/cml/role/atomic_basis_function.rb +12 -0
  186. data/lib/chemicalml/cml/role/band.rb +12 -0
  187. data/lib/chemicalml/cml/role/band_list.rb +12 -0
  188. data/lib/chemicalml/cml/role/basis_set.rb +12 -0
  189. data/lib/chemicalml/cml/role/bond_set.rb +12 -0
  190. data/lib/chemicalml/cml/role/bond_type.rb +12 -0
  191. data/lib/chemicalml/cml/role/bond_type_list.rb +12 -0
  192. data/lib/chemicalml/cml/role/cell_parameter.rb +12 -0
  193. data/lib/chemicalml/cml/role/condition_list.rb +12 -0
  194. data/lib/chemicalml/cml/role/crystal.rb +12 -0
  195. data/lib/chemicalml/cml/role/definition.rb +12 -0
  196. data/lib/chemicalml/cml/role/description.rb +12 -0
  197. data/lib/chemicalml/cml/role/dimension.rb +12 -0
  198. data/lib/chemicalml/cml/role/documentation.rb +12 -0
  199. data/lib/chemicalml/cml/role/eigen.rb +12 -0
  200. data/lib/chemicalml/cml/role/electron.rb +12 -0
  201. data/lib/chemicalml/cml/role/fragment.rb +12 -0
  202. data/lib/chemicalml/cml/role/fragment_list.rb +12 -0
  203. data/lib/chemicalml/cml/role/gradient.rb +12 -0
  204. data/lib/chemicalml/cml/role/isotope.rb +12 -0
  205. data/lib/chemicalml/cml/role/isotope_list.rb +12 -0
  206. data/lib/chemicalml/cml/role/join.rb +12 -0
  207. data/lib/chemicalml/cml/role/kpoint.rb +12 -0
  208. data/lib/chemicalml/cml/role/kpoint_list.rb +12 -0
  209. data/lib/chemicalml/cml/role/lattice.rb +12 -0
  210. data/lib/chemicalml/cml/role/lattice_vector.rb +12 -0
  211. data/lib/chemicalml/cml/role/length.rb +12 -0
  212. data/lib/chemicalml/cml/role/line3.rb +12 -0
  213. data/lib/chemicalml/cml/role/link.rb +12 -0
  214. data/lib/chemicalml/cml/role/map.rb +12 -0
  215. data/lib/chemicalml/cml/role/mechanism.rb +12 -0
  216. data/lib/chemicalml/cml/role/mechanism_component.rb +12 -0
  217. data/lib/chemicalml/cml/role/molecule_list.rb +12 -0
  218. data/lib/chemicalml/cml/role/object.rb +12 -0
  219. data/lib/chemicalml/cml/role/observation.rb +12 -0
  220. data/lib/chemicalml/cml/role/particle.rb +12 -0
  221. data/lib/chemicalml/cml/role/peak.rb +12 -0
  222. data/lib/chemicalml/cml/role/peak_group.rb +12 -0
  223. data/lib/chemicalml/cml/role/peak_list.rb +12 -0
  224. data/lib/chemicalml/cml/role/peak_structure.rb +12 -0
  225. data/lib/chemicalml/cml/role/plane3.rb +12 -0
  226. data/lib/chemicalml/cml/role/point3.rb +12 -0
  227. data/lib/chemicalml/cml/role/potential.rb +12 -0
  228. data/lib/chemicalml/cml/role/potential_form.rb +12 -0
  229. data/lib/chemicalml/cml/role/potential_list.rb +12 -0
  230. data/lib/chemicalml/cml/role/reaction_scheme.rb +12 -0
  231. data/lib/chemicalml/cml/role/reaction_step.rb +12 -0
  232. data/lib/chemicalml/cml/role/reaction_step_list.rb +12 -0
  233. data/lib/chemicalml/cml/role/reactive_centre.rb +12 -0
  234. data/lib/chemicalml/cml/role/region.rb +12 -0
  235. data/lib/chemicalml/cml/role/sample.rb +12 -0
  236. data/lib/chemicalml/cml/role/spectator.rb +12 -0
  237. data/lib/chemicalml/cml/role/spectator_list.rb +12 -0
  238. data/lib/chemicalml/cml/role/spectrum.rb +12 -0
  239. data/lib/chemicalml/cml/role/spectrum_data.rb +12 -0
  240. data/lib/chemicalml/cml/role/spectrum_list.rb +12 -0
  241. data/lib/chemicalml/cml/role/sphere3.rb +12 -0
  242. data/lib/chemicalml/cml/role/stmml.rb +12 -0
  243. data/lib/chemicalml/cml/role/substance_list.rb +12 -0
  244. data/lib/chemicalml/cml/role/symmetry.rb +12 -0
  245. data/lib/chemicalml/cml/role/system.rb +12 -0
  246. data/lib/chemicalml/cml/role/table.rb +12 -0
  247. data/lib/chemicalml/cml/role/table_cell.rb +12 -0
  248. data/lib/chemicalml/cml/role/table_content.rb +12 -0
  249. data/lib/chemicalml/cml/role/table_header.rb +12 -0
  250. data/lib/chemicalml/cml/role/table_header_cell.rb +12 -0
  251. data/lib/chemicalml/cml/role/table_row.rb +12 -0
  252. data/lib/chemicalml/cml/role/table_row_list.rb +12 -0
  253. data/lib/chemicalml/cml/role/torsion.rb +12 -0
  254. data/lib/chemicalml/cml/role/transform3.rb +12 -0
  255. data/lib/chemicalml/cml/role/transition_state.rb +12 -0
  256. data/lib/chemicalml/cml/role/vector3.rb +12 -0
  257. data/lib/chemicalml/cml/role/xaxis.rb +12 -0
  258. data/lib/chemicalml/cml/role/yaxis.rb +12 -0
  259. data/lib/chemicalml/cml/role/z_matrix.rb +12 -0
  260. data/lib/chemicalml/cml/role.rb +86 -1
  261. data/lib/chemicalml/cml/schema24/abundance.rb +13 -0
  262. data/lib/chemicalml/cml/schema24/action.rb +13 -0
  263. data/lib/chemicalml/cml/schema24/action_list.rb +13 -0
  264. data/lib/chemicalml/cml/schema24/amount.rb +13 -0
  265. data/lib/chemicalml/cml/schema24/angle.rb +13 -0
  266. data/lib/chemicalml/cml/schema24/any_cml.rb +13 -0
  267. data/lib/chemicalml/cml/schema24/array.rb +15 -0
  268. data/lib/chemicalml/cml/schema24/array_list.rb +13 -0
  269. data/lib/chemicalml/cml/schema24/atom.rb +15 -0
  270. data/lib/chemicalml/cml/schema24/atom_array.rb +15 -0
  271. data/lib/chemicalml/cml/schema24/atom_parity.rb +15 -0
  272. data/lib/chemicalml/cml/schema24/atom_set.rb +13 -0
  273. data/lib/chemicalml/cml/schema24/atom_type.rb +13 -0
  274. data/lib/chemicalml/cml/schema24/atom_type_list.rb +13 -0
  275. data/lib/chemicalml/cml/schema24/atomic_basis_function.rb +13 -0
  276. data/lib/chemicalml/cml/schema24/band.rb +13 -0
  277. data/lib/chemicalml/cml/schema24/band_list.rb +13 -0
  278. data/lib/chemicalml/cml/schema24/basis_set.rb +13 -0
  279. data/lib/chemicalml/cml/schema24/bond.rb +15 -0
  280. data/lib/chemicalml/cml/schema24/bond_array.rb +15 -0
  281. data/lib/chemicalml/cml/schema24/bond_set.rb +13 -0
  282. data/lib/chemicalml/cml/schema24/bond_stereo.rb +15 -0
  283. data/lib/chemicalml/cml/schema24/bond_type.rb +13 -0
  284. data/lib/chemicalml/cml/schema24/bond_type_list.rb +13 -0
  285. data/lib/chemicalml/cml/schema24/cell_parameter.rb +13 -0
  286. data/lib/chemicalml/cml/schema24/condition_list.rb +13 -0
  287. data/lib/chemicalml/cml/schema24/context.rb +18 -0
  288. data/lib/chemicalml/cml/schema24/crystal.rb +13 -0
  289. data/lib/chemicalml/cml/schema24/definition.rb +13 -0
  290. data/lib/chemicalml/cml/schema24/description.rb +13 -0
  291. data/lib/chemicalml/cml/schema24/dictionary.rb +15 -0
  292. data/lib/chemicalml/cml/schema24/dictionary_entry.rb +15 -0
  293. data/lib/chemicalml/cml/schema24/dimension.rb +13 -0
  294. data/lib/chemicalml/cml/schema24/document.rb +15 -0
  295. data/lib/chemicalml/cml/schema24/documentation.rb +13 -0
  296. data/lib/chemicalml/cml/schema24/eigen.rb +13 -0
  297. data/lib/chemicalml/cml/schema24/electron.rb +13 -0
  298. data/lib/chemicalml/cml/schema24/formula.rb +15 -0
  299. data/lib/chemicalml/cml/schema24/fragment.rb +13 -0
  300. data/lib/chemicalml/cml/schema24/fragment_list.rb +13 -0
  301. data/lib/chemicalml/cml/schema24/gradient.rb +13 -0
  302. data/lib/chemicalml/cml/schema24/identifier.rb +15 -0
  303. data/lib/chemicalml/cml/schema24/isotope.rb +13 -0
  304. data/lib/chemicalml/cml/schema24/isotope_list.rb +13 -0
  305. data/lib/chemicalml/cml/schema24/join.rb +13 -0
  306. data/lib/chemicalml/cml/schema24/kpoint.rb +13 -0
  307. data/lib/chemicalml/cml/schema24/kpoint_list.rb +13 -0
  308. data/lib/chemicalml/cml/schema24/label.rb +15 -0
  309. data/lib/chemicalml/cml/schema24/lattice.rb +13 -0
  310. data/lib/chemicalml/cml/schema24/lattice_vector.rb +13 -0
  311. data/lib/chemicalml/cml/schema24/length.rb +13 -0
  312. data/lib/chemicalml/cml/schema24/line3.rb +13 -0
  313. data/lib/chemicalml/cml/schema24/link.rb +13 -0
  314. data/lib/chemicalml/cml/schema24/list.rb +15 -0
  315. data/lib/chemicalml/cml/schema24/map.rb +13 -0
  316. data/lib/chemicalml/cml/schema24/matrix.rb +15 -0
  317. data/lib/chemicalml/cml/schema24/mechanism.rb +13 -0
  318. data/lib/chemicalml/cml/schema24/mechanism_component.rb +13 -0
  319. data/lib/chemicalml/cml/schema24/metadata.rb +15 -0
  320. data/lib/chemicalml/cml/schema24/metadata_list.rb +15 -0
  321. data/lib/chemicalml/cml/schema24/molecule.rb +15 -0
  322. data/lib/chemicalml/cml/schema24/molecule_list.rb +13 -0
  323. data/lib/chemicalml/cml/schema24/name.rb +15 -0
  324. data/lib/chemicalml/cml/schema24/object.rb +13 -0
  325. data/lib/chemicalml/cml/schema24/observation.rb +13 -0
  326. data/lib/chemicalml/cml/schema24/parameter.rb +15 -0
  327. data/lib/chemicalml/cml/schema24/parameter_list.rb +15 -0
  328. data/lib/chemicalml/cml/schema24/particle.rb +13 -0
  329. data/lib/chemicalml/cml/schema24/peak.rb +13 -0
  330. data/lib/chemicalml/cml/schema24/peak_group.rb +13 -0
  331. data/lib/chemicalml/cml/schema24/peak_list.rb +13 -0
  332. data/lib/chemicalml/cml/schema24/peak_structure.rb +13 -0
  333. data/lib/chemicalml/cml/schema24/plane3.rb +13 -0
  334. data/lib/chemicalml/cml/schema24/point3.rb +13 -0
  335. data/lib/chemicalml/cml/schema24/potential.rb +13 -0
  336. data/lib/chemicalml/cml/schema24/potential_form.rb +13 -0
  337. data/lib/chemicalml/cml/schema24/potential_list.rb +13 -0
  338. data/lib/chemicalml/cml/schema24/product.rb +15 -0
  339. data/lib/chemicalml/cml/schema24/product_list.rb +15 -0
  340. data/lib/chemicalml/cml/schema24/property.rb +15 -0
  341. data/lib/chemicalml/cml/schema24/property_list.rb +15 -0
  342. data/lib/chemicalml/cml/schema24/reactant.rb +15 -0
  343. data/lib/chemicalml/cml/schema24/reactant_list.rb +15 -0
  344. data/lib/chemicalml/cml/schema24/reaction.rb +15 -0
  345. data/lib/chemicalml/cml/schema24/reaction_list.rb +15 -0
  346. data/lib/chemicalml/cml/schema24/reaction_scheme.rb +13 -0
  347. data/lib/chemicalml/cml/schema24/reaction_step.rb +13 -0
  348. data/lib/chemicalml/cml/schema24/reaction_step_list.rb +13 -0
  349. data/lib/chemicalml/cml/schema24/reactive_centre.rb +13 -0
  350. data/lib/chemicalml/cml/schema24/region.rb +13 -0
  351. data/lib/chemicalml/cml/schema24/sample.rb +13 -0
  352. data/lib/chemicalml/cml/schema24/scalar.rb +15 -0
  353. data/lib/chemicalml/cml/schema24/spectator.rb +13 -0
  354. data/lib/chemicalml/cml/schema24/spectator_list.rb +13 -0
  355. data/lib/chemicalml/cml/schema24/spectrum.rb +13 -0
  356. data/lib/chemicalml/cml/schema24/spectrum_data.rb +13 -0
  357. data/lib/chemicalml/cml/schema24/spectrum_list.rb +13 -0
  358. data/lib/chemicalml/cml/schema24/sphere3.rb +13 -0
  359. data/lib/chemicalml/cml/schema24/stmml.rb +13 -0
  360. data/lib/chemicalml/cml/schema24/substance.rb +15 -0
  361. data/lib/chemicalml/cml/schema24/substance_list.rb +13 -0
  362. data/lib/chemicalml/cml/schema24/symmetry.rb +13 -0
  363. data/lib/chemicalml/cml/schema24/system.rb +13 -0
  364. data/lib/chemicalml/cml/schema24/table.rb +13 -0
  365. data/lib/chemicalml/cml/schema24/table_cell.rb +13 -0
  366. data/lib/chemicalml/cml/schema24/table_content.rb +13 -0
  367. data/lib/chemicalml/cml/schema24/table_header.rb +13 -0
  368. data/lib/chemicalml/cml/schema24/table_header_cell.rb +13 -0
  369. data/lib/chemicalml/cml/schema24/table_row.rb +13 -0
  370. data/lib/chemicalml/cml/schema24/table_row_list.rb +13 -0
  371. data/lib/chemicalml/cml/schema24/torsion.rb +13 -0
  372. data/lib/chemicalml/cml/schema24/transform3.rb +13 -0
  373. data/lib/chemicalml/cml/schema24/transition_state.rb +13 -0
  374. data/lib/chemicalml/cml/schema24/unit.rb +15 -0
  375. data/lib/chemicalml/cml/schema24/unit_list.rb +15 -0
  376. data/lib/chemicalml/cml/schema24/unit_type.rb +15 -0
  377. data/lib/chemicalml/cml/schema24/unit_type_list.rb +15 -0
  378. data/lib/chemicalml/cml/schema24/vector3.rb +13 -0
  379. data/lib/chemicalml/cml/schema24/xaxis.rb +13 -0
  380. data/lib/chemicalml/cml/schema24/yaxis.rb +13 -0
  381. data/lib/chemicalml/cml/schema24/z_matrix.rb +13 -0
  382. data/lib/chemicalml/cml/schema24.rb +131 -19
  383. data/lib/chemicalml/cml/schema3/abundance.rb +13 -0
  384. data/lib/chemicalml/cml/schema3/action.rb +13 -0
  385. data/lib/chemicalml/cml/schema3/action_list.rb +13 -0
  386. data/lib/chemicalml/cml/schema3/amount.rb +13 -0
  387. data/lib/chemicalml/cml/schema3/angle.rb +13 -0
  388. data/lib/chemicalml/cml/schema3/any_cml.rb +13 -0
  389. data/lib/chemicalml/cml/schema3/array.rb +15 -0
  390. data/lib/chemicalml/cml/schema3/array_list.rb +13 -0
  391. data/lib/chemicalml/cml/schema3/atom.rb +15 -0
  392. data/lib/chemicalml/cml/schema3/atom_array.rb +15 -0
  393. data/lib/chemicalml/cml/schema3/atom_parity.rb +15 -0
  394. data/lib/chemicalml/cml/schema3/atom_set.rb +13 -0
  395. data/lib/chemicalml/cml/schema3/atom_type.rb +13 -0
  396. data/lib/chemicalml/cml/schema3/atom_type_list.rb +13 -0
  397. data/lib/chemicalml/cml/schema3/atomic_basis_function.rb +13 -0
  398. data/lib/chemicalml/cml/schema3/band.rb +13 -0
  399. data/lib/chemicalml/cml/schema3/band_list.rb +13 -0
  400. data/lib/chemicalml/cml/schema3/basis_set.rb +13 -0
  401. data/lib/chemicalml/cml/schema3/bond.rb +15 -0
  402. data/lib/chemicalml/cml/schema3/bond_array.rb +15 -0
  403. data/lib/chemicalml/cml/schema3/bond_set.rb +13 -0
  404. data/lib/chemicalml/cml/schema3/bond_stereo.rb +15 -0
  405. data/lib/chemicalml/cml/schema3/bond_type.rb +13 -0
  406. data/lib/chemicalml/cml/schema3/bond_type_list.rb +13 -0
  407. data/lib/chemicalml/cml/schema3/cell_parameter.rb +13 -0
  408. data/lib/chemicalml/cml/schema3/cml_module.rb +15 -0
  409. data/lib/chemicalml/cml/schema3/condition_list.rb +13 -0
  410. data/lib/chemicalml/cml/schema3/context.rb +18 -0
  411. data/lib/chemicalml/cml/schema3/crystal.rb +13 -0
  412. data/lib/chemicalml/cml/schema3/definition.rb +13 -0
  413. data/lib/chemicalml/cml/schema3/description.rb +13 -0
  414. data/lib/chemicalml/cml/schema3/dictionary.rb +15 -0
  415. data/lib/chemicalml/cml/schema3/dictionary_entry.rb +15 -0
  416. data/lib/chemicalml/cml/schema3/dimension.rb +13 -0
  417. data/lib/chemicalml/cml/schema3/document.rb +15 -0
  418. data/lib/chemicalml/cml/schema3/documentation.rb +13 -0
  419. data/lib/chemicalml/cml/schema3/eigen.rb +13 -0
  420. data/lib/chemicalml/cml/schema3/electron.rb +13 -0
  421. data/lib/chemicalml/cml/schema3/formula.rb +15 -0
  422. data/lib/chemicalml/cml/schema3/fragment.rb +13 -0
  423. data/lib/chemicalml/cml/schema3/fragment_list.rb +13 -0
  424. data/lib/chemicalml/cml/schema3/gradient.rb +13 -0
  425. data/lib/chemicalml/cml/schema3/identifier.rb +15 -0
  426. data/lib/chemicalml/cml/schema3/isotope.rb +13 -0
  427. data/lib/chemicalml/cml/schema3/isotope_list.rb +13 -0
  428. data/lib/chemicalml/cml/schema3/join.rb +13 -0
  429. data/lib/chemicalml/cml/schema3/kpoint.rb +13 -0
  430. data/lib/chemicalml/cml/schema3/kpoint_list.rb +13 -0
  431. data/lib/chemicalml/cml/schema3/label.rb +15 -0
  432. data/lib/chemicalml/cml/schema3/lattice.rb +13 -0
  433. data/lib/chemicalml/cml/schema3/lattice_vector.rb +13 -0
  434. data/lib/chemicalml/cml/schema3/length.rb +13 -0
  435. data/lib/chemicalml/cml/schema3/line3.rb +13 -0
  436. data/lib/chemicalml/cml/schema3/link.rb +13 -0
  437. data/lib/chemicalml/cml/schema3/list.rb +15 -0
  438. data/lib/chemicalml/cml/schema3/map.rb +13 -0
  439. data/lib/chemicalml/cml/schema3/matrix.rb +15 -0
  440. data/lib/chemicalml/cml/schema3/mechanism.rb +13 -0
  441. data/lib/chemicalml/cml/schema3/mechanism_component.rb +13 -0
  442. data/lib/chemicalml/cml/schema3/metadata.rb +15 -0
  443. data/lib/chemicalml/cml/schema3/metadata_list.rb +15 -0
  444. data/lib/chemicalml/cml/schema3/molecule.rb +15 -0
  445. data/lib/chemicalml/cml/schema3/molecule_list.rb +13 -0
  446. data/lib/chemicalml/cml/schema3/name.rb +15 -0
  447. data/lib/chemicalml/cml/schema3/object.rb +13 -0
  448. data/lib/chemicalml/cml/schema3/observation.rb +13 -0
  449. data/lib/chemicalml/cml/schema3/parameter.rb +15 -0
  450. data/lib/chemicalml/cml/schema3/parameter_list.rb +15 -0
  451. data/lib/chemicalml/cml/schema3/particle.rb +13 -0
  452. data/lib/chemicalml/cml/schema3/peak.rb +13 -0
  453. data/lib/chemicalml/cml/schema3/peak_group.rb +13 -0
  454. data/lib/chemicalml/cml/schema3/peak_list.rb +13 -0
  455. data/lib/chemicalml/cml/schema3/peak_structure.rb +13 -0
  456. data/lib/chemicalml/cml/schema3/plane3.rb +13 -0
  457. data/lib/chemicalml/cml/schema3/point3.rb +13 -0
  458. data/lib/chemicalml/cml/schema3/potential.rb +13 -0
  459. data/lib/chemicalml/cml/schema3/potential_form.rb +13 -0
  460. data/lib/chemicalml/cml/schema3/potential_list.rb +13 -0
  461. data/lib/chemicalml/cml/schema3/product.rb +15 -0
  462. data/lib/chemicalml/cml/schema3/product_list.rb +15 -0
  463. data/lib/chemicalml/cml/schema3/property.rb +15 -0
  464. data/lib/chemicalml/cml/schema3/property_list.rb +15 -0
  465. data/lib/chemicalml/cml/schema3/reactant.rb +15 -0
  466. data/lib/chemicalml/cml/schema3/reactant_list.rb +15 -0
  467. data/lib/chemicalml/cml/schema3/reaction.rb +15 -0
  468. data/lib/chemicalml/cml/schema3/reaction_list.rb +15 -0
  469. data/lib/chemicalml/cml/schema3/reaction_scheme.rb +13 -0
  470. data/lib/chemicalml/cml/schema3/reaction_step.rb +13 -0
  471. data/lib/chemicalml/cml/schema3/reaction_step_list.rb +13 -0
  472. data/lib/chemicalml/cml/schema3/reactive_centre.rb +13 -0
  473. data/lib/chemicalml/cml/schema3/region.rb +13 -0
  474. data/lib/chemicalml/cml/schema3/sample.rb +13 -0
  475. data/lib/chemicalml/cml/schema3/scalar.rb +15 -0
  476. data/lib/chemicalml/cml/schema3/spectator.rb +13 -0
  477. data/lib/chemicalml/cml/schema3/spectator_list.rb +13 -0
  478. data/lib/chemicalml/cml/schema3/spectrum.rb +13 -0
  479. data/lib/chemicalml/cml/schema3/spectrum_data.rb +13 -0
  480. data/lib/chemicalml/cml/schema3/spectrum_list.rb +13 -0
  481. data/lib/chemicalml/cml/schema3/sphere3.rb +13 -0
  482. data/lib/chemicalml/cml/schema3/stmml.rb +13 -0
  483. data/lib/chemicalml/cml/schema3/substance.rb +15 -0
  484. data/lib/chemicalml/cml/schema3/substance_list.rb +13 -0
  485. data/lib/chemicalml/cml/schema3/symmetry.rb +13 -0
  486. data/lib/chemicalml/cml/schema3/system.rb +13 -0
  487. data/lib/chemicalml/cml/schema3/table.rb +13 -0
  488. data/lib/chemicalml/cml/schema3/table_cell.rb +13 -0
  489. data/lib/chemicalml/cml/schema3/table_content.rb +13 -0
  490. data/lib/chemicalml/cml/schema3/table_header.rb +13 -0
  491. data/lib/chemicalml/cml/schema3/table_header_cell.rb +13 -0
  492. data/lib/chemicalml/cml/schema3/table_row.rb +13 -0
  493. data/lib/chemicalml/cml/schema3/table_row_list.rb +13 -0
  494. data/lib/chemicalml/cml/schema3/torsion.rb +13 -0
  495. data/lib/chemicalml/cml/schema3/transform3.rb +13 -0
  496. data/lib/chemicalml/cml/schema3/transition_state.rb +13 -0
  497. data/lib/chemicalml/cml/schema3/unit.rb +15 -0
  498. data/lib/chemicalml/cml/schema3/unit_list.rb +15 -0
  499. data/lib/chemicalml/cml/schema3/unit_type.rb +15 -0
  500. data/lib/chemicalml/cml/schema3/unit_type_list.rb +15 -0
  501. data/lib/chemicalml/cml/schema3/vector3.rb +13 -0
  502. data/lib/chemicalml/cml/schema3/xaxis.rb +13 -0
  503. data/lib/chemicalml/cml/schema3/yaxis.rb +13 -0
  504. data/lib/chemicalml/cml/schema3/z_matrix.rb +13 -0
  505. data/lib/chemicalml/cml/schema3.rb +132 -17
  506. data/lib/chemicalml/cml/translator/value_translations.rb +40 -35
  507. data/lib/chemicalml/cml/translator.rb +319 -68
  508. data/lib/chemicalml/cml/wire_class_registry.rb +42 -0
  509. data/lib/chemicalml/cml.rb +138 -44
  510. data/lib/chemicalml/convention/molecular/constraints/atom_coordinates_must_be_paired.rb +32 -0
  511. data/lib/chemicalml/convention/molecular/constraints/atom_id_must_match_pattern.rb +26 -0
  512. data/lib/chemicalml/convention/molecular/constraints/atom_must_have_element_type.rb +20 -0
  513. data/lib/chemicalml/convention/molecular/constraints/atom_must_have_id.rb +20 -0
  514. data/lib/chemicalml/convention/molecular/constraints/bond_must_have_atom_refs2.rb +20 -0
  515. data/lib/chemicalml/convention/molecular/constraints/bond_must_have_order.rb +20 -0
  516. data/lib/chemicalml/convention/molecular/constraints/bond_order_should_not_be_numeric.rb +27 -0
  517. data/lib/chemicalml/convention/molecular/constraints/molecule_must_have_id.rb +20 -0
  518. data/lib/chemicalml/convention/molecular/constraints/property_must_have_dict_ref.rb +20 -0
  519. data/lib/chemicalml/convention/molecular/constraints/scalar_must_have_data_type.rb +20 -0
  520. data/lib/chemicalml/convention/molecular/constraints.rb +20 -3
  521. data/lib/chemicalml/convention/molecular.rb +10 -0
  522. data/lib/chemicalml/model/atom.rb +28 -4
  523. data/lib/chemicalml/model/atom_parity.rb +21 -0
  524. data/lib/chemicalml/model/bond.rb +9 -3
  525. data/lib/chemicalml/model/bond_stereo.rb +29 -0
  526. data/lib/chemicalml/model/molecule.rb +13 -6
  527. data/lib/chemicalml/model.rb +2 -0
  528. data/lib/chemicalml/version.rb +1 -1
  529. data/lib/chemicalml/versioned_parser.rb +53 -12
  530. data/lib/chemicalml.rb +3 -1
  531. metadata +476 -40
  532. data/lib/chemicalml/cml/array.rb +0 -10
  533. data/lib/chemicalml/cml/atom.rb +0 -10
  534. data/lib/chemicalml/cml/atom_array.rb +0 -10
  535. data/lib/chemicalml/cml/atom_parity.rb +0 -10
  536. data/lib/chemicalml/cml/bond.rb +0 -10
  537. data/lib/chemicalml/cml/bond_array.rb +0 -10
  538. data/lib/chemicalml/cml/bond_stereo.rb +0 -10
  539. data/lib/chemicalml/cml/cml_module.rb +0 -10
  540. data/lib/chemicalml/cml/dictionary.rb +0 -10
  541. data/lib/chemicalml/cml/dictionary_entry.rb +0 -10
  542. data/lib/chemicalml/cml/document.rb +0 -10
  543. data/lib/chemicalml/cml/formula.rb +0 -10
  544. data/lib/chemicalml/cml/identifier.rb +0 -10
  545. data/lib/chemicalml/cml/label.rb +0 -10
  546. data/lib/chemicalml/cml/list.rb +0 -10
  547. data/lib/chemicalml/cml/matrix.rb +0 -10
  548. data/lib/chemicalml/cml/metadata.rb +0 -10
  549. data/lib/chemicalml/cml/metadata_list.rb +0 -10
  550. data/lib/chemicalml/cml/molecule.rb +0 -10
  551. data/lib/chemicalml/cml/name.rb +0 -10
  552. data/lib/chemicalml/cml/parameter.rb +0 -10
  553. data/lib/chemicalml/cml/parameter_list.rb +0 -10
  554. data/lib/chemicalml/cml/product.rb +0 -10
  555. data/lib/chemicalml/cml/product_list.rb +0 -10
  556. data/lib/chemicalml/cml/property.rb +0 -10
  557. data/lib/chemicalml/cml/property_list.rb +0 -10
  558. data/lib/chemicalml/cml/reactant.rb +0 -10
  559. data/lib/chemicalml/cml/reactant_list.rb +0 -10
  560. data/lib/chemicalml/cml/reaction.rb +0 -10
  561. data/lib/chemicalml/cml/reaction_list.rb +0 -10
  562. data/lib/chemicalml/cml/scalar.rb +0 -10
  563. data/lib/chemicalml/cml/substance.rb +0 -10
  564. data/lib/chemicalml/cml/unit.rb +0 -10
  565. data/lib/chemicalml/cml/unit_list.rb +0 -10
  566. data/lib/chemicalml/cml/unit_type.rb +0 -10
  567. data/lib/chemicalml/cml/unit_type_list.rb +0 -10
  568. data/lib/chemicalml/cml/wire_class_macro.rb +0 -45
@@ -7,49 +7,143 @@ module Chemicalml
7
7
  # Shared attribute + xml-mapping declarations live under `Base::*`
8
8
  # and are included by both schema-versioned class hierarchies.
9
9
  module Cml
10
- autoload :Array, "chemicalml/cml/array"
11
- autoload :Atom, "chemicalml/cml/atom"
12
- autoload :AtomArray, "chemicalml/cml/atom_array"
13
- autoload :AtomParity, "chemicalml/cml/atom_parity"
14
- autoload :Base, "chemicalml/cml/base"
15
- autoload :Bond, "chemicalml/cml/bond"
16
- autoload :BondArray, "chemicalml/cml/bond_array"
17
- autoload :BondStereo, "chemicalml/cml/bond_stereo"
18
- autoload :Dictionary, "chemicalml/cml/dictionary"
19
- autoload :DictionaryEntry, "chemicalml/cml/dictionary_entry"
20
- autoload :Document, "chemicalml/cml/document"
21
- autoload :Elements, "chemicalml/cml/elements"
22
- autoload :Formula, "chemicalml/cml/formula"
23
- autoload :Identifier, "chemicalml/cml/identifier"
24
- autoload :Label, "chemicalml/cml/label"
25
- autoload :List, "chemicalml/cml/list"
26
- autoload :Matrix, "chemicalml/cml/matrix"
27
- autoload :Metadata, "chemicalml/cml/metadata"
28
- autoload :MetadataList, "chemicalml/cml/metadata_list"
29
- autoload :Module, "chemicalml/cml/cml_module"
30
- autoload :Molecule, "chemicalml/cml/molecule"
31
- autoload :Name, "chemicalml/cml/name"
32
- autoload :Namespace, "chemicalml/cml/namespace"
33
- autoload :Parameter, "chemicalml/cml/parameter"
34
- autoload :ParameterList, "chemicalml/cml/parameter_list"
35
- autoload :Product, "chemicalml/cml/product"
36
- autoload :ProductList, "chemicalml/cml/product_list"
37
- autoload :Property, "chemicalml/cml/property"
38
- autoload :PropertyList, "chemicalml/cml/property_list"
39
- autoload :Reaction, "chemicalml/cml/reaction"
40
- autoload :ReactionList, "chemicalml/cml/reaction_list"
41
- autoload :Reactant, "chemicalml/cml/reactant"
42
- autoload :ReactantList, "chemicalml/cml/reactant_list"
43
- autoload :Role, "chemicalml/cml/role"
44
- autoload :Scalar, "chemicalml/cml/scalar"
45
- autoload :Schema3, "chemicalml/cml/schema3"
46
- autoload :Schema24, "chemicalml/cml/schema24"
47
- autoload :Substance, "chemicalml/cml/substance"
48
- autoload :Translator, "chemicalml/cml/translator"
49
- autoload :Unit, "chemicalml/cml/unit"
50
- autoload :UnitList, "chemicalml/cml/unit_list"
51
- autoload :UnitType, "chemicalml/cml/unit_type"
52
- autoload :UnitTypeList, "chemicalml/cml/unit_type_list"
53
- autoload :Visitable, "chemicalml/cml/visitable"
10
+ # Structural modules (each in its own file, loaded independently).
11
+ autoload :Base, "chemicalml/cml/base"
12
+ autoload :ChildMappings, "chemicalml/cml/child_mappings"
13
+ autoload :Elements, "chemicalml/cml/elements"
14
+ autoload :Namespace, "chemicalml/cml/namespace"
15
+ autoload :Role, "chemicalml/cml/role"
16
+ autoload :Schema3, "chemicalml/cml/schema3"
17
+ autoload :Schema24, "chemicalml/cml/schema24"
18
+ autoload :Translator, "chemicalml/cml/translator"
19
+ autoload :Visitable, "chemicalml/cml/visitable"
20
+ autoload :WireClassRegistry, "chemicalml/cml/wire_class_registry"
21
+
22
+ # Backward-compatible aliases (Cml::Foo = Schema3::Foo). All 36
23
+ # aliases load from a single file via autoload the file loads
24
+ # lazily when the first alias is referenced, then defines all of
25
+ # them via const_set (aliasing existing Schema3 classes, not
26
+ # creating new ones).
27
+ autoload :Array, "chemicalml/cml/aliases"
28
+ autoload :Atom, "chemicalml/cml/aliases"
29
+ autoload :AtomArray, "chemicalml/cml/aliases"
30
+ autoload :AtomParity, "chemicalml/cml/aliases"
31
+ autoload :Bond, "chemicalml/cml/aliases"
32
+ autoload :BondArray, "chemicalml/cml/aliases"
33
+ autoload :BondStereo, "chemicalml/cml/aliases"
34
+ autoload :Dictionary, "chemicalml/cml/aliases"
35
+ autoload :DictionaryEntry, "chemicalml/cml/aliases"
36
+ autoload :Document, "chemicalml/cml/aliases"
37
+ autoload :Formula, "chemicalml/cml/aliases"
38
+ autoload :Identifier, "chemicalml/cml/aliases"
39
+ autoload :Label, "chemicalml/cml/aliases"
40
+ autoload :List, "chemicalml/cml/aliases"
41
+ autoload :Matrix, "chemicalml/cml/aliases"
42
+ autoload :Metadata, "chemicalml/cml/aliases"
43
+ autoload :MetadataList, "chemicalml/cml/aliases"
44
+ autoload :Module, "chemicalml/cml/aliases"
45
+ autoload :Molecule, "chemicalml/cml/aliases"
46
+ autoload :Name, "chemicalml/cml/aliases"
47
+ autoload :Parameter, "chemicalml/cml/aliases"
48
+ autoload :ParameterList, "chemicalml/cml/aliases"
49
+ autoload :Product, "chemicalml/cml/aliases"
50
+ autoload :ProductList, "chemicalml/cml/aliases"
51
+ autoload :Property, "chemicalml/cml/aliases"
52
+ autoload :PropertyList, "chemicalml/cml/aliases"
53
+ autoload :Reaction, "chemicalml/cml/aliases"
54
+ autoload :ReactionList, "chemicalml/cml/aliases"
55
+ autoload :Reactant, "chemicalml/cml/aliases"
56
+ autoload :ReactantList, "chemicalml/cml/aliases"
57
+ autoload :Scalar, "chemicalml/cml/aliases"
58
+ autoload :Substance, "chemicalml/cml/aliases"
59
+ autoload :Unit, "chemicalml/cml/aliases"
60
+ autoload :UnitList, "chemicalml/cml/aliases"
61
+ autoload :UnitType, "chemicalml/cml/aliases"
62
+ autoload :UnitTypeList, "chemicalml/cml/aliases"
63
+ autoload :Abundance, "chemicalml/cml/aliases"
64
+ autoload :Action, "chemicalml/cml/aliases"
65
+ autoload :ActionList, "chemicalml/cml/aliases"
66
+ autoload :Amount, "chemicalml/cml/aliases"
67
+ autoload :Angle, "chemicalml/cml/aliases"
68
+ autoload :AnyCml, "chemicalml/cml/aliases"
69
+ autoload :ArrayList, "chemicalml/cml/aliases"
70
+ autoload :AtomSet, "chemicalml/cml/aliases"
71
+ autoload :AtomType, "chemicalml/cml/aliases"
72
+ autoload :AtomTypeList, "chemicalml/cml/aliases"
73
+ autoload :AtomicBasisFunction, "chemicalml/cml/aliases"
74
+ autoload :Band, "chemicalml/cml/aliases"
75
+ autoload :BandList, "chemicalml/cml/aliases"
76
+ autoload :BasisSet, "chemicalml/cml/aliases"
77
+ autoload :BondSet, "chemicalml/cml/aliases"
78
+ autoload :BondType, "chemicalml/cml/aliases"
79
+ autoload :BondTypeList, "chemicalml/cml/aliases"
80
+ autoload :CellParameter, "chemicalml/cml/aliases"
81
+ autoload :ConditionList, "chemicalml/cml/aliases"
82
+ autoload :Crystal, "chemicalml/cml/aliases"
83
+ autoload :Definition, "chemicalml/cml/aliases"
84
+ autoload :Description, "chemicalml/cml/aliases"
85
+ autoload :Dimension, "chemicalml/cml/aliases"
86
+ autoload :Documentation, "chemicalml/cml/aliases"
87
+ autoload :Eigen, "chemicalml/cml/aliases"
88
+ autoload :Electron, "chemicalml/cml/aliases"
89
+ autoload :Fragment, "chemicalml/cml/aliases"
90
+ autoload :FragmentList, "chemicalml/cml/aliases"
91
+ autoload :Gradient, "chemicalml/cml/aliases"
92
+ autoload :Isotope, "chemicalml/cml/aliases"
93
+ autoload :IsotopeList, "chemicalml/cml/aliases"
94
+ autoload :Join, "chemicalml/cml/aliases"
95
+ autoload :Kpoint, "chemicalml/cml/aliases"
96
+ autoload :KpointList, "chemicalml/cml/aliases"
97
+ autoload :Lattice, "chemicalml/cml/aliases"
98
+ autoload :LatticeVector, "chemicalml/cml/aliases"
99
+ autoload :Length, "chemicalml/cml/aliases"
100
+ autoload :Line3, "chemicalml/cml/aliases"
101
+ autoload :Link, "chemicalml/cml/aliases"
102
+ autoload :Map, "chemicalml/cml/aliases"
103
+ autoload :Mechanism, "chemicalml/cml/aliases"
104
+ autoload :MechanismComponent, "chemicalml/cml/aliases"
105
+ autoload :MoleculeList, "chemicalml/cml/aliases"
106
+ autoload :Object, "chemicalml/cml/aliases"
107
+ autoload :Observation, "chemicalml/cml/aliases"
108
+ autoload :Particle, "chemicalml/cml/aliases"
109
+ autoload :Peak, "chemicalml/cml/aliases"
110
+ autoload :PeakGroup, "chemicalml/cml/aliases"
111
+ autoload :PeakList, "chemicalml/cml/aliases"
112
+ autoload :PeakStructure, "chemicalml/cml/aliases"
113
+ autoload :Plane3, "chemicalml/cml/aliases"
114
+ autoload :Point3, "chemicalml/cml/aliases"
115
+ autoload :Potential, "chemicalml/cml/aliases"
116
+ autoload :PotentialForm, "chemicalml/cml/aliases"
117
+ autoload :PotentialList, "chemicalml/cml/aliases"
118
+ autoload :ReactionScheme, "chemicalml/cml/aliases"
119
+ autoload :ReactionStep, "chemicalml/cml/aliases"
120
+ autoload :ReactionStepList, "chemicalml/cml/aliases"
121
+ autoload :ReactiveCentre, "chemicalml/cml/aliases"
122
+ autoload :Region, "chemicalml/cml/aliases"
123
+ autoload :Sample, "chemicalml/cml/aliases"
124
+ autoload :Spectator, "chemicalml/cml/aliases"
125
+ autoload :SpectatorList, "chemicalml/cml/aliases"
126
+ autoload :Spectrum, "chemicalml/cml/aliases"
127
+ autoload :SpectrumData, "chemicalml/cml/aliases"
128
+ autoload :SpectrumList, "chemicalml/cml/aliases"
129
+ autoload :Sphere3, "chemicalml/cml/aliases"
130
+ autoload :Stmml, "chemicalml/cml/aliases"
131
+ autoload :SubstanceList, "chemicalml/cml/aliases"
132
+ autoload :Symmetry, "chemicalml/cml/aliases"
133
+ autoload :System, "chemicalml/cml/aliases"
134
+ autoload :Table, "chemicalml/cml/aliases"
135
+ autoload :TableCell, "chemicalml/cml/aliases"
136
+ autoload :TableContent, "chemicalml/cml/aliases"
137
+ autoload :TableHeader, "chemicalml/cml/aliases"
138
+ autoload :TableHeaderCell, "chemicalml/cml/aliases"
139
+ autoload :TableRow, "chemicalml/cml/aliases"
140
+ autoload :TableRowList, "chemicalml/cml/aliases"
141
+ autoload :Torsion, "chemicalml/cml/aliases"
142
+ autoload :Transform3, "chemicalml/cml/aliases"
143
+ autoload :TransitionState, "chemicalml/cml/aliases"
144
+ autoload :Vector3, "chemicalml/cml/aliases"
145
+ autoload :Xaxis, "chemicalml/cml/aliases"
146
+ autoload :Yaxis, "chemicalml/cml/aliases"
147
+ autoload :ZMatrix, "chemicalml/cml/aliases"
54
148
  end
55
149
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class AtomCoordinatesMustBePaired < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Atom)
10
+
11
+ violations = []
12
+ has_x2 = !node.x2.to_s.empty?
13
+ has_y2 = !node.y2.to_s.empty?
14
+ if has_x2 != has_y2
15
+ violations << violation(path: path.empty? ? "atom" : path.join("/"),
16
+ message: "x2 and y2 must both be present or both absent")
17
+ end
18
+
19
+ has_x3 = !node.x3.to_s.empty?
20
+ has_y3 = !node.y3.to_s.empty?
21
+ has_z3 = !node.z3.to_s.empty?
22
+ if [has_x3, has_y3, has_z3].any? && ![has_x3, has_y3, has_z3].all?
23
+ violations << violation(path: path.empty? ? "atom" : path.join("/"),
24
+ message: "x3, y3, and z3 must all be present together")
25
+ end
26
+ violations
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class AtomIdMustMatchPattern < Chemicalml::Convention::Constraint::NodeConstraint
8
+ ID_PATTERN = /\A[A-Za-z][A-Za-z0-9._\-]*\z/.freeze
9
+
10
+ def check_node(node, path)
11
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Atom)
12
+
13
+ id = node.id.to_s
14
+ return [] if id.empty?
15
+ return [] if id.match?(ID_PATTERN)
16
+
17
+ [violation(path: path.empty? ? "atom" : path.join("/"),
18
+ message: "atom id #{id.inspect} must start with a letter and " \
19
+ "contain only letters, digits, dot, hyphen, or underscore",
20
+ severity: :warning)]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class AtomMustHaveElementType < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Atom)
10
+
11
+ return [] unless node.element_type.to_s.empty?
12
+
13
+ [violation(path: path.empty? ? "atom" : path.join("/"),
14
+ message: "atom must have an elementType attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class AtomMustHaveId < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Atom)
10
+
11
+ return [] unless node.id.to_s.empty?
12
+
13
+ [violation(path: path.empty? ? "atom" : path.join("/"),
14
+ message: "atom must have an id attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class BondMustHaveAtomRefs2 < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Bond)
10
+
11
+ return [] unless node.atom_refs2.to_s.strip.empty?
12
+
13
+ [violation(path: path.empty? ? "bond" : path.join("/"),
14
+ message: "bond must have an atomRefs2 attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class BondMustHaveOrder < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Bond)
10
+
11
+ return [] unless node.order.to_s.strip.empty?
12
+
13
+ [violation(path: path.empty? ? "bond" : path.join("/"),
14
+ message: "bond must have an order attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class BondOrderShouldNotBeNumeric < Chemicalml::Convention::Constraint::NodeConstraint
8
+ VALID_ORDERS = %w[S D T Q A other].freeze
9
+
10
+ def check_node(node, path)
11
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Bond)
12
+
13
+ order = node.order.to_s
14
+ return [] if order.empty?
15
+
16
+ return [] if VALID_ORDERS.include?(order) || node.dict_ref.to_s.size.positive?
17
+
18
+ [violation(path: path.empty? ? "bond" : path.join("/"),
19
+ message: "bond order #{order.inspect} is not recommended " \
20
+ "(use S/D/T/Q/A or 'other' with dictRef)",
21
+ severity: :warning)]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class MoleculeMustHaveId < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Molecule)
10
+
11
+ return [] unless node.id.to_s.empty?
12
+
13
+ [violation(path: path.empty? ? "molecule" : path.join("/"),
14
+ message: "molecule must have an id attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class PropertyMustHaveDictRef < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Property)
10
+
11
+ return [] unless node.dict_ref.to_s.empty?
12
+
13
+ [violation(path: path.empty? ? "property" : path.join("/"),
14
+ message: "property must have a dictRef attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Convention
5
+ module Molecular
6
+ module Constraints
7
+ class ScalarMustHaveDataType < Chemicalml::Convention::Constraint::NodeConstraint
8
+ def check_node(node, path)
9
+ return [] unless node.is_a?(Chemicalml::Cml::Role::Scalar)
10
+
11
+ return [] unless node.data_type.to_s.empty?
12
+
13
+ [violation(path: path.empty? ? "scalar" : path.join("/"),
14
+ message: "scalar must have a dataType attribute")]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,9 +3,6 @@
3
3
  module Chemicalml
4
4
  module Convention
5
5
  module Molecular
6
- # Namespace container for all molecular-convention constraint
7
- # classes. One class per file, registered from the parent
8
- # `molecular.rb`.
9
6
  module Constraints
10
7
  autoload :AtomArrayMustContainAtoms,
11
8
  "chemicalml/convention/molecular/constraints/atom_array_must_contain_atoms"
@@ -13,6 +10,26 @@ module Chemicalml
13
10
  "chemicalml/convention/molecular/constraints/atom_ids_unique_within_molecule"
14
11
  autoload :BondMustReferenceAtomsInSameMolecule,
15
12
  "chemicalml/convention/molecular/constraints/bond_must_reference_atoms_in_same_molecule"
13
+ autoload :AtomMustHaveId,
14
+ "chemicalml/convention/molecular/constraints/atom_must_have_id"
15
+ autoload :AtomMustHaveElementType,
16
+ "chemicalml/convention/molecular/constraints/atom_must_have_element_type"
17
+ autoload :BondMustHaveAtomRefs2,
18
+ "chemicalml/convention/molecular/constraints/bond_must_have_atom_refs2"
19
+ autoload :BondMustHaveOrder,
20
+ "chemicalml/convention/molecular/constraints/bond_must_have_order"
21
+ autoload :MoleculeMustHaveId,
22
+ "chemicalml/convention/molecular/constraints/molecule_must_have_id"
23
+ autoload :AtomCoordinatesMustBePaired,
24
+ "chemicalml/convention/molecular/constraints/atom_coordinates_must_be_paired"
25
+ autoload :PropertyMustHaveDictRef,
26
+ "chemicalml/convention/molecular/constraints/property_must_have_dict_ref"
27
+ autoload :ScalarMustHaveDataType,
28
+ "chemicalml/convention/molecular/constraints/scalar_must_have_data_type"
29
+ autoload :BondOrderShouldNotBeNumeric,
30
+ "chemicalml/convention/molecular/constraints/bond_order_should_not_be_numeric"
31
+ autoload :AtomIdMustMatchPattern,
32
+ "chemicalml/convention/molecular/constraints/atom_id_must_match_pattern"
16
33
  end
17
34
  end
18
35
  end
@@ -24,6 +24,16 @@ module Chemicalml
24
24
  register Constraints::AtomArrayMustContainAtoms
25
25
  register Constraints::AtomIdsUniqueWithinMolecule
26
26
  register Constraints::BondMustReferenceAtomsInSameMolecule
27
+ register Constraints::AtomMustHaveId
28
+ register Constraints::AtomMustHaveElementType
29
+ register Constraints::BondMustHaveAtomRefs2
30
+ register Constraints::BondMustHaveOrder
31
+ register Constraints::MoleculeMustHaveId
32
+ register Constraints::AtomCoordinatesMustBePaired
33
+ register Constraints::PropertyMustHaveDictRef
34
+ register Constraints::ScalarMustHaveDataType
35
+ register Constraints::BondOrderShouldNotBeNumeric
36
+ register Constraints::AtomIdMustMatchPattern
27
37
  end
28
38
  end
29
39
  end
@@ -5,16 +5,24 @@ module Chemicalml
5
5
  # A chemical atom. Carries every attribute CML's `<atom>` carries
6
6
  # that's chemistry-relevant: element symbol, formal charge,
7
7
  # isotope, count (multiplicity), hydrogen count, lone pairs,
8
- # radical electrons, spin multiplicity.
8
+ # radical electrons, spin multiplicity, 2D/3D coordinates,
9
+ # fractional coordinates. Optional `atom_parity` for atom-centre
10
+ # chirality.
9
11
  class Atom < Node
10
12
  attr_accessor :id, :element, :formal_charge, :isotope,
11
13
  :count, :hydrogen_count, :lone_pairs,
12
- :radical_electrons, :spin_multiplicity, :title
14
+ :radical_electrons, :spin_multiplicity, :title,
15
+ :x2, :y2, :x3, :y3, :z3,
16
+ :x_fract, :y_fract, :z_fract,
17
+ :atom_parity
13
18
 
14
19
  def initialize(element:, id: nil, formal_charge: nil,
15
20
  isotope: nil, count: nil, hydrogen_count: nil,
16
21
  lone_pairs: nil, radical_electrons: nil,
17
- spin_multiplicity: nil, title: nil)
22
+ spin_multiplicity: nil, title: nil,
23
+ x2: nil, y2: nil, x3: nil, y3: nil, z3: nil,
24
+ x_fract: nil, y_fract: nil, z_fract: nil,
25
+ atom_parity: nil)
18
26
  @element = element
19
27
  @id = id
20
28
  @formal_charge = formal_charge
@@ -25,6 +33,19 @@ module Chemicalml
25
33
  @radical_electrons = radical_electrons
26
34
  @spin_multiplicity = spin_multiplicity
27
35
  @title = title
36
+ @x2 = x2
37
+ @y2 = y2
38
+ @x3 = x3
39
+ @y3 = y3
40
+ @z3 = z3
41
+ @x_fract = x_fract
42
+ @y_fract = y_fract
43
+ @z_fract = z_fract
44
+ @atom_parity = atom_parity
45
+ end
46
+
47
+ def children
48
+ [atom_parity].compact
28
49
  end
29
50
 
30
51
  def value_attributes
@@ -32,7 +53,10 @@ module Chemicalml
32
53
  element: element, id: id, formal_charge: formal_charge,
33
54
  isotope: isotope, count: count, hydrogen_count: hydrogen_count,
34
55
  lone_pairs: lone_pairs, radical_electrons: radical_electrons,
35
- spin_multiplicity: spin_multiplicity, title: title
56
+ spin_multiplicity: spin_multiplicity, title: title,
57
+ x2: x2, y2: y2, x3: x3, y3: y3, z3: z3,
58
+ x_fract: x_fract, y_fract: y_fract, z_fract: z_fract,
59
+ atom_parity: atom_parity
36
60
  }
37
61
  end
38
62
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Model
5
+ # Atom-centre chirality. CML `<atomParity>` element with
6
+ # `atomRefs4` (four atom IDs in order) and a `value` (typically
7
+ # `"1"`, `"-1"`, or `"0"`).
8
+ class AtomParity < Node
9
+ attr_accessor :atom_refs4, :value
10
+
11
+ def initialize(atom_refs4:, value:)
12
+ @atom_refs4 = atom_refs4
13
+ @value = value
14
+ end
15
+
16
+ def value_attributes
17
+ { atom_refs4: atom_refs4, value: value }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -4,6 +4,7 @@ module Chemicalml
4
4
  module Model
5
5
  # A bond between two atoms. Endpoint references are string IDs
6
6
  # matching `Atom#id`; the kind enum follows CML conventions.
7
+ # Optional `bond_stereo` carries cis/trans/wedge/hatch info.
7
8
  class Bond < Node
8
9
  KINDS = %i[single double triple quadruple aromatic wedge hash
9
10
  dative wavy].freeze
@@ -13,16 +14,21 @@ module Chemicalml
13
14
  aromatic: "A", wedge: "W", hash: "H", dative: "DG", wavy: "V"
14
15
  }.freeze
15
16
 
16
- attr_accessor :id, :atom_refs, :kind
17
+ attr_accessor :id, :atom_refs, :kind, :bond_stereo
17
18
 
18
- def initialize(id: nil, atom_refs:, kind: :single)
19
+ def initialize(id: nil, atom_refs:, kind: :single, bond_stereo: nil)
19
20
  @id = id
20
21
  @atom_refs = atom_refs
21
22
  @kind = kind
23
+ @bond_stereo = bond_stereo
24
+ end
25
+
26
+ def children
27
+ [bond_stereo].compact
22
28
  end
23
29
 
24
30
  def value_attributes
25
- { id: id, atom_refs: atom_refs, kind: kind }
31
+ { id: id, atom_refs: atom_refs, kind: kind, bond_stereo: bond_stereo }
26
32
  end
27
33
 
28
34
  def cml_order
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemicalml
4
+ module Model
5
+ # Bond stereochemistry. CML `<bondStereo>` element. Carries
6
+ # either `atom_refs2` (for `W`/`H` wedge/hatch) or `atom_refs4`
7
+ # (for `C`/`T` cis/trans). The `value` is the convention letter:
8
+ # `W`, `H`, `C`, `T`, or `other` (with a `dict_ref`).
9
+ class BondStereo < Node
10
+ attr_accessor :atom_refs2, :atom_refs4, :dict_ref, :value
11
+
12
+ def initialize(value:, atom_refs2: nil, atom_refs4: nil, dict_ref: nil)
13
+ @value = value
14
+ @atom_refs2 = atom_refs2
15
+ @atom_refs4 = atom_refs4
16
+ @dict_ref = dict_ref
17
+ end
18
+
19
+ def value_attributes
20
+ {
21
+ value: value,
22
+ atom_refs2: atom_refs2,
23
+ atom_refs4: atom_refs4,
24
+ dict_ref: dict_ref
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end