arctrl 3.0.0a3__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 (456) hide show
  1. arctrl/__init__.py +18 -0
  2. arctrl/py/CWL/__init__.py +0 -0
  3. arctrl/py/CWL/cwltypes.py +150 -0
  4. arctrl/py/CWL/decode.py +973 -0
  5. arctrl/py/CWL/encode.py +1 -0
  6. arctrl/py/CWL/inputs.py +88 -0
  7. arctrl/py/CWL/outputs.py +85 -0
  8. arctrl/py/CWL/requirements.py +77 -0
  9. arctrl/py/CWL/tool_description.py +103 -0
  10. arctrl/py/CWL/workflow_description.py +104 -0
  11. arctrl/py/CWL/workflow_steps.py +113 -0
  12. arctrl/py/Contract/__init__.py +0 -0
  13. arctrl/py/Contract/arc.py +60 -0
  14. arctrl/py/Contract/arc_assay.py +125 -0
  15. arctrl/py/Contract/arc_investigation.py +88 -0
  16. arctrl/py/Contract/arc_run.py +125 -0
  17. arctrl/py/Contract/arc_study.py +126 -0
  18. arctrl/py/Contract/arc_workflow.py +125 -0
  19. arctrl/py/Contract/contract.py +153 -0
  20. arctrl/py/Contract/datamap.py +372 -0
  21. arctrl/py/Contract/git.py +118 -0
  22. arctrl/py/Contract/validation_packages_config.py +107 -0
  23. arctrl/py/ContractIO/__init__.py +0 -0
  24. arctrl/py/ContractIO/contract_io.py +344 -0
  25. arctrl/py/ContractIO/file_system_helper.py +264 -0
  26. arctrl/py/Core/Helper/__init__.py +0 -0
  27. arctrl/py/Core/Helper/collections_.py +438 -0
  28. arctrl/py/Core/Helper/date_time.py +26 -0
  29. arctrl/py/Core/Helper/hash_codes.py +60 -0
  30. arctrl/py/Core/Helper/identifier.py +248 -0
  31. arctrl/py/Core/Helper/orcid.py +42 -0
  32. arctrl/py/Core/Helper/printer.py +13 -0
  33. arctrl/py/Core/Helper/regex.py +554 -0
  34. arctrl/py/Core/Helper/sem_ver.py +71 -0
  35. arctrl/py/Core/Helper/url.py +148 -0
  36. arctrl/py/Core/Process/__init__.py +0 -0
  37. arctrl/py/Core/Process/column_index.py +280 -0
  38. arctrl/py/Core/Process/component.py +200 -0
  39. arctrl/py/Core/Process/factor.py +151 -0
  40. arctrl/py/Core/Process/factor_value.py +182 -0
  41. arctrl/py/Core/Process/material.py +74 -0
  42. arctrl/py/Core/Process/material_attribute.py +95 -0
  43. arctrl/py/Core/Process/material_attribute_value.py +184 -0
  44. arctrl/py/Core/Process/material_type.py +45 -0
  45. arctrl/py/Core/Process/process.py +477 -0
  46. arctrl/py/Core/Process/process_input.py +265 -0
  47. arctrl/py/Core/Process/process_output.py +235 -0
  48. arctrl/py/Core/Process/process_parameter_value.py +200 -0
  49. arctrl/py/Core/Process/process_sequence.py +435 -0
  50. arctrl/py/Core/Process/protocol.py +175 -0
  51. arctrl/py/Core/Process/protocol_parameter.py +98 -0
  52. arctrl/py/Core/Process/sample.py +82 -0
  53. arctrl/py/Core/Process/source.py +62 -0
  54. arctrl/py/Core/Table/__init__.py +0 -0
  55. arctrl/py/Core/Table/arc_table.py +1264 -0
  56. arctrl/py/Core/Table/arc_table_aux.py +575 -0
  57. arctrl/py/Core/Table/arc_tables.py +591 -0
  58. arctrl/py/Core/Table/composite_cell.py +319 -0
  59. arctrl/py/Core/Table/composite_column.py +73 -0
  60. arctrl/py/Core/Table/composite_header.py +739 -0
  61. arctrl/py/Core/__init__.py +0 -0
  62. arctrl/py/Core/arc_types.py +5064 -0
  63. arctrl/py/Core/comment.py +128 -0
  64. arctrl/py/Core/comment_list.py +127 -0
  65. arctrl/py/Core/conversion.py +1313 -0
  66. arctrl/py/Core/data.py +245 -0
  67. arctrl/py/Core/data_context.py +157 -0
  68. arctrl/py/Core/data_file.py +112 -0
  69. arctrl/py/Core/data_map.py +225 -0
  70. arctrl/py/Core/identifier_setters.py +31 -0
  71. arctrl/py/Core/iproperty_value.py +36 -0
  72. arctrl/py/Core/ontology_annotation.py +299 -0
  73. arctrl/py/Core/ontology_source_reference.py +114 -0
  74. arctrl/py/Core/person.py +259 -0
  75. arctrl/py/Core/publication.py +161 -0
  76. arctrl/py/Core/template.py +231 -0
  77. arctrl/py/Core/templates.py +148 -0
  78. arctrl/py/Core/uri.py +11 -0
  79. arctrl/py/Core/value.py +188 -0
  80. arctrl/py/FileSystem/__init__.py +0 -0
  81. arctrl/py/FileSystem/commit.py +21 -0
  82. arctrl/py/FileSystem/default_gitattributes.py +5 -0
  83. arctrl/py/FileSystem/default_gitignore.py +5 -0
  84. arctrl/py/FileSystem/file_system.py +58 -0
  85. arctrl/py/FileSystem/file_system_tree.py +426 -0
  86. arctrl/py/FileSystem/path.py +64 -0
  87. arctrl/py/Json/DataMap/__init__.py +0 -0
  88. arctrl/py/Json/DataMap/data_context.py +101 -0
  89. arctrl/py/Json/DataMap/data_map.py +53 -0
  90. arctrl/py/Json/Process/__init__.py +0 -0
  91. arctrl/py/Json/Process/assay_materials.py +46 -0
  92. arctrl/py/Json/Process/component.py +79 -0
  93. arctrl/py/Json/Process/factor.py +107 -0
  94. arctrl/py/Json/Process/factor_value.py +101 -0
  95. arctrl/py/Json/Process/material.py +226 -0
  96. arctrl/py/Json/Process/material_attribute.py +79 -0
  97. arctrl/py/Json/Process/material_attribute_value.py +101 -0
  98. arctrl/py/Json/Process/material_type.py +53 -0
  99. arctrl/py/Json/Process/process.py +296 -0
  100. arctrl/py/Json/Process/process_input.py +83 -0
  101. arctrl/py/Json/Process/process_output.py +67 -0
  102. arctrl/py/Json/Process/process_parameter_value.py +81 -0
  103. arctrl/py/Json/Process/protocol.py +354 -0
  104. arctrl/py/Json/Process/protocol_parameter.py +79 -0
  105. arctrl/py/Json/Process/sample.py +277 -0
  106. arctrl/py/Json/Process/source.py +214 -0
  107. arctrl/py/Json/Process/study_materials.py +52 -0
  108. arctrl/py/Json/Process/value.py +56 -0
  109. arctrl/py/Json/ROCrate/__init__.py +0 -0
  110. arctrl/py/Json/ROCrate/ldcontext.py +133 -0
  111. arctrl/py/Json/ROCrate/ldgraph.py +111 -0
  112. arctrl/py/Json/ROCrate/ldnode.py +290 -0
  113. arctrl/py/Json/ROCrate/ldref.py +44 -0
  114. arctrl/py/Json/ROCrate/ldvalue.py +102 -0
  115. arctrl/py/Json/Table/__init__.py +0 -0
  116. arctrl/py/Json/Table/arc_table.py +393 -0
  117. arctrl/py/Json/Table/cell_table.py +83 -0
  118. arctrl/py/Json/Table/composite_cell.py +136 -0
  119. arctrl/py/Json/Table/composite_header.py +67 -0
  120. arctrl/py/Json/Table/iotype.py +24 -0
  121. arctrl/py/Json/Table/oatable.py +82 -0
  122. arctrl/py/Json/Table/templates.py +281 -0
  123. arctrl/py/Json/__init__.py +0 -0
  124. arctrl/py/Json/assay.py +600 -0
  125. arctrl/py/Json/comment.py +206 -0
  126. arctrl/py/Json/context/rocrate/__init__.py +0 -0
  127. arctrl/py/Json/context/rocrate/isa_assay_context.py +101 -0
  128. arctrl/py/Json/context/rocrate/isa_comment_context.py +60 -0
  129. arctrl/py/Json/context/rocrate/isa_component_context.py +77 -0
  130. arctrl/py/Json/context/rocrate/isa_data_context.py +74 -0
  131. arctrl/py/Json/context/rocrate/isa_factor_context.py +74 -0
  132. arctrl/py/Json/context/rocrate/isa_factor_value_context.py +84 -0
  133. arctrl/py/Json/context/rocrate/isa_investigation_context.py +110 -0
  134. arctrl/py/Json/context/rocrate/isa_material_attribute_context.py +64 -0
  135. arctrl/py/Json/context/rocrate/isa_material_attribute_value_context.py +80 -0
  136. arctrl/py/Json/context/rocrate/isa_material_context.py +71 -0
  137. arctrl/py/Json/context/rocrate/isa_ontology_annotation_context.py +68 -0
  138. arctrl/py/Json/context/rocrate/isa_ontology_source_reference_context.py +75 -0
  139. arctrl/py/Json/context/rocrate/isa_organization_context.py +55 -0
  140. arctrl/py/Json/context/rocrate/isa_person_context.py +131 -0
  141. arctrl/py/Json/context/rocrate/isa_process_context.py +94 -0
  142. arctrl/py/Json/context/rocrate/isa_process_parameter_value_context.py +80 -0
  143. arctrl/py/Json/context/rocrate/isa_protocol_context.py +97 -0
  144. arctrl/py/Json/context/rocrate/isa_protocol_parameter_context.py +64 -0
  145. arctrl/py/Json/context/rocrate/isa_publication_context.py +78 -0
  146. arctrl/py/Json/context/rocrate/isa_sample_context.py +65 -0
  147. arctrl/py/Json/context/rocrate/isa_source_context.py +66 -0
  148. arctrl/py/Json/context/rocrate/isa_study_context.py +125 -0
  149. arctrl/py/Json/context/rocrate/property_value_context.py +73 -0
  150. arctrl/py/Json/context/rocrate/rocrate_context.py +81 -0
  151. arctrl/py/Json/converter_options.py +23 -0
  152. arctrl/py/Json/data.py +356 -0
  153. arctrl/py/Json/data_file.py +63 -0
  154. arctrl/py/Json/decode.py +155 -0
  155. arctrl/py/Json/encode.py +92 -0
  156. arctrl/py/Json/idtable.py +44 -0
  157. arctrl/py/Json/investigation.py +695 -0
  158. arctrl/py/Json/ontology_annotation.py +404 -0
  159. arctrl/py/Json/ontology_source_reference.py +255 -0
  160. arctrl/py/Json/person.py +658 -0
  161. arctrl/py/Json/property_value.py +359 -0
  162. arctrl/py/Json/publication.py +279 -0
  163. arctrl/py/Json/string_table.py +76 -0
  164. arctrl/py/Json/study.py +793 -0
  165. arctrl/py/JsonIO/DataMap/__init__.py +0 -0
  166. arctrl/py/JsonIO/DataMap/data_map.py +53 -0
  167. arctrl/py/JsonIO/Process/__init__.py +0 -0
  168. arctrl/py/JsonIO/Process/component.py +60 -0
  169. arctrl/py/JsonIO/Process/factor.py +36 -0
  170. arctrl/py/JsonIO/Process/factor_value.py +38 -0
  171. arctrl/py/JsonIO/Process/material.py +60 -0
  172. arctrl/py/JsonIO/Process/material_attribute.py +38 -0
  173. arctrl/py/JsonIO/Process/material_attribute_value.py +60 -0
  174. arctrl/py/JsonIO/Process/material_type.py +36 -0
  175. arctrl/py/JsonIO/Process/process.py +60 -0
  176. arctrl/py/JsonIO/Process/process_input.py +38 -0
  177. arctrl/py/JsonIO/Process/process_output.py +60 -0
  178. arctrl/py/JsonIO/Process/process_parameter_value.py +60 -0
  179. arctrl/py/JsonIO/Process/process_sequence.py +71 -0
  180. arctrl/py/JsonIO/Process/protocol.py +60 -0
  181. arctrl/py/JsonIO/Process/protocol_parameter.py +36 -0
  182. arctrl/py/JsonIO/Process/sample.py +60 -0
  183. arctrl/py/JsonIO/Process/source.py +60 -0
  184. arctrl/py/JsonIO/Process/study_materials.py +52 -0
  185. arctrl/py/JsonIO/Process/value.py +32 -0
  186. arctrl/py/JsonIO/Table/__init__.py +0 -0
  187. arctrl/py/JsonIO/Table/arc_table.py +121 -0
  188. arctrl/py/JsonIO/Table/composite_cell.py +36 -0
  189. arctrl/py/JsonIO/Table/composite_header.py +36 -0
  190. arctrl/py/JsonIO/Table/compression.py +85 -0
  191. arctrl/py/JsonIO/Table/iotype.py +36 -0
  192. arctrl/py/JsonIO/Table/templates.py +113 -0
  193. arctrl/py/JsonIO/__init__.py +0 -0
  194. arctrl/py/JsonIO/assay.py +113 -0
  195. arctrl/py/JsonIO/comment.py +80 -0
  196. arctrl/py/JsonIO/data.py +60 -0
  197. arctrl/py/JsonIO/data_file.py +58 -0
  198. arctrl/py/JsonIO/decode.py +9 -0
  199. arctrl/py/JsonIO/encode.py +1 -0
  200. arctrl/py/JsonIO/investigation.py +113 -0
  201. arctrl/py/JsonIO/ldobject.py +106 -0
  202. arctrl/py/JsonIO/ontology_annotation.py +80 -0
  203. arctrl/py/JsonIO/ontology_source_reference.py +80 -0
  204. arctrl/py/JsonIO/person.py +82 -0
  205. arctrl/py/JsonIO/publication.py +82 -0
  206. arctrl/py/JsonIO/study.py +114 -0
  207. arctrl/py/ROCrate/Generic/__init__.py +0 -0
  208. arctrl/py/ROCrate/Generic/comment.py +131 -0
  209. arctrl/py/ROCrate/Generic/dataset.py +817 -0
  210. arctrl/py/ROCrate/Generic/defined_term.py +131 -0
  211. arctrl/py/ROCrate/Generic/file.py +237 -0
  212. arctrl/py/ROCrate/Generic/lab_process.py +324 -0
  213. arctrl/py/ROCrate/Generic/lab_protocol.py +338 -0
  214. arctrl/py/ROCrate/Generic/organization.py +83 -0
  215. arctrl/py/ROCrate/Generic/person.py +484 -0
  216. arctrl/py/ROCrate/Generic/postal_address.py +195 -0
  217. arctrl/py/ROCrate/Generic/property_value.py +696 -0
  218. arctrl/py/ROCrate/Generic/sample.py +202 -0
  219. arctrl/py/ROCrate/Generic/scholarly_article.py +229 -0
  220. arctrl/py/ROCrate/ISAProfile/__init__.py +0 -0
  221. arctrl/py/ROCrate/ISAProfile/assay.py +70 -0
  222. arctrl/py/ROCrate/ISAProfile/data.py +65 -0
  223. arctrl/py/ROCrate/ISAProfile/dataset.py +24 -0
  224. arctrl/py/ROCrate/ISAProfile/investigation.py +73 -0
  225. arctrl/py/ROCrate/ISAProfile/lab_process.py +162 -0
  226. arctrl/py/ROCrate/ISAProfile/lab_protocol.py +37 -0
  227. arctrl/py/ROCrate/ISAProfile/person.py +72 -0
  228. arctrl/py/ROCrate/ISAProfile/property_value.py +98 -0
  229. arctrl/py/ROCrate/ISAProfile/sample.py +64 -0
  230. arctrl/py/ROCrate/ISAProfile/scholarly_article.py +98 -0
  231. arctrl/py/ROCrate/ISAProfile/study.py +74 -0
  232. arctrl/py/ROCrate/__init__.py +0 -0
  233. arctrl/py/ROCrate/arc_rocrate_metadata.py +39 -0
  234. arctrl/py/ROCrate/dyn_obj_extensions.py +1 -0
  235. arctrl/py/ROCrate/helper.py +8 -0
  236. arctrl/py/ROCrate/ldcontext.py +362 -0
  237. arctrl/py/ROCrate/ldobject.py +1247 -0
  238. arctrl/py/ROCrate/rocrate_context.py +51 -0
  239. arctrl/py/Spreadsheet/AnnotationTable/__init__.py +0 -0
  240. arctrl/py/Spreadsheet/AnnotationTable/arc_table.py +193 -0
  241. arctrl/py/Spreadsheet/AnnotationTable/composite_cell.py +78 -0
  242. arctrl/py/Spreadsheet/AnnotationTable/composite_column.py +210 -0
  243. arctrl/py/Spreadsheet/AnnotationTable/composite_header.py +623 -0
  244. arctrl/py/Spreadsheet/DataMapTable/__init__.py +0 -0
  245. arctrl/py/Spreadsheet/DataMapTable/data_map_column.py +114 -0
  246. arctrl/py/Spreadsheet/DataMapTable/data_map_header.py +618 -0
  247. arctrl/py/Spreadsheet/DataMapTable/data_map_table.py +119 -0
  248. arctrl/py/Spreadsheet/Metadata/__init__.py +0 -0
  249. arctrl/py/Spreadsheet/Metadata/assays.py +125 -0
  250. arctrl/py/Spreadsheet/Metadata/comment.py +77 -0
  251. arctrl/py/Spreadsheet/Metadata/contacts.py +134 -0
  252. arctrl/py/Spreadsheet/Metadata/conversions.py +190 -0
  253. arctrl/py/Spreadsheet/Metadata/design_descriptors.py +34 -0
  254. arctrl/py/Spreadsheet/Metadata/factors.py +107 -0
  255. arctrl/py/Spreadsheet/Metadata/ontology_annotation.py +88 -0
  256. arctrl/py/Spreadsheet/Metadata/ontology_source_reference.py +96 -0
  257. arctrl/py/Spreadsheet/Metadata/protocols.py +146 -0
  258. arctrl/py/Spreadsheet/Metadata/publication.py +122 -0
  259. arctrl/py/Spreadsheet/Metadata/run.py +122 -0
  260. arctrl/py/Spreadsheet/Metadata/sparse_table.py +508 -0
  261. arctrl/py/Spreadsheet/Metadata/study.py +312 -0
  262. arctrl/py/Spreadsheet/Metadata/workflow.py +151 -0
  263. arctrl/py/Spreadsheet/__init__.py +0 -0
  264. arctrl/py/Spreadsheet/arc_assay.py +233 -0
  265. arctrl/py/Spreadsheet/arc_investigation.py +418 -0
  266. arctrl/py/Spreadsheet/arc_run.py +190 -0
  267. arctrl/py/Spreadsheet/arc_study.py +144 -0
  268. arctrl/py/Spreadsheet/arc_workflow.py +176 -0
  269. arctrl/py/Spreadsheet/assembly_info.py +1 -0
  270. arctrl/py/Spreadsheet/collection_aux.py +167 -0
  271. arctrl/py/Spreadsheet/data_map.py +44 -0
  272. arctrl/py/Spreadsheet/template.py +460 -0
  273. arctrl/py/ValidationPackages/__init__.py +0 -0
  274. arctrl/py/ValidationPackages/validation_package.py +82 -0
  275. arctrl/py/ValidationPackages/validation_packages_config.py +132 -0
  276. arctrl/py/WebRequest/__init__.py +0 -0
  277. arctrl/py/WebRequest/web_request.py +9 -0
  278. arctrl/py/WebRequest/web_request_py.py +135 -0
  279. arctrl/py/Yaml/__init__.py +0 -0
  280. arctrl/py/Yaml/decode.py +1 -0
  281. arctrl/py/Yaml/encode.py +10 -0
  282. arctrl/py/Yaml/validation_package.py +77 -0
  283. arctrl/py/Yaml/validation_packages_config.py +86 -0
  284. arctrl/py/__init__.py +0 -0
  285. arctrl/py/arc.py +1400 -0
  286. arctrl/py/column_index.py +280 -0
  287. arctrl/py/conversion.py +2184 -0
  288. arctrl/py/cross_async.py +76 -0
  289. arctrl/py/fable_modules/dynamic_obj/__init__.py +0 -0
  290. arctrl/py/fable_modules/dynamic_obj/dyn_obj.py +136 -0
  291. arctrl/py/fable_modules/dynamic_obj/dynamic_obj.py +415 -0
  292. arctrl/py/fable_modules/dynamic_obj/fable_js.py +1 -0
  293. arctrl/py/fable_modules/dynamic_obj/fable_py.py +288 -0
  294. arctrl/py/fable_modules/dynamic_obj/hash_codes.py +82 -0
  295. arctrl/py/fable_modules/dynamic_obj/property_helper.py +25 -0
  296. arctrl/py/fable_modules/dynamic_obj/reflection_utils.py +87 -0
  297. arctrl/py/fable_modules/fable_library/__init__.py +0 -0
  298. arctrl/py/fable_modules/fable_library/array_.py +1528 -0
  299. arctrl/py/fable_modules/fable_library/async_.py +377 -0
  300. arctrl/py/fable_modules/fable_library/async_builder.py +379 -0
  301. arctrl/py/fable_modules/fable_library/big_int.py +330 -0
  302. arctrl/py/fable_modules/fable_library/bit_converter.py +131 -0
  303. arctrl/py/fable_modules/fable_library/boolean.py +26 -0
  304. arctrl/py/fable_modules/fable_library/char.py +237 -0
  305. arctrl/py/fable_modules/fable_library/choice.py +212 -0
  306. arctrl/py/fable_modules/fable_library/date.py +779 -0
  307. arctrl/py/fable_modules/fable_library/date_offset.py +79 -0
  308. arctrl/py/fable_modules/fable_library/decimal_.py +190 -0
  309. arctrl/py/fable_modules/fable_library/diagnostics.py +54 -0
  310. arctrl/py/fable_modules/fable_library/double.py +87 -0
  311. arctrl/py/fable_modules/fable_library/encoding.py +41 -0
  312. arctrl/py/fable_modules/fable_library/event.py +206 -0
  313. arctrl/py/fable_modules/fable_library/file.py +107 -0
  314. arctrl/py/fable_modules/fable_library/fsharp_collections.py +52 -0
  315. arctrl/py/fable_modules/fable_library/fsharp_core.py +123 -0
  316. arctrl/py/fable_modules/fable_library/global_.py +63 -0
  317. arctrl/py/fable_modules/fable_library/guid.py +41 -0
  318. arctrl/py/fable_modules/fable_library/int32.py +73 -0
  319. arctrl/py/fable_modules/fable_library/list.py +1788 -0
  320. arctrl/py/fable_modules/fable_library/long.py +240 -0
  321. arctrl/py/fable_modules/fable_library/mailbox_processor.py +179 -0
  322. arctrl/py/fable_modules/fable_library/map.py +1854 -0
  323. arctrl/py/fable_modules/fable_library/map_util.py +148 -0
  324. arctrl/py/fable_modules/fable_library/mutable_map.py +397 -0
  325. arctrl/py/fable_modules/fable_library/mutable_set.py +279 -0
  326. arctrl/py/fable_modules/fable_library/native.py +45 -0
  327. arctrl/py/fable_modules/fable_library/numeric.py +46 -0
  328. arctrl/py/fable_modules/fable_library/observable.py +222 -0
  329. arctrl/py/fable_modules/fable_library/option.py +128 -0
  330. arctrl/py/fable_modules/fable_library/path.py +62 -0
  331. arctrl/py/fable_modules/fable_library/range.py +117 -0
  332. arctrl/py/fable_modules/fable_library/reflection.py +463 -0
  333. arctrl/py/fable_modules/fable_library/reg_exp.py +137 -0
  334. arctrl/py/fable_modules/fable_library/resize_array.py +31 -0
  335. arctrl/py/fable_modules/fable_library/result.py +212 -0
  336. arctrl/py/fable_modules/fable_library/seq.py +1979 -0
  337. arctrl/py/fable_modules/fable_library/seq2.py +221 -0
  338. arctrl/py/fable_modules/fable_library/set.py +2414 -0
  339. arctrl/py/fable_modules/fable_library/singleton_local_time_zone.py +36 -0
  340. arctrl/py/fable_modules/fable_library/string_.py +573 -0
  341. arctrl/py/fable_modules/fable_library/system_collections_generic.py +462 -0
  342. arctrl/py/fable_modules/fable_library/system_text.py +237 -0
  343. arctrl/py/fable_modules/fable_library/task.py +116 -0
  344. arctrl/py/fable_modules/fable_library/task_builder.py +122 -0
  345. arctrl/py/fable_modules/fable_library/thread.py +5 -0
  346. arctrl/py/fable_modules/fable_library/time_span.py +283 -0
  347. arctrl/py/fable_modules/fable_library/timer.py +24 -0
  348. arctrl/py/fable_modules/fable_library/types.py +401 -0
  349. arctrl/py/fable_modules/fable_library/uri.py +109 -0
  350. arctrl/py/fable_modules/fable_library/util.py +2735 -0
  351. arctrl/py/fable_modules/fable_openpyxl/__init__.py +0 -0
  352. arctrl/py/fable_modules/fable_openpyxl/openpyxl.py +362 -0
  353. arctrl/py/fable_modules/fable_python/cognite-sdk/__init__.py +0 -0
  354. arctrl/py/fable_modules/fable_python/cognite-sdk/cognite_sdk.py +22 -0
  355. arctrl/py/fable_modules/fable_python/flask/__init__.py +0 -0
  356. arctrl/py/fable_modules/fable_python/flask/flask.py +34 -0
  357. arctrl/py/fable_modules/fable_python/jupyter/__init__.py +0 -0
  358. arctrl/py/fable_modules/fable_python/jupyter/ipy_widgets.py +47 -0
  359. arctrl/py/fable_modules/fable_python/jupyter/ipython.py +13 -0
  360. arctrl/py/fable_modules/fable_python/stdlib/__init__.py +0 -0
  361. arctrl/py/fable_modules/fable_python/stdlib/ast.py +1 -0
  362. arctrl/py/fable_modules/fable_python/stdlib/asyncio/__init__.py +0 -0
  363. arctrl/py/fable_modules/fable_python/stdlib/asyncio/events.py +17 -0
  364. arctrl/py/fable_modules/fable_python/stdlib/asyncio/futures.py +52 -0
  365. arctrl/py/fable_modules/fable_python/stdlib/asyncio/tasks.py +38 -0
  366. arctrl/py/fable_modules/fable_python/stdlib/base64_.py +1 -0
  367. arctrl/py/fable_modules/fable_python/stdlib/builtins_.py +38 -0
  368. arctrl/py/fable_modules/fable_python/stdlib/html.py +1 -0
  369. arctrl/py/fable_modules/fable_python/stdlib/json.py +1 -0
  370. arctrl/py/fable_modules/fable_python/stdlib/math_.py +1 -0
  371. arctrl/py/fable_modules/fable_python/stdlib/os_.py +1 -0
  372. arctrl/py/fable_modules/fable_python/stdlib/queue_.py +1 -0
  373. arctrl/py/fable_modules/fable_python/stdlib/string_.py +1 -0
  374. arctrl/py/fable_modules/fable_python/stdlib/sys_.py +30 -0
  375. arctrl/py/fable_modules/fable_python/stdlib/time_.py +1 -0
  376. arctrl/py/fable_modules/fable_python/stdlib/tk_inter.py +1 -0
  377. arctrl/py/fable_modules/fs_spreadsheet/Cells/__init__.py +0 -0
  378. arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cell.py +338 -0
  379. arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cells_collection.py +469 -0
  380. arctrl/py/fable_modules/fs_spreadsheet/DSL/__init__.py +0 -0
  381. arctrl/py/fable_modules/fs_spreadsheet/DSL/cell_builder.py +214 -0
  382. arctrl/py/fable_modules/fs_spreadsheet/DSL/column_builder.py +139 -0
  383. arctrl/py/fable_modules/fs_spreadsheet/DSL/dsl.py +50 -0
  384. arctrl/py/fable_modules/fs_spreadsheet/DSL/expression.py +65 -0
  385. arctrl/py/fable_modules/fs_spreadsheet/DSL/operators.py +9 -0
  386. arctrl/py/fable_modules/fs_spreadsheet/DSL/row_builder.py +139 -0
  387. arctrl/py/fable_modules/fs_spreadsheet/DSL/sheet_builder.py +118 -0
  388. arctrl/py/fable_modules/fs_spreadsheet/DSL/table_builder.py +122 -0
  389. arctrl/py/fable_modules/fs_spreadsheet/DSL/transform.py +464 -0
  390. arctrl/py/fable_modules/fs_spreadsheet/DSL/types.py +314 -0
  391. arctrl/py/fable_modules/fs_spreadsheet/DSL/workbook_builder.py +106 -0
  392. arctrl/py/fable_modules/fs_spreadsheet/Json/__init__.py +0 -0
  393. arctrl/py/fable_modules/fs_spreadsheet/Json/cell.py +103 -0
  394. arctrl/py/fable_modules/fs_spreadsheet/Json/column.py +70 -0
  395. arctrl/py/fable_modules/fs_spreadsheet/Json/row.py +70 -0
  396. arctrl/py/fable_modules/fs_spreadsheet/Json/table.py +57 -0
  397. arctrl/py/fable_modules/fs_spreadsheet/Json/value.py +93 -0
  398. arctrl/py/fable_modules/fs_spreadsheet/Json/workbook.py +71 -0
  399. arctrl/py/fable_modules/fs_spreadsheet/Json/worksheet.py +217 -0
  400. arctrl/py/fable_modules/fs_spreadsheet/Ranges/__init__.py +0 -0
  401. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range.py +47 -0
  402. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_address.py +186 -0
  403. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_base.py +90 -0
  404. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_column.py +78 -0
  405. arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_row.py +48 -0
  406. arctrl/py/fable_modules/fs_spreadsheet/Tables/__init__.py +0 -0
  407. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table.py +393 -0
  408. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_field.py +127 -0
  409. arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_row.py +23 -0
  410. arctrl/py/fable_modules/fs_spreadsheet/__init__.py +0 -0
  411. arctrl/py/fable_modules/fs_spreadsheet/fs_address.py +218 -0
  412. arctrl/py/fable_modules/fs_spreadsheet/fs_column.py +172 -0
  413. arctrl/py/fable_modules/fs_spreadsheet/fs_row.py +183 -0
  414. arctrl/py/fable_modules/fs_spreadsheet/fs_workbook.py +180 -0
  415. arctrl/py/fable_modules/fs_spreadsheet/fs_worksheet.py +600 -0
  416. arctrl/py/fable_modules/fs_spreadsheet/sheet_builder.py +330 -0
  417. arctrl/py/fable_modules/fs_spreadsheet_py/__init__.py +0 -0
  418. arctrl/py/fable_modules/fs_spreadsheet_py/cell.py +63 -0
  419. arctrl/py/fable_modules/fs_spreadsheet_py/cell_type.py +50 -0
  420. arctrl/py/fable_modules/fs_spreadsheet_py/fs_extension.py +60 -0
  421. arctrl/py/fable_modules/fs_spreadsheet_py/json.py +47 -0
  422. arctrl/py/fable_modules/fs_spreadsheet_py/table.py +53 -0
  423. arctrl/py/fable_modules/fs_spreadsheet_py/workbook.py +40 -0
  424. arctrl/py/fable_modules/fs_spreadsheet_py/worksheet.py +54 -0
  425. arctrl/py/fable_modules/fs_spreadsheet_py/xlsx.py +37 -0
  426. arctrl/py/fable_modules/thoth_json_core/__init__.py +0 -0
  427. arctrl/py/fable_modules/thoth_json_core/decode.py +1588 -0
  428. arctrl/py/fable_modules/thoth_json_core/encode.py +261 -0
  429. arctrl/py/fable_modules/thoth_json_core/types.py +181 -0
  430. arctrl/py/fable_modules/thoth_json_python/__init__.py +0 -0
  431. arctrl/py/fable_modules/thoth_json_python/decode.py +112 -0
  432. arctrl/py/fable_modules/thoth_json_python/encode.py +72 -0
  433. arctrl/py/fable_modules/thoth_json_python/python.py +1 -0
  434. arctrl/py/fable_modules/yamlicious/Interop/__init__.py +0 -0
  435. arctrl/py/fable_modules/yamlicious/Interop/js_interop.py +1 -0
  436. arctrl/py/fable_modules/yamlicious/Interop/py_interop.py +7 -0
  437. arctrl/py/fable_modules/yamlicious/__init__.py +0 -0
  438. arctrl/py/fable_modules/yamlicious/decode.py +1784 -0
  439. arctrl/py/fable_modules/yamlicious/encode.py +84 -0
  440. arctrl/py/fable_modules/yamlicious/library.py +10 -0
  441. arctrl/py/fable_modules/yamlicious/persil.py +57 -0
  442. arctrl/py/fable_modules/yamlicious/preprocessing.py +99 -0
  443. arctrl/py/fable_modules/yamlicious/reader.py +665 -0
  444. arctrl/py/fable_modules/yamlicious/regex.py +21 -0
  445. arctrl/py/fable_modules/yamlicious/regex_active_patterns.py +256 -0
  446. arctrl/py/fable_modules/yamlicious/writer.py +175 -0
  447. arctrl/py/fable_modules/yamlicious/yamlicious_types.py +128 -0
  448. arctrl/py/json.py +213 -0
  449. arctrl/py/rocrate_io.py +72 -0
  450. arctrl/py/template_web.py +23 -0
  451. arctrl/py/xlsx.py +148 -0
  452. arctrl/rocrate.py +21 -0
  453. arctrl-3.0.0a3.dist-info/LICENSE +21 -0
  454. arctrl-3.0.0a3.dist-info/METADATA +119 -0
  455. arctrl-3.0.0a3.dist-info/RECORD +456 -0
  456. arctrl-3.0.0a3.dist-info/WHEEL +4 -0
