arctrl 3.0.0__py3-none-any.whl

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 (511) hide show
  1. arctrl/__init__.py +23 -0
  2. arctrl/cwl.py +12 -0
  3. arctrl/py/CWL/__init__.py +0 -0
  4. arctrl/py/CWL/cwlprocessing_unit.py +221 -0
  5. arctrl/py/CWL/cwltypes.py +364 -0
  6. arctrl/py/CWL/decode.py +3532 -0
  7. arctrl/py/CWL/encode.py +1905 -0
  8. arctrl/py/CWL/expression_tool_description.py +192 -0
  9. arctrl/py/CWL/hash_helpers.py +60 -0
  10. arctrl/py/CWL/inputs.py +122 -0
  11. arctrl/py/CWL/operation_description.py +169 -0
  12. arctrl/py/CWL/outputs.py +171 -0
  13. arctrl/py/CWL/parameter_reference.py +74 -0
  14. arctrl/py/CWL/requirements.py +350 -0
  15. arctrl/py/CWL/tool_description.py +192 -0
  16. arctrl/py/CWL/workflow_description.py +181 -0
  17. arctrl/py/CWL/workflow_steps.py +354 -0
  18. arctrl/py/Contract/__init__.py +0 -0
  19. arctrl/py/Contract/arc.py +89 -0
  20. arctrl/py/Contract/arc_assay.py +125 -0
  21. arctrl/py/Contract/arc_investigation.py +88 -0
  22. arctrl/py/Contract/arc_run.py +291 -0
  23. arctrl/py/Contract/arc_study.py +126 -0
  24. arctrl/py/Contract/arc_workflow.py +213 -0
  25. arctrl/py/Contract/contract.py +153 -0
  26. arctrl/py/Contract/datamap.py +396 -0
  27. arctrl/py/Contract/git.py +116 -0
  28. arctrl/py/Contract/license.py +58 -0
  29. arctrl/py/Contract/validation_packages_config.py +107 -0
  30. arctrl/py/ContractIO/__init__.py +0 -0
  31. arctrl/py/ContractIO/contract_io.py +350 -0
  32. arctrl/py/ContractIO/file_system_helper.py +264 -0
  33. arctrl/py/Conversion/__init__.py +0 -0
  34. arctrl/py/Conversion/assay.py +151 -0
  35. arctrl/py/Conversion/basic.py +559 -0
  36. arctrl/py/Conversion/column_index.py +91 -0
  37. arctrl/py/Conversion/datamap.py +36 -0
  38. arctrl/py/Conversion/date_time.py +32 -0
  39. arctrl/py/Conversion/investigation.py +171 -0
  40. arctrl/py/Conversion/person.py +148 -0
  41. arctrl/py/Conversion/process.py +828 -0
  42. arctrl/py/Conversion/run.py +367 -0
  43. arctrl/py/Conversion/scholarly_article.py +163 -0
  44. arctrl/py/Conversion/study.py +99 -0
  45. arctrl/py/Conversion/table.py +229 -0
  46. arctrl/py/Conversion/workflow.py +680 -0
  47. arctrl/py/Core/Helper/__init__.py +0 -0
  48. arctrl/py/Core/Helper/collections_.py +512 -0
  49. arctrl/py/Core/Helper/date_time.py +26 -0
  50. arctrl/py/Core/Helper/hash_codes.py +60 -0
  51. arctrl/py/Core/Helper/identifier.py +290 -0
  52. arctrl/py/Core/Helper/orcid.py +42 -0
  53. arctrl/py/Core/Helper/printer.py +13 -0
  54. arctrl/py/Core/Helper/regex.py +554 -0
  55. arctrl/py/Core/Helper/sem_ver.py +71 -0
  56. arctrl/py/Core/Helper/url.py +148 -0
  57. arctrl/py/Core/Process/__init__.py +0 -0
  58. arctrl/py/Core/Process/column_index.py +280 -0
  59. arctrl/py/Core/Process/component.py +200 -0
  60. arctrl/py/Core/Process/factor.py +151 -0
  61. arctrl/py/Core/Process/factor_value.py +182 -0
  62. arctrl/py/Core/Process/material.py +74 -0
  63. arctrl/py/Core/Process/material_attribute.py +95 -0
  64. arctrl/py/Core/Process/material_attribute_value.py +184 -0
  65. arctrl/py/Core/Process/material_type.py +45 -0
  66. arctrl/py/Core/Process/process.py +477 -0
  67. arctrl/py/Core/Process/process_input.py +265 -0
  68. arctrl/py/Core/Process/process_output.py +235 -0
  69. arctrl/py/Core/Process/process_parameter_value.py +200 -0
  70. arctrl/py/Core/Process/process_sequence.py +435 -0
  71. arctrl/py/Core/Process/protocol.py +175 -0
  72. arctrl/py/Core/Process/protocol_parameter.py +98 -0
  73. arctrl/py/Core/Process/sample.py +82 -0
  74. arctrl/py/Core/Process/source.py +62 -0
  75. arctrl/py/Core/Table/__init__.py +0 -0
  76. arctrl/py/Core/Table/arc_table.py +1206 -0
  77. arctrl/py/Core/Table/arc_table_aux.py +1308 -0
  78. arctrl/py/Core/Table/arc_tables.py +574 -0
  79. arctrl/py/Core/Table/composite_cell.py +319 -0
  80. arctrl/py/Core/Table/composite_column.py +73 -0
  81. arctrl/py/Core/Table/composite_header.py +739 -0
  82. arctrl/py/Core/__init__.py +0 -0
  83. arctrl/py/Core/arc_types.py +5312 -0
  84. arctrl/py/Core/comment.py +128 -0
  85. arctrl/py/Core/comment_list.py +127 -0
  86. arctrl/py/Core/conversion.py +1375 -0
  87. arctrl/py/Core/data.py +247 -0
  88. arctrl/py/Core/data_context.py +157 -0
  89. arctrl/py/Core/data_file.py +112 -0
  90. arctrl/py/Core/datamap.py +217 -0
  91. arctrl/py/Core/identifier_setters.py +43 -0
  92. arctrl/py/Core/iproperty_value.py +36 -0
  93. arctrl/py/Core/ontology_annotation.py +298 -0
  94. arctrl/py/Core/ontology_source_reference.py +114 -0
  95. arctrl/py/Core/person.py +259 -0
  96. arctrl/py/Core/publication.py +161 -0
  97. arctrl/py/Core/template.py +231 -0
  98. arctrl/py/Core/templates.py +148 -0
  99. arctrl/py/Core/uri.py +11 -0
  100. arctrl/py/Core/value.py +188 -0
  101. arctrl/py/FileSystem/__init__.py +0 -0
  102. arctrl/py/FileSystem/commit.py +21 -0
  103. arctrl/py/FileSystem/default_gitattributes.py +1 -0
  104. arctrl/py/FileSystem/default_gitignore.py +1 -0
  105. arctrl/py/FileSystem/default_license.py +1 -0
  106. arctrl/py/FileSystem/file_system.py +58 -0
  107. arctrl/py/FileSystem/file_system_tree.py +483 -0
  108. arctrl/py/FileSystem/path.py +266 -0
  109. arctrl/py/Json/Datamap/__init__.py +0 -0
  110. arctrl/py/Json/Datamap/data_context.py +101 -0
  111. arctrl/py/Json/Datamap/datamap.py +53 -0
  112. arctrl/py/Json/Process/__init__.py +0 -0
  113. arctrl/py/Json/Process/assay_materials.py +46 -0
  114. arctrl/py/Json/Process/component.py +125 -0
  115. arctrl/py/Json/Process/factor.py +107 -0
  116. arctrl/py/Json/Process/factor_value.py +101 -0
  117. arctrl/py/Json/Process/material.py +226 -0
  118. arctrl/py/Json/Process/material_attribute.py +79 -0
  119. arctrl/py/Json/Process/material_attribute_value.py +101 -0
  120. arctrl/py/Json/Process/material_type.py +53 -0
  121. arctrl/py/Json/Process/process.py +296 -0
  122. arctrl/py/Json/Process/process_input.py +83 -0
  123. arctrl/py/Json/Process/process_output.py +67 -0
  124. arctrl/py/Json/Process/process_parameter_value.py +81 -0
  125. arctrl/py/Json/Process/protocol.py +354 -0
  126. arctrl/py/Json/Process/protocol_parameter.py +91 -0
  127. arctrl/py/Json/Process/sample.py +277 -0
  128. arctrl/py/Json/Process/source.py +214 -0
  129. arctrl/py/Json/Process/study_materials.py +52 -0
  130. arctrl/py/Json/Process/value.py +56 -0
  131. arctrl/py/Json/ROCrate/__init__.py +0 -0
  132. arctrl/py/Json/ROCrate/ldcontext.py +143 -0
  133. arctrl/py/Json/ROCrate/ldgraph.py +117 -0
  134. arctrl/py/Json/ROCrate/ldnode.py +304 -0
  135. arctrl/py/Json/ROCrate/ldref.py +44 -0
  136. arctrl/py/Json/ROCrate/ldvalue.py +102 -0
  137. arctrl/py/Json/Table/__init__.py +0 -0
  138. arctrl/py/Json/Table/arc_table.py +375 -0
  139. arctrl/py/Json/Table/cell_table.py +83 -0
  140. arctrl/py/Json/Table/composite_cell.py +136 -0
  141. arctrl/py/Json/Table/composite_header.py +67 -0
  142. arctrl/py/Json/Table/iotype.py +24 -0
  143. arctrl/py/Json/Table/oatable.py +82 -0
  144. arctrl/py/Json/Table/templates.py +281 -0
  145. arctrl/py/Json/__init__.py +0 -0
  146. arctrl/py/Json/assay.py +600 -0
  147. arctrl/py/Json/comment.py +206 -0
  148. arctrl/py/Json/context/rocrate/__init__.py +0 -0
  149. arctrl/py/Json/context/rocrate/isa_assay_context.py +101 -0
  150. arctrl/py/Json/context/rocrate/isa_comment_context.py +60 -0
  151. arctrl/py/Json/context/rocrate/isa_component_context.py +77 -0
  152. arctrl/py/Json/context/rocrate/isa_data_context.py +74 -0
  153. arctrl/py/Json/context/rocrate/isa_factor_context.py +74 -0
  154. arctrl/py/Json/context/rocrate/isa_factor_value_context.py +84 -0
  155. arctrl/py/Json/context/rocrate/isa_investigation_context.py +110 -0
  156. arctrl/py/Json/context/rocrate/isa_material_attribute_context.py +64 -0
  157. arctrl/py/Json/context/rocrate/isa_material_attribute_value_context.py +80 -0
  158. arctrl/py/Json/context/rocrate/isa_material_context.py +71 -0
  159. arctrl/py/Json/context/rocrate/isa_ontology_annotation_context.py +68 -0
  160. arctrl/py/Json/context/rocrate/isa_ontology_source_reference_context.py +75 -0
  161. arctrl/py/Json/context/rocrate/isa_organization_context.py +55 -0
  162. arctrl/py/Json/context/rocrate/isa_person_context.py +131 -0
  163. arctrl/py/Json/context/rocrate/isa_process_context.py +94 -0
  164. arctrl/py/Json/context/rocrate/isa_process_parameter_value_context.py +80 -0
  165. arctrl/py/Json/context/rocrate/isa_protocol_context.py +97 -0
  166. arctrl/py/Json/context/rocrate/isa_protocol_parameter_context.py +64 -0
  167. arctrl/py/Json/context/rocrate/isa_publication_context.py +78 -0
  168. arctrl/py/Json/context/rocrate/isa_sample_context.py +65 -0
  169. arctrl/py/Json/context/rocrate/isa_source_context.py +66 -0
  170. arctrl/py/Json/context/rocrate/isa_study_context.py +125 -0
  171. arctrl/py/Json/context/rocrate/property_value_context.py +73 -0
  172. arctrl/py/Json/context/rocrate/rocrate_context.py +81 -0
  173. arctrl/py/Json/converter_options.py +23 -0
  174. arctrl/py/Json/data.py +356 -0
  175. arctrl/py/Json/data_file.py +63 -0
  176. arctrl/py/Json/decode.py +271 -0
  177. arctrl/py/Json/encode.py +140 -0
  178. arctrl/py/Json/idtable.py +44 -0
  179. arctrl/py/Json/investigation.py +695 -0
  180. arctrl/py/Json/ontology_annotation.py +404 -0
  181. arctrl/py/Json/ontology_source_reference.py +255 -0
  182. arctrl/py/Json/person.py +658 -0
  183. arctrl/py/Json/property_value.py +359 -0
  184. arctrl/py/Json/publication.py +279 -0
  185. arctrl/py/Json/run.py +275 -0
  186. arctrl/py/Json/string_table.py +87 -0
  187. arctrl/py/Json/study.py +793 -0
  188. arctrl/py/Json/workflow.py +307 -0
  189. arctrl/py/JsonIO/Process/__init__.py +0 -0
  190. arctrl/py/JsonIO/Process/component.py +60 -0
  191. arctrl/py/JsonIO/Process/factor.py +36 -0
  192. arctrl/py/JsonIO/Process/factor_value.py +38 -0
  193. arctrl/py/JsonIO/Process/material.py +60 -0
  194. arctrl/py/JsonIO/Process/material_attribute.py +38 -0
  195. arctrl/py/JsonIO/Process/material_attribute_value.py +60 -0
  196. arctrl/py/JsonIO/Process/material_type.py +36 -0
  197. arctrl/py/JsonIO/Process/process.py +60 -0
  198. arctrl/py/JsonIO/Process/process_input.py +38 -0
  199. arctrl/py/JsonIO/Process/process_output.py +60 -0
  200. arctrl/py/JsonIO/Process/process_parameter_value.py +60 -0
  201. arctrl/py/JsonIO/Process/process_sequence.py +71 -0
  202. arctrl/py/JsonIO/Process/protocol.py +60 -0
  203. arctrl/py/JsonIO/Process/protocol_parameter.py +36 -0
  204. arctrl/py/JsonIO/Process/sample.py +60 -0
  205. arctrl/py/JsonIO/Process/source.py +60 -0
  206. arctrl/py/JsonIO/Process/study_materials.py +52 -0
  207. arctrl/py/JsonIO/Process/value.py +32 -0
  208. arctrl/py/JsonIO/Table/__init__.py +0 -0
  209. arctrl/py/JsonIO/Table/arc_table.py +103 -0
  210. arctrl/py/JsonIO/Table/composite_cell.py +36 -0
  211. arctrl/py/JsonIO/Table/composite_header.py +36 -0
  212. arctrl/py/JsonIO/Table/compression.py +67 -0
  213. arctrl/py/JsonIO/Table/iotype.py +36 -0
  214. arctrl/py/JsonIO/Table/templates.py +113 -0
  215. arctrl/py/JsonIO/__init__.py +0 -0
  216. arctrl/py/JsonIO/assay.py +113 -0
  217. arctrl/py/JsonIO/comment.py +80 -0
  218. arctrl/py/JsonIO/data.py +60 -0
  219. arctrl/py/JsonIO/data_file.py +58 -0
  220. arctrl/py/JsonIO/datamap.py +36 -0
  221. arctrl/py/JsonIO/decode.py +9 -0
  222. arctrl/py/JsonIO/encode.py +1 -0
  223. arctrl/py/JsonIO/investigation.py +91 -0
  224. arctrl/py/JsonIO/ldobject.py +106 -0
  225. arctrl/py/JsonIO/ontology_annotation.py +80 -0
  226. arctrl/py/JsonIO/ontology_source_reference.py +80 -0
  227. arctrl/py/JsonIO/person.py +82 -0
  228. arctrl/py/JsonIO/publication.py +82 -0
  229. arctrl/py/JsonIO/run.py +68 -0
  230. arctrl/py/JsonIO/study.py +114 -0
  231. arctrl/py/JsonIO/workflow.py +68 -0
  232. arctrl/py/ROCrate/ISAProfile/__init__.py +0 -0
  233. arctrl/py/ROCrate/ISAProfile/assay.py +70 -0
  234. arctrl/py/ROCrate/ISAProfile/data.py +65 -0
  235. arctrl/py/ROCrate/ISAProfile/dataset.py +24 -0
  236. arctrl/py/ROCrate/ISAProfile/investigation.py +73 -0
  237. arctrl/py/ROCrate/ISAProfile/lab_process.py +162 -0
  238. arctrl/py/ROCrate/ISAProfile/lab_protocol.py +37 -0
  239. arctrl/py/ROCrate/ISAProfile/person.py +72 -0
  240. arctrl/py/ROCrate/ISAProfile/property_value.py +98 -0
  241. arctrl/py/ROCrate/ISAProfile/sample.py +64 -0
  242. arctrl/py/ROCrate/ISAProfile/scholarly_article.py +98 -0
  243. arctrl/py/ROCrate/ISAProfile/study.py +74 -0
  244. arctrl/py/ROCrate/LDTypes/__init__.py +0 -0
  245. arctrl/py/ROCrate/LDTypes/comment.py +131 -0
  246. arctrl/py/ROCrate/LDTypes/computational_workflow.py +455 -0
  247. arctrl/py/ROCrate/LDTypes/computer_language.py +269 -0
  248. arctrl/py/ROCrate/LDTypes/create_action.py +303 -0
  249. arctrl/py/ROCrate/LDTypes/creative_work.py +566 -0
  250. arctrl/py/ROCrate/LDTypes/dataset.py +943 -0
  251. arctrl/py/ROCrate/LDTypes/defined_term.py +131 -0
  252. arctrl/py/ROCrate/LDTypes/file.py +281 -0
  253. arctrl/py/ROCrate/LDTypes/formal_parameter.py +431 -0
  254. arctrl/py/ROCrate/LDTypes/lab_process.py +352 -0
  255. arctrl/py/ROCrate/LDTypes/lab_protocol.py +395 -0
  256. arctrl/py/ROCrate/LDTypes/organization.py +83 -0
  257. arctrl/py/ROCrate/LDTypes/person.py +484 -0
  258. arctrl/py/ROCrate/LDTypes/postal_address.py +195 -0
  259. arctrl/py/ROCrate/LDTypes/property_value.py +952 -0
  260. arctrl/py/ROCrate/LDTypes/sample.py +202 -0
  261. arctrl/py/ROCrate/LDTypes/scholarly_article.py +229 -0
  262. arctrl/py/ROCrate/LDTypes/software_source_code.py +310 -0
  263. arctrl/py/ROCrate/LDTypes/workflow_invocation.py +48 -0
  264. arctrl/py/ROCrate/LDTypes/workflow_protocol.py +52 -0
  265. arctrl/py/ROCrate/__init__.py +0 -0
  266. arctrl/py/ROCrate/arc_rocrate_metadata.py +39 -0
  267. arctrl/py/ROCrate/dyn_obj_extensions.py +1 -0
  268. arctrl/py/ROCrate/helper.py +8 -0
  269. arctrl/py/ROCrate/ldcontext.py +406 -0
  270. arctrl/py/ROCrate/ldobject.py +1247 -0
  271. arctrl/py/ROCrate/rocrate_context.py +51 -0
  272. arctrl/py/Spreadsheet/AnnotationTable/__init__.py +0 -0
  273. arctrl/py/Spreadsheet/AnnotationTable/arc_table.py +203 -0
  274. arctrl/py/Spreadsheet/AnnotationTable/composite_cell.py +78 -0
  275. arctrl/py/Spreadsheet/AnnotationTable/composite_column.py +305 -0
  276. arctrl/py/Spreadsheet/AnnotationTable/composite_header.py +623 -0
  277. arctrl/py/Spreadsheet/DatamapTable/__init__.py +0 -0
  278. arctrl/py/Spreadsheet/DatamapTable/datamap_column.py +114 -0
  279. arctrl/py/Spreadsheet/DatamapTable/datamap_header.py +621 -0
  280. arctrl/py/Spreadsheet/DatamapTable/datamap_table.py +118 -0
  281. arctrl/py/Spreadsheet/Metadata/__init__.py +0 -0
  282. arctrl/py/Spreadsheet/Metadata/assays.py +125 -0
  283. arctrl/py/Spreadsheet/Metadata/comment.py +77 -0
  284. arctrl/py/Spreadsheet/Metadata/contacts.py +134 -0
  285. arctrl/py/Spreadsheet/Metadata/conversions.py +190 -0
  286. arctrl/py/Spreadsheet/Metadata/design_descriptors.py +34 -0
  287. arctrl/py/Spreadsheet/Metadata/factors.py +107 -0
  288. arctrl/py/Spreadsheet/Metadata/ontology_annotation.py +88 -0
  289. arctrl/py/Spreadsheet/Metadata/ontology_source_reference.py +96 -0
  290. arctrl/py/Spreadsheet/Metadata/protocols.py +146 -0
  291. arctrl/py/Spreadsheet/Metadata/publication.py +122 -0
  292. arctrl/py/Spreadsheet/Metadata/run.py +122 -0
  293. arctrl/py/Spreadsheet/Metadata/sparse_table.py +499 -0
  294. arctrl/py/Spreadsheet/Metadata/study.py +312 -0
  295. arctrl/py/Spreadsheet/Metadata/workflow.py +159 -0
  296. arctrl/py/Spreadsheet/__init__.py +0 -0
  297. arctrl/py/Spreadsheet/arc_assay.py +233 -0
  298. arctrl/py/Spreadsheet/arc_investigation.py +435 -0
  299. arctrl/py/Spreadsheet/arc_run.py +190 -0
  300. arctrl/py/Spreadsheet/arc_study.py +144 -0
  301. arctrl/py/Spreadsheet/arc_workflow.py +177 -0
  302. arctrl/py/Spreadsheet/assembly_info.py +1 -0
  303. arctrl/py/Spreadsheet/collection_aux.py +167 -0
  304. arctrl/py/Spreadsheet/datamap.py +43 -0
  305. arctrl/py/Spreadsheet/template.py +460 -0
  306. arctrl/py/ValidationPackages/__init__.py +0 -0
  307. arctrl/py/ValidationPackages/validation_package.py +82 -0
  308. arctrl/py/ValidationPackages/validation_packages_config.py +132 -0
  309. arctrl/py/WebRequest/__init__.py +0 -0
  310. arctrl/py/WebRequest/web_request.py +9 -0
  311. arctrl/py/WebRequest/web_request_py.py +135 -0
  312. arctrl/py/WorkflowGraph/__init__.py +0 -0
  313. arctrl/py/WorkflowGraph/adapters.py +141 -0
  314. arctrl/py/WorkflowGraph/build_options.py +45 -0
  315. arctrl/py/WorkflowGraph/builder.py +720 -0
  316. arctrl/py/WorkflowGraph/graph_types.py +260 -0
  317. arctrl/py/WorkflowGraph/query_helpers.py +76 -0
  318. arctrl/py/WorkflowGraph/reference_parsing.py +59 -0
  319. arctrl/py/WorkflowGraph/visualization_siren.py +574 -0
  320. arctrl/py/WorkflowGraph/workflow_graph.py +119 -0
  321. arctrl/py/Yaml/__init__.py +0 -0
  322. arctrl/py/Yaml/decode.py +1 -0
  323. arctrl/py/Yaml/encode.py +10 -0
  324. arctrl/py/Yaml/validation_package.py +77 -0
  325. arctrl/py/Yaml/validation_packages_config.py +86 -0
  326. arctrl/py/__init__.py +0 -0
  327. arctrl/py/arc.py +1891 -0
  328. arctrl/py/column_index.py +280 -0
  329. arctrl/py/conversion.py +142 -0
  330. arctrl/py/cross_async.py +76 -0
  331. arctrl/py/cwlrun_resolver.py +228 -0
  332. arctrl/py/fable_modules/dynamic_obj/__init__.py +0 -0
  333. arctrl/py/fable_modules/dynamic_obj/dyn_obj.py +136 -0
  334. arctrl/py/fable_modules/dynamic_obj/dynamic_obj.py +415 -0
  335. arctrl/py/fable_modules/dynamic_obj/fable_js.py +1 -0
  336. arctrl/py/fable_modules/dynamic_obj/fable_py.py +288 -0
  337. arctrl/py/fable_modules/dynamic_obj/hash_codes.py +82 -0
  338. arctrl/py/fable_modules/dynamic_obj/property_helper.py +25 -0
  339. arctrl/py/fable_modules/dynamic_obj/reflection_utils.py +87 -0
  340. arctrl/py/fable_modules/fable_library/__init__.py +0 -0
  341. arctrl/py/fable_modules/fable_library/array_.py +1528 -0
  342. arctrl/py/fable_modules/fable_library/async_.py +377 -0
  343. arctrl/py/fable_modules/fable_library/async_builder.py +379 -0
  344. arctrl/py/fable_modules/fable_library/big_int.py +330 -0
  345. arctrl/py/fable_modules/fable_library/bit_converter.py +131 -0
  346. arctrl/py/fable_modules/fable_library/boolean.py +26 -0
  347. arctrl/py/fable_modules/fable_library/char.py +237 -0
  348. arctrl/py/fable_modules/fable_library/choice.py +212 -0
  349. arctrl/py/fable_modules/fable_library/date.py +779 -0
  350. arctrl/py/fable_modules/fable_library/date_offset.py +79 -0
  351. arctrl/py/fable_modules/fable_library/decimal_.py +190 -0
  352. arctrl/py/fable_modules/fable_library/diagnostics.py +54 -0
  353. arctrl/py/fable_modules/fable_library/double.py +87 -0
  354. arctrl/py/fable_modules/fable_library/encoding.py +41 -0
  355. arctrl/py/fable_modules/fable_library/event.py +206 -0
  356. arctrl/py/fable_modules/fable_library/file.py +107 -0
  357. arctrl/py/fable_modules/fable_library/fsharp_collections.py +52 -0
  358. arctrl/py/fable_modules/fable_library/fsharp_core.py +123 -0
  359. arctrl/py/fable_modules/fable_library/global_.py +63 -0
  360. arctrl/py/fable_modules/fable_library/guid.py +41 -0
  361. arctrl/py/fable_modules/fable_library/int32.py +73 -0
  362. arctrl/py/fable_modules/fable_library/list.py +1788 -0
  363. arctrl/py/fable_modules/fable_library/long.py +240 -0
  364. arctrl/py/fable_modules/fable_library/mailbox_processor.py +179 -0
  365. arctrl/py/fable_modules/fable_library/map.py +1854 -0
  366. arctrl/py/fable_modules/fable_library/map_util.py +148 -0
  367. arctrl/py/fable_modules/fable_library/mutable_map.py +397 -0
  368. arctrl/py/fable_modules/fable_library/mutable_set.py +279 -0
  369. arctrl/py/fable_modules/fable_library/native.py +45 -0
  370. arctrl/py/fable_modules/fable_library/numeric.py +46 -0
  371. arctrl/py/fable_modules/fable_library/observable.py +222 -0
  372. arctrl/py/fable_modules/fable_library/option.py +128 -0
  373. arctrl/py/fable_modules/fable_library/path.py +62 -0
  374. arctrl/py/fable_modules/fable_library/range.py +117 -0
  375. arctrl/py/fable_modules/fable_library/reflection.py +463 -0
  376. arctrl/py/fable_modules/fable_library/reg_exp.py +137 -0
  377. arctrl/py/fable_modules/fable_library/resize_array.py +31 -0
  378. arctrl/py/fable_modules/fable_library/result.py +212 -0
  379. arctrl/py/fable_modules/fable_library/seq.py +1979 -0
  380. arctrl/py/fable_modules/fable_library/seq2.py +221 -0
  381. arctrl/py/fable_modules/fable_library/set.py +2414 -0
  382. arctrl/py/fable_modules/fable_library/singleton_local_time_zone.py +36 -0
  383. arctrl/py/fable_modules/fable_library/string_.py +573 -0
  384. arctrl/py/fable_modules/fable_library/system_collections_generic.py +462 -0
  385. arctrl/py/fable_modules/fable_library/system_text.py +237 -0
  386. arctrl/py/fable_modules/fable_library/task.py +116 -0
  387. arctrl/py/fable_modules/fable_library/task_builder.py +122 -0
  388. arctrl/py/fable_modules/fable_library/thread.py +5 -0
  389. arctrl/py/fable_modules/fable_library/time_span.py +283 -0
  390. arctrl/py/fable_modules/fable_library/timer.py +24 -0
  391. arctrl/py/fable_modules/fable_library/types.py +401 -0
  392. arctrl/py/fable_modules/fable_library/uri.py +109 -0
  393. arctrl/py/fable_modules/fable_library/util.py +2735 -0
  394. arctrl/py/fable_modules/fable_openpyxl/__init__.py +0 -0
  395. arctrl/py/fable_modules/fable_openpyxl/openpyxl.py +362 -0
  396. arctrl/py/fable_modules/fable_python/cognite-sdk/__init__.py +0 -0
  397. arctrl/py/fable_modules/fable_python/cognite-sdk/cognite_sdk.py +22 -0
  398. arctrl/py/fable_modules/fable_python/flask/__init__.py +0 -0
  399. arctrl/py/fable_modules/fable_python/flask/flask.py +34 -0
  400. arctrl/py/fable_modules/fable_python/jupyter/__init__.py +0 -0
  401. arctrl/py/fable_modules/fable_python/jupyter/ipy_widgets.py +47 -0
  402. arctrl/py/fable_modules/fable_python/jupyter/ipython.py +13 -0
  403. arctrl/py/fable_modules/fable_python/stdlib/__init__.py +0 -0
  404. arctrl/py/fable_modules/fable_python/stdlib/ast.py +1 -0
  405. arctrl/py/fable_modules/fable_python/stdlib/asyncio/__init__.py +0 -0
  406. arctrl/py/fable_modules/fable_python/stdlib/asyncio/events.py +17 -0
  407. arctrl/py/fable_modules/fable_python/stdlib/asyncio/futures.py +52 -0
  408. arctrl/py/fable_modules/fable_python/stdlib/asyncio/tasks.py +38 -0
  409. arctrl/py/fable_modules/fable_python/stdlib/base64_.py +1 -0
  410. arctrl/py/fable_modules/fable_python/stdlib/builtins_.py +38 -0
  411. arctrl/py/fable_modules/fable_python/stdlib/html.py +1 -0
  412. arctrl/py/fable_modules/fable_python/stdlib/json.py +1 -0
  413. arctrl/py/fable_modules/fable_python/stdlib/math_.py +1 -0
  414. arctrl/py/fable_modules/fable_python/stdlib/os_.py +1 -0
  415. arctrl/py/fable_modules/fable_python/stdlib/queue_.py +1 -0
  416. arctrl/py/fable_modules/fable_python/stdlib/string_.py +1 -0
  417. arctrl/py/fable_modules/fable_python/stdlib/sys_.py +30 -0
  418. arctrl/py/fable_modules/fable_python/stdlib/time_.py +1 -0
  419. arctrl/py/fable_modules/fable_python/stdlib/tk_inter.py +1 -0
  420. arctrl/py/fable_modules/fs_spreadsheet/Cells/__init__.py +0 -0
  421. arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cell.py +340 -0
  422. arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cells_collection.py +466 -0
  423. arctrl/py/fable_modules/fs_spreadsheet/DSL/__init__.py +0 -0
  424. arctrl/py/fable_modules/fs_spreadsheet/DSL/cell_builder.py +214 -0
  425. arctrl/py/fable_modules/fs_spreadsheet/DSL/column_builder.py +139 -0
  426. arctrl/py/fable_modules/fs_spreadsheet/DSL/dsl.py +50 -0
  427. arctrl/py/fable_modules/fs_spreadsheet/DSL/expression.py +65 -0
  428. arctrl/py/fable_modules/fs_spreadsheet/DSL/operators.py +9 -0
  429. arctrl/py/fable_modules/fs_spreadsheet/DSL/row_builder.py +139 -0
  430. arctrl/py/fable_modules/fs_spreadsheet/DSL/sheet_builder.py +118 -0
  431. arctrl/py/fable_modules/fs_spreadsheet/DSL/table_builder.py +122 -0
  432. arctrl/py/fable_modules/fs_spreadsheet/DSL/transform.py +463 -0
  433. arctrl/py/fable_modules/fs_spreadsheet/DSL/types.py +314 -0
  434. arctrl/py/fable_modules/fs_spreadsheet/DSL/workbook_builder.py +106 -0
  435. arctrl/py/fable_modules/fs_spreadsheet/Json/__init__.py +0 -0
  436. arctrl/py/fable_modules/fs_spreadsheet/Json/cell.py +103 -0
  437. arctrl/py/fable_modules/fs_spreadsheet/Json/column.py +70 -0
  438. arctrl/py/fable_modules/fs_spreadsheet/Json/row.py +70 -0
  439. arctrl/py/fable_modules/fs_spreadsheet/Json/table.py +54 -0
  440. arctrl/py/fable_modules/fs_spreadsheet/Json/value.py +93 -0
  441. arctrl/py/fable_modules/fs_spreadsheet/Json/workbook.py +71 -0
  442. arctrl/py/fable_modules/fs_spreadsheet/Json/worksheet.py +216 -0
  443. arctrl/py/fable_modules/fs_spreadsheet/Ranges/__init__.py +0 -0
  444. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range.py +43 -0
  445. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_address.py +190 -0
  446. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_base.py +92 -0
  447. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_column.py +77 -0
  448. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_row.py +48 -0
  449. arctrl/py/fable_modules/fs_spreadsheet/Tables/__init__.py +0 -0
  450. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table.py +461 -0
  451. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_field.py +117 -0
  452. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_row.py +23 -0
  453. arctrl/py/fable_modules/fs_spreadsheet/__init__.py +0 -0
  454. arctrl/py/fable_modules/fs_spreadsheet/fs_address.py +236 -0
  455. arctrl/py/fable_modules/fs_spreadsheet/fs_column.py +172 -0
  456. arctrl/py/fable_modules/fs_spreadsheet/fs_row.py +183 -0
  457. arctrl/py/fable_modules/fs_spreadsheet/fs_workbook.py +192 -0
  458. arctrl/py/fable_modules/fs_spreadsheet/fs_worksheet.py +610 -0
  459. arctrl/py/fable_modules/fs_spreadsheet/hash_codes.py +60 -0
  460. arctrl/py/fable_modules/fs_spreadsheet/sheet_builder.py +329 -0
  461. arctrl/py/fable_modules/fs_spreadsheet_py/__init__.py +0 -0
  462. arctrl/py/fable_modules/fs_spreadsheet_py/cell.py +60 -0
  463. arctrl/py/fable_modules/fs_spreadsheet_py/cell_type.py +50 -0
  464. arctrl/py/fable_modules/fs_spreadsheet_py/fs_extension.py +60 -0
  465. arctrl/py/fable_modules/fs_spreadsheet_py/json.py +47 -0
  466. arctrl/py/fable_modules/fs_spreadsheet_py/table.py +54 -0
  467. arctrl/py/fable_modules/fs_spreadsheet_py/workbook.py +41 -0
  468. arctrl/py/fable_modules/fs_spreadsheet_py/worksheet.py +52 -0
  469. arctrl/py/fable_modules/fs_spreadsheet_py/xlsx.py +37 -0
  470. arctrl/py/fable_modules/siren/__init__.py +0 -0
  471. arctrl/py/fable_modules/siren/config.py +1038 -0
  472. arctrl/py/fable_modules/siren/formatting.py +1121 -0
  473. arctrl/py/fable_modules/siren/siren.py +1941 -0
  474. arctrl/py/fable_modules/siren/siren_types.py +1229 -0
  475. arctrl/py/fable_modules/siren/theme_variables.py +517 -0
  476. arctrl/py/fable_modules/siren/util.py +37 -0
  477. arctrl/py/fable_modules/siren/yaml.py +101 -0
  478. arctrl/py/fable_modules/thoth_json_core/__init__.py +0 -0
  479. arctrl/py/fable_modules/thoth_json_core/decode.py +1614 -0
  480. arctrl/py/fable_modules/thoth_json_core/encode.py +305 -0
  481. arctrl/py/fable_modules/thoth_json_core/types.py +181 -0
  482. arctrl/py/fable_modules/thoth_json_python/__init__.py +0 -0
  483. arctrl/py/fable_modules/thoth_json_python/decode.py +112 -0
  484. arctrl/py/fable_modules/thoth_json_python/encode.py +72 -0
  485. arctrl/py/fable_modules/thoth_json_python/python.py +1 -0
  486. arctrl/py/fable_modules/yamlicious/Interop/__init__.py +0 -0
  487. arctrl/py/fable_modules/yamlicious/Interop/js_interop.py +1 -0
  488. arctrl/py/fable_modules/yamlicious/Interop/py_interop.py +7 -0
  489. arctrl/py/fable_modules/yamlicious/__init__.py +0 -0
  490. arctrl/py/fable_modules/yamlicious/decode.py +1784 -0
  491. arctrl/py/fable_modules/yamlicious/encode.py +84 -0
  492. arctrl/py/fable_modules/yamlicious/flow_to_block.py +994 -0
  493. arctrl/py/fable_modules/yamlicious/library.py +10 -0
  494. arctrl/py/fable_modules/yamlicious/persil.py +57 -0
  495. arctrl/py/fable_modules/yamlicious/preprocessing.py +99 -0
  496. arctrl/py/fable_modules/yamlicious/reader.py +739 -0
  497. arctrl/py/fable_modules/yamlicious/regex.py +29 -0
  498. arctrl/py/fable_modules/yamlicious/regex_active_patterns.py +265 -0
  499. arctrl/py/fable_modules/yamlicious/writer.py +175 -0
  500. arctrl/py/fable_modules/yamlicious/yamlicious_types.py +128 -0
  501. arctrl/py/json.py +389 -0
  502. arctrl/py/license.py +169 -0
  503. arctrl/py/rocrate_io.py +242 -0
  504. arctrl/py/template_web.py +23 -0
  505. arctrl/py/xlsx.py +212 -0
  506. arctrl/py/yaml.py +79 -0
  507. arctrl/rocrate.py +21 -0
  508. arctrl-3.0.0.dist-info/METADATA +157 -0
  509. arctrl-3.0.0.dist-info/RECORD +511 -0
  510. arctrl-3.0.0.dist-info/WHEEL +4 -0
  511. arctrl-3.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,118 @@
