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.
- arctrl/__init__.py +23 -0
- arctrl/cwl.py +12 -0
- arctrl/py/CWL/__init__.py +0 -0
- arctrl/py/CWL/cwlprocessing_unit.py +221 -0
- arctrl/py/CWL/cwltypes.py +364 -0
- arctrl/py/CWL/decode.py +3532 -0
- arctrl/py/CWL/encode.py +1905 -0
- arctrl/py/CWL/expression_tool_description.py +192 -0
- arctrl/py/CWL/hash_helpers.py +60 -0
- arctrl/py/CWL/inputs.py +122 -0
- arctrl/py/CWL/operation_description.py +169 -0
- arctrl/py/CWL/outputs.py +171 -0
- arctrl/py/CWL/parameter_reference.py +74 -0
- arctrl/py/CWL/requirements.py +350 -0
- arctrl/py/CWL/tool_description.py +192 -0
- arctrl/py/CWL/workflow_description.py +181 -0
- arctrl/py/CWL/workflow_steps.py +354 -0
- arctrl/py/Contract/__init__.py +0 -0
- arctrl/py/Contract/arc.py +89 -0
- arctrl/py/Contract/arc_assay.py +125 -0
- arctrl/py/Contract/arc_investigation.py +88 -0
- arctrl/py/Contract/arc_run.py +291 -0
- arctrl/py/Contract/arc_study.py +126 -0
- arctrl/py/Contract/arc_workflow.py +213 -0
- arctrl/py/Contract/contract.py +153 -0
- arctrl/py/Contract/datamap.py +396 -0
- arctrl/py/Contract/git.py +116 -0
- arctrl/py/Contract/license.py +58 -0
- arctrl/py/Contract/validation_packages_config.py +107 -0
- arctrl/py/ContractIO/__init__.py +0 -0
- arctrl/py/ContractIO/contract_io.py +350 -0
- arctrl/py/ContractIO/file_system_helper.py +264 -0
- arctrl/py/Conversion/__init__.py +0 -0
- arctrl/py/Conversion/assay.py +151 -0
- arctrl/py/Conversion/basic.py +559 -0
- arctrl/py/Conversion/column_index.py +91 -0
- arctrl/py/Conversion/datamap.py +36 -0
- arctrl/py/Conversion/date_time.py +32 -0
- arctrl/py/Conversion/investigation.py +171 -0
- arctrl/py/Conversion/person.py +148 -0
- arctrl/py/Conversion/process.py +828 -0
- arctrl/py/Conversion/run.py +367 -0
- arctrl/py/Conversion/scholarly_article.py +163 -0
- arctrl/py/Conversion/study.py +99 -0
- arctrl/py/Conversion/table.py +229 -0
- arctrl/py/Conversion/workflow.py +680 -0
- arctrl/py/Core/Helper/__init__.py +0 -0
- arctrl/py/Core/Helper/collections_.py +512 -0
- arctrl/py/Core/Helper/date_time.py +26 -0
- arctrl/py/Core/Helper/hash_codes.py +60 -0
- arctrl/py/Core/Helper/identifier.py +290 -0
- arctrl/py/Core/Helper/orcid.py +42 -0
- arctrl/py/Core/Helper/printer.py +13 -0
- arctrl/py/Core/Helper/regex.py +554 -0
- arctrl/py/Core/Helper/sem_ver.py +71 -0
- arctrl/py/Core/Helper/url.py +148 -0
- arctrl/py/Core/Process/__init__.py +0 -0
- arctrl/py/Core/Process/column_index.py +280 -0
- arctrl/py/Core/Process/component.py +200 -0
- arctrl/py/Core/Process/factor.py +151 -0
- arctrl/py/Core/Process/factor_value.py +182 -0
- arctrl/py/Core/Process/material.py +74 -0
- arctrl/py/Core/Process/material_attribute.py +95 -0
- arctrl/py/Core/Process/material_attribute_value.py +184 -0
- arctrl/py/Core/Process/material_type.py +45 -0
- arctrl/py/Core/Process/process.py +477 -0
- arctrl/py/Core/Process/process_input.py +265 -0
- arctrl/py/Core/Process/process_output.py +235 -0
- arctrl/py/Core/Process/process_parameter_value.py +200 -0
- arctrl/py/Core/Process/process_sequence.py +435 -0
- arctrl/py/Core/Process/protocol.py +175 -0
- arctrl/py/Core/Process/protocol_parameter.py +98 -0
- arctrl/py/Core/Process/sample.py +82 -0
- arctrl/py/Core/Process/source.py +62 -0
- arctrl/py/Core/Table/__init__.py +0 -0
- arctrl/py/Core/Table/arc_table.py +1206 -0
- arctrl/py/Core/Table/arc_table_aux.py +1308 -0
- arctrl/py/Core/Table/arc_tables.py +574 -0
- arctrl/py/Core/Table/composite_cell.py +319 -0
- arctrl/py/Core/Table/composite_column.py +73 -0
- arctrl/py/Core/Table/composite_header.py +739 -0
- arctrl/py/Core/__init__.py +0 -0
- arctrl/py/Core/arc_types.py +5312 -0
- arctrl/py/Core/comment.py +128 -0
- arctrl/py/Core/comment_list.py +127 -0
- arctrl/py/Core/conversion.py +1375 -0
- arctrl/py/Core/data.py +247 -0
- arctrl/py/Core/data_context.py +157 -0
- arctrl/py/Core/data_file.py +112 -0
- arctrl/py/Core/datamap.py +217 -0
- arctrl/py/Core/identifier_setters.py +43 -0
- arctrl/py/Core/iproperty_value.py +36 -0
- arctrl/py/Core/ontology_annotation.py +298 -0
- arctrl/py/Core/ontology_source_reference.py +114 -0
- arctrl/py/Core/person.py +259 -0
- arctrl/py/Core/publication.py +161 -0
- arctrl/py/Core/template.py +231 -0
- arctrl/py/Core/templates.py +148 -0
- arctrl/py/Core/uri.py +11 -0
- arctrl/py/Core/value.py +188 -0
- arctrl/py/FileSystem/__init__.py +0 -0
- arctrl/py/FileSystem/commit.py +21 -0
- arctrl/py/FileSystem/default_gitattributes.py +1 -0
- arctrl/py/FileSystem/default_gitignore.py +1 -0
- arctrl/py/FileSystem/default_license.py +1 -0
- arctrl/py/FileSystem/file_system.py +58 -0
- arctrl/py/FileSystem/file_system_tree.py +483 -0
- arctrl/py/FileSystem/path.py +266 -0
- arctrl/py/Json/Datamap/__init__.py +0 -0
- arctrl/py/Json/Datamap/data_context.py +101 -0
- arctrl/py/Json/Datamap/datamap.py +53 -0
- arctrl/py/Json/Process/__init__.py +0 -0
- arctrl/py/Json/Process/assay_materials.py +46 -0
- arctrl/py/Json/Process/component.py +125 -0
- arctrl/py/Json/Process/factor.py +107 -0
- arctrl/py/Json/Process/factor_value.py +101 -0
- arctrl/py/Json/Process/material.py +226 -0
- arctrl/py/Json/Process/material_attribute.py +79 -0
- arctrl/py/Json/Process/material_attribute_value.py +101 -0
- arctrl/py/Json/Process/material_type.py +53 -0
- arctrl/py/Json/Process/process.py +296 -0
- arctrl/py/Json/Process/process_input.py +83 -0
- arctrl/py/Json/Process/process_output.py +67 -0
- arctrl/py/Json/Process/process_parameter_value.py +81 -0
- arctrl/py/Json/Process/protocol.py +354 -0
- arctrl/py/Json/Process/protocol_parameter.py +91 -0
- arctrl/py/Json/Process/sample.py +277 -0
- arctrl/py/Json/Process/source.py +214 -0
- arctrl/py/Json/Process/study_materials.py +52 -0
- arctrl/py/Json/Process/value.py +56 -0
- arctrl/py/Json/ROCrate/__init__.py +0 -0
- arctrl/py/Json/ROCrate/ldcontext.py +143 -0
- arctrl/py/Json/ROCrate/ldgraph.py +117 -0
- arctrl/py/Json/ROCrate/ldnode.py +304 -0
- arctrl/py/Json/ROCrate/ldref.py +44 -0
- arctrl/py/Json/ROCrate/ldvalue.py +102 -0
- arctrl/py/Json/Table/__init__.py +0 -0
- arctrl/py/Json/Table/arc_table.py +375 -0
- arctrl/py/Json/Table/cell_table.py +83 -0
- arctrl/py/Json/Table/composite_cell.py +136 -0
- arctrl/py/Json/Table/composite_header.py +67 -0
- arctrl/py/Json/Table/iotype.py +24 -0
- arctrl/py/Json/Table/oatable.py +82 -0
- arctrl/py/Json/Table/templates.py +281 -0
- arctrl/py/Json/__init__.py +0 -0
- arctrl/py/Json/assay.py +600 -0
- arctrl/py/Json/comment.py +206 -0
- arctrl/py/Json/context/rocrate/__init__.py +0 -0
- arctrl/py/Json/context/rocrate/isa_assay_context.py +101 -0
- arctrl/py/Json/context/rocrate/isa_comment_context.py +60 -0
- arctrl/py/Json/context/rocrate/isa_component_context.py +77 -0
- arctrl/py/Json/context/rocrate/isa_data_context.py +74 -0
- arctrl/py/Json/context/rocrate/isa_factor_context.py +74 -0
- arctrl/py/Json/context/rocrate/isa_factor_value_context.py +84 -0
- arctrl/py/Json/context/rocrate/isa_investigation_context.py +110 -0
- arctrl/py/Json/context/rocrate/isa_material_attribute_context.py +64 -0
- arctrl/py/Json/context/rocrate/isa_material_attribute_value_context.py +80 -0
- arctrl/py/Json/context/rocrate/isa_material_context.py +71 -0
- arctrl/py/Json/context/rocrate/isa_ontology_annotation_context.py +68 -0
- arctrl/py/Json/context/rocrate/isa_ontology_source_reference_context.py +75 -0
- arctrl/py/Json/context/rocrate/isa_organization_context.py +55 -0
- arctrl/py/Json/context/rocrate/isa_person_context.py +131 -0
- arctrl/py/Json/context/rocrate/isa_process_context.py +94 -0
- arctrl/py/Json/context/rocrate/isa_process_parameter_value_context.py +80 -0
- arctrl/py/Json/context/rocrate/isa_protocol_context.py +97 -0
- arctrl/py/Json/context/rocrate/isa_protocol_parameter_context.py +64 -0
- arctrl/py/Json/context/rocrate/isa_publication_context.py +78 -0
- arctrl/py/Json/context/rocrate/isa_sample_context.py +65 -0
- arctrl/py/Json/context/rocrate/isa_source_context.py +66 -0
- arctrl/py/Json/context/rocrate/isa_study_context.py +125 -0
- arctrl/py/Json/context/rocrate/property_value_context.py +73 -0
- arctrl/py/Json/context/rocrate/rocrate_context.py +81 -0
- arctrl/py/Json/converter_options.py +23 -0
- arctrl/py/Json/data.py +356 -0
- arctrl/py/Json/data_file.py +63 -0
- arctrl/py/Json/decode.py +271 -0
- arctrl/py/Json/encode.py +140 -0
- arctrl/py/Json/idtable.py +44 -0
- arctrl/py/Json/investigation.py +695 -0
- arctrl/py/Json/ontology_annotation.py +404 -0
- arctrl/py/Json/ontology_source_reference.py +255 -0
- arctrl/py/Json/person.py +658 -0
- arctrl/py/Json/property_value.py +359 -0
- arctrl/py/Json/publication.py +279 -0
- arctrl/py/Json/run.py +275 -0
- arctrl/py/Json/string_table.py +87 -0
- arctrl/py/Json/study.py +793 -0
- arctrl/py/Json/workflow.py +307 -0
- arctrl/py/JsonIO/Process/__init__.py +0 -0
- arctrl/py/JsonIO/Process/component.py +60 -0
- arctrl/py/JsonIO/Process/factor.py +36 -0
- arctrl/py/JsonIO/Process/factor_value.py +38 -0
- arctrl/py/JsonIO/Process/material.py +60 -0
- arctrl/py/JsonIO/Process/material_attribute.py +38 -0
- arctrl/py/JsonIO/Process/material_attribute_value.py +60 -0
- arctrl/py/JsonIO/Process/material_type.py +36 -0
- arctrl/py/JsonIO/Process/process.py +60 -0
- arctrl/py/JsonIO/Process/process_input.py +38 -0
- arctrl/py/JsonIO/Process/process_output.py +60 -0
- arctrl/py/JsonIO/Process/process_parameter_value.py +60 -0
- arctrl/py/JsonIO/Process/process_sequence.py +71 -0
- arctrl/py/JsonIO/Process/protocol.py +60 -0
- arctrl/py/JsonIO/Process/protocol_parameter.py +36 -0
- arctrl/py/JsonIO/Process/sample.py +60 -0
- arctrl/py/JsonIO/Process/source.py +60 -0
- arctrl/py/JsonIO/Process/study_materials.py +52 -0
- arctrl/py/JsonIO/Process/value.py +32 -0
- arctrl/py/JsonIO/Table/__init__.py +0 -0
- arctrl/py/JsonIO/Table/arc_table.py +103 -0
- arctrl/py/JsonIO/Table/composite_cell.py +36 -0
- arctrl/py/JsonIO/Table/composite_header.py +36 -0
- arctrl/py/JsonIO/Table/compression.py +67 -0
- arctrl/py/JsonIO/Table/iotype.py +36 -0
- arctrl/py/JsonIO/Table/templates.py +113 -0
- arctrl/py/JsonIO/__init__.py +0 -0
- arctrl/py/JsonIO/assay.py +113 -0
- arctrl/py/JsonIO/comment.py +80 -0
- arctrl/py/JsonIO/data.py +60 -0
- arctrl/py/JsonIO/data_file.py +58 -0
- arctrl/py/JsonIO/datamap.py +36 -0
- arctrl/py/JsonIO/decode.py +9 -0
- arctrl/py/JsonIO/encode.py +1 -0
- arctrl/py/JsonIO/investigation.py +91 -0
- arctrl/py/JsonIO/ldobject.py +106 -0
- arctrl/py/JsonIO/ontology_annotation.py +80 -0
- arctrl/py/JsonIO/ontology_source_reference.py +80 -0
- arctrl/py/JsonIO/person.py +82 -0
- arctrl/py/JsonIO/publication.py +82 -0
- arctrl/py/JsonIO/run.py +68 -0
- arctrl/py/JsonIO/study.py +114 -0
- arctrl/py/JsonIO/workflow.py +68 -0
- arctrl/py/ROCrate/ISAProfile/__init__.py +0 -0
- arctrl/py/ROCrate/ISAProfile/assay.py +70 -0
- arctrl/py/ROCrate/ISAProfile/data.py +65 -0
- arctrl/py/ROCrate/ISAProfile/dataset.py +24 -0
- arctrl/py/ROCrate/ISAProfile/investigation.py +73 -0
- arctrl/py/ROCrate/ISAProfile/lab_process.py +162 -0
- arctrl/py/ROCrate/ISAProfile/lab_protocol.py +37 -0
- arctrl/py/ROCrate/ISAProfile/person.py +72 -0
- arctrl/py/ROCrate/ISAProfile/property_value.py +98 -0
- arctrl/py/ROCrate/ISAProfile/sample.py +64 -0
- arctrl/py/ROCrate/ISAProfile/scholarly_article.py +98 -0
- arctrl/py/ROCrate/ISAProfile/study.py +74 -0
- arctrl/py/ROCrate/LDTypes/__init__.py +0 -0
- arctrl/py/ROCrate/LDTypes/comment.py +131 -0
- arctrl/py/ROCrate/LDTypes/computational_workflow.py +455 -0
- arctrl/py/ROCrate/LDTypes/computer_language.py +269 -0
- arctrl/py/ROCrate/LDTypes/create_action.py +303 -0
- arctrl/py/ROCrate/LDTypes/creative_work.py +566 -0
- arctrl/py/ROCrate/LDTypes/dataset.py +943 -0
- arctrl/py/ROCrate/LDTypes/defined_term.py +131 -0
- arctrl/py/ROCrate/LDTypes/file.py +281 -0
- arctrl/py/ROCrate/LDTypes/formal_parameter.py +431 -0
- arctrl/py/ROCrate/LDTypes/lab_process.py +352 -0
- arctrl/py/ROCrate/LDTypes/lab_protocol.py +395 -0
- arctrl/py/ROCrate/LDTypes/organization.py +83 -0
- arctrl/py/ROCrate/LDTypes/person.py +484 -0
- arctrl/py/ROCrate/LDTypes/postal_address.py +195 -0
- arctrl/py/ROCrate/LDTypes/property_value.py +952 -0
- arctrl/py/ROCrate/LDTypes/sample.py +202 -0
- arctrl/py/ROCrate/LDTypes/scholarly_article.py +229 -0
- arctrl/py/ROCrate/LDTypes/software_source_code.py +310 -0
- arctrl/py/ROCrate/LDTypes/workflow_invocation.py +48 -0
- arctrl/py/ROCrate/LDTypes/workflow_protocol.py +52 -0
- arctrl/py/ROCrate/__init__.py +0 -0
- arctrl/py/ROCrate/arc_rocrate_metadata.py +39 -0
- arctrl/py/ROCrate/dyn_obj_extensions.py +1 -0
- arctrl/py/ROCrate/helper.py +8 -0
- arctrl/py/ROCrate/ldcontext.py +406 -0
- arctrl/py/ROCrate/ldobject.py +1247 -0
- arctrl/py/ROCrate/rocrate_context.py +51 -0
- arctrl/py/Spreadsheet/AnnotationTable/__init__.py +0 -0
- arctrl/py/Spreadsheet/AnnotationTable/arc_table.py +203 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_cell.py +78 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_column.py +305 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_header.py +623 -0
- arctrl/py/Spreadsheet/DatamapTable/__init__.py +0 -0
- arctrl/py/Spreadsheet/DatamapTable/datamap_column.py +114 -0
- arctrl/py/Spreadsheet/DatamapTable/datamap_header.py +621 -0
- arctrl/py/Spreadsheet/DatamapTable/datamap_table.py +118 -0
- arctrl/py/Spreadsheet/Metadata/__init__.py +0 -0
- arctrl/py/Spreadsheet/Metadata/assays.py +125 -0
- arctrl/py/Spreadsheet/Metadata/comment.py +77 -0
- arctrl/py/Spreadsheet/Metadata/contacts.py +134 -0
- arctrl/py/Spreadsheet/Metadata/conversions.py +190 -0
- arctrl/py/Spreadsheet/Metadata/design_descriptors.py +34 -0
- arctrl/py/Spreadsheet/Metadata/factors.py +107 -0
- arctrl/py/Spreadsheet/Metadata/ontology_annotation.py +88 -0
- arctrl/py/Spreadsheet/Metadata/ontology_source_reference.py +96 -0
- arctrl/py/Spreadsheet/Metadata/protocols.py +146 -0
- arctrl/py/Spreadsheet/Metadata/publication.py +122 -0
- arctrl/py/Spreadsheet/Metadata/run.py +122 -0
- arctrl/py/Spreadsheet/Metadata/sparse_table.py +499 -0
- arctrl/py/Spreadsheet/Metadata/study.py +312 -0
- arctrl/py/Spreadsheet/Metadata/workflow.py +159 -0
- arctrl/py/Spreadsheet/__init__.py +0 -0
- arctrl/py/Spreadsheet/arc_assay.py +233 -0
- arctrl/py/Spreadsheet/arc_investigation.py +435 -0
- arctrl/py/Spreadsheet/arc_run.py +190 -0
- arctrl/py/Spreadsheet/arc_study.py +144 -0
- arctrl/py/Spreadsheet/arc_workflow.py +177 -0
- arctrl/py/Spreadsheet/assembly_info.py +1 -0
- arctrl/py/Spreadsheet/collection_aux.py +167 -0
- arctrl/py/Spreadsheet/datamap.py +43 -0
- arctrl/py/Spreadsheet/template.py +460 -0
- arctrl/py/ValidationPackages/__init__.py +0 -0
- arctrl/py/ValidationPackages/validation_package.py +82 -0
- arctrl/py/ValidationPackages/validation_packages_config.py +132 -0
- arctrl/py/WebRequest/__init__.py +0 -0
- arctrl/py/WebRequest/web_request.py +9 -0
- arctrl/py/WebRequest/web_request_py.py +135 -0
- arctrl/py/WorkflowGraph/__init__.py +0 -0
- arctrl/py/WorkflowGraph/adapters.py +141 -0
- arctrl/py/WorkflowGraph/build_options.py +45 -0
- arctrl/py/WorkflowGraph/builder.py +720 -0
- arctrl/py/WorkflowGraph/graph_types.py +260 -0
- arctrl/py/WorkflowGraph/query_helpers.py +76 -0
- arctrl/py/WorkflowGraph/reference_parsing.py +59 -0
- arctrl/py/WorkflowGraph/visualization_siren.py +574 -0
- arctrl/py/WorkflowGraph/workflow_graph.py +119 -0
- arctrl/py/Yaml/__init__.py +0 -0
- arctrl/py/Yaml/decode.py +1 -0
- arctrl/py/Yaml/encode.py +10 -0
- arctrl/py/Yaml/validation_package.py +77 -0
- arctrl/py/Yaml/validation_packages_config.py +86 -0
- arctrl/py/__init__.py +0 -0
- arctrl/py/arc.py +1891 -0
- arctrl/py/column_index.py +280 -0
- arctrl/py/conversion.py +142 -0
- arctrl/py/cross_async.py +76 -0
- arctrl/py/cwlrun_resolver.py +228 -0
- arctrl/py/fable_modules/dynamic_obj/__init__.py +0 -0
- arctrl/py/fable_modules/dynamic_obj/dyn_obj.py +136 -0
- arctrl/py/fable_modules/dynamic_obj/dynamic_obj.py +415 -0
- arctrl/py/fable_modules/dynamic_obj/fable_js.py +1 -0
- arctrl/py/fable_modules/dynamic_obj/fable_py.py +288 -0
- arctrl/py/fable_modules/dynamic_obj/hash_codes.py +82 -0
- arctrl/py/fable_modules/dynamic_obj/property_helper.py +25 -0
- arctrl/py/fable_modules/dynamic_obj/reflection_utils.py +87 -0
- arctrl/py/fable_modules/fable_library/__init__.py +0 -0
- arctrl/py/fable_modules/fable_library/array_.py +1528 -0
- arctrl/py/fable_modules/fable_library/async_.py +377 -0
- arctrl/py/fable_modules/fable_library/async_builder.py +379 -0
- arctrl/py/fable_modules/fable_library/big_int.py +330 -0
- arctrl/py/fable_modules/fable_library/bit_converter.py +131 -0
- arctrl/py/fable_modules/fable_library/boolean.py +26 -0
- arctrl/py/fable_modules/fable_library/char.py +237 -0
- arctrl/py/fable_modules/fable_library/choice.py +212 -0
- arctrl/py/fable_modules/fable_library/date.py +779 -0
- arctrl/py/fable_modules/fable_library/date_offset.py +79 -0
- arctrl/py/fable_modules/fable_library/decimal_.py +190 -0
- arctrl/py/fable_modules/fable_library/diagnostics.py +54 -0
- arctrl/py/fable_modules/fable_library/double.py +87 -0
- arctrl/py/fable_modules/fable_library/encoding.py +41 -0
- arctrl/py/fable_modules/fable_library/event.py +206 -0
- arctrl/py/fable_modules/fable_library/file.py +107 -0
- arctrl/py/fable_modules/fable_library/fsharp_collections.py +52 -0
- arctrl/py/fable_modules/fable_library/fsharp_core.py +123 -0
- arctrl/py/fable_modules/fable_library/global_.py +63 -0
- arctrl/py/fable_modules/fable_library/guid.py +41 -0
- arctrl/py/fable_modules/fable_library/int32.py +73 -0
- arctrl/py/fable_modules/fable_library/list.py +1788 -0
- arctrl/py/fable_modules/fable_library/long.py +240 -0
- arctrl/py/fable_modules/fable_library/mailbox_processor.py +179 -0
- arctrl/py/fable_modules/fable_library/map.py +1854 -0
- arctrl/py/fable_modules/fable_library/map_util.py +148 -0
- arctrl/py/fable_modules/fable_library/mutable_map.py +397 -0
- arctrl/py/fable_modules/fable_library/mutable_set.py +279 -0
- arctrl/py/fable_modules/fable_library/native.py +45 -0
- arctrl/py/fable_modules/fable_library/numeric.py +46 -0
- arctrl/py/fable_modules/fable_library/observable.py +222 -0
- arctrl/py/fable_modules/fable_library/option.py +128 -0
- arctrl/py/fable_modules/fable_library/path.py +62 -0
- arctrl/py/fable_modules/fable_library/range.py +117 -0
- arctrl/py/fable_modules/fable_library/reflection.py +463 -0
- arctrl/py/fable_modules/fable_library/reg_exp.py +137 -0
- arctrl/py/fable_modules/fable_library/resize_array.py +31 -0
- arctrl/py/fable_modules/fable_library/result.py +212 -0
- arctrl/py/fable_modules/fable_library/seq.py +1979 -0
- arctrl/py/fable_modules/fable_library/seq2.py +221 -0
- arctrl/py/fable_modules/fable_library/set.py +2414 -0
- arctrl/py/fable_modules/fable_library/singleton_local_time_zone.py +36 -0
- arctrl/py/fable_modules/fable_library/string_.py +573 -0
- arctrl/py/fable_modules/fable_library/system_collections_generic.py +462 -0
- arctrl/py/fable_modules/fable_library/system_text.py +237 -0
- arctrl/py/fable_modules/fable_library/task.py +116 -0
- arctrl/py/fable_modules/fable_library/task_builder.py +122 -0
- arctrl/py/fable_modules/fable_library/thread.py +5 -0
- arctrl/py/fable_modules/fable_library/time_span.py +283 -0
- arctrl/py/fable_modules/fable_library/timer.py +24 -0
- arctrl/py/fable_modules/fable_library/types.py +401 -0
- arctrl/py/fable_modules/fable_library/uri.py +109 -0
- arctrl/py/fable_modules/fable_library/util.py +2735 -0
- arctrl/py/fable_modules/fable_openpyxl/__init__.py +0 -0
- arctrl/py/fable_modules/fable_openpyxl/openpyxl.py +362 -0
- arctrl/py/fable_modules/fable_python/cognite-sdk/__init__.py +0 -0
- arctrl/py/fable_modules/fable_python/cognite-sdk/cognite_sdk.py +22 -0
- arctrl/py/fable_modules/fable_python/flask/__init__.py +0 -0
- arctrl/py/fable_modules/fable_python/flask/flask.py +34 -0
- arctrl/py/fable_modules/fable_python/jupyter/__init__.py +0 -0
- arctrl/py/fable_modules/fable_python/jupyter/ipy_widgets.py +47 -0
- arctrl/py/fable_modules/fable_python/jupyter/ipython.py +13 -0
- arctrl/py/fable_modules/fable_python/stdlib/__init__.py +0 -0
- arctrl/py/fable_modules/fable_python/stdlib/ast.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/asyncio/__init__.py +0 -0
- arctrl/py/fable_modules/fable_python/stdlib/asyncio/events.py +17 -0
- arctrl/py/fable_modules/fable_python/stdlib/asyncio/futures.py +52 -0
- arctrl/py/fable_modules/fable_python/stdlib/asyncio/tasks.py +38 -0
- arctrl/py/fable_modules/fable_python/stdlib/base64_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/builtins_.py +38 -0
- arctrl/py/fable_modules/fable_python/stdlib/html.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/json.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/math_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/os_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/queue_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/string_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/sys_.py +30 -0
- arctrl/py/fable_modules/fable_python/stdlib/time_.py +1 -0
- arctrl/py/fable_modules/fable_python/stdlib/tk_inter.py +1 -0
- arctrl/py/fable_modules/fs_spreadsheet/Cells/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cell.py +340 -0
- arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cells_collection.py +466 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/cell_builder.py +214 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/column_builder.py +139 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/dsl.py +50 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/expression.py +65 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/operators.py +9 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/row_builder.py +139 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/sheet_builder.py +118 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/table_builder.py +122 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/transform.py +463 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/types.py +314 -0
- arctrl/py/fable_modules/fs_spreadsheet/DSL/workbook_builder.py +106 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/cell.py +103 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/column.py +70 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/row.py +70 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/table.py +54 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/value.py +93 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/workbook.py +71 -0
- arctrl/py/fable_modules/fs_spreadsheet/Json/worksheet.py +216 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range.py +43 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_address.py +190 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_base.py +92 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_column.py +77 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_row.py +48 -0
- arctrl/py/fable_modules/fs_spreadsheet/Tables/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table.py +461 -0
- arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_field.py +117 -0
- arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_row.py +23 -0
- arctrl/py/fable_modules/fs_spreadsheet/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_address.py +236 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_column.py +172 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_row.py +183 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_workbook.py +192 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_worksheet.py +610 -0
- arctrl/py/fable_modules/fs_spreadsheet/hash_codes.py +60 -0
- arctrl/py/fable_modules/fs_spreadsheet/sheet_builder.py +329 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/cell.py +60 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/cell_type.py +50 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/fs_extension.py +60 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/json.py +47 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/table.py +54 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/workbook.py +41 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/worksheet.py +52 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/xlsx.py +37 -0
- arctrl/py/fable_modules/siren/__init__.py +0 -0
- arctrl/py/fable_modules/siren/config.py +1038 -0
- arctrl/py/fable_modules/siren/formatting.py +1121 -0
- arctrl/py/fable_modules/siren/siren.py +1941 -0
- arctrl/py/fable_modules/siren/siren_types.py +1229 -0
- arctrl/py/fable_modules/siren/theme_variables.py +517 -0
- arctrl/py/fable_modules/siren/util.py +37 -0
- arctrl/py/fable_modules/siren/yaml.py +101 -0
- arctrl/py/fable_modules/thoth_json_core/__init__.py +0 -0
- arctrl/py/fable_modules/thoth_json_core/decode.py +1614 -0
- arctrl/py/fable_modules/thoth_json_core/encode.py +305 -0
- arctrl/py/fable_modules/thoth_json_core/types.py +181 -0
- arctrl/py/fable_modules/thoth_json_python/__init__.py +0 -0
- arctrl/py/fable_modules/thoth_json_python/decode.py +112 -0
- arctrl/py/fable_modules/thoth_json_python/encode.py +72 -0
- arctrl/py/fable_modules/thoth_json_python/python.py +1 -0
- arctrl/py/fable_modules/yamlicious/Interop/__init__.py +0 -0
- arctrl/py/fable_modules/yamlicious/Interop/js_interop.py +1 -0
- arctrl/py/fable_modules/yamlicious/Interop/py_interop.py +7 -0
- arctrl/py/fable_modules/yamlicious/__init__.py +0 -0
- arctrl/py/fable_modules/yamlicious/decode.py +1784 -0
- arctrl/py/fable_modules/yamlicious/encode.py +84 -0
- arctrl/py/fable_modules/yamlicious/flow_to_block.py +994 -0
- arctrl/py/fable_modules/yamlicious/library.py +10 -0
- arctrl/py/fable_modules/yamlicious/persil.py +57 -0
- arctrl/py/fable_modules/yamlicious/preprocessing.py +99 -0
- arctrl/py/fable_modules/yamlicious/reader.py +739 -0
- arctrl/py/fable_modules/yamlicious/regex.py +29 -0
- arctrl/py/fable_modules/yamlicious/regex_active_patterns.py +265 -0
- arctrl/py/fable_modules/yamlicious/writer.py +175 -0
- arctrl/py/fable_modules/yamlicious/yamlicious_types.py +128 -0
- arctrl/py/json.py +389 -0
- arctrl/py/license.py +169 -0
- arctrl/py/rocrate_io.py +242 -0
- arctrl/py/template_web.py +23 -0
- arctrl/py/xlsx.py +212 -0
- arctrl/py/yaml.py +79 -0
- arctrl/rocrate.py +21 -0
- arctrl-3.0.0.dist-info/METADATA +157 -0
- arctrl-3.0.0.dist-info/RECORD +511 -0
- arctrl-3.0.0.dist-info/WHEEL +4 -0
- arctrl-3.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""Task handling.
|
|
2
|
+
|
|
3
|
+
This module implements .NET
|
|
4
|
+
[tasks](https://docs.microsoft.com/en-us/dotnet/standard/async-in-depth)
|
|
5
|
+
using Python async / await.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
from asyncio import AbstractEventLoop, Future
|
|
12
|
+
from collections.abc import Awaitable
|
|
13
|
+
from typing import Any, Generic, TypeVar
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
_T = TypeVar("_T")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TaskCompletionSource(Generic[_T]):
|
|
20
|
+
__slots__ = "loop", "future"
|
|
21
|
+
|
|
22
|
+
def __init__(self) -> None:
|
|
23
|
+
self.loop: AbstractEventLoop = asyncio.get_event_loop()
|
|
24
|
+
self.future: Future[_T] = self.loop.create_future()
|
|
25
|
+
|
|
26
|
+
def SetResult(self, value: _T) -> None:
|
|
27
|
+
"""Set result.
|
|
28
|
+
|
|
29
|
+
Transitions the underlying Task[TResult] into the
|
|
30
|
+
RanToCompletion state.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def action():
|
|
34
|
+
self.future.set_result(value)
|
|
35
|
+
|
|
36
|
+
self.loop.call_soon_threadsafe(action)
|
|
37
|
+
|
|
38
|
+
def SetCancelled(self) -> None:
|
|
39
|
+
"""Set cancelled.
|
|
40
|
+
|
|
41
|
+
Transitions the underlying Task[TResult] into the Canceled
|
|
42
|
+
state.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def action():
|
|
46
|
+
self.future.cancel()
|
|
47
|
+
|
|
48
|
+
self.loop.call_soon_threadsafe(action)
|
|
49
|
+
|
|
50
|
+
def SetException(self, exception: Exception) -> None:
|
|
51
|
+
"""Set exception.
|
|
52
|
+
|
|
53
|
+
Transitions the underlying Task[TResult] into the Faulted state
|
|
54
|
+
and binds it to a specified exception.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def action():
|
|
58
|
+
self.future.set_exception(exception)
|
|
59
|
+
|
|
60
|
+
self.loop.call_soon_threadsafe(action)
|
|
61
|
+
|
|
62
|
+
def get_task(self) -> Awaitable[_T]:
|
|
63
|
+
return asyncio.ensure_future(self.future)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
async def zero() -> None:
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
async def from_result(value: _T) -> _T:
|
|
71
|
+
return value
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_awaiter(value: Awaitable[_T]) -> Awaitable[_T]:
|
|
75
|
+
# Wrap awaitable in coroutine (so we can run it using create_task)
|
|
76
|
+
async def get_value() -> _T:
|
|
77
|
+
return await asyncio.ensure_future(value)
|
|
78
|
+
|
|
79
|
+
return get_value()
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def get_result(value: Awaitable[_T]) -> _T:
|
|
83
|
+
"""Get the result.
|
|
84
|
+
|
|
85
|
+
Ends the wait for the completion of the asynchronous task.
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
async def runner() -> _T:
|
|
89
|
+
return await value
|
|
90
|
+
|
|
91
|
+
return asyncio.run(runner())
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def start(task: Awaitable[Any]) -> None:
|
|
95
|
+
async def runner():
|
|
96
|
+
return await task
|
|
97
|
+
|
|
98
|
+
asyncio.create_task(runner())
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def run_synchronously(task: Awaitable[Any]) -> None:
|
|
102
|
+
async def runner():
|
|
103
|
+
return await task
|
|
104
|
+
|
|
105
|
+
asyncio.run(runner())
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
__all__ = [
|
|
109
|
+
"get_awaiter",
|
|
110
|
+
"get_result",
|
|
111
|
+
"from_result",
|
|
112
|
+
"start",
|
|
113
|
+
"TaskCompletionSource",
|
|
114
|
+
"zero",
|
|
115
|
+
"run_synchronously",
|
|
116
|
+
]
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Awaitable, Callable, Iterable
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
Protocol,
|
|
7
|
+
TypeVar,
|
|
8
|
+
overload,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from .task import from_result, zero
|
|
12
|
+
from .util import IDisposable
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
_T = TypeVar("_T")
|
|
16
|
+
_T_co = TypeVar("_T_co", covariant=True)
|
|
17
|
+
_TD = TypeVar("_TD", bound=IDisposable)
|
|
18
|
+
_U = TypeVar("_U")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Delayed(Protocol[_T_co]):
|
|
22
|
+
def __call__(self, __unit: None | None = None) -> Awaitable[_T_co]: ...
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TaskBuilder:
|
|
26
|
+
def Bind(self, computation: Awaitable[_T], binder: Callable[[_T], Awaitable[_U]]) -> Awaitable[_U]:
|
|
27
|
+
async def bind() -> _U:
|
|
28
|
+
value = await computation
|
|
29
|
+
return await binder(value)
|
|
30
|
+
|
|
31
|
+
return bind()
|
|
32
|
+
|
|
33
|
+
def Combine(self, computation1: Awaitable[None], computation2: Delayed[_T]) -> Awaitable[_T]:
|
|
34
|
+
return self.Bind(computation1, computation2)
|
|
35
|
+
|
|
36
|
+
def Delay(self, generator: Callable[[], Awaitable[_T]]) -> Delayed[_T]:
|
|
37
|
+
def deferred(_: Any = None) -> Awaitable[_T]:
|
|
38
|
+
# print("Delay: deferred: ", generator)
|
|
39
|
+
return generator()
|
|
40
|
+
|
|
41
|
+
return deferred
|
|
42
|
+
|
|
43
|
+
def For(self, sequence: Iterable[_T], body: Callable[[_T], Awaitable[_U]]) -> Awaitable[_U]:
|
|
44
|
+
done = False
|
|
45
|
+
it = iter(sequence)
|
|
46
|
+
try:
|
|
47
|
+
cur = next(it)
|
|
48
|
+
except StopIteration:
|
|
49
|
+
done = True
|
|
50
|
+
|
|
51
|
+
def delay():
|
|
52
|
+
nonlocal cur, done
|
|
53
|
+
res = body(cur)
|
|
54
|
+
try:
|
|
55
|
+
cur = next(it)
|
|
56
|
+
except StopIteration:
|
|
57
|
+
done = True
|
|
58
|
+
return res
|
|
59
|
+
|
|
60
|
+
return self.While(lambda: not done, self.Delay(delay))
|
|
61
|
+
|
|
62
|
+
@overload
|
|
63
|
+
def Return(self) -> Awaitable[None]: ...
|
|
64
|
+
|
|
65
|
+
@overload
|
|
66
|
+
def Return(self, value: _T) -> Awaitable[_T]: ...
|
|
67
|
+
|
|
68
|
+
def Return(self, value: Any = None) -> Awaitable[Any]:
|
|
69
|
+
return from_result(value)
|
|
70
|
+
|
|
71
|
+
def ReturnFrom(self, computation: Awaitable[_T]) -> Awaitable[_T]:
|
|
72
|
+
return computation
|
|
73
|
+
|
|
74
|
+
def TryFinally(self, computation: Delayed[_T], compensation: Callable[[], None]) -> Awaitable[_T]:
|
|
75
|
+
async def try_finally() -> _T:
|
|
76
|
+
try:
|
|
77
|
+
t = await computation()
|
|
78
|
+
finally:
|
|
79
|
+
compensation()
|
|
80
|
+
return t
|
|
81
|
+
|
|
82
|
+
return try_finally()
|
|
83
|
+
|
|
84
|
+
def TryWith(self, computation: Delayed[_T], catchHandler: Callable[[Any], Awaitable[_T]]) -> Awaitable[_T]:
|
|
85
|
+
async def try_with() -> _T:
|
|
86
|
+
try:
|
|
87
|
+
t = await computation()
|
|
88
|
+
except Exception as exn:
|
|
89
|
+
t = await catchHandler(exn)
|
|
90
|
+
return t
|
|
91
|
+
|
|
92
|
+
return try_with()
|
|
93
|
+
|
|
94
|
+
def Using(self, resource: _TD, binder: Callable[[_TD], Awaitable[_U]]) -> Awaitable[_U]:
|
|
95
|
+
return self.TryFinally(self.Delay(lambda: binder(resource)), lambda: resource.Dispose())
|
|
96
|
+
|
|
97
|
+
@overload
|
|
98
|
+
def While(self, guard: Callable[[], bool], computation: Delayed[None]) -> Awaitable[None]: ...
|
|
99
|
+
|
|
100
|
+
@overload
|
|
101
|
+
def While(self, guard: Callable[[], bool], computation: Delayed[_T]) -> Awaitable[_T]: ...
|
|
102
|
+
|
|
103
|
+
def While(self, guard: Callable[[], bool], computation: Delayed[Any]) -> Awaitable[Any]:
|
|
104
|
+
if guard():
|
|
105
|
+
return self.Bind(computation(), lambda _: self.While(guard, computation))
|
|
106
|
+
else:
|
|
107
|
+
return self.Return()
|
|
108
|
+
|
|
109
|
+
def Zero(self) -> Awaitable[None]:
|
|
110
|
+
return zero()
|
|
111
|
+
|
|
112
|
+
def Run(self, computation: Delayed[_T]) -> Awaitable[_T]:
|
|
113
|
+
# Make sure we don't execute computation right now, so wrap in a coroutine.
|
|
114
|
+
async def run() -> _T:
|
|
115
|
+
return await computation()
|
|
116
|
+
|
|
117
|
+
return run()
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
task = TaskBuilder
|
|
121
|
+
|
|
122
|
+
__all__ = ["task"]
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from math import ceil, floor, fmod
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .types import FSharpRef
|
|
8
|
+
from .util import pad_left_and_right_with_zeros, pad_with_zeros
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# TimeSpan is represented as an int which is the Tick value
|
|
12
|
+
# We can recompute everything from this value
|
|
13
|
+
class TimeSpan(int):
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def create(
|
|
18
|
+
days: float = 0,
|
|
19
|
+
hours: float | None = None,
|
|
20
|
+
minutes: float | None = None,
|
|
21
|
+
seconds: float | None = None,
|
|
22
|
+
milliseconds: float | None = None,
|
|
23
|
+
microseconds: float | None = None,
|
|
24
|
+
) -> TimeSpan:
|
|
25
|
+
match (days, hours, minutes, seconds, milliseconds, microseconds):
|
|
26
|
+
# ticks constructor
|
|
27
|
+
case (_, None, None, None, None, None):
|
|
28
|
+
return TimeSpan(days)
|
|
29
|
+
# hours, minutes, seconds constructor
|
|
30
|
+
case (_, _, _, None, None, None):
|
|
31
|
+
seconds = minutes
|
|
32
|
+
minutes = hours
|
|
33
|
+
hours = days
|
|
34
|
+
days = 0
|
|
35
|
+
# others constructor follows the correct order of arguments
|
|
36
|
+
case _:
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
return TimeSpan(
|
|
40
|
+
days * 864000000000
|
|
41
|
+
+ (hours or 0) * 36000000000
|
|
42
|
+
+ (minutes or 0) * 600000000
|
|
43
|
+
+ (seconds or 0) * 10000000
|
|
44
|
+
+ (milliseconds or 0) * 10000
|
|
45
|
+
+ (microseconds or 0) * 10
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def total_nanoseconds(ts: TimeSpan) -> float:
|
|
50
|
+
# We store timespan as the Tick value so nanoseconds step is 100
|
|
51
|
+
return ts * 100
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def total_microseconds(ts: TimeSpan) -> float:
|
|
55
|
+
return ts / 10
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def total_milliseconds(ts: TimeSpan) -> float:
|
|
59
|
+
return ts / 10000
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def total_seconds(ts: TimeSpan) -> float:
|
|
63
|
+
return ts / 10000000
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def total_minutes(ts: TimeSpan) -> float:
|
|
67
|
+
return ts / 600000000
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def total_hours(ts: TimeSpan) -> float:
|
|
71
|
+
return ts / 36000000000
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def total_days(ts: TimeSpan) -> float:
|
|
75
|
+
return ts / 864000000000
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def from_microseconds(micros: float) -> TimeSpan:
|
|
79
|
+
return create(0, 0, 0, 0, 0, micros)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def from_milliseconds(msecs: int) -> TimeSpan:
|
|
83
|
+
return create(0, 0, 0, 0, msecs)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def from_ticks(ticks: int) -> TimeSpan:
|
|
87
|
+
return create(ticks)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def from_seconds(s: int) -> TimeSpan:
|
|
91
|
+
return create(0, 0, s)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def from_minutes(m: int) -> TimeSpan:
|
|
95
|
+
return create(0, m, 0)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def from_hours(h: int) -> TimeSpan:
|
|
99
|
+
return create(h, 0, 0)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def from_days(d: int) -> TimeSpan:
|
|
103
|
+
return create(d, 0, 0, 0)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def ticks(ts: TimeSpan) -> int:
|
|
107
|
+
return int(ts)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def microseconds(ts: TimeSpan) -> int:
|
|
111
|
+
return int(fmod(ts, 10000) / 10)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def milliseconds(ts: TimeSpan) -> int:
|
|
115
|
+
return int(fmod(ts, 10000000) / 10000)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def seconds(ts: TimeSpan) -> int:
|
|
119
|
+
return int(fmod(ts, 600000000) / 10000000)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def minutes(ts: TimeSpan) -> int:
|
|
123
|
+
return int(fmod(ts, 36000000000) / 600000000)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def hours(ts: TimeSpan) -> int:
|
|
127
|
+
return int(fmod(ts, 864000000000) / 36000000000)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def days(ts: TimeSpan) -> int:
|
|
131
|
+
res = ts / 864000000000
|
|
132
|
+
return ceil(res) if res < 0 else floor(res)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def negate(ts: TimeSpan) -> TimeSpan:
|
|
136
|
+
return TimeSpan(-ts)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def duration(ts: TimeSpan) -> TimeSpan:
|
|
140
|
+
return TimeSpan(abs(int(ts)))
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def add(ts: TimeSpan, other: TimeSpan) -> TimeSpan:
|
|
144
|
+
return TimeSpan(ts + other)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def subtract(ts: TimeSpan, other: TimeSpan) -> TimeSpan:
|
|
148
|
+
return TimeSpan(ts - other)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def multiply(ts: TimeSpan, factor: float) -> TimeSpan:
|
|
152
|
+
# We represents TimeSpan as a Tick which can't be a float
|
|
153
|
+
# This also allows us
|
|
154
|
+
return TimeSpan(int(ts * factor))
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def divide(ts: TimeSpan, divisor: float) -> TimeSpan:
|
|
158
|
+
return TimeSpan(int(ts / divisor))
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def to_string(ts: TimeSpan, format: str = "c", _provider: Any | None = None) -> str:
|
|
162
|
+
if format not in ["c", "g", "G"]:
|
|
163
|
+
raise ValueError("Custom formats are not supported")
|
|
164
|
+
|
|
165
|
+
d = abs(days(ts))
|
|
166
|
+
h = abs(hours(ts))
|
|
167
|
+
m = abs(minutes(ts))
|
|
168
|
+
s = abs(seconds(ts))
|
|
169
|
+
ms = abs(milliseconds(ts))
|
|
170
|
+
sign: str = "-" if ts < 0 else ""
|
|
171
|
+
|
|
172
|
+
ms_str = (
|
|
173
|
+
""
|
|
174
|
+
if ms == 0 and format != "G"
|
|
175
|
+
else "." + pad_left_and_right_with_zeros(ms, 3, 7)
|
|
176
|
+
if format != "g"
|
|
177
|
+
else "." + pad_with_zeros(ms, 3)
|
|
178
|
+
)
|
|
179
|
+
day_str = "" if d == 0 and format != "G" else f"{d}." if format == "c" else f"{d}:"
|
|
180
|
+
hour_str = pad_with_zeros(h, 2) if format != "g" else str(h)
|
|
181
|
+
|
|
182
|
+
return f"{sign}{day_str}{hour_str}:{pad_with_zeros(m, 2)}:{pad_with_zeros(s, 2)}{ms_str}"
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
_time_span_parse_regex = re.compile(
|
|
186
|
+
r"^(-?)((\d+)\.)?(?:0*)([0-9]|0[0-9]|1[0-9]|2[0-3]):(?:0*)([0-5][0-9]|[0-9])(:(?:0*)([0-5][0-9]|[0-9]))?\.?(\d+)?$"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# Second argument is to not crash when using provides CultureInfo.InvariantCulture
|
|
191
|
+
def parse(string: str, _: Any | None = None) -> TimeSpan:
|
|
192
|
+
first_dot = string.find(".")
|
|
193
|
+
first_colon = string.find(":")
|
|
194
|
+
if first_dot == -1 and first_colon == -1:
|
|
195
|
+
# There is only a day ex: 4
|
|
196
|
+
# parse as int
|
|
197
|
+
try:
|
|
198
|
+
d = int(string)
|
|
199
|
+
except Exception:
|
|
200
|
+
raise Exception("String '%s' was not recognized as a valid TimeSpan." % string)
|
|
201
|
+
return from_days(d)
|
|
202
|
+
if first_colon > 0: # process time part
|
|
203
|
+
r = _time_span_parse_regex.match(string)
|
|
204
|
+
if r is not None and r.group(4) is not None and r.group(5) is not None:
|
|
205
|
+
d = 0
|
|
206
|
+
ms = 0
|
|
207
|
+
s = 0
|
|
208
|
+
sign = -1 if r.group(1) == "-" else 1
|
|
209
|
+
h = int(r.group(4))
|
|
210
|
+
m = int(r.group(5))
|
|
211
|
+
if r.group(3) is not None:
|
|
212
|
+
d = int(r.group(3))
|
|
213
|
+
if r.group(7) is not None:
|
|
214
|
+
s = int(r.group(7))
|
|
215
|
+
if r.group(8) is not None:
|
|
216
|
+
# Depending on the number of decimals passed, we need to adapt the numbers
|
|
217
|
+
g_8: str = r.group(8)
|
|
218
|
+
match len(g_8):
|
|
219
|
+
case 1:
|
|
220
|
+
ms = int(g_8) * 100
|
|
221
|
+
case 2:
|
|
222
|
+
ms = int(g_8) * 10
|
|
223
|
+
case 3:
|
|
224
|
+
ms = int(g_8)
|
|
225
|
+
case 4:
|
|
226
|
+
ms = int(g_8) / 10
|
|
227
|
+
case 5:
|
|
228
|
+
ms = int(g_8) / 100
|
|
229
|
+
case 6:
|
|
230
|
+
ms = int(g_8) / 1000
|
|
231
|
+
case 7:
|
|
232
|
+
ms = int(g_8) / 10000
|
|
233
|
+
case _:
|
|
234
|
+
raise Exception("String '%s' was not recognized as a valid TimeSpan." % string)
|
|
235
|
+
return multiply(create(d, h, m, s, ms), sign)
|
|
236
|
+
raise Exception("String '%s' was not recognized as a valid TimeSpan." % string)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def try_parse(
|
|
240
|
+
string: str, def_value_or_format_provider: FSharpRef[TimeSpan] | Any, def_value: FSharpRef[TimeSpan] | None = None
|
|
241
|
+
) -> bool:
|
|
242
|
+
# Find where the out_value is
|
|
243
|
+
out_value: FSharpRef[TimeSpan] = def_value_or_format_provider
|
|
244
|
+
|
|
245
|
+
# If we have 3 arguments, it means that the second argument is the format provider
|
|
246
|
+
if def_value is not None:
|
|
247
|
+
out_value = def_value
|
|
248
|
+
|
|
249
|
+
try:
|
|
250
|
+
out_value.contents = parse(string)
|
|
251
|
+
except Exception:
|
|
252
|
+
return False
|
|
253
|
+
|
|
254
|
+
return True
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
__all__ = [
|
|
258
|
+
"create",
|
|
259
|
+
"total_microseconds",
|
|
260
|
+
"total_milliseconds",
|
|
261
|
+
"total_seconds",
|
|
262
|
+
"total_minutes",
|
|
263
|
+
"total_hours",
|
|
264
|
+
"total_days",
|
|
265
|
+
"from_ticks",
|
|
266
|
+
"from_microseconds",
|
|
267
|
+
"from_milliseconds",
|
|
268
|
+
"from_hours",
|
|
269
|
+
"from_minutes",
|
|
270
|
+
"from_seconds",
|
|
271
|
+
"negate",
|
|
272
|
+
"duration",
|
|
273
|
+
"total_seconds",
|
|
274
|
+
"total_days",
|
|
275
|
+
"total_minutes",
|
|
276
|
+
"total_hours",
|
|
277
|
+
"add",
|
|
278
|
+
"subtract",
|
|
279
|
+
"divide",
|
|
280
|
+
"multiply",
|
|
281
|
+
"parse",
|
|
282
|
+
"try_parse",
|
|
283
|
+
]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import abstractmethod
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from typing import Protocol
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ITimer(Protocol):
|
|
9
|
+
@abstractmethod
|
|
10
|
+
def Create(self, __arg0: float, __arg1: Callable[[], None]) -> ITimer: ...
|
|
11
|
+
|
|
12
|
+
@abstractmethod
|
|
13
|
+
def cancel(self) -> None: ...
|
|
14
|
+
|
|
15
|
+
@property
|
|
16
|
+
@abstractmethod
|
|
17
|
+
def daemon(self) -> bool: ...
|
|
18
|
+
|
|
19
|
+
@daemon.setter
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def daemon(self, __arg0: bool) -> None: ...
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def start(self) -> None: ...
|