@@ -0,0 +1,233 @@
1
+ from __future__ import annotations
2
+ from collections.abc import Callable
3
+ from typing import Any
4
+ from ..fable_modules.fable_library.list import (FSharpList, is_empty, empty, singleton as singleton_1, of_seq)
5
+ from ..fable_modules.fable_library.option import (default_arg, to_array)
6
+ from ..fable_modules.fable_library.seq import (exists, head, try_head, delay, append, singleton, iterate_indexed, map, try_find, choose, try_pick, is_empty as is_empty_1, iterate)
7
+ from ..fable_modules.fable_library.string_ import (starts_with_exact, to_fail, printf, to_console)
8
+ from ..fable_modules.fable_library.types import Array
9
+ from ..fable_modules.fable_library.util import (IEnumerable_1, get_enumerator, IEnumerator, to_enumerable)
10
+ from ..fable_modules.fs_spreadsheet.fs_row import FsRow
11
+ from ..fable_modules.fs_spreadsheet.fs_workbook import FsWorkbook
12
+ from ..fable_modules.fs_spreadsheet.fs_worksheet import FsWorksheet
13
+ from ..Core.arc_types import ArcAssay
14
+ from ..Core.comment import Remark
15
+ from ..Core.data_map import DataMap
16
+ from ..Core.Helper.identifier import create_missing_identifier
17
+ from ..Core.person import Person
18
+ from ..Core.Table.arc_table import ArcTable
19
+ from .AnnotationTable.arc_table import (try_from_fs_worksheet, to_fs_worksheet as to_fs_worksheet_1)
20
+ from .DataMapTable.data_map_table import (try_from_fs_worksheet as try_from_fs_worksheet_1, to_fs_worksheet)
21
+ from .Metadata.assays import (from_rows, to_rows)
22
+ from .Metadata.contacts import (from_rows as from_rows_1, to_rows as to_rows_1)
23
+ from .Metadata.sparse_table import (SparseRowModule_tryGetValueAt, SparseRowModule_fromValues, SparseRowModule_writeToSheet, SparseRowModule_fromFsRow, SparseRowModule_getAllValues, SparseRowModule_fromAllValues)
24
+
25
+ def ArcAssay_fromRows(rows: IEnumerable_1[IEnumerable_1[tuple[int, str]]]) -> ArcAssay:
26
+ def predicate(row: IEnumerable_1[tuple[int, str]], rows: Any=rows) -> bool:
27
+ return starts_with_exact(head(row)[1], "Assay")
28
+
29
+ pattern_input: tuple[str | None, str | None] = (("Assay", "Assay Person")) if exists(predicate, rows) else ((None, None))
30
+ en: IEnumerator[IEnumerable_1[tuple[int, str]]] = get_enumerator(rows)
31
+ def loop(last_row_mut: str | None, assays_mut: FSharpList[ArcAssay], contacts_mut: FSharpList[Person], row_number_mut: int, rows: Any=rows) -> ArcAssay:
32
+ while True:
33
+ (last_row, assays, contacts, row_number) = (last_row_mut, assays_mut, contacts_mut, row_number_mut)
34
+ (pattern_matching_result,) = (None,)
35
+ if last_row is not None:
36
+ def _arrow1378(__unit: None=None, last_row: Any=last_row, assays: Any=assays, contacts: Any=contacts, row_number: Any=row_number) -> bool:
37
+ prefix: str = last_row
38
+ return True if (prefix == "ASSAY") else (prefix == "ASSAY METADATA")
39
+
40
+ if _arrow1378():
41
+ pattern_matching_result = 0
42
+
43
+ elif last_row == "ASSAY PERFORMERS":
44
+ pattern_matching_result = 1
45
+
46
+ else:
47
+ pattern_matching_result = 2
48
+
49
+
50
+ else:
51
+ pattern_matching_result = 2
52
+
53
+ if pattern_matching_result == 0:
54
+ pattern_input_1: tuple[str | None, int, FSharpList[Remark], FSharpList[ArcAssay]] = from_rows(pattern_input[0], row_number + 1, en)
55
+ last_row_mut = pattern_input_1[0]
56
+ assays_mut = pattern_input_1[3]
57
+ contacts_mut = contacts
58
+ row_number_mut = pattern_input_1[1]
59
+ continue
60
+
61
+ elif pattern_matching_result == 1:
62
+ pattern_input_2: tuple[str | None, int, FSharpList[Remark], FSharpList[Person]] = from_rows_1(pattern_input[1], row_number + 1, en)
63
+ last_row_mut = pattern_input_2[0]
64
+ assays_mut = assays
65
+ contacts_mut = pattern_input_2[3]
66
+ row_number_mut = pattern_input_2[1]
67
+ continue
68
+
69
+ elif pattern_matching_result == 2:
70
+ (pattern_matching_result_1, assays_2, contacts_2) = (None, None, None)
71
+ if is_empty(assays):
72
+ if is_empty(contacts):
73
+ pattern_matching_result_1 = 0
74
+
75
+ else:
76
+ pattern_matching_result_1 = 1
77
+ assays_2 = assays
78
+ contacts_2 = contacts
79
+
80
+
81
+ else:
82
+ pattern_matching_result_1 = 1
83
+ assays_2 = assays
84
+ contacts_2 = contacts
85
+
86
+ if pattern_matching_result_1 == 0:
87
+ return ArcAssay.create(create_missing_identifier())
88
+
89
+ elif pattern_matching_result_1 == 1:
90
+ performers: Array[Person] = list(contacts_2)
91
+ assay: ArcAssay = default_arg(try_head(assays_2), ArcAssay.create(create_missing_identifier()))
92
+ return ArcAssay.set_performers(performers, assay)
93
+
94
+
95
+ break
96
+
97
+ if en.System_Collections_IEnumerator_MoveNext():
98
+ return loop(SparseRowModule_tryGetValueAt(0, en.System_Collections_Generic_IEnumerator_1_get_Current()), empty(), empty(), 1)
99
+
100
+ else:
101
+ raise Exception("empty assay metadata sheet")
102
+
103
+
104
+
105
+ def ArcAssay_toRows(assay: ArcAssay) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
106
+ def _arrow1382(__unit: None=None, assay: Any=assay) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
107
+ def _arrow1381(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
108
+ def _arrow1380(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
109
+ def _arrow1379(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
110
+ return to_rows_1("Assay Person", of_seq(assay.Performers))
111
+
112
+ return append(singleton(SparseRowModule_fromValues(to_enumerable(["ASSAY PERFORMERS"]))), delay(_arrow1379))
113
+
114
+ return append(to_rows("Assay", singleton_1(assay)), delay(_arrow1380))
115
+
116
+ return append(singleton(SparseRowModule_fromValues(to_enumerable(["ASSAY"]))), delay(_arrow1381))
117
+
118
+ return delay(_arrow1382)
119
+
120
+
121
+ def ArcAssay_toMetadataSheet(assay: ArcAssay) -> FsWorksheet:
122
+ sheet: FsWorksheet = FsWorksheet("isa_assay")
123
+ def action(row_i: int, r: IEnumerable_1[tuple[int, str]], assay: Any=assay) -> None:
124
+ SparseRowModule_writeToSheet(row_i + 1, r, sheet)
125
+
126
+ iterate_indexed(action, ArcAssay_toRows(assay))
127
+ return sheet
128
+
129
+
130
+ def ArcAssay_fromMetadataSheet(sheet: FsWorksheet) -> ArcAssay:
131
+ try:
132
+ rows: IEnumerable_1[IEnumerable_1[tuple[int, str]]] = map(SparseRowModule_fromFsRow, sheet.Rows)
133
+ def predicate(row: IEnumerable_1[tuple[int, str]]) -> bool:
134
+ return starts_with_exact(head(row)[1], "Assay")
135
+
136
+ has_prefix: bool = exists(predicate, rows)
137
+ return ArcAssay_fromRows(rows)
138
+
139
+ except Exception as err:
140
+ arg: str = str(err)
141
+ return to_fail(printf("Failed while parsing metadatasheet: %s"))(arg)
142
+
143
+
144
+
145
+ def ArcAssay_toMetadataCollection(assay: ArcAssay) -> IEnumerable_1[IEnumerable_1[str | None]]:
146
+ def mapping(row: IEnumerable_1[tuple[int, str]], assay: Any=assay) -> IEnumerable_1[str | None]:
147
+ return SparseRowModule_getAllValues(row)
148
+
149
+ return map(mapping, ArcAssay_toRows(assay))
150
+
151
+
152
+ def ArcAssay_fromMetadataCollection(collection: IEnumerable_1[IEnumerable_1[str | None]]) -> ArcAssay:
153
+ try:
154
+ return ArcAssay_fromRows(map(SparseRowModule_fromAllValues, collection))
155
+
156
+ except Exception as err:
157
+ arg: str = str(err)
158
+ return to_fail(printf("Failed while parsing metadatasheet: %s"))(arg)
159
+
160
+
161
+
162
+ def ArcAssay_isMetadataSheetName(name: str) -> bool:
163
+ if name == "isa_assay":
164
+ return True
165
+
166
+ else:
167
+ return name == "Assay"
168
+
169
+
170
+
171
+ def ArcAssay_isMetadataSheet(sheet: FsWorksheet) -> bool:
172
+ return ArcAssay_isMetadataSheetName(sheet.Name)
173
+
174
+
175
+ def ArcAssay_tryGetMetadataSheet(doc: FsWorkbook) -> FsWorksheet | None:
176
+ def predicate(sheet: FsWorksheet, doc: Any=doc) -> bool:
177
+ return ArcAssay_isMetadataSheet(sheet)
178
+
179
+ return try_find(predicate, doc.GetWorksheets())
180
+
181
+
182
+ def ARCtrl_ArcAssay__ArcAssay_fromFsWorkbook_Static_32154C9D(doc: FsWorkbook) -> ArcAssay:
183
+ try:
184
+ assay_metadata: ArcAssay
185
+ match_value: FsWorksheet | None = ArcAssay_tryGetMetadataSheet(doc)
186
+ if match_value is None:
187
+ to_console(printf("Cannot retrieve metadata: Assay file does not contain \"%s\" or \"%s\" sheet."))("isa_assay")("Assay")
188
+ assay_metadata = ArcAssay.create(create_missing_identifier())
189
+
190
+ else:
191
+ assay_metadata = ArcAssay_fromMetadataSheet(match_value)
192
+
193
+ sheets: Array[FsWorksheet] = doc.GetWorksheets()
194
+ annotation_tables: IEnumerable_1[ArcTable] = choose(try_from_fs_worksheet, sheets)
195
+ datamap_sheet: DataMap | None = try_pick(try_from_fs_worksheet_1, sheets)
196
+ if not is_empty_1(annotation_tables):
197
+ assay_metadata.Tables = list(annotation_tables)
198
+
199
+ assay_metadata.DataMap = datamap_sheet
200
+ return assay_metadata
201
+
202
+ except Exception as err:
203
+ arg_2: str = str(err)
204
+ return to_fail(printf("Could not parse assay: \n%s"))(arg_2)
205
+
206
+
207
+
208
+ def ARCtrl_ArcAssay__ArcAssay_toFsWorkbook_Static_Z2508BE4F(assay: ArcAssay, datamap_sheet: bool | None=None) -> FsWorkbook:
209
+ datamap_sheet_1: bool = default_arg(datamap_sheet, True)
210
+ doc: FsWorkbook = FsWorkbook()
211
+ metadata_sheet: FsWorksheet = ArcAssay_toMetadataSheet(assay)
212
+ doc.AddWorksheet(metadata_sheet)
213
+ if datamap_sheet_1:
214
+ def action(arg: DataMap, assay: Any=assay, datamap_sheet: Any=datamap_sheet) -> None:
215
+ sheet: FsWorksheet = to_fs_worksheet(arg)
216
+ doc.AddWorksheet(sheet)
217
+
218
+ iterate(action, to_array(assay.DataMap))
219
+
220
+ def action_1(i: int, arg_1: ArcTable, assay: Any=assay, datamap_sheet: Any=datamap_sheet) -> None:
221
+ sheet_1: FsWorksheet = to_fs_worksheet_1(i, arg_1)
222
+ doc.AddWorksheet(sheet_1)
223
+
224
+ iterate_indexed(action_1, assay.Tables)
225
+ return doc
226
+
227
+
228
+ def ARCtrl_ArcAssay__ArcAssay_ToFsWorkbook_6FCE9E49(this: ArcAssay, datamap_sheet: bool | None=None) -> FsWorkbook:
229
+ return ARCtrl_ArcAssay__ArcAssay_toFsWorkbook_Static_Z2508BE4F(this, datamap_sheet)
230
+
231
+
232
+ __all__ = ["ArcAssay_fromRows", "ArcAssay_toRows", "ArcAssay_toMetadataSheet", "ArcAssay_fromMetadataSheet", "ArcAssay_toMetadataCollection", "ArcAssay_fromMetadataCollection", "ArcAssay_isMetadataSheetName", "ArcAssay_isMetadataSheet", "ArcAssay_tryGetMetadataSheet", "ARCtrl_ArcAssay__ArcAssay_fromFsWorkbook_Static_32154C9D", "ARCtrl_ArcAssay__ArcAssay_toFsWorkbook_Static_Z2508BE4F", "ARCtrl_ArcAssay__ArcAssay_ToFsWorkbook_6FCE9E49"]
233
+
@@ -0,0 +1,418 @@
1
+ from __future__ import annotations
2
+ from collections.abc import Callable
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+ from ..fable_modules.fable_library.list import (FSharpList, of_array, map, empty, cons, reverse, append, unzip, concat, of_seq, is_empty, tail, head)
6
+ from ..fable_modules.fable_library.map import (of_list, try_find)
7
+ from ..fable_modules.fable_library.map_util import add_to_dict
8
+ from ..fable_modules.fable_library.option import (default_arg, value as value_1)
9
+ from ..fable_modules.fable_library.reflection import (TypeInfo, string_type, list_type, record_type)
10
+ from ..fable_modules.fable_library.seq import (delay, append as append_1, singleton, collect, to_list, map as map_1, try_find as try_find_1, iterate_indexed)
11
+ from ..fable_modules.fable_library.seq2 import (List_distinct, List_distinctBy)
12
+ from ..fable_modules.fable_library.string_ import (to_fail, printf)
13
+ from ..fable_modules.fable_library.types import (Record, Array)
14
+ from ..fable_modules.fable_library.util import (string_hash, IEnumerable_1, IEnumerator, get_enumerator, to_enumerable, compare_primitives)
15
+ from ..fable_modules.fs_spreadsheet.fs_row import FsRow
16
+ from ..fable_modules.fs_spreadsheet.fs_workbook import FsWorkbook
17
+ from ..fable_modules.fs_spreadsheet.fs_worksheet import FsWorksheet
18
+ from ..Core.arc_types import (ArcInvestigation, ArcStudy, ArcAssay)
19
+ from ..Core.comment import (Comment, Comment_reflection, Remark)
20
+ from ..Core.Helper.collections_ import (ResizeArray_iter, Option_fromValueWithDefault)
21
+ from ..Core.ontology_source_reference import OntologySourceReference
22
+ from ..Core.person import Person
23
+ from ..Core.publication import Publication
24
+ from .Metadata.comment import (Comment_fromString, Comment_toString, Remark_wrapRemark)
25
+ from .Metadata.contacts import (from_rows as from_rows_2, to_rows as to_rows_2)
26
+ from .Metadata.ontology_source_reference import (from_rows, to_rows)
27
+ from .Metadata.publication import (from_rows as from_rows_1, to_rows as to_rows_1)
28
+ from .Metadata.sparse_table import (SparseTable__TryGetValueDefault_5BAE6133, SparseTable, SparseTable_Create_Z2192E64B, SparseTable_FromRows_Z5579EC29, SparseTable_ToRows_759CAFC1, SparseRowModule_tryGetValueAt, SparseRowModule_fromValues, SparseRowModule_getAllValues, SparseRowModule_fromAllValues, SparseRowModule_fromFsRow, SparseRowModule_writeToSheet)
29
+ from .Metadata.study import (from_rows as from_rows_3, to_rows as to_rows_3)
30
+
31
+ def _expr1393() -> TypeInfo:
32
+ return record_type("ARCtrl.Spreadsheet.ArcInvestigation.InvestigationInfo", [], ArcInvestigation_InvestigationInfo, lambda: [("Identifier", string_type), ("Title", string_type), ("Description", string_type), ("SubmissionDate", string_type), ("PublicReleaseDate", string_type), ("Comments", list_type(Comment_reflection()))])
33
+
34
+
35
+ @dataclass(eq = False, repr = False, slots = True)
36
+ class ArcInvestigation_InvestigationInfo(Record):
37
+ Identifier: str
38
+ Title: str
39
+ Description: str
40
+ SubmissionDate: str
41
+ PublicReleaseDate: str
42
+ Comments: FSharpList[Comment]
43
+
44
+ ArcInvestigation_InvestigationInfo_reflection = _expr1393
45
+
46
+ def ArcInvestigation_InvestigationInfo_create(identifier: str, title: str, description: str, submission_date: str, public_release_date: str, comments: FSharpList[Comment]) -> ArcInvestigation_InvestigationInfo:
47
+ return ArcInvestigation_InvestigationInfo(identifier, title, description, submission_date, public_release_date, comments)
48
+
49
+
50
+ def ArcInvestigation_InvestigationInfo_get_Labels(__unit: None=None) -> FSharpList[str]:
51
+ return of_array(["Investigation Identifier", "Investigation Title", "Investigation Description", "Investigation Submission Date", "Investigation Public Release Date"])
52
+
53
+
54
+ def ArcInvestigation_InvestigationInfo_FromSparseTable_3ECCA699(matrix: SparseTable) -> ArcInvestigation_InvestigationInfo:
55
+ def mapping(k: str, matrix: Any=matrix) -> Comment:
56
+ return Comment_fromString(k, SparseTable__TryGetValueDefault_5BAE6133(matrix, "", (k, 0)))
57
+
58
+ comments: FSharpList[Comment] = map(mapping, matrix.CommentKeys)
59
+ return ArcInvestigation_InvestigationInfo_create(SparseTable__TryGetValueDefault_5BAE6133(matrix, "", ("Investigation Identifier", 0)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", ("Investigation Title", 0)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", ("Investigation Description", 0)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", ("Investigation Submission Date", 0)), SparseTable__TryGetValueDefault_5BAE6133(matrix, "", ("Investigation Public Release Date", 0)), comments)
60
+
61
+
62
+ def ArcInvestigation_InvestigationInfo_ToSparseTable_Z720BD3FF(investigation: ArcInvestigation) -> SparseTable:
63
+ matrix: SparseTable = SparseTable_Create_Z2192E64B(None, ArcInvestigation_InvestigationInfo_get_Labels(), None, 2)
64
+ comment_keys: FSharpList[str] = empty()
65
+ add_to_dict(matrix.Matrix, ("Investigation Identifier", 1), investigation.Identifier)
66
+ add_to_dict(matrix.Matrix, ("Investigation Title", 1), default_arg(investigation.Title, ""))
67
+ add_to_dict(matrix.Matrix, ("Investigation Description", 1), default_arg(investigation.Description, ""))
68
+ add_to_dict(matrix.Matrix, ("Investigation Submission Date", 1), default_arg(investigation.SubmissionDate, ""))
69
+ add_to_dict(matrix.Matrix, ("Investigation Public Release Date", 1), default_arg(investigation.PublicReleaseDate, ""))
70
+ def f(comment: Comment, investigation: Any=investigation) -> None:
71
+ nonlocal comment_keys
72
+ pattern_input: tuple[str, str] = Comment_toString(comment)
73
+ n: str = pattern_input[0]
74
+ comment_keys = cons(n, comment_keys)
75
+ add_to_dict(matrix.Matrix, (n, 1), pattern_input[1])
76
+
77
+ ResizeArray_iter(f, investigation.Comments)
78
+ class ObjectExpr1395:
79
+ @property
80
+ def Equals(self) -> Callable[[str, str], bool]:
81
+ def _arrow1394(x: str, y: str) -> bool:
82
+ return x == y
83
+
84
+ return _arrow1394
85
+
86
+ @property
87
+ def GetHashCode(self) -> Callable[[str], int]:
88
+ return string_hash
89
+
90
+ return SparseTable(matrix.Matrix, matrix.Keys, reverse(List_distinct(comment_keys, ObjectExpr1395())), matrix.ColumnCount)
91
+
92
+
93
+ def ArcInvestigation_InvestigationInfo_fromRows(line_number: int, rows: IEnumerator[IEnumerable_1[tuple[int, str]]]) -> tuple[str | None, int, FSharpList[Remark], ArcInvestigation_InvestigationInfo]:
94
+ tupled_arg: tuple[str | None, int, FSharpList[Remark], SparseTable] = SparseTable_FromRows_Z5579EC29(rows, ArcInvestigation_InvestigationInfo_get_Labels(), line_number)
95
+ return (tupled_arg[0], tupled_arg[1], tupled_arg[2], ArcInvestigation_InvestigationInfo_FromSparseTable_3ECCA699(tupled_arg[3]))
96
+
97
+
98
+ def ArcInvestigation_InvestigationInfo_toRows_Z720BD3FF(investigation: ArcInvestigation) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
99
+ return SparseTable_ToRows_759CAFC1(ArcInvestigation_InvestigationInfo_ToSparseTable_Z720BD3FF(investigation))
100
+
101
+
102
+ def ArcInvestigation_fromParts(investigation_info: ArcInvestigation_InvestigationInfo, ontology_source_reference: FSharpList[OntologySourceReference], publications: FSharpList[Publication], contacts: FSharpList[Person], studies: FSharpList[ArcStudy], assays: FSharpList[ArcAssay], remarks: FSharpList[Remark]) -> ArcInvestigation:
103
+ def mapping(s: ArcStudy, investigation_info: Any=investigation_info, ontology_source_reference: Any=ontology_source_reference, publications: Any=publications, contacts: Any=contacts, studies: Any=studies, assays: Any=assays, remarks: Any=remarks) -> str:
104
+ return s.Identifier
105
+
106
+ study_identifiers: FSharpList[str] = map(mapping, studies)
107
+ title: str | None = Option_fromValueWithDefault("", investigation_info.Title)
108
+ description: str | None = Option_fromValueWithDefault("", investigation_info.Description)
109
+ submission_date: str | None = Option_fromValueWithDefault("", investigation_info.SubmissionDate)
110
+ public_release_date: str | None = Option_fromValueWithDefault("", investigation_info.PublicReleaseDate)
111
+ ontology_source_references: Array[OntologySourceReference] = list(ontology_source_reference)
112
+ publications_1: Array[Publication] = list(publications)
113
+ contacts_1: Array[Person] = list(contacts)
114
+ assays_1: Array[ArcAssay] = list(assays)
115
+ studies_1: Array[ArcStudy] = list(studies)
116
+ registered_study_identifiers: Array[str] = list(study_identifiers)
117
+ comments: Array[Comment] = list(investigation_info.Comments)
118
+ remarks_1: Array[Remark] = list(remarks)
119
+ return ArcInvestigation.make(investigation_info.Identifier, title, description, submission_date, public_release_date, ontology_source_references, publications_1, contacts_1, assays_1, studies_1, [], [], registered_study_identifiers, comments, remarks_1)
120
+
121
+
122
+ def ArcInvestigation_fromRows(rows: IEnumerable_1[IEnumerable_1[tuple[int, str]]]) -> ArcInvestigation:
123
+ en: IEnumerator[IEnumerable_1[tuple[int, str]]] = get_enumerator(rows)
124
+ empty_investigation_info: ArcInvestigation_InvestigationInfo = ArcInvestigation_InvestigationInfo_create("", "", "", "", "", empty())
125
+ def loop(last_line_mut: str | None, ontology_source_references_mut: FSharpList[OntologySourceReference], investigation_info_mut: ArcInvestigation_InvestigationInfo, publications_mut: FSharpList[Publication], contacts_mut: FSharpList[Person], studies_mut: FSharpList[tuple[ArcStudy, FSharpList[ArcAssay]]], remarks_mut: FSharpList[Remark], line_number_mut: int, rows: Any=rows) -> ArcInvestigation:
126
+ while True:
127
+ (last_line, ontology_source_references, investigation_info, publications, contacts, studies, remarks, line_number) = (last_line_mut, ontology_source_references_mut, investigation_info_mut, publications_mut, contacts_mut, studies_mut, remarks_mut, line_number_mut)
128
+ (pattern_matching_result,) = (None,)
129
+ if last_line is not None:
130
+ if last_line == "ONTOLOGY SOURCE REFERENCE":
131
+ pattern_matching_result = 0
132
+
133
+ elif last_line == "INVESTIGATION":
134
+ pattern_matching_result = 1
135
+
136
+ elif last_line == "INVESTIGATION PUBLICATIONS":
137
+ pattern_matching_result = 2
138
+
139
+ elif last_line == "INVESTIGATION CONTACTS":
140
+ pattern_matching_result = 3
141
+
142
+ elif last_line == "STUDY":
143
+ pattern_matching_result = 4
144
+
145
+ else:
146
+ pattern_matching_result = 5
147
+
148
+
149
+ else:
150
+ pattern_matching_result = 5
151
+
152
+ if pattern_matching_result == 0:
153
+ pattern_input: tuple[str | None, int, FSharpList[Remark], FSharpList[OntologySourceReference]] = from_rows(line_number + 1, en)
154
+ last_line_mut = pattern_input[0]
155
+ ontology_source_references_mut = pattern_input[3]
156
+ investigation_info_mut = investigation_info
157
+ publications_mut = publications
158
+ contacts_mut = contacts
159
+ studies_mut = studies
160
+ remarks_mut = append(remarks, pattern_input[2])
161
+ line_number_mut = pattern_input[1]
162
+ continue
163
+
164
+ elif pattern_matching_result == 1:
165
+ pattern_input_1: tuple[str | None, int, FSharpList[Remark], ArcInvestigation_InvestigationInfo] = ArcInvestigation_InvestigationInfo_fromRows(line_number + 1, en)
166
+ last_line_mut = pattern_input_1[0]
167
+ ontology_source_references_mut = ontology_source_references
168
+ investigation_info_mut = pattern_input_1[3]
169
+ publications_mut = publications
170
+ contacts_mut = contacts
171
+ studies_mut = studies
172
+ remarks_mut = append(remarks, pattern_input_1[2])
173
+ line_number_mut = pattern_input_1[1]
174
+ continue
175
+
176
+ elif pattern_matching_result == 2:
177
+ pattern_input_2: tuple[str | None, int, FSharpList[Remark], FSharpList[Publication]] = from_rows_1("Investigation Publication", line_number + 1, en)
178
+ last_line_mut = pattern_input_2[0]
179
+ ontology_source_references_mut = ontology_source_references
180
+ investigation_info_mut = investigation_info
181
+ publications_mut = pattern_input_2[3]
182
+ contacts_mut = contacts
183
+ studies_mut = studies
184
+ remarks_mut = append(remarks, pattern_input_2[2])
185
+ line_number_mut = pattern_input_2[1]
186
+ continue
187
+
188
+ elif pattern_matching_result == 3:
189
+ pattern_input_3: tuple[str | None, int, FSharpList[Remark], FSharpList[Person]] = from_rows_2("Investigation Person", line_number + 1, en)
190
+ last_line_mut = pattern_input_3[0]
191
+ ontology_source_references_mut = ontology_source_references
192
+ investigation_info_mut = investigation_info
193
+ publications_mut = publications
194
+ contacts_mut = pattern_input_3[3]
195
+ studies_mut = studies
196
+ remarks_mut = append(remarks, pattern_input_3[2])
197
+ line_number_mut = pattern_input_3[1]
198
+ continue
199
+
200
+ elif pattern_matching_result == 4:
201
+ pattern_input_4: tuple[str | None, int, FSharpList[Remark], tuple[ArcStudy, FSharpList[ArcAssay]] | None] = from_rows_3(line_number + 1, en)
202
+ study: tuple[ArcStudy, FSharpList[ArcAssay]] | None = pattern_input_4[3]
203
+ new_remarks_4: FSharpList[Remark] = pattern_input_4[2]
204
+ line_number_6: int = pattern_input_4[1] or 0
205
+ current_line_4: str | None = pattern_input_4[0]
206
+ if study is not None:
207
+ last_line_mut = current_line_4
208
+ ontology_source_references_mut = ontology_source_references
209
+ investigation_info_mut = investigation_info
210
+ publications_mut = publications
211
+ contacts_mut = contacts
212
+ studies_mut = cons(value_1(study), studies)
213
+ remarks_mut = append(remarks, new_remarks_4)
214
+ line_number_mut = line_number_6
215
+ continue
216
+
217
+ else:
218
+ last_line_mut = current_line_4
219
+ ontology_source_references_mut = ontology_source_references
220
+ investigation_info_mut = investigation_info
221
+ publications_mut = publications
222
+ contacts_mut = contacts
223
+ studies_mut = studies
224
+ remarks_mut = append(remarks, new_remarks_4)
225
+ line_number_mut = line_number_6
226
+ continue
227
+
228
+
229
+ elif pattern_matching_result == 5:
230
+ pattern_input_5: tuple[FSharpList[ArcStudy], FSharpList[ArcAssay]]
231
+ tupled_arg: tuple[FSharpList[ArcStudy], FSharpList[FSharpList[ArcAssay]]] = unzip(studies)
232
+ def projection(a_1: ArcAssay, last_line: Any=last_line, ontology_source_references: Any=ontology_source_references, investigation_info: Any=investigation_info, publications: Any=publications, contacts: Any=contacts, studies: Any=studies, remarks: Any=remarks, line_number: Any=line_number) -> str:
233
+ return a_1.Identifier
234
+
235
+ class ObjectExpr1397:
236
+ @property
237
+ def Equals(self) -> Callable[[str, str], bool]:
238
+ def _arrow1396(x: str, y: str) -> bool:
239
+ return x == y
240
+
241
+ return _arrow1396
242
+
243
+ @property
244
+ def GetHashCode(self) -> Callable[[str], int]:
245
+ return string_hash
246
+
247
+ pattern_input_5 = (reverse(tupled_arg[0]), List_distinctBy(projection, concat(tupled_arg[1]), ObjectExpr1397()))
248
+ return ArcInvestigation_fromParts(investigation_info, ontology_source_references, publications, contacts, pattern_input_5[0], pattern_input_5[1], remarks)
249
+
250
+ break
251
+
252
+ if en.System_Collections_IEnumerator_MoveNext():
253
+ return loop(SparseRowModule_tryGetValueAt(0, en.System_Collections_Generic_IEnumerator_1_get_Current()), empty(), empty_investigation_info, empty(), empty(), empty(), empty(), 1)
254
+
255
+ else:
256
+ raise Exception("emptyInvestigationFile")
257
+
258
+
259
+
260
+ def ArcInvestigation_toRows(investigation: ArcInvestigation) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
261
+ def _arrow1410(__unit: None=None, investigation: Any=investigation) -> FSharpList[IEnumerable_1[tuple[int, str]]]:
262
+ remarks: FSharpList[Remark] = of_seq(investigation.Remarks)
263
+ def _arrow1408(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
264
+ def _arrow1407(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
265
+ def _arrow1406(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
266
+ def _arrow1405(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
267
+ def _arrow1404(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
268
+ def _arrow1403(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
269
+ def _arrow1402(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
270
+ def _arrow1401(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
271
+ def _arrow1400(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
272
+ def _arrow1399(study_identifier: str) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
273
+ study: ArcStudy = default_arg(investigation.TryGetStudy(study_identifier), ArcStudy(study_identifier))
274
+ def _arrow1398(__unit: None=None) -> IEnumerable_1[IEnumerable_1[tuple[int, str]]]:
275
+ return to_rows_3(study, None)
276
+
277
+ return append_1(singleton(SparseRowModule_fromValues(to_enumerable(["STUDY"]))), delay(_arrow1398))
278
+
279
+ return collect(_arrow1399, investigation.RegisteredStudyIdentifiers)
280
+
281
+ return append_1(to_rows_2("Investigation Person", of_seq(investigation.Contacts)), delay(_arrow1400))
282
+
283
+ return append_1(singleton(SparseRowModule_fromValues(to_enumerable(["INVESTIGATION CONTACTS"]))), delay(_arrow1401))
284
+
285
+ return append_1(to_rows_1("Investigation Publication", of_seq(investigation.Publications)), delay(_arrow1402))
286
+
287
+ return append_1(singleton(SparseRowModule_fromValues(to_enumerable(["INVESTIGATION PUBLICATIONS"]))), delay(_arrow1403))
288
+
289
+ return append_1(ArcInvestigation_InvestigationInfo_toRows_Z720BD3FF(investigation), delay(_arrow1404))
290
+
291
+ return append_1(singleton(SparseRowModule_fromValues(to_enumerable(["INVESTIGATION"]))), delay(_arrow1405))
292
+
293
+ return append_1(to_rows(of_seq(investigation.OntologySourceReferences)), delay(_arrow1406))
294
+
295
+ return append_1(singleton(SparseRowModule_fromValues(to_enumerable(["ONTOLOGY SOURCE REFERENCE"]))), delay(_arrow1407))
296
+
297
+ rows: IEnumerable_1[IEnumerable_1[tuple[int, str]]] = delay(_arrow1408)
298
+ try:
299
+ def mapping(remark: Remark) -> tuple[int, str]:
300
+ return Remark.to_tuple(remark)
301
+
302
+ class ObjectExpr1409:
303
+ @property
304
+ def Compare(self) -> Callable[[int, int], int]:
305
+ return compare_primitives
306
+
307
+ rm: Any = of_list(map(mapping, remarks), ObjectExpr1409())
308
+ def loop(i_mut: int, l_mut: FSharpList[IEnumerable_1[tuple[int, str]]], nl_mut: FSharpList[IEnumerable_1[tuple[int, str]]]) -> FSharpList[IEnumerable_1[tuple[int, str]]]:
309
+ while True:
310
+ (i, l, nl) = (i_mut, l_mut, nl_mut)
311
+ match_value: str | None = try_find(i, rm)
312
+ if match_value is None:
313
+ if not is_empty(l):
314
+ i_mut = i + 1
315
+ l_mut = tail(l)
316
+ nl_mut = cons(head(l), nl)
317
+ continue
318
+
319
+ else:
320
+ return nl
321
+
322
+
323
+ else:
324
+ remark_1: str = match_value
325
+ i_mut = i + 1
326
+ l_mut = l
327
+ nl_mut = cons(SparseRowModule_fromValues(to_enumerable([Remark_wrapRemark(remark_1)])), nl)
328
+ continue
329
+
330
+ break
331
+
332
+ return reverse(loop(1, of_seq(rows), empty()))
333
+
334
+ except Exception as match_value_1:
335
+ return to_list(rows)
336
+
337
+
338
+ return _arrow1410()
339
+
340
+
341
+ def ArcInvestigation_toMetadataCollection(investigation: ArcInvestigation) -> IEnumerable_1[IEnumerable_1[str | None]]:
342
+ def mapping(row: IEnumerable_1[tuple[int, str]], investigation: Any=investigation) -> IEnumerable_1[str | None]:
343
+ return SparseRowModule_getAllValues(row)
344
+
345
+ return map_1(mapping, ArcInvestigation_toRows(investigation))
346
+
347
+
348
+ def ArcInvestigation_fromMetadataCollection(collection: IEnumerable_1[IEnumerable_1[str | None]]) -> ArcInvestigation:
349
+ def mapping(v: IEnumerable_1[str | None], collection: Any=collection) -> IEnumerable_1[tuple[int, str]]:
350
+ return SparseRowModule_fromAllValues(v)
351
+
352
+ return ArcInvestigation_fromRows(map_1(mapping, collection))
353
+
354
+
355
+ def ArcInvestigation_isMetadataSheetName(name: str) -> bool:
356
+ if name == "isa_investigation":
357
+ return True
358
+
359
+ else:
360
+ return name == "Investigation"
361
+
362
+
363
+
364
+ def ArcInvestigation_isMetadataSheet(sheet: FsWorksheet) -> bool:
365
+ return ArcInvestigation_isMetadataSheetName(sheet.Name)
366
+
367
+
368
+ def ArcInvestigation_tryGetMetadataSheet(doc: FsWorkbook) -> FsWorksheet | None:
369
+ def predicate(sheet: FsWorksheet, doc: Any=doc) -> bool:
370
+ return ArcInvestigation_isMetadataSheet(sheet)
371
+
372
+ return try_find_1(predicate, doc.GetWorksheets())
373
+
374
+
375
+ def ARCtrl_ArcInvestigation__ArcInvestigation_fromFsWorkbook_Static_32154C9D(doc: FsWorkbook) -> ArcInvestigation:
376
+ try:
377
+ def _arrow1411(__unit: None=None) -> Array[FsRow]:
378
+ sheet_1: FsWorksheet
379
+ match_value: FsWorksheet | None = ArcInvestigation_tryGetMetadataSheet(doc)
380
+ if match_value is None:
381
+ raise Exception("Could not find metadata sheet with sheetname \"isa_investigation\" or deprecated sheetname \"Investigation\"")
382
+
383
+ else:
384
+ sheet_1 = match_value
385
+
386
+ return FsWorksheet.get_rows(sheet_1)
387
+
388
+ return ArcInvestigation_fromRows(map_1(SparseRowModule_fromFsRow, _arrow1411()))
389
+
390
+ except Exception as err:
391
+ arg: str = str(err)
392
+ return to_fail(printf("Could not read investigation from spreadsheet: %s"))(arg)
393
+
394
+
395
+
396
+ def ARCtrl_ArcInvestigation__ArcInvestigation_toFsWorkbook_Static_Z720BD3FF(investigation: ArcInvestigation) -> FsWorkbook:
397
+ try:
398
+ wb: FsWorkbook = FsWorkbook()
399
+ sheet: FsWorksheet = FsWorksheet("isa_investigation")
400
+ def action(row_i: int, r: IEnumerable_1[tuple[int, str]]) -> None:
401
+ SparseRowModule_writeToSheet(row_i + 1, r, sheet)
402
+
403
+ iterate_indexed(action, ArcInvestigation_toRows(investigation))
404
+ wb.AddWorksheet(sheet)
405
+ return wb
406
+
407
+ except Exception as err:
408
+ arg: str = str(err)
409
+ return to_fail(printf("Could not write investigation to spreadsheet: %s"))(arg)
410
+
411
+
412
+
413
+ def ARCtrl_ArcInvestigation__ArcInvestigation_ToFsWorkbook(this: ArcInvestigation) -> FsWorkbook:
414
+ return ARCtrl_ArcInvestigation__ArcInvestigation_toFsWorkbook_Static_Z720BD3FF(this)
415
+
416
+
417
+ __all__ = ["ArcInvestigation_InvestigationInfo_reflection", "ArcInvestigation_InvestigationInfo_create", "ArcInvestigation_InvestigationInfo_get_Labels", "ArcInvestigation_InvestigationInfo_FromSparseTable_3ECCA699", "ArcInvestigation_InvestigationInfo_ToSparseTable_Z720BD3FF", "ArcInvestigation_InvestigationInfo_fromRows", "ArcInvestigation_InvestigationInfo_toRows_Z720BD3FF", "ArcInvestigation_fromParts", "ArcInvestigation_fromRows", "ArcInvestigation_toRows", "ArcInvestigation_toMetadataCollection", "ArcInvestigation_fromMetadataCollection", "ArcInvestigation_isMetadataSheetName", "ArcInvestigation_isMetadataSheet", "ArcInvestigation_tryGetMetadataSheet", "ARCtrl_ArcInvestigation__ArcInvestigation_fromFsWorkbook_Static_32154C9D", "ARCtrl_ArcInvestigation__ArcInvestigation_toFsWorkbook_Static_Z720BD3FF", "ARCtrl_ArcInvestigation__ArcInvestigation_ToFsWorkbook"]
418
+