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.
- arctrl/__init__.py +18 -0
- arctrl/py/CWL/__init__.py +0 -0
- arctrl/py/CWL/cwltypes.py +150 -0
- arctrl/py/CWL/decode.py +973 -0
- arctrl/py/CWL/encode.py +1 -0
- arctrl/py/CWL/inputs.py +88 -0
- arctrl/py/CWL/outputs.py +85 -0
- arctrl/py/CWL/requirements.py +77 -0
- arctrl/py/CWL/tool_description.py +103 -0
- arctrl/py/CWL/workflow_description.py +104 -0
- arctrl/py/CWL/workflow_steps.py +113 -0
- arctrl/py/Contract/__init__.py +0 -0
- arctrl/py/Contract/arc.py +60 -0
- arctrl/py/Contract/arc_assay.py +125 -0
- arctrl/py/Contract/arc_investigation.py +88 -0
- arctrl/py/Contract/arc_run.py +125 -0
- arctrl/py/Contract/arc_study.py +126 -0
- arctrl/py/Contract/arc_workflow.py +125 -0
- arctrl/py/Contract/contract.py +153 -0
- arctrl/py/Contract/datamap.py +372 -0
- arctrl/py/Contract/git.py +118 -0
- arctrl/py/Contract/validation_packages_config.py +107 -0
- arctrl/py/ContractIO/__init__.py +0 -0
- arctrl/py/ContractIO/contract_io.py +344 -0
- arctrl/py/ContractIO/file_system_helper.py +264 -0
- arctrl/py/Core/Helper/__init__.py +0 -0
- arctrl/py/Core/Helper/collections_.py +438 -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 +248 -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 +1264 -0
- arctrl/py/Core/Table/arc_table_aux.py +575 -0
- arctrl/py/Core/Table/arc_tables.py +591 -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 +5064 -0
- arctrl/py/Core/comment.py +128 -0
- arctrl/py/Core/comment_list.py +127 -0
- arctrl/py/Core/conversion.py +1313 -0
- arctrl/py/Core/data.py +245 -0
- arctrl/py/Core/data_context.py +157 -0
- arctrl/py/Core/data_file.py +112 -0
- arctrl/py/Core/data_map.py +225 -0
- arctrl/py/Core/identifier_setters.py +31 -0
- arctrl/py/Core/iproperty_value.py +36 -0
- arctrl/py/Core/ontology_annotation.py +299 -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 +5 -0
- arctrl/py/FileSystem/default_gitignore.py +5 -0
- arctrl/py/FileSystem/file_system.py +58 -0
- arctrl/py/FileSystem/file_system_tree.py +426 -0
- arctrl/py/FileSystem/path.py +64 -0
- arctrl/py/Json/DataMap/__init__.py +0 -0
- arctrl/py/Json/DataMap/data_context.py +101 -0
- arctrl/py/Json/DataMap/data_map.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 +79 -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 +79 -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 +133 -0
- arctrl/py/Json/ROCrate/ldgraph.py +111 -0
- arctrl/py/Json/ROCrate/ldnode.py +290 -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 +393 -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 +155 -0
- arctrl/py/Json/encode.py +92 -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/string_table.py +76 -0
- arctrl/py/Json/study.py +793 -0
- arctrl/py/JsonIO/DataMap/__init__.py +0 -0
- arctrl/py/JsonIO/DataMap/data_map.py +53 -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 +121 -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 +85 -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/decode.py +9 -0
- arctrl/py/JsonIO/encode.py +1 -0
- arctrl/py/JsonIO/investigation.py +113 -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/study.py +114 -0
- arctrl/py/ROCrate/Generic/__init__.py +0 -0
- arctrl/py/ROCrate/Generic/comment.py +131 -0
- arctrl/py/ROCrate/Generic/dataset.py +817 -0
- arctrl/py/ROCrate/Generic/defined_term.py +131 -0
- arctrl/py/ROCrate/Generic/file.py +237 -0
- arctrl/py/ROCrate/Generic/lab_process.py +324 -0
- arctrl/py/ROCrate/Generic/lab_protocol.py +338 -0
- arctrl/py/ROCrate/Generic/organization.py +83 -0
- arctrl/py/ROCrate/Generic/person.py +484 -0
- arctrl/py/ROCrate/Generic/postal_address.py +195 -0
- arctrl/py/ROCrate/Generic/property_value.py +696 -0
- arctrl/py/ROCrate/Generic/sample.py +202 -0
- arctrl/py/ROCrate/Generic/scholarly_article.py +229 -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/__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 +362 -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 +193 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_cell.py +78 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_column.py +210 -0
- arctrl/py/Spreadsheet/AnnotationTable/composite_header.py +623 -0
- arctrl/py/Spreadsheet/DataMapTable/__init__.py +0 -0
- arctrl/py/Spreadsheet/DataMapTable/data_map_column.py +114 -0
- arctrl/py/Spreadsheet/DataMapTable/data_map_header.py +618 -0
- arctrl/py/Spreadsheet/DataMapTable/data_map_table.py +119 -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 +508 -0
- arctrl/py/Spreadsheet/Metadata/study.py +312 -0
- arctrl/py/Spreadsheet/Metadata/workflow.py +151 -0
- arctrl/py/Spreadsheet/__init__.py +0 -0
- arctrl/py/Spreadsheet/arc_assay.py +233 -0
- arctrl/py/Spreadsheet/arc_investigation.py +418 -0
- arctrl/py/Spreadsheet/arc_run.py +190 -0
- arctrl/py/Spreadsheet/arc_study.py +144 -0
- arctrl/py/Spreadsheet/arc_workflow.py +176 -0
- arctrl/py/Spreadsheet/assembly_info.py +1 -0
- arctrl/py/Spreadsheet/collection_aux.py +167 -0
- arctrl/py/Spreadsheet/data_map.py +44 -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/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 +1400 -0
- arctrl/py/column_index.py +280 -0
- arctrl/py/conversion.py +2184 -0
- arctrl/py/cross_async.py +76 -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 +338 -0
- arctrl/py/fable_modules/fs_spreadsheet/Cells/fs_cells_collection.py +469 -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 +464 -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 +57 -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 +217 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range.py +47 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_address.py +186 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_base.py +90 -0
- arctrl/py/fable_modules/fs_spreadsheet/Ranges/fs_range_column.py +78 -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 +393 -0
- arctrl/py/fable_modules/fs_spreadsheet/Tables/fs_table_field.py +127 -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 +218 -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 +180 -0
- arctrl/py/fable_modules/fs_spreadsheet/fs_worksheet.py +600 -0
- arctrl/py/fable_modules/fs_spreadsheet/sheet_builder.py +330 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/__init__.py +0 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/cell.py +63 -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 +53 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/workbook.py +40 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/worksheet.py +54 -0
- arctrl/py/fable_modules/fs_spreadsheet_py/xlsx.py +37 -0
- arctrl/py/fable_modules/thoth_json_core/__init__.py +0 -0
- arctrl/py/fable_modules/thoth_json_core/decode.py +1588 -0
- arctrl/py/fable_modules/thoth_json_core/encode.py +261 -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/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 +665 -0
- arctrl/py/fable_modules/yamlicious/regex.py +21 -0
- arctrl/py/fable_modules/yamlicious/regex_active_patterns.py +256 -0
- arctrl/py/fable_modules/yamlicious/writer.py +175 -0
- arctrl/py/fable_modules/yamlicious/yamlicious_types.py +128 -0
- arctrl/py/json.py +213 -0
- arctrl/py/rocrate_io.py +72 -0
- arctrl/py/template_web.py +23 -0
- arctrl/py/xlsx.py +148 -0
- arctrl/rocrate.py +21 -0
- arctrl-3.0.0a3.dist-info/LICENSE +21 -0
- arctrl-3.0.0a3.dist-info/METADATA +119 -0
- arctrl-3.0.0a3.dist-info/RECORD +456 -0
- arctrl-3.0.0a3.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import time as _time
|
|
4
|
+
from datetime import datetime, timedelta, tzinfo
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class LocalTimezone(tzinfo):
|
|
8
|
+
def utcoffset(self, dt: datetime | None = None):
|
|
9
|
+
# Return offset of local timezone from UTC
|
|
10
|
+
if dt is not None and self._isdst(dt):
|
|
11
|
+
return timedelta(seconds=-_time.altzone)
|
|
12
|
+
else:
|
|
13
|
+
return timedelta(seconds=-_time.timezone)
|
|
14
|
+
|
|
15
|
+
def dst(self, dt: datetime | None = None):
|
|
16
|
+
# Return the daylight saving time (DST) adjustment
|
|
17
|
+
if dt is not None and self._isdst(dt):
|
|
18
|
+
return timedelta(seconds=-_time.altzone)
|
|
19
|
+
else:
|
|
20
|
+
return timedelta(seconds=-_time.timezone)
|
|
21
|
+
|
|
22
|
+
def tzname(self, dt: datetime | None = None) -> str:
|
|
23
|
+
# Return the name of the time zone
|
|
24
|
+
return "localtime"
|
|
25
|
+
|
|
26
|
+
def _isdst(self, dt: datetime):
|
|
27
|
+
# Determine whether or not DST is in effect
|
|
28
|
+
tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, 0)
|
|
29
|
+
stamp = _time.mktime(tt)
|
|
30
|
+
tt = _time.localtime(stamp)
|
|
31
|
+
return tt.tm_isdst > 0
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
local_time_zone = LocalTimezone()
|
|
35
|
+
|
|
36
|
+
__all__ = ["local_time_zone"]
|
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import locale
|
|
4
|
+
import re
|
|
5
|
+
from base64 import b64decode, b64encode
|
|
6
|
+
from collections.abc import Callable, Iterable
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
from enum import IntEnum
|
|
10
|
+
from re import Match, Pattern
|
|
11
|
+
from typing import (
|
|
12
|
+
Any,
|
|
13
|
+
NoReturn,
|
|
14
|
+
TypeVar,
|
|
15
|
+
cast,
|
|
16
|
+
overload,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from .date import to_string as date_to_string
|
|
20
|
+
from .numeric import multiply, to_exponential, to_fixed, to_hex, to_precision
|
|
21
|
+
from .reg_exp import escape
|
|
22
|
+
from .types import to_string
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
T = TypeVar("T")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
_fs_format_regexp: Pattern[str] = re.compile(r"(^|[^%])%([0+\- ]*)(\d+)?(?:\.(\d+))?(\w)")
|
|
29
|
+
_interpolate_regexp: Pattern[str] = re.compile(r"(?:(^|[^%])%([0+\- ]*)(\d+)?(?:\.(\d+))?(\w))?%P\(\)")
|
|
30
|
+
_format_regexp: Pattern[str] = re.compile(r"\{(\d+)(,-?\d+)?(?:\:([a-zA-Z])(\d{0,2})|\:(.+?))?\}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
IPrintfFormatContinuation = Callable[[Callable[[str], Any]], Callable[[str], Any]]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class IPrintfFormat:
|
|
38
|
+
input: str
|
|
39
|
+
cont: IPrintfFormatContinuation
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def printf(input: str) -> IPrintfFormat:
|
|
43
|
+
format: IPrintfFormatContinuation = fs_format(input)
|
|
44
|
+
return IPrintfFormat(input=input, cont=format)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def continue_print(cont: Callable[[str], Any], arg: IPrintfFormat | str) -> Any:
|
|
48
|
+
"""Print continuation."""
|
|
49
|
+
|
|
50
|
+
if isinstance(arg, IPrintfFormat):
|
|
51
|
+
ret = arg.cont(cont)
|
|
52
|
+
return ret
|
|
53
|
+
|
|
54
|
+
return cont(arg)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def to_console(arg: IPrintfFormat | Any) -> Any:
|
|
58
|
+
return continue_print(print, arg)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def to_console_error(arg: IPrintfFormat | str):
|
|
62
|
+
return continue_print(lambda x: print(x), arg) # noqa: T201
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def to_text(arg: IPrintfFormat | str) -> str | Callable[..., Any]:
|
|
66
|
+
def cont(x: str) -> Any:
|
|
67
|
+
return x
|
|
68
|
+
|
|
69
|
+
return continue_print(cont, arg)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def to_fail(arg: IPrintfFormat | str):
|
|
73
|
+
def fail(msg: str):
|
|
74
|
+
raise Exception(msg)
|
|
75
|
+
|
|
76
|
+
return continue_print(fail, arg)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def format_replacement(rep: Any, flags: Any, padLength: Any, precision: Any, format: Any):
|
|
80
|
+
sign = ""
|
|
81
|
+
flags = flags or ""
|
|
82
|
+
format = format or ""
|
|
83
|
+
|
|
84
|
+
if isinstance(rep, int | float):
|
|
85
|
+
if format not in ["x", "X"]:
|
|
86
|
+
if rep < 0:
|
|
87
|
+
rep = rep * -1
|
|
88
|
+
sign = "-"
|
|
89
|
+
else:
|
|
90
|
+
if flags.find(" ") >= 0:
|
|
91
|
+
sign = " "
|
|
92
|
+
elif flags.find("+") >= 0:
|
|
93
|
+
sign = "+"
|
|
94
|
+
|
|
95
|
+
if format == "x":
|
|
96
|
+
rep = to_hex(cast(int, rep))
|
|
97
|
+
elif format == "X":
|
|
98
|
+
rep = to_hex(cast(int, rep)).upper()
|
|
99
|
+
if format in ("f", "F"):
|
|
100
|
+
precision = int(precision) if precision is not None else 6
|
|
101
|
+
rep = to_fixed(rep, precision)
|
|
102
|
+
elif format in ("g", "G"):
|
|
103
|
+
rep = to_precision(rep, precision) if precision is not None else to_precision(rep)
|
|
104
|
+
elif format in ("e", "E"):
|
|
105
|
+
rep = to_exponential(rep, precision) if precision is not None else to_exponential(rep)
|
|
106
|
+
else: # AOid
|
|
107
|
+
rep = to_string(rep)
|
|
108
|
+
|
|
109
|
+
elif isinstance(rep, datetime):
|
|
110
|
+
rep = date_to_string(rep)
|
|
111
|
+
else:
|
|
112
|
+
rep = to_string(rep)
|
|
113
|
+
|
|
114
|
+
if padLength is not None:
|
|
115
|
+
padLength = int(padLength)
|
|
116
|
+
zeroFlag = flags.find("0") >= 0 # Use '0' for left padding
|
|
117
|
+
minusFlag = flags.find("-") >= 0 # Right padding
|
|
118
|
+
ch = " " if minusFlag or not zeroFlag else "0"
|
|
119
|
+
if ch == "0":
|
|
120
|
+
rep = pad_left(rep, padLength - len(sign), ch, minusFlag)
|
|
121
|
+
rep = sign + rep
|
|
122
|
+
else:
|
|
123
|
+
rep = pad_left(sign + rep, padLength, ch, minusFlag)
|
|
124
|
+
|
|
125
|
+
else:
|
|
126
|
+
rep = sign + rep
|
|
127
|
+
|
|
128
|
+
return rep
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def interpolate(string: str, values: list[Any]) -> str:
|
|
132
|
+
valIdx = 0
|
|
133
|
+
strIdx = 0
|
|
134
|
+
result = ""
|
|
135
|
+
matches = _interpolate_regexp.finditer(string)
|
|
136
|
+
for match in matches:
|
|
137
|
+
# The first group corresponds to the no-escape char (^|[^%]), the actual pattern starts in the next char
|
|
138
|
+
# Note: we don't use negative lookbehind because some browsers don't support it yet
|
|
139
|
+
matchIndex = match.start() + len(match[1] or "")
|
|
140
|
+
result += string[strIdx:matchIndex].replace("%%", "%")
|
|
141
|
+
[_, flags, padLength, precision, format] = match.groups()
|
|
142
|
+
result += format_replacement(values[valIdx], flags, padLength, precision, format)
|
|
143
|
+
valIdx += 1
|
|
144
|
+
|
|
145
|
+
strIdx = match.end()
|
|
146
|
+
|
|
147
|
+
result += string[strIdx:].replace("%%", "%")
|
|
148
|
+
return result
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def format_once(str2: str, rep: Any):
|
|
152
|
+
def match(m: Match[str]):
|
|
153
|
+
prefix, flags, pad_length, precision, format = m.groups()
|
|
154
|
+
once: str = format_replacement(rep, flags, pad_length, precision, format)
|
|
155
|
+
return prefix + once.replace("%", "%%")
|
|
156
|
+
|
|
157
|
+
ret = _fs_format_regexp.sub(match, str2, count=1)
|
|
158
|
+
return ret
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def create_printer(string: str, cont: Callable[..., Any]):
|
|
162
|
+
def _(*args: Any):
|
|
163
|
+
str_copy: str = string
|
|
164
|
+
for arg in args:
|
|
165
|
+
str_copy = format_once(str_copy, arg)
|
|
166
|
+
|
|
167
|
+
if _fs_format_regexp.search(str_copy):
|
|
168
|
+
return create_printer(str_copy, cont)
|
|
169
|
+
return cont(str_copy.replace("%%", "%"))
|
|
170
|
+
|
|
171
|
+
return _
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def fs_format(str: str) -> Callable[[Callable[..., Any]], Any]:
|
|
175
|
+
def _(cont: Callable[..., Any]):
|
|
176
|
+
if _fs_format_regexp.search(str):
|
|
177
|
+
return create_printer(str, cont)
|
|
178
|
+
return cont(str)
|
|
179
|
+
|
|
180
|
+
return _
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def format(string: str, *args: Any) -> str:
|
|
184
|
+
if not string and args:
|
|
185
|
+
# Called with culture info
|
|
186
|
+
string = args[0]
|
|
187
|
+
args = args[1:]
|
|
188
|
+
|
|
189
|
+
def match(m: Match[str]) -> str:
|
|
190
|
+
idx, padLength, format, precision_, pattern = list(m.groups())
|
|
191
|
+
rep = args[int(idx)]
|
|
192
|
+
if isinstance(rep, int | float):
|
|
193
|
+
precision: int | None = None
|
|
194
|
+
try:
|
|
195
|
+
precision: int | None = int(precision_)
|
|
196
|
+
except Exception:
|
|
197
|
+
pass
|
|
198
|
+
|
|
199
|
+
if format in ["f", "F"]:
|
|
200
|
+
precision = precision if precision is not None else 2
|
|
201
|
+
rep = to_fixed(rep, precision)
|
|
202
|
+
|
|
203
|
+
elif format in ["g", "G"]:
|
|
204
|
+
rep = to_precision(rep, precision) if precision is not None else to_precision(rep)
|
|
205
|
+
|
|
206
|
+
elif format in ["e", "E"]:
|
|
207
|
+
rep = to_exponential(rep, precision) if precision is not None else to_exponential(rep)
|
|
208
|
+
|
|
209
|
+
elif format in ["p", "P"]:
|
|
210
|
+
precision = precision if precision is not None else 2
|
|
211
|
+
rep = to_fixed(multiply(rep, 100), precision) + " %"
|
|
212
|
+
|
|
213
|
+
elif format in ["d", "D"]:
|
|
214
|
+
rep = pad_left(str(rep), precision, "0") if precision is not None else str(rep)
|
|
215
|
+
|
|
216
|
+
elif format in ["x", "X"] and isinstance(rep, int):
|
|
217
|
+
rep = pad_left(to_hex(rep), precision, "0") if precision is not None else to_hex(rep)
|
|
218
|
+
if format == "X":
|
|
219
|
+
rep = rep.upper()
|
|
220
|
+
elif pattern:
|
|
221
|
+
sign = ""
|
|
222
|
+
|
|
223
|
+
def match(m: Match[str]):
|
|
224
|
+
nonlocal sign, rep
|
|
225
|
+
|
|
226
|
+
intPart, decimalPart = list(m.groups())
|
|
227
|
+
if rep < 0:
|
|
228
|
+
rep = multiply(rep, -1)
|
|
229
|
+
sign = "-"
|
|
230
|
+
|
|
231
|
+
rep = to_fixed(rep, len(decimalPart) - 1 if decimalPart else 0)
|
|
232
|
+
return pad_left(
|
|
233
|
+
rep,
|
|
234
|
+
len(intPart or "") - len(sign) + (len(decimalPart) if decimalPart else 0),
|
|
235
|
+
"0",
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
rep = re.sub(r"(0+)(\.0+)?", match, pattern)
|
|
239
|
+
rep = sign + rep
|
|
240
|
+
|
|
241
|
+
elif isinstance(rep, datetime):
|
|
242
|
+
rep = date_to_string(rep, pattern or format)
|
|
243
|
+
else:
|
|
244
|
+
rep = to_string(rep)
|
|
245
|
+
|
|
246
|
+
try:
|
|
247
|
+
padLength = int((padLength or " ")[1:])
|
|
248
|
+
rep = pad_left(str(rep), abs(padLength), " ", padLength < 0)
|
|
249
|
+
except ValueError:
|
|
250
|
+
pass
|
|
251
|
+
|
|
252
|
+
return str(rep)
|
|
253
|
+
|
|
254
|
+
return _format_regexp.sub(match, string)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def initialize(n: int, f: Callable[[int], str]) -> str:
|
|
258
|
+
if n < 0:
|
|
259
|
+
raise Exception("String length must be non-negative")
|
|
260
|
+
|
|
261
|
+
return "".join([f(i) for i in range(n)])
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def insert(string: str, startIndex: int, value: str):
|
|
265
|
+
if startIndex < 0 or startIndex > len(string):
|
|
266
|
+
raise ValueError("startIndex is negative or greater than the length of this instance.")
|
|
267
|
+
|
|
268
|
+
return string[:startIndex] + value + string[startIndex:]
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def is_null_or_empty(string: str | None):
|
|
272
|
+
return not isinstance(string, str) or not len(string)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def is_null_or_white_space(string: Any | None) -> bool:
|
|
276
|
+
return not string or not isinstance(string, str) or string.isspace()
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def concat(*xs: Iterable[Any]) -> str:
|
|
280
|
+
return "".join(map(str, xs))
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def join(delimiter: str, xs: Iterable[Any]) -> str:
|
|
284
|
+
return delimiter.join(str(x) for x in xs)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def join_with_indices(delimiter: str, xs: list[str], startIndex: int, count: int):
|
|
288
|
+
endIndexPlusOne = startIndex + count
|
|
289
|
+
if endIndexPlusOne > len(xs):
|
|
290
|
+
raise ValueError("Index and count must refer to a location within the buffer.")
|
|
291
|
+
|
|
292
|
+
return delimiter.join(xs[startIndex:endIndexPlusOne])
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def not_supported(name: str) -> NoReturn:
|
|
296
|
+
raise Exception("The environment doesn't support '" + name + "', please use a polyfill.")
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def to_base64string(in_array: bytes) -> str:
|
|
300
|
+
return b64encode(in_array).decode("utf8")
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def from_base64string(b64encoded: str) -> bytes:
|
|
304
|
+
return b64decode(b64encoded)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def pad_left(string: str, length: int, ch: str | None = None, isRight: bool | None = False) -> str:
|
|
308
|
+
ch = ch or " "
|
|
309
|
+
length = length - len(string)
|
|
310
|
+
for _ in range(length):
|
|
311
|
+
string = string + ch if isRight else ch + string
|
|
312
|
+
|
|
313
|
+
return string
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def pad_right(string: str, len: int, ch: str | None = None) -> str:
|
|
317
|
+
return pad_left(string, len, ch, True)
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def remove(string: str, startIndex: int, count: int | None = None):
|
|
321
|
+
if startIndex >= len(string):
|
|
322
|
+
raise ValueError("startIndex must be less than length of string")
|
|
323
|
+
|
|
324
|
+
if count and (startIndex + count) > len(string):
|
|
325
|
+
raise ValueError("Index and count must refer to a location within the string.")
|
|
326
|
+
|
|
327
|
+
return string[:startIndex] + (string[startIndex + count :] if count is not None else "")
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def replace(string: str, search: str, replace: str):
|
|
331
|
+
return string.replace(search, replace)
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def replicate(n: int, x: str) -> str:
|
|
335
|
+
return initialize(n, lambda _=0: x)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def get_char_at_index(input: str, index: int):
|
|
339
|
+
if index < 0 or index >= len(input):
|
|
340
|
+
raise ValueError("Index was outside the bounds of the array.")
|
|
341
|
+
|
|
342
|
+
return input[index]
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def split(
|
|
346
|
+
string: str,
|
|
347
|
+
splitters: str | list[str],
|
|
348
|
+
count: int | None = None,
|
|
349
|
+
removeEmpty: int = 0,
|
|
350
|
+
) -> list[str]:
|
|
351
|
+
"""Split string
|
|
352
|
+
|
|
353
|
+
Returns a string array that contains the substrings in this instance
|
|
354
|
+
that are delimited by elements of a specified string or Unicode
|
|
355
|
+
character array."""
|
|
356
|
+
|
|
357
|
+
if count and count < 0:
|
|
358
|
+
raise ValueError("Count cannot be less than zero")
|
|
359
|
+
|
|
360
|
+
if count == 0:
|
|
361
|
+
return []
|
|
362
|
+
|
|
363
|
+
if isinstance(splitters, str):
|
|
364
|
+
if not removeEmpty:
|
|
365
|
+
return string.split(splitters, count - 1 if count else -1)
|
|
366
|
+
|
|
367
|
+
splitters = [splitters]
|
|
368
|
+
|
|
369
|
+
splitters = [escape(x) for x in splitters] or [" "]
|
|
370
|
+
|
|
371
|
+
i = 0
|
|
372
|
+
splits: list[str] = []
|
|
373
|
+
matches = re.finditer("|".join(splitters), string)
|
|
374
|
+
for m in matches:
|
|
375
|
+
if count is not None and count <= 1:
|
|
376
|
+
break
|
|
377
|
+
|
|
378
|
+
split = string[i : m.start()]
|
|
379
|
+
if split or not removeEmpty:
|
|
380
|
+
splits.append(split)
|
|
381
|
+
|
|
382
|
+
count = count - 1 if count is not None else count
|
|
383
|
+
|
|
384
|
+
i = m.end()
|
|
385
|
+
|
|
386
|
+
if (count is None or count and count > 0) and len(string) - i > -1:
|
|
387
|
+
split = string[i:]
|
|
388
|
+
if split or not removeEmpty:
|
|
389
|
+
splits.append(split)
|
|
390
|
+
|
|
391
|
+
return splits
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def trim(string: str, *chars: str) -> str:
|
|
395
|
+
if not len(chars):
|
|
396
|
+
return string.strip()
|
|
397
|
+
|
|
398
|
+
pattern = "[" + escape("".join(chars)) + "]+"
|
|
399
|
+
return re.sub(pattern + "$", "", re.sub("^" + pattern, "", string))
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def trim_start(string: str, *chars: str) -> str:
|
|
403
|
+
if not len(chars):
|
|
404
|
+
return string.lstrip()
|
|
405
|
+
|
|
406
|
+
return re.sub("^[" + escape("".join(chars)) + "]+", "", string)
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
def trim_end(string: str, *chars: str) -> str:
|
|
410
|
+
if not len(chars):
|
|
411
|
+
return string.rstrip()
|
|
412
|
+
|
|
413
|
+
return re.sub("[" + escape("".join(chars)) + "]+$", "", string)
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def filter(pred: Callable[[str], bool], x: str) -> str:
|
|
417
|
+
return "".join(c for c in x if pred(c))
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def substring(string: str, startIndex: int, length: int | None = None) -> str:
|
|
421
|
+
if startIndex + (length or 0) > len(string):
|
|
422
|
+
raise ValueError("Invalid startIndex and/or length")
|
|
423
|
+
|
|
424
|
+
if length is not None:
|
|
425
|
+
return string[startIndex : startIndex + length]
|
|
426
|
+
|
|
427
|
+
return string[startIndex:]
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
def to_char_array2(string: str, startIndex: int, length: int) -> list[str]:
|
|
431
|
+
return list(substring(string, startIndex, length))
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
class StringComparison(IntEnum):
|
|
435
|
+
CurrentCulture = 0
|
|
436
|
+
CurrentCultureIgnoreCase = 1
|
|
437
|
+
InvariantCulture = 2
|
|
438
|
+
InvariantCultureIgnoreCase = 3
|
|
439
|
+
Ordinal = 4
|
|
440
|
+
OrdinalIgnoreCase = 5
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
def cmp(x: str, y: str, ic: bool | StringComparison) -> int:
|
|
444
|
+
def is_ignore_case(i: bool | StringComparison) -> bool:
|
|
445
|
+
return (
|
|
446
|
+
i is True
|
|
447
|
+
or i == StringComparison.CurrentCultureIgnoreCase
|
|
448
|
+
or i == StringComparison.InvariantCultureIgnoreCase
|
|
449
|
+
or i == StringComparison.OrdinalIgnoreCase
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
def is_ordinal(i: bool | int) -> bool:
|
|
453
|
+
return i == StringComparison.Ordinal or i == StringComparison.OrdinalIgnoreCase
|
|
454
|
+
|
|
455
|
+
if not x:
|
|
456
|
+
return 0 if not y else -1
|
|
457
|
+
if not y:
|
|
458
|
+
return 1 # everything is bigger than None
|
|
459
|
+
|
|
460
|
+
if is_ordinal(ic):
|
|
461
|
+
if is_ignore_case(ic):
|
|
462
|
+
x = x.lower()
|
|
463
|
+
y = y.lower()
|
|
464
|
+
|
|
465
|
+
return 0 if x == y else -1 if x < y else 1
|
|
466
|
+
elif is_ignore_case(ic):
|
|
467
|
+
x = x.lower()
|
|
468
|
+
y = y.lower()
|
|
469
|
+
|
|
470
|
+
return locale.strcoll(x, y)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
@overload
|
|
474
|
+
def compare(string1: str, string2: str, /) -> int:
|
|
475
|
+
"""Compares two specified String objects and returns an integer that
|
|
476
|
+
indicates their relative position in the sort order."""
|
|
477
|
+
...
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
@overload
|
|
481
|
+
def compare(string1: str, string2: str, ignore_case: bool, culture: StringComparison, /) -> int: ...
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
def compare(*args: Any) -> int:
|
|
485
|
+
"""Compares two specified String objects and returns an integer that
|
|
486
|
+
indicates their relative position in the sort order.
|
|
487
|
+
|
|
488
|
+
All overloads of the Compare method return a 32-bit signed integer
|
|
489
|
+
indicating the lexical relationship between the two comparands.
|
|
490
|
+
|
|
491
|
+
- Less than zero: The first substring precedes the second
|
|
492
|
+
substring in the sort order.
|
|
493
|
+
- Zero: The substrings occur in the same position in the sort
|
|
494
|
+
order, or length is zero.
|
|
495
|
+
- Greater than zero: The first substring follows the second
|
|
496
|
+
substring in the sort order.
|
|
497
|
+
|
|
498
|
+
Returns:
|
|
499
|
+
Integer that indicates the relationship of the two substrings
|
|
500
|
+
to each other in the sort order:
|
|
501
|
+
"""
|
|
502
|
+
length = len(args)
|
|
503
|
+
|
|
504
|
+
if length == 2:
|
|
505
|
+
return cmp(args[0], args[1], False)
|
|
506
|
+
if length == 3:
|
|
507
|
+
return cmp(args[0], args[1], args[2])
|
|
508
|
+
if length == 4:
|
|
509
|
+
return cmp(args[0], args[1], args[2])
|
|
510
|
+
if length == 5:
|
|
511
|
+
return cmp(args[0][args[1] : args[4] + 1], args[2][args[3] : args[4] + 1], False)
|
|
512
|
+
if length == 6:
|
|
513
|
+
return cmp(args[0][args[1] : args[4] + 1], args[2][args[3] : args[4] + 1], args[5])
|
|
514
|
+
if length == 7:
|
|
515
|
+
return cmp(args[0][args[1] : args[4] + 1], args[2][args[3] : args[4] + 1], args[5])
|
|
516
|
+
raise Exception("String.compare: Unsupported number of parameters")
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
def compare_to(this: str, other: str) -> int:
|
|
520
|
+
"""Compare this string with other
|
|
521
|
+
|
|
522
|
+
Compares this instance with a specified String object and indicates
|
|
523
|
+
whether this instance precedes, follows, or appears in the same
|
|
524
|
+
position in the sort order as the specified string.
|
|
525
|
+
"""
|
|
526
|
+
return cmp(this, other, StringComparison.CurrentCulture)
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
def ends_with_exact(string: str, pattern: str):
|
|
530
|
+
idx = string.rfind(pattern)
|
|
531
|
+
return idx >= 0 and idx == len(string) - len(pattern)
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
def ends_with(string: str, pattern: str, ic: bool | StringComparison):
|
|
535
|
+
if len(string) >= len(pattern):
|
|
536
|
+
return cmp(string[len(string) - len(pattern) : len(string)], pattern, ic) == 0
|
|
537
|
+
return False
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def starts_with_exact(string: str, pattern: str):
|
|
541
|
+
idx = string.find(pattern)
|
|
542
|
+
return idx == 0
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
def starts_with(string: str, pattern: str, ic: bool | StringComparison):
|
|
546
|
+
if len(string) >= len(pattern):
|
|
547
|
+
return cmp(string[0 : len(pattern)], pattern, ic) == 0
|
|
548
|
+
return False
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
def index_of_any(string: str, any_of: list[str], *args: int):
|
|
552
|
+
if not string:
|
|
553
|
+
return -1
|
|
554
|
+
|
|
555
|
+
start_index = args[0] if len(args) > 0 else 0
|
|
556
|
+
if start_index < 0:
|
|
557
|
+
raise ValueError("Start index cannot be negative")
|
|
558
|
+
|
|
559
|
+
length = args[1] if len(args) > 1 else len(string) - start_index
|
|
560
|
+
if length < 0:
|
|
561
|
+
raise ValueError("Length cannot be negative")
|
|
562
|
+
|
|
563
|
+
if length > len(string) - start_index:
|
|
564
|
+
raise ValueError("Invalid start_index and length")
|
|
565
|
+
|
|
566
|
+
string = string[start_index:length]
|
|
567
|
+
any_of_str = "".join(any_of)
|
|
568
|
+
for i, c in enumerate(string):
|
|
569
|
+
index = any_of_str.find(c)
|
|
570
|
+
if index > -1:
|
|
571
|
+
return i + start_index
|
|
572
|
+
|
|
573
|
+
return -1
|