1
+ from __future__ import annotations
2
+ from typing import Any
3
+ from ...fable_modules.fable_library.list import (of_array, FSharpList, exists, iterate, length, head, iterate_indexed)
4
+ from ...fable_modules.fable_library.map_util import add_to_dict
5
+ from ...fable_modules.fable_library.range import range_big_int
6
+ from ...fable_modules.fable_library.seq import (try_find, item, to_array, delay, map, to_list)
7
+ from ...fable_modules.fable_library.string_ import (starts_with_exact, to_fail, printf)
8
+ from ...fable_modules.fable_library.types import Array
9
+ from ...fable_modules.fable_library.util import (IEnumerable_1, ignore)
10
+ from ...fable_modules.fs_spreadsheet.Cells.fs_cell import FsCell
11
+ from ...fable_modules.fs_spreadsheet.Cells.fs_cells_collection import Dictionary_tryGet
12
+ from ...fable_modules.fs_spreadsheet.fs_address import FsAddress
13
+ from ...fable_modules.fs_spreadsheet.fs_column import FsColumn
14
+ from ...fable_modules.fs_spreadsheet.fs_worksheet import FsWorksheet
15
+ from ...fable_modules.fs_spreadsheet.Ranges.fs_range_address import FsRangeAddress
16
+ from ...fable_modules.fs_spreadsheet.Tables.fs_table import FsTable
17
+ from ...Core.data_context import (DataContext__ctor_Z780A8A2A, DataContext)
18
+ from ...Core.datamap import Datamap
19
+ from ..AnnotationTable.arc_table import Aux_List_groupWhen
20
+ from .datamap_column import (set_from_fs_columns, to_fs_columns)
21
+
22
+ helper_column_strings: FSharpList[str] = of_array(["Term Source REF", "Term Accession Number", "Data Format", "Data Selector Format"])
23
+
24
+ def group_columns_by_header(columns: FSharpList[FsColumn]) -> FSharpList[FSharpList[FsColumn]]:
25
+ def f(c: FsColumn, columns: Any=columns) -> bool:
26
+ v: str = c.Item(1).ValueAsString()
27
+ def predicate(s: str, c: Any=c) -> bool:
28
+ return starts_with_exact(v, s)
29
+
30
+ return not exists(predicate, helper_column_strings)
31
+
32
+ return Aux_List_groupWhen(f, columns)
33
+
34
+
35
+ def try_datamap_table(sheet: FsWorksheet) -> FsTable | None:
36
+ def predicate(t: FsTable, sheet: Any=sheet) -> bool:
37
+ return starts_with_exact(t.Name, "datamapTable")
38
+
39
+ return try_find(predicate, sheet.Tables)
40
+
41
+
42
+ def compose_columns(columns: IEnumerable_1[FsColumn]) -> Array[DataContext]:
43
+ l: int = (item(0, columns).MaxRowIndex - 1) or 0
44
+ def _arrow2000(__unit: None=None, columns: Any=columns) -> IEnumerable_1[DataContext]:
45
+ def _arrow1999(i: int) -> DataContext:
46
+ return DataContext__ctor_Z780A8A2A()
47
+
48
+ return map(_arrow1999, range_big_int(0, 1, l - 1))
49
+
50
+ dc: Array[DataContext] = list(to_array(delay(_arrow2000)))
51
+ def action(arg: FSharpList[FsColumn], columns: Any=columns) -> None:
52
+ ignore(set_from_fs_columns(dc, arg))
53
+
54
+ iterate(action, group_columns_by_header(to_list(columns)))
55
+ return dc
56
+
57
+
58
+ def try_from_fs_worksheet(sheet: FsWorksheet) -> Datamap | None:
59
+ try:
60
+ match_value: FsTable | None = try_datamap_table(sheet)
61
+ if match_value is None:
62
+ return None
63
+
64
+ else:
65
+ t: FsTable = match_value
66
+ return Datamap(compose_columns(t.GetColumns(sheet.CellCollection)))
67
+
68
+
69
+ except Exception as err:
70
+ arg: str = sheet.Name
71
+ arg_1: str = str(err)
72
+ return to_fail(printf("Could not parse datamap table with name \"%s\":\n%s"))(arg)(arg_1)
73
+
74
+
75
+
76
+ def to_fs_worksheet(table: Datamap) -> FsWorksheet:
77
+ string_count: Any = dict([])
78
+ ws: FsWorksheet = FsWorksheet("isa_datamap")
79
+ if len(table.DataContexts) == 0:
80
+ return ws
81
+
82
+ else:
83
+ columns: FSharpList[FSharpList[FsCell]] = to_fs_columns(table.DataContexts)
84
+ max_row: int = length(head(columns)) or 0
85
+ max_col: int = length(columns) or 0
86
+ fs_table: FsTable = ws.Table("datamapTable", FsRangeAddress(FsAddress(1, 1), FsAddress(max_row, max_col)))
87
+ def action_1(col_i: int, col: FSharpList[FsCell], table: Any=table) -> None:
88
+ def action(row_i: int, cell: FsCell, col_i: Any=col_i, col: Any=col) -> None:
89
+ value: str
90
+ v: str = cell.ValueAsString()
91
+ if row_i == 0:
92
+ match_value: str | None = Dictionary_tryGet(v, string_count)
93
+ if match_value is None:
94
+ add_to_dict(string_count, cell.ValueAsString(), "")
95
+ value = v
96
+
97
+ else:
98
+ spaces: str = match_value
99
+ string_count[v] = spaces + " "
100
+ value = (v + " ") + spaces
101
+
102
+
103
+ else:
104
+ value = v
105
+
106
+ address: FsAddress = FsAddress(row_i + 1, col_i + 1)
107
+ fs_table.Cell(address, ws.CellCollection).SetValueAs(value)
108
+
109
+ iterate_indexed(action, col)
110
+
111
+ iterate_indexed(action_1, columns)
112
+ ws.RescanRows()
113
+ return ws
114
+
115
+
116
+
117
+ __all__ = ["helper_column_strings", "group_columns_by_header", "try_datamap_table", "compose_columns", "try_from_fs_worksheet", "to_fs_worksheet"]
118
+
File without changes
@@ -0,0 +1,125 @@
1
+ from __future__ import annotations
2
+ from collections.abc import Callable
3
+ from typing import Any
4
+ from ...fable_modules.fable_library.list import (of_array, FSharpList, length, singleton, initialize, map as map_1, empty, iterate_indexed, cons, reverse)
5
+ from ...fable_modules.fable_library.map_util import add_to_dict
6
+ from ...fable_modules.fable_library.option import (map, default_arg)
7
+ from ...fable_modules.fable_library.seq2 import List_distinct
8
+ from ...fable_modules.fable_library.string_ import starts_with_exact
9
+ from ...fable_modules.fable_library.types import Array
10
+ from ...fable_modules.fable_library.util import (string_hash, IEnumerable_1, IEnumerator)
11
+ from ...Core.arc_types import ArcAssay
12
+ from ...Core.comment import (Comment, Remark)
13
+ from ...Core.conversion import (JsonTypes_decomposeTechnologyPlatform, JsonTypes_composeTechnologyPlatform)
14
+ from ...Core.Helper.collections_ import (Option_fromValueWithDefault, ResizeArray_iter)
15
+ from ...Core.Helper.identifier import (create_missing_identifier, Assay_tryIdentifierFromFileName, remove_missing_identifier, Assay_fileNameFromIdentifier)
16
+ from ...Core.ontology_annotation import OntologyAnnotation
17
+ from .comment import (Comment_fromString, Comment_toString)
18
+ from .sparse_table import (SparseTable_GetEmptyComments_3ECCA699, SparseTable__TryGetValueDefault_5BAE6133, SparseTable__TryGetValue_11FD62A8, SparseTable, SparseTable_Create_Z2192E64B, SparseTable_FromRows_Z5579EC29, SparseTable_ToRows_759CAFC1)
19
+
20
+ labels: FSharpList[str] = of_array(["Identifier", "Title", "Description", "Measurement Type", "Measurement Type Term Accession Number", "Measurement Type Term Source REF", "Technology Type", "Technology Type Term Accession Number", "Technology Type Term Source REF", "Technology Platform", "File Name"])
21
+
22
+ def from_string(identifier: str | None, title: str | None, description: str | None, measurement_type: str | None, measurement_type_term_source_ref: str | None, measurement_type_term_accession_number: str | None, technology_type: str | None, technology_type_term_source_ref: str | None, technology_type_term_accession_number: str | None, technology_platform: str | None, file_name: str | None, comments: Array[Comment]) -> ArcAssay:
23
+ measurement_type_1: OntologyAnnotation = OntologyAnnotation.create(measurement_type, measurement_type_term_source_ref, measurement_type_term_accession_number)
24
+ technology_type_1: OntologyAnnotation = OntologyAnnotation.create(technology_type, technology_type_term_source_ref, technology_type_term_accession_number)
25
+ identifier_4: str
26
+ if identifier is None:
27
+ if file_name is None:
28
+ identifier_4 = create_missing_identifier()
29
+
30
+ else:
31
+ match_value: str | None = Assay_tryIdentifierFromFileName(file_name)
32
+ identifier_4 = match_value if (match_value is not None) else create_missing_identifier()
33
+
34
+
35
+ else:
36
+ identifier_4 = identifier
37
+
38
+ measurement_type_2: OntologyAnnotation | None = Option_fromValueWithDefault(OntologyAnnotation(), measurement_type_1)
39
+ technology_type_2: OntologyAnnotation | None = Option_fromValueWithDefault(OntologyAnnotation(), technology_type_1)
40
+ def _arrow1831(name: str, identifier: Any=identifier, title: Any=title, description: Any=description, measurement_type: Any=measurement_type, measurement_type_term_source_ref: Any=measurement_type_term_source_ref, measurement_type_term_accession_number: Any=measurement_type_term_accession_number, technology_type: Any=technology_type, technology_type_term_source_ref: Any=technology_type_term_source_ref, technology_type_term_accession_number: Any=technology_type_term_accession_number, technology_platform: Any=technology_platform, file_name: Any=file_name, comments: Any=comments) -> OntologyAnnotation:
41
+ return JsonTypes_decomposeTechnologyPlatform(name)
42
+
43
+ technology_platform_1: OntologyAnnotation | None = map(_arrow1831, technology_platform)
44
+ return ArcAssay.make(identifier_4, title, description, measurement_type_2, technology_type_2, technology_platform_1, [], None, [], comments)
45
+
46
+
47
+ def from_sparse_table(matrix: SparseTable) -> FSharpList[ArcAssay]:
48
+ if (length(matrix.CommentKeys) != 0) if (matrix.ColumnCount == 0) else False:
49
+ comments: Array[Comment] = SparseTable_GetEmptyComments_3ECCA699(matrix)
50
+ return singleton(ArcAssay.create(create_missing_identifier(), None, None, None, None, None, None, None, None, comments))
51
+
52
+ else:
53
+ def _arrow1832(i: int, matrix: Any=matrix) -> ArcAssay:
54
+ def mapping(k: str) -> Comment:
55
+ return Comment_fromString(k, SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (k, i)))
56
+
57
+ comments_1: Array[Comment] = list(map_1(mapping, matrix.CommentKeys))
58
+ return from_string(SparseTable__TryGetValue_11FD62A8(matrix, ("Identifier", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Title", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Description", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Measurement Type", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Measurement Type Term Source REF", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Measurement Type Term Accession Number", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Technology Type", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Technology Type Term Source REF", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Technology Type Term Accession Number", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("Technology Platform", i)), SparseTable__TryGetValue_11FD62A8(matrix, ("File Name", i)), comments_1)
59
+
60
+ return initialize(matrix.ColumnCount, _arrow1832)
61
+
62
+
63
+
64
+ def to_sparse_table(assays: FSharpList[ArcAssay]) -> SparseTable:
65
+ matrix: SparseTable = SparseTable_Create_Z2192E64B(None, labels, None, length(assays) + 1)
66
+ comment_keys: FSharpList[str] = empty()
67
+ def action(i: int, a: ArcAssay, assays: Any=assays) -> None:
68
+ processed_file_name: str = remove_missing_identifier(a.Identifier) if starts_with_exact(a.Identifier, "MISSING_IDENTIFIER_") else Assay_fileNameFromIdentifier(a.Identifier)
69
+ i_1: int = (i + 1) or 0
70
+ mt_1: dict[str, Any]
71
+ mt: OntologyAnnotation = default_arg(a.MeasurementType, OntologyAnnotation())
72
+ mt_1 = OntologyAnnotation.to_string_object(mt, True)
73
+ tt_1: dict[str, Any]
74
+ tt: OntologyAnnotation = default_arg(a.TechnologyType, OntologyAnnotation())
75
+ tt_1 = OntologyAnnotation.to_string_object(tt, True)
76
+ add_to_dict(matrix.Matrix, ("Identifier", i_1), remove_missing_identifier(a.Identifier))
77
+ add_to_dict(matrix.Matrix, ("Title", i_1), default_arg(a.Title, ""))
78
+ add_to_dict(matrix.Matrix, ("Description", i_1), default_arg(a.Description, ""))
79
+ add_to_dict(matrix.Matrix, ("Measurement Type", i_1), mt_1["TermName"])
80
+ add_to_dict(matrix.Matrix, ("Measurement Type Term Accession Number", i_1), mt_1["TermAccessionNumber"])
81
+ add_to_dict(matrix.Matrix, ("Measurement Type Term Source REF", i_1), mt_1["TermSourceREF"])
82
+ add_to_dict(matrix.Matrix, ("Technology Type", i_1), tt_1["TermName"])
83
+ add_to_dict(matrix.Matrix, ("Technology Type Term Accession Number", i_1), tt_1["TermAccessionNumber"])
84
+ add_to_dict(matrix.Matrix, ("Technology Type Term Source REF", i_1), tt_1["TermSourceREF"])
85
+ def mapping(tp: OntologyAnnotation, i: Any=i, a: Any=a) -> str:
86
+ return JsonTypes_composeTechnologyPlatform(tp)
87
+
88
+ add_to_dict(matrix.Matrix, ("Technology Platform", i_1), default_arg(map(mapping, a.TechnologyPlatform), ""))
89
+ add_to_dict(matrix.Matrix, ("File Name", i_1), processed_file_name)
90
+ def f(comment: Comment, i: Any=i, a: Any=a) -> None:
91
+ nonlocal comment_keys
92
+ pattern_input: tuple[str, str] = Comment_toString(comment)
93
+ n: str = pattern_input[0]
94
+ comment_keys = cons(n, comment_keys)
95
+ add_to_dict(matrix.Matrix, (n, i_1), pattern_input[1])
96
+
97
+ ResizeArray_iter(f, a.Comments)
98
+
99
+ iterate_indexed(action, assays)
100
+ class ObjectExpr1834:
101
+ @property
102
+ def Equals(self) -> Callable[[str, str], bool]:
103
+ def _arrow1833(x: str, y: str) -> bool:
104
+ return x == y
105
+
106
+ return _arrow1833
107
+
108
+ @property
109
+ def GetHashCode(self) -> Callable[[str], int]:
110
+ return string_hash
111
+
112
+ return SparseTable(matrix.Matrix, matrix.Keys, reverse(List_distinct(comment_keys, ObjectExpr1834())), matrix.ColumnCount)
113
+
114
+
115
+ def from_rows(prefix: str | None, line_number: int, rows: IEnumerator[IEnumerable_1[tuple[int, str]]]) -> tuple[str | None, int, FSharpList[Remark], FSharpList[ArcAssay]]:
116
+ tupled_arg: tuple[str | None, int, FSharpList[Remark], SparseTable] = SparseTable_FromRows_Z5579EC29(rows, labels, line_number, prefix)
117
+ return (tupled_arg[0], tupled_arg[1], tupled_arg[2], from_sparse_table(tupled_arg[3]))
118
+
119
+
120
+ def to_rows(prefix: str | None, assays: FSharpList[ArcAssay]) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
121
+ return SparseTable_ToRows_759CAFC1(to_sparse_table(assays), prefix)
122
+
123
+
124
+ __all__ = ["labels", "from_string", "from_sparse_table", "to_sparse_table", "from_rows", "to_rows"]
125
+
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+ from typing import Any
3
+ from ...fable_modules.fable_library.option import (default_arg, bind)
4
+ from ...fable_modules.fable_library.reg_exp import (get_item, groups)
5
+ from ...fable_modules.fable_library.string_ import (to_text, printf)
6
+ from ...Core.comment import Comment
7
+ from ...Core.Helper.regex import ActivePatterns__007CRegex_007C__007C
8
+ from .conversions import Option_fromValueWithDefault
9
+
10
+ Comment_commentValueKey: str = "commentValue"
11
+
12
+ Comment_commentPattern: str = ("Comment\\s*\\[<(?<" + Comment_commentValueKey) + ">.+)>\\]"
13
+
14
+ Comment_commentPatternNoAngleBrackets: str = ("Comment\\s*\\[(?<" + Comment_commentValueKey) + ">.+)\\]"
15
+
16
+ def Comment__007CComment_007C__007C(key: str) -> str | None:
17
+ active_pattern_result: Any | None = ActivePatterns__007CRegex_007C__007C(Comment_commentPattern, key)
18
+ if active_pattern_result is not None:
19
+ r: Any = active_pattern_result
20
+ return get_item(groups(r), Comment_commentValueKey) or ""
21
+
22
+ else:
23
+ active_pattern_result_1: Any | None = ActivePatterns__007CRegex_007C__007C(Comment_commentPatternNoAngleBrackets, key)
24
+ if active_pattern_result_1 is not None:
25
+ r_1: Any = active_pattern_result_1
26
+ v: str = get_item(groups(r_1), Comment_commentValueKey) or ""
27
+ if v == "<>":
28
+ return None
29
+
30
+ else:
31
+ return v
32
+
33
+
34
+ else:
35
+ return None
36
+
37
+
38
+
39
+
40
+ def Comment_wrapCommentKey(k: str) -> str:
41
+ return to_text(printf("Comment[%s]"))(k)
42
+
43
+
44
+ def Comment_fromString(k: str, v: str) -> Comment:
45
+ name: str | None = Option_fromValueWithDefault("", k)
46
+ value: str | None = Option_fromValueWithDefault("", v)
47
+ return Comment.make(name, value)
48
+
49
+
50
+ def Comment_toString(c: Comment) -> tuple[str, str]:
51
+ return (default_arg(c.Name, ""), default_arg(c.Value, ""))
52
+
53
+
54
+ Remark_remarkValueKey: str = "remarkValue"
55
+
56
+ Remark_remarkPattern: str = ("#(?<" + Remark_remarkValueKey) + ">.+)"
57
+
58
+ def Remark__007CRemark_007C__007C(key: str | None=None) -> str | None:
59
+ def binder(k: str, key: Any=key) -> str | None:
60
+ active_pattern_result: Any | None = ActivePatterns__007CRegex_007C__007C(Remark_remarkPattern, k)
61
+ if active_pattern_result is not None:
62
+ r: Any = active_pattern_result
63
+ return get_item(groups(r), Remark_remarkValueKey) or ""
64
+
65
+ else:
66
+ return None
67
+
68
+
69
+ return bind(binder, key)
70
+
71
+
72
+ def Remark_wrapRemark(r: str) -> str:
73
+ return to_text(printf("#%s"))(r)
74
+
75
+
76
+ __all__ = ["Comment_commentValueKey", "Comment_commentPattern", "Comment_commentPatternNoAngleBrackets", "Comment__007CComment_007C__007C", "Comment_wrapCommentKey", "Comment_fromString", "Comment_toString", "Remark_remarkValueKey", "Remark_remarkPattern", "Remark__007CRemark_007C__007C", "Remark_wrapRemark"]
77
+
@@ -0,0 +1,134 @@
1
+ from __future__ import annotations
2
+ from collections.abc import Callable
3
+ from typing import Any
4
+ from ...fable_modules.fable_library.list import (of_array, FSharpList, length, singleton, initialize, map, empty, iterate_indexed, cons, reverse)
5
+ from ...fable_modules.fable_library.map_util import add_to_dict
6
+ from ...fable_modules.fable_library.option import default_arg
7
+ from ...fable_modules.fable_library.seq2 import List_distinct
8
+ from ...fable_modules.fable_library.types import Array
9
+ from ...fable_modules.fable_library.util import (string_hash, IEnumerable_1, IEnumerator)
10
+ from ...Core.comment import (Comment, Remark)
11
+ from ...Core.conversion import (Person_setOrcidFromComments, Person_setCommentFromORCID)
12
+ from ...Core.Helper.collections_ import ResizeArray_iter
13
+ from ...Core.ontology_annotation import OntologyAnnotation
14
+ from ...Core.person import Person
15
+ from .comment import (Comment_fromString, Comment_toString)
16
+ from .conversions import (OntologyAnnotation_fromAggregatedStrings, OntologyAnnotation_toAggregatedStrings)
17
+ from .sparse_table import (SparseTable_GetEmptyComments_3ECCA699, SparseTable__TryGetValueDefault_5BAE6133, SparseTable__TryGetValue_11FD62A8, SparseTable, SparseTable_Create_Z2192E64B, SparseTable_FromRows_Z5579EC29, SparseTable_ToRows_759CAFC1)
18
+
19
+ last_name_label: str = "Last Name"
20
+
21
+ first_name_label: str = "First Name"
22
+
23
+ mid_initials_label: str = "Mid Initials"
24
+
25
+ email_label: str = "Email"
26
+
27
+ phone_label: str = "Phone"
28
+
29
+ fax_label: str = "Fax"
30
+
31
+ address_label: str = "Address"
32
+
33
+ affiliation_label: str = "Affiliation"
34
+
35
+ roles_label: str = "Roles"
36
+
37
+ roles_term_accession_number_label: str = "Roles Term Accession Number"
38
+
39
+ roles_term_source_reflabel: str = "Roles Term Source REF"
40
+
41
+ labels: FSharpList[str] = of_array([last_name_label, first_name_label, mid_initials_label, email_label, phone_label, fax_label, address_label, affiliation_label, roles_label, roles_term_accession_number_label, roles_term_source_reflabel])
42
+
43
+ def from_string(last_name: str | None, first_name: str | None, mid_initials: str | None, email: str | None, phone: str | None, fax: str | None, address: str | None, affiliation: str | None, role: str, roles_term_accession_number: str, roles_term_source_ref: str, comments: Array[Comment]) -> Person:
44
+ def _arrow1791(__unit: None=None, last_name: Any=last_name, first_name: Any=first_name, mid_initials: Any=mid_initials, email: Any=email, phone: Any=phone, fax: Any=fax, address: Any=address, affiliation: Any=affiliation, role: Any=role, roles_term_accession_number: Any=roles_term_accession_number, roles_term_source_ref: Any=roles_term_source_ref, comments: Any=comments) -> Person:
45
+ roles_1: Array[OntologyAnnotation] = OntologyAnnotation_fromAggregatedStrings(";", role, roles_term_source_ref, roles_term_accession_number)
46
+ return Person.make(None, last_name, first_name, mid_initials, email, phone, fax, address, affiliation, roles_1, comments)
47
+
48
+ return Person_setOrcidFromComments(_arrow1791())
49
+
50
+
51
+ def from_sparse_table(matrix: SparseTable) -> FSharpList[Person]:
52
+ if (length(matrix.CommentKeys) != 0) if (matrix.ColumnCount == 0) else False:
53
+ comments: Array[Comment] = SparseTable_GetEmptyComments_3ECCA699(matrix)
54
+ def _arrow1792(__unit: None=None, matrix: Any=matrix) -> Person:
55
+ return_val: Person = Person.create()
56
+ return_val.Comments = comments
57
+ return return_val
58
+
59
+ return singleton(_arrow1792())
60
+
61
+ else:
62
+ def _arrow1797(i: int, matrix: Any=matrix) -> Person:
63
+ def mapping(k: str) -> Comment:
64
+ return Comment_fromString(k, SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (k, i)))
65
+
66
+ comments_1: Array[Comment] = list(map(mapping, matrix.CommentKeys))
67
+ return from_string(SparseTable__TryGetValue_11FD62A8(matrix, (last_name_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (first_name_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (mid_initials_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (email_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (phone_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (fax_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (address_label, i)), SparseTable__TryGetValue_11FD62A8(matrix, (affiliation_label, i)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (roles_label, i)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (roles_term_accession_number_label, i)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (roles_term_source_reflabel, i)), comments_1)
68
+
69
+ return initialize(matrix.ColumnCount, _arrow1797)
70
+
71
+
72
+
73
+ def to_sparse_table(persons: FSharpList[Person]) -> SparseTable:
74
+ matrix: SparseTable = SparseTable_Create_Z2192E64B(None, labels, None, length(persons) + 1)
75
+ comment_keys: FSharpList[str] = empty()
76
+ def action(i: int, p: Person, persons: Any=persons) -> None:
77
+ i_1: int = (i + 1) or 0
78
+ r_agg: dict[str, Any] = OntologyAnnotation_toAggregatedStrings(";", list(p.Roles))
79
+ add_to_dict(matrix.Matrix, (last_name_label, i_1), default_arg(p.LastName, ""))
80
+ add_to_dict(matrix.Matrix, (first_name_label, i_1), default_arg(p.FirstName, ""))
81
+ add_to_dict(matrix.Matrix, (mid_initials_label, i_1), default_arg(p.MidInitials, ""))
82
+ add_to_dict(matrix.Matrix, (email_label, i_1), default_arg(p.EMail, ""))
83
+ add_to_dict(matrix.Matrix, (phone_label, i_1), default_arg(p.Phone, ""))
84
+ add_to_dict(matrix.Matrix, (fax_label, i_1), default_arg(p.Fax, ""))
85
+ add_to_dict(matrix.Matrix, (address_label, i_1), default_arg(p.Address, ""))
86
+ add_to_dict(matrix.Matrix, (affiliation_label, i_1), default_arg(p.Affiliation, ""))
87
+ add_to_dict(matrix.Matrix, (roles_label, i_1), r_agg["TermNameAgg"])
88
+ add_to_dict(matrix.Matrix, (roles_term_accession_number_label, i_1), r_agg["TermAccessionNumberAgg"])
89
+ add_to_dict(matrix.Matrix, (roles_term_source_reflabel, i_1), r_agg["TermSourceREFAgg"])
90
+ def f(comment: Comment, i: Any=i, p: Any=p) -> None:
91
+ nonlocal comment_keys
92
+ pattern_input: tuple[str, str] = Comment_toString(comment)
93
+ n: str = pattern_input[0]
94
+ comment_keys = cons(n, comment_keys)
95
+ add_to_dict(matrix.Matrix, (n, i_1), pattern_input[1])
96
+
97
+ ResizeArray_iter(f, p.Comments)
98
+
99
+ def mapping(person: Person, persons: Any=persons) -> Person:
100
+ return Person_setCommentFromORCID(person)
101
+
102
+ iterate_indexed(action, map(mapping, persons))
103
+ class ObjectExpr1799:
104
+ @property
105
+ def Equals(self) -> Callable[[str, str], bool]:
106
+ def _arrow1798(x: str, y: str) -> bool:
107
+ return x == y
108
+
109
+ return _arrow1798
110
+
111
+ @property
112
+ def GetHashCode(self) -> Callable[[str], int]:
113
+ return string_hash
114
+
115
+ return SparseTable(matrix.Matrix, matrix.Keys, reverse(List_distinct(comment_keys, ObjectExpr1799())), matrix.ColumnCount)
116
+
117
+
118
+ def from_rows(prefix: str | None, line_number: int, rows: IEnumerator[IEnumerable_1[tuple[int, str]]]) -> tuple[str | None, int, FSharpList[Remark], FSharpList[Person]]:
119
+ tupled_arg: tuple[str | None, int, FSharpList[Remark], SparseTable] = SparseTable_FromRows_Z5579EC29(rows, labels, line_number, prefix)
120
+ return (tupled_arg[0], tupled_arg[1], tupled_arg[2], from_sparse_table(tupled_arg[3]))
121
+
122
+
123
+ def to_rows(prefix: str | None, persons: FSharpList[Person]) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
124
+ m: SparseTable = to_sparse_table(persons)
125
+ if prefix is None:
126
+ return SparseTable_ToRows_759CAFC1(m)
127
+
128
+ else:
129
+ return SparseTable_ToRows_759CAFC1(m, prefix)
130
+
131
+
132
+
133
+ __all__ = ["last_name_label", "first_name_label", "mid_initials_label", "email_label", "phone_label", "fax_label", "address_label", "affiliation_label", "roles_label", "roles_term_accession_number_label", "roles_term_source_reflabel", "labels", "from_string", "from_sparse_table", "to_sparse_table", "from_rows", "to_rows"]
134
+
@@ -0,0 +1,190 @@
1
+ from __future__ import annotations
2
+ from collections.abc import Callable
3
+ from typing import (Any, TypeVar)
4
+ from ...fable_modules.fable_library.array_ import (fold, map3, fill, equals_with)
5
+ from ...fable_modules.fable_library.list import (empty, of_array, FSharpList, fold as fold_1, map)
6
+ from ...fable_modules.fable_library.option import (some, value, default_arg)
7
+ from ...fable_modules.fable_library.string_ import (to_fail, printf, to_text)
8
+ from ...fable_modules.fable_library.types import Array
9
+ from ...fable_modules.fable_library.util import equals
10
+ from ...Core.Helper.collections_ import ResizeArray_map
11
+ from ...Core.ontology_annotation import OntologyAnnotation
12
+ from ...Core.Process.component import (Component_fromISAString_7C9A7CF8, Component, Component_toStringObject_Z685B8F25)
13
+ from ...Core.Process.protocol_parameter import ProtocolParameter
14
+ from ..collection_aux import Array_map4
15
+
16
+ _T = TypeVar("_T")
17
+
18
+ def Option_fromValueWithDefault(d: Any, v: Any) -> Any | None:
19
+ if equals(d, v):
20
+ return None
21
+
22
+ else:
23
+ return some(v)
24
+
25
+
26
+
27
+ def Option_mapDefault(d: Any, f: Callable[[_T], _T], o: Any | None=None) -> Any | None:
28
+ return Option_fromValueWithDefault(d, f(d) if (o is None) else f(value(o)))
29
+
30
+
31
+ def OntologyAnnotation_getLengthOfAggregatedStrings(separator: str, strings: Array[str]) -> int:
32
+ def folder(l: int, s: str, separator: Any=separator, strings: Any=strings) -> int:
33
+ if s == "":
34
+ return l
35
+
36
+ elif l == 0:
37
+ return len(s.split(separator))
38
+
39
+ elif l == len(s.split(separator)):
40
+ return l
41
+
42
+ else:
43
+ return to_fail(printf("The length of the aggregated string %s does not match the length of the others"))(s)
44
+
45
+
46
+ return fold(folder, 0, strings)
47
+
48
+
49
+ def OntologyAnnotation_fromAggregatedStrings(separator: str, terms: str, source: str, accessions: str) -> Array[OntologyAnnotation]:
50
+ l: int = OntologyAnnotation_getLengthOfAggregatedStrings(separator, [terms, source, accessions]) or 0
51
+ if l == 0:
52
+ return []
53
+
54
+ else:
55
+ def _arrow1593(a: str, b: str, c: str, separator: Any=separator, terms: Any=terms, source: Any=source, accessions: Any=accessions) -> OntologyAnnotation:
56
+ return OntologyAnnotation.create(a, b, c)
57
+
58
+ return list(map3(_arrow1593, fill([0] * l, 0, l, "") if (terms == "") else terms.split(separator), fill([0] * l, 0, l, "") if (source == "") else source.split(separator), fill([0] * l, 0, l, "") if (accessions == "") else accessions.split(separator), None))
59
+
60
+
61
+
62
+ def OntologyAnnotation_toAggregatedStrings(separator: str, oas: Array[OntologyAnnotation]) -> dict[str, Any]:
63
+ first: bool = True
64
+ def _arrow1594(x: OntologyAnnotation, y: OntologyAnnotation, separator: Any=separator, oas: Any=oas) -> bool:
65
+ return equals(x, y)
66
+
67
+ if equals_with(_arrow1594, oas, []):
68
+ return {
69
+ "TermAccessionNumberAgg": "",
70
+ "TermNameAgg": "",
71
+ "TermSourceREFAgg": ""
72
+ }
73
+
74
+ else:
75
+ def folder(tupled_arg: tuple[str, str, str], term: OntologyAnnotation, separator: Any=separator, oas: Any=oas) -> tuple[str, str, str]:
76
+ nonlocal first
77
+ match_value: str = default_arg(term.Name, "")
78
+ tsr: str = default_arg(term.TermSourceREF, "")
79
+ tan: str = default_arg(term.TermAccessionNumber, "")
80
+ name: str = match_value
81
+ if first:
82
+ first = False
83
+ return (name, tsr, tan)
84
+
85
+ else:
86
+ return (to_text(printf("%s%c%s"))(tupled_arg[0])(separator)(name), to_text(printf("%s%c%s"))(tupled_arg[1])(separator)(tsr), to_text(printf("%s%c%s"))(tupled_arg[2])(separator)(tan))
87
+
88
+
89
+ tupled_arg_1: tuple[str, str, str] = fold(folder, ("", "", ""), oas)
90
+ return {
91
+ "TermAccessionNumberAgg": tupled_arg_1[2],
92
+ "TermNameAgg": tupled_arg_1[0],
93
+ "TermSourceREFAgg": tupled_arg_1[1]
94
+ }
95
+
96
+
97
+
98
+ def Component_fromAggregatedStrings(separator: str, names: str, terms: str, source: str, accessions: str) -> FSharpList[Component]:
99
+ l: int = OntologyAnnotation_getLengthOfAggregatedStrings(separator, [names, terms, source, accessions]) or 0
100
+ if l == 0:
101
+ return empty()
102
+
103
+ else:
104
+ def _arrow1595(a: str, b: str, c: str, d: str, separator: Any=separator, names: Any=names, terms: Any=terms, source: Any=source, accessions: Any=accessions) -> Component:
105
+ return Component_fromISAString_7C9A7CF8(a, b, c, d)
106
+
107
+ return of_array(Array_map4(_arrow1595, fill([0] * l, 0, l, "") if (names == "") else names.split(separator), fill([0] * l, 0, l, "") if (terms == "") else terms.split(separator), fill([0] * l, 0, l, "") if (source == "") else source.split(separator), fill([0] * l, 0, l, "") if (accessions == "") else accessions.split(separator)))
108
+
109
+
110
+
111
+ def Component_toAggregatedStrings(separator: str, cs: FSharpList[Component]) -> dict[str, Any]:
112
+ first: bool = True
113
+ if equals(cs, empty()):
114
+ return {
115
+ "NameAgg": "",
116
+ "TermAccessionNumberAgg": "",
117
+ "TermNameAgg": "",
118
+ "TermSourceREFAgg": ""
119
+ }
120
+
121
+ else:
122
+ def folder(tupled_arg: tuple[str, str, str, str], tupled_arg_1: tuple[str, dict[str, Any]], separator: Any=separator, cs: Any=cs) -> tuple[str, str, str, str]:
123
+ nonlocal first
124
+ name: str = tupled_arg_1[0]
125
+ term: dict[str, Any] = tupled_arg_1[1]
126
+ if first:
127
+ first = False
128
+ return (name, term["TermName"], term["TermSourceREF"], term["TermAccessionNumber"])
129
+
130
+ else:
131
+ return (to_text(printf("%s%c%s"))(tupled_arg[0])(separator)(name), to_text(printf("%s%c%s"))(tupled_arg[1])(separator)(term["TermName"]), to_text(printf("%s%c%s"))(tupled_arg[2])(separator)(term["TermSourceREF"]), to_text(printf("%s%c%s"))(tupled_arg[3])(separator)(term["TermAccessionNumber"]))
132
+
133
+
134
+ def mapping(c: Component, separator: Any=separator, cs: Any=cs) -> tuple[str, dict[str, Any]]:
135
+ return Component_toStringObject_Z685B8F25(c)
136
+
137
+ tupled_arg_2: tuple[str, str, str, str] = fold_1(folder, ("", "", "", ""), map(mapping, cs))
138
+ return {
139
+ "NameAgg": tupled_arg_2[0],
140
+ "TermAccessionNumberAgg": tupled_arg_2[3],
141
+ "TermNameAgg": tupled_arg_2[1],
142
+ "TermSourceREFAgg": tupled_arg_2[2]
143
+ }
144
+
145
+
146
+
147
+ def ProtocolParameter_fromAggregatedStrings(separator: str, terms: str, source: str, accessions: str) -> Array[ProtocolParameter]:
148
+ def f(arg: OntologyAnnotation, separator: Any=separator, terms: Any=terms, source: Any=source, accessions: Any=accessions) -> ProtocolParameter:
149
+ def f2(parameter_name: OntologyAnnotation | None=None, arg: Any=arg) -> ProtocolParameter:
150
+ return ProtocolParameter.make(None, parameter_name)
151
+
152
+ return f2(arg)
153
+
154
+ return ResizeArray_map(f, OntologyAnnotation_fromAggregatedStrings(separator, terms, source, accessions))
155
+
156
+
157
+ def ProtocolParameter_toAggregatedStrings(separator: str, oas: FSharpList[ProtocolParameter]) -> dict[str, Any]:
158
+ first: bool = True
159
+ if equals(oas, empty()):
160
+ return {
161
+ "TermAccessionNumberAgg": "",
162
+ "TermNameAgg": "",
163
+ "TermSourceREFAgg": ""
164
+ }
165
+
166
+ else:
167
+ def folder(tupled_arg: tuple[str, str, str], term: dict[str, Any], separator: Any=separator, oas: Any=oas) -> tuple[str, str, str]:
168
+ nonlocal first
169
+ if first:
170
+ first = False
171
+ return (term["TermName"], term["TermSourceREF"], term["TermAccessionNumber"])
172
+
173
+ else:
174
+ return (to_text(printf("%s%c%s"))(tupled_arg[0])(separator)(term["TermName"]), to_text(printf("%s%c%s"))(tupled_arg[1])(separator)(term["TermSourceREF"]), to_text(printf("%s%c%s"))(tupled_arg[2])(separator)(term["TermAccessionNumber"]))
175
+
176
+
177
+ def mapping(pp: ProtocolParameter, separator: Any=separator, oas: Any=oas) -> dict[str, Any]:
178
+ return ProtocolParameter.to_string_object(pp)
179
+
180
+ tupled_arg_1: tuple[str, str, str] = fold_1(folder, ("", "", ""), map(mapping, oas))
181
+ return {
182
+ "TermAccessionNumberAgg": tupled_arg_1[2],
183
+ "TermNameAgg": tupled_arg_1[0],
184
+ "TermSourceREFAgg": tupled_arg_1[1]
185
+ }
186
+
187
+
188
+
189
+ __all__ = ["Option_fromValueWithDefault", "Option_mapDefault", "OntologyAnnotation_getLengthOfAggregatedStrings", "OntologyAnnotation_fromAggregatedStrings", "OntologyAnnotation_toAggregatedStrings", "Component_fromAggregatedStrings", "Component_toAggregatedStrings", "ProtocolParameter_fromAggregatedStrings", "ProtocolParameter_toAggregatedStrings"]
190
+