From fbc9cefdabe7c9761144ff78188e34fb0761929c Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 10 Jan 2025 19:37:50 +0100 Subject: [PATCH 1/2] Version 0.1.21 (#431) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add error handling in case user is already part of database and permission already given to group Added error handling in case permission is already given to group and user is already part of group Feature COG-656 * feat: Add user verification for accessing data Verify user has access to data before returning it Feature COG-656 * feat: Add compute search to cognee Add compute search to cognee which makes searches human readable Feature COG-656 * feat: Add simple instruction for system prompt Add simple instruction for system prompt Feature COG-656 * pass pydantic model tocognify * feat: Add unauth access error to getting data Raise unauth access error when trying to read data without access Feature COG-656 * refactor: Rename query compute to query completion Rename searching type from compute to completion Refactor COG-656 * chore: Update typo in code Update typo in string in code Chore COG-656 * Add mcp to cognee * Add simple README * Update cognee-mcp/mcpcognee/__main__.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create dockerhub.yml * Update get_cognify_router.py * fix: Resolve reflection issue when running cognee a second time after pruning data When running cognee a second time after pruning data some metadata doesn't get pruned. This makes cognee believe some tables exist that have been deleted Fix * fix: Add metadata reflection fix to sqlite as well Added fix when reflecting metadata to sqlite as well Fix * update * Revert "fix: Add metadata reflection fix to sqlite as well" This reverts commit 394a0b2dfb9645e58ed31835e8eaec7c90970358. * COG-810 Implement a top-down dependency graph builder tool (#268) * feat: parse repo to call graph * Update/repo_processor/top_down_repo_parse.py task * fix: minor improvements * feat: file parsing jedi script optimisation --------- * Add type to DataPoint metadata (#364) * Add type to DataPoint metadata * Add missing index_fields * Use DataPoint UUID type in pgvector create_data_points * Make _metadata mandatory everywhere * Fixes * Fixes to our demo * feat: Add search by dataset for cognee Added ability to search by datasets for cognee users Feature COG-912 * feat: outsources chunking parameters to extract chunk from documents … (#289) * feat: outsources chunking parameters to extract chunk from documents task * fix: Remove backend lock from UI Removed lock that prevented using multiple datasets in cognify Fix COG-912 * COG 870 Remove duplicate edges from the code graph (#293) * feat: turn summarize_code into generator * feat: extract run_code_graph_pipeline, update the pipeline * feat: minimal code graph example * refactor: update argument * refactor: move run_code_graph_pipeline to cognify/code_graph_pipeline * refactor: indentation and whitespace nits * refactor: add deprecated use comments and warnings --------- Co-authored-by: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Co-authored-by: Igor Ilic <30923996+dexters1@users.noreply.github.com> Co-authored-by: Boris * test: Added test for getting of documents for search Added test to verify getting documents related to datasets intended for search Test COG-912 * Structured code summarization (#375) * feat: turn summarize_code into generator * feat: extract run_code_graph_pipeline, update the pipeline * feat: minimal code graph example * refactor: update argument * refactor: move run_code_graph_pipeline to cognify/code_graph_pipeline * refactor: indentation and whitespace nits * refactor: add deprecated use comments and warnings * Structured code summarization * add missing prompt file * Remove summarization_model argument from summarize_code and fix typehinting * minor refactors --------- Co-authored-by: lxobr <122801072+lxobr@users.noreply.github.com> Co-authored-by: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Co-authored-by: Igor Ilic <30923996+dexters1@users.noreply.github.com> Co-authored-by: Boris * fix: Resolve issue with cognify router graph model default value Resolve issue with default value for graph model in cognify endpoint Fix * chore: Resolve typo in getting documents code Resolve typo in code chore COG-912 * Update .github/workflows/dockerhub.yml Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update .github/workflows/dockerhub.yml * Update .github/workflows/dockerhub.yml * Update .github/workflows/dockerhub.yml * Update get_cognify_router.py * fix: Resolve syntax issue with cognify router Resolve syntax issue with cognify router Fix * feat: Add ruff pre-commit hook for linting and formatting Added formatting and linting on pre-commit hook Feature COG-650 * chore: Update ruff lint options in pyproject file Update ruff lint options in pyproject file Chore * test: Add ruff linter github action Added linting check with ruff in github actions Test COG-650 * feat: deletes executor limit from get_repo_file_dependencies * feat: implements mock feature in LiteLLM engine * refactor: Remove changes to cognify router Remove changes to cognify router Refactor COG-650 * fix: fixing boolean env for github actions * test: Add test for ruff format for cognee code Test if code is formatted for cognee Test COG-650 * refactor: Rename ruff gh actions Rename ruff gh actions to be more understandable Refactor COG-650 * chore: Remove checking of ruff lint and format on push Remove checking of ruff lint and format on push Chore COG-650 * feat: Add deletion of local files when deleting data Delete local files when deleting data from cognee Feature COG-475 * fix: changes back the max workers to 12 * feat: Adds mock summary for codegraph pipeline * refacotr: Add current development status Save current development status Refactor * Fix langfuse * Fix langfuse * Fix langfuse * Add evaluation notebook * Rename eval notebook * chore: Add temporary state of development Add temp development state to branch Chore * fix: Add poetry.lock file, make langfuse mandatory Added langfuse as mandatory dependency, added poetry.lock file Fix * Fix: fixes langfuse config settings * feat: Add deletion of local files made by cognee through data endpoint Delete local files made by cognee when deleting data from database through endpoint Feature COG-475 * test: Revert changes on test_pgvector Revert changes on test_pgvector which were made to test deletion of local files Test COG-475 * chore: deletes the old test for the codegraph pipeline * test: Add test to verify deletion of local files Added test that checks local files created by cognee will be deleted and those not created by cognee won't Test COG-475 * chore: deletes unused old version of the codegraph * chore: deletes unused imports from code_graph_pipeline * Ingest non-code files * Fixing review findings * Ingest non-code files (#395) * Ingest non-code files * Fixing review findings * test: Update test regarding message Update assertion message, add veryfing of file existence * Handle retryerrors in code summary (#396) * Handle retryerrors in code summary * Log instead of print * fix: updates the acreate_structured_output * chore: Add logging to sentry when file which should exist can't be found Log to sentry that a file which should exist can't be found Chore COG-475 * Fix diagram * fix: refactor mcp * Add Smithery CLI installation instructions and badge * Move readme * Update README.md * Update README.md * Cog 813 source code chunks (#383) * fix: pass the list of all CodeFiles to enrichment task * feat: introduce SourceCodeChunk, update metadata * feat: get_source_code_chunks code graph pipeline task * feat: integrate get_source_code_chunks task, comment out summarize_code * Fix code summarization (#387) * feat: update data models * feat: naive parse long strings in source code * fix: get_non_py_files instead of get_non_code_files * fix: limit recursion, add comment * handle embedding empty input error (#398) * feat: robustly handle CodeFile source code * refactor: sort imports * todo: add support for other embedding models * feat: add custom logger * feat: add robustness to get_source_code_chunks Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat: improve embedding exceptions * refactor: format indents, rename module --------- Co-authored-by: alekszievr <44192193+alekszievr@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix diagram * Fix instructions * adding and fixing files * Update README.md * ruff format * Fix linter issues * Implement PR review * Comment out profiling * fix: add allowed extensions * fix: adhere UnstructuredDocument.read() to Document * feat: time code graph run and add mock support * Fix ollama, work on visualization * fix: Fixes faulty logging format and sets up error logging in dynamic steps example * Overcome ContextWindowExceededError by checking token count while chunking (#413) * fix: Fixes duplicated edges in cognify by limiting the recursion depth in add datapoints * Adjust AudioDocument and handle None token limit * Handle azure models as well * Add clean logging to code graph example * Remove setting envvars from arg * fix: fixes create_cognee_style_network_with_logo unit test * fix: removes accidental remained print * Get embedding engine instead of passing it. Get it from vector engine instead of direct getter. * Fix visualization * Get embedding engine instead of passing it in code chunking. * Fix poetry issues * chore: Update version of poetry install action * chore: Update action to trigger on pull request for any branch * chore: Remove if in github action to allow triggering on push * chore: Remove if condition to allow gh actions to trigger on push to PR * chore: Update poetry version in github actions * chore: Set fixed ubuntu version to 22.04 * chore: Update py lint to use ubuntu 22.04 * chore: update ubuntu version to 22.04 * feat: implements the first version of graph based completion in search * chore: Update python 3.9 gh action to use 3.12 instead * chore: Update formatting of utils.py * Fix poetry issues * Adjust integration tests * fix: Fixes ruff formatting * Handle circular import * fix: Resolve profiler issue with partial and recursive logger imports Resolve issue for profiler with partial and recursive logger imports * fix: Remove logger from __init__.py file * test: Test profiling on HEAD branch * test: Return profiler to base branch * Set max_tokens in config * Adjust SWE-bench script to code graph pipeline call * Adjust SWE-bench script to code graph pipeline call * fix: Add fix for accessing dictionary elements that don't exits Using get for the text key instead of direct access to handle situation if the text key doesn't exist * feat: Add ability to change graph database configuration through cognee * feat: adds pydantic types to graph layer models * feat: adds basic retriever for swe bench * Match Ruff version in config to the one in github actions * feat: implements code retreiver * Fix: fixes unit test for codepart search * Format with Ruff 0.9.0 * Fix: deleting incorrect repo path * fix: resolve issue with langfuse dependency installation when integrating cognee in different packages * version: Increase version to 0.1.21 --------- Co-authored-by: Igor Ilic Co-authored-by: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Co-authored-by: Igor Ilic <30923996+dexters1@users.noreply.github.com> Co-authored-by: Rita Aleksziev Co-authored-by: vasilije Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: lxobr <122801072+lxobr@users.noreply.github.com> Co-authored-by: alekszievr <44192193+alekszievr@users.noreply.github.com> Co-authored-by: hajdul88 <52442977+hajdul88@users.noreply.github.com> Co-authored-by: Henry Mao <1828968+calclavia@users.noreply.github.com> --- .github/dependabot.yaml | 35 - .github/workflows/cd.yaml | 13 +- .github/workflows/cd_prd.yaml | 2 +- .github/workflows/ci.yaml | 2 +- .github/workflows/community_greetings.yml | 2 +- .github/workflows/docker_compose.yml | 4 +- .github/workflows/dockerhub.yml | 51 + .github/workflows/pr_lint | 44 + .github/workflows/profiling.yaml | 97 +- .github/workflows/py_lint.yml | 9 +- .github/workflows/release_discord_action.yml | 2 +- .github/workflows/reusable_notebook.yml | 6 +- .github/workflows/reusable_python_example.yml | 9 +- .github/workflows/ruff_format.yaml | 11 + .github/workflows/ruff_lint.yaml | 9 + .github/workflows/test_deduplication.yml | 12 +- .github/workflows/test_milvus.yml | 4 +- .github/workflows/test_neo4j.yml | 4 +- .github/workflows/test_pgvector.yml | 4 +- .github/workflows/test_python_3_10.yml | 5 +- .github/workflows/test_python_3_11.yml | 4 +- ...st_python_3_9.yml => test_python_3_12.yml} | 8 +- .github/workflows/test_qdrant.yml | 5 +- .github/workflows/test_weaviate.yml | 5 +- .pre-commit-config.yaml | 20 + CODE_OF_CONDUCT.md | 1 + CONTRIBUTING.md | 16 +- DCO.md | 17 + Dockerfile | 2 +- README.md | 98 +- alembic/env.py | 8 +- .../versions/482cd6517ce4_add_default_user.py | 5 +- .../8057ae7329c2_initial_migration.py | 3 +- assets/Dashboard_example.png | Bin 1387191 -> 0 bytes assets/architecture.png | Bin 78435 -> 0 bytes assets/cognee-logo.png | Bin 3487 -> 0 bytes assets/cognee_benefits.png | Bin 0 -> 361133 bytes assets/cognee_diagram.png | Bin 0 -> 437814 bytes assets/cognee_logo.png | Bin 0 -> 34282 bytes assets/topoteretes_logo.png | Bin 27320 -> 0 bytes assets/vscode-debug-config.png | Bin 87743 -> 0 bytes cognee-mcp/.python-version | 1 + cognee-mcp/README.md | 85 + cognee-mcp/cognee_mcp/__init__.py | 15 + cognee-mcp/cognee_mcp/server.py | 180 + cognee-mcp/pyproject.toml | 94 + cognee-mcp/uv.lock | 4946 +++++++++++++++++ cognee/__init__.py | 4 + cognee/api/DTO.py | 9 +- cognee/api/client.py | 134 +- cognee/api/v1/add/add.py | 73 +- cognee/api/v1/add/add_v2.py | 23 +- cognee/api/v1/add/routers/__init__.py | 2 +- cognee/api/v1/add/routers/get_add_router.py | 17 +- .../v1/authenticate_user/authenticate_user.py | 5 +- cognee/api/v1/cognify/code_graph_pipeline.py | 153 +- cognee/api/v1/cognify/cognify_v2.py | 99 +- cognee/api/v1/cognify/routers/__init__.py | 2 +- .../v1/cognify/routers/get_cognify_router.py | 22 +- cognee/api/v1/config/config.py | 46 +- cognee/api/v1/datasets/datasets.py | 7 +- cognee/api/v1/datasets/routers/__init__.py | 2 +- .../datasets/routers/get_datasets_router.py | 83 +- cognee/api/v1/permissions/routers/__init__.py | 2 +- .../routers/get_permissions_router.py | 67 +- cognee/api/v1/prune/prune.py | 8 +- cognee/api/v1/search/get_search_history.py | 3 +- cognee/api/v1/search/routers/__init__.py | 2 +- .../v1/search/routers/get_search_router.py | 17 +- cognee/api/v1/search/search.legacy.py | 13 +- cognee/api/v1/search/search_v2.py | 28 +- cognee/api/v1/settings/routers/__init__.py | 2 +- .../settings/routers/get_settings_router.py | 14 +- cognee/api/v1/users/create_user.py | 8 +- cognee/api/v1/users/routers/__init__.py | 1 + .../api/v1/users/routers/get_auth_router.py | 1 + .../v1/users/routers/get_register_router.py | 1 + .../routers/get_reset_password_router.py | 1 + .../api/v1/users/routers/get_users_router.py | 1 + .../api/v1/users/routers/get_verify_router.py | 1 + .../v1/users/routers/get_visualize_router.py | 32 + cognee/api/v1/visualize/__init__.py | 1 + cognee/api/v1/visualize/visualize.py | 14 + cognee/base_config.py | 8 +- cognee/exceptions/__init__.py | 2 +- cognee/exceptions/exceptions.py | 19 +- cognee/fetch_secret.py | 2 +- .../data/chunking/DefaultChunkEngine.py | 53 +- .../data/chunking/LangchainChunkingEngine.py | 34 +- cognee/infrastructure/data/chunking/config.py | 3 +- .../data/chunking/create_chunking_engine.py | 2 + .../data/chunking/get_chunking_engine.py | 1 + .../data/utils/extract_keywords.py | 5 +- .../exceptions/EmbeddingException.py | 4 + .../databases/exceptions/__init__.py | 2 +- .../databases/exceptions/exceptions.py | 3 +- .../infrastructure/databases/graph/config.py | 5 +- .../databases/graph/get_graph_engine.py | 10 +- .../databases/graph/graph_db_interface.py | 57 +- .../databases/graph/neo4j_driver/adapter.py | 205 +- .../databases/graph/networkx/adapter.py | 129 +- .../hybrid/falkordb/FalkorDBAdapter.py | 139 +- .../databases/relational/ModelBase.py | 1 + .../databases/relational/config.py | 16 +- .../relational/create_db_and_tables.py | 1 + .../relational/create_relational_engine.py | 5 +- .../relational/get_relational_engine.py | 3 +- .../sqlalchemy/SqlAlchemyAdapter.py | 90 +- .../infrastructure/databases/vector/config.py | 7 +- .../databases/vector/create_vector_engine.py | 13 +- .../vector/embeddings/EmbeddingEngine.py | 1 + .../embeddings/LiteLLMEmbeddingEngine.py | 45 +- .../databases/vector/embeddings/config.py | 4 +- .../vector/embeddings/get_embedding_engine.py | 11 +- .../databases/vector/get_vector_engine.py | 1 + .../vector/lancedb/LanceDBAdapter.py | 137 +- .../databases/vector/milvus/MilvusAdapter.py | 116 +- .../vector/models/CollectionConfig.py | 1 + .../databases/vector/models/ScoredResult.py | 3 +- .../databases/vector/models/VectorConfig.py | 3 +- .../vector/pgvector/PGVectorAdapter.py | 154 +- .../databases/vector/pgvector/__init__.py | 2 +- .../vector/pgvector/create_db_and_tables.py | 1 - .../vector/pgvector/serialize_data.py | 3 +- .../databases/vector/pinecone/adapter.py | 16 +- .../databases/vector/qdrant/QDrantAdapter.py | 171 +- .../infrastructure/databases/vector/utils.py | 6 +- .../databases/vector/vector_db_interface.py | 50 +- .../vector/weaviate_db/WeaviateAdapter.py | 145 +- .../infrastructure/engine/models/DataPoint.py | 26 +- .../files/add_file_to_storage.py | 1 + .../files/remove_file_from_storage.py | 1 + .../files/storage/LocalStorage.py | 9 +- .../files/storage/StorageManager.py | 6 +- .../files/utils/extract_text_from_file.py | 3 +- .../files/utils/get_file_metadata.py | 11 +- .../files/utils/guess_file_type.py | 12 +- .../files/utils/is_text_content.py | 21 +- .../infrastructure/llm/anthropic/adapter.py | 33 +- cognee/infrastructure/llm/config.py | 6 +- .../llm/generic_llm_api/adapter.py | 76 +- cognee/infrastructure/llm/get_llm_client.py | 26 +- cognee/infrastructure/llm/llm_interface.py | 12 +- cognee/infrastructure/llm/openai/adapter.py | 128 +- .../llm/prompts/answer_simple_question.txt | 1 + .../answer_simple_question_restricted.txt | 1 + .../prompts/graph_context_for_question.txt | 2 + .../llm/prompts/patch_gen_kg_instructions.txt | 9 +- .../llm/prompts/read_query_prompt.py | 3 +- .../llm/prompts/render_prompt.py | 7 +- .../llm/prompts/summarize_code.txt | 10 + .../pipeline/models/Operation.py | 9 +- cognee/modules/chunking/TextChunker.py | 90 +- .../modules/chunking/models/DocumentChunk.py | 7 +- cognee/modules/cognify/config.py | 8 +- cognee/modules/data/deletion/prune_data.py | 1 + cognee/modules/data/deletion/prune_system.py | 3 +- cognee/modules/data/exceptions/__init__.py | 3 +- cognee/modules/data/exceptions/exceptions.py | 21 +- .../data/extraction/extract_summary.py | 32 +- .../data/extraction/extract_topics_naive.py | 19 +- .../add_model_class_to_graph.py | 27 +- .../knowledge_graph/extract_content_graph.py | 5 +- cognee/modules/data/methods/__init__.py | 2 +- cognee/modules/data/methods/create_dataset.py | 17 +- cognee/modules/data/methods/delete_data.py | 16 +- cognee/modules/data/methods/delete_dataset.py | 3 +- cognee/modules/data/methods/get_data.py | 20 +- cognee/modules/data/methods/get_dataset.py | 1 + .../modules/data/methods/get_dataset_data.py | 1 + cognee/modules/data/methods/get_datasets.py | 7 +- .../data/methods/get_datasets_by_name.py | 9 +- cognee/modules/data/models/Data.py | 10 +- cognee/modules/data/models/Dataset.py | 19 +- cognee/modules/data/models/DatasetData.py | 7 +- cognee/modules/data/models/Metadata.py | 11 +- cognee/modules/data/models/__init__.py | 1 + .../data/operations/detect_language.py | 2 + .../modules/data/operations/get_metadata.py | 2 - .../modules/data/operations/translate_text.py | 13 +- .../modules/data/operations/write_metadata.py | 16 +- .../document_types/AudioDocument.py | 17 +- .../document_types/ChunkerMapping.py | 14 + .../processing/document_types/Document.py | 9 +- .../document_types/ImageDocument.py | 16 +- .../processing/document_types/PdfDocument.py | 13 +- .../processing/document_types/TextDocument.py | 15 +- .../document_types/UnstructuredDocument.py | 8 +- .../modules/data/processing/has_new_chunks.py | 12 +- cognee/modules/engine/models/Entity.py | 5 +- cognee/modules/engine/models/EntityType.py | 7 +- .../modules/engine/utils/generate_node_id.py | 1 + .../graph/cognee_graph/CogneeAbstractGraph.py | 5 +- .../modules/graph/cognee_graph/CogneeGraph.py | 52 +- .../graph/cognee_graph/CogneeGraphElements.py | 54 +- cognee/modules/graph/exceptions/__init__.py | 2 +- cognee/modules/graph/exceptions/exceptions.py | 3 +- cognee/modules/graph/models/EdgeType.py | 6 +- .../graph/utils/convert_node_to_data_point.py | 3 +- .../utils/deduplicate_nodes_and_edges.py | 1 + .../utils/expand_with_nodes_and_edges.py | 24 +- .../graph/utils/get_graph_from_model.py | 44 +- .../utils/get_model_instance_from_graph.py | 12 +- .../graph/utils/retrieve_existing_edges.py | 12 +- cognee/modules/ingestion/classify.py | 4 +- .../ingestion/data_types/BinaryData.py | 2 + .../modules/ingestion/data_types/TextData.py | 2 + .../ingestion/discover_directory_datasets.py | 5 +- .../modules/ingestion/exceptions/__init__.py | 2 +- .../ingestion/exceptions/exceptions.py | 11 +- .../modules/ingestion/get_matched_datasets.py | 1 + cognee/modules/ingestion/save_data_to_file.py | 3 +- cognee/modules/pipelines/models/Pipeline.py | 13 +- .../modules/pipelines/models/PipelineRun.py | 8 +- .../modules/pipelines/models/PipelineTask.py | 7 +- cognee/modules/pipelines/models/Task.py | 12 +- cognee/modules/pipelines/models/TaskRun.py | 5 +- .../operations/get_pipeline_status.py | 33 +- .../operations/log_pipeline_status.py | 13 +- .../pipelines/operations/run_parallel.py | 1 + .../modules/pipelines/operations/run_tasks.py | 190 +- cognee/modules/pipelines/tasks/Task.py | 12 +- .../retrieval/brute_force_triplet_search.py | 68 +- .../description_to_codepart_search.py | 92 +- cognee/modules/search/models/Query.py | 7 +- cognee/modules/search/models/Result.py | 9 +- .../modules/search/operations/get_history.py | 17 +- .../modules/search/operations/get_queries.py | 9 +- .../modules/search/operations/get_results.py | 9 +- cognee/modules/search/operations/log_query.py | 7 +- .../modules/search/operations/log_result.py | 13 +- .../modules/settings/get_current_settings.py | 20 +- cognee/modules/settings/get_settings.py | 189 +- cognee/modules/settings/save_llm_config.py | 2 + .../modules/settings/save_vector_db_config.py | 2 + cognee/modules/storage/utils/__init__.py | 24 +- .../users/authentication/get_auth_backend.py | 11 +- .../methods/authenticate_user.py | 3 +- cognee/modules/users/exceptions/__init__.py | 2 +- cognee/modules/users/exceptions/exceptions.py | 8 +- cognee/modules/users/get_fastapi_users.py | 1 + cognee/modules/users/get_user_db.py | 5 +- cognee/modules/users/get_user_manager.py | 9 +- .../users/methods/create_default_user.py | 13 +- cognee/modules/users/methods/create_user.py | 11 +- cognee/modules/users/methods/delete_user.py | 1 + .../users/methods/get_authenticated_user.py | 2 +- .../modules/users/methods/get_default_user.py | 6 +- cognee/modules/users/methods/get_user.py | 9 +- cognee/modules/users/models/ACL.py | 11 +- cognee/modules/users/models/ACLResources.py | 7 +- cognee/modules/users/models/Group.py | 9 +- .../modules/users/models/GroupPermission.py | 12 + cognee/modules/users/models/Permission.py | 10 +- cognee/modules/users/models/Principal.py | 9 +- cognee/modules/users/models/Resource.py | 11 +- cognee/modules/users/models/User.py | 12 +- cognee/modules/users/models/UserGroup.py | 7 +- cognee/modules/users/models/__init__.py | 2 + .../methods/check_permission_on_documents.py | 8 +- .../methods/get_document_ids_for_user.py | 51 +- .../methods/give_permission_on_document.py | 13 +- cognee/root_dir.py | 1 + cognee/shared/CodeGraphEntities.py | 36 +- cognee/shared/GithubClassification.py | 9 +- cognee/shared/GithubTopology.py | 11 +- cognee/shared/SourceCodeGraph.py | 60 +- cognee/shared/data_models.py | 99 +- cognee/shared/encode_uuid.py | 5 +- cognee/shared/exceptions/__init__.py | 2 +- cognee/shared/exceptions/exceptions.py | 11 +- cognee/shared/utils.py | 355 +- .../chunk_naive_llm_classifier.py | 147 +- cognee/tasks/chunks/chunk_by_paragraph.py | 64 +- cognee/tasks/chunks/chunk_by_sentence.py | 10 +- cognee/tasks/chunks/chunk_by_word.py | 28 +- cognee/tasks/chunks/query_chunks.py | 3 +- .../chunks/remove_disconnected_chunks.py | 7 +- cognee/tasks/completion/__init__.py | 2 + .../tasks/completion/exceptions/__init__.py | 9 + .../tasks/completion/exceptions/exceptions.py | 12 + .../completion/graph_query_completion.py | 46 + cognee/tasks/completion/query_completion.py | 36 + .../check_permissions_on_documents.py | 1 + cognee/tasks/documents/classify_documents.py | 14 +- .../extract_chunks_from_documents.py | 13 +- cognee/tasks/graph/extract_graph_from_code.py | 3 +- cognee/tasks/graph/extract_graph_from_data.py | 4 +- cognee/tasks/graph/infer_data_ontology.py | 104 +- cognee/tasks/graph/models.py | 9 +- cognee/tasks/graph/query_graph_connections.py | 9 +- cognee/tasks/ingestion/__init__.py | 1 + cognee/tasks/ingestion/get_dlt_destination.py | 31 +- cognee/tasks/ingestion/ingest_data.py | 69 +- .../ingestion/ingest_data_with_metadata.py | 31 +- .../ingestion/resolve_data_directories.py | 44 + .../ingestion/save_data_item_to_storage.py | 4 +- ...save_data_item_with_metadata_to_storage.py | 5 +- .../tasks/ingestion/save_data_to_storage.py | 1 + cognee/tasks/ingestion/transform_data.py | 7 +- cognee/tasks/repo_processor/__init__.py | 5 +- .../repo_processor/enrich_dependency_graph.py | 29 +- .../repo_processor/expand_dependency_graph.py | 24 +- .../repo_processor/extract_code_parts.py | 19 +- .../repo_processor/get_local_dependencies.py | 21 +- .../repo_processor/get_non_code_files.py | 150 + .../get_repo_file_dependencies.py | 64 +- .../repo_processor/get_source_code_chunks.py | 177 + .../repo_processor/top_down_repo_parse.py | 179 + cognee/tasks/storage/add_data_points.py | 22 +- cognee/tasks/storage/index_data_points.py | 45 +- cognee/tasks/storage/index_graph_edges.py | 37 +- cognee/tasks/summarization/mock_summary.py | 38 + cognee/tasks/summarization/models.py | 15 +- cognee/tasks/summarization/query_summaries.py | 3 +- cognee/tasks/summarization/summarize_code.py | 49 +- cognee/tasks/summarization/summarize_text.py | 10 +- cognee/tasks/temporal_awareness/__init__.py | 6 +- .../build_graph_with_temporal_awareness.py | 9 +- .../search_graph_with_temporal_awareness.py | 4 +- cognee/tests/get_graph_url.py | 13 +- .../documents/AudioDocument_test.py | 27 +- .../documents/ImageDocument_test.py | 28 +- .../integration/documents/PdfDocument_test.py | 25 +- .../documents/TextDocument_test.py | 26 +- .../documents/UnstructuredDocument_test.py | 72 +- .../run_toy_tasks/run_task_from_queue_test.py | 4 +- .../run_toy_tasks/run_tasks_test.py | 4 +- cognee/tests/test_code_generation.py | 38 - cognee/tests/test_deduplication.py | 28 +- cognee/tests/test_falkordb.py | 38 +- cognee/tests/test_library.py | 38 +- cognee/tests/test_milvus.py | 18 +- cognee/tests/test_neo4j.py | 32 +- cognee/tests/test_pgvector.py | 90 +- cognee/tests/test_qdrant.py | 32 +- cognee/tests/test_weaviate.py | 32 +- .../databases/test_index_graph_edges.py | 52 +- .../graph/get_graph_from_huge_model_test.py | 80 +- .../graph/get_graph_from_model_test.py | 62 +- .../graph/cognee_graph_elements_test.py | 4 +- .../test_description_to_codepart_search.py | 73 +- .../chunks/chunk_by_paragraph_2_test.py | 36 +- .../chunks/chunk_by_paragraph_test.py | 10 +- .../chunks/chunk_by_sentence_test.py | 12 +- .../processing/chunks/chunk_by_word_test.py | 10 +- .../tests/unit/processing/utils/utils_test.py | 131 + evals/deepeval_metrics.py | 24 +- evals/eval_on_hotpot.py | 74 +- evals/eval_swe_bench.py | 131 +- evals/eval_utils.py | 9 +- evals/generate_test_set.py | 15 +- evals/official_hotpot_metrics.py | 37 +- evals/simple_rag_vs_cognee_eval.py | 63 +- examples/python/code_graph_example.py | 47 + examples/python/dynamic_steps_example.py | 20 +- examples/python/graphiti_example.py | 16 +- examples/python/simple_example.py | 43 +- notebooks/cognee_code_graph_demo.ipynb | 52 +- notebooks/cognee_demo.ipynb | 738 ++- notebooks/cognee_hotpot_eval.ipynb | 229 + notebooks/cognee_llama_index.ipynb | 43 +- notebooks/cognee_multimedia_demo.ipynb | 24 +- notebooks/hr_demo.ipynb | 126 +- poetry.lock | 3293 ++++++----- .../benchmark_function.py | 5 - .../profile_graph_pydantic_conversion.py | 36 +- profiling/util/DummyEmbeddingEngine.py | 5 +- profiling/util/DummyLLMAdapter.py | 10 +- pyproject.toml | 52 +- tests/import_test.py | 2 +- tools/check-lockfile.py | 11 +- tools/daily_pypi_downloads.py | 81 - tools/push_to_posthog.py | 76 - 374 files changed, 13772 insertions(+), 5295 deletions(-) delete mode 100644 .github/dependabot.yaml create mode 100644 .github/workflows/dockerhub.yml create mode 100644 .github/workflows/pr_lint create mode 100644 .github/workflows/ruff_format.yaml create mode 100644 .github/workflows/ruff_lint.yaml rename .github/workflows/{test_python_3_9.yml => test_python_3_12.yml} (92%) create mode 100644 .pre-commit-config.yaml create mode 100644 DCO.md delete mode 100644 assets/Dashboard_example.png delete mode 100644 assets/architecture.png delete mode 100644 assets/cognee-logo.png create mode 100644 assets/cognee_benefits.png create mode 100644 assets/cognee_diagram.png create mode 100644 assets/cognee_logo.png delete mode 100644 assets/topoteretes_logo.png delete mode 100644 assets/vscode-debug-config.png create mode 100644 cognee-mcp/.python-version create mode 100644 cognee-mcp/README.md create mode 100644 cognee-mcp/cognee_mcp/__init__.py create mode 100644 cognee-mcp/cognee_mcp/server.py create mode 100644 cognee-mcp/pyproject.toml create mode 100644 cognee-mcp/uv.lock create mode 100644 cognee/api/v1/users/routers/get_visualize_router.py create mode 100644 cognee/api/v1/visualize/__init__.py create mode 100644 cognee/api/v1/visualize/visualize.py create mode 100644 cognee/infrastructure/databases/exceptions/EmbeddingException.py create mode 100644 cognee/infrastructure/llm/prompts/answer_simple_question.txt create mode 100644 cognee/infrastructure/llm/prompts/answer_simple_question_restricted.txt create mode 100644 cognee/infrastructure/llm/prompts/graph_context_for_question.txt create mode 100644 cognee/infrastructure/llm/prompts/summarize_code.txt create mode 100644 cognee/modules/data/processing/document_types/ChunkerMapping.py create mode 100644 cognee/modules/users/models/GroupPermission.py create mode 100644 cognee/tasks/completion/__init__.py create mode 100644 cognee/tasks/completion/exceptions/__init__.py create mode 100644 cognee/tasks/completion/exceptions/exceptions.py create mode 100644 cognee/tasks/completion/graph_query_completion.py create mode 100644 cognee/tasks/completion/query_completion.py create mode 100644 cognee/tasks/ingestion/resolve_data_directories.py create mode 100644 cognee/tasks/repo_processor/get_non_code_files.py create mode 100644 cognee/tasks/repo_processor/get_source_code_chunks.py create mode 100644 cognee/tasks/repo_processor/top_down_repo_parse.py create mode 100644 cognee/tasks/summarization/mock_summary.py delete mode 100755 cognee/tests/test_code_generation.py create mode 100644 cognee/tests/unit/processing/utils/utils_test.py create mode 100644 examples/python/code_graph_example.py create mode 100644 notebooks/cognee_hotpot_eval.ipynb delete mode 100644 tools/daily_pypi_downloads.py delete mode 100644 tools/push_to_posthog.py diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml deleted file mode 100644 index 6c83d20c2..000000000 --- a/.github/dependabot.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Configuration: https://dependabot.com/docs/config-file/ -# Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically - -version: 2 - -updates: - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "weekly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 - - - package-ecosystem: "docker" - directory: "/" - schedule: - interval: "weekly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 146ec4ed4..ec4b56300 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -3,7 +3,7 @@ name: publish dev | Docker image on: push: branches: - - main + - dev - feature/* paths-ignore: - '**.md' @@ -17,7 +17,7 @@ jobs: publish_docker_to_ecr: name: Publish Cognee Docker image - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 permissions: id-token: write contents: read @@ -28,13 +28,8 @@ jobs: - name: Set environment variable for stage id: set-env run: | - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - echo "STAGE=prd" >> $GITHUB_ENV - echo "::set-output name=stage::prd" - else - echo "STAGE=dev" >> $GITHUB_ENV - echo "::set-output name=stage::dev" - fi + echo "STAGE=dev" >> $GITHUB_ENV + echo "::set-output name=stage::dev" - name: Use output run: echo "The stage is ${{ steps.set-env.outputs.stage }}" diff --git a/.github/workflows/cd_prd.yaml b/.github/workflows/cd_prd.yaml index fc40d8884..15c046215 100644 --- a/.github/workflows/cd_prd.yaml +++ b/.github/workflows/cd_prd.yaml @@ -17,7 +17,7 @@ jobs: publish_docker_to_ecr: name: Publish Docker PromethAI image - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 permissions: id-token: write contents: read diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f9acd1be0..7d63aa88d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: build_docker: name: Build Cognee Backend Docker App Image - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Check out Cognee code uses: actions/checkout@v3 diff --git a/.github/workflows/community_greetings.yml b/.github/workflows/community_greetings.yml index b480ed111..a43f7f549 100644 --- a/.github/workflows/community_greetings.yml +++ b/.github/workflows/community_greetings.yml @@ -4,7 +4,7 @@ on: [pull_request, issues] jobs: greeting: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/first-interaction@v1 with: diff --git a/.github/workflows/docker_compose.yml b/.github/workflows/docker_compose.yml index 93b41e5af..321cbd045 100644 --- a/.github/workflows/docker_compose.yml +++ b/.github/workflows/docker_compose.yml @@ -4,13 +4,15 @@ on: push: branches: - main + - dev pull_request: branches: - main + - dev jobs: docker-compose-test: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout repository diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml new file mode 100644 index 000000000..20f0bde96 --- /dev/null +++ b/.github/workflows/dockerhub.yml @@ -0,0 +1,51 @@ +name: build | Build and Push Docker Image to DockerHub + +on: + push: + branches: + - main + +jobs: + docker-build-and-push: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract Git information + id: git-info + run: | + echo "BRANCH_NAME=${GITHUB_REF_NAME}" >> "$GITHUB_ENV" + echo "COMMIT_SHA=${GITHUB_SHA::7}" >> "$GITHUB_ENV" + + - name: Build and Push Docker Image + run: | + IMAGE_NAME=cognee/cognee + TAG_VERSION="${BRANCH_NAME}-${COMMIT_SHA}" + + echo "Building image: ${IMAGE_NAME}:${TAG_VERSION}" + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --push \ + --tag "${IMAGE_NAME}:${TAG_VERSION}" \ + --tag "${IMAGE_NAME}:latest" \ + . + + - name: Verify pushed Docker images + run: | + # Verify both platform variants + for PLATFORM in "linux/amd64" "linux/arm64"; do + echo "Verifying image for $PLATFORM..." + docker buildx imagetools inspect "${IMAGE_NAME}:${TAG_VERSION}" --format "{{.Manifest.$PLATFORM.Digest}}" + done + echo "Successfully verified images in Docker Hub" diff --git a/.github/workflows/pr_lint b/.github/workflows/pr_lint new file mode 100644 index 000000000..f0e739813 --- /dev/null +++ b/.github/workflows/pr_lint @@ -0,0 +1,44 @@ +## Reference: https://github.com/amannn/action-semantic-pull-request +--- +name: lint | PR + +on: + pull_request: + types: + - opened + - reopened + - edited + - synchronize + +permissions: + contents: read + +jobs: + pr_title: + permissions: + pull-requests: write + statuses: write + name: Validate & Label PR + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + # Configure which types are allowed (newline-delimited). + # From: https://github.com/commitizen/conventional-commit-types/blob/master/index.json + # listing all below + types: | + chore + ci + docs + feat + fix + perf + refactor + revert + test + break + - uses: release-drafter/release-drafter@v6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/profiling.yaml b/.github/workflows/profiling.yaml index 6ca09f9dc..2408a8f70 100644 --- a/.github/workflows/profiling.yaml +++ b/.github/workflows/profiling.yaml @@ -1,10 +1,13 @@ name: test | profiling on: - push + workflow_dispatch: + pull_request: + types: [labeled, synchronize] + jobs: profiler: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: # Checkout the code from the repository with full history @@ -44,7 +47,7 @@ jobs: python-version: '3.10' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true @@ -54,6 +57,8 @@ jobs: run: | poetry install --no-interaction --all-extras poetry run pip install pyinstrument + poetry run pip install parso + poetry run pip install jedi # Set environment variables for SHAs @@ -77,50 +82,50 @@ jobs: poetry run pyinstrument --renderer json -o base_results.json cognee/api/v1/cognify/code_graph_pipeline.py # Run profiler on head branch - - name: Run profiler on head branch - env: - HEAD_SHA: ${{ env.HEAD_SHA }} - run: | - echo "Profiling the head branch for code_graph_pipeline.py" - echo "Checking out head SHA: $HEAD_SHA" - git checkout $HEAD_SHA - echo "This is the working directory: $PWD" - # Ensure the script is executable - chmod +x cognee/api/v1/cognify/code_graph_pipeline.py - # Run Scalene - poetry run pyinstrument --renderer json -o head_results.json cognee/api/v1/cognify/code_graph_pipeline.py +# - name: Run profiler on head branch +# env: +# HEAD_SHA: ${{ env.HEAD_SHA }} +# run: | +# echo "Profiling the head branch for code_graph_pipeline.py" +# echo "Checking out head SHA: $HEAD_SHA" +# git checkout $HEAD_SHA +# echo "This is the working directory: $PWD" +# # Ensure the script is executable +# chmod +x cognee/api/v1/cognify/code_graph_pipeline.py +# # Run Scalene +# poetry run pyinstrument --renderer json -o head_results.json cognee/api/v1/cognify/code_graph_pipeline.py - # Compare profiling results - - name: Compare profiling results - run: | - python -c ' - import json - try: - with open("base_results.json") as f: - base = json.load(f) - with open("head_results.json") as f: - head = json.load(f) - cpu_diff = head.get("total_cpu_samples_python", 0) - base.get("total_cpu_samples_python", 0) - memory_diff = head.get("malloc_samples", 0) - base.get("malloc_samples", 0) - results = [ - f"CPU Usage Difference: {cpu_diff}", - f"Memory Usage Difference: {memory_diff} bytes" - ] - with open("profiling_diff.txt", "w") as f: - f.write("\\n".join(results) + "\\n") - print("\\n".join(results)) # Print results to terminal - except Exception as e: - error_message = f"Error comparing profiling results: {e}" - with open("profiling_diff.txt", "w") as f: - f.write(error_message + "\\n") - print(error_message) # Print error to terminal - ' - - - name: Upload profiling diff artifact - uses: actions/upload-artifact@v3 - with: - name: profiling-diff - path: profiling_diff.txt +# # Compare profiling results +# - name: Compare profiling results +# run: | +# python -c ' +# import json +# try: +# with open("base_results.json") as f: +# base = json.load(f) +# with open("head_results.json") as f: +# head = json.load(f) +# cpu_diff = head.get("total_cpu_samples_python", 0) - base.get("total_cpu_samples_python", 0) +# memory_diff = head.get("malloc_samples", 0) - base.get("malloc_samples", 0) +# results = [ +# f"CPU Usage Difference: {cpu_diff}", +# f"Memory Usage Difference: {memory_diff} bytes" +# ] +# with open("profiling_diff.txt", "w") as f: +# f.write("\\n".join(results) + "\\n") +# print("\\n".join(results)) # Print results to terminal +# except Exception as e: +# error_message = f"Error comparing profiling results: {e}" +# with open("profiling_diff.txt", "w") as f: +# f.write(error_message + "\\n") +# print(error_message) # Print error to terminal +# ' +# +# - name: Upload profiling diff artifact +# uses: actions/upload-artifact@v3 +# with: +# name: profiling-diff +# path: profiling_diff.txt # Post results to the pull request # - name: Post profiling results to PR diff --git a/.github/workflows/py_lint.yml b/.github/workflows/py_lint.yml index 713b23624..543a0d221 100644 --- a/.github/workflows/py_lint.yml +++ b/.github/workflows/py_lint.yml @@ -2,11 +2,8 @@ name: lint | code & tests on: - pull_request: - branches: - - main - - devel workflow_dispatch: + pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -19,8 +16,8 @@ jobs: fail-fast: true matrix: os: - - ubuntu-latest - python-version: ["3.8.x", "3.9.x", "3.10.x", "3.11.x"] + - ubuntu-22.04 + python-version: ["3.10.x", "3.11.x"] defaults: run: diff --git a/.github/workflows/release_discord_action.yml b/.github/workflows/release_discord_action.yml index 7b3ae845d..f3113ccb7 100644 --- a/.github/workflows/release_discord_action.yml +++ b/.github/workflows/release_discord_action.yml @@ -6,7 +6,7 @@ on: jobs: github-releases-to-discord: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/reusable_notebook.yml b/.github/workflows/reusable_notebook.yml index 0c0b63ec4..8034aca97 100644 --- a/.github/workflows/reusable_notebook.yml +++ b/.github/workflows/reusable_notebook.yml @@ -22,7 +22,7 @@ jobs: run_notebook_test: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -36,7 +36,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true @@ -58,4 +58,4 @@ jobs: --to notebook \ --execute ${{ inputs.notebook-location }} \ --output executed_notebook.ipynb \ - --ExecutePreprocessor.timeout=1200 \ No newline at end of file + --ExecutePreprocessor.timeout=1200 diff --git a/.github/workflows/reusable_python_example.yml b/.github/workflows/reusable_python_example.yml index 03f928656..4aa4aaba6 100644 --- a/.github/workflows/reusable_python_example.yml +++ b/.github/workflows/reusable_python_example.yml @@ -22,7 +22,7 @@ jobs: run_notebook_test: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -33,10 +33,10 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.11.x' + python-version: '3.12.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true @@ -49,7 +49,8 @@ jobs: - name: Execute Python Example env: ENV: 'dev' + PYTHONFAULTHANDLER: 1 LLM_API_KEY: ${{ secrets.OPENAI_API_KEY }} GRAPHISTRY_USERNAME: ${{ secrets.GRAPHISTRY_USERNAME }} GRAPHISTRY_PASSWORD: ${{ secrets.GRAPHISTRY_PASSWORD }} - run: poetry run python ${{ inputs.example-location }} \ No newline at end of file + run: poetry run python ${{ inputs.example-location }} diff --git a/.github/workflows/ruff_format.yaml b/.github/workflows/ruff_format.yaml new file mode 100644 index 000000000..a75a795e7 --- /dev/null +++ b/.github/workflows/ruff_format.yaml @@ -0,0 +1,11 @@ +name: ruff format +on: [ pull_request ] + +jobs: + ruff: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/ruff-action@v2 + with: + args: "format --check" diff --git a/.github/workflows/ruff_lint.yaml b/.github/workflows/ruff_lint.yaml new file mode 100644 index 000000000..4c4fb81e3 --- /dev/null +++ b/.github/workflows/ruff_lint.yaml @@ -0,0 +1,9 @@ +name: ruff lint +on: [ pull_request ] + +jobs: + ruff: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/ruff-action@v2 diff --git a/.github/workflows/test_deduplication.yml b/.github/workflows/test_deduplication.yml index 924aab130..923bbb68c 100644 --- a/.github/workflows/test_deduplication.yml +++ b/.github/workflows/test_deduplication.yml @@ -3,8 +3,6 @@ name: test | deduplication on: workflow_dispatch: pull_request: - branches: - - main types: [labeled, synchronize] @@ -16,15 +14,9 @@ env: RUNTIME__LOG_LEVEL: ERROR jobs: - get_docs_changes: - name: docs changes - uses: ./.github/workflows/get_docs_changes.yml - run_deduplication_test: name: test - needs: get_docs_changes - if: needs.get_docs_changes.outputs.changes_outside_docs == 'true' && ${{ github.event.label.name == 'run-checks' }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -53,7 +45,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_milvus.yml b/.github/workflows/test_milvus.yml index 5cad72378..51e5f0982 100644 --- a/.github/workflows/test_milvus.yml +++ b/.github/workflows/test_milvus.yml @@ -17,7 +17,7 @@ jobs: run_milvus: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false defaults: @@ -35,7 +35,7 @@ jobs: - name: Install Poetry # https://github.com/snok/install-poetry#running-on-windows - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_neo4j.yml b/.github/workflows/test_neo4j.yml index 3f3a35e4f..e1d71dcfd 100644 --- a/.github/workflows/test_neo4j.yml +++ b/.github/workflows/test_neo4j.yml @@ -15,7 +15,7 @@ env: jobs: run_neo4j_integration_test: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: @@ -31,7 +31,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_pgvector.yml b/.github/workflows/test_pgvector.yml index a162d2cb4..d5356d603 100644 --- a/.github/workflows/test_pgvector.yml +++ b/.github/workflows/test_pgvector.yml @@ -17,7 +17,7 @@ jobs: run_pgvector_integration_test: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -46,7 +46,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_python_3_10.yml b/.github/workflows/test_python_3_10.yml index 39eb4e57a..2cf620a17 100644 --- a/.github/workflows/test_python_3_10.yml +++ b/.github/workflows/test_python_3_10.yml @@ -14,10 +14,9 @@ env: ENV: 'dev' jobs: - run_common: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false defaults: @@ -35,7 +34,7 @@ jobs: - name: Install Poetry # https://github.com/snok/install-poetry#running-on-windows - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_python_3_11.yml b/.github/workflows/test_python_3_11.yml index 2dd704eb9..b119dbcb2 100644 --- a/.github/workflows/test_python_3_11.yml +++ b/.github/workflows/test_python_3_11.yml @@ -17,7 +17,7 @@ jobs: run_common: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false defaults: @@ -35,7 +35,7 @@ jobs: - name: Install Poetry # https://github.com/snok/install-poetry#running-on-windows - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_python_3_9.yml b/.github/workflows/test_python_3_12.yml similarity index 92% rename from .github/workflows/test_python_3_9.yml rename to .github/workflows/test_python_3_12.yml index 99c2b9a7a..5a032144a 100644 --- a/.github/workflows/test_python_3_9.yml +++ b/.github/workflows/test_python_3_12.yml @@ -1,4 +1,4 @@ -name: test | python 3.9 +name: test | python 3.12 on: workflow_dispatch: @@ -17,7 +17,7 @@ jobs: run_common: name: test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false defaults: @@ -31,11 +31,11 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.9.x' + python-version: '3.12.x' - name: Install Poetry # https://github.com/snok/install-poetry#running-on-windows - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_qdrant.yml b/.github/workflows/test_qdrant.yml index f0a2e3d3f..d1447c65c 100644 --- a/.github/workflows/test_qdrant.yml +++ b/.github/workflows/test_qdrant.yml @@ -17,8 +17,7 @@ jobs: run_qdrant_integration_test: name: test - runs-on: ubuntu-latest - + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -33,7 +32,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.github/workflows/test_weaviate.yml b/.github/workflows/test_weaviate.yml index b8eb72383..159fce194 100644 --- a/.github/workflows/test_weaviate.yml +++ b/.github/workflows/test_weaviate.yml @@ -17,8 +17,7 @@ jobs: run_weaviate_integration_test: name: test - runs-on: ubuntu-latest - + runs-on: ubuntu-22.04 defaults: run: shell: bash @@ -33,7 +32,7 @@ jobs: python-version: '3.11.x' - name: Install Poetry - uses: snok/install-poetry@v1.3.2 + uses: snok/install-poetry@v1.4.1 with: virtualenvs-create: true virtualenvs-in-project: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..96bfe6d32 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,20 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files +- repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.9.0 + hooks: + # Run the linter. + - id: ruff + types_or: [ python, pyi ] + # Run the formatter. + - id: ruff-format + types_or: [ python, pyi ] diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 4faa7a4cc..1f1b2ee8c 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -111,6 +111,7 @@ individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. + ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9824ee8b..eeafac6d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,11 +71,23 @@ You're on the verge of completion! It's time to showcase your hard work. 🌐 The project maintainers will review your work, possibly suggest improvements, or request further details. Once you receive approval, your contributions will become part of **cognee**! -## 5. 📜 Code of Conduct +## 5. Developer Certificate of Origin +All contributions to the topoteretes codebase must be signed-off to indicate you have read and agreed to the Developer Certificate of Origin (DCO), which is in the root directory under name DCO. To sign the DCO, simply add -s after all commits that you make, to do this easily you can make a git alias from the command line, for example: + +$ git config alias.cos "commit -s" + +Will allow you to write git cos which will automatically sign-off your commit. By signing a commit you are agreeing to the DCO and agree that you will be banned from the topoteretes GitHub organisation and Discord server if you violate the DCO. + +We consider the following as violations to the DCO: + +Signing the DCO with a fake name or pseudonym, if you are registered on GitHub or another platform with a fake name then you will not be able to contribute to topoteretes before updating your name; +Submitting a contribution that you did not have the right to submit whether due to licensing, copyright, or any other restrictions. + +## 6. 📜 Code of Conduct Ensure you adhere to the project's [Code of Conduct](https://github.com/topoteretes/cognee/blob/main/CODE_OF_CONDUCT.md) throughout your participation. -## 6. 📫 Contact +## 7. 📫 Contact If you need assistance or simply wish to connect, we're here for you. Contact us by filing an issue on the GitHub repository or by messaging us on our Discord server. diff --git a/DCO.md b/DCO.md new file mode 100644 index 000000000..e2a2401c6 --- /dev/null +++ b/DCO.md @@ -0,0 +1,17 @@ +Developer Certificate of Origin Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or + +(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or + +(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. + +(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. diff --git a/Dockerfile b/Dockerfile index cec626c86..50f2d0b08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ RUN pip install poetry RUN poetry config virtualenvs.create false # Install the dependencies -RUN poetry install --all-extras --no-root --no-dev +RUN poetry install --all-extras --no-root --without dev # Set the PYTHONPATH environment variable to include the /app directory diff --git a/README.md b/README.md index f0aa2a280..f35829783 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ Try it in a Google Colab Discord community +
+why cognee +
## 📦 Installation @@ -193,93 +196,14 @@ if __name__ == '__main__': When you run this script, you will see step-by-step messages in the console that help you trace the execution flow and understand what the script is doing at each stage. A version of this example is here: `examples/python/simple_example.py` -### Create your own memory store +### Understand our architecture cognee framework consists of tasks that can be grouped into pipelines. Each task can be an independent part of business logic, that can be tied to other tasks to form a pipeline. These tasks persist data into your memory store enabling you to search for relevant context of past conversations, documents, or any other data you have stored. - - -### Example: Classify your documents - -Here is an example of how it looks for a default cognify pipeline: - -1. To prepare the data for the pipeline run, first we need to add it to our metastore and normalize it: - -Start with: -``` -text = """Natural language processing (NLP) is an interdisciplinary - subfield of computer science and information retrieval""" - -await cognee.add(text) # Add a new piece of information -``` - -2. In the next step we make a task. The task can be any business logic we need, but the important part is that it should be encapsulated in one function. - -Here we show an example of creating a naive LLM classifier that takes a Pydantic model and then stores the data in both the graph and vector stores after analyzing each chunk. -We provided just a snippet for reference, but feel free to check out the implementation in our repo. - -``` -async def chunk_naive_llm_classifier( - data_chunks: list[DocumentChunk], - classification_model: Type[BaseModel] -): - # Extract classifications asynchronously - chunk_classifications = await asyncio.gather( - *(extract_categories(chunk.text, classification_model) for chunk in data_chunks) - ) - - # Collect classification data points using a set to avoid duplicates - classification_data_points = { - uuid5(NAMESPACE_OID, cls.label.type) - for cls in chunk_classifications - } | { - uuid5(NAMESPACE_OID, subclass.value) - for cls in chunk_classifications - for subclass in cls.label.subclass - } - - vector_engine = get_vector_engine() - collection_name = "classification" - - # Define the payload schema - class Keyword(BaseModel): - uuid: str - text: str - chunk_id: str - document_id: str - - # Ensure the collection exists and retrieve existing data points - if not await vector_engine.has_collection(collection_name): - await vector_engine.create_collection(collection_name, payload_schema=Keyword) - existing_points_map = {} - else: - existing_points_map = {} - return data_chunks - -... - -``` - -We have many tasks that can be used in your pipelines, and you can also create your tasks to fit your business logic. - - -3. Once we have our tasks, it is time to group them into a pipeline. -This simplified snippet demonstrates how tasks can be added to a pipeline, and how they can pass the information forward from one to another. - -``` - - -Task( - chunk_naive_llm_classifier, - classification_model = cognee_config.classification_model, -) - -pipeline = run_tasks(tasks, documents) - -``` - -To see the working code, check cognee.api.v1.cognify default pipeline in our repo. +
+cognee concept diagram +
## Vector retrieval, Graphs and LLMs @@ -338,11 +262,7 @@ pip install cognee ## Vector & Graph Databases Implementation State - + | Name | Type | Current state | Known Issues | |----------|--------------------|-------------------|--------------| @@ -353,4 +273,4 @@ pip install cognee | NetworkX | Graph | Stable ✅ | | | FalkorDB | Vector/Graph | Unstable ❌ | | | PGVector | Vector | Stable ✅ | | -| Milvus | Vector | Stable ✅ | | \ No newline at end of file +| Milvus | Vector | Stable ✅ | | diff --git a/alembic/env.py b/alembic/env.py index 1675e4168..60af9c0dd 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -4,8 +4,9 @@ from logging.config import fileConfig from sqlalchemy import pool from sqlalchemy.engine import Connection from sqlalchemy.ext.asyncio import async_engine_from_config - +from cognee.infrastructure.databases.relational import Base from alembic import context +from cognee.infrastructure.databases.relational import get_relational_engine, get_relational_config # this is the Alembic Config object, which provides # access to the values within the .ini file in use. @@ -20,7 +21,7 @@ if config.config_file_name is not None: # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata -from cognee.infrastructure.databases.relational import Base + target_metadata = Base.metadata # other values from the config, defined by the needs of env.py, @@ -83,12 +84,11 @@ def run_migrations_online() -> None: asyncio.run(run_async_migrations()) -from cognee.infrastructure.databases.relational import get_relational_engine, get_relational_config - db_engine = get_relational_engine() if db_engine.engine.dialect.name == "sqlite": from cognee.infrastructure.files.storage import LocalStorage + db_config = get_relational_config() LocalStorage.ensure_directory_exists(db_config.db_path) diff --git a/alembic/versions/482cd6517ce4_add_default_user.py b/alembic/versions/482cd6517ce4_add_default_user.py index b744c8821..92429e1e4 100644 --- a/alembic/versions/482cd6517ce4_add_default_user.py +++ b/alembic/versions/482cd6517ce4_add_default_user.py @@ -5,6 +5,7 @@ Revises: 8057ae7329c2 Create Date: 2024-10-16 22:17:18.634638 """ + from typing import Sequence, Union from sqlalchemy.util import await_only @@ -13,8 +14,8 @@ from cognee.modules.users.methods import create_default_user, delete_user # revision identifiers, used by Alembic. -revision: str = '482cd6517ce4' -down_revision: Union[str, None] = '8057ae7329c2' +revision: str = "482cd6517ce4" +down_revision: Union[str, None] = "8057ae7329c2" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = "8057ae7329c2" diff --git a/alembic/versions/8057ae7329c2_initial_migration.py b/alembic/versions/8057ae7329c2_initial_migration.py index d7d45d0ac..48e795327 100644 --- a/alembic/versions/8057ae7329c2_initial_migration.py +++ b/alembic/versions/8057ae7329c2_initial_migration.py @@ -1,10 +1,11 @@ """Initial migration Revision ID: 8057ae7329c2 -Revises: +Revises: Create Date: 2024-10-02 12:55:20.989372 """ + from typing import Sequence, Union from sqlalchemy.util import await_only from cognee.infrastructure.databases.relational import get_relational_engine diff --git a/assets/Dashboard_example.png b/assets/Dashboard_example.png deleted file mode 100644 index 594186c581bd4a39c9a9161c1dfb442ed77f079a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387191 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
rx3cz@w7!Z^u*R5Hj^)S3K@|P(@oE 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
hHoW!wzCu2@#% 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%0DMhvza8#xfhUW~rsMcsrEe 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�OC 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 (%J@4u>kN&z8 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�WY1`%^z#(rE~oQ^JK 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 z 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

P?Q|o?KRt!#Co2gAM~H* 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

(iYHN!%nC- z4RH?%8|-*lfy1~jq6X>|y@aH(D>d=wk!F|!M%6+arwx|sT0o$nIpL^~QD_X*vZUe9 zWTXGgHBqJN^zZo3L>g{bfqm3}u11&9U-2Nh+iMQik6+A z`{+dxQ(p%aH&0RtHchDdmE#r$5k|64m_z2O;$<^T&II=##*T>z{c4|3p(bPHH-1MFtbqKWHi-nNpYr;@g8Y?g?Da&uH+1 z{O$jMs{w+K{+;5yXG4HfmuprL4UG7IP!9gogiAG+FCW(|^z}E{j1&kO495r>gtDHP zti0e1v}>80J}o5Wx(zOLgDb)|@pCpiR$jL$8eOXQI3A#Scki=o7|gq7`@h5E|3}C> z7t-m$9WIzt?17_yf|nEWi{stINlj_zx%ZL+rS}Ul0+eq&0+GmnZG_$_oTW^6Mh)Fl z)MUJ0B?M}O)P@5D@4Q}uDVV2~{|+X-1xs&S_a}v?3sPPAkaiEA_8w{{Y=8q^I{@Kx z1IS6M$CIn1%>zjMG^mgRo_u6VN&gfzf*~}0D4rtpxy$lzdPXmgYi=$HRdNq9FH8SHgGsTs2LrqOIi>_nr<2P zdaZK(8Dkm!(|tEM77GqCZyGvRMCSH3R-2MEw~R_lyM?K5?Frw8e{%RJGyuyqCN5ms8ybR8*;4>EzmjO--Cxnp2jK|N92$ME%Fck^Swxp63jXMtRvkbKLo@48_ki*~)1T>PlN-hQKGz^zopEil-kCikjv#B_$!No(hF`5h<=D>YczV9Jp3 zsio3J#tGCHD7l$2=J>}CCs6K9jB=HqU;gu}zyA$&zJv7xoVpJJ=z?fveC~_iXLHv= z=$CgVPE)5s>V|Ilukmd%K3vGuPv2)$9hflwHle@Wb}M2Fglii+Z(vN1L_tTs*b@Br zfk0_Bmf!{U;t<%JTN}Z>W>6{~OpRBMlWK$`TUvA=FC}v zQXuwsfb#s}Q29@=$X`A#Xl>2c6b?{Y<5vFi*GI|$a7f?IoGU#U7`SfMKG*7IC5-of z5uE&LUV6ky(tBdV*V=kF{&xAva#>iqe>!nOYO!r%Bs5N5G}#0c2paxB_`vWo(n`g~ zFXcciO`J-URnJzoJCQvTD(=+dIZIzj@$d#qm*8fR)KdZzDGWJ7XJsK@c z4}N|+z3kN63riO-J&|8@*K!0TrOQz94MoqCi)+s(Z5iKI@2W!i|8dXY?uS5U{;3!K zt3Q7IghG(L9!<3RZ0dZyq!#S)jIMp=iO91}Wu*$@hwvJ7`hkt*yWN7v-8UUI{{8-; m{#(MLU-|#NYXrntEVd@N>iwB|$+z3UKLcHp^QC89qW>3CHTlc{ literal 0 HcmV?d00001 diff --git a/assets/cognee_diagram.png b/assets/cognee_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb45e45e9ea688988140e42e5b671c9cd0b25d1 GIT binary patch literal 437814 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%0D@?}vCf%Q&|Hj9s=GE{zG$^R0LBT_X53eSM;`^CF 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 literal 0 HcmV?d00001 diff --git a/assets/cognee_logo.png b/assets/cognee_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..744ba2028dc9d5e3ee1b7ed54af970e7ce8a91d4 GIT binary patch literal 34282 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 literal 0 HcmV?d00001 diff --git a/assets/topoteretes_logo.png b/assets/topoteretes_logo.png deleted file mode 100644 index ebdbc9a20ac24a7204ec40c8f79fc9d975a94426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27320 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 diff --git a/assets/vscode-debug-config.png b/assets/vscode-debug-config.png deleted file mode 100644 index 21f54400a471c136672d81feeaeb994c9a6e19a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87743 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 list[types.Tool]: + """ + List available tools. + Each tool specifies its arguments using JSON Schema validation. + """ + return [ + types.Tool( + name="cognify", + description="Build knowledge graph from the input text.", + inputSchema={ + "type": "object", + "properties": { + "text": {"type": "string"}, + "graph_model_file": {"type": "string"}, + "graph_model_name": {"type": "string"}, + }, + "required": ["text"], + }, + ), + types.Tool( + name="search", + description="Search the knowledge graph.", + inputSchema={ + "type": "object", + "properties": { + "query": {"type": "string"}, + }, + "required": ["query"], + }, + ), + types.Tool( + name="prune", + description="Reset the knowledge graph.", + inputSchema={ + "type": "object", + "properties": { + "query": {"type": "string"}, + }, + }, + ), + ] + + +@server.call_tool() +async def handle_call_tool( + name: str, arguments: dict | None +) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]: + """ + Handle tool execution requests. + Tools can modify server state and notify clients of changes. + """ + if name == "cognify": + with open(os.devnull, "w") as fnull: + with redirect_stdout(fnull), redirect_stderr(fnull): + if not arguments: + raise ValueError("Missing arguments") + + text = arguments.get("text") + + if ("graph_model_file" in arguments) and ("graph_model_name" in arguments): + model_file = arguments.get("graph_model_file") + model_name = arguments.get("graph_model_name") + + graph_model = load_class(model_file, model_name) + else: + graph_model = KnowledgeGraph + + await cognee.add(text) + + await cognee.cognify(graph_model=graph_model) + + return [ + types.TextContent( + type="text", + text="Ingested", + ) + ] + elif name == "search": + with open(os.devnull, "w") as fnull: + with redirect_stdout(fnull), redirect_stderr(fnull): + if not arguments: + raise ValueError("Missing arguments") + + search_query = arguments.get("query") + + search_results = await cognee.search(SearchType.INSIGHTS, query_text=search_query) + + results = retrieved_edges_to_string(search_results) + + return [ + types.TextContent( + type="text", + text=results, + ) + ] + elif name == "prune": + with open(os.devnull, "w") as fnull: + with redirect_stdout(fnull), redirect_stderr(fnull): + await cognee.prune.prune_data() + await cognee.prune.prune_system(metadata=True) + + return [ + types.TextContent( + type="text", + text="Pruned", + ) + ] + else: + raise ValueError(f"Unknown tool: {name}") + + +async def main(): + # Run the server using stdin/stdout streams + async with mcp.server.stdio.stdio_server() as (read_stream, write_stream): + await server.run( + read_stream, + write_stream, + InitializationOptions( + server_name="cognee-mcp", + server_version="0.1.0", + capabilities=server.get_capabilities( + notification_options=NotificationOptions(), + experimental_capabilities={}, + ), + ), + ) + + +# This is needed if you'd like to connect to a custom client +if __name__ == "__main__": + asyncio.run(main()) diff --git a/cognee-mcp/pyproject.toml b/cognee-mcp/pyproject.toml new file mode 100644 index 000000000..81f6c7236 --- /dev/null +++ b/cognee-mcp/pyproject.toml @@ -0,0 +1,94 @@ +[project] +name = "cognee-mcp" +version = "0.1.0" +description = "A MCP server project" +readme = "README.md" +requires-python = ">=3.11" +dependencies = [ + "mcp>=1.1.1", + "openai==1.52.0", + "pydantic==2.8.2", + "python-dotenv==1.0.1", + "fastapi>=0.109.2,<0.110.0", + "uvicorn==0.22.0", + "requests==2.32.3", + "aiohttp==3.10.10", + "typing_extensions==4.12.2", + "nest_asyncio==1.6.0", + "numpy==1.26.4", + "datasets==3.1.0", + "falkordb==1.0.9", # Optional + "boto3>=1.26.125,<2.0.0", + "botocore>=1.35.54,<2.0.0", + "gunicorn>=20.1.0,<21.0.0", + "sqlalchemy==2.0.35", + "instructor==1.5.2", + "networkx>=3.2.1,<4.0.0", + "aiosqlite>=0.20.0,<0.21.0", + "pandas==2.0.3", + "filetype>=1.2.0,<2.0.0", + "nltk>=3.8.1,<4.0.0", + "dlt[sqlalchemy]>=1.4.1,<2.0.0", + "aiofiles>=23.2.1,<24.0.0", + "qdrant-client>=1.9.0,<2.0.0", # Optional + "graphistry>=0.33.5,<0.34.0", + "tenacity>=8.4.1,<9.0.0", + "weaviate-client==4.6.7", # Optional + "scikit-learn>=1.5.0,<2.0.0", + "pypdf>=4.1.0,<5.0.0", + "neo4j>=5.20.0,<6.0.0", # Optional + "jinja2>=3.1.3,<4.0.0", + "matplotlib>=3.8.3,<4.0.0", + "tiktoken==0.7.0", + "langchain_text_splitters==0.3.2", # Optional + "langsmith==0.1.139", # Optional + "langdetect==1.0.9", + "posthog>=3.5.0,<4.0.0", # Optional + "lancedb==0.15.0", + "litellm==1.49.1", + "groq==0.8.0", # Optional + "langfuse>=2.32.0,<3.0.0", # Optional + "pydantic-settings>=2.2.1,<3.0.0", + "anthropic>=0.26.1,<1.0.0", + "sentry-sdk[fastapi]>=2.9.0,<3.0.0", + "fastapi-users[sqlalchemy]", # Optional + "alembic>=1.13.3,<2.0.0", + "asyncpg==0.30.0", # Optional + "pgvector>=0.3.5,<0.4.0", # Optional + "psycopg2>=2.9.10,<3.0.0", # Optional + "llama-index-core>=0.11.22,<0.12.0", # Optional + "deepeval>=2.0.1,<3.0.0", # Optional + "transformers>=4.46.3,<5.0.0", + "pymilvus>=2.5.0,<3.0.0", # Optional + "unstructured[csv,doc,docx,epub,md,odt,org,ppt,pptx,rst,rtf,tsv,xlsx]>=0.16.10,<1.0.0", # Optional + "pytest>=7.4.0,<8.0.0", + "pytest-asyncio>=0.21.1,<0.22.0", + "coverage>=7.3.2,<8.0.0", + "mypy>=1.7.1,<2.0.0", + "deptry>=0.20.0,<0.21.0", + "debugpy==1.8.2", + "pylint>=3.0.3,<4.0.0", + "ruff>=0.2.2,<0.3.0", + "tweepy==4.14.0", + "gitpython>=3.1.43,<4.0.0", + "cognee", +] + +[[project.authors]] +name = "Rita Aleksziev" +email = "rita@topoteretes.com" + +[build-system] +requires = [ "hatchling",] +build-backend = "hatchling.build" + +[tool.uv.sources] +cognee = { path = "../../cognee" } + +[dependency-groups] +dev = [ + "cognee", +] + +[project.scripts] +cognee = "cognee_mcp:main" diff --git a/cognee-mcp/uv.lock b/cognee-mcp/uv.lock new file mode 100644 index 000000000..b748667e1 --- /dev/null +++ b/cognee-mcp/uv.lock @@ -0,0 +1,4946 @@ +version = 1 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version < '3.12'", + "python_full_version >= '3.12' and python_full_version < '3.12.4'", + "python_full_version >= '3.12.4' and python_full_version < '3.13'", + "python_full_version >= '3.13'", +] + +[[package]] +name = "aiofiles" +version = "23.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/41/cfed10bc64d774f497a86e5ede9248e1d062db675504b41c320954d99641/aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a", size = 32072 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107", size = 15727 }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/55/e4373e888fdacb15563ef6fa9fa8c8252476ea071e96fb46defac9f18bf2/aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745", size = 21977 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8", size = 14756 }, +] + +[[package]] +name = "aiohttp" +version = "3.10.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/7e/16e57e6cf20eb62481a2f9ce8674328407187950ccc602ad07c685279141/aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a", size = 7542993 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/31/3c351d17596194e5a38ef169a4da76458952b2497b4b54645b9d483cbbb0/aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f", size = 586501 }, + { url = "https://files.pythonhosted.org/packages/a4/a8/a559d09eb08478cdead6b7ce05b0c4a133ba27fcdfa91e05d2e62867300d/aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb", size = 398993 }, + { url = "https://files.pythonhosted.org/packages/c5/47/7736d4174613feef61d25332c3bd1a4f8ff5591fbd7331988238a7299485/aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871", size = 390647 }, + { url = "https://files.pythonhosted.org/packages/27/21/e9ba192a04b7160f5a8952c98a1de7cf8072ad150fa3abd454ead1ab1d7f/aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c", size = 1306481 }, + { url = "https://files.pythonhosted.org/packages/cf/50/f364c01c8d0def1dc34747b2470969e216f5a37c7ece00fe558810f37013/aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38", size = 1344652 }, + { url = "https://files.pythonhosted.org/packages/1d/c2/74f608e984e9b585649e2e83883facad6fa3fc1d021de87b20cc67e8e5ae/aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb", size = 1378498 }, + { url = "https://files.pythonhosted.org/packages/9f/a7/05a48c7c0a7a80a5591b1203bf1b64ca2ed6a2050af918d09c05852dc42b/aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7", size = 1292718 }, + { url = "https://files.pythonhosted.org/packages/7d/78/a925655018747e9790350180330032e27d6e0d7ed30bde545fae42f8c49c/aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911", size = 1251776 }, + { url = "https://files.pythonhosted.org/packages/47/9d/85c6b69f702351d1236594745a4fdc042fc43f494c247a98dac17e004026/aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092", size = 1271716 }, + { url = "https://files.pythonhosted.org/packages/7f/a7/55fc805ff9b14af818903882ece08e2235b12b73b867b521b92994c52b14/aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142", size = 1266263 }, + { url = "https://files.pythonhosted.org/packages/1f/ec/d2be2ca7b063e4f91519d550dbc9c1cb43040174a322470deed90b3d3333/aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9", size = 1321617 }, + { url = "https://files.pythonhosted.org/packages/c9/a3/b29f7920e1cd0a9a68a45dd3eb16140074d2efb1518d2e1f3e140357dc37/aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1", size = 1339227 }, + { url = "https://files.pythonhosted.org/packages/8a/81/34b67235c47e232d807b4bbc42ba9b927c7ce9476872372fddcfd1e41b3d/aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a", size = 1299068 }, + { url = "https://files.pythonhosted.org/packages/04/1f/26a7fe11b6ad3184f214733428353c89ae9fe3e4f605a657f5245c5e720c/aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94", size = 362223 }, + { url = "https://files.pythonhosted.org/packages/10/91/85dcd93f64011434359ce2666bece981f08d31bc49df33261e625b28595d/aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959", size = 381576 }, + { url = "https://files.pythonhosted.org/packages/ae/99/4c5aefe5ad06a1baf206aed6598c7cdcbc7c044c46801cd0d1ecb758cae3/aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c", size = 583536 }, + { url = "https://files.pythonhosted.org/packages/a9/36/8b3bc49b49cb6d2da40ee61ff15dbcc44fd345a3e6ab5bb20844df929821/aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28", size = 395693 }, + { url = "https://files.pythonhosted.org/packages/e1/77/0aa8660dcf11fa65d61712dbb458c4989de220a844bd69778dff25f2d50b/aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f", size = 390898 }, + { url = "https://files.pythonhosted.org/packages/38/d2/b833d95deb48c75db85bf6646de0a697e7fb5d87bd27cbade4f9746b48b1/aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138", size = 1312060 }, + { url = "https://files.pythonhosted.org/packages/aa/5f/29fd5113165a0893de8efedf9b4737e0ba92dfcd791415a528f947d10299/aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742", size = 1350553 }, + { url = "https://files.pythonhosted.org/packages/ad/cc/f835f74b7d344428469200105236d44606cfa448be1e7c95ca52880d9bac/aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7", size = 1392646 }, + { url = "https://files.pythonhosted.org/packages/bf/fe/1332409d845ca601893bbf2d76935e0b93d41686e5f333841c7d7a4a770d/aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16", size = 1306310 }, + { url = "https://files.pythonhosted.org/packages/e4/a1/25a7633a5a513278a9892e333501e2e69c83e50be4b57a62285fb7a008c3/aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8", size = 1260255 }, + { url = "https://files.pythonhosted.org/packages/f2/39/30eafe89e0e2a06c25e4762844c8214c0c0cd0fd9ffc3471694a7986f421/aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6", size = 1271141 }, + { url = "https://files.pythonhosted.org/packages/5b/fc/33125df728b48391ef1fcb512dfb02072158cc10d041414fb79803463020/aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a", size = 1280244 }, + { url = "https://files.pythonhosted.org/packages/3b/61/e42bf2c2934b5caa4e2ec0b5e5fd86989adb022b5ee60c2572a9d77cf6fe/aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9", size = 1316805 }, + { url = "https://files.pythonhosted.org/packages/18/32/f52a5e2ae9ad3bba10e026a63a7a23abfa37c7d97aeeb9004eaa98df3ce3/aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a", size = 1343930 }, + { url = "https://files.pythonhosted.org/packages/05/be/6a403b464dcab3631fe8e27b0f1d906d9e45c5e92aca97ee007e5a895560/aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205", size = 1306186 }, + { url = "https://files.pythonhosted.org/packages/8e/fd/bb50fe781068a736a02bf5c7ad5f3ab53e39f1d1e63110da6d30f7605edc/aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628", size = 359289 }, + { url = "https://files.pythonhosted.org/packages/70/9e/5add7e240f77ef67c275c82cc1d08afbca57b77593118c1f6e920ae8ad3f/aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf", size = 379313 }, + { url = "https://files.pythonhosted.org/packages/b1/eb/618b1b76c7fe8082a71c9d62e3fe84c5b9af6703078caa9ec57850a12080/aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28", size = 576114 }, + { url = "https://files.pythonhosted.org/packages/aa/37/3126995d7869f8b30d05381b81a2d4fb4ec6ad313db788e009bc6d39c211/aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d", size = 391901 }, + { url = "https://files.pythonhosted.org/packages/3e/f2/8fdfc845be1f811c31ceb797968523813f8e1263ee3e9120d61253f6848f/aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79", size = 387418 }, + { url = "https://files.pythonhosted.org/packages/60/d5/33d2061d36bf07e80286e04b7e0a4de37ce04b5ebfed72dba67659a05250/aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e", size = 1287073 }, + { url = "https://files.pythonhosted.org/packages/00/52/affb55be16a4747740bd630b4c002dac6c5eac42f9bb64202fc3cf3f1930/aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6", size = 1323612 }, + { url = "https://files.pythonhosted.org/packages/94/f2/cddb69b975387daa2182a8442566971d6410b8a0179bb4540d81c97b1611/aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42", size = 1368406 }, + { url = "https://files.pythonhosted.org/packages/c1/e4/afba7327da4d932da8c6e29aecaf855f9d52dace53ac15bfc8030a246f1b/aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e", size = 1282761 }, + { url = "https://files.pythonhosted.org/packages/9f/6b/364856faa0c9031ea76e24ef0f7fef79cddd9fa8e7dba9a1771c6acc56b5/aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc", size = 1236518 }, + { url = "https://files.pythonhosted.org/packages/46/af/c382846f8356fe64a7b5908bb9b477457aa23b71be7ed551013b7b7d4d87/aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a", size = 1250344 }, + { url = "https://files.pythonhosted.org/packages/87/53/294f87fc086fd0772d0ab82497beb9df67f0f27a8b3dd5742a2656db2bc6/aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414", size = 1248956 }, + { url = "https://files.pythonhosted.org/packages/86/30/7d746717fe11bdfefb88bb6c09c5fc985d85c4632da8bb6018e273899254/aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3", size = 1293379 }, + { url = "https://files.pythonhosted.org/packages/48/b9/45d670a834458db67a24258e9139ba61fa3bd7d69b98ecf3650c22806f8f/aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67", size = 1320108 }, + { url = "https://files.pythonhosted.org/packages/72/8c/804bb2e837a175635d2000a0659eafc15b2e9d92d3d81c8f69e141ecd0b0/aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b", size = 1281546 }, + { url = "https://files.pythonhosted.org/packages/89/c0/862e6a9de3d6eeb126cd9d9ea388243b70df9b871ce1a42b193b7a4a77fc/aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8", size = 357516 }, + { url = "https://files.pythonhosted.org/packages/ae/63/3e1aee3e554263f3f1011cca50d78a4894ae16ce99bf78101ac3a2f0ef74/aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151", size = 376785 }, +] + +[[package]] +name = "aiosignal" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597 }, +] + +[[package]] +name = "aiosqlite" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/3a/22ff5415bf4d296c1e92b07fd746ad42c96781f13295a074d58e77747848/aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7", size = 21691 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c4/c93eb22025a2de6b83263dfe3d7df2e19138e345bca6f18dba7394120930/aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6", size = 15564 }, +] + +[[package]] +name = "alembic" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mako" }, + { name = "sqlalchemy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/1e/8cb8900ba1b6360431e46fb7a89922916d3a1b017a8908a7c0499cc7e5f6/alembic-1.14.0.tar.gz", hash = "sha256:b00892b53b3642d0b8dbedba234dbf1924b69be83a9a769d5a624b01094e304b", size = 1916172 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/06/8b505aea3d77021b18dcbd8133aa1418f1a1e37e432a465b14c46b2c0eaa/alembic-1.14.0-py3-none-any.whl", hash = "sha256:99bd884ca390466db5e27ffccff1d179ec5c05c965cfefc0607e69f9e411cb25", size = 233482 }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "anthropic" +version = "0.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tokenizers" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/9e/3907fd0c1bcae40bbf40af14f43d06c6b824f0e056ab99510873e16fb4ba/anthropic-0.26.1.tar.gz", hash = "sha256:26680ff781a6f678a30a1dccd0743631e602b23a47719439ffdef5335fa167d8", size = 827985 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/25/b7df779d6c015416cccb0cb5e9e69678c4f6c5e762abefdf41c1cb1d3958/anthropic-0.26.1-py3-none-any.whl", hash = "sha256:2812b9b250b551ed8a1f0a7e6ae3f005654098994f45ebca5b5808bd154c9628", size = 877601 }, +] + +[[package]] +name = "anyio" +version = "4.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/40/318e58f669b1a9e00f5c4453910682e2d9dd594334539c7b7817dabb765f/anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48", size = 177076 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/7a/4daaf3b6c08ad7ceffea4634ec206faeff697526421c20f07628c7372156/anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352", size = 93052 }, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/fa/57ec2c6d16ecd2ba0cf15f3c7d1c3c2e7b5fcb83555ff56d7ab10888ec8f/argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08", size = 42798 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea", size = 15124 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658 }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583 }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168 }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709 }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613 }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583 }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475 }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698 }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817 }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104 }, +] + +[[package]] +name = "astroid" +version = "3.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/40/e028137cb19ed577001c76b91c5c50fee5a9c85099f45820b69385574ac5/astroid-3.3.6.tar.gz", hash = "sha256:6aaea045f938c735ead292204afdb977a36e989522b7833ef6fea94de743f442", size = 397452 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/d2/82c8ccef22ea873a2b0da9636e47d45137eeeb2fb9320c5dbbdd3627bab0/astroid-3.3.6-py3-none-any.whl", hash = "sha256:db676dc4f3ae6bfe31cda227dc60e03438378d7a896aec57422c95634e8d722f", size = 274644 }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233 }, +] + +[[package]] +name = "asyncpg" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/4c/7c991e080e106d854809030d8584e15b2e996e26f16aee6d757e387bc17d/asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851", size = 957746 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/0e/f5d708add0d0b97446c402db7e8dd4c4183c13edaabe8a8500b411e7b495/asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a", size = 674506 }, + { url = "https://files.pythonhosted.org/packages/6a/a0/67ec9a75cb24a1d99f97b8437c8d56da40e6f6bd23b04e2f4ea5d5ad82ac/asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed", size = 645922 }, + { url = "https://files.pythonhosted.org/packages/5c/d9/a7584f24174bd86ff1053b14bb841f9e714380c672f61c906eb01d8ec433/asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a", size = 3079565 }, + { url = "https://files.pythonhosted.org/packages/a0/d7/a4c0f9660e333114bdb04d1a9ac70db690dd4ae003f34f691139a5cbdae3/asyncpg-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956", size = 3109962 }, + { url = "https://files.pythonhosted.org/packages/3c/21/199fd16b5a981b1575923cbb5d9cf916fdc936b377e0423099f209e7e73d/asyncpg-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056", size = 3064791 }, + { url = "https://files.pythonhosted.org/packages/77/52/0004809b3427534a0c9139c08c87b515f1c77a8376a50ae29f001e53962f/asyncpg-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454", size = 3188696 }, + { url = "https://files.pythonhosted.org/packages/52/cb/fbad941cd466117be58b774a3f1cc9ecc659af625f028b163b1e646a55fe/asyncpg-0.30.0-cp311-cp311-win32.whl", hash = "sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d", size = 567358 }, + { url = "https://files.pythonhosted.org/packages/3c/0a/0a32307cf166d50e1ad120d9b81a33a948a1a5463ebfa5a96cc5606c0863/asyncpg-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f", size = 629375 }, + { url = "https://files.pythonhosted.org/packages/4b/64/9d3e887bb7b01535fdbc45fbd5f0a8447539833b97ee69ecdbb7a79d0cb4/asyncpg-0.30.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e", size = 673162 }, + { url = "https://files.pythonhosted.org/packages/6e/eb/8b236663f06984f212a087b3e849731f917ab80f84450e943900e8ca4052/asyncpg-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a", size = 637025 }, + { url = "https://files.pythonhosted.org/packages/cc/57/2dc240bb263d58786cfaa60920779af6e8d32da63ab9ffc09f8312bd7a14/asyncpg-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3", size = 3496243 }, + { url = "https://files.pythonhosted.org/packages/f4/40/0ae9d061d278b10713ea9021ef6b703ec44698fe32178715a501ac696c6b/asyncpg-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737", size = 3575059 }, + { url = "https://files.pythonhosted.org/packages/c3/75/d6b895a35a2c6506952247640178e5f768eeb28b2e20299b6a6f1d743ba0/asyncpg-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a", size = 3473596 }, + { url = "https://files.pythonhosted.org/packages/c8/e7/3693392d3e168ab0aebb2d361431375bd22ffc7b4a586a0fc060d519fae7/asyncpg-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af", size = 3641632 }, + { url = "https://files.pythonhosted.org/packages/32/ea/15670cea95745bba3f0352341db55f506a820b21c619ee66b7d12ea7867d/asyncpg-0.30.0-cp312-cp312-win32.whl", hash = "sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e", size = 560186 }, + { url = "https://files.pythonhosted.org/packages/7e/6b/fe1fad5cee79ca5f5c27aed7bd95baee529c1bf8a387435c8ba4fe53d5c1/asyncpg-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305", size = 621064 }, + { url = "https://files.pythonhosted.org/packages/3a/22/e20602e1218dc07692acf70d5b902be820168d6282e69ef0d3cb920dc36f/asyncpg-0.30.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05b185ebb8083c8568ea8a40e896d5f7af4b8554b64d7719c0eaa1eb5a5c3a70", size = 670373 }, + { url = "https://files.pythonhosted.org/packages/3d/b3/0cf269a9d647852a95c06eb00b815d0b95a4eb4b55aa2d6ba680971733b9/asyncpg-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c47806b1a8cbb0a0db896f4cd34d89942effe353a5035c62734ab13b9f938da3", size = 634745 }, + { url = "https://files.pythonhosted.org/packages/8e/6d/a4f31bf358ce8491d2a31bfe0d7bcf25269e80481e49de4d8616c4295a34/asyncpg-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b6fde867a74e8c76c71e2f64f80c64c0f3163e687f1763cfaf21633ec24ec33", size = 3512103 }, + { url = "https://files.pythonhosted.org/packages/96/19/139227a6e67f407b9c386cb594d9628c6c78c9024f26df87c912fabd4368/asyncpg-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46973045b567972128a27d40001124fbc821c87a6cade040cfcd4fa8a30bcdc4", size = 3592471 }, + { url = "https://files.pythonhosted.org/packages/67/e4/ab3ca38f628f53f0fd28d3ff20edff1c975dd1cb22482e0061916b4b9a74/asyncpg-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9110df111cabc2ed81aad2f35394a00cadf4f2e0635603db6ebbd0fc896f46a4", size = 3496253 }, + { url = "https://files.pythonhosted.org/packages/ef/5f/0bf65511d4eeac3a1f41c54034a492515a707c6edbc642174ae79034d3ba/asyncpg-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04ff0785ae7eed6cc138e73fc67b8e51d54ee7a3ce9b63666ce55a0bf095f7ba", size = 3662720 }, + { url = "https://files.pythonhosted.org/packages/e7/31/1513d5a6412b98052c3ed9158d783b1e09d0910f51fbe0e05f56cc370bc4/asyncpg-0.30.0-cp313-cp313-win32.whl", hash = "sha256:ae374585f51c2b444510cdf3595b97ece4f233fde739aa14b50e0d64e8a7a590", size = 560404 }, + { url = "https://files.pythonhosted.org/packages/c8/a4/cec76b3389c4c5ff66301cd100fe88c318563ec8a520e0b2e792b5b84972/asyncpg-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:f59b430b8e27557c3fb9869222559f7417ced18688375825f8f12302c34e915e", size = 621623 }, +] + +[[package]] +name = "attrs" +version = "24.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/48/c8/6260f8ccc11f0917360fc0da435c5c9c7504e3db174d5a12a1494887b045/attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", size = 805984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/aa/ab0f7891a01eeb2d2e338ae8fecbe57fcebea1a24dbb64d45801bfab481d/attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308", size = 63397 }, +] + +[[package]] +name = "authlib" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/75/47dbab150ef6f9298e227a40c93c7fed5f3ffb67c9fb62cd49f66285e46e/authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2", size = 147313 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/4c/9aa0416a403d5cc80292cb030bcd2c918cce2755e314d8c1aa18656e1e12/Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc", size = 225111 }, +] + +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148 }, +] + +[[package]] +name = "bcrypt" +version = "4.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/8c/dd696962612e4cd83c40a9e6b3db77bfe65a830f4b9af44098708584686c/bcrypt-4.2.1.tar.gz", hash = "sha256:6765386e3ab87f569b276988742039baab087b2cdb01e809d74e74503c2faafe", size = 24427 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/ca/e17b08c523adb93d5f07a226b2bd45a7c6e96b359e31c1e99f9db58cb8c3/bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17", size = 489982 }, + { url = "https://files.pythonhosted.org/packages/6a/be/e7c6e0fd6087ee8fc6d77d8d9e817e9339d879737509019b9a9012a1d96f/bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f", size = 273108 }, + { url = "https://files.pythonhosted.org/packages/d6/53/ac084b7d985aee1a5f2b086d501f550862596dbf73220663b8c17427e7f2/bcrypt-4.2.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dbd0747208912b1e4ce730c6725cb56c07ac734b3629b60d4398f082ea718ad", size = 278733 }, + { url = "https://files.pythonhosted.org/packages/8e/ab/b8710a3d6231c587e575ead0b1c45bb99f5454f9f579c9d7312c17b069cc/bcrypt-4.2.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:aaa2e285be097050dba798d537b6efd9b698aa88eef52ec98d23dcd6d7cf6fea", size = 273856 }, + { url = "https://files.pythonhosted.org/packages/9d/e5/2fd1ea6395358ffdfd4afe370d5b52f71408f618f781772a48971ef3b92b/bcrypt-4.2.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:76d3e352b32f4eeb34703370e370997065d28a561e4a18afe4fef07249cb4396", size = 279067 }, + { url = "https://files.pythonhosted.org/packages/4e/ef/f2cb7a0f7e1ed800a604f8ab256fb0afcf03c1540ad94ff771ce31e794aa/bcrypt-4.2.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7703ede632dc945ed1172d6f24e9f30f27b1b1a067f32f68bf169c5f08d0425", size = 306851 }, + { url = "https://files.pythonhosted.org/packages/de/cb/578b0023c6a5ca16a177b9044ba6bd6032277bd3ef020fb863eccd22e49b/bcrypt-4.2.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89df2aea2c43be1e1fa066df5f86c8ce822ab70a30e4c210968669565c0f4685", size = 310793 }, + { url = "https://files.pythonhosted.org/packages/98/bc/9d501ee9d754f63d4b1086b64756c284facc3696de9b556c146279a124a5/bcrypt-4.2.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:04e56e3fe8308a88b77e0afd20bec516f74aecf391cdd6e374f15cbed32783d6", size = 320957 }, + { url = "https://files.pythonhosted.org/packages/a1/25/2ec4ce5740abc43182bfc064b9acbbf5a493991246985e8b2bfe231ead64/bcrypt-4.2.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cfdf3d7530c790432046c40cda41dfee8c83e29482e6a604f8930b9930e94139", size = 339958 }, + { url = "https://files.pythonhosted.org/packages/6d/64/fd67788f64817727897d31e9cdeeeba3941eaad8540733c05c7eac4aa998/bcrypt-4.2.1-cp37-abi3-win32.whl", hash = "sha256:adadd36274510a01f33e6dc08f5824b97c9580583bd4487c564fc4617b328005", size = 160912 }, + { url = "https://files.pythonhosted.org/packages/00/8f/fe834eaa54abbd7cab8607e5020fa3a0557e929555b9e4ca404b4adaab06/bcrypt-4.2.1-cp37-abi3-win_amd64.whl", hash = "sha256:8c458cd103e6c5d1d85cf600e546a639f234964d0228909d8f8dbeebff82d526", size = 152981 }, + { url = "https://files.pythonhosted.org/packages/4a/57/23b46933206daf5384b5397d9878746d2249fe9d45efaa8e1467c87d3048/bcrypt-4.2.1-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:8ad2f4528cbf0febe80e5a3a57d7a74e6635e41af1ea5675282a33d769fba413", size = 489842 }, + { url = "https://files.pythonhosted.org/packages/fd/28/3ea8a39ddd4938b6c6b6136816d72ba5e659e2d82b53d843c8c53455ac4d/bcrypt-4.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:909faa1027900f2252a9ca5dfebd25fc0ef1417943824783d1c8418dd7d6df4a", size = 272500 }, + { url = "https://files.pythonhosted.org/packages/77/7f/b43622999f5d4de06237a195ac5501ac83516adf571b907228cd14bac8fe/bcrypt-4.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cde78d385d5e93ece5479a0a87f73cd6fa26b171c786a884f955e165032b262c", size = 278368 }, + { url = "https://files.pythonhosted.org/packages/50/68/f2e3959014b4d8874c747e6e171d46d3e63a3a39aaca8417a8d837eda0a8/bcrypt-4.2.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:533e7f3bcf2f07caee7ad98124fab7499cb3333ba2274f7a36cf1daee7409d99", size = 273335 }, + { url = "https://files.pythonhosted.org/packages/d6/c3/4b4bad4da852924427c651589d464ad1aa624f94dd904ddda8493b0a35e5/bcrypt-4.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:687cf30e6681eeda39548a93ce9bfbb300e48b4d445a43db4298d2474d2a1e54", size = 278614 }, + { url = "https://files.pythonhosted.org/packages/6e/5a/ee107961e84c41af2ac201d0460f962b6622ff391255ffd46429e9e09dc1/bcrypt-4.2.1-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:041fa0155c9004eb98a232d54da05c0b41d4b8e66b6fc3cb71b4b3f6144ba837", size = 306464 }, + { url = "https://files.pythonhosted.org/packages/5c/72/916e14fa12d2b1d1fc6c26ea195337419da6dd23d0bf53ac61ef3739e5c5/bcrypt-4.2.1-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f85b1ffa09240c89aa2e1ae9f3b1c687104f7b2b9d2098da4e923f1b7082d331", size = 310674 }, + { url = "https://files.pythonhosted.org/packages/97/92/3dc76d8bfa23300591eec248e950f85bd78eb608c96bd4747ce4cc06acdb/bcrypt-4.2.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c6f5fa3775966cca251848d4d5393ab016b3afed251163c1436fefdec3b02c84", size = 320577 }, + { url = "https://files.pythonhosted.org/packages/5d/ab/a6c0da5c2cf86600f74402a72b06dfe365e1a1d30783b1bbeec460fd57d1/bcrypt-4.2.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:807261df60a8b1ccd13e6599c779014a362ae4e795f5c59747f60208daddd96d", size = 339836 }, + { url = "https://files.pythonhosted.org/packages/b4/b4/e75b6e9a72a030a04362034022ebe317c5b735d04db6ad79237101ae4a5c/bcrypt-4.2.1-cp39-abi3-win32.whl", hash = "sha256:b588af02b89d9fad33e5f98f7838bf590d6d692df7153647724a7f20c186f6bf", size = 160911 }, + { url = "https://files.pythonhosted.org/packages/76/b9/d51d34e6cd6d887adddb28a8680a1d34235cc45b9d6e238ce39b98199ca0/bcrypt-4.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:e84e0e6f8e40a242b11bce56c313edc2be121cec3e0ec2d76fce01f6af33c07c", size = 153078 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 }, +] + +[[package]] +name = "bokeh" +version = "3.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyyaml" }, + { name = "tornado" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/9d/cc9c561e1db8cbecc5cfad972159020700fff2339bdaa316498ace1cb04c/bokeh-3.6.2.tar.gz", hash = "sha256:2f3043d9ecb3d5dc2e8c0ebf8ad55727617188d4e534f3e7208b36357e352396", size = 6247610 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl", hash = "sha256:fddc4b91f8b40178c0e3e83dfcc33886d7803a3a1f041a840834255e435a18c2", size = 6866799 }, +] + +[[package]] +name = "boto3" +version = "1.35.84" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/c5/c6e68d008905ec4069cb92473606fc2eea12384f990c786a199ea3db2c7e/boto3-1.35.84.tar.gz", hash = "sha256:9f9bf72d92f7fdd546b974ffa45fa6715b9af7f5c00463e9d0f6ef9c95efe0c2", size = 111035 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/4a/b3fefabc2795d0adda85f092332ec0544e57e80c86d6d9f9bb1484b73d79/boto3-1.35.84-py3-none-any.whl", hash = "sha256:c94fc8023caf952f8740a48fc400521bba167f883cfa547d985c05fda7223f7a", size = 139183 }, +] + +[[package]] +name = "botocore" +version = "1.35.84" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/17/d50362869aab4a0ae0f63416a03e592bf7fd3adb155dabce484198545c56/botocore-1.35.84.tar.gz", hash = "sha256:f86754882e04683e2e99a6a23377d0dd7f1fc2b2242844b2381dbe4dcd639301", size = 13485640 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/1f/a36fc867c6aef0d346e9b6b2bfe33be458c36f770f7ad8e15acc3474999d/botocore-1.35.84-py3-none-any.whl", hash = "sha256:b4dc2ac7f54ba959429e1debbd6c7c2fb2349baa1cd63803f0682f0773dbd077", size = 13287873 }, +] + +[[package]] +name = "cachetools" +version = "5.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/38/a0f315319737ecf45b4319a8cd1f3a908e29d9277b46942263292115eee7/cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a", size = 27661 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/07/14f8ad37f2d12a5ce41206c21820d8cb6561b728e51fad4530dff0552a67/cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292", size = 9524 }, +] + +[[package]] +name = "cairocffi" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611 }, +] + +[[package]] +name = "cairosvg" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cairocffi" }, + { name = "cssselect2" }, + { name = "defusedxml" }, + { name = "pillow" }, + { name = "tinycss2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/e6/ec5900b724e3c44af7f6f51f719919137284e5da4aabe96508baec8a1b40/CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0", size = 8399085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/a5/1866b42151f50453f1a0d28fc4c39f5be5f412a2e914f33449c42daafdf1/CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b", size = 43235 }, +] + +[[package]] +name = "certifi" +version = "2024.12.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, +] + +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, + { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, + { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, + { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, + { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, + { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, + { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, + { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, + { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, + { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, + { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, + { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, + { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, + { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, + { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, + { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, + { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, + { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, + { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, + { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, + { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, + { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, + { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, + { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, + { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, + { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, + { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, + { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, + { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, + { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, + { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, + { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, + { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, + { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, + { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, + { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, + { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, + { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, + { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, + { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, + { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, + { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, + { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, + { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, + { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 }, +] + +[[package]] +name = "click" +version = "8.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, +] + +[[package]] +name = "cognee" +version = "0.1.20" +source = { directory = "../" } +dependencies = [ + { name = "aiofiles" }, + { name = "aiohttp" }, + { name = "aiosqlite" }, + { name = "alembic" }, + { name = "anthropic" }, + { name = "bokeh" }, + { name = "boto3" }, + { name = "cairosvg" }, + { name = "datasets" }, + { name = "dlt", extra = ["sqlalchemy"] }, + { name = "fastapi" }, + { name = "fastapi-users", extra = ["sqlalchemy"] }, + { name = "filetype" }, + { name = "graphistry" }, + { name = "gunicorn" }, + { name = "httpx" }, + { name = "instructor" }, + { name = "jinja2" }, + { name = "lancedb" }, + { name = "langdetect" }, + { name = "litellm" }, + { name = "matplotlib" }, + { name = "nest-asyncio" }, + { name = "networkx" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "openai" }, + { name = "pandas" }, + { name = "pre-commit" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pypdf" }, + { name = "python-dotenv" }, + { name = "requests" }, + { name = "scikit-learn" }, + { name = "sentry-sdk", extra = ["fastapi"] }, + { name = "sqlalchemy" }, + { name = "tenacity" }, + { name = "tiktoken" }, + { name = "transformers" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiofiles", specifier = ">=23.2.1,<24.0.0" }, + { name = "aiohttp", specifier = "==3.10.10" }, + { name = "aiosqlite", specifier = ">=0.20.0,<0.21.0" }, + { name = "alembic", specifier = ">=1.13.3,<2.0.0" }, + { name = "anthropic", specifier = ">=0.26.1,<0.27.0" }, + { name = "asyncpg", marker = "extra == 'postgres'", specifier = "==0.30.0" }, + { name = "bokeh", specifier = ">=3.6.2,<4.0.0" }, + { name = "boto3", specifier = ">=1.26.125,<2.0.0" }, + { name = "botocore", marker = "extra == 'filesystem'", specifier = ">=1.35.54,<2.0.0" }, + { name = "cairosvg", specifier = ">=2.7.1,<3.0.0" }, + { name = "datasets", specifier = "==3.1.0" }, + { name = "deepeval", marker = "extra == 'deepeval'", specifier = ">=2.0.1,<3.0.0" }, + { name = "dlt", extras = ["sqlalchemy"], specifier = ">=1.4.1,<2.0.0" }, + { name = "falkordb", marker = "extra == 'falkordb'", specifier = "==1.0.9" }, + { name = "fastapi", specifier = ">=0.109.2,<0.116.0" }, + { name = "fastapi-users", extras = ["sqlalchemy"] }, + { name = "filetype", specifier = ">=1.2.0,<2.0.0" }, + { name = "graphistry", specifier = ">=0.33.5,<0.34.0" }, + { name = "groq", marker = "extra == 'groq'", specifier = "==0.8.0" }, + { name = "gunicorn", specifier = ">=20.1.0,<21.0.0" }, + { name = "httpx", specifier = "==0.27.0" }, + { name = "instructor", specifier = "==1.5.2" }, + { name = "jinja2", specifier = ">=3.1.3,<4.0.0" }, + { name = "lancedb", specifier = "==0.15.0" }, + { name = "langchain-text-splitters", marker = "extra == 'langchain'", specifier = "==0.3.2" }, + { name = "langdetect", specifier = "==1.0.9" }, + { name = "langfuse", marker = "extra == 'langfuse'", specifier = ">=2.32.0,<3.0.0" }, + { name = "langsmith", marker = "extra == 'langchain'", specifier = "==0.2.3" }, + { name = "litellm", specifier = "==1.49.1" }, + { name = "llama-index-core", marker = "extra == 'llama-index'", specifier = ">=0.11.22,<0.12.0" }, + { name = "matplotlib", specifier = ">=3.8.3,<4.0.0" }, + { name = "neo4j", marker = "extra == 'neo4j'", specifier = ">=5.20.0,<6.0.0" }, + { name = "nest-asyncio", specifier = "==1.6.0" }, + { name = "networkx", specifier = ">=3.2.1,<4.0.0" }, + { name = "nltk", specifier = ">=3.8.1,<4.0.0" }, + { name = "numpy", specifier = "==1.26.4" }, + { name = "openai", specifier = "==1.52.0" }, + { name = "pandas", specifier = "==2.0.3" }, + { name = "pgvector", marker = "extra == 'postgres'", specifier = ">=0.3.5,<0.4.0" }, + { name = "posthog", marker = "extra == 'posthog'", specifier = ">=3.5.0,<4.0.0" }, + { name = "pre-commit", specifier = ">=4.0.1,<5.0.0" }, + { name = "psycopg2", marker = "extra == 'postgres'", specifier = ">=2.9.10,<3.0.0" }, + { name = "pydantic", specifier = "==2.8.2" }, + { name = "pydantic-settings", specifier = ">=2.2.1,<3.0.0" }, + { name = "pymilvus", marker = "extra == 'milvus'", specifier = ">=2.5.0,<3.0.0" }, + { name = "pypdf", specifier = ">=4.1.0,<5.0.0" }, + { name = "python-dotenv", specifier = "==1.0.1" }, + { name = "qdrant-client", marker = "extra == 'qdrant'", specifier = ">=1.9.0,<2.0.0" }, + { name = "requests", specifier = "==2.32.3" }, + { name = "scikit-learn", specifier = ">=1.5.0,<2.0.0" }, + { name = "sentry-sdk", extras = ["fastapi"], specifier = ">=2.9.0,<3.0.0" }, + { name = "sqlalchemy", specifier = "==2.0.35" }, + { name = "tenacity", specifier = ">=8.4.1,<9.0.0" }, + { name = "tiktoken", specifier = "==0.7.0" }, + { name = "transformers", specifier = ">=4.46.3,<5.0.0" }, + { name = "typing-extensions", specifier = "==4.12.2" }, + { name = "unstructured", extras = ["csv", "doc", "docx", "epub", "md", "odt", "org", "ppt", "pptx", "rst", "rtf", "tsv", "xlsx"], marker = "extra == 'docs'", specifier = ">=0.16.10,<0.17.0" }, + { name = "uvicorn", specifier = "==0.22.0" }, + { name = "weaviate-client", marker = "extra == 'weaviate'", specifier = "==4.9.6" }, +] + +[[package]] +name = "cognee-mcp" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "aiofiles" }, + { name = "aiohttp" }, + { name = "aiosqlite" }, + { name = "alembic" }, + { name = "anthropic" }, + { name = "asyncpg" }, + { name = "boto3" }, + { name = "botocore" }, + { name = "cognee" }, + { name = "coverage" }, + { name = "datasets" }, + { name = "debugpy" }, + { name = "deepeval" }, + { name = "deptry" }, + { name = "dlt", extra = ["sqlalchemy"] }, + { name = "falkordb" }, + { name = "fastapi" }, + { name = "fastapi-users", extra = ["sqlalchemy"] }, + { name = "filetype" }, + { name = "gitpython" }, + { name = "graphistry" }, + { name = "groq" }, + { name = "gunicorn" }, + { name = "instructor" }, + { name = "jinja2" }, + { name = "lancedb" }, + { name = "langchain-text-splitters" }, + { name = "langdetect" }, + { name = "langfuse" }, + { name = "langsmith" }, + { name = "litellm" }, + { name = "llama-index-core" }, + { name = "matplotlib" }, + { name = "mcp" }, + { name = "mypy" }, + { name = "neo4j" }, + { name = "nest-asyncio" }, + { name = "networkx" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "openai" }, + { name = "pandas" }, + { name = "pgvector" }, + { name = "posthog" }, + { name = "psycopg2" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pylint" }, + { name = "pymilvus" }, + { name = "pypdf" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "python-dotenv" }, + { name = "qdrant-client" }, + { name = "requests" }, + { name = "ruff" }, + { name = "scikit-learn" }, + { name = "sentry-sdk", extra = ["fastapi"] }, + { name = "sqlalchemy" }, + { name = "tenacity" }, + { name = "tiktoken" }, + { name = "transformers" }, + { name = "tweepy" }, + { name = "typing-extensions" }, + { name = "unstructured", extra = ["csv", "doc", "docx", "epub", "md", "odt", "org", "ppt", "pptx", "rst", "rtf", "tsv", "xlsx"] }, + { name = "uvicorn" }, + { name = "weaviate-client" }, +] + +[package.dev-dependencies] +dev = [ + { name = "cognee" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiofiles", specifier = ">=23.2.1,<24.0.0" }, + { name = "aiohttp", specifier = "==3.10.10" }, + { name = "aiosqlite", specifier = ">=0.20.0,<0.21.0" }, + { name = "alembic", specifier = ">=1.13.3,<2.0.0" }, + { name = "anthropic", specifier = ">=0.26.1,<1.0.0" }, + { name = "asyncpg", specifier = "==0.30.0" }, + { name = "boto3", specifier = ">=1.26.125,<2.0.0" }, + { name = "botocore", specifier = ">=1.35.54,<2.0.0" }, + { name = "cognee", directory = "../" }, + { name = "coverage", specifier = ">=7.3.2,<8.0.0" }, + { name = "datasets", specifier = "==3.1.0" }, + { name = "debugpy", specifier = "==1.8.2" }, + { name = "deepeval", specifier = ">=2.0.1,<3.0.0" }, + { name = "deptry", specifier = ">=0.20.0,<0.21.0" }, + { name = "dlt", extras = ["sqlalchemy"], specifier = ">=1.4.1,<2.0.0" }, + { name = "falkordb", specifier = "==1.0.9" }, + { name = "fastapi", specifier = ">=0.109.2,<0.110.0" }, + { name = "fastapi-users", extras = ["sqlalchemy"] }, + { name = "filetype", specifier = ">=1.2.0,<2.0.0" }, + { name = "gitpython", specifier = ">=3.1.43,<4.0.0" }, + { name = "graphistry", specifier = ">=0.33.5,<0.34.0" }, + { name = "groq", specifier = "==0.8.0" }, + { name = "gunicorn", specifier = ">=20.1.0,<21.0.0" }, + { name = "instructor", specifier = "==1.5.2" }, + { name = "jinja2", specifier = ">=3.1.3,<4.0.0" }, + { name = "lancedb", specifier = "==0.15.0" }, + { name = "langchain-text-splitters", specifier = "==0.3.2" }, + { name = "langdetect", specifier = "==1.0.9" }, + { name = "langfuse", specifier = ">=2.32.0,<3.0.0" }, + { name = "langsmith", specifier = "==0.1.139" }, + { name = "litellm", specifier = "==1.49.1" }, + { name = "llama-index-core", specifier = ">=0.11.22,<0.12.0" }, + { name = "matplotlib", specifier = ">=3.8.3,<4.0.0" }, + { name = "mcp", specifier = ">=1.1.1" }, + { name = "mypy", specifier = ">=1.7.1,<2.0.0" }, + { name = "neo4j", specifier = ">=5.20.0,<6.0.0" }, + { name = "nest-asyncio", specifier = "==1.6.0" }, + { name = "networkx", specifier = ">=3.2.1,<4.0.0" }, + { name = "nltk", specifier = ">=3.8.1,<4.0.0" }, + { name = "numpy", specifier = "==1.26.4" }, + { name = "openai", specifier = "==1.52.0" }, + { name = "pandas", specifier = "==2.0.3" }, + { name = "pgvector", specifier = ">=0.3.5,<0.4.0" }, + { name = "posthog", specifier = ">=3.5.0,<4.0.0" }, + { name = "psycopg2", specifier = ">=2.9.10,<3.0.0" }, + { name = "pydantic", specifier = "==2.8.2" }, + { name = "pydantic-settings", specifier = ">=2.2.1,<3.0.0" }, + { name = "pylint", specifier = ">=3.0.3,<4.0.0" }, + { name = "pymilvus", specifier = ">=2.5.0,<3.0.0" }, + { name = "pypdf", specifier = ">=4.1.0,<5.0.0" }, + { name = "pytest", specifier = ">=7.4.0,<8.0.0" }, + { name = "pytest-asyncio", specifier = ">=0.21.1,<0.22.0" }, + { name = "python-dotenv", specifier = "==1.0.1" }, + { name = "qdrant-client", specifier = ">=1.9.0,<2.0.0" }, + { name = "requests", specifier = "==2.32.3" }, + { name = "ruff", specifier = ">=0.2.2,<0.3.0" }, + { name = "scikit-learn", specifier = ">=1.5.0,<2.0.0" }, + { name = "sentry-sdk", extras = ["fastapi"], specifier = ">=2.9.0,<3.0.0" }, + { name = "sqlalchemy", specifier = "==2.0.35" }, + { name = "tenacity", specifier = ">=8.4.1,<9.0.0" }, + { name = "tiktoken", specifier = "==0.7.0" }, + { name = "transformers", specifier = ">=4.46.3,<5.0.0" }, + { name = "tweepy", specifier = "==4.14.0" }, + { name = "typing-extensions", specifier = "==4.12.2" }, + { name = "unstructured", extras = ["csv", "doc", "docx", "epub", "md", "odt", "org", "ppt", "pptx", "rst", "rtf", "tsv", "xlsx"], specifier = ">=0.16.10,<1.0.0" }, + { name = "uvicorn", specifier = "==0.22.0" }, + { name = "weaviate-client", specifier = "==4.6.7" }, +] + +[package.metadata.requires-dev] +dev = [{ name = "cognee", directory = "../" }] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "contourpy" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/bb/11250d2906ee2e8b466b5f93e6b19d525f3e0254ac8b445b56e618527718/contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b", size = 269555 }, + { url = "https://files.pythonhosted.org/packages/67/71/1e6e95aee21a500415f5d2dbf037bf4567529b6a4e986594d7026ec5ae90/contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc", size = 254549 }, + { url = "https://files.pythonhosted.org/packages/31/2c/b88986e8d79ac45efe9d8801ae341525f38e087449b6c2f2e6050468a42c/contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86", size = 313000 }, + { url = "https://files.pythonhosted.org/packages/c4/18/65280989b151fcf33a8352f992eff71e61b968bef7432fbfde3a364f0730/contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6", size = 352925 }, + { url = "https://files.pythonhosted.org/packages/f5/c7/5fd0146c93220dbfe1a2e0f98969293b86ca9bc041d6c90c0e065f4619ad/contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85", size = 323693 }, + { url = "https://files.pythonhosted.org/packages/85/fc/7fa5d17daf77306840a4e84668a48ddff09e6bc09ba4e37e85ffc8e4faa3/contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c", size = 326184 }, + { url = "https://files.pythonhosted.org/packages/ef/e7/104065c8270c7397c9571620d3ab880558957216f2b5ebb7e040f85eeb22/contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291", size = 1268031 }, + { url = "https://files.pythonhosted.org/packages/e2/4a/c788d0bdbf32c8113c2354493ed291f924d4793c4a2e85b69e737a21a658/contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f", size = 1325995 }, + { url = "https://files.pythonhosted.org/packages/a6/e6/a2f351a90d955f8b0564caf1ebe4b1451a3f01f83e5e3a414055a5b8bccb/contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375", size = 174396 }, + { url = "https://files.pythonhosted.org/packages/a8/7e/cd93cab453720a5d6cb75588cc17dcdc08fc3484b9de98b885924ff61900/contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9", size = 219787 }, + { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, + { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, + { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, + { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, + { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, + { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, + { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, + { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, + { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, + { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +] + +[[package]] +name = "coverage" +version = "7.6.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/d2/c25011f4d036cf7e8acbbee07a8e09e9018390aee25ba085596c4b83d510/coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", size = 801710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/91/b3dc2f7f38b5cca1236ab6bbb03e84046dd887707b4ec1db2baa47493b3b/coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", size = 207133 }, + { url = "https://files.pythonhosted.org/packages/0d/2b/53fd6cb34d443429a92b3ec737f4953627e38b3bee2a67a3c03425ba8573/coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", size = 207577 }, + { url = "https://files.pythonhosted.org/packages/74/f2/68edb1e6826f980a124f21ea5be0d324180bf11de6fd1defcf9604f76df0/coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", size = 239524 }, + { url = "https://files.pythonhosted.org/packages/d3/83/8fec0ee68c2c4a5ab5f0f8527277f84ed6f2bd1310ae8a19d0c5532253ab/coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9", size = 236925 }, + { url = "https://files.pythonhosted.org/packages/8b/20/8f50e7c7ad271144afbc2c1c6ec5541a8c81773f59352f8db544cad1a0ec/coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4", size = 238792 }, + { url = "https://files.pythonhosted.org/packages/6f/62/4ac2e5ad9e7a5c9ec351f38947528e11541f1f00e8a0cdce56f1ba7ae301/coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1", size = 237682 }, + { url = "https://files.pythonhosted.org/packages/58/2f/9d2203f012f3b0533c73336c74134b608742be1ce475a5c72012573cfbb4/coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b", size = 236310 }, + { url = "https://files.pythonhosted.org/packages/33/6d/31f6ab0b4f0f781636075f757eb02141ea1b34466d9d1526dbc586ed7078/coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3", size = 237096 }, + { url = "https://files.pythonhosted.org/packages/7d/fb/e14c38adebbda9ed8b5f7f8e03340ac05d68d27b24397f8d47478927a333/coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0", size = 209682 }, + { url = "https://files.pythonhosted.org/packages/a4/11/a782af39b019066af83fdc0e8825faaccbe9d7b19a803ddb753114b429cc/coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b", size = 210542 }, + { url = "https://files.pythonhosted.org/packages/60/52/b16af8989a2daf0f80a88522bd8e8eed90b5fcbdecf02a6888f3e80f6ba7/coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8", size = 207325 }, + { url = "https://files.pythonhosted.org/packages/0f/79/6b7826fca8846c1216a113227b9f114ac3e6eacf168b4adcad0cb974aaca/coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a", size = 207563 }, + { url = "https://files.pythonhosted.org/packages/a7/07/0bc73da0ccaf45d0d64ef86d33b7d7fdeef84b4c44bf6b85fb12c215c5a6/coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015", size = 240580 }, + { url = "https://files.pythonhosted.org/packages/71/8a/9761f409910961647d892454687cedbaccb99aae828f49486734a82ede6e/coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3", size = 237613 }, + { url = "https://files.pythonhosted.org/packages/8b/10/ee7d696a17ac94f32f2dbda1e17e730bf798ae9931aec1fc01c1944cd4de/coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae", size = 239684 }, + { url = "https://files.pythonhosted.org/packages/16/60/aa1066040d3c52fff051243c2d6ccda264da72dc6d199d047624d395b2b2/coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4", size = 239112 }, + { url = "https://files.pythonhosted.org/packages/4e/e5/69f35344c6f932ba9028bf168d14a79fedb0dd4849b796d43c81ce75a3c9/coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6", size = 237428 }, + { url = "https://files.pythonhosted.org/packages/32/20/adc895523c4a28f63441b8ac645abd74f9bdd499d2d175bef5b41fc7f92d/coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f", size = 239098 }, + { url = "https://files.pythonhosted.org/packages/a9/a6/e0e74230c9bb3549ec8ffc137cfd16ea5d56e993d6bffed2218bff6187e3/coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692", size = 209940 }, + { url = "https://files.pythonhosted.org/packages/3e/18/cb5b88349d4aa2f41ec78d65f92ea32572b30b3f55bc2b70e87578b8f434/coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97", size = 210726 }, + { url = "https://files.pythonhosted.org/packages/35/26/9abab6539d2191dbda2ce8c97b67d74cbfc966cc5b25abb880ffc7c459bc/coverage-7.6.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664", size = 207356 }, + { url = "https://files.pythonhosted.org/packages/44/da/d49f19402240c93453f606e660a6676a2a1fbbaa6870cc23207790aa9697/coverage-7.6.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c", size = 207614 }, + { url = "https://files.pythonhosted.org/packages/da/e6/93bb9bf85497816082ec8da6124c25efa2052bd4c887dd3b317b91990c9e/coverage-7.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014", size = 240129 }, + { url = "https://files.pythonhosted.org/packages/df/65/6a824b9406fe066835c1274a9949e06f084d3e605eb1a602727a27ec2fe3/coverage-7.6.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00", size = 237276 }, + { url = "https://files.pythonhosted.org/packages/9f/79/6c7a800913a9dd23ac8c8da133ebb556771a5a3d4df36b46767b1baffd35/coverage-7.6.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d", size = 239267 }, + { url = "https://files.pythonhosted.org/packages/57/e7/834d530293fdc8a63ba8ff70033d5182022e569eceb9aec7fc716b678a39/coverage-7.6.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a", size = 238887 }, + { url = "https://files.pythonhosted.org/packages/15/05/ec9d6080852984f7163c96984444e7cd98b338fd045b191064f943ee1c08/coverage-7.6.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077", size = 236970 }, + { url = "https://files.pythonhosted.org/packages/0a/d8/775937670b93156aec29f694ce37f56214ed7597e1a75b4083ee4c32121c/coverage-7.6.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb", size = 238831 }, + { url = "https://files.pythonhosted.org/packages/f4/58/88551cb7fdd5ec98cb6044e8814e38583436b14040a5ece15349c44c8f7c/coverage-7.6.9-cp313-cp313-win32.whl", hash = "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba", size = 210000 }, + { url = "https://files.pythonhosted.org/packages/b7/12/cfbf49b95120872785ff8d56ab1c7fe3970a65e35010c311d7dd35c5fd00/coverage-7.6.9-cp313-cp313-win_amd64.whl", hash = "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1", size = 210753 }, + { url = "https://files.pythonhosted.org/packages/7c/68/c1cb31445599b04bde21cbbaa6d21b47c5823cdfef99eae470dfce49c35a/coverage-7.6.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419", size = 208091 }, + { url = "https://files.pythonhosted.org/packages/11/73/84b02c6b19c4a11eb2d5b5eabe926fb26c21c080e0852f5e5a4f01165f9e/coverage-7.6.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a", size = 208369 }, + { url = "https://files.pythonhosted.org/packages/de/e0/ae5d878b72ff26df2e994a5c5b1c1f6a7507d976b23beecb1ed4c85411ef/coverage-7.6.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4", size = 251089 }, + { url = "https://files.pythonhosted.org/packages/ab/9c/0aaac011aef95a93ef3cb2fba3fde30bc7e68a6635199ed469b1f5ea355a/coverage-7.6.9-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae", size = 246806 }, + { url = "https://files.pythonhosted.org/packages/f8/19/4d5d3ae66938a7dcb2f58cef3fa5386f838f469575b0bb568c8cc9e3a33d/coverage-7.6.9-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030", size = 249164 }, + { url = "https://files.pythonhosted.org/packages/b3/0b/4ee8a7821f682af9ad440ae3c1e379da89a998883271f088102d7ca2473d/coverage-7.6.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be", size = 248642 }, + { url = "https://files.pythonhosted.org/packages/8a/12/36ff1d52be18a16b4700f561852e7afd8df56363a5edcfb04cf26a0e19e0/coverage-7.6.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e", size = 246516 }, + { url = "https://files.pythonhosted.org/packages/43/d0/8e258f6c3a527c1655602f4f576215e055ac704de2d101710a71a2affac2/coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9", size = 247783 }, + { url = "https://files.pythonhosted.org/packages/a9/0d/1e4a48d289429d38aae3babdfcadbf35ca36bdcf3efc8f09b550a845bdb5/coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b", size = 210646 }, + { url = "https://files.pythonhosted.org/packages/26/74/b0729f196f328ac55e42b1e22ec2f16d8bcafe4b8158a26ec9f1cdd1d93e/coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611", size = 211815 }, +] + +[[package]] +name = "cryptography" +version = "44.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, + { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, + { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, + { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, + { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, + { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, + { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, + { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, + { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, + { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, + { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, + { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, + { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, + { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, + { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, + { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, + { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, + { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, + { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, + { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, +] + +[[package]] +name = "cssselect2" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tinycss2" }, + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/fc/326cb6f988905998f09bb54a3f5d98d4462ba119363c0dfad29750d48c09/cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a", size = 35888 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/3a/e39436efe51894243ff145a37c4f9a030839b97779ebcc4f13b3ba21c54e/cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969", size = 15586 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "dataclasses-json" +version = "0.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "marshmallow" }, + { name = "typing-inspect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686 }, +] + +[[package]] +name = "datasets" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/b2/25ef6d54dcb2d1412e5efec59449d1af92e7a6d969e27adfe9965e780c1f/datasets-3.1.0.tar.gz", hash = "sha256:c92cac049e0f9f85b0dd63739c68e564c657b1624bc2b66b1e13489062832e27", size = 558115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/a5/33cf000137545a08b0a3a6ea76c8ccbd87917f78bb5d737f9f56f3b11ef6/datasets-3.1.0-py3-none-any.whl", hash = "sha256:dc8808a6d17838fe05e13b39aa7ac3ea0fd0806ed7004eaf4d4eb2c2a356bc61", size = 480554 }, +] + +[[package]] +name = "debugpy" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/c9/9d585d711cdcae0db7788731b331dab0d1f600d0204e76b2a5c6b30d569e/debugpy-1.8.2.zip", hash = "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00", size = 4614001 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/ba/d06289b7c6194117fcecc88c24dee405b1c14b8e318e7bdf513eb78c3278/debugpy-1.8.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a", size = 1789191 }, + { url = "https://files.pythonhosted.org/packages/4f/d6/04ae52227ab7c1d43b729d5ae75ebd592df56c55d4e4dfa30ba173096b0f/debugpy-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634", size = 2643243 }, + { url = "https://files.pythonhosted.org/packages/49/cd/207d629509949568603008c8cf90cd0a949d1a9d1900936010854732ab93/debugpy-1.8.2-cp311-cp311-win32.whl", hash = "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad", size = 4703962 }, + { url = "https://files.pythonhosted.org/packages/23/b1/3fc28ba2921234e3fad4a421dcb3185c38066eab0f92702c0d88ce891381/debugpy-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:d3408fddd76414034c02880e891ea434e9a9cf3a69842098ef92f6e809d09afa", size = 4717479 }, + { url = "https://files.pythonhosted.org/packages/8c/6d/116a2dbcd13402be7eb58c07ba52a4052bf71011670a5ca1218b0dc6aa60/debugpy-1.8.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:5d3ccd39e4021f2eb86b8d748a96c766058b39443c1f18b2dc52c10ac2757835", size = 1437574 }, + { url = "https://files.pythonhosted.org/packages/18/5d/bebfd65d9abc30c253b27c1c26e9be01dba6028a2140684725ef40e711ad/debugpy-1.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62658aefe289598680193ff655ff3940e2a601765259b123dc7f89c0239b8cd3", size = 1438633 }, + { url = "https://files.pythonhosted.org/packages/0e/9b/f031cea19da5bf660e273bb2482af401f3ce940ea6520fa1756144c828bf/debugpy-1.8.2-cp312-cp312-win32.whl", hash = "sha256:bd11fe35d6fd3431f1546d94121322c0ac572e1bfb1f6be0e9b8655fb4ea941e", size = 4583082 }, + { url = "https://files.pythonhosted.org/packages/6d/a5/41abca2ed34bca22a4b3f64c4e6150cbedd254274de47775aa4d450b51e1/debugpy-1.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:15bc2f4b0f5e99bf86c162c91a74c0631dbd9cef3c6a1d1329c946586255e859", size = 4583077 }, + { url = "https://files.pythonhosted.org/packages/b4/32/dd0707c8557f99496811763c5333ea87bcec1eb233c1efa324c9a8082bff/debugpy-1.8.2-py2.py3-none-any.whl", hash = "sha256:16e16df3a98a35c63c3ab1e4d19be4cbc7fdda92d9ddc059294f18910928e0ca", size = 4826112 }, +] + +[[package]] +name = "deepdiff" +version = "8.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "orderly-set" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/4b/ce2d3a36f77186d7dbca0f10b33e6a1c0eee390d9434960d2a14e2736b52/deepdiff-8.1.1.tar.gz", hash = "sha256:dd7bc7d5c8b51b5b90f01b0e2fe23c801fd8b4c6a7ee7e31c5a3c3663fcc7ceb", size = 433560 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/f7/2df72b55635926872b947203aacbe7e1109a51929aec8ebfef8c4a348eb5/deepdiff-8.1.1-py3-none-any.whl", hash = "sha256:b0231fa3afb0f7184e82535f2b4a36636442ed21e94a0cf3aaa7982157e7ebca", size = 84655 }, +] + +[[package]] +name = "deepeval" +version = "2.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docx2txt" }, + { name = "grpcio" }, + { name = "importlib-metadata" }, + { name = "langchain" }, + { name = "langchain-community" }, + { name = "langchain-core" }, + { name = "langchain-openai" }, + { name = "nest-asyncio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-sdk" }, + { name = "portalocker" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pytest" }, + { name = "pytest-repeat" }, + { name = "pytest-xdist" }, + { name = "requests" }, + { name = "rich" }, + { name = "sentry-sdk" }, + { name = "tabulate" }, + { name = "tenacity" }, + { name = "tqdm" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/00/137fa722a29b0e0463db653ba71d8e6eb47bb8b051db7497bfba57e44712/deepeval-2.0.6.tar.gz", hash = "sha256:74976e01f4896a18169354a766a779b99df3d3386f88d9a9e49862fa93989dd5", size = 324457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/60/533ce66e28295e2b94267126a851ac091ad29a835a9827d1f9c30574fce4/deepeval-2.0.6-py3-none-any.whl", hash = "sha256:57302830ff9d3d16ad4f1961338c7b4453e48039ff131990f258880728f33b6b", size = 504101 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "deprecated" +version = "1.2.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/a3/53e7d78a6850ffdd394d7048a31a6f14e44900adedf190f9a165f6b69439/deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d", size = 2977612 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/8f/c7f227eb42cfeaddce3eb0c96c60cbca37797fa7b34f8e1aeadf6c5c0983/Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320", size = 9941 }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, +] + +[[package]] +name = "deptry" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/9e/7a976d923d3ae18d7dc4ace8e0c83e20a847828196e7f4b13a4bf6b03b50/deptry-0.20.0.tar.gz", hash = "sha256:62e9aaf3aea9e2ca66c85da98a0ba0290b4d3daea4e1d0ad937d447bd3c36402", size = 129936 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/da/c94ebc2192a29a6f45acb5b87fdb31d1b84843154572d9b88100b7047eda/deptry-0.20.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:41434d95124851b83cb05524d1a09ad6fea62006beafed2ef90a6b501c1b237f", size = 1624964 }, + { url = "https://files.pythonhosted.org/packages/98/8e/08f7b33b384a7981b27de5aa3def41b6fa691aa692904910dc1f5bd1fc02/deptry-0.20.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:b3b4b22d1406147de5d606a24042126cd74d52fdfdb0232b9c5fd0270d601610", size = 1545726 }, + { url = "https://files.pythonhosted.org/packages/55/47/8e813609a4ba6c75032bd3468f9edcad31e11906eafd0a1e5a3f3f837fba/deptry-0.20.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012fb106dbea6ca95196cdcd75ac90c516c8f01292f7934f2e802a7cf025a660", size = 1676818 }, + { url = "https://files.pythonhosted.org/packages/b4/70/456d976912c6026252034c0cdb37a3cbad34ac0ce815763466720c63aece/deptry-0.20.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ce3920e2bd6d2b4427ab31ab8efb94bbef897001c2d395782bc30002966d12d", size = 1708051 }, + { url = "https://files.pythonhosted.org/packages/ff/66/95e04a84120861b0c0ac980999e6172612509d5ff9a84b41e2f71cc3c3c0/deptry-0.20.0-cp38-abi3-win_amd64.whl", hash = "sha256:0c90ce64e637d0e902bc97c5a020adecfee9e9f09ee0bf4c61554994139bebdb", size = 1493281 }, + { url = "https://files.pythonhosted.org/packages/53/c9/9d7d86b5fdc452b522ef16df9e27c8404dc6f231fa865a3af31c1dab7563/deptry-0.20.0-cp38-abi3-win_arm64.whl", hash = "sha256:6886ff44aaf26fd83093f14f844ebc84589d90df9bbad9a1625e8a080e6f1be2", size = 1420087 }, +] + +[[package]] +name = "dill" +version = "0.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/17/4d/ac7ffa80c69ea1df30a8aa11b3578692a5118e7cd1aa157e3ef73b092d15/dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca", size = 184847 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa85280485a9c395e7df3db8158cfec1eee34/dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7", size = 116252 }, +] + +[[package]] +name = "dirtyjson" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/04/d24f6e645ad82ba0ef092fa17d9ef7a21953781663648a01c9371d9e8e98/dirtyjson-1.0.8.tar.gz", hash = "sha256:90ca4a18f3ff30ce849d100dcf4a003953c79d3a2348ef056f1d9c22231a25fd", size = 30782 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/69/1bcf70f81de1b4a9f21b3a62ec0c83bdff991c88d6cc2267d02408457e88/dirtyjson-1.0.8-py3-none-any.whl", hash = "sha256:125e27248435a58acace26d5c2c4c11a1c0de0a9c5124c5a94ba78e517d74f53", size = 25197 }, +] + +[[package]] +name = "distlib" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 }, +] + +[[package]] +name = "dlt" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "fsspec" }, + { name = "gitpython" }, + { name = "giturlparse" }, + { name = "hexbytes" }, + { name = "humanize" }, + { name = "jsonpath-ng" }, + { name = "makefun" }, + { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, + { name = "packaging" }, + { name = "pathvalidate" }, + { name = "pendulum" }, + { name = "pluggy" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "requirements-parser" }, + { name = "semver" }, + { name = "setuptools" }, + { name = "simplejson" }, + { name = "tenacity" }, + { name = "tomlkit" }, + { name = "typing-extensions" }, + { name = "tzdata" }, + { name = "win-precise-time", marker = "os_name == 'nt'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/fd/3418eebadf5f6d9e70e25fedcfb8310bf5cda415f67793710bad8a31876b/dlt-1.5.0.tar.gz", hash = "sha256:2ece1c96242699630793681f0e3b9ec8bd41c79db3de20266cde427a71869b61", size = 686543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/cf/226ad6b97056409eba8c4bde9bfbb270dbb6b0d0d42a94dfcce68da3b3df/dlt-1.5.0-py3-none-any.whl", hash = "sha256:b9eaaa4966f3f696b8ba5cb988ce3c1a1030bede0cb92ecfa75f663709a7d296", size = 868745 }, +] + +[package.optional-dependencies] +sqlalchemy = [ + { name = "alembic" }, + { name = "sqlalchemy" }, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 }, +] + +[[package]] +name = "docstring-parser" +version = "0.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/08/12/9c22a58c0b1e29271051222d8906257616da84135af9ed167c9e28f85cb3/docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e", size = 26565 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637", size = 36533 }, +] + +[[package]] +name = "docx2txt" +version = "0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/7d/60ee3f2b16d9bfdfa72e8599470a2c1a5b759cb113c6fe1006be28359327/docx2txt-0.8.tar.gz", hash = "sha256:2c06d98d7cfe2d3947e5760a57d924e3ff07745b379c8737723922e7009236e5", size = 2814 } + +[[package]] +name = "email-validator" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 }, +] + +[[package]] +name = "emoji" +version = "2.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/64/812d7e2ae0ac2ade0d6583f911f99240c80f700afbe8391df10e547f564d/emoji-2.14.0.tar.gz", hash = "sha256:f68ac28915a2221667cddb3e6c589303c3c6954c6c5af6fefaec7f9bdf72fdca", size = 593932 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/56/4ddf8b36aa4b52077045b17ffb8958f3360b250df4143d1482d9d5bb54d5/emoji-2.14.0-py3-none-any.whl", hash = "sha256:fcc936bf374b1aec67dda5303ae99710ba88cc9cdce2d1a71c5f2204e6d78799", size = 586897 }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, +] + +[[package]] +name = "execnet" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 }, +] + +[[package]] +name = "falkordb" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "redis" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/fd/8f4a6bc2965a306f55f33ef96ea970f324463c48f6041fbc451e7c64463b/falkordb-1.0.9.tar.gz", hash = "sha256:177008e63c7e4d9ebbdfeb8cad24b0e49175bb0f6e96cac9b4ffb641c0eff0f1", size = 27159 } + +[[package]] +name = "fastapi" +version = "0.109.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/d5/33a8992fe0e811211cd1cbc219cefa4732f9fb0555921346a59d1fec0040/fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73", size = 11720963 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/97/60351307ab4502908d29f64f2801a36709a3f1888447bb328bc373d6ca0e/fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d", size = 92071 }, +] + +[[package]] +name = "fastapi-users" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "email-validator" }, + { name = "fastapi" }, + { name = "makefun" }, + { name = "pwdlib", extra = ["argon2", "bcrypt"] }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/7b/7b07c059fed69c132741a8ea3730f304172ad789f147eed1ae4071584e62/fastapi_users-14.0.0.tar.gz", hash = "sha256:6dceefbd2db87a17f791ef431d616bb5ce40cb123da7922969b704cbee5e7384", size = 120222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/06/040a09f2a0d3d10dc7dab3f38d26b3b44f1b4dff9316bad2111602847918/fastapi_users-14.0.0-py3-none-any.whl", hash = "sha256:e1230e044ddc2209b890b5b5c6fc1d13def961298d40e01c2d28f8bc2fe8c4c7", size = 38683 }, +] + +[package.optional-dependencies] +sqlalchemy = [ + { name = "fastapi-users-db-sqlalchemy" }, +] + +[[package]] +name = "fastapi-users-db-sqlalchemy" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi-users" }, + { name = "sqlalchemy", extra = ["asyncio"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/ea/ce1eb0afbced169d54621e3558c385ec0f2813e87b4b115de9cb6f4dba35/fastapi_users_db_sqlalchemy-6.0.1.tar.gz", hash = "sha256:f0ef9fe3250453712d25c13170700c80fa205867ce7add7ef391c384ec27cbe1", size = 10530 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/0b/7b0bb477b3258b1c6b6daf950694c0f8d6f62ec6a82f6f37ed5369fda01e/fastapi_users_db_sqlalchemy-6.0.1-py3-none-any.whl", hash = "sha256:d1050ec31eb75e8c4fa9abafa4addaf0baf5c97afeea2f0f910ea55e2451fcad", size = 6907 }, +] + +[[package]] +name = "filelock" +version = "3.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d1d67bccdbefc17af4cc8f553e341ab1/filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435", size = 18037 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", size = 16163 }, +] + +[[package]] +name = "filetype" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970 }, +] + +[[package]] +name = "fonttools" +version = "4.55.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/61/a300d1574dc381393424047c0396a0e213db212e28361123af9830d71a8d/fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45", size = 3498155 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/18/14be25545600bd100e5b74a3ac39089b7c1cb403dc513b7ca348be3381bf/fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e", size = 2771005 }, + { url = "https://files.pythonhosted.org/packages/b2/51/2e1a5d3871cd7c2ae2054b54e92604e7d6abc3fd3656e9583c399648fe1c/fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b", size = 2300654 }, + { url = "https://files.pythonhosted.org/packages/73/1a/50109bb2703bc6f774b52ea081db21edf2a9fa4b6d7485faadf9d1b997e9/fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90", size = 4877541 }, + { url = "https://files.pythonhosted.org/packages/5d/52/c0b9857fa075da1b8806c5dc2d8342918a8cc2065fd14fbddb3303282693/fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0", size = 4906304 }, + { url = "https://files.pythonhosted.org/packages/0b/1b/55f85c7e962d295e456d5209581c919620ee3e877b95cd86245187a5050f/fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b", size = 4888087 }, + { url = "https://files.pythonhosted.org/packages/83/13/6f2809c612ea2ac51391f92468ff861c63473601530fca96458b453212bf/fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765", size = 5056958 }, + { url = "https://files.pythonhosted.org/packages/c1/28/d0ea9e872fa4208b9dfca686e1dd9ca22f6c9ef33ecff2f0ebc2dbe7c29b/fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f", size = 2173939 }, + { url = "https://files.pythonhosted.org/packages/be/36/d74ae1020bc41a1dff3e6f5a99f646563beecb97e386d27abdac3ba07650/fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72", size = 2220363 }, + { url = "https://files.pythonhosted.org/packages/89/58/fbcf5dff7e3ea844bb00c4d806ca1e339e1f2dce5529633bf4842c0c9a1f/fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35", size = 2765380 }, + { url = "https://files.pythonhosted.org/packages/81/dd/da6e329e51919b4f421c8738f3497e2ab08c168e76aaef7b6d5351862bdf/fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c", size = 2297940 }, + { url = "https://files.pythonhosted.org/packages/00/44/f5ee560858425c99ef07e04919e736db09d6416408e5a8d3bbfb4a6623fd/fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7", size = 4793327 }, + { url = "https://files.pythonhosted.org/packages/24/da/0a001926d791c55e29ac3c52964957a20dbc1963615446b568b7432891c3/fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314", size = 4865624 }, + { url = "https://files.pythonhosted.org/packages/3d/d8/1edd8b13a427a9fb6418373437caa586c0caa57f260af8e0548f4d11e340/fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427", size = 4774166 }, + { url = "https://files.pythonhosted.org/packages/9c/ec/ade054097976c3d6debc9032e09a351505a0196aa5493edf021be376f75e/fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a", size = 5001832 }, + { url = "https://files.pythonhosted.org/packages/e2/cd/233f0e31ad799bb91fc78099c8b4e5ec43b85a131688519640d6bae46f6a/fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07", size = 2162228 }, + { url = "https://files.pythonhosted.org/packages/46/45/a498b5291f6c0d91b2394b1ed7447442a57d1c9b9cf8f439aee3c316a56e/fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54", size = 2209118 }, + { url = "https://files.pythonhosted.org/packages/9c/9f/00142a19bad96eeeb1aed93f567adc19b7f2c1af6f5bc0a1c3de90b4b1ac/fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29", size = 2752812 }, + { url = "https://files.pythonhosted.org/packages/b0/20/14b8250d63ba65e162091fb0dda07730f90c303bbf5257e9ddacec7230d9/fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4", size = 2291521 }, + { url = "https://files.pythonhosted.org/packages/34/47/a681cfd10245eb74f65e491a934053ec75c4af639655446558f29818e45e/fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca", size = 4770980 }, + { url = "https://files.pythonhosted.org/packages/d2/6c/a7066afc19db0705a12efd812e19c32cde2b9514eb714659522f2ebd60b6/fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b", size = 4845534 }, + { url = "https://files.pythonhosted.org/packages/0c/a2/3c204fbabbfd845d9bdcab9ae35279d41e9a4bf5c80a0a2708f9c5a195d6/fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048", size = 4753910 }, + { url = "https://files.pythonhosted.org/packages/6e/8c/b4cb3592880340b89e4ef6601b531780bba73862332a6451d78fe135d6cb/fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe", size = 4976411 }, + { url = "https://files.pythonhosted.org/packages/fc/a8/4bf98840ff89fcc188470b59daec57322178bf36d2f4f756cd19a42a826b/fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628", size = 2160178 }, + { url = "https://files.pythonhosted.org/packages/e6/57/4cc35004605416df3225ff362f3455cf09765db00df578ae9e46d0fefd23/fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b", size = 2206102 }, + { url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 }, +] + +[[package]] +name = "frozenlist" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/ed/0f4cec13a93c02c47ec32d81d11c0c1efbadf4a471e3f3ce7cad366cbbd3/frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", size = 39930 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/43/0bed28bf5eb1c9e4301003b74453b8e7aa85fb293b31dde352aac528dafc/frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", size = 94987 }, + { url = "https://files.pythonhosted.org/packages/bb/bf/b74e38f09a246e8abbe1e90eb65787ed745ccab6eaa58b9c9308e052323d/frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", size = 54584 }, + { url = "https://files.pythonhosted.org/packages/2c/31/ab01375682f14f7613a1ade30149f684c84f9b8823a4391ed950c8285656/frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", size = 52499 }, + { url = "https://files.pythonhosted.org/packages/98/a8/d0ac0b9276e1404f58fec3ab6e90a4f76b778a49373ccaf6a563f100dfbc/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", size = 276357 }, + { url = "https://files.pythonhosted.org/packages/ad/c9/c7761084fa822f07dac38ac29f841d4587570dd211e2262544aa0b791d21/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", size = 287516 }, + { url = "https://files.pythonhosted.org/packages/a1/ff/cd7479e703c39df7bdab431798cef89dc75010d8aa0ca2514c5b9321db27/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", size = 283131 }, + { url = "https://files.pythonhosted.org/packages/59/a0/370941beb47d237eca4fbf27e4e91389fd68699e6f4b0ebcc95da463835b/frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", size = 261320 }, + { url = "https://files.pythonhosted.org/packages/b8/5f/c10123e8d64867bc9b4f2f510a32042a306ff5fcd7e2e09e5ae5100ee333/frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", size = 274877 }, + { url = "https://files.pythonhosted.org/packages/fa/79/38c505601ae29d4348f21706c5d89755ceded02a745016ba2f58bd5f1ea6/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", size = 269592 }, + { url = "https://files.pythonhosted.org/packages/19/e2/39f3a53191b8204ba9f0bb574b926b73dd2efba2a2b9d2d730517e8f7622/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", size = 265934 }, + { url = "https://files.pythonhosted.org/packages/d5/c9/3075eb7f7f3a91f1a6b00284af4de0a65a9ae47084930916f5528144c9dd/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", size = 283859 }, + { url = "https://files.pythonhosted.org/packages/05/f5/549f44d314c29408b962fa2b0e69a1a67c59379fb143b92a0a065ffd1f0f/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", size = 287560 }, + { url = "https://files.pythonhosted.org/packages/9d/f8/cb09b3c24a3eac02c4c07a9558e11e9e244fb02bf62c85ac2106d1eb0c0b/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", size = 277150 }, + { url = "https://files.pythonhosted.org/packages/37/48/38c2db3f54d1501e692d6fe058f45b6ad1b358d82cd19436efab80cfc965/frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", size = 45244 }, + { url = "https://files.pythonhosted.org/packages/ca/8c/2ddffeb8b60a4bce3b196c32fcc30d8830d4615e7b492ec2071da801b8ad/frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", size = 51634 }, + { url = "https://files.pythonhosted.org/packages/79/73/fa6d1a96ab7fd6e6d1c3500700963eab46813847f01ef0ccbaa726181dd5/frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", size = 94026 }, + { url = "https://files.pythonhosted.org/packages/ab/04/ea8bf62c8868b8eada363f20ff1b647cf2e93377a7b284d36062d21d81d1/frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", size = 54150 }, + { url = "https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", size = 51927 }, + { url = "https://files.pythonhosted.org/packages/e3/12/2aad87deb08a4e7ccfb33600871bbe8f0e08cb6d8224371387f3303654d7/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a", size = 282647 }, + { url = "https://files.pythonhosted.org/packages/77/f2/07f06b05d8a427ea0060a9cef6e63405ea9e0d761846b95ef3fb3be57111/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", size = 289052 }, + { url = "https://files.pythonhosted.org/packages/bd/9f/8bf45a2f1cd4aa401acd271b077989c9267ae8463e7c8b1eb0d3f561b65e/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", size = 291719 }, + { url = "https://files.pythonhosted.org/packages/41/d1/1f20fd05a6c42d3868709b7604c9f15538a29e4f734c694c6bcfc3d3b935/frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", size = 267433 }, + { url = "https://files.pythonhosted.org/packages/af/f2/64b73a9bb86f5a89fb55450e97cd5c1f84a862d4ff90d9fd1a73ab0f64a5/frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", size = 283591 }, + { url = "https://files.pythonhosted.org/packages/29/e2/ffbb1fae55a791fd6c2938dd9ea779509c977435ba3940b9f2e8dc9d5316/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", size = 273249 }, + { url = "https://files.pythonhosted.org/packages/2e/6e/008136a30798bb63618a114b9321b5971172a5abddff44a100c7edc5ad4f/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", size = 271075 }, + { url = "https://files.pythonhosted.org/packages/ae/f0/4e71e54a026b06724cec9b6c54f0b13a4e9e298cc8db0f82ec70e151f5ce/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", size = 285398 }, + { url = "https://files.pythonhosted.org/packages/4d/36/70ec246851478b1c0b59f11ef8ade9c482ff447c1363c2bd5fad45098b12/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", size = 294445 }, + { url = "https://files.pythonhosted.org/packages/37/e0/47f87544055b3349b633a03c4d94b405956cf2437f4ab46d0928b74b7526/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", size = 280569 }, + { url = "https://files.pythonhosted.org/packages/f9/7c/490133c160fb6b84ed374c266f42800e33b50c3bbab1652764e6e1fc498a/frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", size = 44721 }, + { url = "https://files.pythonhosted.org/packages/b1/56/4e45136ffc6bdbfa68c29ca56ef53783ef4c2fd395f7cbf99a2624aa9aaa/frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", size = 51329 }, + { url = "https://files.pythonhosted.org/packages/da/3b/915f0bca8a7ea04483622e84a9bd90033bab54bdf485479556c74fd5eaf5/frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", size = 91538 }, + { url = "https://files.pythonhosted.org/packages/c7/d1/a7c98aad7e44afe5306a2b068434a5830f1470675f0e715abb86eb15f15b/frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", size = 52849 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/76f23bf9ab15d5f760eb48701909645f686f9c64fbb8982674c241fbef14/frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", size = 50583 }, + { url = "https://files.pythonhosted.org/packages/1f/22/462a3dd093d11df623179d7754a3b3269de3b42de2808cddef50ee0f4f48/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", size = 265636 }, + { url = "https://files.pythonhosted.org/packages/80/cf/e075e407fc2ae7328155a1cd7e22f932773c8073c1fc78016607d19cc3e5/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", size = 270214 }, + { url = "https://files.pythonhosted.org/packages/a1/58/0642d061d5de779f39c50cbb00df49682832923f3d2ebfb0fedf02d05f7f/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", size = 273905 }, + { url = "https://files.pythonhosted.org/packages/ab/66/3fe0f5f8f2add5b4ab7aa4e199f767fd3b55da26e3ca4ce2cc36698e50c4/frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", size = 250542 }, + { url = "https://files.pythonhosted.org/packages/f6/b8/260791bde9198c87a465224e0e2bb62c4e716f5d198fc3a1dacc4895dbd1/frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", size = 267026 }, + { url = "https://files.pythonhosted.org/packages/2e/a4/3d24f88c527f08f8d44ade24eaee83b2627793fa62fa07cbb7ff7a2f7d42/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", size = 257690 }, + { url = "https://files.pythonhosted.org/packages/de/9a/d311d660420b2beeff3459b6626f2ab4fb236d07afbdac034a4371fe696e/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", size = 253893 }, + { url = "https://files.pythonhosted.org/packages/c6/23/e491aadc25b56eabd0f18c53bb19f3cdc6de30b2129ee0bc39cd387cd560/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", size = 267006 }, + { url = "https://files.pythonhosted.org/packages/08/c4/ab918ce636a35fb974d13d666dcbe03969592aeca6c3ab3835acff01f79c/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", size = 276157 }, + { url = "https://files.pythonhosted.org/packages/c0/29/3b7a0bbbbe5a34833ba26f686aabfe982924adbdcafdc294a7a129c31688/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", size = 264642 }, + { url = "https://files.pythonhosted.org/packages/ab/42/0595b3dbffc2e82d7fe658c12d5a5bafcd7516c6bf2d1d1feb5387caa9c1/frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", size = 44914 }, + { url = "https://files.pythonhosted.org/packages/17/c4/b7db1206a3fea44bf3b838ca61deb6f74424a8a5db1dd53ecb21da669be6/frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", size = 51167 }, + { url = "https://files.pythonhosted.org/packages/c6/c8/a5be5b7550c10858fcf9b0ea054baccab474da77d37f1e828ce043a3a5d4/frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", size = 11901 }, +] + +[[package]] +name = "fsspec" +version = "2024.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/7c/12b0943011daaaa9c35c2a2e22e5eb929ac90002f08f1259d69aedad84de/fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8", size = 286206 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/a0/6aaea0c2fbea2f89bfd5db25fb1e3481896a423002ebe4e55288907a97a3/fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b", size = 179253 }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "gitdb" +version = "4.0.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/0d/bbb5b5ee188dec84647a4664f3e11b06ade2bde568dbd489d9d64adef8ed/gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b", size = 394469 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5b/8f0c4a5bb9fd491c277c21eff7ccae71b47d43c4446c9d0c6cff2fe8c2c4/gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", size = 62721 }, +] + +[[package]] +name = "gitpython" +version = "3.1.43" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/a1/106fd9fa2dd989b6fb36e5893961f82992cf676381707253e0bf93eb1662/GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c", size = 214149 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/bd/cc3a402a6439c15c3d4294333e13042b915bbeab54edc457c723931fed3f/GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff", size = 207337 }, +] + +[[package]] +name = "giturlparse" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/5f/543dc54c82842376139748226e5aa61eb95093992f63dd495af9c6b4f076/giturlparse-0.12.0.tar.gz", hash = "sha256:c0fff7c21acc435491b1779566e038757a205c1ffdcb47e4f81ea52ad8c3859a", size = 14907 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/94/c6ff3388b8e3225a014e55aed957188639aa0966443e0408d38f0c9614a7/giturlparse-0.12.0-py2.py3-none-any.whl", hash = "sha256:412b74f2855f1da2fefa89fd8dde62df48476077a72fc19b62039554d27360eb", size = 15752 }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.66.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/a7/8e9cccdb1c49870de6faea2a2764fa23f627dd290633103540209f03524c/googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c", size = 114376 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed", size = 221682 }, +] + +[[package]] +name = "graphistry" +version = "0.33.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "palettable" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "squarify" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/61/44e930197b1c46ab8d36721993845095923b3198b2907de55628298a2b40/graphistry-0.33.9.tar.gz", hash = "sha256:40c095ae0ad4143d686b3802495c643a3decb4d663e0038aa6645c06c95d4d0b", size = 276060 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/ba/5b5e6f4b2caa8efc2b851f4b4ff64e90203d5756cca123136ec495d2ee67/graphistry-0.33.9-py3-none-any.whl", hash = "sha256:6952d96a0dfd77d7b7498f93a4986ea2189cb62553d4a27df18f02106ea4db99", size = 250452 }, +] + +[[package]] +name = "greenlet" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/ff/df5fede753cc10f6a5be0931204ea30c35fa2f2ea7a35b25bdaf4fe40e46/greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467", size = 186022 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/62/1c2665558618553c42922ed47a4e6d6527e2fa3516a8256c2f431c5d0441/greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70", size = 272479 }, + { url = "https://files.pythonhosted.org/packages/76/9d/421e2d5f07285b6e4e3a676b016ca781f63cfe4a0cd8eaecf3fd6f7a71ae/greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159", size = 640404 }, + { url = "https://files.pythonhosted.org/packages/e5/de/6e05f5c59262a584e502dd3d261bbdd2c97ab5416cc9c0b91ea38932a901/greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e", size = 652813 }, + { url = "https://files.pythonhosted.org/packages/49/93/d5f93c84241acdea15a8fd329362c2c71c79e1a507c3f142a5d67ea435ae/greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1", size = 648517 }, + { url = "https://files.pythonhosted.org/packages/15/85/72f77fc02d00470c86a5c982b8daafdf65d38aefbbe441cebff3bf7037fc/greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383", size = 647831 }, + { url = "https://files.pythonhosted.org/packages/f7/4b/1c9695aa24f808e156c8f4813f685d975ca73c000c2a5056c514c64980f6/greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a", size = 602413 }, + { url = "https://files.pythonhosted.org/packages/76/70/ad6e5b31ef330f03b12559d19fda2606a522d3849cde46b24f223d6d1619/greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511", size = 1129619 }, + { url = "https://files.pythonhosted.org/packages/f4/fb/201e1b932e584066e0f0658b538e73c459b34d44b4bd4034f682423bc801/greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395", size = 1155198 }, + { url = "https://files.pythonhosted.org/packages/12/da/b9ed5e310bb8b89661b80cbcd4db5a067903bbcd7fc854923f5ebb4144f0/greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39", size = 298930 }, + { url = "https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d", size = 274260 }, + { url = "https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79", size = 649064 }, + { url = "https://files.pythonhosted.org/packages/51/41/467b12a8c7c1303d20abcca145db2be4e6cd50a951fa30af48b6ec607581/greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa", size = 663420 }, + { url = "https://files.pythonhosted.org/packages/27/8f/2a93cd9b1e7107d5c7b3b7816eeadcac2ebcaf6d6513df9abaf0334777f6/greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441", size = 658035 }, + { url = "https://files.pythonhosted.org/packages/57/5c/7c6f50cb12be092e1dccb2599be5a942c3416dbcfb76efcf54b3f8be4d8d/greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36", size = 660105 }, + { url = "https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9", size = 613077 }, + { url = "https://files.pythonhosted.org/packages/19/c5/36384a06f748044d06bdd8776e231fadf92fc896bd12cb1c9f5a1bda9578/greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0", size = 1135975 }, + { url = "https://files.pythonhosted.org/packages/38/f9/c0a0eb61bdf808d23266ecf1d63309f0e1471f284300ce6dac0ae1231881/greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942", size = 1163955 }, + { url = "https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01", size = 299655 }, + { url = "https://files.pythonhosted.org/packages/f3/57/0db4940cd7bb461365ca8d6fd53e68254c9dbbcc2b452e69d0d41f10a85e/greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1", size = 272990 }, + { url = "https://files.pythonhosted.org/packages/1c/ec/423d113c9f74e5e402e175b157203e9102feeb7088cee844d735b28ef963/greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff", size = 649175 }, + { url = "https://files.pythonhosted.org/packages/a9/46/ddbd2db9ff209186b7b7c621d1432e2f21714adc988703dbdd0e65155c77/greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a", size = 663425 }, + { url = "https://files.pythonhosted.org/packages/bc/f9/9c82d6b2b04aa37e38e74f0c429aece5eeb02bab6e3b98e7db89b23d94c6/greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e", size = 657736 }, + { url = "https://files.pythonhosted.org/packages/d9/42/b87bc2a81e3a62c3de2b0d550bf91a86939442b7ff85abb94eec3fc0e6aa/greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4", size = 660347 }, + { url = "https://files.pythonhosted.org/packages/37/fa/71599c3fd06336cdc3eac52e6871cfebab4d9d70674a9a9e7a482c318e99/greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e", size = 615583 }, + { url = "https://files.pythonhosted.org/packages/4e/96/e9ef85de031703ee7a4483489b40cf307f93c1824a02e903106f2ea315fe/greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1", size = 1133039 }, + { url = "https://files.pythonhosted.org/packages/87/76/b2b6362accd69f2d1889db61a18c94bc743e961e3cab344c2effaa4b4a25/greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c", size = 1160716 }, + { url = "https://files.pythonhosted.org/packages/1f/1b/54336d876186920e185066d8c3024ad55f21d7cc3683c856127ddb7b13ce/greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761", size = 299490 }, + { url = "https://files.pythonhosted.org/packages/5f/17/bea55bf36990e1638a2af5ba10c1640273ef20f627962cf97107f1e5d637/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011", size = 643731 }, + { url = "https://files.pythonhosted.org/packages/78/d2/aa3d2157f9ab742a08e0fd8f77d4699f37c22adfbfeb0c610a186b5f75e0/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13", size = 649304 }, + { url = "https://files.pythonhosted.org/packages/f1/8e/d0aeffe69e53ccff5a28fa86f07ad1d2d2d6537a9506229431a2a02e2f15/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475", size = 646537 }, + { url = "https://files.pythonhosted.org/packages/05/79/e15408220bbb989469c8871062c97c6c9136770657ba779711b90870d867/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b", size = 642506 }, + { url = "https://files.pythonhosted.org/packages/18/87/470e01a940307796f1d25f8167b551a968540fbe0551c0ebb853cb527dd6/greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822", size = 602753 }, + { url = "https://files.pythonhosted.org/packages/e2/72/576815ba674eddc3c25028238f74d7b8068902b3968cbe456771b166455e/greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01", size = 1122731 }, + { url = "https://files.pythonhosted.org/packages/ac/38/08cc303ddddc4b3d7c628c3039a61a3aae36c241ed01393d00c2fd663473/greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6", size = 1142112 }, +] + +[[package]] +name = "groq" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/0f/8e58cd93839ce90df1dad812a5c793d9dcd511fe1eae26552264549d7d2d/groq-0.8.0.tar.gz", hash = "sha256:37ceb2f706bd516d0bfcac8e89048a24b375172987a0d6bd9efb521c54f6deff", size = 69423 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/e4/835f485c6b3268fbc52687481dd574d785b6500384b150196686d78f4cdf/groq-0.8.0-py3-none-any.whl", hash = "sha256:f5e4e892d45001241a930db451e633ca1f0007e3f749deaa5d7360062fcd61e3", size = 105391 }, +] + +[[package]] +name = "grpcio" +version = "1.60.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6d/919fd5886882c066122e69fbd938c1df2dc0aa22ab8de3e047c6aff5ac58/grpcio-1.60.1.tar.gz", hash = "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", size = 24771788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/4f/2d27f7cc911675b717cd5b0e948e38b35a707a9d669b7a5691b9cb4a1311/grpcio-1.60.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", size = 100133807 }, + { url = "https://files.pythonhosted.org/packages/ec/d5/c3ddb54b39ce43d21428407eb26cf9a21fd43de5e26d9733b1f173d57475/grpcio-1.60.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", size = 9649624 }, + { url = "https://files.pythonhosted.org/packages/f3/2c/ce6dbceff6c6009dedc53da3e5b0dfb6508fed730e9f56facd29d31a907d/grpcio-1.60.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", size = 5120377 }, + { url = "https://files.pythonhosted.org/packages/11/e2/fa35dc459bf6728cd427ff6b343fdea8547275a6259fd99db235b6b9e6d4/grpcio-1.60.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03", size = 5625775 }, + { url = "https://files.pythonhosted.org/packages/b8/c7/44201b27a9be0af7f997881904ce878a09a7fe95fc2e273d2f92b7b5b373/grpcio-1.60.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7", size = 5354820 }, + { url = "https://files.pythonhosted.org/packages/fa/6a/29a156cbda536a7a0b78d39bbe8d832c296d0ef751e14f8c335af4c6e921/grpcio-1.60.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2", size = 5908056 }, + { url = "https://files.pythonhosted.org/packages/1c/a3/7e9770256d19190635af04203597f656b17e67e292781fc176e96b416274/grpcio-1.60.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce", size = 5604829 }, + { url = "https://files.pythonhosted.org/packages/5f/dd/a2d8bdac8b5c5f9b3b15738e69631dddf7d3372c978a983ee51d56bc3a9f/grpcio-1.60.1-cp311-cp311-win32.whl", hash = "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd", size = 3127921 }, + { url = "https://files.pythonhosted.org/packages/7b/3e/a22e7a0ec6be5454dc540063ac5d0843eb72a4641a0892b54b16b1438c0a/grpcio-1.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c", size = 3699377 }, + { url = "https://files.pythonhosted.org/packages/b6/6b/541f0e68a7682c7c5c86bba148a032f5e70907a9b2f7b11bbc79f796e949/grpcio-1.60.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9", size = 100617927 }, + { url = "https://files.pythonhosted.org/packages/b8/c8/7d23930a22ec2596cc74f047e2a0338f6fdae1fa8d452d1555acd549614d/grpcio-1.60.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858", size = 9612000 }, + { url = "https://files.pythonhosted.org/packages/96/03/af685a4d1b4ee8542ff5e1c7725b78fef0bc823342429142b3c19a81b6ef/grpcio-1.60.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6", size = 5061792 }, + { url = "https://files.pythonhosted.org/packages/66/c1/dc47898cd1e45a3d05e1a0a9a33366db12273c39ba1dc7663dc301b23cd2/grpcio-1.60.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073", size = 5566287 }, + { url = "https://files.pythonhosted.org/packages/9b/24/9e942669f53346d4bf0849ebceaa9257fdd21e1694fade8470b6e0dd2ff8/grpcio-1.60.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8", size = 5300197 }, + { url = "https://files.pythonhosted.org/packages/11/4f/56d59c235ce4ebcc0100578bba30c7c9d40607293cf6081ba387211bcce3/grpcio-1.60.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe", size = 5852834 }, + { url = "https://files.pythonhosted.org/packages/e2/a7/d6ee96361a69998acb45de9dbee7c5e8d94b934922ed60047fde96a96bd4/grpcio-1.60.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05", size = 5555225 }, + { url = "https://files.pythonhosted.org/packages/08/61/02954fa2051ad930c9f332b360726292923323310c673c78f3764f02df3a/grpcio-1.60.1-cp312-cp312-win32.whl", hash = "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21", size = 3111253 }, + { url = "https://files.pythonhosted.org/packages/b9/56/4a8610864aa634ef89af3d7059e2bb0c0991e3d4b534467a7befc11c44c8/grpcio-1.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f", size = 3691785 }, +] + +[[package]] +name = "grpcio-health-checking" +version = "1.60.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/11/dca3c1dd36446c18b73bc46cff1bc0ed89ed4dd16f6c73cf9cbc2aa291ec/grpcio-health-checking-1.60.1.tar.gz", hash = "sha256:7c2e48ce9d5bdb19ad57b7abe3438d47ebdead507866939140720b3e28c625b3", size = 16320 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/63/5734148a1da3022c4c9479d36a2d6567a93b3a5e5ecee821015789a0f5e7/grpcio_health_checking-1.60.1-py3-none-any.whl", hash = "sha256:96dc89800cabdc943a5734e037fadea5f94c31c76e043638e448c1865b34d894", size = 18544 }, +] + +[[package]] +name = "grpcio-tools" +version = "1.60.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio" }, + { name = "protobuf" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/7f/30d9ef28cbe302c622bf289d194689cd571ea4df0b492d46b95e503aabb1/grpcio-tools-1.60.1.tar.gz", hash = "sha256:da08224ab8675c6d464b988bd8ca02cccd2bf0275bceefe8f6219bfd4a4f5e85", size = 4611737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/77/6414c9fec523fbc13c227b814212f1931db3bcc90d0444e25f20b4083b82/grpcio_tools-1.60.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:284749d20fb22418f17d3d351b9eb838caf4a0393a9cb02c36e5c32fa4bbe9db", size = 63937620 }, + { url = "https://files.pythonhosted.org/packages/71/b4/5cdbd524494d0c17adf11ebb17deca82cc358499c2bf70c20044d8fcd099/grpcio_tools-1.60.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:b1041377cf32ee2338284ee26e6b9c10f9ea7728092376b19803dcb9b91d510d", size = 5147734 }, + { url = "https://files.pythonhosted.org/packages/4c/bf/360dbe8de7856b36d1960afb6d8906f874c36df32fec76fe0e4d80043fba/grpcio_tools-1.60.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e529cd3d4109a6f4a3f7bdaca68946eb33734e2d7ffe861785a0586abe99ee67", size = 2708356 }, + { url = "https://files.pythonhosted.org/packages/4b/df/859282237663200ba11d96713fa9812066cc33b681806588ace26031135e/grpcio_tools-1.60.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31294b534f25f02ead204e58dcbe0e5437a95a1a6f276bb9378905595b02ff6d", size = 3060317 }, + { url = "https://files.pythonhosted.org/packages/c5/dd/3634438a1fe9fc77a50d112af2a47b101b6462d35578a03d16ae9db3e833/grpcio_tools-1.60.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fb6f4d2df0388c35c2804ba170f511238a681b679ead013bfe5e39d0ea9cf48", size = 2795696 }, + { url = "https://files.pythonhosted.org/packages/71/23/c4c2e3c03a434ef2ed585f6ecd97b0d13941d6001add7a2997640979f72c/grpcio_tools-1.60.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:40cd8268a675269ce59c4fa50877597ec638bb1099c52237bb726c8ac9791868", size = 3674641 }, + { url = "https://files.pythonhosted.org/packages/ad/35/93d7ca0c7cb6ed48ee6eaa11c7683c00c14c595959de54dc91230f6409a4/grpcio_tools-1.60.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:985ac476da365267a2367ab20060f9096fbfc2e190fb02dd394f9ec05edf03ca", size = 3282607 }, + { url = "https://files.pythonhosted.org/packages/07/30/696d22a9f39b33f006209094c83d64d1c3c0b967c4810666ef0b24df87b9/grpcio_tools-1.60.1-cp311-cp311-win32.whl", hash = "sha256:bd85f6c368b93ae45edf8568473053cb1cc075ef3489efb18f9832d4ecce062f", size = 922154 }, + { url = "https://files.pythonhosted.org/packages/8c/1f/ffd7645afeaad43b141c80f997bba8509721a2bc674dfc0d710e63fb4a1a/grpcio_tools-1.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:c20e752ff5057758845f4e5c7a298739bfba291f373ed18ea9c7c7acbe69e8ab", size = 1067994 }, + { url = "https://files.pythonhosted.org/packages/df/91/41c27e0d96915e817717eebd570e012b40f17ebc0a42599ee4a8be8937c2/grpcio_tools-1.60.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:aafc94616c5f89c891d859057b194a153c451f9921053454e9d7d4cbf79047eb", size = 63964333 }, + { url = "https://files.pythonhosted.org/packages/75/b8/26d6115ecb12b831390cf04c742648b1b9cd9d3638c9cb70641f8661c016/grpcio_tools-1.60.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:9bba347000f57dae8aea79c0d76ef7d72895597524d30d0170c7d1974a3a03f3", size = 5147841 }, + { url = "https://files.pythonhosted.org/packages/6b/2b/4ffc8c23306d6f50a76bac8427b86dfbcb9d0b232af58fac1aada9b791aa/grpcio_tools-1.60.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:1e96a532d38411f0543fe1903ff522f7142a9901afb0ed94de58d79caf1905be", size = 2709524 }, + { url = "https://files.pythonhosted.org/packages/38/62/9c7a738913f3b753455a49325cb3196f5d0d8870b72a921b2259eb7600c0/grpcio_tools-1.60.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ea6e397d87f458bb2c387a4a6e1b65df74ce5b5194a1f16850c38309012e981", size = 3061064 }, + { url = "https://files.pythonhosted.org/packages/3f/52/f0c4e1561c9361a37daf0f5c2f6bdc9a340bea66422313f797abc0492820/grpcio_tools-1.60.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aeecd5b8faa2aab67e6c8b8a57e888c00ce70d39f331ede0a21312e92def1a6", size = 2797029 }, + { url = "https://files.pythonhosted.org/packages/c2/aa/8006a428a44453b95b484e89cf609ce5fc649610b83640fb00a538a54559/grpcio_tools-1.60.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d2c26ce5f774c98bd2d3d8d1703048394018b55d297ebdb41ed2ba35b9a34f68", size = 3674986 }, + { url = "https://files.pythonhosted.org/packages/a4/96/132094e21606bb3bec8dcb5e1c947cb09dd5f99da065ab9ccdcb9b829fd3/grpcio_tools-1.60.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:214281cdafb7acfdcde848eca2de7c888a6e2b5cd25ab579712b965ea09a9cd4", size = 3283144 }, + { url = "https://files.pythonhosted.org/packages/d9/e7/d61a2052dc3b0a58c50d73523b9ab268a7aff8a57bf3d7006657111d9741/grpcio_tools-1.60.1-cp312-cp312-win32.whl", hash = "sha256:8c4b917aa4fcdc77990773063f0f14540aab8d4a8bf6c862b964a45d891a31d2", size = 922615 }, + { url = "https://files.pythonhosted.org/packages/7e/ab/72afa896d8314e67cefc7fb4501329e7af0f00cbcd401b3d15f183f5aece/grpcio_tools-1.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:0aa34c7c21cff2177a4096b2b0d51dfbc9f8a41f929847a434e89b352c5a215d", size = 1068419 }, +] + +[[package]] +name = "gunicorn" +version = "20.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/5b/0d1f0296485a6af03366604142ea8f19f0833894db3512a40ed07b2a56dd/gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8", size = 370601 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/dd/5b190393e6066286773a67dfcc2f9492058e9b57c4867a95f1ba5caf0a83/gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", size = 79531 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "h2" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hpack" }, + { name = "hyperframe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/32/fec683ddd10629ea4ea46d206752a95a2d8a48c22521edd70b142488efe1/h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb", size = 2145593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e5/db6d438da759efbb488c4f3fbdab7764492ff3c3f953132efa6b9f0e9e53/h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d", size = 57488 }, +] + +[[package]] +name = "hexbytes" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/51/06836a542b773bfc60ab871fa08d4a7963e7df6754ca57169e2654287cc1/hexbytes-1.2.1.tar.gz", hash = "sha256:515f00dddf31053db4d0d7636dd16061c1d896c3109b8e751005db4ca46bcca7", size = 7722 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/c6/20f25ea73e4ceffb3eb4e38347f2992cb25e5ff6eb644d52e753a7a72f57/hexbytes-1.2.1-py3-none-any.whl", hash = "sha256:e64890b203a31f4a23ef11470ecfcca565beaee9198df623047df322b757471a", size = 5160 }, +] + +[[package]] +name = "hpack" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/9b/fda93fb4d957db19b0f6b370e79d586b3e8528b20252c729c476a2c02954/hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095", size = 49117 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/34/e8b383f35b77c402d28563d2b8f83159319b509bc5f760b15d60b0abf165/hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c", size = 32611 }, +] + +[[package]] +name = "html5lib" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 }, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, +] + +[[package]] +name = "httpx" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/3da5bdf4408b8b2800061c339f240c1802f2e82d55e50bd39c5a881f47f0/httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5", size = 126413 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/7b/ddacf6dcebb42466abd03f368782142baa82e08fc0c1f8eaa05b4bae87d5/httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5", size = 75590 }, +] + +[package.optional-dependencies] +http2 = [ + { name = "h2" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 }, +] + +[[package]] +name = "huggingface-hub" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/c6/e3709b61de8e7832dbe19f0d9637e81356cede733d99359fbce125423774/huggingface_hub-0.27.0.tar.gz", hash = "sha256:902cce1a1be5739f5589e560198a65a8edcfd3b830b1666f36e4b961f0454fac", size = 379286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/8c/fbdc0a88a622d9fa54e132d7bf3ee03ec602758658a2db5b339a65be2cfe/huggingface_hub-0.27.0-py3-none-any.whl", hash = "sha256:8f2e834517f1f1ddf1ecc716f91b120d7333011b7485f665a9a412eacb1a2a81", size = 450537 }, +] + +[[package]] +name = "humanize" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/40/64a912b9330786df25e58127194d4a5a7441f818b400b155e748a270f924/humanize-4.11.0.tar.gz", hash = "sha256:e66f36020a2d5a974c504bd2555cf770621dbdbb6d82f94a6857c0b1ea2608be", size = 80374 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/75/4bc3e242ad13f2e6c12e0b0401ab2c5e5c6f0d7da37ec69bc808e24e0ccb/humanize-4.11.0-py3-none-any.whl", hash = "sha256:b53caaec8532bcb2fff70c8826f904c35943f8cecaca29d272d9df38092736c0", size = 128055 }, +] + +[[package]] +name = "hyperframe" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/2a/4747bff0a17f7281abe73e955d60d80aae537a5d203f417fa1c2e7578ebb/hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914", size = 25008 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/de/85a784bcc4a3779d1753a7ec2dee5de90e18c7bcf402e71b51fcf150b129/hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15", size = 12389 }, +] + +[[package]] +name = "identify" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/5f/05f0d167be94585d502b4adf8c7af31f1dc0b1c7e14f9938a88fdbbcf4a7/identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02", size = 99179 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/f5/09644a3ad803fae9eca8efa17e1f2aef380c7f0b02f7ec4e8d446e51d64a/identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd", size = 99049 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "importlib-metadata" +version = "8.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/bd/fa8ce65b0a7d4b6d143ec23b0f5fd3f7ab80121078c465bc02baeaab22dc/importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5", size = 54320 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/14/362d31bf1076b21e1bcdcb0dc61944822ff263937b804a79231df2774d28/importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1", size = 26269 }, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "instructor" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "docstring-parser" }, + { name = "jiter" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "rich" }, + { name = "tenacity" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/31/f7499f60a513411a1e8c47c530987d1d3f2dbf9da0d621e52a100a80eebb/instructor-1.5.2.tar.gz", hash = "sha256:fdd5ccbca21b4c558a24e9ba12c84afd907e65153a39d035f47c25800011a977", size = 49521 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/94/5f96c1d87ba732ba6b2a9751314ddb69bfcd8d05ed0f7e93ee17fd4df068/instructor-1.5.2-py3-none-any.whl", hash = "sha256:da25abbf1ab792fb094992f1d9ce593e26fe458cb1f9a8e7ebf9d68f3f2c757a", size = 61494 }, +] + +[[package]] +name = "isort" +version = "5.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/f9/c1eb8635a24e87ade2efce21e3ce8cd6b8630bb685ddc9cdaca1349b2eb5/isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", size = 175303 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310 }, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/55/39036716d19cab0747a5020fc7e907f362fbf48c984b14e62127f7e68e5d/jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", size = 240245 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d", size = 133271 }, +] + +[[package]] +name = "jiter" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/1a/aa64be757afc614484b370a4d9fc1747dc9237b37ce464f7f9d9ca2a3d38/jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a", size = 158300 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5f/3ac960ed598726aae46edea916e6df4df7ff6fe084bc60774b95cf3154e6/jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553", size = 284131 }, + { url = "https://files.pythonhosted.org/packages/03/eb/2308fa5f5c14c97c4c7720fef9465f1fa0771826cddb4eec9866bdd88846/jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3", size = 299310 }, + { url = "https://files.pythonhosted.org/packages/3c/f6/dba34ca10b44715fa5302b8e8d2113f72eb00a9297ddf3fa0ae4fd22d1d1/jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6", size = 332282 }, + { url = "https://files.pythonhosted.org/packages/69/f7/64e0a7439790ec47f7681adb3871c9d9c45fff771102490bbee5e92c00b7/jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4", size = 342370 }, + { url = "https://files.pythonhosted.org/packages/55/31/1efbfff2ae8e4d919144c53db19b828049ad0622a670be3bbea94a86282c/jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9", size = 363591 }, + { url = "https://files.pythonhosted.org/packages/30/c3/7ab2ca2276426a7398c6dfb651e38dbc81954c79a3bfbc36c514d8599499/jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614", size = 378551 }, + { url = "https://files.pythonhosted.org/packages/47/e7/5d88031cd743c62199b125181a591b1671df3ff2f6e102df85c58d8f7d31/jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e", size = 319152 }, + { url = "https://files.pythonhosted.org/packages/4c/2d/09ea58e1adca9f0359f3d41ef44a1a18e59518d7c43a21f4ece9e72e28c0/jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06", size = 357377 }, + { url = "https://files.pythonhosted.org/packages/7d/2f/83ff1058cb56fc3ff73e0d3c6440703ddc9cdb7f759b00cfbde8228fc435/jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403", size = 511091 }, + { url = "https://files.pythonhosted.org/packages/ae/c9/4f85f97c9894382ab457382337aea0012711baaa17f2ed55c0ff25f3668a/jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646", size = 492948 }, + { url = "https://files.pythonhosted.org/packages/4d/f2/2e987e0eb465e064c5f52c2f29c8d955452e3b316746e326269263bfb1b7/jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb", size = 195183 }, + { url = "https://files.pythonhosted.org/packages/ab/59/05d1c3203c349b37c4dd28b02b9b4e5915a7bcbd9319173b4548a67d2e93/jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae", size = 191032 }, + { url = "https://files.pythonhosted.org/packages/aa/bd/c3950e2c478161e131bed8cb67c36aed418190e2a961a1c981e69954e54b/jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a", size = 283511 }, + { url = "https://files.pythonhosted.org/packages/80/1c/8ce58d8c37a589eeaaa5d07d131fd31043886f5e77ab50c00a66d869a361/jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df", size = 296974 }, + { url = "https://files.pythonhosted.org/packages/4d/b8/6faeff9eed8952bed93a77ea1cffae7b946795b88eafd1a60e87a67b09e0/jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248", size = 331897 }, + { url = "https://files.pythonhosted.org/packages/4f/54/1d9a2209b46d39ce6f0cef3ad87c462f9c50312ab84585e6bd5541292b35/jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544", size = 342962 }, + { url = "https://files.pythonhosted.org/packages/2a/de/90360be7fc54b2b4c2dfe79eb4ed1f659fce9c96682e6a0be4bbe71371f7/jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba", size = 363844 }, + { url = "https://files.pythonhosted.org/packages/ba/ad/ef32b173191b7a53ea8a6757b80723cba321f8469834825e8c71c96bde17/jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f", size = 378709 }, + { url = "https://files.pythonhosted.org/packages/07/de/353ce53743c0defbbbd652e89c106a97dbbac4eb42c95920b74b5056b93a/jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e", size = 319038 }, + { url = "https://files.pythonhosted.org/packages/3f/92/42d47310bf9530b9dece9e2d7c6d51cf419af5586ededaf5e66622d160e2/jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a", size = 357763 }, + { url = "https://files.pythonhosted.org/packages/bd/8c/2bb76a9a84474d48fdd133d3445db8a4413da4e87c23879d917e000a9d87/jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e", size = 511031 }, + { url = "https://files.pythonhosted.org/packages/33/4f/9f23d79c0795e0a8e56e7988e8785c2dcda27e0ed37977256d50c77c6a19/jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338", size = 493042 }, + { url = "https://files.pythonhosted.org/packages/df/67/8a4f975aa834b8aecdb6b131422390173928fd47f42f269dcc32034ab432/jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4", size = 195405 }, + { url = "https://files.pythonhosted.org/packages/15/81/296b1e25c43db67848728cdab34ac3eb5c5cbb4955ceb3f51ae60d4a5e3d/jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5", size = 189720 }, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256 }, +] + +[[package]] +name = "joblib" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpointer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898 }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105 }, +] + +[[package]] +name = "jsonpath-python" +version = "1.0.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/49/e582e50b0c54c1b47e714241c4a4767bf28758bf90212248aea8e1ce8516/jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666", size = 18121 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/8a/d63959f4eff03893a00e6e63592e3a9f15b9266ed8e0275ab77f8c7dbc94/jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575", size = 7552 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, + { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, + { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, + { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260 }, + { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589 }, + { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080 }, + { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049 }, + { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376 }, + { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231 }, + { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634 }, + { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024 }, + { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484 }, + { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078 }, + { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645 }, + { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022 }, + { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536 }, + { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, + { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, + { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, + { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, + { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, + { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, +] + +[[package]] +name = "lancedb" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cachetools" }, + { name = "deprecation" }, + { name = "overrides" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pylance" }, + { name = "requests" }, + { name = "tqdm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/b3/c0da4a07137781b35f70d8630baf656a30e5b05be6cbe5dacfe686c69229/lancedb-0.15.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:3eacc9c6766594874a7d54e822550c7991d64b14571251f1e4b43985cc4f3cdb", size = 23926022 }, + { url = "https://files.pythonhosted.org/packages/95/cc/8333fd74e82a4a088b522e76dc68f225054b3527d885e01c8ef1806dab3f/lancedb-0.15.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:48c28571f79805e11a3bca09486fd1c8d6c3f7762f7692cca1c5e0cdea6bfa20", size = 22412308 }, + { url = "https://files.pythonhosted.org/packages/85/ae/588f4587f2096e1de27d255c0e5557326e71c8e26bc19e516bb8f592785d/lancedb-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e349a1671943b75a536d2589b5a12f685c129149b0cad266e12555f9501f8ccd", size = 27653096 }, + { url = "https://files.pythonhosted.org/packages/76/8d/fb7148ab42227aff5fc72d5f278dadf1c71bda923a44896aa8c9e2e79b48/lancedb-0.15.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c567866b08222457e1aca51df9abeb871aad8fed0db58c004365629c05f8ecbb", size = 25701158 }, + { url = "https://files.pythonhosted.org/packages/e3/a8/67a8dc6fd7a57bde6b9f75b10368805db46b109adc7d634d7ce45bc655f3/lancedb-0.15.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:223cd77fa84a1317301ad4771de58ac5685d58cee03f0a20ba4bc95517b5c79f", size = 27123388 }, + { url = "https://files.pythonhosted.org/packages/70/cc/beb57ff12a5f8f37f8d469fa2399ac76b2909c76f38e3d61cd07f51c288d/lancedb-0.15.0-cp38-abi3-win_amd64.whl", hash = "sha256:66d251f22709c72f819aace9e665127f1040845d88b25c1f088c4beb36087f7e", size = 24838652 }, +] + +[[package]] +name = "langchain" +version = "0.3.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "langchain-core" }, + { name = "langchain-text-splitters" }, + { name = "langsmith" }, + { name = "numpy" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/6d/df5afcab81750ee1f9895ae33dd2f59f8f7b8a826611e2d73a9f1909d6ce/langchain-0.3.11.tar.gz", hash = "sha256:17868ea3f0cf5a46b4b88bf1961c4a12d32ea0778930e7d2eb5103e0287ff478", size = 420290 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/4a/26620afcff880f6058756786d9b858d348ac29c815e44f57b6c2c07bf86d/langchain-0.3.11-py3-none-any.whl", hash = "sha256:6655feded1f7569e5a4bd11e38de0a26c7c86646c0dea49afccceba42df60ad7", size = 1009036 }, +] + +[[package]] +name = "langchain-community" +version = "0.3.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "dataclasses-json" }, + { name = "httpx-sse" }, + { name = "langchain" }, + { name = "langchain-core" }, + { name = "langsmith" }, + { name = "numpy" }, + { name = "pydantic-settings" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/55/cd4076894cce736efc48d787be68275f9ffc736449403cf4c1b11347dae3/langchain_community-0.3.11.tar.gz", hash = "sha256:31a96de1578f6037cd49acf287227d54e88e81f82e3e49cb4d90bfe05b1cdc32", size = 1681136 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/c2/aeb43e7f879d429df40f742228dba747d790655f3eb0e2082b7d9854f0fd/langchain_community-0.3.11-py3-none-any.whl", hash = "sha256:c67091dc7652f44161bbea915c03a296f3c1ef2a8dfbcb475cdf23a1deb9790e", size = 2459045 }, +] + +[[package]] +name = "langchain-core" +version = "0.3.27" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpatch" }, + { name = "langsmith" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "tenacity" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/2c/3ddc9d0d94dd7fc4ed8f71fda8b2cb6f3189e486ee224cb3b37fc7aba4bb/langchain_core-0.3.27.tar.gz", hash = "sha256:3d71835c4c630db03a19757565046029e89ee96a4b06788892599d49bb3fc58a", size = 330710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/73/5d876d7c24cf82ff1d2c297c7da6ded4d857f7846763abe1bc72f7563e8e/langchain_core-0.3.27-py3-none-any.whl", hash = "sha256:5db42cd73f4f2d5d2550403a4c8b7dec2cd56f1501fe207d009b5b9632a5ca02", size = 411485 }, +] + +[[package]] +name = "langchain-openai" +version = "0.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "openai" }, + { name = "tiktoken" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/7a/2cf68955181b9571d7768dfc4229f54f21977206fe6d7a0eb39fc48be649/langchain_openai-0.2.5.tar.gz", hash = "sha256:55b98711a880474ec363267bf6cd0e2727dc00e8433731318d063a2184582c28", size = 43165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/74/f0c5d1b00f9c63246c8106b795ea792bb7ac61e92db9101716f05cfc42c7/langchain_openai-0.2.5-py3-none-any.whl", hash = "sha256:745fd9d51a5a3a9cb8839d41f3786ab38dfc539e47c713a806cbca32f3d0875c", size = 50368 }, +] + +[[package]] +name = "langchain-text-splitters" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/63/0f7dae88d87e924d819e6a6375043499e3bc9931e306edd48b396abb4e42/langchain_text_splitters-0.3.2.tar.gz", hash = "sha256:81e6515d9901d6dd8e35fb31ccd4f30f76d44b771890c789dc835ef9f16204df", size = 20229 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/c6/5ba25c8bad647e92a92b3066177ab10d78efbd16c0b9919948cdcd18b027/langchain_text_splitters-0.3.2-py3-none-any.whl", hash = "sha256:0db28c53f41d1bc024cdb3b1646741f6d46d5371e90f31e7e7c9fbe75d01c726", size = 25564 }, +] + +[[package]] +name = "langdetect" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", size = 981474 } + +[[package]] +name = "langfuse" +version = "2.57.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "backoff" }, + { name = "httpx" }, + { name = "idna" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/50/22fd15606b6ac469d30f355693578f725dca1eb17f053301e62c4941e2ec/langfuse-2.57.0.tar.gz", hash = "sha256:8aa0b59af12c46417d1c9993f17921a984ec4688c0cd50004ef18647c9c5ae77", size = 142786 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/9c/1897e11cabd3f11b1e5cd087cb07cebf41fe323f784f0a7011099fd3eba3/langfuse-2.57.0-py3-none-any.whl", hash = "sha256:cb14b2393b73e5548ddd7e5cf2967210e24706e10b2699a727ece9077e69c990", size = 254784 }, +] + +[[package]] +name = "langsmith" +version = "0.1.139" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "orjson" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "requests-toolbelt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/6d/15ab5402bdca9c7782049bbcebde643047450fdaa3c19e36839f72843f64/langsmith-0.1.139.tar.gz", hash = "sha256:2f9e4d32fef3ad7ef42c8506448cce3a31ad6b78bb4f3310db04ddaa1e9d744d", size = 291595 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/bf/5f94d4102c9497710dd0c7939e0a855d9c2d1008451a61651a5a2d28b472/langsmith-0.1.139-py3-none-any.whl", hash = "sha256:2a4a541bfbd0a9727255df28a60048c85bc8c4c6a276975923785c3fd82dc879", size = 302202 }, +] + +[[package]] +name = "litellm" +version = "1.49.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "click" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "requests" }, + { name = "tiktoken" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/84/edd715fd552c72859fe768412685952993b6238592040d5361850108ad4a/litellm-1.49.1.tar.gz", hash = "sha256:f51450ad823c8bdf057017009ae8bcce1a2810690b2f0d9dcdaff04ddc68209a", size = 6068806 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/69/4fbc6734c7f7fb497b62c27b4ffa747a72dbca6a15b5c18bf570e3808007/litellm-1.49.1-py3-none-any.whl", hash = "sha256:2ba6689fe4ea3b0d69f56f2843caff6422497489e6252943b13ef1463f016728", size = 6282095 }, +] + +[[package]] +name = "llama-index-core" +version = "0.11.23" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "dataclasses-json" }, + { name = "deprecated" }, + { name = "dirtyjson" }, + { name = "filetype" }, + { name = "fsspec" }, + { name = "httpx" }, + { name = "nest-asyncio" }, + { name = "networkx" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy", extra = ["asyncio"] }, + { name = "tenacity" }, + { name = "tiktoken" }, + { name = "tqdm" }, + { name = "typing-extensions" }, + { name = "typing-inspect" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/4f/496d43c467ca2497f9c7632ac8ebd15049beb05115e9f0546de3e19ddddd/llama_index_core-0.11.23.tar.gz", hash = "sha256:e150859696a0eae169fe19323f46e9a31af2c12c3182012e4d0353ea8eb06d24", size = 1325843 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/67/96ed984ebf472fe085bd5d2847c4f284cfe416805c1d6e705682a559c9fc/llama_index_core-0.11.23-py3-none-any.whl", hash = "sha256:25a0cb4a055bfb348655ca4acd1b475529bd8537a7b81874ef14ed13f56e06c1", size = 1576555 }, +] + +[[package]] +name = "lxml" +version = "5.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, + { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, + { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, + { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, + { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, + { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, + { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, + { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, + { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, + { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, + { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, + { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, + { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, + { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, + { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, + { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, + { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, + { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, + { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, + { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, + { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, + { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, + { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, + { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, + { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, + { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, + { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, + { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, + { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, + { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, + { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, + { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, + { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, + { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, + { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, + { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, + { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, + { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, + { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, + { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, + { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, + { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, + { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, + { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, + { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, + { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, + { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, + { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, + { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, +] + +[[package]] +name = "makefun" +version = "1.15.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/00/62966769824620717a3c2d76b1d442489648398b599bdcd490af13bff101/makefun-1.15.6.tar.gz", hash = "sha256:26bc63442a6182fb75efed8b51741dd2d1db2f176bec8c64e20a586256b8f149", size = 72583 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/a1/3e145759e776c8866488a71270c399bf7c4e554551ac2e247aa0a18a0596/makefun-1.15.6-py2.py3-none-any.whl", hash = "sha256:e69b870f0bb60304765b1e3db576aaecf2f9b3e5105afe8cfeff8f2afe6ad067", size = 22946 }, +] + +[[package]] +name = "mako" +version = "1.3.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/d9/8518279534ed7dace1795d5a47e49d5299dd0994eed1053996402a8902f9/mako-1.3.8.tar.gz", hash = "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8", size = 392069 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/bf/7a6a36ce2e4cafdfb202752be68850e22607fccd692847c45c1ae3c17ba6/Mako-1.3.8-py3-none-any.whl", hash = "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627", size = 78569 }, +] + +[[package]] +name = "markdown" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/28/3af612670f82f4c056911fbbbb42760255801b3068c48de792d354ff4472/markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", size = 357086 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803", size = 106349 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "marshmallow" +version = "3.23.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/0f/33b98679f185f5ce58620595b32d4cf8e2fa5fb56d41eb463826558265c6/marshmallow-3.23.2.tar.gz", hash = "sha256:c448ac6455ca4d794773f00bae22c2f351d62d739929f761dce5eacb5c468d7f", size = 176929 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/38/8d37b19f6c882482cae7ba8db6d02fce3cba7b3895c93fc80352b30a18f5/marshmallow-3.23.2-py3-none-any.whl", hash = "sha256:bcaf2d6fd74fb1459f8450e85d994997ad3e70036452cbfa4ab685acb19479b3", size = 49326 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278", size = 36686418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/f1/e37f6c84d252867d7ddc418fff70fc661cfd363179263b08e52e8b748e30/matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363", size = 8171677 }, + { url = "https://files.pythonhosted.org/packages/c7/8b/92e9da1f28310a1f6572b5c55097b0c0ceb5e27486d85fb73b54f5a9b939/matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997", size = 8044945 }, + { url = "https://files.pythonhosted.org/packages/c5/cb/49e83f0fd066937a5bd3bc5c5d63093703f3637b2824df8d856e0558beef/matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef", size = 8458269 }, + { url = "https://files.pythonhosted.org/packages/b2/7d/2d873209536b9ee17340754118a2a17988bc18981b5b56e6715ee07373ac/matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683", size = 8599369 }, + { url = "https://files.pythonhosted.org/packages/b8/03/57d6cbbe85c61fe4cbb7c94b54dce443d68c21961830833a1f34d056e5ea/matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765", size = 9405992 }, + { url = "https://files.pythonhosted.org/packages/14/cf/e382598f98be11bf51dd0bc60eca44a517f6793e3dc8b9d53634a144620c/matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a", size = 8034580 }, + { url = "https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59", size = 8172465 }, + { url = "https://files.pythonhosted.org/packages/42/2a/6d66d0fba41e13e9ca6512a0a51170f43e7e7ed3a8dfa036324100775612/matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a", size = 8043300 }, + { url = "https://files.pythonhosted.org/packages/90/60/2a60342b27b90a16bada939a85e29589902b41073f59668b904b15ea666c/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95", size = 8448936 }, + { url = "https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8", size = 8594151 }, + { url = "https://files.pythonhosted.org/packages/f4/bd/b2f60cf7f57d014ab33e4f74602a2b5bdc657976db8196bbc022185f6f9c/matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12", size = 9400347 }, + { url = "https://files.pythonhosted.org/packages/9f/6e/264673e64001b99d747aff5a288eca82826c024437a3694e19aed1decf46/matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc", size = 8039144 }, + { url = "https://files.pythonhosted.org/packages/72/11/1b2a094d95dcb6e6edd4a0b238177c439006c6b7a9fe8d31801237bf512f/matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25", size = 8173073 }, + { url = "https://files.pythonhosted.org/packages/0d/c4/87b6ad2723070511a411ea719f9c70fde64605423b184face4e94986de9d/matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908", size = 8043892 }, + { url = "https://files.pythonhosted.org/packages/57/69/cb0812a136550b21361335e9ffb7d459bf6d13e03cb7b015555d5143d2d6/matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2", size = 8450532 }, + { url = "https://files.pythonhosted.org/packages/ea/3a/bab9deb4fb199c05e9100f94d7f1c702f78d3241e6a71b784d2b88d7bebd/matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf", size = 8593905 }, + { url = "https://files.pythonhosted.org/packages/8b/66/742fd242f989adc1847ddf5f445815f73ad7c46aa3440690cc889cfa423c/matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae", size = 9399609 }, + { url = "https://files.pythonhosted.org/packages/fa/d6/54cee7142cef7d910a324a7aedf335c0c147b03658b54d49ec48166f10a6/matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442", size = 8039076 }, + { url = "https://files.pythonhosted.org/packages/43/14/815d072dc36e88753433bfd0385113405efb947e6895ff7b4d2e8614a33b/matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06", size = 8211000 }, + { url = "https://files.pythonhosted.org/packages/9a/76/34e75f364194ec352678adcb540964be6f35ec7d3d8c75ebcb17e6839359/matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff", size = 8087707 }, + { url = "https://files.pythonhosted.org/packages/c3/2b/b6bc0dff6a72d333bc7df94a66e6ce662d224e43daa8ad8ae4eaa9a77f55/matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593", size = 8477384 }, + { url = "https://files.pythonhosted.org/packages/c2/2d/b5949fb2b76e9b47ab05e25a5f5f887c70de20d8b0cbc704a4e2ee71c786/matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e", size = 8610334 }, + { url = "https://files.pythonhosted.org/packages/d6/9a/6e3c799d5134d9af44b01c787e1360bee38cf51850506ea2e743a787700b/matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede", size = 9406777 }, + { url = "https://files.pythonhosted.org/packages/0e/dd/e6ae97151e5ed648ab2ea48885bc33d39202b640eec7a2910e2c843f7ac0/matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c", size = 8109742 }, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350 }, +] + +[[package]] +name = "mcp" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "pydantic" }, + { name = "sse-starlette" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/f3/5cf212e60681ea6da0dbb6e0d1bc0ab2dbf5eebc749b69663d46f114fea1/mcp-1.1.2.tar.gz", hash = "sha256:694aa9df7a8641b24953c935eb72c63136dc948981021525a0add199bdfee402", size = 57628 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/40/9883eac3718b860d4006eba1920bfcb628f0a1fe37fac46a4f4e391edca6/mcp-1.1.2-py3-none-any.whl", hash = "sha256:a4d32d60fd80a1702440ba4751b847a8a88957a1f7b059880953143e9759965a", size = 36652 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "milvus-lite" +version = "2.4.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tqdm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/0b/262997e63e2eaaf5d9f93d73c9d3e75499c6ec058bd1307864be7efb6704/milvus_lite-2.4.10-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fc4246d3ed7d1910847afce0c9ba18212e93a6e9b8406048436940578dfad5cb", size = 22281832 }, + { url = "https://files.pythonhosted.org/packages/17/20/9054ace78c61d64a6c24b8e3d6c8a73b23b447028e43c4d1e6c878e8294a/milvus_lite-2.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:74a8e07c5e3b057df17fbb46913388e84df1dc403a200f4e423799a58184c800", size = 19855994 }, + { url = "https://files.pythonhosted.org/packages/34/8e/7858d12d89bf9e84302c6ffd5faf776d7b2de4372a07461f726ce6f9929e/milvus_lite-2.4.10-py3-none-manylinux2014_aarch64.whl", hash = "sha256:240c7386b747bad696ecb5bd1f58d491e86b9d4b92dccee3315ed7256256eddc", size = 39614866 }, + { url = "https://files.pythonhosted.org/packages/84/65/639cb552c892ba5fef73301f878b2e7cabb59c918e0c49c9cf3026d49447/milvus_lite-2.4.10-py3-none-manylinux2014_x86_64.whl", hash = "sha256:211d2e334a043f9282bdd9755f76b9b2d93b23bffa7af240919ffce6a8dfe325", size = 49377774 }, +] + +[[package]] +name = "monotonic" +version = "1.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/ca/8e91948b782ddfbd194f323e7e7d9ba12e5877addf04fb2bf8fca38e86ac/monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/67/7e8406a29b6c45be7af7740456f7f37025f0506ae2e05fb9009a53946860/monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c", size = 8154 }, +] + +[[package]] +name = "multidict" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/be/504b89a5e9ca731cd47487e91c469064f8ae5af93b7259758dcfc2b9c848/multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", size = 64002 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/13/df3505a46d0cd08428e4c8169a196131d1b0c4b515c3649829258843dde6/multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", size = 48570 }, + { url = "https://files.pythonhosted.org/packages/f0/e1/a215908bfae1343cdb72f805366592bdd60487b4232d039c437fe8f5013d/multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", size = 29316 }, + { url = "https://files.pythonhosted.org/packages/70/0f/6dc70ddf5d442702ed74f298d69977f904960b82368532c88e854b79f72b/multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", size = 29640 }, + { url = "https://files.pythonhosted.org/packages/d8/6d/9c87b73a13d1cdea30b321ef4b3824449866bd7f7127eceed066ccb9b9ff/multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", size = 131067 }, + { url = "https://files.pythonhosted.org/packages/cc/1e/1b34154fef373371fd6c65125b3d42ff5f56c7ccc6bfff91b9b3c60ae9e0/multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", size = 138507 }, + { url = "https://files.pythonhosted.org/packages/fb/e0/0bc6b2bac6e461822b5f575eae85da6aae76d0e2a79b6665d6206b8e2e48/multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", size = 133905 }, + { url = "https://files.pythonhosted.org/packages/ba/af/73d13b918071ff9b2205fcf773d316e0f8fefb4ec65354bbcf0b10908cc6/multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", size = 129004 }, + { url = "https://files.pythonhosted.org/packages/74/21/23960627b00ed39643302d81bcda44c9444ebcdc04ee5bedd0757513f259/multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", size = 121308 }, + { url = "https://files.pythonhosted.org/packages/8b/5c/cf282263ffce4a596ed0bb2aa1a1dddfe1996d6a62d08842a8d4b33dca13/multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", size = 132608 }, + { url = "https://files.pythonhosted.org/packages/d7/3e/97e778c041c72063f42b290888daff008d3ab1427f5b09b714f5a8eff294/multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", size = 127029 }, + { url = "https://files.pythonhosted.org/packages/47/ac/3efb7bfe2f3aefcf8d103e9a7162572f01936155ab2f7ebcc7c255a23212/multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", size = 137594 }, + { url = "https://files.pythonhosted.org/packages/42/9b/6c6e9e8dc4f915fc90a9b7798c44a30773dea2995fdcb619870e705afe2b/multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", size = 134556 }, + { url = "https://files.pythonhosted.org/packages/1d/10/8e881743b26aaf718379a14ac58572a240e8293a1c9d68e1418fb11c0f90/multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", size = 130993 }, + { url = "https://files.pythonhosted.org/packages/45/84/3eb91b4b557442802d058a7579e864b329968c8d0ea57d907e7023c677f2/multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", size = 26405 }, + { url = "https://files.pythonhosted.org/packages/9f/0b/ad879847ecbf6d27e90a6eabb7eff6b62c129eefe617ea45eae7c1f0aead/multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", size = 28795 }, + { url = "https://files.pythonhosted.org/packages/fd/16/92057c74ba3b96d5e211b553895cd6dc7cc4d1e43d9ab8fafc727681ef71/multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", size = 48713 }, + { url = "https://files.pythonhosted.org/packages/94/3d/37d1b8893ae79716179540b89fc6a0ee56b4a65fcc0d63535c6f5d96f217/multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", size = 29516 }, + { url = "https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", size = 29557 }, + { url = "https://files.pythonhosted.org/packages/47/e9/604bb05e6e5bce1e6a5cf80a474e0f072e80d8ac105f1b994a53e0b28c42/multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", size = 130170 }, + { url = "https://files.pythonhosted.org/packages/7e/13/9efa50801785eccbf7086b3c83b71a4fb501a4d43549c2f2f80b8787d69f/multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", size = 134836 }, + { url = "https://files.pythonhosted.org/packages/bf/0f/93808b765192780d117814a6dfcc2e75de6dcc610009ad408b8814dca3ba/multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", size = 133475 }, + { url = "https://files.pythonhosted.org/packages/d3/c8/529101d7176fe7dfe1d99604e48d69c5dfdcadb4f06561f465c8ef12b4df/multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", size = 131049 }, + { url = "https://files.pythonhosted.org/packages/ca/0c/fc85b439014d5a58063e19c3a158a889deec399d47b5269a0f3b6a2e28bc/multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", size = 120370 }, + { url = "https://files.pythonhosted.org/packages/db/46/d4416eb20176492d2258fbd47b4abe729ff3b6e9c829ea4236f93c865089/multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", size = 125178 }, + { url = "https://files.pythonhosted.org/packages/5b/46/73697ad7ec521df7de5531a32780bbfd908ded0643cbe457f981a701457c/multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", size = 119567 }, + { url = "https://files.pythonhosted.org/packages/cd/ed/51f060e2cb0e7635329fa6ff930aa5cffa17f4c7f5c6c3ddc3500708e2f2/multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", size = 129822 }, + { url = "https://files.pythonhosted.org/packages/df/9e/ee7d1954b1331da3eddea0c4e08d9142da5f14b1321c7301f5014f49d492/multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", size = 128656 }, + { url = "https://files.pythonhosted.org/packages/77/00/8538f11e3356b5d95fa4b024aa566cde7a38aa7a5f08f4912b32a037c5dc/multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", size = 125360 }, + { url = "https://files.pythonhosted.org/packages/be/05/5d334c1f2462d43fec2363cd00b1c44c93a78c3925d952e9a71caf662e96/multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", size = 26382 }, + { url = "https://files.pythonhosted.org/packages/a3/bf/f332a13486b1ed0496d624bcc7e8357bb8053823e8cd4b9a18edc1d97e73/multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", size = 28529 }, + { url = "https://files.pythonhosted.org/packages/22/67/1c7c0f39fe069aa4e5d794f323be24bf4d33d62d2a348acdb7991f8f30db/multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", size = 48771 }, + { url = "https://files.pythonhosted.org/packages/3c/25/c186ee7b212bdf0df2519eacfb1981a017bda34392c67542c274651daf23/multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", size = 29533 }, + { url = "https://files.pythonhosted.org/packages/67/5e/04575fd837e0958e324ca035b339cea174554f6f641d3fb2b4f2e7ff44a2/multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", size = 29595 }, + { url = "https://files.pythonhosted.org/packages/d3/b2/e56388f86663810c07cfe4a3c3d87227f3811eeb2d08450b9e5d19d78876/multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", size = 130094 }, + { url = "https://files.pythonhosted.org/packages/6c/ee/30ae9b4186a644d284543d55d491fbd4239b015d36b23fea43b4c94f7052/multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", size = 134876 }, + { url = "https://files.pythonhosted.org/packages/84/c7/70461c13ba8ce3c779503c70ec9d0345ae84de04521c1f45a04d5f48943d/multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", size = 133500 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/002af221253f10f99959561123fae676148dd730e2daa2cd053846a58507/multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", size = 131099 }, + { url = "https://files.pythonhosted.org/packages/82/42/d1c7a7301d52af79d88548a97e297f9d99c961ad76bbe6f67442bb77f097/multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", size = 120403 }, + { url = "https://files.pythonhosted.org/packages/68/f3/471985c2c7ac707547553e8f37cff5158030d36bdec4414cb825fbaa5327/multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", size = 125348 }, + { url = "https://files.pythonhosted.org/packages/67/2c/e6df05c77e0e433c214ec1d21ddd203d9a4770a1f2866a8ca40a545869a0/multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", size = 119673 }, + { url = "https://files.pythonhosted.org/packages/c5/cd/bc8608fff06239c9fb333f9db7743a1b2eafe98c2666c9a196e867a3a0a4/multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", size = 129927 }, + { url = "https://files.pythonhosted.org/packages/44/8e/281b69b7bc84fc963a44dc6e0bbcc7150e517b91df368a27834299a526ac/multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", size = 128711 }, + { url = "https://files.pythonhosted.org/packages/12/a4/63e7cd38ed29dd9f1881d5119f272c898ca92536cdb53ffe0843197f6c85/multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", size = 125519 }, + { url = "https://files.pythonhosted.org/packages/38/e0/4f5855037a72cd8a7a2f60a3952d9aa45feedb37ae7831642102604e8a37/multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", size = 26426 }, + { url = "https://files.pythonhosted.org/packages/7e/a5/17ee3a4db1e310b7405f5d25834460073a8ccd86198ce044dfaf69eac073/multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", size = 28531 }, + { url = "https://files.pythonhosted.org/packages/99/b7/b9e70fde2c0f0c9af4cc5277782a89b66d35948ea3369ec9f598358c3ac5/multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", size = 10051 }, +] + +[[package]] +name = "multiprocess" +version = "0.70.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824 }, + { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519 }, + { url = "https://files.pythonhosted.org/packages/0a/7d/a988f258104dcd2ccf1ed40fdc97e26c4ac351eeaf81d76e266c52d84e2f/multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e", size = 146741 }, + { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628 }, + { url = "https://files.pythonhosted.org/packages/da/d9/f7f9379981e39b8c2511c9e0326d212accacb82f12fbfdc1aa2ce2a7b2b6/multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3", size = 133351 }, +] + +[[package]] +name = "mypy" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 }, + { url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 }, + { url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 }, + { url = "https://files.pythonhosted.org/packages/3f/1d/676e76f07f7d5ddcd4227af3938a9c9640f293b7d8a44dd4ff41d4db25c1/mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", size = 12984688 }, + { url = "https://files.pythonhosted.org/packages/9c/03/5a85a30ae5407b1d28fab51bd3e2103e52ad0918d1e68f02a7778669a307/mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", size = 9626811 }, + { url = "https://files.pythonhosted.org/packages/fb/31/c526a7bd2e5c710ae47717c7a5f53f616db6d9097caf48ad650581e81748/mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", size = 11077900 }, + { url = "https://files.pythonhosted.org/packages/83/67/b7419c6b503679d10bd26fc67529bc6a1f7a5f220bbb9f292dc10d33352f/mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", size = 10074818 }, + { url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 }, + { url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 }, + { url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 }, + { url = "https://files.pythonhosted.org/packages/11/bb/ab4cfdc562cad80418f077d8be9b4491ee4fb257440da951b85cbb0a639e/mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", size = 11069721 }, + { url = "https://files.pythonhosted.org/packages/59/3b/a393b1607cb749ea2c621def5ba8c58308ff05e30d9dbdc7c15028bca111/mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", size = 10063996 }, + { url = "https://files.pythonhosted.org/packages/d1/1f/6b76be289a5a521bb1caedc1f08e76ff17ab59061007f201a8a18cc514d1/mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8", size = 12584043 }, + { url = "https://files.pythonhosted.org/packages/a6/83/5a85c9a5976c6f96e3a5a7591aa28b4a6ca3a07e9e5ba0cec090c8b596d6/mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", size = 13036996 }, + { url = "https://files.pythonhosted.org/packages/b4/59/c39a6f752f1f893fccbcf1bdd2aca67c79c842402b5283563d006a67cf76/mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", size = 9737709 }, + { url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 }, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, +] + +[[package]] +name = "neo4j" +version = "5.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/b6/31ed9f3df8b948aecd31952193b803cd2007551f2f81aaa60d264e8d1950/neo4j-5.27.0.tar.gz", hash = "sha256:f82ee807cd15b178898d83f41a66372e11719a25dd487fd7bea48fd4b7323765", size = 223803 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/9a/cec819e5887804896db67b13215682b15e6f9201d9cf63890fee2b9a29e9/neo4j-5.27.0-py3-none-any.whl", hash = "sha256:929c14b9e5341267324eca170b39d1798b032bffacc26a0529eacaf678ae483f", size = 301679 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, +] + +[[package]] +name = "nltk" +version = "3.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "joblib" }, + { name = "regex" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/87/db8be88ad32c2d042420b6fd9ffd4a149f9a0d7f0e86b3f543be2eeeedd2/nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868", size = 2904691 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442 }, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, +] + +[[package]] +name = "numpy" +version = "1.26.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, + { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, + { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, + { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005 }, + { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297 }, + { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567 }, + { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812 }, + { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913 }, + { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901 }, + { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868 }, + { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109 }, + { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", size = 17950613 }, + { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", size = 13572172 }, + { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", size = 17786643 }, + { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", size = 5677803 }, + { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754 }, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fa/fbf4001037904031639e6bfbfc02badfc7e12f137a8afa254df6c4c8a670/oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918", size = 177352 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca", size = 151688 }, +] + +[[package]] +name = "olefile" +version = "0.47" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565 }, +] + +[[package]] +name = "openai" +version = "1.52.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/00/0983e56ca4535394a34f3ce25429ce6710878f2f8d7931973d04364ca922/openai-1.52.0.tar.gz", hash = "sha256:95c65a5f77559641ab8f3e4c3a050804f7b51d278870e2ec1f7444080bfe565a", size = 309426 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/1e/9dc3ccee95d0e16e54e353d3c355bb7cc506d56a2dbb0a07bc739cc48eac/openai-1.52.0-py3-none-any.whl", hash = "sha256:0c249f20920183b0a2ca4f7dba7b0452df3ecd0fa7985eb1d91ad884bc3ced9c", size = 386947 }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "importlib-metadata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/83/93114b6de85a98963aec218a51509a52ed3f8de918fe91eb0f7299805c3f/opentelemetry_api-1.27.0.tar.gz", hash = "sha256:ed673583eaa5f81b5ce5e86ef7cdaf622f88ef65f0b9aab40b843dcae5bef342", size = 62693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/1f/737dcdbc9fea2fa96c1b392ae47275165a7c641663fbb08a8d252968eed2/opentelemetry_api-1.27.0-py3-none-any.whl", hash = "sha256:953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7", size = 63970 }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/2e/7eaf4ba595fb5213cf639c9158dfb64aacb2e4c7d74bfa664af89fa111f4/opentelemetry_exporter_otlp_proto_common-1.27.0.tar.gz", hash = "sha256:159d27cf49f359e3798c4c3eb8da6ef4020e292571bd8c5604a2a573231dd5c8", size = 17860 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/27/4610ab3d9bb3cde4309b6505f98b3aabca04a26aa480aa18cede23149837/opentelemetry_exporter_otlp_proto_common-1.27.0-py3-none-any.whl", hash = "sha256:675db7fffcb60946f3a5c43e17d1168a3307a94a930ecf8d2ea1f286f3d4f79a", size = 17848 }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/d0/c1e375b292df26e0ffebf194e82cd197e4c26cc298582bda626ce3ce74c5/opentelemetry_exporter_otlp_proto_grpc-1.27.0.tar.gz", hash = "sha256:af6f72f76bcf425dfb5ad11c1a6d6eca2863b91e63575f89bb7b4b55099d968f", size = 26244 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/80/32217460c2c64c0568cea38410124ff680a9b65f6732867bbf857c4d8626/opentelemetry_exporter_otlp_proto_grpc-1.27.0-py3-none-any.whl", hash = "sha256:56b5bbd5d61aab05e300d9d62a6b3c134827bbd28d0b12f2649c2da368006c9e", size = 18541 }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/59/959f0beea798ae0ee9c979b90f220736fbec924eedbefc60ca581232e659/opentelemetry_proto-1.27.0.tar.gz", hash = "sha256:33c9345d91dafd8a74fc3d7576c5a38f18b7fdf8d02983ac67485386132aedd6", size = 34749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/56/3d2d826834209b19a5141eed717f7922150224d1a982385d19a9444cbf8d/opentelemetry_proto-1.27.0-py3-none-any.whl", hash = "sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace", size = 52464 }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/9a/82a6ac0f06590f3d72241a587cb8b0b751bd98728e896cc4cbd4847248e6/opentelemetry_sdk-1.27.0.tar.gz", hash = "sha256:d525017dea0ccce9ba4e0245100ec46ecdc043f2d7b8315d56b19aff0904fa6f", size = 145019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/bd/a6602e71e315055d63b2ff07172bd2d012b4cba2d4e00735d74ba42fc4d6/opentelemetry_sdk-1.27.0-py3-none-any.whl", hash = "sha256:365f5e32f920faf0fd9e14fdfd92c086e317eaa5f860edba9cdc17a380d9197d", size = 110505 }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.48b0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "opentelemetry-api" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/89/1724ad69f7411772446067cdfa73b598694c8c91f7f8c922e344d96d81f9/opentelemetry_semantic_conventions-0.48b0.tar.gz", hash = "sha256:12d74983783b6878162208be57c9effcb89dc88691c64992d70bb89dc00daa1a", size = 89445 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/7a/4f0063dbb0b6c971568291a8bc19a4ca70d3c185db2d956230dd67429dfc/opentelemetry_semantic_conventions-0.48b0-py3-none-any.whl", hash = "sha256:a0de9f45c413a8669788a38569c7e0a11ce6ce97861a628cca785deecdc32a1f", size = 149685 }, +] + +[[package]] +name = "orderly-set" +version = "5.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5d/9e/8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37/orderly_set-5.2.3.tar.gz", hash = "sha256:571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017", size = 19698 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/bb/a3a4eab8430f14c7d1476f9db261d32654cb3d1794c0266a46f6574e1190/orderly_set-5.2.3-py3-none-any.whl", hash = "sha256:d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34", size = 12024 }, +] + +[[package]] +name = "orjson" +version = "3.10.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/04/bb9f72987e7f62fb591d6c880c0caaa16238e4e530cbc3bdc84a7372d75f/orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff", size = 5438647 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/48/7c3cd094488f5a3bc58488555244609a8c4d105bc02f2b77e509debf0450/orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74", size = 248687 }, + { url = "https://files.pythonhosted.org/packages/ff/90/e55f0e25c7fdd1f82551fe787f85df6f378170caca863c04c810cd8f2730/orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23", size = 136953 }, + { url = "https://files.pythonhosted.org/packages/2a/b3/109c020cf7fee747d400de53b43b183ca9d3ebda3906ad0b858eb5479718/orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252", size = 149090 }, + { url = "https://files.pythonhosted.org/packages/96/d4/35c0275dc1350707d182a1b5da16d1184b9439848060af541285407f18f9/orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef", size = 140480 }, + { url = "https://files.pythonhosted.org/packages/3b/79/f863ff460c291ad2d882cc3b580cc444bd4ec60c9df55f6901e6c9a3f519/orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252", size = 156564 }, + { url = "https://files.pythonhosted.org/packages/98/7e/8d5835449ddd873424ee7b1c4ba73a0369c1055750990d824081652874d6/orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4", size = 131279 }, + { url = "https://files.pythonhosted.org/packages/46/f5/d34595b6d7f4f984c6fef289269a7f98abcdc2445ebdf90e9273487dda6b/orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae", size = 139764 }, + { url = "https://files.pythonhosted.org/packages/b3/5b/ee6e9ddeab54a7b7806768151c2090a2d36025bc346a944f51cf172ef7f7/orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b", size = 131915 }, + { url = "https://files.pythonhosted.org/packages/c4/45/febee5951aef6db5cd8cdb260548101d7ece0ca9d4ddadadf1766306b7a4/orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da", size = 415783 }, + { url = "https://files.pythonhosted.org/packages/27/a5/5a8569e49f3a6c093bee954a3de95062a231196f59e59df13a48e2420081/orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07", size = 142387 }, + { url = "https://files.pythonhosted.org/packages/6e/05/02550fb38c5bf758f3994f55401233a2ef304e175f473f2ac6dbf464cc8b/orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/8c/f4/ba31019d0646ce51f7ac75af6dabf98fd89dbf8ad87a9086da34710738e7/orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79", size = 143623 }, + { url = "https://files.pythonhosted.org/packages/83/fe/babf08842b989acf4c46103fefbd7301f026423fab47e6f3ba07b54d7837/orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8", size = 135074 }, + { url = "https://files.pythonhosted.org/packages/a1/2f/989adcafad49afb535da56b95d8f87d82e748548b2a86003ac129314079c/orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d", size = 248678 }, + { url = "https://files.pythonhosted.org/packages/69/b9/8c075e21a50c387649db262b618ebb7e4d40f4197b949c146fc225dd23da/orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f", size = 136763 }, + { url = "https://files.pythonhosted.org/packages/87/d3/78edf10b4ab14c19f6d918cf46a145818f4aca2b5a1773c894c5490d3a4c/orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70", size = 149137 }, + { url = "https://files.pythonhosted.org/packages/16/81/5db8852bdf990a0ddc997fa8f16b80895b8cc77c0fe3701569ed2b4b9e78/orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69", size = 140567 }, + { url = "https://files.pythonhosted.org/packages/fa/a6/9ce1e3e3db918512efadad489630c25841eb148513d21dab96f6b4157fa1/orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9", size = 156620 }, + { url = "https://files.pythonhosted.org/packages/47/d4/05133d6bea24e292d2f7628b1e19986554f7d97b6412b3e51d812e38db2d/orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192", size = 131555 }, + { url = "https://files.pythonhosted.org/packages/b9/7a/b3fbffda8743135c7811e95dc2ab7cdbc5f04999b83c2957d046f1b3fac9/orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559", size = 139743 }, + { url = "https://files.pythonhosted.org/packages/b5/13/95bbcc9a6584aa083da5ce5004ce3d59ea362a542a0b0938d884fd8790b6/orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc", size = 131733 }, + { url = "https://files.pythonhosted.org/packages/e8/29/dddbb2ea6e7af426fcc3da65a370618a88141de75c6603313d70768d1df1/orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f", size = 415788 }, + { url = "https://files.pythonhosted.org/packages/53/df/4aea59324ac539975919b4705ee086aced38e351a6eb3eea0f5071dd5661/orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be", size = 142347 }, + { url = "https://files.pythonhosted.org/packages/55/55/a52d83d7c49f8ff44e0daab10554490447d6c658771569e1c662aa7057fe/orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c", size = 130829 }, + { url = "https://files.pythonhosted.org/packages/a1/8b/b1beb1624dd4adf7d72e2d9b73c4b529e7851c0c754f17858ea13e368b33/orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708", size = 143659 }, + { url = "https://files.pythonhosted.org/packages/13/91/634c9cd0bfc6a857fc8fab9bf1a1bd9f7f3345e0d6ca5c3d4569ceb6dcfa/orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb", size = 135221 }, + { url = "https://files.pythonhosted.org/packages/1b/bb/3f560735f46fa6f875a9d7c4c2171a58cfb19f56a633d5ad5037a924f35f/orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543", size = 248662 }, + { url = "https://files.pythonhosted.org/packages/a3/df/54817902350636cc9270db20486442ab0e4db33b38555300a1159b439d16/orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296", size = 126055 }, + { url = "https://files.pythonhosted.org/packages/2e/77/55835914894e00332601a74540840f7665e81f20b3e2b9a97614af8565ed/orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e", size = 131507 }, + { url = "https://files.pythonhosted.org/packages/33/9e/b91288361898e3158062a876b5013c519a5d13e692ac7686e3486c4133ab/orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f", size = 131686 }, + { url = "https://files.pythonhosted.org/packages/b2/15/08ce117d60a4d2d3fd24e6b21db463139a658e9f52d22c9c30af279b4187/orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e", size = 415710 }, + { url = "https://files.pythonhosted.org/packages/71/af/c09da5ed58f9c002cf83adff7a4cdf3e6cee742aa9723395f8dcdb397233/orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6", size = 142305 }, + { url = "https://files.pythonhosted.org/packages/17/d1/8612038d44f33fae231e9ba480d273bac2b0383ce9e77cb06bede1224ae3/orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e", size = 130815 }, + { url = "https://files.pythonhosted.org/packages/67/2c/d5f87834be3591555cfaf9aecdf28f480a6f0b4afeaac53bad534bf9518f/orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc", size = 143664 }, + { url = "https://files.pythonhosted.org/packages/6a/05/7d768fa3ca23c9b3e1e09117abeded1501119f1d8de0ab722938c91ab25d/orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825", size = 134944 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "palettable" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/3d/a5854d60850485bff12f28abfe0e17f503e866763bed61aed4990b604530/palettable-3.3.3.tar.gz", hash = "sha256:094dd7d9a5fc1cca4854773e5c1fc6a315b33bd5b3a8f47064928facaf0490a8", size = 106639 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f7/3367feadd4ab56783b0971c9b7edfbdd68e0c70ce877949a5dd2117ed4a0/palettable-3.3.3-py2.py3-none-any.whl", hash = "sha256:74e9e7d7fe5a9be065e02397558ed1777b2df0b793a6f4ce1a5ee74f74fb0caa", size = 332251 }, +] + +[[package]] +name = "pandas" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c", size = 5284455 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8", size = 11645672 }, + { url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26", size = 10693229 }, + { url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d", size = 11581591 }, + { url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df", size = 12219370 }, + { url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd", size = 9482935 }, + { url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b", size = 10607692 }, +] + +[[package]] +name = "pathvalidate" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/8c/8713d8dcd8e357b9358695b441ee974580a8addfaea4f01437df07577052/pathvalidate-3.2.1.tar.gz", hash = "sha256:f5d07b1e2374187040612a1fcd2bcb2919f8db180df254c9581bb90bf903377d", size = 59263 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/5e/76a9d08b4b4e4583f269cb9f64de267f9aeae0dacef23307f53a14211716/pathvalidate-3.2.1-py3-none-any.whl", hash = "sha256:9a6255eb8f63c9e2135b9be97a5ce08f10230128c4ae7b3e935378b82b22c4c9", size = 23833 }, +] + +[[package]] +name = "pendulum" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "time-machine", marker = "implementation_name != 'pypy'" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b8/fe/27c7438c6ac8b8f8bef3c6e571855602ee784b85d072efddfff0ceb1cd77/pendulum-3.0.0.tar.gz", hash = "sha256:5d034998dea404ec31fae27af6b22cff1708f830a1ed7353be4d1019bb9f584e", size = 84524 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/f0/d60be6058657bf71281eeaa12bee85e87bac18acf6dbb7b5197bb8416537/pendulum-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3725245c0352c95d6ca297193192020d1b0c0f83d5ee6bb09964edc2b5a2d508", size = 362283 }, + { url = "https://files.pythonhosted.org/packages/68/e5/0f9d8351242ddb119a40b41c0cf1d0c74cc243829eea6811f753a8ecf15f/pendulum-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c035f03a3e565ed132927e2c1b691de0dbf4eb53b02a5a3c5a97e1a64e17bec", size = 352957 }, + { url = "https://files.pythonhosted.org/packages/30/43/70d0a08e5d6ca434ba139d19ec2a4847b0a3e461fbb82e680a9b6a4237ef/pendulum-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597e66e63cbd68dd6d58ac46cb7a92363d2088d37ccde2dae4332ef23e95cd00", size = 335784 }, + { url = "https://files.pythonhosted.org/packages/fc/a3/7d4c0b3f57bf7b543da9088a78a6bd6c786808ca4098bd5db649fdf9f6a2/pendulum-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99a0f8172e19f3f0c0e4ace0ad1595134d5243cf75985dc2233e8f9e8de263ca", size = 362217 }, + { url = "https://files.pythonhosted.org/packages/8b/03/8c451d569e7f4d9898f155e793f46970eed256c5ae353ecb355584890d8a/pendulum-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77d8839e20f54706aed425bec82a83b4aec74db07f26acd039905d1237a5e1d4", size = 448630 }, + { url = "https://files.pythonhosted.org/packages/84/3a/5e36479e199a034adcf6a1a95c691f0a2781ea55b9ac3bcb887e2f97d82b/pendulum-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afde30e8146292b059020fbc8b6f8fd4a60ae7c5e6f0afef937bbb24880bdf01", size = 384882 }, + { url = "https://files.pythonhosted.org/packages/4c/25/beff911dda686e0cf169bc3dbe5d10416b376a6dde94eb1bf04aa4035409/pendulum-3.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:660434a6fcf6303c4efd36713ca9212c753140107ee169a3fc6c49c4711c2a05", size = 559556 }, + { url = "https://files.pythonhosted.org/packages/e9/e8/f2aaa470adb6c720645f9f9ef30d5b223407ee327e12c6127eccf4218cb8/pendulum-3.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dee9e5a48c6999dc1106eb7eea3e3a50e98a50651b72c08a87ee2154e544b33e", size = 558249 }, + { url = "https://files.pythonhosted.org/packages/60/19/c13307ea8504d2c02c63c9dffdae1cefbd068b636ec7b18ccf2ec064d246/pendulum-3.0.0-cp311-none-win_amd64.whl", hash = "sha256:d4cdecde90aec2d67cebe4042fd2a87a4441cc02152ed7ed8fb3ebb110b94ec4", size = 293463 }, + { url = "https://files.pythonhosted.org/packages/6b/36/252d48610295c11c0f18e791dcc133d38c545b0bd19a5c3981652a9acb3c/pendulum-3.0.0-cp311-none-win_arm64.whl", hash = "sha256:773c3bc4ddda2dda9f1b9d51fe06762f9200f3293d75c4660c19b2614b991d83", size = 288057 }, + { url = "https://files.pythonhosted.org/packages/1e/37/17c8f0e7481a32f21b9002dd68912a8813f2c1d77b984e00af56eb9ae31b/pendulum-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:409e64e41418c49f973d43a28afe5df1df4f1dd87c41c7c90f1a63f61ae0f1f7", size = 362284 }, + { url = "https://files.pythonhosted.org/packages/12/e6/08f462f6ea87e2159f19b43ff88231d26e02bda31c10bcb29290a617ace4/pendulum-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a38ad2121c5ec7c4c190c7334e789c3b4624798859156b138fcc4d92295835dc", size = 352964 }, + { url = "https://files.pythonhosted.org/packages/47/29/b6877f6b53b91356c2c56d19ddab17b165ca994ad1e57b32c089e79f3fb5/pendulum-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fde4d0b2024b9785f66b7f30ed59281bd60d63d9213cda0eb0910ead777f6d37", size = 335848 }, + { url = "https://files.pythonhosted.org/packages/2b/77/62ca666f30b2558342deadda26290a575459a7b59248ea1e978b84175227/pendulum-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2c5675769fb6d4c11238132962939b960fcb365436b6d623c5864287faa319", size = 362215 }, + { url = "https://files.pythonhosted.org/packages/e0/29/ce37593f5ea51862c60dadf4e863d604f954478b3abbcc60a14dc05e242c/pendulum-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8af95e03e066826f0f4c65811cbee1b3123d4a45a1c3a2b4fc23c4b0dff893b5", size = 448673 }, + { url = "https://files.pythonhosted.org/packages/72/6a/68a8c7b8f1977d89aabfd0e2becb0921e5515dfb365097e98a522334a151/pendulum-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2165a8f33cb15e06c67070b8afc87a62b85c5a273e3aaa6bc9d15c93a4920d6f", size = 384891 }, + { url = "https://files.pythonhosted.org/packages/30/e6/edd699300f47a3c53c0d8ed26e905b9a31057c3646211e58cc540716a440/pendulum-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ad5e65b874b5e56bd942546ea7ba9dd1d6a25121db1c517700f1c9de91b28518", size = 559558 }, + { url = "https://files.pythonhosted.org/packages/d4/97/95a44aa5e1763d3a966551ed0e12f56508d8dfcc60e1f0395909b6a08626/pendulum-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17fe4b2c844bbf5f0ece69cfd959fa02957c61317b2161763950d88fed8e13b9", size = 558240 }, + { url = "https://files.pythonhosted.org/packages/9a/91/fcd992eb36b77ab43f2cf44307b72c01a6fbb27f55c1bb2d4af30e9a6cb7/pendulum-3.0.0-cp312-none-win_amd64.whl", hash = "sha256:78f8f4e7efe5066aca24a7a57511b9c2119f5c2b5eb81c46ff9222ce11e0a7a5", size = 293456 }, + { url = "https://files.pythonhosted.org/packages/3b/60/ba8aa296ca6d76603d58146b4a222cd99e7da33831158b8c00240a896a56/pendulum-3.0.0-cp312-none-win_arm64.whl", hash = "sha256:28f49d8d1e32aae9c284a90b6bb3873eee15ec6e1d9042edd611b22a94ac462f", size = 288054 }, +] + +[[package]] +name = "pgvector" +version = "0.3.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/d8/fd6009cee3e03214667df488cdcf9609461d729968da94e4f95d6359d304/pgvector-0.3.6.tar.gz", hash = "sha256:31d01690e6ea26cea8a633cde5f0f55f5b246d9c8292d68efdef8c22ec994ade", size = 25421 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/81/f457d6d361e04d061bef413749a6e1ab04d98cfeec6d8abcfe40184750f3/pgvector-0.3.6-py3-none-any.whl", hash = "sha256:f6c269b3c110ccb7496bac87202148ed18f34b390a0189c783e351062400a75a", size = 24880 }, +] + +[[package]] +name = "pillow" +version = "11.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/eb/f7e21b113dd48a9c97d364e0915b3988c6a0b6207652f5a92372871b7aa4/pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", size = 3154705 }, + { url = "https://files.pythonhosted.org/packages/25/b3/2b54a1d541accebe6bd8b1358b34ceb2c509f51cb7dcda8687362490da5b/pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", size = 2979222 }, + { url = "https://files.pythonhosted.org/packages/20/12/1a41eddad8265c5c19dda8fb6c269ce15ee25e0b9f8f26286e6202df6693/pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", size = 4190220 }, + { url = "https://files.pythonhosted.org/packages/a9/9b/8a8c4d07d77447b7457164b861d18f5a31ae6418ef5c07f6f878fa09039a/pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", size = 4291399 }, + { url = "https://files.pythonhosted.org/packages/fc/e4/130c5fab4a54d3991129800dd2801feeb4b118d7630148cd67f0e6269d4c/pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", size = 4202709 }, + { url = "https://files.pythonhosted.org/packages/39/63/b3fc299528d7df1f678b0666002b37affe6b8751225c3d9c12cf530e73ed/pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", size = 4372556 }, + { url = "https://files.pythonhosted.org/packages/c6/a6/694122c55b855b586c26c694937d36bb8d3b09c735ff41b2f315c6e66a10/pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", size = 4287187 }, + { url = "https://files.pythonhosted.org/packages/ba/a9/f9d763e2671a8acd53d29b1e284ca298bc10a595527f6be30233cdb9659d/pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", size = 4418468 }, + { url = "https://files.pythonhosted.org/packages/6e/0e/b5cbad2621377f11313a94aeb44ca55a9639adabcaaa073597a1925f8c26/pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", size = 2249249 }, + { url = "https://files.pythonhosted.org/packages/dc/83/1470c220a4ff06cd75fc609068f6605e567ea51df70557555c2ab6516b2c/pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", size = 2566769 }, + { url = "https://files.pythonhosted.org/packages/52/98/def78c3a23acee2bcdb2e52005fb2810ed54305602ec1bfcfab2bda6f49f/pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", size = 2254611 }, + { url = "https://files.pythonhosted.org/packages/1c/a3/26e606ff0b2daaf120543e537311fa3ae2eb6bf061490e4fea51771540be/pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", size = 3147642 }, + { url = "https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", size = 2978999 }, + { url = "https://files.pythonhosted.org/packages/d9/ff/5a45000826a1aa1ac6874b3ec5a856474821a1b59d838c4f6ce2ee518fe9/pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", size = 4196794 }, + { url = "https://files.pythonhosted.org/packages/9d/21/84c9f287d17180f26263b5f5c8fb201de0f88b1afddf8a2597a5c9fe787f/pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", size = 4300762 }, + { url = "https://files.pythonhosted.org/packages/84/39/63fb87cd07cc541438b448b1fed467c4d687ad18aa786a7f8e67b255d1aa/pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9", size = 4210468 }, + { url = "https://files.pythonhosted.org/packages/7f/42/6e0f2c2d5c60f499aa29be14f860dd4539de322cd8fb84ee01553493fb4d/pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", size = 4381824 }, + { url = "https://files.pythonhosted.org/packages/31/69/1ef0fb9d2f8d2d114db982b78ca4eeb9db9a29f7477821e160b8c1253f67/pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", size = 4296436 }, + { url = "https://files.pythonhosted.org/packages/44/ea/dad2818c675c44f6012289a7c4f46068c548768bc6c7f4e8c4ae5bbbc811/pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", size = 4429714 }, + { url = "https://files.pythonhosted.org/packages/af/3a/da80224a6eb15bba7a0dcb2346e2b686bb9bf98378c0b4353cd88e62b171/pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", size = 2249631 }, + { url = "https://files.pythonhosted.org/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", size = 2567533 }, + { url = "https://files.pythonhosted.org/packages/0b/30/2b61876e2722374558b871dfbfcbe4e406626d63f4f6ed92e9c8e24cac37/pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", size = 2254890 }, + { url = "https://files.pythonhosted.org/packages/63/24/e2e15e392d00fcf4215907465d8ec2a2f23bcec1481a8ebe4ae760459995/pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", size = 3147300 }, + { url = "https://files.pythonhosted.org/packages/43/72/92ad4afaa2afc233dc44184adff289c2e77e8cd916b3ddb72ac69495bda3/pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", size = 2978742 }, + { url = "https://files.pythonhosted.org/packages/9e/da/c8d69c5bc85d72a8523fe862f05ababdc52c0a755cfe3d362656bb86552b/pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", size = 4194349 }, + { url = "https://files.pythonhosted.org/packages/cd/e8/686d0caeed6b998351d57796496a70185376ed9c8ec7d99e1d19ad591fc6/pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", size = 4298714 }, + { url = "https://files.pythonhosted.org/packages/ec/da/430015cec620d622f06854be67fd2f6721f52fc17fca8ac34b32e2d60739/pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", size = 4208514 }, + { url = "https://files.pythonhosted.org/packages/44/ae/7e4f6662a9b1cb5f92b9cc9cab8321c381ffbee309210940e57432a4063a/pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", size = 4380055 }, + { url = "https://files.pythonhosted.org/packages/74/d5/1a807779ac8a0eeed57f2b92a3c32ea1b696e6140c15bd42eaf908a261cd/pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", size = 4296751 }, + { url = "https://files.pythonhosted.org/packages/38/8c/5fa3385163ee7080bc13026d59656267daaaaf3c728c233d530e2c2757c8/pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", size = 4430378 }, + { url = "https://files.pythonhosted.org/packages/ca/1d/ad9c14811133977ff87035bf426875b93097fb50af747793f013979facdb/pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", size = 2249588 }, + { url = "https://files.pythonhosted.org/packages/fb/01/3755ba287dac715e6afdb333cb1f6d69740a7475220b4637b5ce3d78cec2/pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", size = 2567509 }, + { url = "https://files.pythonhosted.org/packages/c0/98/2c7d727079b6be1aba82d195767d35fcc2d32204c7a5820f822df5330152/pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", size = 2254791 }, + { url = "https://files.pythonhosted.org/packages/eb/38/998b04cc6f474e78b563716b20eecf42a2fa16a84589d23c8898e64b0ffd/pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", size = 3150854 }, + { url = "https://files.pythonhosted.org/packages/13/8e/be23a96292113c6cb26b2aa3c8b3681ec62b44ed5c2bd0b258bd59503d3c/pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", size = 2982369 }, + { url = "https://files.pythonhosted.org/packages/97/8a/3db4eaabb7a2ae8203cd3a332a005e4aba00067fc514aaaf3e9721be31f1/pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", size = 4333703 }, + { url = "https://files.pythonhosted.org/packages/28/ac/629ffc84ff67b9228fe87a97272ab125bbd4dc462745f35f192d37b822f1/pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", size = 4412550 }, + { url = "https://files.pythonhosted.org/packages/d6/07/a505921d36bb2df6868806eaf56ef58699c16c388e378b0dcdb6e5b2fb36/pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", size = 4461038 }, + { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, + { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, + { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, +] + +[[package]] +name = "portalocker" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423 }, +] + +[[package]] +name = "posthog" +version = "3.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backoff" }, + { name = "monotonic" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/a0/7607d4fd7c52b086671d8618e76cb5b9a642311fd6f352ebd7eb035319f2/posthog-3.7.4.tar.gz", hash = "sha256:19384bd09d330f9787a7e2446aba14c8057ece56144970ea2791072d4e40cd36", size = 50174 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/f2/5ee24cd69e2120bf87356c02ace0438b4e4fb78229fddcbf6f1c6be377d5/posthog-3.7.4-py2.py3-none-any.whl", hash = "sha256:21c18c6bf43b2de303ea4cd6e95804cc0f24c20cb2a96a8fd09da2ed50b62faa", size = 54777 }, +] + +[[package]] +name = "pre-commit" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/c8/e22c292035f1bac8b9f5237a2622305bc0304e776080b246f3df57c4ff9f/pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2", size = 191678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/8f/496e10d51edd6671ebe0432e33ff800aa86775d2d147ce7d43389324a525/pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878", size = 218713 }, +] + +[[package]] +name = "propcache" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/c8/2a13f78d82211490855b2fb303b6721348d0787fdd9a12ac46d99d3acde1/propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64", size = 41735 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/0f/2913b6791ebefb2b25b4efd4bb2299c985e09786b9f5b19184a88e5778dd/propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16", size = 79297 }, + { url = "https://files.pythonhosted.org/packages/cf/73/af2053aeccd40b05d6e19058419ac77674daecdd32478088b79375b9ab54/propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717", size = 45611 }, + { url = "https://files.pythonhosted.org/packages/3c/09/8386115ba7775ea3b9537730e8cf718d83bbf95bffe30757ccf37ec4e5da/propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3", size = 45146 }, + { url = "https://files.pythonhosted.org/packages/03/7a/793aa12f0537b2e520bf09f4c6833706b63170a211ad042ca71cbf79d9cb/propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9", size = 232136 }, + { url = "https://files.pythonhosted.org/packages/f1/38/b921b3168d72111769f648314100558c2ea1d52eb3d1ba7ea5c4aa6f9848/propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787", size = 239706 }, + { url = "https://files.pythonhosted.org/packages/14/29/4636f500c69b5edea7786db3c34eb6166f3384b905665ce312a6e42c720c/propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465", size = 238531 }, + { url = "https://files.pythonhosted.org/packages/85/14/01fe53580a8e1734ebb704a3482b7829a0ef4ea68d356141cf0994d9659b/propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af", size = 231063 }, + { url = "https://files.pythonhosted.org/packages/33/5c/1d961299f3c3b8438301ccfbff0143b69afcc30c05fa28673cface692305/propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7", size = 220134 }, + { url = "https://files.pythonhosted.org/packages/00/d0/ed735e76db279ba67a7d3b45ba4c654e7b02bc2f8050671ec365d8665e21/propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f", size = 220009 }, + { url = "https://files.pythonhosted.org/packages/75/90/ee8fab7304ad6533872fee982cfff5a53b63d095d78140827d93de22e2d4/propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54", size = 212199 }, + { url = "https://files.pythonhosted.org/packages/eb/ec/977ffaf1664f82e90737275873461695d4c9407d52abc2f3c3e24716da13/propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505", size = 214827 }, + { url = "https://files.pythonhosted.org/packages/57/48/031fb87ab6081764054821a71b71942161619549396224cbb242922525e8/propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82", size = 228009 }, + { url = "https://files.pythonhosted.org/packages/1a/06/ef1390f2524850838f2390421b23a8b298f6ce3396a7cc6d39dedd4047b0/propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca", size = 231638 }, + { url = "https://files.pythonhosted.org/packages/38/2a/101e6386d5a93358395da1d41642b79c1ee0f3b12e31727932b069282b1d/propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e", size = 222788 }, + { url = "https://files.pythonhosted.org/packages/db/81/786f687951d0979007e05ad9346cd357e50e3d0b0f1a1d6074df334b1bbb/propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034", size = 40170 }, + { url = "https://files.pythonhosted.org/packages/cf/59/7cc7037b295d5772eceb426358bb1b86e6cab4616d971bd74275395d100d/propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3", size = 44404 }, + { url = "https://files.pythonhosted.org/packages/4c/28/1d205fe49be8b1b4df4c50024e62480a442b1a7b818e734308bb0d17e7fb/propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a", size = 79588 }, + { url = "https://files.pythonhosted.org/packages/21/ee/fc4d893f8d81cd4971affef2a6cb542b36617cd1d8ce56b406112cb80bf7/propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0", size = 45825 }, + { url = "https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d", size = 45357 }, + { url = "https://files.pythonhosted.org/packages/7f/14/7ae06a6cf2a2f1cb382586d5a99efe66b0b3d0c6f9ac2f759e6f7af9d7cf/propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4", size = 241869 }, + { url = "https://files.pythonhosted.org/packages/cc/59/227a78be960b54a41124e639e2c39e8807ac0c751c735a900e21315f8c2b/propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d", size = 247884 }, + { url = "https://files.pythonhosted.org/packages/84/58/f62b4ffaedf88dc1b17f04d57d8536601e4e030feb26617228ef930c3279/propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5", size = 248486 }, + { url = "https://files.pythonhosted.org/packages/1c/07/ebe102777a830bca91bbb93e3479cd34c2ca5d0361b83be9dbd93104865e/propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24", size = 243649 }, + { url = "https://files.pythonhosted.org/packages/ed/bc/4f7aba7f08f520376c4bb6a20b9a981a581b7f2e385fa0ec9f789bb2d362/propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff", size = 229103 }, + { url = "https://files.pythonhosted.org/packages/fe/d5/04ac9cd4e51a57a96f78795e03c5a0ddb8f23ec098b86f92de028d7f2a6b/propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f", size = 226607 }, + { url = "https://files.pythonhosted.org/packages/e3/f0/24060d959ea41d7a7cc7fdbf68b31852331aabda914a0c63bdb0e22e96d6/propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec", size = 221153 }, + { url = "https://files.pythonhosted.org/packages/77/a7/3ac76045a077b3e4de4859a0753010765e45749bdf53bd02bc4d372da1a0/propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348", size = 222151 }, + { url = "https://files.pythonhosted.org/packages/e7/af/5e29da6f80cebab3f5a4dcd2a3240e7f56f2c4abf51cbfcc99be34e17f0b/propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6", size = 233812 }, + { url = "https://files.pythonhosted.org/packages/8c/89/ebe3ad52642cc5509eaa453e9f4b94b374d81bae3265c59d5c2d98efa1b4/propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6", size = 238829 }, + { url = "https://files.pythonhosted.org/packages/e9/2f/6b32f273fa02e978b7577159eae7471b3cfb88b48563b1c2578b2d7ca0bb/propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518", size = 230704 }, + { url = "https://files.pythonhosted.org/packages/5c/2e/f40ae6ff5624a5f77edd7b8359b208b5455ea113f68309e2b00a2e1426b6/propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246", size = 40050 }, + { url = "https://files.pythonhosted.org/packages/3b/77/a92c3ef994e47180862b9d7d11e37624fb1c00a16d61faf55115d970628b/propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1", size = 44117 }, + { url = "https://files.pythonhosted.org/packages/0f/2a/329e0547cf2def8857157f9477669043e75524cc3e6251cef332b3ff256f/propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc", size = 77002 }, + { url = "https://files.pythonhosted.org/packages/12/2d/c4df5415e2382f840dc2ecbca0eeb2293024bc28e57a80392f2012b4708c/propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9", size = 44639 }, + { url = "https://files.pythonhosted.org/packages/d0/5a/21aaa4ea2f326edaa4e240959ac8b8386ea31dedfdaa636a3544d9e7a408/propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439", size = 44049 }, + { url = "https://files.pythonhosted.org/packages/4e/3e/021b6cd86c0acc90d74784ccbb66808b0bd36067a1bf3e2deb0f3845f618/propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536", size = 224819 }, + { url = "https://files.pythonhosted.org/packages/3c/57/c2fdeed1b3b8918b1770a133ba5c43ad3d78e18285b0c06364861ef5cc38/propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629", size = 229625 }, + { url = "https://files.pythonhosted.org/packages/9d/81/70d4ff57bf2877b5780b466471bebf5892f851a7e2ca0ae7ffd728220281/propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b", size = 232934 }, + { url = "https://files.pythonhosted.org/packages/3c/b9/bb51ea95d73b3fb4100cb95adbd4e1acaf2cbb1fd1083f5468eeb4a099a8/propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052", size = 227361 }, + { url = "https://files.pythonhosted.org/packages/f1/20/3c6d696cd6fd70b29445960cc803b1851a1131e7a2e4ee261ee48e002bcd/propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce", size = 213904 }, + { url = "https://files.pythonhosted.org/packages/a1/cb/1593bfc5ac6d40c010fa823f128056d6bc25b667f5393781e37d62f12005/propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d", size = 212632 }, + { url = "https://files.pythonhosted.org/packages/6d/5c/e95617e222be14a34c709442a0ec179f3207f8a2b900273720501a70ec5e/propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce", size = 207897 }, + { url = "https://files.pythonhosted.org/packages/8e/3b/56c5ab3dc00f6375fbcdeefdede5adf9bee94f1fab04adc8db118f0f9e25/propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95", size = 208118 }, + { url = "https://files.pythonhosted.org/packages/86/25/d7ef738323fbc6ebcbce33eb2a19c5e07a89a3df2fded206065bd5e868a9/propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf", size = 217851 }, + { url = "https://files.pythonhosted.org/packages/b3/77/763e6cef1852cf1ba740590364ec50309b89d1c818e3256d3929eb92fabf/propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f", size = 222630 }, + { url = "https://files.pythonhosted.org/packages/4f/e9/0f86be33602089c701696fbed8d8c4c07b6ee9605c5b7536fd27ed540c5b/propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30", size = 216269 }, + { url = "https://files.pythonhosted.org/packages/cc/02/5ac83217d522394b6a2e81a2e888167e7ca629ef6569a3f09852d6dcb01a/propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6", size = 39472 }, + { url = "https://files.pythonhosted.org/packages/f4/33/d6f5420252a36034bc8a3a01171bc55b4bff5df50d1c63d9caa50693662f/propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1", size = 43363 }, + { url = "https://files.pythonhosted.org/packages/41/b6/c5319caea262f4821995dca2107483b94a3345d4607ad797c76cb9c36bcc/propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54", size = 11818 }, +] + +[[package]] +name = "protobuf" +version = "4.25.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/dd/48d5fdb68ec74d70fabcc252e434492e56f70944d9f17b6a15e3746d2295/protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584", size = 380315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/35/1b3c5a5e6107859c4ca902f4fbb762e48599b78129a05d20684fef4a4d04/protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8", size = 392457 }, + { url = "https://files.pythonhosted.org/packages/a7/ad/bf3f358e90b7e70bf7fb520702cb15307ef268262292d3bdb16ad8ebc815/protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea", size = 413449 }, + { url = "https://files.pythonhosted.org/packages/51/49/d110f0a43beb365758a252203c43eaaad169fe7749da918869a8c991f726/protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173", size = 394248 }, + { url = "https://files.pythonhosted.org/packages/c6/ab/0f384ca0bc6054b1a7b6009000ab75d28a5506e4459378b81280ae7fd358/protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d", size = 293717 }, + { url = "https://files.pythonhosted.org/packages/05/a6/094a2640be576d760baa34c902dcb8199d89bce9ed7dd7a6af74dcbbd62d/protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331", size = 294635 }, + { url = "https://files.pythonhosted.org/packages/33/90/f198a61df8381fb43ae0fe81b3d2718e8dcc51ae8502c7657ab9381fbc4f/protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41", size = 156467 }, +] + +[[package]] +name = "psutil" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/10/2a30b13c61e7cf937f4adf90710776b7918ed0a9c434e2c38224732af310/psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a", size = 508565 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/9e/8be43078a171381953cfee33c07c0d628594b5dbfc5157847b85022c2c1b/psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688", size = 247762 }, + { url = "https://files.pythonhosted.org/packages/1d/cb/313e80644ea407f04f6602a9e23096540d9dc1878755f3952ea8d3d104be/psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e", size = 248777 }, + { url = "https://files.pythonhosted.org/packages/65/8e/bcbe2025c587b5d703369b6a75b65d41d1367553da6e3f788aff91eaf5bd/psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38", size = 284259 }, + { url = "https://files.pythonhosted.org/packages/58/4d/8245e6f76a93c98aab285a43ea71ff1b171bcd90c9d238bf81f7021fb233/psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b", size = 287255 }, + { url = "https://files.pythonhosted.org/packages/27/c2/d034856ac47e3b3cdfa9720d0e113902e615f4190d5d1bdb8df4b2015fb2/psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a", size = 288804 }, + { url = "https://files.pythonhosted.org/packages/ea/55/5389ed243c878725feffc0d6a3bc5ef6764312b6fc7c081faaa2cfa7ef37/psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e", size = 250386 }, + { url = "https://files.pythonhosted.org/packages/11/91/87fa6f060e649b1e1a7b19a4f5869709fbf750b7c8c262ee776ec32f3028/psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be", size = 254228 }, +] + +[[package]] +name = "psycopg2" +version = "2.9.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/51/2007ea29e605957a17ac6357115d0c1a1b60c8c984951c19419b3474cdfd/psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11", size = 385672 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/a2/c51ca3e667c34e7852157b665e3d49418e68182081060231d514dd823225/psycopg2-2.9.10-cp311-cp311-win32.whl", hash = "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2", size = 1024538 }, + { url = "https://files.pythonhosted.org/packages/33/39/5a9a229bb5414abeb86e33b8fc8143ab0aecce5a7f698a53e31367d30caa/psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4", size = 1163736 }, + { url = "https://files.pythonhosted.org/packages/3d/16/4623fad6076448df21c1a870c93a9774ad8a7b4dd1660223b59082dd8fec/psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067", size = 1025113 }, + { url = "https://files.pythonhosted.org/packages/66/de/baed128ae0fc07460d9399d82e631ea31a1f171c0c4ae18f9808ac6759e3/psycopg2-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e", size = 1163951 }, + { url = "https://files.pythonhosted.org/packages/ae/49/a6cfc94a9c483b1fa401fbcb23aca7892f60c7269c5ffa2ac408364f80dc/psycopg2-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:91fd603a2155da8d0cfcdbf8ab24a2d54bca72795b90d2a3ed2b6da8d979dee2", size = 2569060 }, +] + +[[package]] +name = "pwdlib" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/a0/9daed437a6226f632a25d98d65d60ba02bdafa920c90dcb6454c611ead6c/pwdlib-0.2.1.tar.gz", hash = "sha256:9a1d8a8fa09a2f7ebf208265e55d7d008103cbdc82b9e4902ffdd1ade91add5e", size = 11699 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/f3/0dae5078a486f0fdf4d4a1121e103bc42694a9da9bea7b0f2c63f29cfbd3/pwdlib-0.2.1-py3-none-any.whl", hash = "sha256:1823dc6f22eae472b540e889ecf57fd424051d6a4023ec0bcf7f0de2d9d7ef8c", size = 8082 }, +] + +[package.optional-dependencies] +argon2 = [ + { name = "argon2-cffi" }, +] +bcrypt = [ + { name = "bcrypt" }, +] + +[[package]] +name = "pyarrow" +version = "18.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/7b/640785a9062bb00314caa8a387abce547d2a420cf09bd6c715fe659ccffb/pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73", size = 1118671 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/4d/a4988e7d82f4fbc797715db4185939a658eeffb07a25bab7262bed1ea076/pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854", size = 29554860 }, + { url = "https://files.pythonhosted.org/packages/59/03/3a42c5c1e4bd4c900ab62aa1ff6b472bdb159ba8f1c3e5deadab7222244f/pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c", size = 30867076 }, + { url = "https://files.pythonhosted.org/packages/75/7e/332055ac913373e89256dce9d14b7708f55f7bd5be631456c897f0237738/pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21", size = 39212135 }, + { url = "https://files.pythonhosted.org/packages/8c/64/5099cdb325828722ef7ffeba9a4696f238eb0cdeae227f831c2d77fcf1bd/pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6", size = 40125195 }, + { url = "https://files.pythonhosted.org/packages/83/88/1938d783727db1b178ff71bc6a6143d7939e406db83a9ec23cad3dad325c/pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe", size = 38641884 }, + { url = "https://files.pythonhosted.org/packages/5e/b5/9e14e9f7590e0eaa435ecea84dabb137284a4dbba7b3c337b58b65b76d95/pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0", size = 40076877 }, + { url = "https://files.pythonhosted.org/packages/4d/a3/817ac7fe0891a2d66e247e223080f3a6a262d8aefd77e11e8c27e6acf4e1/pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a", size = 25119811 }, + { url = "https://files.pythonhosted.org/packages/6a/50/12829e7111b932581e51dda51d5cb39207a056c30fe31ef43f14c63c4d7e/pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d", size = 29514620 }, + { url = "https://files.pythonhosted.org/packages/d1/41/468c944eab157702e96abab3d07b48b8424927d4933541ab43788bb6964d/pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee", size = 30856494 }, + { url = "https://files.pythonhosted.org/packages/68/f9/29fb659b390312a7345aeb858a9d9c157552a8852522f2c8bad437c29c0a/pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992", size = 39203624 }, + { url = "https://files.pythonhosted.org/packages/6e/f6/19360dae44200e35753c5c2889dc478154cd78e61b1f738514c9f131734d/pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54", size = 40139341 }, + { url = "https://files.pythonhosted.org/packages/bb/e6/9b3afbbcf10cc724312e824af94a2e993d8ace22994d823f5c35324cebf5/pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33", size = 38618629 }, + { url = "https://files.pythonhosted.org/packages/3a/2e/3b99f8a3d9e0ccae0e961978a0d0089b25fb46ebbcfb5ebae3cca179a5b3/pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30", size = 40078661 }, + { url = "https://files.pythonhosted.org/packages/76/52/f8da04195000099d394012b8d42c503d7041b79f778d854f410e5f05049a/pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99", size = 25092330 }, + { url = "https://files.pythonhosted.org/packages/cb/87/aa4d249732edef6ad88899399047d7e49311a55749d3c373007d034ee471/pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b", size = 29497406 }, + { url = "https://files.pythonhosted.org/packages/3c/c7/ed6adb46d93a3177540e228b5ca30d99fc8ea3b13bdb88b6f8b6467e2cb7/pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2", size = 30835095 }, + { url = "https://files.pythonhosted.org/packages/41/d7/ed85001edfb96200ff606943cff71d64f91926ab42828676c0fc0db98963/pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191", size = 39194527 }, + { url = "https://files.pythonhosted.org/packages/59/16/35e28eab126342fa391593415d79477e89582de411bb95232f28b131a769/pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa", size = 40131443 }, + { url = "https://files.pythonhosted.org/packages/0c/95/e855880614c8da20f4cd74fa85d7268c725cf0013dc754048593a38896a0/pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c", size = 38608750 }, + { url = "https://files.pythonhosted.org/packages/54/9d/f253554b1457d4fdb3831b7bd5f8f00f1795585a606eabf6fec0a58a9c38/pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c", size = 40066690 }, + { url = "https://files.pythonhosted.org/packages/2f/58/8912a2563e6b8273e8aa7b605a345bba5a06204549826f6493065575ebc0/pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181", size = 25081054 }, + { url = "https://files.pythonhosted.org/packages/82/f9/d06ddc06cab1ada0c2f2fd205ac8c25c2701182de1b9c4bf7a0a44844431/pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc", size = 29525542 }, + { url = "https://files.pythonhosted.org/packages/ab/94/8917e3b961810587ecbdaa417f8ebac0abb25105ae667b7aa11c05876976/pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386", size = 30829412 }, + { url = "https://files.pythonhosted.org/packages/5e/e3/3b16c3190f3d71d3b10f6758d2d5f7779ef008c4fd367cedab3ed178a9f7/pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324", size = 39119106 }, + { url = "https://files.pythonhosted.org/packages/1d/d6/5d704b0d25c3c79532f8c0639f253ec2803b897100f64bcb3f53ced236e5/pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8", size = 40090940 }, + { url = "https://files.pythonhosted.org/packages/37/29/366bc7e588220d74ec00e497ac6710c2833c9176f0372fe0286929b2d64c/pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9", size = 38548177 }, + { url = "https://files.pythonhosted.org/packages/c8/11/fabf6ecabb1fe5b7d96889228ca2a9158c4c3bb732e3b8ee3f7f6d40b703/pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba", size = 40043567 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pydantic" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/99/d0a5dca411e0a017762258013ba9905cd6e7baa9a3fd1fe8b6529472902e/pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a", size = 739834 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/fa/b7f815b8c9ad021c07f88875b601222ef5e70619391ade4a49234d12d278/pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8", size = 423875 }, +] + +[[package]] +name = "pydantic-core" +version = "2.20.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/e3/0d5ad91211dba310f7ded335f4dad871172b9cc9ce204f5a56d76ccd6247/pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4", size = 388371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/db/f6a724db226d990a329910727cfac43539ff6969edc217286dd05cda3ef6/pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312", size = 1834507 }, + { url = "https://files.pythonhosted.org/packages/9b/83/6f2bfe75209d557ae1c3550c1252684fc1827b8b12fbed84c3b4439e135d/pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88", size = 1773527 }, + { url = "https://files.pythonhosted.org/packages/93/ef/513ea76d7ca81f2354bb9c8d7839fc1157673e652613f7e1aff17d8ce05d/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc", size = 1787879 }, + { url = "https://files.pythonhosted.org/packages/31/0a/ac294caecf235f0cc651de6232f1642bb793af448d1cfc541b0dc1fd72b8/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43", size = 1774694 }, + { url = "https://files.pythonhosted.org/packages/46/a4/08f12b5512f095963550a7cb49ae010e3f8f3f22b45e508c2cb4d7744fce/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6", size = 1976369 }, + { url = "https://files.pythonhosted.org/packages/15/59/b2495be4410462aedb399071c71884042a2c6443319cbf62d00b4a7ed7a5/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121", size = 2691250 }, + { url = "https://files.pythonhosted.org/packages/3c/ae/fc99ce1ba791c9e9d1dee04ce80eef1dae5b25b27e3fc8e19f4e3f1348bf/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1", size = 2061462 }, + { url = "https://files.pythonhosted.org/packages/44/bb/eb07cbe47cfd638603ce3cb8c220f1a054b821e666509e535f27ba07ca5f/pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b", size = 1893923 }, + { url = "https://files.pythonhosted.org/packages/ce/ef/5a52400553b8faa0e7f11fd7a2ba11e8d2feb50b540f9e7973c49b97eac0/pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27", size = 1966779 }, + { url = "https://files.pythonhosted.org/packages/4c/5b/fb37fe341344d9651f5c5f579639cd97d50a457dc53901aa8f7e9f28beb9/pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b", size = 2109044 }, + { url = "https://files.pythonhosted.org/packages/70/1a/6f7278802dbc66716661618807ab0dfa4fc32b09d1235923bbbe8b3a5757/pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a", size = 1708265 }, + { url = "https://files.pythonhosted.org/packages/35/7f/58758c42c61b0bdd585158586fecea295523d49933cb33664ea888162daf/pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2", size = 1901750 }, + { url = "https://files.pythonhosted.org/packages/6f/47/ef0d60ae23c41aced42921728650460dc831a0adf604bfa66b76028cb4d0/pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231", size = 1839225 }, + { url = "https://files.pythonhosted.org/packages/6a/23/430f2878c9cd977a61bb39f71751d9310ec55cee36b3d5bf1752c6341fd0/pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9", size = 1768604 }, + { url = "https://files.pythonhosted.org/packages/9e/2b/ec4e7225dee79e0dc80ccc3c35ab33cc2c4bbb8a1a7ecf060e5e453651ec/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f", size = 1789767 }, + { url = "https://files.pythonhosted.org/packages/64/b0/38b24a1fa6d2f96af3148362e10737ec073768cd44d3ec21dca3be40a519/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52", size = 1772061 }, + { url = "https://files.pythonhosted.org/packages/5e/da/bb73274c42cb60decfa61e9eb0c9029da78b3b9af0a9de0309dbc8ff87b6/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237", size = 1974573 }, + { url = "https://files.pythonhosted.org/packages/c8/65/41693110fb3552556180460daffdb8bbeefb87fc026fd9aa4b849374015c/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe", size = 2625596 }, + { url = "https://files.pythonhosted.org/packages/09/b3/a5a54b47cccd1ab661ed5775235c5e06924753c2d4817737c5667bfa19a8/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e", size = 2099064 }, + { url = "https://files.pythonhosted.org/packages/52/fa/443a7a6ea54beaba45ff3a59f3d3e6e3004b7460bcfb0be77bcf98719d3b/pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24", size = 1900345 }, + { url = "https://files.pythonhosted.org/packages/8e/e6/9aca9ffae60f9cdf0183069de3e271889b628d0fb175913fcb3db5618fb1/pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1", size = 1968252 }, + { url = "https://files.pythonhosted.org/packages/46/5e/6c716810ea20a6419188992973a73c2fb4eb99cd382368d0637ddb6d3c99/pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd", size = 2119191 }, + { url = "https://files.pythonhosted.org/packages/06/fc/6123b00a9240fbb9ae0babad7a005d51103d9a5d39c957a986f5cdd0c271/pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688", size = 1717788 }, + { url = "https://files.pythonhosted.org/packages/d5/36/e61ad5a46607a469e2786f398cd671ebafcd9fb17f09a2359985c7228df5/pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d", size = 1898188 }, + { url = "https://files.pythonhosted.org/packages/49/75/40b0e98b658fdba02a693b3bacb4c875a28bba87796c7b13975976597d8c/pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686", size = 1838688 }, + { url = "https://files.pythonhosted.org/packages/75/02/d8ba2d4a266591a6a623c68b331b96523d4b62ab82a951794e3ed8907390/pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a", size = 1768409 }, + { url = "https://files.pythonhosted.org/packages/91/ae/25ecd9bc4ce4993e99a1a3c9ab111c082630c914260e129572fafed4ecc2/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b", size = 1789317 }, + { url = "https://files.pythonhosted.org/packages/7a/80/72057580681cdbe55699c367963d9c661b569a1d39338b4f6239faf36cdc/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19", size = 1771949 }, + { url = "https://files.pythonhosted.org/packages/a2/be/d9bbabc55b05019013180f141fcaf3b14dbe15ca7da550e95b60c321009a/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac", size = 1974392 }, + { url = "https://files.pythonhosted.org/packages/79/2d/7bcd938c6afb0f40293283f5f09988b61fb0a4f1d180abe7c23a2f665f8e/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703", size = 2625565 }, + { url = "https://files.pythonhosted.org/packages/ac/88/ca758e979457096008a4b16a064509028e3e092a1e85a5ed6c18ced8da88/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c", size = 2098784 }, + { url = "https://files.pythonhosted.org/packages/eb/de/2fad6d63c3c42e472e985acb12ec45b7f56e42e6f4cd6dfbc5e87ee8678c/pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83", size = 1900198 }, + { url = "https://files.pythonhosted.org/packages/fe/50/077c7f35b6488dc369a6d22993af3a37901e198630f38ac43391ca730f5b/pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203", size = 1968005 }, + { url = "https://files.pythonhosted.org/packages/5d/1f/f378631574ead46d636b9a04a80ff878b9365d4b361b1905ef1667d4182a/pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0", size = 2118920 }, + { url = "https://files.pythonhosted.org/packages/7a/ea/e4943f17df7a3031d709481fe4363d4624ae875a6409aec34c28c9e6cf59/pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e", size = 1717397 }, + { url = "https://files.pythonhosted.org/packages/13/63/b95781763e8d84207025071c0cec16d921c0163c7a9033ae4b9a0e020dc7/pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20", size = 1898013 }, +] + +[[package]] +name = "pydantic-settings" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/41/19b62b99e7530cfa1d6ccd16199afd9289a12929bef1a03aa4382b22e683/pydantic_settings-2.7.0.tar.gz", hash = "sha256:ac4bfd4a36831a48dbf8b2d9325425b549a0a6f18cea118436d728eb4f1c4d66", size = 79743 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/00/57b4540deb5c3a39ba689bb519a4e03124b24ab8589e618be4aac2c769bd/pydantic_settings-2.7.0-py3-none-any.whl", hash = "sha256:e00c05d5fa6cbbb227c84bd7487c5c1065084119b750df7c8c1a554aed236eb5", size = 29549 }, +] + +[[package]] +name = "pygments" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", size = 4891905 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 }, +] + +[[package]] +name = "pyjwt" +version = "2.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/68/ce067f09fca4abeca8771fe667d89cc347d1e99da3e093112ac329c6020e/pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c", size = 78825 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/84/0fdf9b18ba31d69877bd39c9cd6052b47f3761e9910c15de788e519f079f/PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850", size = 22344 }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pylance" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pyarrow" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/fb/5e269c0c310646099fea4cc47872e21172d3d917fe68a036bf2f3e42b374/pylance-0.19.1-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:a254d09690a5e09cadc5fecc7b43b2bfc20b477e0f0ba31497e1d6abb36b524a", size = 28569476 }, + { url = "https://files.pythonhosted.org/packages/65/47/390622a3f7b2873966c0e197979afb72eb3cb0352342bdff6581c8600fa4/pylance-0.19.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9859c372b2d7fe443b6218f62e9d77caf94961cac73b274c85b724f20dd6b690", size = 26540391 }, + { url = "https://files.pythonhosted.org/packages/47/8a/2a8a07af0983577b8fc68eeb85fbb3ea0e774d84125a6395d748fde1b580/pylance-0.19.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8315152f57329e7668ff5c82c252591ea0e3d2aed702dd19a42d645945e7a07e", size = 30423804 }, + { url = "https://files.pythonhosted.org/packages/ee/33/eee18d4d8996e0db79c71231b653b5c9ae86a9002e3e3d708e1461717f5c/pylance-0.19.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:7c2e0e00b40214edae576075dbfa432cadaf5ba21354b0c46f307daf4e77403f", size = 28979799 }, + { url = "https://files.pythonhosted.org/packages/3b/af/3bf6d0c9dc52e2ae048c575249527f3c2cc8a4df85c94905900c719b42e0/pylance-0.19.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e26ce273840912c45dd2b8f6f8fb9082c1c788d696e11b78ddad3949e3892d50", size = 30359171 }, + { url = "https://files.pythonhosted.org/packages/d9/73/0641124631a4f5f03d988c4a8000046d4c182340719ba4cf228cb45c5dca/pylance-0.19.1-cp39-abi3-win_amd64.whl", hash = "sha256:b341e547c995b5d6b32eb63e1e015d31b608de49a9ad03f8981453f4c667e8e1", size = 28387696 }, +] + +[[package]] +name = "pylint" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "astroid" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "dill" }, + { name = "isort" }, + { name = "mccabe" }, + { name = "platformdirs" }, + { name = "tomlkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/d8/4471b2cb4ad18b4af717918c468209bd2bd5a02c52f60be5ee8a71b5af2c/pylint-3.3.2.tar.gz", hash = "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01", size = 1516485 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/55/5eaf6c415f6ddb09b9b039278823a8e27fb81ea7a34ec80c6d9223b17f2e/pylint-3.3.2-py3-none-any.whl", hash = "sha256:77f068c287d49b8683cd7c6e624243c74f92890f767f106ffa1ddf3c0a54cb7a", size = 521873 }, +] + +[[package]] +name = "pymilvus" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio" }, + { name = "milvus-lite", marker = "sys_platform != 'win32'" }, + { name = "pandas" }, + { name = "protobuf" }, + { name = "python-dotenv" }, + { name = "setuptools" }, + { name = "ujson" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/3d/e6b593cf456e4300e3aa58b76e55f392166c5df2ea3605666ad6200503fb/pymilvus-2.5.0.tar.gz", hash = "sha256:4da14a3bd957a4921166f9355fd1f1ac5c5e4e80b46f12f64d9c9a6dcb8cb395", size = 1238729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/f1/76af6c8e1481879f5e0c0d885ab899ab8869fd939b27ac7a0b6c3b3b4ebe/pymilvus-2.5.0-py3-none-any.whl", hash = "sha256:a0e8653d8fe78019abfda79b3404ef7423f312501e8cbd7dc728051ce8732652", size = 212848 }, +] + +[[package]] +name = "pypandoc" +version = "1.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/76/4813088c2df396b562a944887ec42983f268b75091c03b48bdaf657a7229/pypandoc-1.14.tar.gz", hash = "sha256:6b4c45f5f1b9fb5bb562079164806bdbbc3e837b5402bcf3f1139edc5730a197", size = 32742 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/bd/cf1dd70b95f3366f3c457c5259ed8f032122210441407b6ed281d7fcbb8c/pypandoc-1.14-py3-none-any.whl", hash = "sha256:1315c7ad7fac7236dacf69a05b521ed2c3f1d0177f70e9b92bfffce6c023df22", size = 21266 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, +] + +[[package]] +name = "pypdf" +version = "4.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/65/2ed7c9e1d31d860f096061b3dd2d665f501e09faaa0409a3f0d719d2a16d/pypdf-4.3.1.tar.gz", hash = "sha256:b2f37fe9a3030aa97ca86067a56ba3f9d3565f9a791b305c7355d8392c30d91b", size = 293266 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/60/eccdd92dd4af3e4bea6d6a342f7588c618a15b9bec4b968af581e498bcc4/pypdf-4.3.1-py3-none-any.whl", hash = "sha256:64b31da97eda0771ef22edb1bfecd5deee4b72c3d1736b7df2689805076d6418", size = 295825 }, +] + +[[package]] +name = "pytest" +version = "7.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287 }, +] + +[[package]] +name = "pytest-asyncio" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/53/57663d99acaac2fcdafdc697e52a9b1b7d6fcf36616281ff9768a44e7ff3/pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45", size = 30656 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/ce/1e4b53c213dce25d6e8b163697fbce2d43799d76fa08eea6ad270451c370/pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b", size = 13368 }, +] + +[[package]] +name = "pytest-repeat" +version = "0.9.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/5e/99365eb229efff0b1bd475886150fc6db9937ab7e1bd21f6f65c1279e0eb/pytest_repeat-0.9.3.tar.gz", hash = "sha256:ffd3836dfcd67bb270bec648b330e20be37d2966448c4148c4092d1e8aba8185", size = 6272 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/a8/0a0aec0c2541b8baf4a0b95af2ba99abce217ee43534adf9cb7c908cf184/pytest_repeat-0.9.3-py3-none-any.whl", hash = "sha256:26ab2df18226af9d5ce441c858f273121e92ff55f5bb311d25755b8d7abdd8ed", size = 4196 }, +] + +[[package]] +name = "pytest-xdist" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/c4/3c310a19bc1f1e9ef50075582652673ef2bfc8cd62afef9585683821902f/pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d", size = 84060 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7", size = 46108 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-docx" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/e4/386c514c53684772885009c12b67a7edd526c15157778ac1b138bc75063e/python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd", size = 5656581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/3d/330d9efbdb816d3f60bf2ad92f05e1708e4a1b9abe80461ac3444c83f749/python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe", size = 244315 }, +] + +[[package]] +name = "python-dotenv" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 }, +] + +[[package]] +name = "python-iso639" +version = "2024.10.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/54/f88a3fb5802ce026f8111ab75cafc8d57b2cd455e49cada6a65c28e5726f/python_iso639-2024.10.22.tar.gz", hash = "sha256:750f21b6a0bc6baa24253a3d8aae92b582bf93aa40988361cd96852c2c6d9a52", size = 280240 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/62/aa1cc476c53f58a18860e98ed031468f42446b6bed7568e47058f659291e/python_iso639-2024.10.22-py3-none-any.whl", hash = "sha256:02d3ce2e01c6896b30b9cbbd3e1c8ee0d7221250b5d63ea9803e0d2a81fd1047", size = 274898 }, +] + +[[package]] +name = "python-magic" +version = "0.4.27" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/db/0b3e28ac047452d079d375ec6798bf76a036a08182dbb39ed38116a49130/python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b", size = 14677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/73/9f872cb81fc5c3bb48f7227872c28975f998f3e7c2b1c16e95e6432bbb90/python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3", size = 13840 }, +] + +[[package]] +name = "python-multipart" +version = "0.0.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/40/22/edea41c2d4a22e666c0c7db7acdcbf7bc8c1c1f7d3b3ca246ec982fec612/python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538", size = 36452 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/fb/275137a799169392f1fa88fff2be92f16eee38e982720a8aaadefc4a36b2/python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d", size = 24453 }, +] + +[[package]] +name = "python-oxmsg" +version = "0.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "olefile" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/d4/4ec721fd433453fe05344f41f17458775d111e9f6c668ce1a0fccec0fecd/python_oxmsg-0.0.1.tar.gz", hash = "sha256:b65c1f93d688b85a9410afa824192a1ddc39da359b04a0bd2cbd3874e84d4994", size = 34541 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/c8/fb23e1e7723ba9200b75bc121f22f67498ae098a202f1646acc4f6a54f5c/python_oxmsg-0.0.1-py3-none-any.whl", hash = "sha256:8ea7d5dda1bc161a413213da9e18ed152927c1fda2feaf5d1f02192d8ad45eea", size = 31426 }, +] + +[[package]] +name = "python-pptx" +version = "1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "pillow" }, + { name = "typing-extensions" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/a9/0c0db8d37b2b8a645666f7fd8accea4c6224e013c42b1d5c17c93590cd06/python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095", size = 10109297 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/4f/00be2196329ebbff56ce564aa94efb0fbc828d00de250b1980de1a34ab49/python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", size = 472788 }, +] + +[[package]] +name = "pytz" +version = "2024.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, +] + +[[package]] +name = "pywin32" +version = "308" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156 }, + { url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559 }, + { url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495 }, + { url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729 }, + { url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015 }, + { url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033 }, + { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579 }, + { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056 }, + { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "qdrant-client" +version = "1.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio" }, + { name = "grpcio-tools" }, + { name = "httpx", extra = ["http2"] }, + { name = "numpy" }, + { name = "portalocker" }, + { name = "pydantic" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/15/5e/ec560881e086f893947c8798949c72de5cfae9453fd05c2250f8dfeaa571/qdrant_client-1.12.1.tar.gz", hash = "sha256:35e8e646f75b7b883b3d2d0ee4c69c5301000bba41c82aa546e985db0f1aeb72", size = 237441 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/c0/eef4fe9dad6d41333f7dc6567fa8144ffc1837c8a0edfc2317d50715335f/qdrant_client-1.12.1-py3-none-any.whl", hash = "sha256:b2d17ce18e9e767471368380dd3bbc4a0e3a0e2061fedc9af3542084b48451e0", size = 267171 }, +] + +[[package]] +name = "rapidfuzz" +version = "3.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/aa/25e5a20131369d82c7b8288c99c2c3011ec47a3f5953ccc9cb8145720be5/rapidfuzz-3.11.0.tar.gz", hash = "sha256:a53ca4d3f52f00b393fab9b5913c5bafb9afc27d030c8a1db1283da6917a860f", size = 57983000 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/ac/9ca008834104ad138fbfe2d7ae4443ada55e00c4eb4272d288897e8763b8/rapidfuzz-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8724a978f8af7059c5323d523870bf272a097478e1471295511cf58b2642ff83", size = 1955019 }, + { url = "https://files.pythonhosted.org/packages/4c/55/d026c01c9312c9c2a413679052a9bb884743fc5655e59339116d83a2125b/rapidfuzz-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b63cb1f2eb371ef20fb155e95efd96e060147bdd4ab9fc400c97325dfee9fe1", size = 1427753 }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5f3fae81dd1efdf47da19641e321ae84b4f49a5a7b2ab3ff78bd04a0ae7f/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82497f244aac10b20710448645f347d862364cc4f7d8b9ba14bd66b5ce4dec18", size = 1411472 }, + { url = "https://files.pythonhosted.org/packages/3c/3f/770b0fca00faf42983fe21fbd379f429dc2600c58d7015f969fb1f73c1db/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:339607394941801e6e3f6c1ecd413a36e18454e7136ed1161388de674f47f9d9", size = 5614973 }, + { url = "https://files.pythonhosted.org/packages/08/6f/e3df1c41adf27f4b8a95c9de947ed49e7311a676cd05bdd62a17bb1f21ec/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84819390a36d6166cec706b9d8f0941f115f700b7faecab5a7e22fc367408bc3", size = 1665667 }, + { url = "https://files.pythonhosted.org/packages/1a/9b/6c91b98dc70270c35913f359c17e30d4185c83663c4721363540f4c03016/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eea8d9e20632d68f653455265b18c35f90965e26f30d4d92f831899d6682149b", size = 1676166 }, + { url = "https://files.pythonhosted.org/packages/59/9d/eec7a1bfd3566fb17617b41bfb19556c483241d6864eea3c01b88efe5459/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b659e1e2ea2784a9a397075a7fc395bfa4fe66424042161c4bcaf6e4f637b38", size = 3130890 }, + { url = "https://files.pythonhosted.org/packages/26/7c/0a4bb5fbb03a362ea3e1409515d3ae641d9bc869c1375d97d8c47e369cc0/rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1315cd2a351144572e31fe3df68340d4b83ddec0af8b2e207cd32930c6acd037", size = 2339850 }, + { url = "https://files.pythonhosted.org/packages/f8/c1/6b839db83caaa47721398b76390a3145202beb108fa433e842879b497439/rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a7743cca45b4684c54407e8638f6d07b910d8d811347b9d42ff21262c7c23245", size = 6941921 }, + { url = "https://files.pythonhosted.org/packages/cc/c9/eaac43bb5e44f3594afddbbdb1a28d7bc0bcb69f93ed9a2ef0c949a48fb2/rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5bb636b0150daa6d3331b738f7c0f8b25eadc47f04a40e5c23c4bfb4c4e20ae3", size = 2717551 }, + { url = "https://files.pythonhosted.org/packages/ef/d3/06ca5ee6b7f030f6527ea1e80fe9a4ab3597e86bc783574e3fc2b05a5265/rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:42f4dd264ada7a9aa0805ea0da776dc063533917773cf2df5217f14eb4429eae", size = 3259550 }, + { url = "https://files.pythonhosted.org/packages/74/d8/094e75ee0424cce329901a0ff98c1821fd5d9dbc11bcdc9a3fddd2a09c4c/rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51f24cb39e64256221e6952f22545b8ce21cacd59c0d3e367225da8fc4b868d8", size = 4173546 }, + { url = "https://files.pythonhosted.org/packages/d7/81/f263059e3d9f11b076751ac7ef4eba303fa7f11e32155658953f1697c274/rapidfuzz-3.11.0-cp311-cp311-win32.whl", hash = "sha256:aaf391fb6715866bc14681c76dc0308f46877f7c06f61d62cc993b79fc3c4a2a", size = 1842172 }, + { url = "https://files.pythonhosted.org/packages/33/04/dc42c787f02505a4ca0a961172e8353ceee74ea378b795f3e49686e944b7/rapidfuzz-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebadd5b8624d8ad503e505a99b8eb26fe3ea9f8e9c2234e805a27b269e585842", size = 1621122 }, + { url = "https://files.pythonhosted.org/packages/4e/0f/461e709bd641922a32bc034976963acbb11d8cf0af28b526f3f35ae07975/rapidfuzz-3.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:d895998fec712544c13cfe833890e0226585cf0391dd3948412441d5d68a2b8c", size = 864792 }, + { url = "https://files.pythonhosted.org/packages/c5/54/954ae2dc7dcb53f5f0953379a4a175d9c2f5e393656ab042843e53780d32/rapidfuzz-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f382fec4a7891d66fb7163c90754454030bb9200a13f82ee7860b6359f3f2fa8", size = 1938694 }, + { url = "https://files.pythonhosted.org/packages/f9/74/4682d3370821db5374c0f192d1e4123598190cb53d88936016187f80f154/rapidfuzz-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dfaefe08af2a928e72344c800dcbaf6508e86a4ed481e28355e8d4b6a6a5230e", size = 1423836 }, + { url = "https://files.pythonhosted.org/packages/e7/78/ce3d72767e186a9deca30dccb5096cfb03ec49e8e3abf2836ab10d1b4f74/rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92ebb7c12f682b5906ed98429f48a3dd80dd0f9721de30c97a01473d1a346576", size = 1393199 }, + { url = "https://files.pythonhosted.org/packages/3c/21/26bdbe846726ff7793789da07e155699cafa3ba3ed3bee86d472b4762121/rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a1b3ebc62d4bcdfdeba110944a25ab40916d5383c5e57e7c4a8dc0b6c17211a", size = 5543400 }, + { url = "https://files.pythonhosted.org/packages/c9/d5/78e922cfbfc67011ecee9f6c2fd630dee68650d23b9ce78316386a3d8c88/rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c6d7fea39cb33e71de86397d38bf7ff1a6273e40367f31d05761662ffda49e4", size = 1642855 }, + { url = "https://files.pythonhosted.org/packages/df/bb/dcf084c03c46968c3fbc52a33f2a725e0b8bb54ed714f0866c7dad747358/rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99aebef8268f2bc0b445b5640fd3312e080bd17efd3fbae4486b20ac00466308", size = 1669853 }, + { url = "https://files.pythonhosted.org/packages/ec/3a/9aa7a2c5b611e8d465e82c1d5f8278be7335769165f68f3ffc5a169f4a23/rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4469307f464ae3089acf3210b8fc279110d26d10f79e576f385a98f4429f7d97", size = 3129941 }, + { url = "https://files.pythonhosted.org/packages/d3/15/2bbab50a2634b25593e36241ab9629be253b8c6ea28a34ba6b856bfea661/rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:eb97c53112b593f89a90b4f6218635a9d1eea1d7f9521a3b7d24864228bbc0aa", size = 2302199 }, + { url = "https://files.pythonhosted.org/packages/c6/7c/e3ed92b89c657348c41708fe3b856ebc982c4b220b47299bdef8da374b20/rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef8937dae823b889c0273dfa0f0f6c46a3658ac0d851349c464d1b00e7ff4252", size = 6904702 }, + { url = "https://files.pythonhosted.org/packages/bd/4f/eed77097068bffb692d6389ae19a531c52a896275e9f5c00566207767537/rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d95f9e9f3777b96241d8a00d6377cc9c716981d828b5091082d0fe3a2924b43e", size = 2679287 }, + { url = "https://files.pythonhosted.org/packages/1f/dc/d2d5dcd5b33a5b394485c67aa13674c8345826af8d3ba0702c06ab2f6430/rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:b1d67d67f89e4e013a5295e7523bc34a7a96f2dba5dd812c7c8cb65d113cbf28", size = 3224946 }, + { url = "https://files.pythonhosted.org/packages/8f/af/17c0c29ded64e464e626dd43fc2e3028c1fa929d10e8201fb2aec654e5b3/rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d994cf27e2f874069884d9bddf0864f9b90ad201fcc9cb2f5b82bacc17c8d5f2", size = 4144678 }, + { url = "https://files.pythonhosted.org/packages/66/5d/5dc02c87d9a0e64e0abd728d3255ddce8475e06b6be3f732a460f0a360c9/rapidfuzz-3.11.0-cp312-cp312-win32.whl", hash = "sha256:ba26d87fe7fcb56c4a53b549a9e0e9143f6b0df56d35fe6ad800c902447acd5b", size = 1824882 }, + { url = "https://files.pythonhosted.org/packages/b7/da/a37d532cbefd7242191abf18f438b315bf5c72d742f78414a8ec1b7396cf/rapidfuzz-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b1f7efdd7b7adb32102c2fa481ad6f11923e2deb191f651274be559d56fc913b", size = 1606419 }, + { url = "https://files.pythonhosted.org/packages/92/d0/1406d6e110aff87303e98f47adc5e76ef2e69d51cdd08b2d463520158cab/rapidfuzz-3.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:ed78c8e94f57b44292c1a0350f580e18d3a3c5c0800e253f1583580c1b417ad2", size = 858655 }, + { url = "https://files.pythonhosted.org/packages/8a/30/984f1013d28b88304386c8e70b5d63db4765c28be8d9ef68d177c9addc77/rapidfuzz-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e60814edd0c9b511b5f377d48b9782b88cfe8be07a98f99973669299c8bb318a", size = 1931354 }, + { url = "https://files.pythonhosted.org/packages/a4/8a/41d4f95c5742a8a47c0e96c02957f72f8c34411cecde87fe371d5e09807e/rapidfuzz-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f28952da055dbfe75828891cd3c9abf0984edc8640573c18b48c14c68ca5e06", size = 1417918 }, + { url = "https://files.pythonhosted.org/packages/e3/26/031ac8366831da6afc5f25462196eab0e0caf9422c83c007307e23a6f010/rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e8f93bc736020351a6f8e71666e1f486bb8bd5ce8112c443a30c77bfde0eb68", size = 1388327 }, + { url = "https://files.pythonhosted.org/packages/17/1b/927edcd3b540770d3d6d52fe079c6bffdb99e9dfa4b73585bee2a8bd6504/rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76a4a11ba8f678c9e5876a7d465ab86def047a4fcc043617578368755d63a1bc", size = 5513214 }, + { url = "https://files.pythonhosted.org/packages/0d/a2/c1e4f35e7bfbbd97a665f8cd119d8bd4a085f1721366cd76582dc022131b/rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc0e0d41ad8a056a9886bac91ff9d9978e54a244deb61c2972cc76b66752de9c", size = 1638560 }, + { url = "https://files.pythonhosted.org/packages/39/3f/6827972efddb1e357a0b6165ae9e310d7dc5c078af3023893365c212641b/rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8ea35f2419c7d56b3e75fbde2698766daedb374f20eea28ac9b1f668ef4f74", size = 1667185 }, + { url = "https://files.pythonhosted.org/packages/cc/5d/6902b93e1273e69ea087afd16e7504099bcb8d712a9f69cb649ea05ca7e1/rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd340bbd025302276b5aa221dccfe43040c7babfc32f107c36ad783f2ffd8775", size = 3107466 }, + { url = "https://files.pythonhosted.org/packages/a6/02/bdb2048c9b8edf4cd82c2e8f6a8ed9af0fbdf91810ca2b36d1be6fc996d8/rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:494eef2c68305ab75139034ea25328a04a548d297712d9cf887bf27c158c388b", size = 2302041 }, + { url = "https://files.pythonhosted.org/packages/12/91/0bbe51e3c15c02578487fd10a14692a40677ea974098d8d376bafd627a89/rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5a167344c1d6db06915fb0225592afdc24d8bafaaf02de07d4788ddd37f4bc2f", size = 6899969 }, + { url = "https://files.pythonhosted.org/packages/27/9d/09b85adfd5829f60bd6dbe53ba66dad22f93a281d494a5638b5f20fb6a8a/rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c7af25bda96ac799378ac8aba54a8ece732835c7b74cfc201b688a87ed11152", size = 2669022 }, + { url = "https://files.pythonhosted.org/packages/cb/07/6fb723963243335c3bf73925914b6998649d642eff550187454d5bb3d077/rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d2a0f7e17f33e7890257367a1662b05fecaf56625f7dbb6446227aaa2b86448b", size = 3229475 }, + { url = "https://files.pythonhosted.org/packages/3a/8e/e9af6da2e235aa29ad2bb0a1fc2472b2949ed8d9ff8fb0f05b4bfbbf7675/rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d0d26c7172bdb64f86ee0765c5b26ea1dc45c52389175888ec073b9b28f4305", size = 4143861 }, + { url = "https://files.pythonhosted.org/packages/fd/d8/4677e36e958b4d95d039d254d597db9c020896c8130911dc36b136373b87/rapidfuzz-3.11.0-cp313-cp313-win32.whl", hash = "sha256:6ad02bab756751c90fa27f3069d7b12146613061341459abf55f8190d899649f", size = 1822624 }, + { url = "https://files.pythonhosted.org/packages/e8/97/1c782140e688ea2c3337d94516c635c575aa39fe62782fd53ad5d2119df4/rapidfuzz-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:b1472986fd9c5d318399a01a0881f4a0bf4950264131bb8e2deba9df6d8c362b", size = 1604273 }, + { url = "https://files.pythonhosted.org/packages/a6/83/8b713d50bec947e945a79be47f772484307fc876c426fb26c6f369098389/rapidfuzz-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c408f09649cbff8da76f8d3ad878b64ba7f7abdad1471efb293d2c075e80c822", size = 857385 }, +] + +[[package]] +name = "redis" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/da/d283a37303a995cd36f8b92db85135153dc4f7a8e4441aa827721b442cfb/redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f", size = 4608355 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4", size = 261502 }, +] + +[[package]] +name = "referencing" +version = "0.35.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/73ca1f8e72fff6fa52119dbd185f73a907b1989428917b24cff660129b6d/referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", size = 62991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/59/2056f61236782a2c86b33906c025d4f4a0b17be0161b63b70fd9e8775d36/referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de", size = 26684 }, +] + +[[package]] +name = "regex" +version = "2024.11.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669 }, + { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684 }, + { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589 }, + { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121 }, + { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275 }, + { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257 }, + { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727 }, + { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667 }, + { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963 }, + { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700 }, + { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592 }, + { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929 }, + { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213 }, + { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734 }, + { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052 }, + { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 }, + { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 }, + { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 }, + { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 }, + { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 }, + { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 }, + { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 }, + { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 }, + { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 }, + { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 }, + { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 }, + { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 }, + { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 }, + { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 }, + { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 }, + { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 }, + { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 }, + { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 }, + { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 }, + { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 }, + { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 }, + { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 }, + { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 }, + { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 }, + { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 }, + { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 }, + { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 }, + { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 }, + { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 }, + { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/52/531ef197b426646f26b53815a7d2a67cb7a331ef098bb276db26a68ac49f/requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a", size = 52027 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/bb/5deac77a9af870143c684ab46a7934038a53eb4aa975bc0687ed6ca2c610/requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5", size = 23892 }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 }, +] + +[[package]] +name = "requirements-parser" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "types-setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/70/80ed53ebd21853855aad552d4ed6c4934df62cd32fe9a3669fcdef59429c/requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920", size = 23663 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/33/190393a7d36872e237cbc99e6c44d9a078a1ba7b406462fe6eafd5a28e04/requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684", size = 14800 }, +] + +[[package]] +name = "rich" +version = "13.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 }, +] + +[[package]] +name = "rpds-py" +version = "0.22.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/80/cce854d0921ff2f0a9fa831ba3ad3c65cee3a46711addf39a2af52df2cfd/rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", size = 26771 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/ad/8d1ddf78f2805a71253fcd388017e7b4a0615c22c762b6d35301fef20106/rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", size = 359773 }, + { url = "https://files.pythonhosted.org/packages/c8/75/68c15732293a8485d79fe4ebe9045525502a067865fa4278f178851b2d87/rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", size = 349214 }, + { url = "https://files.pythonhosted.org/packages/3c/4c/7ce50f3070083c2e1b2bbd0fb7046f3da55f510d19e283222f8f33d7d5f4/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", size = 380477 }, + { url = "https://files.pythonhosted.org/packages/9a/e9/835196a69cb229d5c31c13b8ae603bd2da9a6695f35fe4270d398e1db44c/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb", size = 386171 }, + { url = "https://files.pythonhosted.org/packages/f9/8e/33fc4eba6683db71e91e6d594a2cf3a8fbceb5316629f0477f7ece5e3f75/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2", size = 422676 }, + { url = "https://files.pythonhosted.org/packages/37/47/2e82d58f8046a98bb9497a8319604c92b827b94d558df30877c4b3c6ccb3/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0", size = 446152 }, + { url = "https://files.pythonhosted.org/packages/e1/78/79c128c3e71abbc8e9739ac27af11dc0f91840a86fce67ff83c65d1ba195/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1", size = 381300 }, + { url = "https://files.pythonhosted.org/packages/c9/5b/2e193be0e8b228c1207f31fa3ea79de64dadb4f6a4833111af8145a6bc33/rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d", size = 409636 }, + { url = "https://files.pythonhosted.org/packages/c2/3f/687c7100b762d62186a1c1100ffdf99825f6fa5ea94556844bbbd2d0f3a9/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648", size = 556708 }, + { url = "https://files.pythonhosted.org/packages/8c/a2/c00cbc4b857e8b3d5e7f7fc4c81e23afd8c138b930f4f3ccf9a41a23e9e4/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74", size = 583554 }, + { url = "https://files.pythonhosted.org/packages/d0/08/696c9872cf56effdad9ed617ac072f6774a898d46b8b8964eab39ec562d2/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a", size = 552105 }, + { url = "https://files.pythonhosted.org/packages/18/1f/4df560be1e994f5adf56cabd6c117e02de7c88ee238bb4ce03ed50da9d56/rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64", size = 220199 }, + { url = "https://files.pythonhosted.org/packages/b8/1b/c29b570bc5db8237553002788dc734d6bd71443a2ceac2a58202ec06ef12/rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c", size = 231775 }, + { url = "https://files.pythonhosted.org/packages/75/47/3383ee3bd787a2a5e65a9b9edc37ccf8505c0a00170e3a5e6ea5fbcd97f7/rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e", size = 352334 }, + { url = "https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56", size = 342111 }, + { url = "https://files.pythonhosted.org/packages/7d/06/395a13bfaa8a28b302fb433fb285a67ce0ea2004959a027aea8f9c52bad4/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45", size = 384286 }, + { url = "https://files.pythonhosted.org/packages/43/52/d8eeaffab047e6b7b7ef7f00d5ead074a07973968ffa2d5820fa131d7852/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e", size = 391739 }, + { url = "https://files.pythonhosted.org/packages/83/31/52dc4bde85c60b63719610ed6f6d61877effdb5113a72007679b786377b8/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d", size = 427306 }, + { url = "https://files.pythonhosted.org/packages/70/d5/1bab8e389c2261dba1764e9e793ed6830a63f830fdbec581a242c7c46bda/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38", size = 442717 }, + { url = "https://files.pythonhosted.org/packages/82/a1/a45f3e30835b553379b3a56ea6c4eb622cf11e72008229af840e4596a8ea/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15", size = 385721 }, + { url = "https://files.pythonhosted.org/packages/a6/27/780c942de3120bdd4d0e69583f9c96e179dfff082f6ecbb46b8d6488841f/rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059", size = 415824 }, + { url = "https://files.pythonhosted.org/packages/94/0b/aa0542ca88ad20ea719b06520f925bae348ea5c1fdf201b7e7202d20871d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e", size = 561227 }, + { url = "https://files.pythonhosted.org/packages/0d/92/3ed77d215f82c8f844d7f98929d56cc321bb0bcfaf8f166559b8ec56e5f1/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61", size = 587424 }, + { url = "https://files.pythonhosted.org/packages/09/42/cacaeb047a22cab6241f107644f230e2935d4efecf6488859a7dd82fc47d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7", size = 555953 }, + { url = "https://files.pythonhosted.org/packages/e6/52/c921dc6d5f5d45b212a456c1f5b17df1a471127e8037eb0972379e39dff4/rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627", size = 221339 }, + { url = "https://files.pythonhosted.org/packages/f2/c7/f82b5be1e8456600395366f86104d1bd8d0faed3802ad511ef6d60c30d98/rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4", size = 235786 }, + { url = "https://files.pythonhosted.org/packages/d0/bf/36d5cc1f2c609ae6e8bf0fc35949355ca9d8790eceb66e6385680c951e60/rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84", size = 351657 }, + { url = "https://files.pythonhosted.org/packages/24/2a/f1e0fa124e300c26ea9382e59b2d582cba71cedd340f32d1447f4f29fa4e/rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25", size = 341829 }, + { url = "https://files.pythonhosted.org/packages/cf/c2/0da1231dd16953845bed60d1a586fcd6b15ceaeb965f4d35cdc71f70f606/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4", size = 384220 }, + { url = "https://files.pythonhosted.org/packages/c7/73/a4407f4e3a00a9d4b68c532bf2d873d6b562854a8eaff8faa6133b3588ec/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5", size = 391009 }, + { url = "https://files.pythonhosted.org/packages/a9/c3/04b7353477ab360fe2563f5f0b176d2105982f97cd9ae80a9c5a18f1ae0f/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc", size = 426989 }, + { url = "https://files.pythonhosted.org/packages/8d/e6/e4b85b722bcf11398e17d59c0f6049d19cd606d35363221951e6d625fcb0/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b", size = 441544 }, + { url = "https://files.pythonhosted.org/packages/27/fc/403e65e56f65fff25f2973216974976d3f0a5c3f30e53758589b6dc9b79b/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518", size = 385179 }, + { url = "https://files.pythonhosted.org/packages/57/9b/2be9ff9700d664d51fd96b33d6595791c496d2778cb0b2a634f048437a55/rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd", size = 415103 }, + { url = "https://files.pythonhosted.org/packages/bb/a5/03c2ad8ca10994fcf22dd2150dd1d653bc974fa82d9a590494c84c10c641/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2", size = 560916 }, + { url = "https://files.pythonhosted.org/packages/ba/2e/be4fdfc8b5b576e588782b56978c5b702c5a2307024120d8aeec1ab818f0/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16", size = 587062 }, + { url = "https://files.pythonhosted.org/packages/67/e0/2034c221937709bf9c542603d25ad43a68b4b0a9a0c0b06a742f2756eb66/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f", size = 555734 }, + { url = "https://files.pythonhosted.org/packages/ea/ce/240bae07b5401a22482b58e18cfbabaa392409b2797da60223cca10d7367/rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de", size = 220663 }, + { url = "https://files.pythonhosted.org/packages/cb/f0/d330d08f51126330467edae2fa4efa5cec8923c87551a79299380fdea30d/rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9", size = 235503 }, + { url = "https://files.pythonhosted.org/packages/f7/c4/dbe1cc03df013bf2feb5ad00615038050e7859f381e96fb5b7b4572cd814/rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b", size = 347698 }, + { url = "https://files.pythonhosted.org/packages/a4/3a/684f66dd6b0f37499cad24cd1c0e523541fd768576fa5ce2d0a8799c3cba/rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b", size = 337330 }, + { url = "https://files.pythonhosted.org/packages/82/eb/e022c08c2ce2e8f7683baa313476492c0e2c1ca97227fe8a75d9f0181e95/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1", size = 380022 }, + { url = "https://files.pythonhosted.org/packages/e4/21/5a80e653e4c86aeb28eb4fea4add1f72e1787a3299687a9187105c3ee966/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83", size = 390754 }, + { url = "https://files.pythonhosted.org/packages/37/a4/d320a04ae90f72d080b3d74597074e62be0a8ecad7d7321312dfe2dc5a6a/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd", size = 423840 }, + { url = "https://files.pythonhosted.org/packages/87/70/674dc47d93db30a6624279284e5631be4c3a12a0340e8e4f349153546728/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1", size = 438970 }, + { url = "https://files.pythonhosted.org/packages/3f/64/9500f4d66601d55cadd21e90784cfd5d5f4560e129d72e4339823129171c/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3", size = 383146 }, + { url = "https://files.pythonhosted.org/packages/4d/45/630327addb1d17173adcf4af01336fd0ee030c04798027dfcb50106001e0/rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130", size = 408294 }, + { url = "https://files.pythonhosted.org/packages/5f/ef/8efb3373cee54ea9d9980b772e5690a0c9e9214045a4e7fa35046e399fee/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c", size = 556345 }, + { url = "https://files.pythonhosted.org/packages/54/01/151d3b9ef4925fc8f15bfb131086c12ec3c3d6dd4a4f7589c335bf8e85ba/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b", size = 582292 }, + { url = "https://files.pythonhosted.org/packages/30/89/35fc7a6cdf3477d441c7aca5e9bbf5a14e0f25152aed7f63f4e0b141045d/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", size = 553855 }, + { url = "https://files.pythonhosted.org/packages/8f/e0/830c02b2457c4bd20a8c5bb394d31d81f57fbefce2dbdd2e31feff4f7003/rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", size = 219100 }, + { url = "https://files.pythonhosted.org/packages/f8/30/7ac943f69855c2db77407ae363484b915d861702dbba1aa82d68d57f42be/rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", size = 233794 }, +] + +[[package]] +name = "ruff" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/06/b2e9ee5f17dab59476fcb6cc6fdd268e8340d95b7dfc760ed93f4243f16f/ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d", size = 2040633 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/21/e56126ca3b56e6d05a0f6744558305f6589327945ee01b85ffe85a0f37bf/ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6", size = 14894866 }, + { url = "https://files.pythonhosted.org/packages/b6/1e/fd238f116e2fab69a2fbb4c3ab8903225836cb6d900ff8139c03c2f6f7b7/ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39", size = 7634941 }, + { url = "https://files.pythonhosted.org/packages/4c/53/30651b54241f4f26796cbc5b7cdcafebf5ecd7a30997e7a08673e8050b30/ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73", size = 7332185 }, + { url = "https://files.pythonhosted.org/packages/1c/8a/8c14e40da4cb8d651fc78f769e938552069e7bc34e9e65f7335f3469f9d2/ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba", size = 6739587 }, + { url = "https://files.pythonhosted.org/packages/db/71/5be31e5505307e852020d624049ae6610e1ebb68431bb03251904aa082c6/ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c", size = 7813597 }, + { url = "https://files.pythonhosted.org/packages/45/20/89df4f35f0644b529b9e8bb4c9a0a4633ad2fcba888941caaba744ae5768/ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e", size = 8465022 }, + { url = "https://files.pythonhosted.org/packages/ec/c2/d2f2b750971593580b29d965bd7bc36a7f5e971b3de24e342235ae7578a9/ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca", size = 8196736 }, + { url = "https://files.pythonhosted.org/packages/bc/83/0dfcc589d8d4d27c551dfb5d50ef57b58fc6432298bc115010f7a0642f48/ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001", size = 8896228 }, + { url = "https://files.pythonhosted.org/packages/27/f1/3bf230a048561fd03bc779f2a3e5b05d8ea8cb1c91456a4246c5673b8ef5/ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3", size = 7817875 }, + { url = "https://files.pythonhosted.org/packages/63/ad/57e10d775d94a22eabdbe272d6ebb687d10ff0312ad8cd81dbc3bdf74081/ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726", size = 7248228 }, + { url = "https://files.pythonhosted.org/packages/1d/65/250a8dd655563a31d7f38af35e5a2860a54bc66c121084f36c63d46dd687/ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e", size = 6735053 }, + { url = "https://files.pythonhosted.org/packages/ac/e5/6684718861b205985164afb9a1a8ab83deb4fa2326c903570e9d1af9347a/ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e", size = 7471896 }, + { url = "https://files.pythonhosted.org/packages/4c/40/25de7bd89d5af3cd033d42935c7ea2bc79f52fa2f2cf4cbd8f1dbc2cae2b/ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9", size = 7883633 }, + { url = "https://files.pythonhosted.org/packages/49/98/9c678bd07561bcdf2129df8284b5708e0393e7c52256db9b30b1b1043cfd/ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325", size = 6909240 }, + { url = "https://files.pythonhosted.org/packages/47/d2/23fe9d73dadec045cbffc0c2046a34f7b829f217abd76fb2d6ef7114d792/ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d", size = 7593466 }, + { url = "https://files.pythonhosted.org/packages/1a/83/0d002e72ba3c15a74e5ac63d31f57d222d8f297e637d065db28f1253f109/ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd", size = 7222811 }, +] + +[[package]] +name = "s3transfer" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/0a/1cdbabf9edd0ea7747efdf6c9ab4e7061b085aa7f9bfc36bb1601563b069/s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7", size = 145287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/05/7957af15543b8c9799209506df4660cba7afc4cf94bfb60513827e96bed6/s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e", size = 83175 }, +] + +[[package]] +name = "safetensors" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/46/a1c56ed856c6ac3b1a8b37abe5be0cac53219367af1331e721b04d122577/safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310", size = 65702 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/a5/25bcf75e373412daf1fd88045ab3aa8140a0d804ef0e70712c4f2c5b94d8/safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c", size = 392256 }, + { url = "https://files.pythonhosted.org/packages/08/8c/ece3bf8756506a890bd980eca02f47f9d98dfbf5ce16eda1368f53560f67/safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971", size = 381490 }, + { url = "https://files.pythonhosted.org/packages/39/83/c4a7ce01d626e46ea2b45887f2e59b16441408031e2ce2f9fe01860c6946/safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42", size = 441093 }, + { url = "https://files.pythonhosted.org/packages/47/26/cc52de647e71bd9a0b0d78ead0d31d9c462b35550a817aa9e0cab51d6db4/safetensors-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59b77e4b7a708988d84f26de3ebead61ef1659c73dcbc9946c18f3b1786d2688", size = 438960 }, + { url = "https://files.pythonhosted.org/packages/06/78/332538546775ee97e749867df2d58f2282d9c48a1681e4891eed8b94ec94/safetensors-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d3bc83e14d67adc2e9387e511097f254bd1b43c3020440e708858c684cbac68", size = 478031 }, + { url = "https://files.pythonhosted.org/packages/d9/03/a3c8663f1ddda54e624ecf43fce651659b49e8e1603c52c3e464b442acfa/safetensors-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39371fc551c1072976073ab258c3119395294cf49cdc1f8476794627de3130df", size = 494754 }, + { url = "https://files.pythonhosted.org/packages/e6/ee/69e498a892f208bd1da4104d4b9be887f8611bf4942144718b6738482250/safetensors-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c19feda32b931cae0acd42748a670bdf56bee6476a046af20181ad3fee4090", size = 435013 }, + { url = "https://files.pythonhosted.org/packages/a2/61/f0cfce984515b86d1260f556ba3b782158e2855e6a318446ac2613786fa9/safetensors-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a659467495de201e2f282063808a41170448c78bada1e62707b07a27b05e6943", size = 455984 }, + { url = "https://files.pythonhosted.org/packages/e7/a9/3e3b48fcaade3eb4e347d39ebf0bd44291db21a3e4507854b42a7cb910ac/safetensors-0.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad5e4b2476949bcd638a89f71b6916fa9a5cae5c1ae7eede337aca2100435c0", size = 619513 }, + { url = "https://files.pythonhosted.org/packages/80/23/2a7a1be24258c0e44c1d356896fd63dc0545a98d2d0184925fa09cd3ec76/safetensors-0.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a3a315a6d0054bc6889a17f5668a73f94f7fe55121ff59e0a199e3519c08565f", size = 604841 }, + { url = "https://files.pythonhosted.org/packages/b4/5c/34d082ff1fffffd8545fb22cbae3285ab4236f1f0cfc64b7e58261c2363b/safetensors-0.4.5-cp311-none-win32.whl", hash = "sha256:a01e232e6d3d5cf8b1667bc3b657a77bdab73f0743c26c1d3c5dd7ce86bd3a92", size = 272602 }, + { url = "https://files.pythonhosted.org/packages/6d/41/948c96c8a7e9fef57c2e051f1871c108a6dbbc6d285598bdb1d89b98617c/safetensors-0.4.5-cp311-none-win_amd64.whl", hash = "sha256:cbd39cae1ad3e3ef6f63a6f07296b080c951f24cec60188378e43d3713000c04", size = 285973 }, + { url = "https://files.pythonhosted.org/packages/bf/ac/5a63082f931e99200db95fd46fb6734f050bb6e96bf02521904c6518b7aa/safetensors-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:473300314e026bd1043cef391bb16a8689453363381561b8a3e443870937cc1e", size = 392015 }, + { url = "https://files.pythonhosted.org/packages/73/95/ab32aa6e9bdc832ff87784cdf9da26192b93de3ef82b8d1ada8f345c5044/safetensors-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:801183a0f76dc647f51a2d9141ad341f9665602a7899a693207a82fb102cc53e", size = 381774 }, + { url = "https://files.pythonhosted.org/packages/d6/6c/7e04b7626809fc63f3698f4c50e43aff2864b40089aa4506c918a75b8eed/safetensors-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1524b54246e422ad6fb6aea1ac71edeeb77666efa67230e1faf6999df9b2e27f", size = 441134 }, + { url = "https://files.pythonhosted.org/packages/58/2b/ffe7c86a277e6c1595fbdf415cfe2903f253f574a5405e93fda8baaa582c/safetensors-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3139098e3e8b2ad7afbca96d30ad29157b50c90861084e69fcb80dec7430461", size = 438467 }, + { url = "https://files.pythonhosted.org/packages/67/9c/f271bd804e08c7fda954d17b70ff281228a88077337a9e70feace4f4cc93/safetensors-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65573dc35be9059770808e276b017256fa30058802c29e1038eb1c00028502ea", size = 476566 }, + { url = "https://files.pythonhosted.org/packages/4c/ad/4cf76a3e430a8a26108407fa6cb93e6f80d996a5cb75d9540c8fe3862990/safetensors-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd33da8e9407559f8779c82a0448e2133737f922d71f884da27184549416bfed", size = 492253 }, + { url = "https://files.pythonhosted.org/packages/d9/40/a6f75ea449a9647423ec8b6f72c16998d35aa4b43cb38536ac060c5c7bf5/safetensors-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3685ce7ed036f916316b567152482b7e959dc754fcc4a8342333d222e05f407c", size = 434769 }, + { url = "https://files.pythonhosted.org/packages/52/47/d4b49b1231abf3131f7bb0bc60ebb94b27ee33e0a1f9569da05f8ac65dee/safetensors-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dde2bf390d25f67908278d6f5d59e46211ef98e44108727084d4637ee70ab4f1", size = 457166 }, + { url = "https://files.pythonhosted.org/packages/c3/cd/006468b03b0fa42ff82d795d47c4193e99001e96c3f08bd62ef1b5cab586/safetensors-0.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7469d70d3de970b1698d47c11ebbf296a308702cbaae7fcb993944751cf985f4", size = 619280 }, + { url = "https://files.pythonhosted.org/packages/22/4d/b6208d918e83daa84b424c0ac3191ae61b44b3191613a3a5a7b38f94b8ad/safetensors-0.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a6ba28118636a130ccbb968bc33d4684c48678695dba2590169d5ab03a45646", size = 605390 }, + { url = "https://files.pythonhosted.org/packages/e8/20/bf0e01825dc01ed75538021a98b9a046e60ead63c6c6700764c821a8c873/safetensors-0.4.5-cp312-none-win32.whl", hash = "sha256:c859c7ed90b0047f58ee27751c8e56951452ed36a67afee1b0a87847d065eec6", size = 273250 }, + { url = "https://files.pythonhosted.org/packages/f1/5f/ab6b6cec85b40789801f35b7d2fb579ae242d8193929974a106d5ff5c835/safetensors-0.4.5-cp312-none-win_amd64.whl", hash = "sha256:b5a8810ad6a6f933fff6c276eae92c1da217b39b4d8b1bc1c0b8af2d270dc532", size = 286307 }, + { url = "https://files.pythonhosted.org/packages/90/61/0e27b1403e311cba0be20026bee4ee822d90eda7dad372179e7f18bb99f3/safetensors-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:25e5f8e2e92a74f05b4ca55686234c32aac19927903792b30ee6d7bd5653d54e", size = 392062 }, + { url = "https://files.pythonhosted.org/packages/b1/9f/cc31fafc9f5d79da10a83a820ca37f069bab0717895ad8cbcacf629dd1c5/safetensors-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81efb124b58af39fcd684254c645e35692fea81c51627259cdf6d67ff4458916", size = 382517 }, + { url = "https://files.pythonhosted.org/packages/a4/c7/4fda8a0ebb96662550433378f4a74c677fa5fc4d0a43a7ec287d1df254a9/safetensors-0.4.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:585f1703a518b437f5103aa9cf70e9bd437cb78eea9c51024329e4fb8a3e3679", size = 441378 }, + { url = "https://files.pythonhosted.org/packages/14/31/9abb431f6209de9c80dab83e1112ebd769f1e32e7ab7ab228a02424a4693/safetensors-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b99fbf72e3faf0b2f5f16e5e3458b93b7d0a83984fe8d5364c60aa169f2da89", size = 438831 }, + { url = "https://files.pythonhosted.org/packages/37/37/99bfb195578a808b8d045159ee9264f8da58d017ac0701853dcacda14d4e/safetensors-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b17b299ca9966ca983ecda1c0791a3f07f9ca6ab5ded8ef3d283fff45f6bcd5f", size = 477112 }, + { url = "https://files.pythonhosted.org/packages/7d/05/fac3ef107e60d2a78532bed171a91669d4bb259e1236f5ea8c67a6976c75/safetensors-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76ded72f69209c9780fdb23ea89e56d35c54ae6abcdec67ccb22af8e696e449a", size = 493373 }, + { url = "https://files.pythonhosted.org/packages/cf/7a/825800ee8c68214b4fd3506d5e19209338c69b41e01c6e14dd13969cc8b9/safetensors-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2783956926303dcfeb1de91a4d1204cd4089ab441e622e7caee0642281109db3", size = 435422 }, + { url = "https://files.pythonhosted.org/packages/5e/6c/7a3233c08bde558d6c33a41219119866cb596139a4673cc6c24024710ffd/safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35", size = 457382 }, + { url = "https://files.pythonhosted.org/packages/a0/58/0b7bcba3788ff503990cf9278d611b56c029400612ba93e772c987b5aa03/safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523", size = 619301 }, + { url = "https://files.pythonhosted.org/packages/82/cc/9c2cf58611daf1c83ce5d37f9de66353e23fcda36008b13fd3409a760aa3/safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142", size = 605580 }, +] + +[[package]] +name = "scikit-learn" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/19/5aa2002044afc297ecaf1e3517ed07bba4aece3b5613b5160c1212995fc8/scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e", size = 7074944 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/95/070d6e70f735d13f1c10afebb65ba3526125b7d6c6fc7022651a4a061148/scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285", size = 12095168 }, + { url = "https://files.pythonhosted.org/packages/72/3d/0381e3a59ebd4154e6a61b0ceaf299c3c141035033dd3b868776cd9af02d/scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b", size = 11108880 }, + { url = "https://files.pythonhosted.org/packages/fe/2d/0999ae3eed2ac67b1b3cd7fc33370bd5ca59a7514ffe43ae2b6f3cd85b9b/scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a", size = 12585449 }, + { url = "https://files.pythonhosted.org/packages/0e/ec/1b15b59c6cc7a993320a52234369e787f50345a4753e50d5a015a91e1a20/scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c716d13ba0a2f8762d96ff78d3e0cde90bc9c9b5c13d6ab6bb9b2d6ca6705fd", size = 13489728 }, + { url = "https://files.pythonhosted.org/packages/96/a2/cbfb5743de748d574ffdfd557e9cb29ba4f8b8a3e07836c6c176f713de2f/scikit_learn-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aafd94bafc841b626681e626be27bf1233d5a0f20f0a6fdb4bee1a1963c6643", size = 11132946 }, + { url = "https://files.pythonhosted.org/packages/18/0c/a5de627aa57b028aea7026cb3bbeaf63be3158adc118212d6cc7843d939a/scikit_learn-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:04a5ba45c12a5ff81518aa4f1604e826a45d20e53da47b15871526cda4ff5174", size = 12096999 }, + { url = "https://files.pythonhosted.org/packages/a3/7d/02a96e6fb28ddb213e84b1b4a44148d26ec96fc9db9c74e050277e009892/scikit_learn-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:21fadfc2ad7a1ce8bd1d90f23d17875b84ec765eecbbfc924ff11fb73db582ce", size = 11160579 }, + { url = "https://files.pythonhosted.org/packages/70/28/77b071f541d75247e6c3403f19aaa634371e972691f6aa1838ca9fd4cc52/scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30f34bb5fde90e020653bb84dcb38b6c83f90c70680dbd8c38bd9becbad7a127", size = 12246543 }, + { url = "https://files.pythonhosted.org/packages/17/0e/e6bb84074f1081245a165c0ee775ecef24beae9d2f2e24bcac0c9f155f13/scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dad624cffe3062276a0881d4e441bc9e3b19d02d17757cd6ae79a9d192a0027", size = 13140402 }, + { url = "https://files.pythonhosted.org/packages/21/1d/3df58df8bd425f425df9f90b316618ace62b7f1f838ac1580191025cc735/scikit_learn-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fce7950a3fad85e0a61dc403df0f9345b53432ac0e47c50da210d22c60b6d85", size = 11103596 }, + { url = "https://files.pythonhosted.org/packages/2e/f4/c3b51920cf310169d19d07855a7bdf51a9b065314877d9a58c0c60d08eea/scikit_learn-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5453b2e87ef8accedc5a8a4e6709f887ca01896cd7cc8a174fe39bd4bb00aef", size = 12002532 }, + { url = "https://files.pythonhosted.org/packages/e4/76/cfb0778a84c30df272f1c41fc7b3bd3ffac6e8b02ee6a078a592d35cf73f/scikit_learn-1.6.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5fe11794236fb83bead2af26a87ced5d26e3370b8487430818b915dafab1724e", size = 11088997 }, + { url = "https://files.pythonhosted.org/packages/2b/8d/4563419d742b852e50871fa3494a8dd0304610601359209a2e614e200260/scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61fe3dcec0d82ae280877a818ab652f4988371e32dd5451e75251bece79668b1", size = 12203192 }, + { url = "https://files.pythonhosted.org/packages/15/a4/f4fdcdd11d82837804c888097ad02aa6381c4bbd57b9d3074ecf9eba8f42/scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44e3a51e181933bdf9a4953cc69c6025b40d2b49e238233f149b98849beb4bf", size = 13164436 }, + { url = "https://files.pythonhosted.org/packages/1a/e1/32bdcf8f918de5a156da6886aba24a3b5718d267954bd34555be896289f0/scikit_learn-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:a17860a562bac54384454d40b3f6155200c1c737c9399e6a97962c63fce503ac", size = 11064779 }, + { url = "https://files.pythonhosted.org/packages/c6/8d/14464bea220bc02879f9e8d905c4b0a44b5c12afde6c375720b6f41d9407/scikit_learn-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:98717d3c152f6842d36a70f21e1468fb2f1a2f8f2624d9a3f382211798516426", size = 11962472 }, + { url = "https://files.pythonhosted.org/packages/b4/69/66899cdc65986188e0e255e52ee93dee5101a72f139ee05f263dfff2053a/scikit_learn-1.6.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:34e20bfac8ff0ebe0ff20fb16a4d6df5dc4cc9ce383e00c2ab67a526a3c67b18", size = 11104864 }, + { url = "https://files.pythonhosted.org/packages/3c/32/2c63bc108cc5438b116a0c6fd25c6126dd14c03118724385f10a3d218ee8/scikit_learn-1.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba06d75815406091419e06dd650b91ebd1c5f836392a0d833ff36447c2b1bfa", size = 12435734 }, + { url = "https://files.pythonhosted.org/packages/0c/f5/9434dff19e04a334bfb30df90511904263c48a422a9952d91d8de5c3aa62/scikit_learn-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b6916d1cec1ff163c7d281e699d7a6a709da2f2c5ec7b10547e08cc788ddd3ae", size = 11329803 }, +] + +[[package]] +name = "scipy" +version = "1.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/11/4d44a1f274e002784e4dbdb81e0ea96d2de2d1045b2132d5af62cc31fd28/scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417", size = 58620554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/ab/070ccfabe870d9f105b04aee1e2860520460ef7ca0213172abfe871463b9/scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675", size = 39076999 }, + { url = "https://files.pythonhosted.org/packages/a7/c5/02ac82f9bb8f70818099df7e86c3ad28dae64e1347b421d8e3adf26acab6/scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2", size = 29894570 }, + { url = "https://files.pythonhosted.org/packages/ed/05/7f03e680cc5249c4f96c9e4e845acde08eb1aee5bc216eff8a089baa4ddb/scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617", size = 23103567 }, + { url = "https://files.pythonhosted.org/packages/5e/fc/9f1413bef53171f379d786aabc104d4abeea48ee84c553a3e3d8c9f96a9c/scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8", size = 25499102 }, + { url = "https://files.pythonhosted.org/packages/c2/4b/b44bee3c2ddc316b0159b3d87a3d467ef8d7edfd525e6f7364a62cd87d90/scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37", size = 35586346 }, + { url = "https://files.pythonhosted.org/packages/93/6b/701776d4bd6bdd9b629c387b5140f006185bd8ddea16788a44434376b98f/scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2", size = 41165244 }, + { url = "https://files.pythonhosted.org/packages/06/57/e6aa6f55729a8f245d8a6984f2855696c5992113a5dc789065020f8be753/scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2", size = 42817917 }, + { url = "https://files.pythonhosted.org/packages/ea/c2/5ecadc5fcccefaece775feadcd795060adf5c3b29a883bff0e678cfe89af/scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94", size = 44781033 }, + { url = "https://files.pythonhosted.org/packages/c0/04/2bdacc8ac6387b15db6faa40295f8bd25eccf33f1f13e68a72dc3c60a99e/scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d", size = 39128781 }, + { url = "https://files.pythonhosted.org/packages/c8/53/35b4d41f5fd42f5781dbd0dd6c05d35ba8aa75c84ecddc7d44756cd8da2e/scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07", size = 29939542 }, + { url = "https://files.pythonhosted.org/packages/66/67/6ef192e0e4d77b20cc33a01e743b00bc9e68fb83b88e06e636d2619a8767/scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5", size = 23148375 }, + { url = "https://files.pythonhosted.org/packages/f6/32/3a6dedd51d68eb7b8e7dc7947d5d841bcb699f1bf4463639554986f4d782/scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc", size = 25578573 }, + { url = "https://files.pythonhosted.org/packages/f0/5a/efa92a58dc3a2898705f1dc9dbaf390ca7d4fba26d6ab8cfffb0c72f656f/scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310", size = 35319299 }, + { url = "https://files.pythonhosted.org/packages/8e/ee/8a26858ca517e9c64f84b4c7734b89bda8e63bec85c3d2f432d225bb1886/scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066", size = 40849331 }, + { url = "https://files.pythonhosted.org/packages/a5/cd/06f72bc9187840f1c99e1a8750aad4216fc7dfdd7df46e6280add14b4822/scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1", size = 42544049 }, + { url = "https://files.pythonhosted.org/packages/aa/7d/43ab67228ef98c6b5dd42ab386eae2d7877036970a0d7e3dd3eb47a0d530/scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f", size = 44521212 }, + { url = "https://files.pythonhosted.org/packages/50/ef/ac98346db016ff18a6ad7626a35808f37074d25796fd0234c2bb0ed1e054/scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79", size = 39091068 }, + { url = "https://files.pythonhosted.org/packages/b9/cc/70948fe9f393b911b4251e96b55bbdeaa8cca41f37c26fd1df0232933b9e/scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e", size = 29875417 }, + { url = "https://files.pythonhosted.org/packages/3b/2e/35f549b7d231c1c9f9639f9ef49b815d816bf54dd050da5da1c11517a218/scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73", size = 23084508 }, + { url = "https://files.pythonhosted.org/packages/3f/d6/b028e3f3e59fae61fb8c0f450db732c43dd1d836223a589a8be9f6377203/scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e", size = 25503364 }, + { url = "https://files.pythonhosted.org/packages/a7/2f/6c142b352ac15967744d62b165537a965e95d557085db4beab2a11f7943b/scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d", size = 35292639 }, + { url = "https://files.pythonhosted.org/packages/56/46/2449e6e51e0d7c3575f289f6acb7f828938eaab8874dbccfeb0cd2b71a27/scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e", size = 40798288 }, + { url = "https://files.pythonhosted.org/packages/32/cd/9d86f7ed7f4497c9fd3e39f8918dd93d9f647ba80d7e34e4946c0c2d1a7c/scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06", size = 42524647 }, + { url = "https://files.pythonhosted.org/packages/f5/1b/6ee032251bf4cdb0cc50059374e86a9f076308c1512b61c4e003e241efb7/scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84", size = 44469524 }, +] + +[[package]] +name = "semver" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/6c/a536cc008f38fd83b3c1b98ce19ead13b746b5588c9a0cb9dd9f6ea434bc/semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc", size = 214988 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/77/0cc7a8a3bc7e53d07e8f47f147b92b0960e902b8254859f4aee5c4d7866b/semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4", size = 17099 }, +] + +[[package]] +name = "sentry-sdk" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/4a/eccdcb8c2649d53440ae1902447b86e2e2ad1bc84207c80af9696fa07614/sentry_sdk-2.19.2.tar.gz", hash = "sha256:467df6e126ba242d39952375dd816fbee0f217d119bf454a8ce74cf1e7909e8d", size = 299047 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/4d/74597bb6bcc23abc774b8901277652c61331a9d4d0a8d1bdb20679b9bbcb/sentry_sdk-2.19.2-py2.py3-none-any.whl", hash = "sha256:ebdc08228b4d131128e568d696c210d846e5b9d70aa0327dec6b1272d9d40b84", size = 322942 }, +] + +[package.optional-dependencies] +fastapi = [ + { name = "fastapi" }, +] + +[[package]] +name = "setuptools" +version = "75.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/54/292f26c208734e9a7f067aea4a7e282c080750c4546559b58e2e45413ca0/setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", size = 1337429 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", size = 1224032 }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, +] + +[[package]] +name = "simplejson" +version = "3.19.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/29/085111f19717f865eceaf0d4397bf3e76b08d60428b076b64e2a1903706d/simplejson-3.19.3.tar.gz", hash = "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680", size = 85237 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/bb/9ee3959e6929d228cf669b3f13f0edd43c5261b6cd69598640748b19ca35/simplejson-3.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e88abff510dcff903a18d11c2a75f9964e768d99c8d147839913886144b2065e", size = 91930 }, + { url = "https://files.pythonhosted.org/packages/ac/ae/a06523928af3a6783e2638cd4f6035c3e32de1c1063d563d9060c8d2f1ad/simplejson-3.19.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:934a50a614fb831614db5dbfba35127ee277624dda4d15895c957d2f5d48610c", size = 74787 }, + { url = "https://files.pythonhosted.org/packages/c3/58/fea732e48a7540035fe46d39e6fd77679f5810311d31da8661ce7a18210a/simplejson-3.19.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:212fce86a22188b0c7f53533b0f693ea9605c1a0f02c84c475a30616f55a744d", size = 74612 }, + { url = "https://files.pythonhosted.org/packages/ab/4d/15718f20cb0e3875b8af9597d6bb3bfbcf1383834b82b6385ee9ac0b72a9/simplejson-3.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d9e8f836688a8fabe6a6b41b334aa550a6823f7b4ac3d3712fc0ad8655be9a8", size = 143550 }, + { url = "https://files.pythonhosted.org/packages/93/44/815a4343774760f7a82459c8f6a4d8268b4b6d23f81e7b922a5e2ca79171/simplejson-3.19.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23228037dc5d41c36666384062904d74409a62f52283d9858fa12f4c22cffad1", size = 153284 }, + { url = "https://files.pythonhosted.org/packages/9d/52/d3202d9bba95444090d1c98e43da3c10907875babf63ed3c134d1b9437e3/simplejson-3.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0791f64fed7d4abad639491f8a6b1ba56d3c604eb94b50f8697359b92d983f36", size = 141518 }, + { url = "https://files.pythonhosted.org/packages/b7/d4/850948bcbcfe0b4a6c69dfde10e245d3a1ea45252f16a1e2308a3b06b1da/simplejson-3.19.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f614581b61a26fbbba232a1391f6cee82bc26f2abbb6a0b44a9bba25c56a1c", size = 144688 }, + { url = "https://files.pythonhosted.org/packages/58/d2/b8dcb0a07d9cd54c47f9fe8733dbb83891d1efe4fc786d9dfc8781cc04f9/simplejson-3.19.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1df0aaf1cb787fdf34484ed4a1f0c545efd8811f6028623290fef1a53694e597", size = 144534 }, + { url = "https://files.pythonhosted.org/packages/a9/95/1e92d99039041f596e0923ec4f9153244acaf3830944dc69a7c11b23ceaa/simplejson-3.19.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:951095be8d4451a7182403354c22ec2de3e513e0cc40408b689af08d02611588", size = 146565 }, + { url = "https://files.pythonhosted.org/packages/21/04/c96aeb3a74031255e4cbcc0ca1b6ebfb5549902f0a065f06d65ce8447c0c/simplejson-3.19.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a954b30810988feeabde843e3263bf187697e0eb5037396276db3612434049b", size = 155014 }, + { url = "https://files.pythonhosted.org/packages/b7/41/e28a28593afc4a75d8999d057bfb7c73a103e35f927e66f4bb92571787ae/simplejson-3.19.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c40df31a75de98db2cdfead6074d4449cd009e79f54c1ebe5e5f1f153c68ad20", size = 148092 }, + { url = "https://files.pythonhosted.org/packages/2b/82/1c81a3af06f937afb6d2e9d74a465c0e0ae6db444d1bf2a436ea26de1965/simplejson-3.19.3-cp311-cp311-win32.whl", hash = "sha256:7e2a098c21ad8924076a12b6c178965d88a0ad75d1de67e1afa0a66878f277a5", size = 73942 }, + { url = "https://files.pythonhosted.org/packages/65/be/d8ab9717f471be3c114f16abd8be21d9a6a0a09b9b49177d93d64d3717d9/simplejson-3.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:c9bedebdc5fdad48af8783022bae307746d54006b783007d1d3c38e10872a2c6", size = 75469 }, + { url = "https://files.pythonhosted.org/packages/20/15/513fea93fafbdd4993eacfcb762965b2ff3d29e618c029e2956174d68c4b/simplejson-3.19.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:66a0399e21c2112acacfebf3d832ebe2884f823b1c7e6d1363f2944f1db31a99", size = 92921 }, + { url = "https://files.pythonhosted.org/packages/a4/4f/998a907ae1a6c104dc0ee48aa248c2478490152808d34d8e07af57f396c3/simplejson-3.19.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6ef9383c5e05f445be60f1735c1816163c874c0b1ede8bb4390aff2ced34f333", size = 75311 }, + { url = "https://files.pythonhosted.org/packages/db/44/acd6122201e927451869d45952b9ab1d3025cdb5e61548d286d08fbccc08/simplejson-3.19.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:42e5acf80d4d971238d4df97811286a044d720693092b20a56d5e56b7dcc5d09", size = 74964 }, + { url = "https://files.pythonhosted.org/packages/27/ca/d0a1e8f16e1bbdc0b8c6d88166f45f565ed7285f53928cfef3b6ce78f14d/simplejson-3.19.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0b0efc7279d768db7c74d3d07f0b5c81280d16ae3fb14e9081dc903e8360771", size = 150106 }, + { url = "https://files.pythonhosted.org/packages/63/59/0554b78cf26c98e2b9cae3f44723bd72c2394e2afec1a14eedc6211f7187/simplejson-3.19.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0552eb06e7234da892e1d02365cd2b7b2b1f8233aa5aabdb2981587b7cc92ea0", size = 158347 }, + { url = "https://files.pythonhosted.org/packages/b2/fe/9f30890352e431e8508cc569912d3322147d3e7e4f321e48c0adfcb4c97d/simplejson-3.19.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf6a3b9a7d7191471b464fe38f684df10eb491ec9ea454003edb45a011ab187", size = 148456 }, + { url = "https://files.pythonhosted.org/packages/37/e3/663a09542ee021d4131162f7a164cb2e7f04ef48433a67591738afbf12ea/simplejson-3.19.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7017329ca8d4dca94ad5e59f496e5fc77630aecfc39df381ffc1d37fb6b25832", size = 152190 }, + { url = "https://files.pythonhosted.org/packages/31/20/4e0c4d35e10ff6465003bec304316d822a559a1c38c66ef6892ca199c207/simplejson-3.19.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:67a20641afebf4cfbcff50061f07daad1eace6e7b31d7622b6fa2c40d43900ba", size = 149846 }, + { url = "https://files.pythonhosted.org/packages/08/7a/46e2e072cac3987cbb05946f25167f0ad2fe536748e7405953fd6661a486/simplejson-3.19.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:dd6a7dabcc4c32daf601bc45e01b79175dde4b52548becea4f9545b0a4428169", size = 151714 }, + { url = "https://files.pythonhosted.org/packages/7f/7d/dbeeac10eb61d5d8858d0bb51121a21050d281dc83af4c557f86da28746c/simplejson-3.19.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:08f9b443a94e72dd02c87098c96886d35790e79e46b24e67accafbf13b73d43b", size = 158777 }, + { url = "https://files.pythonhosted.org/packages/fc/8f/a98bdbb799c6a4a884b5823db31785a96ba895b4b0f4d8ac345d6fe98bbf/simplejson-3.19.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa97278ae6614346b5ca41a45a911f37a3261b57dbe4a00602048652c862c28b", size = 154230 }, + { url = "https://files.pythonhosted.org/packages/b1/db/852eebceb85f969ae40e06babed1a93d3bacb536f187d7a80ff5823a5979/simplejson-3.19.3-cp312-cp312-win32.whl", hash = "sha256:ef28c3b328d29b5e2756903aed888960bc5df39b4c2eab157ae212f70ed5bf74", size = 74002 }, + { url = "https://files.pythonhosted.org/packages/fe/68/9f0e5df0651cb79ef83cba1378765a00ee8038e6201cc82b8e7178a7778e/simplejson-3.19.3-cp312-cp312-win_amd64.whl", hash = "sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a", size = 75596 }, + { url = "https://files.pythonhosted.org/packages/93/3a/5896821ed543899fcb9c4256c7e71bb110048047349a00f42bc8b8fb379f/simplejson-3.19.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0959e6cb62e3994b5a40e31047ff97ef5c4138875fae31659bead691bed55896", size = 92931 }, + { url = "https://files.pythonhosted.org/packages/39/15/5d33d269440912ee40d856db0c8be2b91aba7a219690ab01f86cb0edd590/simplejson-3.19.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a7bfad839c624e139a4863007233a3f194e7c51551081f9789cba52e4da5167", size = 75318 }, + { url = "https://files.pythonhosted.org/packages/2a/8d/2e7483a2bf7ec53acf7e012bafbda79d7b34f90471dda8e424544a59d484/simplejson-3.19.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afab2f7f2486a866ff04d6d905e9386ca6a231379181a3838abce1f32fbdcc37", size = 74971 }, + { url = "https://files.pythonhosted.org/packages/4d/9d/9bdf34437c8834a7cf7246f85e9d5122e30579f512c10a0c2560e994294f/simplejson-3.19.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d00313681015ac498e1736b304446ee6d1c72c5b287cd196996dad84369998f7", size = 150112 }, + { url = "https://files.pythonhosted.org/packages/a7/e2/1f2ae2d89eaf85f6163c82150180aae5eaa18085cfaf892f8a57d4c51cbd/simplejson-3.19.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d936ae682d5b878af9d9eb4d8bb1fdd5e41275c8eb59ceddb0aeed857bb264a2", size = 158354 }, + { url = "https://files.pythonhosted.org/packages/60/83/26f610adf234c8492b3f30501e12f2271e67790f946c6898fe0c58aefe99/simplejson-3.19.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c6657485393f2e9b8177c77a7634f13ebe70d5e6de150aae1677d91516ce6b", size = 148455 }, + { url = "https://files.pythonhosted.org/packages/b5/4b/109af50006af77133653c55b5b91b4bd2d579ff8254ce11216c0b75f911b/simplejson-3.19.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a6a750d3c7461b1c47cfc6bba8d9e57a455e7c5f80057d2a82f738040dd1129", size = 152191 }, + { url = "https://files.pythonhosted.org/packages/75/dc/108872a8825cbd99ae6f4334e0490ff1580367baf12198bcaf988f6820ba/simplejson-3.19.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea7a4a998c87c5674a27089e022110a1a08a7753f21af3baf09efe9915c23c3c", size = 149954 }, + { url = "https://files.pythonhosted.org/packages/eb/be/deec1d947a5d0472276ab4a4d1a9378dc5ee27f3dc9e54d4f62ffbad7a08/simplejson-3.19.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6300680d83a399be2b8f3b0ef7ef90b35d2a29fe6e9c21438097e0938bbc1564", size = 151812 }, + { url = "https://files.pythonhosted.org/packages/e9/58/4ee130702d36b1551ef66e7587eefe56651f3669255bf748cd71691e2434/simplejson-3.19.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ab69f811a660c362651ae395eba8ce84f84c944cea0df5718ea0ba9d1e4e7252", size = 158880 }, + { url = "https://files.pythonhosted.org/packages/0f/e1/59cc6a371b60f89e3498d9f4c8109f6b7359094d453f5fe80b2677b777b0/simplejson-3.19.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:256e09d0f94d9c3d177d9e95fd27a68c875a4baa2046633df387b86b652f5747", size = 154344 }, + { url = "https://files.pythonhosted.org/packages/79/45/1b36044670016f5cb25ebd92497427d2d1711ecb454d00f71eb9a00b77cc/simplejson-3.19.3-cp313-cp313-win32.whl", hash = "sha256:2c78293470313aefa9cfc5e3f75ca0635721fb016fb1121c1c5b0cb8cc74712a", size = 74002 }, + { url = "https://files.pythonhosted.org/packages/e2/58/b06226e6b0612f2b1fa13d5273551da259f894566b1eef32249ddfdcce44/simplejson-3.19.3-cp313-cp313-win_amd64.whl", hash = "sha256:3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c", size = 75599 }, + { url = "https://files.pythonhosted.org/packages/0d/e7/f9fafbd4f39793a20cc52e77bbd766f7384312526d402c382928dc7667f6/simplejson-3.19.3-py3-none-any.whl", hash = "sha256:49cc4c7b940d43bd12bf87ec63f28cbc4964fc4e12c031cc8cd01650f43eb94e", size = 57004 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "smmap" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/04/b5bf6d21dc4041000ccba7eb17dd3055feb237e7ffc2c20d3fae3af62baa/smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", size = 22291 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a5/10f97f73544edcdef54409f1d839f6049a0d79df68adbc1ceb24d1aaca42/smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da", size = 24282 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "soupsieve" +version = "2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.35" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "(python_full_version < '3.13' and platform_machine == 'AMD64') or (python_full_version < '3.13' and platform_machine == 'WIN32') or (python_full_version < '3.13' and platform_machine == 'aarch64') or (python_full_version < '3.13' and platform_machine == 'amd64') or (python_full_version < '3.13' and platform_machine == 'ppc64le') or (python_full_version < '3.13' and platform_machine == 'win32') or (python_full_version < '3.13' and platform_machine == 'x86_64')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/48/4f190a83525f5cefefa44f6adc9e6386c4de5218d686c27eda92eb1f5424/sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f", size = 9562798 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/46/9215a35bf98c3a2528e987791e6180eb51624d2c7d5cb8e2d96a6450b657/SQLAlchemy-2.0.35-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e21f66748ab725ade40fa7af8ec8b5019c68ab00b929f6643e1b1af461eddb60", size = 2091274 }, + { url = "https://files.pythonhosted.org/packages/1e/69/919673c5101a0c633658d58b11b454b251ca82300941fba801201434755d/SQLAlchemy-2.0.35-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a6219108a15fc6d24de499d0d515c7235c617b2540d97116b663dade1a54d62", size = 2081672 }, + { url = "https://files.pythonhosted.org/packages/67/ea/a6b0597cbda12796be2302153369dbbe90573fdab3bc4885f8efac499247/SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042622a5306c23b972192283f4e22372da3b8ddf5f7aac1cc5d9c9b222ab3ff6", size = 3200083 }, + { url = "https://files.pythonhosted.org/packages/8c/d6/97bdc8d714fb21762f2092511f380f18cdb2d985d516071fa925bb433a90/SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:627dee0c280eea91aed87b20a1f849e9ae2fe719d52cbf847c0e0ea34464b3f7", size = 3200080 }, + { url = "https://files.pythonhosted.org/packages/87/d2/8c2adaf2ade4f6f1b725acd0b0be9210bb6a2df41024729a8eec6a86fe5a/SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fdcd72a789c1c31ed242fd8c1bcd9ea186a98ee8e5408a50e610edfef980d71", size = 3137108 }, + { url = "https://files.pythonhosted.org/packages/7e/ae/ea05d0bfa8f2b25ae34591895147152854fc950f491c4ce362ae06035db8/SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89b64cd8898a3a6f642db4eb7b26d1b28a497d4022eccd7717ca066823e9fb01", size = 3157437 }, + { url = "https://files.pythonhosted.org/packages/fe/5d/8ad6df01398388a766163d27960b3365f1bbd8bb7b05b5cad321a8b69b25/SQLAlchemy-2.0.35-cp311-cp311-win32.whl", hash = "sha256:6a93c5a0dfe8d34951e8a6f499a9479ffb9258123551fa007fc708ae2ac2bc5e", size = 2061935 }, + { url = "https://files.pythonhosted.org/packages/ff/68/8557efc0c32c8e2c147cb6512237448b8ed594a57cd015fda67f8e56bb3f/SQLAlchemy-2.0.35-cp311-cp311-win_amd64.whl", hash = "sha256:c68fe3fcde03920c46697585620135b4ecfdfc1ed23e75cc2c2ae9f8502c10b8", size = 2087281 }, + { url = "https://files.pythonhosted.org/packages/2f/2b/fff87e6db0da31212c98bbc445f83fb608ea92b96bda3f3f10e373bac76c/SQLAlchemy-2.0.35-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb60b026d8ad0c97917cb81d3662d0b39b8ff1335e3fabb24984c6acd0c900a2", size = 2089790 }, + { url = "https://files.pythonhosted.org/packages/68/92/4bb761bd82764d5827bf6b6095168c40fb5dbbd23670203aef2f96ba6bc6/SQLAlchemy-2.0.35-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6921ee01caf375363be5e9ae70d08ce7ca9d7e0e8983183080211a062d299468", size = 2080266 }, + { url = "https://files.pythonhosted.org/packages/22/46/068a65db6dc253c6f25a7598d99e0a1d60b14f661f9d09ef6c73c718fa4e/SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdf1a0dbe5ced887a9b127da4ffd7354e9c1a3b9bb330dce84df6b70ccb3a8d", size = 3229760 }, + { url = "https://files.pythonhosted.org/packages/6e/36/59830dafe40dda592304debd4cd86e583f63472f3a62c9e2695a5795e786/SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93a71c8601e823236ac0e5d087e4f397874a421017b3318fd92c0b14acf2b6db", size = 3240649 }, + { url = "https://files.pythonhosted.org/packages/00/50/844c50c6996f9c7f000c959dd1a7436a6c94e449ee113046a1d19e470089/SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e04b622bb8a88f10e439084486f2f6349bf4d50605ac3e445869c7ea5cf0fa8c", size = 3176138 }, + { url = "https://files.pythonhosted.org/packages/df/d2/336b18cac68eecb67de474fc15c85f13be4e615c6f5bae87ea38c6734ce0/SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1b56961e2d31389aaadf4906d453859f35302b4eb818d34a26fab72596076bb8", size = 3202753 }, + { url = "https://files.pythonhosted.org/packages/f0/f3/ee1e62fabdc10910b5ef720ae08e59bc785f26652876af3a50b89b97b412/SQLAlchemy-2.0.35-cp312-cp312-win32.whl", hash = "sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf", size = 2060113 }, + { url = "https://files.pythonhosted.org/packages/60/63/a3cef44a52979169d884f3583d0640e64b3c28122c096474a1d7cfcaf1f3/SQLAlchemy-2.0.35-cp312-cp312-win_amd64.whl", hash = "sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc", size = 2085839 }, + { url = "https://files.pythonhosted.org/packages/0e/c6/33c706449cdd92b1b6d756b247761e27d32230fd6b2de5f44c4c3e5632b2/SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1", size = 1881276 }, +] + +[package.optional-dependencies] +asyncio = [ + { name = "greenlet" }, +] + +[[package]] +name = "squarify" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/01/1753243870dff9fa786c9712fdc8dffb56f356c46c77d7468cb12f6d8398/squarify-0.4.4.tar.gz", hash = "sha256:b8a110c8dc5f1cd1402ca12d79764a081e90bfc445346cfa166df929753ecb46", size = 5514 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/3c/eedbe9fb07cc20fd9a8423da14b03bc270d0570b3ba9174a4497156a2152/squarify-0.4.4-py3-none-any.whl", hash = "sha256:d7597724e29d48aa14fd2f551060d6b09e1f0a67e4cd3ea329fe03b4c9a56f11", size = 4082 }, +] + +[[package]] +name = "sse-starlette" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, + { name = "uvicorn" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/fc/56ab9f116b2133521f532fce8d03194cf04dcac25f583cf3d839be4c0496/sse_starlette-2.1.3.tar.gz", hash = "sha256:9cd27eb35319e1414e3d2558ee7414487f9529ce3b3cf9b21434fd110e017169", size = 19678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/aa/36b271bc4fa1d2796311ee7c7283a3a1c348bad426d37293609ca4300eef/sse_starlette-2.1.3-py3-none-any.whl", hash = "sha256:8ec846438b4665b9e8c560fcdea6bc8081a3abf7942faa95e5a744999d219772", size = 9383 }, +] + +[[package]] +name = "starlette" +version = "0.36.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/47/1bba49d42d63f4453f0a64a20acbf2d0bd2f5a8cde6a166ee66c074a08f8/starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080", size = 2842113 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/f7/372e3953b6e6fbfe0b70a1bb52612eae16e943f4288516480860fcd4ac41/starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044", size = 71481 }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, +] + +[[package]] +name = "tenacity" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/4d/6a19536c50b849338fcbe9290d562b52cbdcf30d8963d3588a68a4107df1/tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78", size = 47309 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/3f/8ba87d9e287b9d385a02a7114ddcef61b26f86411e121c9003eb509a1773/tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687", size = 28165 }, +] + +[[package]] +name = "threadpoolctl" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/55/b5148dcbf72f5cde221f8bfe3b6a540da7aa1842f6b491ad979a6c8b84af/threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107", size = 41936 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/2c/ffbf7a134b9ab11a67b0cf0726453cedd9c5043a4fe7a35d1cefa9a1bcfb/threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467", size = 18414 }, +] + +[[package]] +name = "tiktoken" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/4a/abaec53e93e3ef37224a4dd9e2fc6bb871e7a538c2b6b9d2a6397271daf4/tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6", size = 33437 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/eb/57492b2568eea1d546da5cc1ae7559d924275280db80ba07e6f9b89a914b/tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f", size = 961468 }, + { url = "https://files.pythonhosted.org/packages/30/ef/e07dbfcb2f85c84abaa1b035a9279575a8da0236305491dc22ae099327f7/tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f", size = 907005 }, + { url = "https://files.pythonhosted.org/packages/ea/9b/f36db825b1e9904c3a2646439cb9923fc1e09208e2e071c6d9dd64ead131/tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b", size = 1049183 }, + { url = "https://files.pythonhosted.org/packages/61/b4/b80d1fe33015e782074e96bbbf4108ccd283b8deea86fb43c15d18b7c351/tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992", size = 1080830 }, + { url = "https://files.pythonhosted.org/packages/2a/40/c66ff3a21af6d62a7e0ff428d12002c4e0389f776d3ff96dcaa0bb354eee/tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1", size = 1092967 }, + { url = "https://files.pythonhosted.org/packages/2e/80/f4c9e255ff236e6a69ce44b927629cefc1b63d3a00e2d1c9ed540c9492d2/tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89", size = 1142682 }, + { url = "https://files.pythonhosted.org/packages/b1/10/c04b4ff592a5f46b28ebf4c2353f735c02ae7f0ce1b165d00748ced6467e/tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb", size = 799009 }, + { url = "https://files.pythonhosted.org/packages/1d/46/4cdda4186ce900608f522da34acf442363346688c71b938a90a52d7b84cc/tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908", size = 960446 }, + { url = "https://files.pythonhosted.org/packages/b6/30/09ced367d280072d7a3e21f34263dfbbf6378661e7a0f6414e7c18971083/tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410", size = 906652 }, + { url = "https://files.pythonhosted.org/packages/e6/7b/c949e4954441a879a67626963dff69096e3c774758b9f2bb0853f7b4e1e7/tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704", size = 1047904 }, + { url = "https://files.pythonhosted.org/packages/50/81/1842a22f15586072280364c2ab1e40835adaf64e42fe80e52aff921ee021/tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350", size = 1079836 }, + { url = "https://files.pythonhosted.org/packages/6d/87/51a133a3d5307cf7ae3754249b0faaa91d3414b85c3d36f80b54d6817aa6/tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4", size = 1092472 }, + { url = "https://files.pythonhosted.org/packages/a5/1f/c93517dc6d3b2c9e988b8e24f87a8b2d4a4ab28920a3a3f3ea338397ae0c/tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97", size = 1141881 }, + { url = "https://files.pythonhosted.org/packages/bf/4b/48ca098cb580c099b5058bf62c4cb5e90ca6130fa43ef4df27088536245b/tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f", size = 799281 }, +] + +[[package]] +name = "time-machine" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/dd/5022939b9cadefe3af04f4012186c29b8afbe858b1ec2cfa38baeec94dab/time_machine-2.16.0.tar.gz", hash = "sha256:4a99acc273d2f98add23a89b94d4dd9e14969c01214c8514bfa78e4e9364c7e2", size = 24626 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/7b/34aad93f75f86503dd1fa53bc120d8129fe4de83aef58ffa78c62b044ef9/time_machine-2.16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8f936566ef9f09136a3d5db305961ef6d897b76b240c9ff4199144aed6dd4fe5", size = 20169 }, + { url = "https://files.pythonhosted.org/packages/68/cb/7d020d5c05d0460a4a96232b0777882ef989c1e6144d11ba984c4b0b4d1a/time_machine-2.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5886e23ede3478ca2a3e0a641f5d09dd784dfa9e48c96e8e5e31fc4fe77b6dc0", size = 16614 }, + { url = "https://files.pythonhosted.org/packages/0d/24/ce1ff76c9a4f3be88c2b947f2411a5a8019390734597d3106a151f8a9416/time_machine-2.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76caf539fa4941e1817b7c482c87c65c52a1903fea761e84525955c6106fafb", size = 32507 }, + { url = "https://files.pythonhosted.org/packages/08/d7/ba1135587bd2ed105e59ed7e05969c913277d110fecc0ed871006ea3f763/time_machine-2.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:298aa423e07c8b21b991782f01d7749c871c792319c2af3e9755f9ab49033212", size = 30627 }, + { url = "https://files.pythonhosted.org/packages/da/c6/f490aaddc80c54238f4b8fe97870bbfe0d2c70fe4a57269badc94f5f38a6/time_machine-2.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391ae9c484736850bb44ef125cbad52fe2d1b69e42c95dc88c43af8ead2cc7", size = 32362 }, + { url = "https://files.pythonhosted.org/packages/b1/f7/2522ae1c1995a39d6d8b7ee7efed47ec8bd7ff3240fdb2662a8b7e11b84a/time_machine-2.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:503e7ff507c2089699d91885fc5b9c8ff16774a7b6aff48b4dcee0c0a0685b61", size = 32188 }, + { url = "https://files.pythonhosted.org/packages/e9/53/b1ccb55f39e7e62660f852d7aedef438d2872ea9c73f64be46d0d3b3f3d7/time_machine-2.16.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eee7b0fc4fbab2c6585ea17606c6548be83919c70deea0865409fe9fc2d8cdce", size = 30600 }, + { url = "https://files.pythonhosted.org/packages/19/1f/37a5a9333a2da35b0fc43e8ac693b82dd5492892131bc3cc0c8f5835af94/time_machine-2.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9db5e5b3ccdadaafa5730c2f9db44c38b013234c9ad01f87738907e19bdba268", size = 31896 }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1a8bd64e5432adf47859cb63847b4472efc644b508602141c60ccf52112/time_machine-2.16.0-cp311-cp311-win32.whl", hash = "sha256:2552f0767bc10c9d668f108fef9b487809cdeb772439ce932e74136365c69baf", size = 19030 }, + { url = "https://files.pythonhosted.org/packages/34/c9/f4764e447aa9da4031c89da60fa69f4f73fd45571415788c298cbd4620e9/time_machine-2.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:12474fcdbc475aa6fe5275fe7224e685c5b9777f5939647f35980e9614ae7558", size = 19924 }, + { url = "https://files.pythonhosted.org/packages/8a/c0/788500d33656a044e3289b814106c2277209ac73316c00b9668012ce6027/time_machine-2.16.0-cp311-cp311-win_arm64.whl", hash = "sha256:ac2df0fa564356384515ed62cb6679f33f1f529435b16b0ec0f88414635dbe39", size = 17993 }, + { url = "https://files.pythonhosted.org/packages/4a/f4/603a84e7ae6427a53953db9f61b689dc6adf233e03c5f5ca907a901452fd/time_machine-2.16.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:84788f4d62a8b1bf5e499bb9b0e23ceceea21c415ad6030be6267ce3d639842f", size = 20155 }, + { url = "https://files.pythonhosted.org/packages/d8/94/dbe69aecb4b84be52d34814e63176c5ca61f38ee9e6ecda11104653405b5/time_machine-2.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:15ec236b6571730236a193d9d6c11d472432fc6ab54e85eac1c16d98ddcd71bf", size = 16640 }, + { url = "https://files.pythonhosted.org/packages/da/13/27f11be25d7bd298e033b9da93217e5b68309bf724b6e494cdadb471d00d/time_machine-2.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cedc989717c8b44a3881ac3d68ab5a95820448796c550de6a2149ed1525157f0", size = 33721 }, + { url = "https://files.pythonhosted.org/packages/e6/9d/70e4640fed1fd8122204ae825c688d0ef8c04f515ec6bf3c5f3086d6510e/time_machine-2.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d26d79de1c63a8c6586c75967e09b0ff306aa7e944a1eaddb74595c9b1839ca", size = 31646 }, + { url = "https://files.pythonhosted.org/packages/a1/cb/93bc0e51bea4e171a85151dbba3c3b3f612b50b953cd3076f5b4f0db9e14/time_machine-2.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:317b68b56a9c3731e0cf8886e0f94230727159e375988b36c60edce0ddbcb44a", size = 33403 }, + { url = "https://files.pythonhosted.org/packages/89/71/2c6a63ad4fbce3d62d46bbd9ac4433f30bade7f25978ce00815b905bcfcf/time_machine-2.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:43e1e18279759897be3293a255d53e6b1cb0364b69d9591d0b80c51e461c94b0", size = 33327 }, + { url = "https://files.pythonhosted.org/packages/68/4e/205c2b26763b8817cd6b8868242843800a1fbf275f2af35f5ba35ff2b01a/time_machine-2.16.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e43adb22def972a29d2b147999b56897116085777a0fea182fd93ee45730611e", size = 31454 }, + { url = "https://files.pythonhosted.org/packages/d7/95/44c1aa3994919f93534244c40cfd2fb9416d7686dc0c8b9b262c751b5118/time_machine-2.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0c766bea27a0600e36806d628ebc4b47178b12fcdfb6c24dc0a566a9c06bfe7f", size = 32972 }, + { url = "https://files.pythonhosted.org/packages/d4/ee/75243df9c7cf30f108758e887141a58e6544baaa46e2e647b9ccc56db819/time_machine-2.16.0-cp312-cp312-win32.whl", hash = "sha256:6dae82ab647d107817e013db82223e20a9853fa88543fec853ae326382d03c2e", size = 19078 }, + { url = "https://files.pythonhosted.org/packages/d4/7c/d4e67cc031f9653c92167ccf87d241e3208653d191c96ac79281c273ab92/time_machine-2.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:265462c77dc9576267c3c7f20707780a171a9fdbac93ac22e608c309efd68c33", size = 19923 }, + { url = "https://files.pythonhosted.org/packages/aa/b6/7047226fcb9afefe47fc80f605530535bf71ad99b6797f057abbfa4cd9a5/time_machine-2.16.0-cp312-cp312-win_arm64.whl", hash = "sha256:ef768e14768eebe3bb1196c0dece8e14c1c6991605721214a0c3c68cf77eb216", size = 18003 }, + { url = "https://files.pythonhosted.org/packages/a6/18/3087d0eb185cedbc82385f46bf16032ec7102a0e070205a2c88c4ecf9952/time_machine-2.16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7751bf745d54e9e8b358c0afa332815da9b8a6194b26d0fd62876ab6c4d5c9c0", size = 20209 }, + { url = "https://files.pythonhosted.org/packages/03/a3/fcc3eaf69390402ecf491d718e533b6d0e06d944d77fc8d87be3a2839102/time_machine-2.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1784edf173ca840ba154de6eed000b5727f65ab92972c2f88cec5c4d6349c5f2", size = 16681 }, + { url = "https://files.pythonhosted.org/packages/a2/96/8b76d264014bf9dc21873218de50d67223c71736f87fe6c65e582f7c29ac/time_machine-2.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f5876a5682ce1f517e55d7ace2383432627889f6f7e338b961f99d684fd9e8d", size = 33768 }, + { url = "https://files.pythonhosted.org/packages/5c/13/59ae8259be02b6c657ef6e3b6952bf274b43849f6f35cc61a576c68ce301/time_machine-2.16.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:806672529a2e255cd901f244c9033767dc1fa53466d0d3e3e49565a1572a64fe", size = 31685 }, + { url = "https://files.pythonhosted.org/packages/3e/c1/9f142beb4d373a2a01ebb58d5117289315baa5131d880ec804db49e94bf7/time_machine-2.16.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:667b150fedb54acdca2a4bea5bf6da837b43e6dd12857301b48191f8803ba93f", size = 33447 }, + { url = "https://files.pythonhosted.org/packages/95/f7/ed9ecd93c2d38dca77d0a28e070020f3ce0fb23e0d4a6edb14bcfffa5526/time_machine-2.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:da3ae1028af240c0c46c79adf9c1acffecc6ed1701f2863b8132f5ceae6ae4b5", size = 33408 }, + { url = "https://files.pythonhosted.org/packages/91/40/d0d274d70fa2c4cad531745deb8c81346365beb0a2736be05a3acde8b94a/time_machine-2.16.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:520a814ea1b2706c89ab260a54023033d3015abef25c77873b83e3d7c1fafbb2", size = 31526 }, + { url = "https://files.pythonhosted.org/packages/1d/ba/a27cdbb324d9a6d779cde0d514d47b696b5a6a653705d4b511fd65ef1514/time_machine-2.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8243664438bb468408b29c6865958662d75e51f79c91842d2794fa22629eb697", size = 33042 }, + { url = "https://files.pythonhosted.org/packages/72/63/64e9156c9e38c18720d0cc41378168635241de44013ffe3dd5b099447eb0/time_machine-2.16.0-cp313-cp313-win32.whl", hash = "sha256:32d445ce20d25c60ab92153c073942b0bac9815bfbfd152ce3dcc225d15ce988", size = 19108 }, + { url = "https://files.pythonhosted.org/packages/3d/40/27f5738fbd50b78dcc0682c14417eac5a49ccf430525dd0c5a058be125a2/time_machine-2.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:f6927dda86425f97ffda36131f297b1a601c64a6ee6838bfa0e6d3149c2f0d9f", size = 19935 }, + { url = "https://files.pythonhosted.org/packages/35/75/c4d8b2f0fe7dac22854d88a9c509d428e78ac4bf284bc54cfe83f75cc13b/time_machine-2.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:4d3843143c46dddca6491a954bbd0abfd435681512ac343169560e9bab504129", size = 18047 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tokenizers" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/41/c2be10975ca37f6ec40d7abd7e98a5213bb04f284b869c1a24e6504fd94d/tokenizers-0.21.0.tar.gz", hash = "sha256:ee0894bf311b75b0c03079f33859ae4b2334d675d4e93f5a4132e1eae2834fe4", size = 343021 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/5c/8b09607b37e996dc47e70d6a7b6f4bdd4e4d5ab22fe49d7374565c7fefaf/tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2", size = 2647461 }, + { url = "https://files.pythonhosted.org/packages/22/7a/88e58bb297c22633ed1c9d16029316e5b5ac5ee44012164c2edede599a5e/tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e", size = 2563639 }, + { url = "https://files.pythonhosted.org/packages/f7/14/83429177c19364df27d22bc096d4c2e431e0ba43e56c525434f1f9b0fd00/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b177fb54c4702ef611de0c069d9169f0004233890e0c4c5bd5508ae05abf193", size = 2903304 }, + { url = "https://files.pythonhosted.org/packages/7e/db/3433eab42347e0dc5452d8fcc8da03f638c9accffefe5a7c78146666964a/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b43779a269f4629bebb114e19c3fca0223296ae9fea8bb9a7a6c6fb0657ff8e", size = 2804378 }, + { url = "https://files.pythonhosted.org/packages/57/8b/7da5e6f89736c2ade02816b4733983fca1c226b0c42980b1ae9dc8fcf5cc/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aeb255802be90acfd363626753fda0064a8df06031012fe7d52fd9a905eb00e", size = 3095488 }, + { url = "https://files.pythonhosted.org/packages/4d/f6/5ed6711093dc2c04a4e03f6461798b12669bc5a17c8be7cce1240e0b5ce8/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8b09dbeb7a8d73ee204a70f94fc06ea0f17dcf0844f16102b9f414f0b7463ba", size = 3121410 }, + { url = "https://files.pythonhosted.org/packages/81/42/07600892d48950c5e80505b81411044a2d969368cdc0d929b1c847bf6697/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:400832c0904f77ce87c40f1a8a27493071282f785724ae62144324f171377273", size = 3388821 }, + { url = "https://files.pythonhosted.org/packages/22/06/69d7ce374747edaf1695a4f61b83570d91cc8bbfc51ccfecf76f56ab4aac/tokenizers-0.21.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84ca973b3a96894d1707e189c14a774b701596d579ffc7e69debfc036a61a04", size = 3008868 }, + { url = "https://files.pythonhosted.org/packages/c8/69/54a0aee4d576045b49a0eb8bffdc495634309c823bf886042e6f46b80058/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb7202d231b273c34ec67767378cd04c767e967fda12d4a9e36208a34e2f137e", size = 8975831 }, + { url = "https://files.pythonhosted.org/packages/f7/f3/b776061e4f3ebf2905ba1a25d90380aafd10c02d406437a8ba22d1724d76/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:089d56db6782a73a27fd8abf3ba21779f5b85d4a9f35e3b493c7bbcbbf0d539b", size = 8920746 }, + { url = "https://files.pythonhosted.org/packages/d8/ee/ce83d5ec8b6844ad4c3ecfe3333d58ecc1adc61f0878b323a15355bcab24/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c87ca3dc48b9b1222d984b6b7490355a6fdb411a2d810f6f05977258400ddb74", size = 9161814 }, + { url = "https://files.pythonhosted.org/packages/18/07/3e88e65c0ed28fa93aa0c4d264988428eef3df2764c3126dc83e243cb36f/tokenizers-0.21.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4145505a973116f91bc3ac45988a92e618a6f83eb458f49ea0790df94ee243ff", size = 9357138 }, + { url = "https://files.pythonhosted.org/packages/15/b0/dc4572ca61555fc482ebc933f26cb407c6aceb3dc19c301c68184f8cad03/tokenizers-0.21.0-cp39-abi3-win32.whl", hash = "sha256:eb1702c2f27d25d9dd5b389cc1f2f51813e99f8ca30d9e25348db6585a97e24a", size = 2202266 }, + { url = "https://files.pythonhosted.org/packages/44/69/d21eb253fa91622da25585d362a874fa4710be600f0ea9446d8d0217cec1/tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c", size = 2389192 }, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 }, +] + +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "transformers" +version = "4.47.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/15/1a/936aeb4f88112f670b604f5748034568dbc2b9bbb457a8d4518b1a15510a/transformers-4.47.1.tar.gz", hash = "sha256:6c29c05a5f595e278481166539202bf8641281536df1c42357ee58a45d0a564a", size = 8707421 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/3a/8bdab26e09c5a242182b7ba9152e216d5ab4ae2d78c4298eb4872549cd35/transformers-4.47.1-py3-none-any.whl", hash = "sha256:d2f5d19bb6283cd66c893ec7e6d931d6370bbf1cc93633326ff1f41a40046c9c", size = 10133598 }, +] + +[[package]] +name = "tweepy" +version = "4.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, + { name = "requests-oauthlib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/1c/0db8c3cf9d31bf63853ff612d201060ae78e6db03468a70e063bef0eda62/tweepy-4.14.0.tar.gz", hash = "sha256:1f9f1707d6972de6cff6c5fd90dfe6a449cd2e0d70bd40043ffab01e07a06c8c", size = 88623 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/78/ba0065d5636bbf4a35b78c4f81b74e7858b609cdf69e629d6da5c91b9d92/tweepy-4.14.0-py3-none-any.whl", hash = "sha256:db6d3844ccc0c6d27f339f12ba8acc89912a961da513c1ae50fa2be502a56afb", size = 98520 }, +] + +[[package]] +name = "typer" +version = "0.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/dca7b219718afd37a0068f4f2530a727c2b74a8b6e8e0c0080a4c0de4fcd/typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a", size = 99789 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/cc/0a838ba5ca64dc832aa43f727bd586309846b0ffb2ce52422543e6075e8a/typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847", size = 44908 }, +] + +[[package]] +name = "types-setuptools" +version = "75.6.0.20241126" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/d2/15ede73bc3faf647af2c7bfefa90dde563a4b6bb580b1199f6255463c272/types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0", size = 48569 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/a0/898a1363592d372d4103b76b7c723d84fcbde5fa4ed0c3a29102805ed7db/types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b", size = 72732 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 }, +] + +[[package]] +name = "tzdata" +version = "2024.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, +] + +[[package]] +name = "ujson" +version = "5.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/00/3110fd566786bfa542adb7932d62035e0c0ef662a8ff6544b6643b3d6fd7/ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1", size = 7154885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/ec/3c551ecfe048bcb3948725251fb0214b5844a12aa60bee08d78315bb1c39/ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00", size = 55353 }, + { url = "https://files.pythonhosted.org/packages/8d/9f/4731ef0671a0653e9f5ba18db7c4596d8ecbf80c7922dd5fe4150f1aea76/ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126", size = 51813 }, + { url = "https://files.pythonhosted.org/packages/1f/2b/44d6b9c1688330bf011f9abfdb08911a9dc74f76926dde74e718d87600da/ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8", size = 51988 }, + { url = "https://files.pythonhosted.org/packages/29/45/f5f5667427c1ec3383478092a414063ddd0dfbebbcc533538fe37068a0a3/ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b", size = 53561 }, + { url = "https://files.pythonhosted.org/packages/26/21/a0c265cda4dd225ec1be595f844661732c13560ad06378760036fc622587/ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9", size = 58497 }, + { url = "https://files.pythonhosted.org/packages/28/36/8fde862094fd2342ccc427a6a8584fed294055fdee341661c78660f7aef3/ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f", size = 997877 }, + { url = "https://files.pythonhosted.org/packages/90/37/9208e40d53baa6da9b6a1c719e0670c3f474c8fc7cc2f1e939ec21c1bc93/ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4", size = 1140632 }, + { url = "https://files.pythonhosted.org/packages/89/d5/2626c87c59802863d44d19e35ad16b7e658e4ac190b0dead17ff25460b4c/ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1", size = 1043513 }, + { url = "https://files.pythonhosted.org/packages/2f/ee/03662ce9b3f16855770f0d70f10f0978ba6210805aa310c4eebe66d36476/ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f", size = 38616 }, + { url = "https://files.pythonhosted.org/packages/3e/20/952dbed5895835ea0b82e81a7be4ebb83f93b079d4d1ead93fcddb3075af/ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720", size = 42071 }, + { url = "https://files.pythonhosted.org/packages/e8/a6/fd3f8bbd80842267e2d06c3583279555e8354c5986c952385199d57a5b6c/ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5", size = 55642 }, + { url = "https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e", size = 51807 }, + { url = "https://files.pythonhosted.org/packages/25/23/079a4cc6fd7e2655a473ed9e776ddbb7144e27f04e8fc484a0fb45fe6f71/ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043", size = 51972 }, + { url = "https://files.pythonhosted.org/packages/04/81/668707e5f2177791869b624be4c06fb2473bf97ee33296b18d1cf3092af7/ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1", size = 53686 }, + { url = "https://files.pythonhosted.org/packages/bd/50/056d518a386d80aaf4505ccf3cee1c40d312a46901ed494d5711dd939bc3/ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3", size = 58591 }, + { url = "https://files.pythonhosted.org/packages/fc/d6/aeaf3e2d6fb1f4cfb6bf25f454d60490ed8146ddc0600fae44bfe7eb5a72/ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21", size = 997853 }, + { url = "https://files.pythonhosted.org/packages/f8/d5/1f2a5d2699f447f7d990334ca96e90065ea7f99b142ce96e85f26d7e78e2/ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2", size = 1140689 }, + { url = "https://files.pythonhosted.org/packages/f2/2c/6990f4ccb41ed93744aaaa3786394bca0875503f97690622f3cafc0adfde/ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e", size = 1043576 }, + { url = "https://files.pythonhosted.org/packages/14/f5/a2368463dbb09fbdbf6a696062d0c0f62e4ae6fa65f38f829611da2e8fdd/ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e", size = 38764 }, + { url = "https://files.pythonhosted.org/packages/59/2d/691f741ffd72b6c84438a93749ac57bf1a3f217ac4b0ea4fd0e96119e118/ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc", size = 42211 }, + { url = "https://files.pythonhosted.org/packages/0d/69/b3e3f924bb0e8820bb46671979770c5be6a7d51c77a66324cdb09f1acddb/ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287", size = 55646 }, + { url = "https://files.pythonhosted.org/packages/32/8a/9b748eb543c6cabc54ebeaa1f28035b1bd09c0800235b08e85990734c41e/ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e", size = 51806 }, + { url = "https://files.pythonhosted.org/packages/39/50/4b53ea234413b710a18b305f465b328e306ba9592e13a791a6a6b378869b/ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557", size = 51975 }, + { url = "https://files.pythonhosted.org/packages/b4/9d/8061934f960cdb6dd55f0b3ceeff207fcc48c64f58b43403777ad5623d9e/ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988", size = 53693 }, + { url = "https://files.pythonhosted.org/packages/f5/be/7bfa84b28519ddbb67efc8410765ca7da55e6b93aba84d97764cd5794dbc/ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816", size = 58594 }, + { url = "https://files.pythonhosted.org/packages/48/eb/85d465abafb2c69d9699cfa5520e6e96561db787d36c677370e066c7e2e7/ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20", size = 997853 }, + { url = "https://files.pythonhosted.org/packages/9f/76/2a63409fc05d34dd7d929357b7a45e3a2c96f22b4225cd74becd2ba6c4cb/ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0", size = 1140694 }, + { url = "https://files.pythonhosted.org/packages/45/ed/582c4daba0f3e1688d923b5cb914ada1f9defa702df38a1916c899f7c4d1/ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f", size = 1043580 }, + { url = "https://files.pythonhosted.org/packages/d7/0c/9837fece153051e19c7bade9f88f9b409e026b9525927824cdf16293b43b/ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165", size = 38766 }, + { url = "https://files.pythonhosted.org/packages/d7/72/6cb6728e2738c05bbe9bd522d6fc79f86b9a28402f38663e85a28fddd4a0/ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539", size = 42212 }, +] + +[[package]] +name = "unstructured" +version = "0.16.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backoff" }, + { name = "beautifulsoup4" }, + { name = "chardet" }, + { name = "dataclasses-json" }, + { name = "emoji" }, + { name = "filetype" }, + { name = "html5lib" }, + { name = "langdetect" }, + { name = "lxml" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "psutil" }, + { name = "python-iso639" }, + { name = "python-magic" }, + { name = "python-oxmsg" }, + { name = "rapidfuzz" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, + { name = "unstructured-client" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/c3/5bd80074a63c972f0f9adac5276955f6cbcceb71ac05ae72cc524ad93813/unstructured-0.16.11.tar.gz", hash = "sha256:33ebf68aae11ce33c8a96335296557b5abd8ba96eaba3e5a1554c0b9eee40bb5", size = 1664314 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/67/71d1e61e8127dd9ab66117d3c5ebfc6f87c1d00bf13ff3bcc837feed6e09/unstructured-0.16.11-py3-none-any.whl", hash = "sha256:a92d5bc2c2b7bb23369641fb7a7f0daba1775639199306ce4cd83ca564a03763", size = 1748042 }, +] + +[package.optional-dependencies] +csv = [ + { name = "pandas" }, +] +doc = [ + { name = "python-docx" }, +] +docx = [ + { name = "python-docx" }, +] +epub = [ + { name = "pypandoc" }, +] +md = [ + { name = "markdown" }, +] +odt = [ + { name = "pypandoc" }, + { name = "python-docx" }, +] +org = [ + { name = "pypandoc" }, +] +ppt = [ + { name = "python-pptx" }, +] +pptx = [ + { name = "python-pptx" }, +] +rst = [ + { name = "pypandoc" }, +] +rtf = [ + { name = "pypandoc" }, +] +tsv = [ + { name = "pandas" }, +] +xlsx = [ + { name = "networkx" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "xlrd" }, +] + +[[package]] +name = "unstructured-client" +version = "0.25.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "cryptography" }, + { name = "dataclasses-json" }, + { name = "deepdiff" }, + { name = "httpx" }, + { name = "idna" }, + { name = "jsonpath-python" }, + { name = "marshmallow" }, + { name = "mypy-extensions" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "pypdf" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "six" }, + { name = "typing-extensions" }, + { name = "typing-inspect" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/b2/1214a9391951754a770d6be81a67093e827a198f610dbaa971fea2b65a3a/unstructured-client-0.25.9.tar.gz", hash = "sha256:fcc461623f58fefb0e22508e28bf653a8f6934b9779cb4a90dd68d77a39fb5b2", size = 39986 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/71/f0e594858f251ee2ac2edfe532714fd47afcc4e9294a3862a7c19ec13cf6/unstructured_client-0.25.9-py3-none-any.whl", hash = "sha256:c984c01878c8fc243be7c842467d1113a194d885ab6396ae74258ee42717c5b5", size = 45296 }, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, +] + +[[package]] +name = "uvicorn" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/dd/0d3bab50ab4ef8bec849f89fec2adc2fabcc397018c30e57d9f0d4009c5e/uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8", size = 37688 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/bd/d47ee02312640fcf26c7e1c807402d5c5eab468571153a94ec8f7ada0e46/uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996", size = 58345 }, +] + +[[package]] +name = "validators" +version = "0.33.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5d/af/5ad4fed95276e3eb7628d858c88cd205799bcad847e46223760a3129cbb1/validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf", size = 70741 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/22/91b4bd36df27e651daedd93d03d5d3bb6029fdb0b55494e45ee46c36c570/validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075", size = 43298 }, +] + +[[package]] +name = "virtualenv" +version = "20.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/75/53316a5a8050069228a2f6d11f32046cfa94fbb6cc3f08703f59b873de2e/virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa", size = 7650368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/f9/0919cf6f1432a8c4baa62511f8f8da8225432d22e83e3476f5be1a1edc6e/virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", size = 4276702 }, +] + +[[package]] +name = "weaviate-client" +version = "4.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "authlib" }, + { name = "grpcio" }, + { name = "grpcio-health-checking" }, + { name = "grpcio-tools" }, + { name = "httpx" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "validators" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/01/96606279fb32b5f48bef649cd36205de9d4b63649d0014c66c8267170af1/weaviate_client-4.6.7.tar.gz", hash = "sha256:202b32e160536f5f44e4a635d30c3d3a0790b1a7ff997f5e243919d1ac5b68a1", size = 634078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/03/ec9746f437e1247e2f66dbd1e4ef157d6d2df121dafdcea74ac4d08fa4ea/weaviate_client-4.6.7-py3-none-any.whl", hash = "sha256:8793de35264cab33a84fe8cb8c422a257fe4d8334657aaddd8ead853da3fb34a", size = 328880 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "win-precise-time" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/b0/21547e16a47206ccdd15769bf65e143ade1ffae67f0881c855f76e44e9fa/win-precise-time-1.4.2.tar.gz", hash = "sha256:89274785cbc5f2997e01675206da3203835a442c60fd97798415c6b3c179c0b9", size = 7982 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/d6/a48717649fea2d7a6679db86dae9ae4b12078c7a48aa89a8f14a360f29d0/win_precise_time-1.4.2-cp311-cp311-win32.whl", hash = "sha256:59272655ad6f36910d0b585969402386fa627fca3be24acc9a21be1d550e5db8", size = 14703 }, + { url = "https://files.pythonhosted.org/packages/f9/9c/46d69220d468c82ca2044284c5a8089705c5eb66be416abcbba156365a14/win_precise_time-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:0897bb055f19f3b4336e2ba6bee0115ac20fd7ec615a6d736632e2df77f8851a", size = 14912 }, + { url = "https://files.pythonhosted.org/packages/2e/96/55a14b5c0e90439951f4a72672223bba81a5f882033c5850f8a6c7f4308b/win_precise_time-1.4.2-cp312-cp312-win32.whl", hash = "sha256:0210dcea88a520c91de1708ae4c881e3c0ddc956daa08b9eabf2b7c35f3109f5", size = 14694 }, + { url = "https://files.pythonhosted.org/packages/17/19/7ea9a22a69fc23d5ca02e8edf65e4a335a210497794af1af0ef8fda91fa0/win_precise_time-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:85670f77cc8accd8f1e6d05073999f77561c23012a9ee988cbd44bb7ce655062", size = 14913 }, +] + +[[package]] +name = "wrapt" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/a1/fc03dca9b0432725c2e8cdbf91a349d2194cf03d8523c124faebe581de09/wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", size = 55542 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/40/def56538acddc2f764c157d565b9f989072a1d2f2a8e384324e2e104fc7d/wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", size = 38766 }, + { url = "https://files.pythonhosted.org/packages/89/e2/8c299f384ae4364193724e2adad99f9504599d02a73ec9199bf3f406549d/wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", size = 83730 }, + { url = "https://files.pythonhosted.org/packages/29/ef/fcdb776b12df5ea7180d065b28fa6bb27ac785dddcd7202a0b6962bbdb47/wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", size = 75470 }, + { url = "https://files.pythonhosted.org/packages/55/b5/698bd0bf9fbb3ddb3a2feefbb7ad0dea1205f5d7d05b9cbab54f5db731aa/wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", size = 83168 }, + { url = "https://files.pythonhosted.org/packages/ce/07/701a5cee28cb4d5df030d4b2649319e36f3d9fdd8000ef1d84eb06b9860d/wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", size = 82307 }, + { url = "https://files.pythonhosted.org/packages/42/92/c48ba92cda6f74cb914dc3c5bba9650dc80b790e121c4b987f3a46b028f5/wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", size = 75101 }, + { url = "https://files.pythonhosted.org/packages/8a/0a/9276d3269334138b88a2947efaaf6335f61d547698e50dff672ade24f2c6/wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", size = 81835 }, + { url = "https://files.pythonhosted.org/packages/b9/4c/39595e692753ef656ea94b51382cc9aea662fef59d7910128f5906486f0e/wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", size = 36412 }, + { url = "https://files.pythonhosted.org/packages/63/bb/c293a67fb765a2ada48f48cd0f2bb957da8161439da4c03ea123b9894c02/wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", size = 38744 }, + { url = "https://files.pythonhosted.org/packages/85/82/518605474beafff11f1a34759f6410ab429abff9f7881858a447e0d20712/wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", size = 38904 }, + { url = "https://files.pythonhosted.org/packages/80/6c/17c3b2fed28edfd96d8417c865ef0b4c955dc52c4e375d86f459f14340f1/wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", size = 88622 }, + { url = "https://files.pythonhosted.org/packages/4a/11/60ecdf3b0fd3dca18978d89acb5d095a05f23299216e925fcd2717c81d93/wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", size = 80920 }, + { url = "https://files.pythonhosted.org/packages/d2/50/dbef1a651578a3520d4534c1e434989e3620380c1ad97e309576b47f0ada/wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", size = 89170 }, + { url = "https://files.pythonhosted.org/packages/44/a2/78c5956bf39955288c9e0dd62e807b308c3aa15a0f611fbff52aa8d6b5ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", size = 86748 }, + { url = "https://files.pythonhosted.org/packages/99/49/2ee413c78fc0bdfebe5bee590bf3becdc1fab0096a7a9c3b5c9666b2415f/wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", size = 79734 }, + { url = "https://files.pythonhosted.org/packages/c0/8c/4221b7b270e36be90f0930fe15a4755a6ea24093f90b510166e9ed7861ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", size = 87552 }, + { url = "https://files.pythonhosted.org/packages/4c/6b/1aaccf3efe58eb95e10ce8e77c8909b7a6b0da93449a92c4e6d6d10b3a3d/wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", size = 36647 }, + { url = "https://files.pythonhosted.org/packages/b3/4f/243f88ac49df005b9129194c6511b3642818b3e6271ddea47a15e2ee4934/wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", size = 38830 }, + { url = "https://files.pythonhosted.org/packages/67/9c/38294e1bb92b055222d1b8b6591604ca4468b77b1250f59c15256437644f/wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", size = 38904 }, + { url = "https://files.pythonhosted.org/packages/78/b6/76597fb362cbf8913a481d41b14b049a8813cd402a5d2f84e57957c813ae/wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", size = 88608 }, + { url = "https://files.pythonhosted.org/packages/bc/69/b500884e45b3881926b5f69188dc542fb5880019d15c8a0df1ab1dfda1f7/wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", size = 80879 }, + { url = "https://files.pythonhosted.org/packages/52/31/f4cc58afe29eab8a50ac5969963010c8b60987e719c478a5024bce39bc42/wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", size = 89119 }, + { url = "https://files.pythonhosted.org/packages/aa/9c/05ab6bf75dbae7a9d34975fb6ee577e086c1c26cde3b6cf6051726d33c7c/wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", size = 86778 }, + { url = "https://files.pythonhosted.org/packages/0e/6c/4b8d42e3db355603d35fe5c9db79c28f2472a6fd1ccf4dc25ae46739672a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", size = 79793 }, + { url = "https://files.pythonhosted.org/packages/69/23/90e3a2ee210c0843b2c2a49b3b97ffcf9cad1387cb18cbeef9218631ed5a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", size = 87606 }, + { url = "https://files.pythonhosted.org/packages/5f/06/3683126491ca787d8d71d8d340e775d40767c5efedb35039d987203393b7/wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", size = 36651 }, + { url = "https://files.pythonhosted.org/packages/f1/bc/3bf6d2ca0d2c030d324ef9272bea0a8fdaff68f3d1fa7be7a61da88e51f7/wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838", size = 38835 }, + { url = "https://files.pythonhosted.org/packages/ce/b5/251165c232d87197a81cd362eeb5104d661a2dd3aa1f0b33e4bf61dda8b8/wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", size = 40146 }, + { url = "https://files.pythonhosted.org/packages/89/33/1e1bdd3e866eeb73d8c4755db1ceb8a80d5bd51ee4648b3f2247adec4e67/wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", size = 113444 }, + { url = "https://files.pythonhosted.org/packages/9f/7c/94f53b065a43f5dc1fbdd8b80fd8f41284315b543805c956619c0b8d92f0/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", size = 101246 }, + { url = "https://files.pythonhosted.org/packages/62/5d/640360baac6ea6018ed5e34e6e80e33cfbae2aefde24f117587cd5efd4b7/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", size = 109320 }, + { url = "https://files.pythonhosted.org/packages/e3/cf/6c7a00ae86a2e9482c91170aefe93f4ccda06c1ac86c4de637c69133da59/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", size = 110193 }, + { url = "https://files.pythonhosted.org/packages/cd/cc/aa718df0d20287e8f953ce0e2f70c0af0fba1d3c367db7ee8bdc46ea7003/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", size = 100460 }, + { url = "https://files.pythonhosted.org/packages/f7/16/9f3ac99fe1f6caaa789d67b4e3c562898b532c250769f5255fa8b8b93983/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", size = 106347 }, + { url = "https://files.pythonhosted.org/packages/64/85/c77a331b2c06af49a687f8b926fc2d111047a51e6f0b0a4baa01ff3a673a/wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", size = 37971 }, + { url = "https://files.pythonhosted.org/packages/05/9b/b2469f8be9efed24283fd7b9eeb8e913e9bc0715cf919ea8645e428ab7af/wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", size = 40755 }, + { url = "https://files.pythonhosted.org/packages/4b/d9/a8ba5e9507a9af1917285d118388c5eb7a81834873f45df213a6fe923774/wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", size = 23592 }, +] + +[[package]] +name = "xlrd" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/b3/19a2540d21dea5f908304375bd43f5ed7a4c28a370dc9122c565423e6b44/xlrd-2.0.1.tar.gz", hash = "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88", size = 100259 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/0c/c2a72d51fe56e08a08acc85d13013558a2d793028ae7385448a6ccdfae64/xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd", size = 96531 }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/c3/b36fa44a0610a0f65d2e65ba6a262cbe2554b819f1449731971f7c16ea3c/XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c", size = 198732 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/ea/53d1fe468e63e092cf16e2c18d16f50c29851242f9dd12d6a66e0d7f0d02/XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e", size = 159925 }, +] + +[[package]] +name = "xxhash" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/c7/afed0f131fbda960ff15eee7f304fa0eeb2d58770fade99897984852ef23/xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1", size = 31969 }, + { url = "https://files.pythonhosted.org/packages/8c/0c/7c3bc6d87e5235672fcc2fb42fd5ad79fe1033925f71bf549ee068c7d1ca/xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8", size = 30800 }, + { url = "https://files.pythonhosted.org/packages/04/9e/01067981d98069eec1c20201f8c145367698e9056f8bc295346e4ea32dd1/xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166", size = 221566 }, + { url = "https://files.pythonhosted.org/packages/d4/09/d4996de4059c3ce5342b6e1e6a77c9d6c91acce31f6ed979891872dd162b/xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7", size = 201214 }, + { url = "https://files.pythonhosted.org/packages/62/f5/6d2dc9f8d55a7ce0f5e7bfef916e67536f01b85d32a9fbf137d4cadbee38/xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623", size = 429433 }, + { url = "https://files.pythonhosted.org/packages/d9/72/9256303f10e41ab004799a4aa74b80b3c5977d6383ae4550548b24bd1971/xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a", size = 194822 }, + { url = "https://files.pythonhosted.org/packages/34/92/1a3a29acd08248a34b0e6a94f4e0ed9b8379a4ff471f1668e4dce7bdbaa8/xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88", size = 208538 }, + { url = "https://files.pythonhosted.org/packages/53/ad/7fa1a109663366de42f724a1cdb8e796a260dbac45047bce153bc1e18abf/xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c", size = 216953 }, + { url = "https://files.pythonhosted.org/packages/35/02/137300e24203bf2b2a49b48ce898ecce6fd01789c0fcd9c686c0a002d129/xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2", size = 203594 }, + { url = "https://files.pythonhosted.org/packages/23/03/aeceb273933d7eee248c4322b98b8e971f06cc3880e5f7602c94e5578af5/xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084", size = 210971 }, + { url = "https://files.pythonhosted.org/packages/e3/64/ed82ec09489474cbb35c716b189ddc1521d8b3de12b1b5ab41ce7f70253c/xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d", size = 415050 }, + { url = "https://files.pythonhosted.org/packages/71/43/6db4c02dcb488ad4e03bc86d70506c3d40a384ee73c9b5c93338eb1f3c23/xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839", size = 192216 }, + { url = "https://files.pythonhosted.org/packages/22/6d/db4abec29e7a567455344433d095fdb39c97db6955bb4a2c432e486b4d28/xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da", size = 30120 }, + { url = "https://files.pythonhosted.org/packages/52/1c/fa3b61c0cf03e1da4767213672efe186b1dfa4fc901a4a694fb184a513d1/xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58", size = 30003 }, + { url = "https://files.pythonhosted.org/packages/6b/8e/9e6fc572acf6e1cc7ccb01973c213f895cb8668a9d4c2b58a99350da14b7/xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3", size = 26777 }, + { url = "https://files.pythonhosted.org/packages/07/0e/1bfce2502c57d7e2e787600b31c83535af83746885aa1a5f153d8c8059d6/xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00", size = 31969 }, + { url = "https://files.pythonhosted.org/packages/3f/d6/8ca450d6fe5b71ce521b4e5db69622383d039e2b253e9b2f24f93265b52c/xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9", size = 30787 }, + { url = "https://files.pythonhosted.org/packages/5b/84/de7c89bc6ef63d750159086a6ada6416cc4349eab23f76ab870407178b93/xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84", size = 220959 }, + { url = "https://files.pythonhosted.org/packages/fe/86/51258d3e8a8545ff26468c977101964c14d56a8a37f5835bc0082426c672/xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793", size = 200006 }, + { url = "https://files.pythonhosted.org/packages/02/0a/96973bd325412feccf23cf3680fd2246aebf4b789122f938d5557c54a6b2/xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be", size = 428326 }, + { url = "https://files.pythonhosted.org/packages/11/a7/81dba5010f7e733de88af9555725146fc133be97ce36533867f4c7e75066/xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6", size = 194380 }, + { url = "https://files.pythonhosted.org/packages/fb/7d/f29006ab398a173f4501c0e4977ba288f1c621d878ec217b4ff516810c04/xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90", size = 207934 }, + { url = "https://files.pythonhosted.org/packages/8a/6e/6e88b8f24612510e73d4d70d9b0c7dff62a2e78451b9f0d042a5462c8d03/xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27", size = 216301 }, + { url = "https://files.pythonhosted.org/packages/af/51/7862f4fa4b75a25c3b4163c8a873f070532fe5f2d3f9b3fc869c8337a398/xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2", size = 203351 }, + { url = "https://files.pythonhosted.org/packages/22/61/8d6a40f288f791cf79ed5bb113159abf0c81d6efb86e734334f698eb4c59/xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d", size = 210294 }, + { url = "https://files.pythonhosted.org/packages/17/02/215c4698955762d45a8158117190261b2dbefe9ae7e5b906768c09d8bc74/xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab", size = 414674 }, + { url = "https://files.pythonhosted.org/packages/31/5c/b7a8db8a3237cff3d535261325d95de509f6a8ae439a5a7a4ffcff478189/xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e", size = 192022 }, + { url = "https://files.pythonhosted.org/packages/78/e3/dd76659b2811b3fd06892a8beb850e1996b63e9235af5a86ea348f053e9e/xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8", size = 30170 }, + { url = "https://files.pythonhosted.org/packages/d9/6b/1c443fe6cfeb4ad1dcf231cdec96eb94fb43d6498b4469ed8b51f8b59a37/xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e", size = 30040 }, + { url = "https://files.pythonhosted.org/packages/0f/eb/04405305f290173acc0350eba6d2f1a794b57925df0398861a20fbafa415/xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2", size = 26796 }, + { url = "https://files.pythonhosted.org/packages/c9/b8/e4b3ad92d249be5c83fa72916c9091b0965cb0faeff05d9a0a3870ae6bff/xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6", size = 31795 }, + { url = "https://files.pythonhosted.org/packages/fc/d8/b3627a0aebfbfa4c12a41e22af3742cf08c8ea84f5cc3367b5de2d039cce/xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5", size = 30792 }, + { url = "https://files.pythonhosted.org/packages/c3/cc/762312960691da989c7cd0545cb120ba2a4148741c6ba458aa723c00a3f8/xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc", size = 220950 }, + { url = "https://files.pythonhosted.org/packages/fe/e9/cc266f1042c3c13750e86a535496b58beb12bf8c50a915c336136f6168dc/xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3", size = 199980 }, + { url = "https://files.pythonhosted.org/packages/bf/85/a836cd0dc5cc20376de26b346858d0ac9656f8f730998ca4324921a010b9/xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c", size = 428324 }, + { url = "https://files.pythonhosted.org/packages/b4/0e/15c243775342ce840b9ba34aceace06a1148fa1630cd8ca269e3223987f5/xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb", size = 194370 }, + { url = "https://files.pythonhosted.org/packages/87/a1/b028bb02636dfdc190da01951d0703b3d904301ed0ef6094d948983bef0e/xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f", size = 207911 }, + { url = "https://files.pythonhosted.org/packages/80/d5/73c73b03fc0ac73dacf069fdf6036c9abad82de0a47549e9912c955ab449/xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7", size = 216352 }, + { url = "https://files.pythonhosted.org/packages/b6/2a/5043dba5ddbe35b4fe6ea0a111280ad9c3d4ba477dd0f2d1fe1129bda9d0/xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326", size = 203410 }, + { url = "https://files.pythonhosted.org/packages/a2/b2/9a8ded888b7b190aed75b484eb5c853ddd48aa2896e7b59bbfbce442f0a1/xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf", size = 210322 }, + { url = "https://files.pythonhosted.org/packages/98/62/440083fafbc917bf3e4b67c2ade621920dd905517e85631c10aac955c1d2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7", size = 414725 }, + { url = "https://files.pythonhosted.org/packages/75/db/009206f7076ad60a517e016bb0058381d96a007ce3f79fa91d3010f49cc2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c", size = 192070 }, + { url = "https://files.pythonhosted.org/packages/1f/6d/c61e0668943a034abc3a569cdc5aeae37d686d9da7e39cf2ed621d533e36/xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637", size = 30172 }, + { url = "https://files.pythonhosted.org/packages/96/14/8416dce965f35e3d24722cdf79361ae154fa23e2ab730e5323aa98d7919e/xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43", size = 30041 }, + { url = "https://files.pythonhosted.org/packages/27/ee/518b72faa2073f5aa8e3262408d284892cb79cf2754ba0c3a5870645ef73/xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b", size = 26801 }, +] + +[[package]] +name = "xyzservices" +version = "2024.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/16/ae87cbd2d6bfc40a419077521c35aadf5121725b7bee3d7c51b56f50958b/xyzservices-2024.9.0.tar.gz", hash = "sha256:68fb8353c9dbba4f1ff6c0f2e5e4e596bb9e1db7f94f4f7dfbcb26e25aa66fde", size = 1131900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/d3/e07ce413d16ef64e885bea37551eac4c5ca3ddd440933f9c94594273d0d9/xyzservices-2024.9.0-py3-none-any.whl", hash = "sha256:776ae82b78d6e5ca63dd6a94abb054df8130887a4a308473b54a6bd364de8644", size = 85130 }, +] + +[[package]] +name = "yarl" +version = "1.18.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/9d/4b94a8e6d2b51b599516a5cb88e5bc99b4d8d4583e468057eaa29d5f0918/yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", size = 181062 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/93/282b5f4898d8e8efaf0790ba6d10e2245d2c9f30e199d1a85cae9356098c/yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", size = 141555 }, + { url = "https://files.pythonhosted.org/packages/6d/9c/0a49af78df099c283ca3444560f10718fadb8a18dc8b3edf8c7bd9fd7d89/yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", size = 94351 }, + { url = "https://files.pythonhosted.org/packages/5a/a1/205ab51e148fdcedad189ca8dd587794c6f119882437d04c33c01a75dece/yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", size = 92286 }, + { url = "https://files.pythonhosted.org/packages/ed/fe/88b690b30f3f59275fb674f5f93ddd4a3ae796c2b62e5bb9ece8a4914b83/yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8", size = 340649 }, + { url = "https://files.pythonhosted.org/packages/07/eb/3b65499b568e01f36e847cebdc8d7ccb51fff716dbda1ae83c3cbb8ca1c9/yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca", size = 356623 }, + { url = "https://files.pythonhosted.org/packages/33/46/f559dc184280b745fc76ec6b1954de2c55595f0ec0a7614238b9ebf69618/yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8", size = 354007 }, + { url = "https://files.pythonhosted.org/packages/af/ba/1865d85212351ad160f19fb99808acf23aab9a0f8ff31c8c9f1b4d671fc9/yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae", size = 344145 }, + { url = "https://files.pythonhosted.org/packages/94/cb/5c3e975d77755d7b3d5193e92056b19d83752ea2da7ab394e22260a7b824/yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3", size = 336133 }, + { url = "https://files.pythonhosted.org/packages/19/89/b77d3fd249ab52a5c40859815765d35c91425b6bb82e7427ab2f78f5ff55/yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb", size = 347967 }, + { url = "https://files.pythonhosted.org/packages/35/bd/f6b7630ba2cc06c319c3235634c582a6ab014d52311e7d7c22f9518189b5/yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e", size = 346397 }, + { url = "https://files.pythonhosted.org/packages/18/1a/0b4e367d5a72d1f095318344848e93ea70da728118221f84f1bf6c1e39e7/yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59", size = 350206 }, + { url = "https://files.pythonhosted.org/packages/b5/cf/320fff4367341fb77809a2d8d7fe75b5d323a8e1b35710aafe41fdbf327b/yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d", size = 362089 }, + { url = "https://files.pythonhosted.org/packages/57/cf/aadba261d8b920253204085268bad5e8cdd86b50162fcb1b10c10834885a/yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e", size = 366267 }, + { url = "https://files.pythonhosted.org/packages/54/58/fb4cadd81acdee6dafe14abeb258f876e4dd410518099ae9a35c88d8097c/yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a", size = 359141 }, + { url = "https://files.pythonhosted.org/packages/9a/7a/4c571597589da4cd5c14ed2a0b17ac56ec9ee7ee615013f74653169e702d/yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1", size = 84402 }, + { url = "https://files.pythonhosted.org/packages/ae/7b/8600250b3d89b625f1121d897062f629883c2f45339623b69b1747ec65fa/yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5", size = 91030 }, + { url = "https://files.pythonhosted.org/packages/33/85/bd2e2729752ff4c77338e0102914897512e92496375e079ce0150a6dc306/yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50", size = 142644 }, + { url = "https://files.pythonhosted.org/packages/ff/74/1178322cc0f10288d7eefa6e4a85d8d2e28187ccab13d5b844e8b5d7c88d/yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576", size = 94962 }, + { url = "https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640", size = 92795 }, + { url = "https://files.pythonhosted.org/packages/6b/32/927b2d67a412c31199e83fefdce6e645247b4fb164aa1ecb35a0f9eb2058/yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2", size = 332368 }, + { url = "https://files.pythonhosted.org/packages/19/e5/859fca07169d6eceeaa4fde1997c91d8abde4e9a7c018e371640c2da2b71/yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75", size = 342314 }, + { url = "https://files.pythonhosted.org/packages/08/75/76b63ccd91c9e03ab213ef27ae6add2e3400e77e5cdddf8ed2dbc36e3f21/yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512", size = 341987 }, + { url = "https://files.pythonhosted.org/packages/1a/e1/a097d5755d3ea8479a42856f51d97eeff7a3a7160593332d98f2709b3580/yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", size = 336914 }, + { url = "https://files.pythonhosted.org/packages/0b/42/e1b4d0e396b7987feceebe565286c27bc085bf07d61a59508cdaf2d45e63/yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb", size = 325765 }, + { url = "https://files.pythonhosted.org/packages/7e/18/03a5834ccc9177f97ca1bbb245b93c13e58e8225276f01eedc4cc98ab820/yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272", size = 344444 }, + { url = "https://files.pythonhosted.org/packages/c8/03/a713633bdde0640b0472aa197b5b86e90fbc4c5bc05b727b714cd8a40e6d/yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6", size = 340760 }, + { url = "https://files.pythonhosted.org/packages/eb/99/f6567e3f3bbad8fd101886ea0276c68ecb86a2b58be0f64077396cd4b95e/yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e", size = 346484 }, + { url = "https://files.pythonhosted.org/packages/8e/a9/84717c896b2fc6cb15bd4eecd64e34a2f0a9fd6669e69170c73a8b46795a/yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb", size = 359864 }, + { url = "https://files.pythonhosted.org/packages/1e/2e/d0f5f1bef7ee93ed17e739ec8dbcb47794af891f7d165fa6014517b48169/yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393", size = 364537 }, + { url = "https://files.pythonhosted.org/packages/97/8a/568d07c5d4964da5b02621a517532adb8ec5ba181ad1687191fffeda0ab6/yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285", size = 357861 }, + { url = "https://files.pythonhosted.org/packages/7d/e3/924c3f64b6b3077889df9a1ece1ed8947e7b61b0a933f2ec93041990a677/yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2", size = 84097 }, + { url = "https://files.pythonhosted.org/packages/34/45/0e055320daaabfc169b21ff6174567b2c910c45617b0d79c68d7ab349b02/yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477", size = 90399 }, + { url = "https://files.pythonhosted.org/packages/30/c7/c790513d5328a8390be8f47be5d52e141f78b66c6c48f48d241ca6bd5265/yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb", size = 140789 }, + { url = "https://files.pythonhosted.org/packages/30/aa/a2f84e93554a578463e2edaaf2300faa61c8701f0898725842c704ba5444/yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa", size = 94144 }, + { url = "https://files.pythonhosted.org/packages/c6/fc/d68d8f83714b221a85ce7866832cba36d7c04a68fa6a960b908c2c84f325/yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782", size = 91974 }, + { url = "https://files.pythonhosted.org/packages/56/4e/d2563d8323a7e9a414b5b25341b3942af5902a2263d36d20fb17c40411e2/yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0", size = 333587 }, + { url = "https://files.pythonhosted.org/packages/25/c9/cfec0bc0cac8d054be223e9f2c7909d3e8442a856af9dbce7e3442a8ec8d/yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482", size = 344386 }, + { url = "https://files.pythonhosted.org/packages/ab/5d/4c532190113b25f1364d25f4c319322e86232d69175b91f27e3ebc2caf9a/yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186", size = 345421 }, + { url = "https://files.pythonhosted.org/packages/23/d1/6cdd1632da013aa6ba18cee4d750d953104a5e7aac44e249d9410a972bf5/yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58", size = 339384 }, + { url = "https://files.pythonhosted.org/packages/9a/c4/6b3c39bec352e441bd30f432cda6ba51681ab19bb8abe023f0d19777aad1/yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53", size = 326689 }, + { url = "https://files.pythonhosted.org/packages/23/30/07fb088f2eefdc0aa4fc1af4e3ca4eb1a3aadd1ce7d866d74c0f124e6a85/yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2", size = 345453 }, + { url = "https://files.pythonhosted.org/packages/63/09/d54befb48f9cd8eec43797f624ec37783a0266855f4930a91e3d5c7717f8/yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8", size = 341872 }, + { url = "https://files.pythonhosted.org/packages/91/26/fd0ef9bf29dd906a84b59f0cd1281e65b0c3e08c6aa94b57f7d11f593518/yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1", size = 347497 }, + { url = "https://files.pythonhosted.org/packages/d9/b5/14ac7a256d0511b2ac168d50d4b7d744aea1c1aa20c79f620d1059aab8b2/yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a", size = 359981 }, + { url = "https://files.pythonhosted.org/packages/ca/b3/d493221ad5cbd18bc07e642894030437e405e1413c4236dd5db6e46bcec9/yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10", size = 366229 }, + { url = "https://files.pythonhosted.org/packages/04/56/6a3e2a5d9152c56c346df9b8fb8edd2c8888b1e03f96324d457e5cf06d34/yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8", size = 360383 }, + { url = "https://files.pythonhosted.org/packages/fd/b7/4b3c7c7913a278d445cc6284e59b2e62fa25e72758f888b7a7a39eb8423f/yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d", size = 310152 }, + { url = "https://files.pythonhosted.org/packages/f5/d5/688db678e987c3e0fb17867970700b92603cadf36c56e5fb08f23e822a0c/yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c", size = 315723 }, + { url = "https://files.pythonhosted.org/packages/f5/4b/a06e0ec3d155924f77835ed2d167ebd3b211a7b0853da1cf8d8414d784ef/yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", size = 45109 }, +] + +[[package]] +name = "zipp" +version = "3.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, +] diff --git a/cognee/__init__.py b/cognee/__init__.py index 591140b87..4ffd39577 100644 --- a/cognee/__init__.py +++ b/cognee/__init__.py @@ -4,11 +4,15 @@ from .api.v1.config.config import config from .api.v1.datasets.datasets import datasets from .api.v1.prune import prune from .api.v1.search import SearchType, get_search_history, search +from .api.v1.visualize import visualize +from .shared.utils import create_cognee_style_network_with_logo + # Pipelines from .modules import pipelines try: import dotenv + dotenv.load_dotenv() except ImportError: pass diff --git a/cognee/api/DTO.py b/cognee/api/DTO.py index 6bdfb4f82..fc2e1cc5f 100644 --- a/cognee/api/DTO.py +++ b/cognee/api/DTO.py @@ -4,12 +4,13 @@ from pydantic.alias_generators import to_camel, to_snake class OutDTO(BaseModel): model_config = ConfigDict( - alias_generator = to_camel, - populate_by_name = True, + alias_generator=to_camel, + populate_by_name=True, ) + class InDTO(BaseModel): model_config = ConfigDict( - alias_generator = to_camel, - populate_by_name = True, + alias_generator=to_camel, + populate_by_name=True, ) diff --git a/cognee/api/client.py b/cognee/api/client.py index 95a273351..227ada304 100644 --- a/cognee/api/client.py +++ b/cognee/api/client.py @@ -1,4 +1,5 @@ -""" FastAPI server for the Cognee API. """ +"""FastAPI server for the Cognee API.""" + import os import uvicorn import logging @@ -6,9 +7,26 @@ import sentry_sdk from fastapi import FastAPI, status from fastapi.responses import JSONResponse, Response from fastapi.middleware.cors import CORSMiddleware - +from cognee.api.v1.permissions.routers import get_permissions_router +from cognee.api.v1.settings.routers import get_settings_router +from cognee.api.v1.datasets.routers import get_datasets_router +from cognee.api.v1.cognify.routers import get_cognify_router +from cognee.api.v1.search.routers import get_search_router +from cognee.api.v1.add.routers import get_add_router +from fastapi import Request +from fastapi.encoders import jsonable_encoder +from fastapi.exceptions import RequestValidationError from cognee.exceptions import CogneeApiError from traceback import format_exc +from cognee.api.v1.users.routers import ( + get_auth_router, + get_register_router, + get_reset_password_router, + get_verify_router, + get_users_router, + get_visualize_router, +) +from contextlib import asynccontextmanager # Set up logging logging.basicConfig( @@ -19,15 +37,15 @@ logger = logging.getLogger(__name__) if os.getenv("ENV", "prod") == "prod": sentry_sdk.init( - dsn = os.getenv("SENTRY_REPORTING_URL"), - traces_sample_rate = 1.0, - profiles_sample_rate = 1.0, + dsn=os.getenv("SENTRY_REPORTING_URL"), + traces_sample_rate=1.0, + profiles_sample_rate=1.0, ) -from contextlib import asynccontextmanager app_environment = os.getenv("ENV", "prod") + @asynccontextmanager async def lifespan(app: FastAPI): # from cognee.modules.data.deletion import prune_system, prune_data @@ -35,50 +53,42 @@ async def lifespan(app: FastAPI): # await prune_system(metadata = True) # if app_environment == "local" or app_environment == "dev": from cognee.infrastructure.databases.relational import get_relational_engine + db_engine = get_relational_engine() await db_engine.create_database() from cognee.modules.users.methods import get_default_user + await get_default_user() yield -app = FastAPI(debug = app_environment != "prod", lifespan = lifespan) + +app = FastAPI(debug=app_environment != "prod", lifespan=lifespan) app.add_middleware( CORSMiddleware, - allow_origins = ["*"], - allow_credentials = True, - allow_methods = ["OPTIONS", "GET", "POST", "DELETE"], - allow_headers = ["*"], + allow_origins=["*"], + allow_credentials=True, + allow_methods=["OPTIONS", "GET", "POST", "DELETE"], + allow_headers=["*"], ) -from cognee.api.v1.users.routers import get_auth_router, get_register_router,\ - get_reset_password_router, get_verify_router, get_users_router -from cognee.api.v1.permissions.routers import get_permissions_router -from cognee.api.v1.settings.routers import get_settings_router -from cognee.api.v1.datasets.routers import get_datasets_router -from cognee.api.v1.cognify.routers import get_cognify_router -from cognee.api.v1.search.routers import get_search_router -from cognee.api.v1.add.routers import get_add_router - -from fastapi import Request -from fastapi.encoders import jsonable_encoder -from fastapi.exceptions import RequestValidationError @app.exception_handler(RequestValidationError) async def request_validation_exception_handler(request: Request, exc: RequestValidationError): if request.url.path == "/api/v1/auth/login": return JSONResponse( - status_code = 400, - content = {"detail": "LOGIN_BAD_CREDENTIALS"}, + status_code=400, + content={"detail": "LOGIN_BAD_CREDENTIALS"}, ) return JSONResponse( - status_code = 400, - content = jsonable_encoder({"detail": exc.errors(), "body": exc.body}), + status_code=400, + content=jsonable_encoder({"detail": exc.errors(), "body": exc.body}), ) + @app.exception_handler(CogneeApiError) async def exception_handler(_: Request, exc: CogneeApiError) -> JSONResponse: detail = {} @@ -95,46 +105,42 @@ async def exception_handler(_: Request, exc: CogneeApiError) -> JSONResponse: # log the stack trace for easier serverside debugging logger.error(format_exc()) - return JSONResponse( - status_code=status_code, content={"detail": detail["message"]} - ) + return JSONResponse(status_code=status_code, content={"detail": detail["message"]}) -app.include_router( - get_auth_router(), - prefix = "/api/v1/auth", - tags = ["auth"] -) + +app.include_router(get_auth_router(), prefix="/api/v1/auth", tags=["auth"]) app.include_router( get_register_router(), - prefix = "/api/v1/auth", - tags = ["auth"], + prefix="/api/v1/auth", + tags=["auth"], ) app.include_router( get_reset_password_router(), - prefix = "/api/v1/auth", - tags = ["auth"], + prefix="/api/v1/auth", + tags=["auth"], ) app.include_router( get_verify_router(), - prefix = "/api/v1/auth", - tags = ["auth"], + prefix="/api/v1/auth", + tags=["auth"], ) app.include_router( get_users_router(), - prefix = "/api/v1/users", - tags = ["users"], + prefix="/api/v1/users", + tags=["users"], ) app.include_router( get_permissions_router(), - prefix = "/api/v1/permissions", - tags = ["permissions"], + prefix="/api/v1/permissions", + tags=["permissions"], ) + @app.get("/") async def root(): """ @@ -148,37 +154,21 @@ def health_check(): """ Health check endpoint that returns the server status. """ - return Response(status_code = 200) + return Response(status_code=200) -app.include_router( - get_datasets_router(), - prefix="/api/v1/datasets", - tags=["datasets"] -) -app.include_router( - get_add_router(), - prefix="/api/v1/add", - tags=["add"] -) +app.include_router(get_datasets_router(), prefix="/api/v1/datasets", tags=["datasets"]) -app.include_router( - get_cognify_router(), - prefix="/api/v1/cognify", - tags=["cognify"] -) +app.include_router(get_add_router(), prefix="/api/v1/add", tags=["add"]) -app.include_router( - get_search_router(), - prefix="/api/v1/search", - tags=["search"] -) +app.include_router(get_cognify_router(), prefix="/api/v1/cognify", tags=["cognify"]) + +app.include_router(get_search_router(), prefix="/api/v1/search", tags=["search"]) + +app.include_router(get_settings_router(), prefix="/api/v1/settings", tags=["settings"]) + +app.include_router(get_visualize_router(), prefix="/api/v1/visualize", tags=["visualize"]) -app.include_router( - get_settings_router(), - prefix="/api/v1/settings", - tags=["settings"] -) def start_api_server(host: str = "0.0.0.0", port: int = 8000): """ @@ -190,7 +180,7 @@ def start_api_server(host: str = "0.0.0.0", port: int = 8000): try: logger.info("Starting server at %s:%s", host, port) - uvicorn.run(app, host = host, port = port) + uvicorn.run(app, host=host, port=port) except Exception as e: logger.exception(f"Failed to start server: {e}") # Here you could add any cleanup code or error recovery code. diff --git a/cognee/api/v1/add/add.py b/cognee/api/v1/add/add.py index 39ee01964..c9f531269 100644 --- a/cognee/api/v1/add/add.py +++ b/cognee/api/v1/add/add.py @@ -14,10 +14,19 @@ from cognee.tasks.ingestion import get_dlt_destination from cognee.modules.users.permissions.methods import give_permission_on_document from cognee.modules.users.models import User from cognee.modules.data.methods import create_dataset -from cognee.infrastructure.databases.relational import create_db_and_tables as create_relational_db_and_tables -from cognee.infrastructure.databases.vector.pgvector import create_db_and_tables as create_pgvector_db_and_tables +from cognee.infrastructure.databases.relational import ( + create_db_and_tables as create_relational_db_and_tables, +) +from cognee.infrastructure.databases.vector.pgvector import ( + create_db_and_tables as create_pgvector_db_and_tables, +) -async def add(data: Union[BinaryIO, List[BinaryIO], str, List[str]], dataset_name: str = "main_dataset", user: User = None): + +async def add( + data: Union[BinaryIO, List[BinaryIO], str, List[str]], + dataset_name: str = "main_dataset", + user: User = None, +): await create_relational_db_and_tables() await create_pgvector_db_and_tables() @@ -25,7 +34,9 @@ async def add(data: Union[BinaryIO, List[BinaryIO], str, List[str]], dataset_nam if "data://" in data: # data is a data directory path datasets = get_matched_datasets(data.replace("data://", ""), dataset_name) - return await asyncio.gather(*[add(file_paths, dataset_name) for [dataset_name, file_paths] in datasets]) + return await asyncio.gather( + *[add(file_paths, dataset_name) for [dataset_name, file_paths] in datasets] + ) if "file://" in data: # data is a file path @@ -37,7 +48,7 @@ async def add(data: Union[BinaryIO, List[BinaryIO], str, List[str]], dataset_nam return await add([file_path], dataset_name) if hasattr(data, "file"): - file_path = save_data_to_file(data.file, filename = data.filename) + file_path = save_data_to_file(data.file, filename=data.filename) return await add([file_path], dataset_name) # data is a list of file paths or texts @@ -45,7 +56,7 @@ async def add(data: Union[BinaryIO, List[BinaryIO], str, List[str]], dataset_nam for data_item in data: if hasattr(data_item, "file"): - file_paths.append(save_data_to_file(data_item, filename = data_item.filename)) + file_paths.append(save_data_to_file(data_item, filename=data_item.filename)) elif isinstance(data_item, str) and ( data_item.startswith("/") or data_item.startswith("file://") ): @@ -58,10 +69,11 @@ async def add(data: Union[BinaryIO, List[BinaryIO], str, List[str]], dataset_nam return [] + async def add_files(file_paths: List[str], dataset_name: str, user: User = None): if user is None: user = await get_default_user() - + base_config = get_base_config() data_directory_path = base_config.data_root_directory @@ -72,7 +84,11 @@ async def add_files(file_paths: List[str], dataset_name: str, user: User = None) if data_directory_path not in file_path: file_name = file_path.split("/")[-1] - file_directory_path = data_directory_path + "/" + (dataset_name.replace(".", "/") + "/" if dataset_name != "main_dataset" else "") + file_directory_path = ( + data_directory_path + + "/" + + (dataset_name.replace(".", "/") + "/" if dataset_name != "main_dataset" else "") + ) dataset_file_path = path.join(file_directory_path, file_name) LocalStorage.ensure_directory_exists(file_directory_path) @@ -85,16 +101,20 @@ async def add_files(file_paths: List[str], dataset_name: str, user: User = None) destination = get_dlt_destination() pipeline = dlt.pipeline( - pipeline_name = "file_load_from_filesystem", - destination = destination, + pipeline_name="file_load_from_filesystem", + destination=destination, ) - dataset_name = dataset_name.replace(" ", "_").replace(".", "_") if dataset_name is not None else "main_dataset" + dataset_name = ( + dataset_name.replace(" ", "_").replace(".", "_") + if dataset_name is not None + else "main_dataset" + ) - @dlt.resource(standalone = True, merge_key = "id") + @dlt.resource(standalone=True, merge_key="id") async def data_resources(file_paths: str, user: User): for file_path in file_paths: - with open(file_path.replace("file://", ""), mode = "rb") as file: + with open(file_path.replace("file://", ""), mode="rb") as file: classified_data = ingestion.classify(file) data_id = ingestion.identify(classified_data) @@ -109,9 +129,9 @@ async def add_files(file_paths: List[str], dataset_name: str, user: User = None) async with db_engine.get_async_session() as session: dataset = await create_dataset(dataset_name, user.id, session) - data = (await session.execute( - select(Data).filter(Data.id == data_id) - )).scalar_one_or_none() + data = ( + await session.execute(select(Data).filter(Data.id == data_id)) + ).scalar_one_or_none() if data is not None: data.name = file_metadata["name"] @@ -123,11 +143,11 @@ async def add_files(file_paths: List[str], dataset_name: str, user: User = None) await session.commit() else: data = Data( - id = data_id, - name = file_metadata["name"], - raw_data_location = file_metadata["file_path"], - extension = file_metadata["extension"], - mime_type = file_metadata["mime_type"], + id=data_id, + name=file_metadata["name"], + raw_data_location=file_metadata["file_path"], + extension=file_metadata["extension"], + mime_type=file_metadata["mime_type"], ) dataset.data.append(data) @@ -144,14 +164,13 @@ async def add_files(file_paths: List[str], dataset_name: str, user: User = None) await give_permission_on_document(user, data_id, "read") await give_permission_on_document(user, data_id, "write") - - send_telemetry("cognee.add EXECUTION STARTED", user_id = user.id) + send_telemetry("cognee.add EXECUTION STARTED", user_id=user.id) run_info = pipeline.run( data_resources(processed_file_paths, user), - table_name = "file_metadata", - dataset_name = dataset_name, - write_disposition = "merge", + table_name="file_metadata", + dataset_name=dataset_name, + write_disposition="merge", ) - send_telemetry("cognee.add EXECUTION COMPLETED", user_id = user.id) + send_telemetry("cognee.add EXECUTION COMPLETED", user_id=user.id) return run_info diff --git a/cognee/api/v1/add/add_v2.py b/cognee/api/v1/add/add_v2.py index 631d963e5..1ec30e67b 100644 --- a/cognee/api/v1/add/add_v2.py +++ b/cognee/api/v1/add/add_v2.py @@ -2,22 +2,29 @@ from typing import Union, BinaryIO from cognee.modules.users.models import User from cognee.modules.users.methods import get_default_user from cognee.modules.pipelines import run_tasks, Task -from cognee.tasks.ingestion import ingest_data_with_metadata -from cognee.infrastructure.databases.relational import create_db_and_tables as create_relational_db_and_tables -from cognee.infrastructure.databases.vector.pgvector import create_db_and_tables as create_pgvector_db_and_tables +from cognee.tasks.ingestion import ingest_data_with_metadata, resolve_data_directories +from cognee.infrastructure.databases.relational import ( + create_db_and_tables as create_relational_db_and_tables, +) +from cognee.infrastructure.databases.vector.pgvector import ( + create_db_and_tables as create_pgvector_db_and_tables, +) -async def add(data: Union[BinaryIO, list[BinaryIO], str, list[str]], dataset_name: str = "main_dataset", user: User = None): + +async def add( + data: Union[BinaryIO, list[BinaryIO], str, list[str]], + dataset_name: str = "main_dataset", + user: User = None, +): await create_relational_db_and_tables() await create_pgvector_db_and_tables() if user is None: user = await get_default_user() - tasks = [ - Task(ingest_data_with_metadata, dataset_name, user) - ] + tasks = [Task(resolve_data_directories), Task(ingest_data_with_metadata, dataset_name, user)] pipeline = run_tasks(tasks, data, "add_pipeline") async for result in pipeline: - print(result) \ No newline at end of file + print(result) diff --git a/cognee/api/v1/add/routers/__init__.py b/cognee/api/v1/add/routers/__init__.py index eebb250ab..bb820c033 100644 --- a/cognee/api/v1/add/routers/__init__.py +++ b/cognee/api/v1/add/routers/__init__.py @@ -1 +1 @@ -from .get_add_router import get_add_router \ No newline at end of file +from .get_add_router import get_add_router diff --git a/cognee/api/v1/add/routers/get_add_router.py b/cognee/api/v1/add/routers/get_add_router.py index 1f45d0c95..414552499 100644 --- a/cognee/api/v1/add/routers/get_add_router.py +++ b/cognee/api/v1/add/routers/get_add_router.py @@ -11,17 +11,19 @@ from cognee.modules.users.methods import get_authenticated_user logger = logging.getLogger(__name__) + def get_add_router() -> APIRouter: router = APIRouter() @router.post("/", response_model=None) async def add( - data: List[UploadFile], - datasetId: str = Form(...), - user: User = Depends(get_authenticated_user), + data: List[UploadFile], + datasetId: str = Form(...), + user: User = Depends(get_authenticated_user), ): - """ This endpoint is responsible for adding data to the graph.""" + """This endpoint is responsible for adding data to the graph.""" from cognee.api.v1.add import add as cognee_add + try: if isinstance(data, str) and data.startswith("http"): if "github" in data: @@ -52,9 +54,6 @@ def get_add_router() -> APIRouter: user=user, ) except Exception as error: - return JSONResponse( - status_code=409, - content={"error": str(error)} - ) + return JSONResponse(status_code=409, content={"error": str(error)}) - return router \ No newline at end of file + return router diff --git a/cognee/api/v1/authenticate_user/authenticate_user.py b/cognee/api/v1/authenticate_user/authenticate_user.py index 6761c65b8..791fe0357 100644 --- a/cognee/api/v1/authenticate_user/authenticate_user.py +++ b/cognee/api/v1/authenticate_user/authenticate_user.py @@ -1,4 +1,6 @@ -from cognee.infrastructure.databases.relational.user_authentication.users import authenticate_user_method +from cognee.infrastructure.databases.relational.user_authentication.users import ( + authenticate_user_method, +) async def authenticate_user(email: str, password: str): @@ -11,6 +13,7 @@ async def authenticate_user(email: str, password: str): if __name__ == "__main__": import asyncio + # Define an example user example_email = "example@example.com" example_password = "securepassword123" diff --git a/cognee/api/v1/cognify/code_graph_pipeline.py b/cognee/api/v1/cognify/code_graph_pipeline.py index 59c658300..2d077f39b 100644 --- a/cognee/api/v1/cognify/code_graph_pipeline.py +++ b/cognee/api/v1/cognify/code_graph_pipeline.py @@ -1,105 +1,90 @@ import asyncio import logging -from typing import Union +from pathlib import Path -from cognee.shared.SourceCodeGraph import SourceCodeGraph -from cognee.shared.utils import send_telemetry -from cognee.modules.data.models import Dataset, Data -from cognee.modules.data.methods.get_dataset_data import get_dataset_data -from cognee.modules.data.methods import get_datasets, get_datasets_by_name -from cognee.modules.pipelines.tasks.Task import Task +from cognee.base_config import get_base_config +from cognee.modules.cognify.config import get_cognify_config from cognee.modules.pipelines import run_tasks -from cognee.modules.users.models import User +from cognee.modules.pipelines.tasks.Task import Task from cognee.modules.users.methods import get_default_user -from cognee.modules.pipelines.models import PipelineRunStatus -from cognee.modules.pipelines.operations.get_pipeline_status import get_pipeline_status -from cognee.modules.pipelines.operations.log_pipeline_status import log_pipeline_status -from cognee.tasks.documents import classify_documents, check_permissions_on_documents, extract_chunks_from_documents -from cognee.tasks.graph import extract_graph_from_code +from cognee.shared.data_models import KnowledgeGraph, MonitoringTool +from cognee.tasks.documents import classify_documents, extract_chunks_from_documents +from cognee.tasks.graph import extract_graph_from_data +from cognee.tasks.ingestion import ingest_data_with_metadata +from cognee.tasks.repo_processor import ( + enrich_dependency_graph, + expand_dependency_graph, + get_data_list_for_user, + get_non_py_files, + get_repo_file_dependencies, +) +from cognee.tasks.repo_processor.get_source_code_chunks import get_source_code_chunks from cognee.tasks.storage import add_data_points +from cognee.tasks.summarization import summarize_code, summarize_text + +monitoring = get_base_config().monitoring_tool +if monitoring == MonitoringTool.LANGFUSE: + from langfuse.decorators import observe + logger = logging.getLogger("code_graph_pipeline") - update_status_lock = asyncio.Lock() -async def code_graph_pipeline(datasets: Union[str, list[str]] = None, user: User = None): - if user is None: - user = await get_default_user() - existing_datasets = await get_datasets(user.id) +@observe +async def run_code_graph_pipeline(repo_path, include_docs=True): + import os + import pathlib - if datasets is None or len(datasets) == 0: - # If no datasets are provided, cognify all existing datasets. - datasets = existing_datasets + import cognee + from cognee.infrastructure.databases.relational import create_db_and_tables - if type(datasets[0]) == str: - datasets = await get_datasets_by_name(datasets, user.id) + file_path = Path(__file__).parent + data_directory_path = str( + pathlib.Path(os.path.join(file_path, ".data_storage/code_graph")).resolve() + ) + cognee.config.data_root_directory(data_directory_path) + cognee_directory_path = str( + pathlib.Path(os.path.join(file_path, ".cognee_system/code_graph")).resolve() + ) + cognee.config.system_root_directory(cognee_directory_path) - existing_datasets_map = { - generate_dataset_name(dataset.name): True for dataset in existing_datasets - } + await cognee.prune.prune_data() + await cognee.prune.prune_system(metadata=True) + await create_db_and_tables() - awaitables = [] + cognee_config = get_cognify_config() + user = await get_default_user() - for dataset in datasets: - dataset_name = generate_dataset_name(dataset.name) + tasks = [ + Task(get_repo_file_dependencies), + Task(enrich_dependency_graph), + Task(expand_dependency_graph, task_config={"batch_size": 50}), + Task(get_source_code_chunks, task_config={"batch_size": 50}), + Task(summarize_code, task_config={"batch_size": 50}), + Task(add_data_points, task_config={"batch_size": 50}), + ] - if dataset_name in existing_datasets_map: - awaitables.append(run_pipeline(dataset, user)) - - return await asyncio.gather(*awaitables) - - -async def run_pipeline(dataset: Dataset, user: User): - data_documents: list[Data] = await get_dataset_data(dataset_id = dataset.id) - - document_ids_str = [str(document.id) for document in data_documents] - - dataset_id = dataset.id - dataset_name = generate_dataset_name(dataset.name) - - send_telemetry("code_graph_pipeline EXECUTION STARTED", user.id) - - async with update_status_lock: - task_status = await get_pipeline_status([dataset_id]) - - if dataset_id in task_status and task_status[dataset_id] == PipelineRunStatus.DATASET_PROCESSING_STARTED: - logger.info("Dataset %s is already being processed.", dataset_name) - return - - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_STARTED, { - "dataset_name": dataset_name, - "files": document_ids_str, - }) - try: - tasks = [ + if include_docs: + non_code_tasks = [ + Task(get_non_py_files, task_config={"batch_size": 50}), + Task(ingest_data_with_metadata, dataset_name="repo_docs", user=user), + Task(get_data_list_for_user, dataset_name="repo_docs", user=user), Task(classify_documents), - Task(check_permissions_on_documents, user = user, permissions = ["write"]), - Task(extract_chunks_from_documents), # Extract text chunks based on the document type. - Task(add_data_points, task_config = { "batch_size": 10 }), - Task(extract_graph_from_code, graph_model = SourceCodeGraph, task_config = { "batch_size": 10 }), # Generate knowledge graphs from the document chunks. + Task(extract_chunks_from_documents, max_tokens=cognee_config.max_tokens), + Task( + extract_graph_from_data, graph_model=KnowledgeGraph, task_config={"batch_size": 50} + ), + Task( + summarize_text, + summarization_model=cognee_config.summarization_model, + task_config={"batch_size": 50}, + ), ] - pipeline = run_tasks(tasks, data_documents, "code_graph_pipeline") + if include_docs: + async for result in run_tasks(non_code_tasks, repo_path): + yield result - async for result in pipeline: - print(result) - - send_telemetry("code_graph_pipeline EXECUTION COMPLETED", user.id) - - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_COMPLETED, { - "dataset_name": dataset_name, - "files": document_ids_str, - }) - except Exception as error: - send_telemetry("code_graph_pipeline EXECUTION ERRORED", user.id) - - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_ERRORED, { - "dataset_name": dataset_name, - "files": document_ids_str, - }) - raise error - - -def generate_dataset_name(dataset_name: str) -> str: - return dataset_name.replace(".", "_").replace(" ", "_") + async for result in run_tasks(tasks, repo_path, "cognify_code_pipeline"): + yield result diff --git a/cognee/api/v1/cognify/cognify_v2.py b/cognee/api/v1/cognify/cognify_v2.py index 77245dea8..680c05828 100644 --- a/cognee/api/v1/cognify/cognify_v2.py +++ b/cognee/api/v1/cognify/cognify_v2.py @@ -2,20 +2,26 @@ import asyncio import logging from typing import Union -from cognee.shared.utils import send_telemetry +from pydantic import BaseModel + from cognee.modules.cognify.config import get_cognify_config -from cognee.shared.data_models import KnowledgeGraph -from cognee.modules.data.models import Dataset, Data -from cognee.modules.data.methods.get_dataset_data import get_dataset_data from cognee.modules.data.methods import get_datasets, get_datasets_by_name -from cognee.modules.pipelines.tasks.Task import Task +from cognee.modules.data.methods.get_dataset_data import get_dataset_data +from cognee.modules.data.models import Data, Dataset from cognee.modules.pipelines import run_tasks -from cognee.modules.users.models import User -from cognee.modules.users.methods import get_default_user from cognee.modules.pipelines.models import PipelineRunStatus from cognee.modules.pipelines.operations.get_pipeline_status import get_pipeline_status from cognee.modules.pipelines.operations.log_pipeline_status import log_pipeline_status -from cognee.tasks.documents import classify_documents, check_permissions_on_documents, extract_chunks_from_documents +from cognee.modules.pipelines.tasks.Task import Task +from cognee.modules.users.methods import get_default_user +from cognee.modules.users.models import User +from cognee.shared.data_models import KnowledgeGraph +from cognee.shared.utils import send_telemetry +from cognee.tasks.documents import ( + check_permissions_on_documents, + classify_documents, + extract_chunks_from_documents, +) from cognee.tasks.graph import extract_graph_from_data from cognee.tasks.storage import add_data_points from cognee.tasks.storage.index_graph_edges import index_graph_edges @@ -25,7 +31,12 @@ logger = logging.getLogger("cognify.v2") update_status_lock = asyncio.Lock() -async def cognify(datasets: Union[str, list[str]] = None, user: User = None): + +async def cognify( + datasets: Union[str, list[str]] = None, + user: User = None, + graph_model: BaseModel = KnowledgeGraph, +): if user is None: user = await get_default_user() @@ -35,7 +46,7 @@ async def cognify(datasets: Union[str, list[str]] = None, user: User = None): # If no datasets are provided, cognify all existing datasets. datasets = existing_datasets - if type(datasets[0]) == str: + if isinstance(datasets[0], str): datasets = await get_datasets_by_name(datasets, user.id) existing_datasets_map = { @@ -48,13 +59,15 @@ async def cognify(datasets: Union[str, list[str]] = None, user: User = None): dataset_name = generate_dataset_name(dataset.name) if dataset_name in existing_datasets_map: - awaitables.append(run_cognify_pipeline(dataset, user)) + awaitables.append(run_cognify_pipeline(dataset, user, graph_model)) return await asyncio.gather(*awaitables) -async def run_cognify_pipeline(dataset: Dataset, user: User): - data_documents: list[Data] = await get_dataset_data(dataset_id = dataset.id) +async def run_cognify_pipeline( + dataset: Dataset, user: User, graph_model: BaseModel = KnowledgeGraph +): + data_documents: list[Data] = await get_dataset_data(dataset_id=dataset.id) document_ids_str = [str(document.id) for document in data_documents] @@ -63,31 +76,41 @@ async def run_cognify_pipeline(dataset: Dataset, user: User): send_telemetry("cognee.cognify EXECUTION STARTED", user.id) - async with update_status_lock: - task_status = await get_pipeline_status([dataset_id]) + # async with update_status_lock: TODO: Add UI lock to prevent multiple backend requests + task_status = await get_pipeline_status([dataset_id]) - if dataset_id in task_status and task_status[dataset_id] == PipelineRunStatus.DATASET_PROCESSING_STARTED: - logger.info("Dataset %s is already being processed.", dataset_name) - return + if ( + dataset_id in task_status + and task_status[dataset_id] == PipelineRunStatus.DATASET_PROCESSING_STARTED + ): + logger.info("Dataset %s is already being processed.", dataset_name) + return - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_STARTED, { + await log_pipeline_status( + dataset_id, + PipelineRunStatus.DATASET_PROCESSING_STARTED, + { "dataset_name": dataset_name, "files": document_ids_str, - }) + }, + ) + try: cognee_config = get_cognify_config() tasks = [ Task(classify_documents), - Task(check_permissions_on_documents, user = user, permissions = ["write"]), - Task(extract_chunks_from_documents), # Extract text chunks based on the document type. - Task(extract_graph_from_data, graph_model = KnowledgeGraph, task_config = { "batch_size": 10 }), # Generate knowledge graphs from the document chunks. + Task(check_permissions_on_documents, user=user, permissions=["write"]), + Task(extract_chunks_from_documents), # Extract text chunks based on the document type. + Task( + extract_graph_from_data, graph_model=graph_model, task_config={"batch_size": 10} + ), # Generate knowledge graphs from the document chunks. Task( summarize_text, - summarization_model = cognee_config.summarization_model, - task_config = { "batch_size": 10 } + summarization_model=cognee_config.summarization_model, + task_config={"batch_size": 10}, ), - Task(add_data_points, task_config = { "batch_size": 10 }), + Task(add_data_points, only_root=True, task_config={"batch_size": 10}), ] pipeline = run_tasks(tasks, data_documents, "cognify_pipeline") @@ -99,17 +122,25 @@ async def run_cognify_pipeline(dataset: Dataset, user: User): send_telemetry("cognee.cognify EXECUTION COMPLETED", user.id) - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_COMPLETED, { - "dataset_name": dataset_name, - "files": document_ids_str, - }) + await log_pipeline_status( + dataset_id, + PipelineRunStatus.DATASET_PROCESSING_COMPLETED, + { + "dataset_name": dataset_name, + "files": document_ids_str, + }, + ) except Exception as error: send_telemetry("cognee.cognify EXECUTION ERRORED", user.id) - await log_pipeline_status(dataset_id, PipelineRunStatus.DATASET_PROCESSING_ERRORED, { - "dataset_name": dataset_name, - "files": document_ids_str, - }) + await log_pipeline_status( + dataset_id, + PipelineRunStatus.DATASET_PROCESSING_ERRORED, + { + "dataset_name": dataset_name, + "files": document_ids_str, + }, + ) raise error diff --git a/cognee/api/v1/cognify/routers/__init__.py b/cognee/api/v1/cognify/routers/__init__.py index c6d52bfa2..6e5f9cc9d 100644 --- a/cognee/api/v1/cognify/routers/__init__.py +++ b/cognee/api/v1/cognify/routers/__init__.py @@ -1 +1 @@ -from .get_cognify_router import get_cognify_router \ No newline at end of file +from .get_cognify_router import get_cognify_router diff --git a/cognee/api/v1/cognify/routers/get_cognify_router.py b/cognee/api/v1/cognify/routers/get_cognify_router.py index 9616fa71c..82ec4b857 100644 --- a/cognee/api/v1/cognify/routers/get_cognify_router.py +++ b/cognee/api/v1/cognify/routers/get_cognify_router.py @@ -1,27 +1,29 @@ from fastapi import APIRouter -from typing import List +from typing import List, Optional from pydantic import BaseModel from cognee.modules.users.models import User from fastapi.responses import JSONResponse from cognee.modules.users.methods import get_authenticated_user from fastapi import Depends +from cognee.shared.data_models import KnowledgeGraph + class CognifyPayloadDTO(BaseModel): datasets: List[str] + graph_model: Optional[BaseModel] = KnowledgeGraph + def get_cognify_router() -> APIRouter: router = APIRouter() @router.post("/", response_model=None) async def cognify(payload: CognifyPayloadDTO, user: User = Depends(get_authenticated_user)): - """ This endpoint is responsible for the cognitive processing of the content.""" + """This endpoint is responsible for the cognitive processing of the content.""" from cognee.api.v1.cognify.cognify_v2 import cognify as cognee_cognify - try: - await cognee_cognify(payload.datasets, user) - except Exception as error: - return JSONResponse( - status_code=409, - content={"error": str(error)} - ) - return router \ No newline at end of file + try: + await cognee_cognify(payload.datasets, user, payload.graph_model) + except Exception as error: + return JSONResponse(status_code=409, content={"error": str(error)}) + + return router diff --git a/cognee/api/v1/config/config.py b/cognee/api/v1/config/config.py index 1347fcba8..2f7b406a8 100644 --- a/cognee/api/v1/config/config.py +++ b/cognee/api/v1/config/config.py @@ -1,4 +1,5 @@ -""" This module is used to set the configuration of the system.""" +"""This module is used to set the configuration of the system.""" + import os from cognee.base_config import get_base_config from cognee.exceptions import InvalidValueError, InvalidAttributeError @@ -10,7 +11,8 @@ from cognee.infrastructure.llm.config import get_llm_config from cognee.infrastructure.databases.relational import get_relational_config from cognee.infrastructure.files.storage import LocalStorage -class config(): + +class config: @staticmethod def system_root_directory(system_root_directory: str): databases_directory_path = os.path.join(system_root_directory, "databases") @@ -39,12 +41,12 @@ class config(): @staticmethod def set_classification_model(classification_model: object): cognify_config = get_cognify_config() - cognify_config.classification_model = classification_model + cognify_config.classification_model = classification_model @staticmethod def set_summarization_model(summarization_model: object): cognify_config = get_cognify_config() - cognify_config.summarization_model=summarization_model + cognify_config.summarization_model = summarization_model @staticmethod def set_graph_model(graph_model: object): @@ -79,14 +81,16 @@ class config(): @staticmethod def set_llm_config(config_dict: dict): """ - Updates the llm config with values from config_dict. + Updates the llm config with values from config_dict. """ llm_config = get_llm_config() for key, value in config_dict.items(): if hasattr(llm_config, key): object.__setattr__(llm_config, key, value) else: - raise InvalidAttributeError(message=f"'{key}' is not a valid attribute of the config.") + raise InvalidAttributeError( + message=f"'{key}' is not a valid attribute of the config." + ) @staticmethod def set_chunk_strategy(chunk_strategy: object): @@ -108,7 +112,6 @@ class config(): chunk_config = get_chunk_config() chunk_config.chunk_size = chunk_size - @staticmethod def set_vector_db_provider(vector_db_provider: str): vector_db_config = get_vectordb_config() @@ -117,33 +120,48 @@ class config(): @staticmethod def set_relational_db_config(config_dict: dict): """ - Updates the relational db config with values from config_dict. + Updates the relational db config with values from config_dict. """ relational_db_config = get_relational_config() for key, value in config_dict.items(): if hasattr(relational_db_config, key): object.__setattr__(relational_db_config, key, value) else: - raise InvalidAttributeError(message=f"'{key}' is not a valid attribute of the config.") + raise InvalidAttributeError( + message=f"'{key}' is not a valid attribute of the config." + ) + + @staticmethod + def set_graph_db_config(config_dict: dict) -> None: + """ + Updates the graph db config with values from config_dict. + """ + graph_db_config = get_graph_config() + for key, value in config_dict.items(): + if hasattr(graph_db_config, key): + object.__setattr__(graph_db_config, key, value) + else: + raise AttributeError(message=f"'{key}' is not a valid attribute of the config.") @staticmethod def set_vector_db_config(config_dict: dict): """ - Updates the vector db config with values from config_dict. + Updates the vector db config with values from config_dict. """ vector_db_config = get_vectordb_config() for key, value in config_dict.items(): if hasattr(vector_db_config, key): object.__setattr__(vector_db_config, key, value) else: - raise InvalidAttributeError(message=f"'{key}' is not a valid attribute of the config.") + raise InvalidAttributeError( + message=f"'{key}' is not a valid attribute of the config." + ) @staticmethod def set_vector_db_key(db_key: str): vector_db_config = get_vectordb_config() vector_db_config.vector_db_key = db_key - @staticmethod def set_vector_db_url(db_url: str): vector_db_config = get_vectordb_config() @@ -154,7 +172,9 @@ class config(): base_config = get_base_config() if "username" not in graphistry_config or "password" not in graphistry_config: - raise InvalidValueError(message="graphistry_config dictionary must contain 'username' and 'password' keys.") + raise InvalidValueError( + message="graphistry_config dictionary must contain 'username' and 'password' keys." + ) base_config.graphistry_username = graphistry_config.get("username") base_config.graphistry_password = graphistry_config.get("password") diff --git a/cognee/api/v1/datasets/datasets.py b/cognee/api/v1/datasets/datasets.py index 345f8be7b..a6552d937 100644 --- a/cognee/api/v1/datasets/datasets.py +++ b/cognee/api/v1/datasets/datasets.py @@ -1,10 +1,13 @@ from cognee.modules.users.methods import get_default_user from cognee.modules.ingestion import discover_directory_datasets from cognee.modules.pipelines.operations.get_pipeline_status import get_pipeline_status -class datasets(): + + +class datasets: @staticmethod async def list_datasets(): from cognee.modules.data.methods import get_datasets + user = await get_default_user() return await get_datasets(user.id) @@ -15,6 +18,7 @@ class datasets(): @staticmethod async def list_data(dataset_id: str): from cognee.modules.data.methods import get_dataset, get_dataset_data + user = await get_default_user() dataset = await get_dataset(user.id, dataset_id) @@ -28,6 +32,7 @@ class datasets(): @staticmethod async def delete_dataset(dataset_id: str): from cognee.modules.data.methods import get_dataset, delete_dataset + user = await get_default_user() dataset = await get_dataset(user.id, dataset_id) diff --git a/cognee/api/v1/datasets/routers/__init__.py b/cognee/api/v1/datasets/routers/__init__.py index f03428fd6..24783903d 100644 --- a/cognee/api/v1/datasets/routers/__init__.py +++ b/cognee/api/v1/datasets/routers/__init__.py @@ -1 +1 @@ -from .get_datasets_router import get_datasets_router \ No newline at end of file +from .get_datasets_router import get_datasets_router diff --git a/cognee/api/v1/datasets/routers/get_datasets_router.py b/cognee/api/v1/datasets/routers/get_datasets_router.py index 31e3fa67d..ba65cd94c 100644 --- a/cognee/api/v1/datasets/routers/get_datasets_router.py +++ b/cognee/api/v1/datasets/routers/get_datasets_router.py @@ -16,9 +16,11 @@ from cognee.modules.pipelines.models import PipelineRunStatus logger = logging.getLogger(__name__) + class ErrorResponseDTO(BaseModel): message: str + class DatasetDTO(OutDTO): id: UUID name: str @@ -26,6 +28,7 @@ class DatasetDTO(OutDTO): updated_at: Optional[datetime] = None owner_id: UUID + class DataDTO(OutDTO): id: UUID name: str @@ -35,6 +38,7 @@ class DataDTO(OutDTO): mime_type: str raw_data_location: str + def get_datasets_router() -> APIRouter: router = APIRouter() @@ -42,46 +46,51 @@ def get_datasets_router() -> APIRouter: async def get_datasets(user: User = Depends(get_authenticated_user)): try: from cognee.modules.data.methods import get_datasets + datasets = await get_datasets(user.id) return datasets except Exception as error: logger.error(f"Error retrieving datasets: {str(error)}") - raise HTTPException(status_code=500, detail=f"Error retrieving datasets: {str(error)}") from error + raise HTTPException( + status_code=500, detail=f"Error retrieving datasets: {str(error)}" + ) from error - @router.delete("/{dataset_id}", response_model=None, responses={404: {"model": ErrorResponseDTO}}) + @router.delete( + "/{dataset_id}", response_model=None, responses={404: {"model": ErrorResponseDTO}} + ) async def delete_dataset(dataset_id: str, user: User = Depends(get_authenticated_user)): from cognee.modules.data.methods import get_dataset, delete_dataset dataset = await get_dataset(user.id, dataset_id) if dataset is None: - raise EntityNotFoundError( - message=f"Dataset ({dataset_id}) not found." - ) + raise EntityNotFoundError(message=f"Dataset ({dataset_id}) not found.") await delete_dataset(dataset) - @router.delete("/{dataset_id}/data/{data_id}", response_model=None, responses={404: {"model": ErrorResponseDTO}}) - async def delete_data(dataset_id: str, data_id: str, user: User = Depends(get_authenticated_user)): + @router.delete( + "/{dataset_id}/data/{data_id}", + response_model=None, + responses={404: {"model": ErrorResponseDTO}}, + ) + async def delete_data( + dataset_id: str, data_id: str, user: User = Depends(get_authenticated_user) + ): from cognee.modules.data.methods import get_data, delete_data from cognee.modules.data.methods import get_dataset # Check if user has permission to access dataset and data by trying to get the dataset dataset = await get_dataset(user.id, dataset_id) - #TODO: Handle situation differently if user doesn't have permission to access data? + # TODO: Handle situation differently if user doesn't have permission to access data? if dataset is None: - raise EntityNotFoundError( - message=f"Dataset ({dataset_id}) not found." - ) + raise EntityNotFoundError(message=f"Dataset ({dataset_id}) not found.") - data = await get_data(data_id) + data = await get_data(user.id, data_id) if data is None: - raise EntityNotFoundError( - message=f"Data ({data_id}) not found." - ) + raise EntityNotFoundError(message=f"Data ({data_id}) not found.") await delete_data(data) @@ -98,14 +107,18 @@ def get_datasets_router() -> APIRouter: status_code=200, content=str(graph_url), ) - except: + except Exception as error: + print(error) return JSONResponse( status_code=409, content="Graphistry credentials are not set. Please set them in your .env file.", ) - @router.get("/{dataset_id}/data", response_model=list[DataDTO], - responses={404: {"model": ErrorResponseDTO}}) + @router.get( + "/{dataset_id}/data", + response_model=list[DataDTO], + responses={404: {"model": ErrorResponseDTO}}, + ) async def get_dataset_data(dataset_id: str, user: User = Depends(get_authenticated_user)): from cognee.modules.data.methods import get_dataset_data, get_dataset @@ -125,8 +138,10 @@ def get_datasets_router() -> APIRouter: return dataset_data @router.get("/status", response_model=dict[str, PipelineRunStatus]) - async def get_dataset_status(datasets: Annotated[List[str], Query(alias="dataset")] = None, - user: User = Depends(get_authenticated_user)): + async def get_dataset_status( + datasets: Annotated[List[str], Query(alias="dataset")] = None, + user: User = Depends(get_authenticated_user), + ): from cognee.api.v1.datasets.datasets import datasets as cognee_datasets try: @@ -134,23 +149,20 @@ def get_datasets_router() -> APIRouter: return datasets_statuses except Exception as error: - return JSONResponse( - status_code=409, - content={"error": str(error)} - ) + return JSONResponse(status_code=409, content={"error": str(error)}) @router.get("/{dataset_id}/data/{data_id}/raw", response_class=FileResponse) - async def get_raw_data(dataset_id: str, data_id: str, user: User = Depends(get_authenticated_user)): + async def get_raw_data( + dataset_id: str, data_id: str, user: User = Depends(get_authenticated_user) + ): + from cognee.modules.data.methods import get_data from cognee.modules.data.methods import get_dataset, get_dataset_data dataset = await get_dataset(user.id, dataset_id) if dataset is None: return JSONResponse( - status_code=404, - content={ - "detail": f"Dataset ({dataset_id}) not found." - } + status_code=404, content={"detail": f"Dataset ({dataset_id}) not found."} ) dataset_data = await get_dataset_data(dataset.id) @@ -162,10 +174,17 @@ def get_datasets_router() -> APIRouter: # Check if matching_data contains an element if len(matching_data) == 0: - raise EntityNotFoundError(message= f"Data ({data_id}) not found in dataset ({dataset_id}).") + raise EntityNotFoundError( + message=f"Data ({data_id}) not found in dataset ({dataset_id})." + ) - data = matching_data[0] + data = await get_data(user.id, data_id) + + if data is None: + raise EntityNotFoundError( + message=f"Data ({data_id}) not found in dataset ({dataset_id})." + ) return data.raw_data_location - return router \ No newline at end of file + return router diff --git a/cognee/api/v1/permissions/routers/__init__.py b/cognee/api/v1/permissions/routers/__init__.py index 986b52c3e..be7e5bbc4 100644 --- a/cognee/api/v1/permissions/routers/__init__.py +++ b/cognee/api/v1/permissions/routers/__init__.py @@ -1 +1 @@ -from .get_permissions_router import get_permissions_router \ No newline at end of file +from .get_permissions_router import get_permissions_router diff --git a/cognee/api/v1/permissions/routers/get_permissions_router.py b/cognee/api/v1/permissions/routers/get_permissions_router.py index 8d012d600..78b822085 100644 --- a/cognee/api/v1/permissions/routers/get_permissions_router.py +++ b/cognee/api/v1/permissions/routers/get_permissions_router.py @@ -1,47 +1,80 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter, Depends from fastapi.responses import JSONResponse from sqlalchemy.orm import Session +from sqlalchemy.future import select +from sqlalchemy import insert +from sqlalchemy.exc import IntegrityError +from cognee.infrastructure.databases.exceptions import EntityAlreadyExistsError from cognee.modules.users.exceptions import UserNotFoundError, GroupNotFoundError from cognee.modules.users import get_user_db -from cognee.modules.users.models import User, Group, Permission +from cognee.modules.users.models import User, Group, Permission, UserGroup, GroupPermission + def get_permissions_router() -> APIRouter: permissions_router = APIRouter() @permissions_router.post("/groups/{group_id}/permissions") - async def give_permission_to_group(group_id: int, permission: str, db: Session = Depends(get_user_db)): - group = db.query(Group).filter(Group.id == group_id).first() + async def give_permission_to_group( + group_id: str, permission: str, db: Session = Depends(get_user_db) + ): + group = ( + (await db.session.execute(select(Group).where(Group.id == group_id))).scalars().first() + ) if not group: raise GroupNotFoundError - permission = db.query(Permission).filter(Permission.name == permission).first() + permission_entity = ( + (await db.session.execute(select(Permission).where(Permission.name == permission))) + .scalars() + .first() + ) - if not permission: - permission = Permission(name = permission) - db.add(permission) + if not permission_entity: + stmt = insert(Permission).values(name=permission) + await db.session.execute(stmt) + permission_entity = ( + (await db.session.execute(select(Permission).where(Permission.name == permission))) + .scalars() + .first() + ) - group.permissions.append(permission) + try: + # add permission to group + await db.session.execute( + insert(GroupPermission).values( + group_id=group.id, permission_id=permission_entity.id + ) + ) + except IntegrityError: + raise EntityAlreadyExistsError(message="Group permission already exists.") - db.commit() + await db.session.commit() - return JSONResponse(status_code = 200, content = {"message": "Permission assigned to group"}) + return JSONResponse(status_code=200, content={"message": "Permission assigned to group"}) @permissions_router.post("/users/{user_id}/groups") - async def add_user_to_group(user_id: int, group_id: int, db: Session = Depends(get_user_db)): - user = db.query(User).filter(User.id == user_id).first() - group = db.query(Group).filter(Group.id == group_id).first() + async def add_user_to_group(user_id: str, group_id: str, db: Session = Depends(get_user_db)): + user = (await db.session.execute(select(User).where(User.id == user_id))).scalars().first() + group = ( + (await db.session.execute(select(Group).where(Group.id == group_id))).scalars().first() + ) if not user: raise UserNotFoundError elif not group: raise GroupNotFoundError - user.groups.append(group) + try: + # Add association directly to the association table + stmt = insert(UserGroup).values(user_id=user_id, group_id=group_id) + await db.session.execute(stmt) + except IntegrityError: + raise EntityAlreadyExistsError(message="User is already part of group.") - db.commit() + await db.session.commit() - return JSONResponse(status_code = 200, content = {"message": "User added to group"}) + return JSONResponse(status_code=200, content={"message": "User added to group"}) return permissions_router diff --git a/cognee/api/v1/prune/prune.py b/cognee/api/v1/prune/prune.py index 4237ac58e..efee07e21 100644 --- a/cognee/api/v1/prune/prune.py +++ b/cognee/api/v1/prune/prune.py @@ -1,19 +1,21 @@ from cognee.modules.data.deletion import prune_system, prune_data -class prune(): + +class prune: @staticmethod async def prune_data(): await prune_data() @staticmethod - async def prune_system(graph = True, vector = True, metadata = False): + async def prune_system(graph=True, vector=True, metadata=False): await prune_system(graph, vector, metadata) + if __name__ == "__main__": import asyncio + async def main(): await prune.prune_data() await prune.prune_system() - asyncio.run(main()) diff --git a/cognee/api/v1/search/get_search_history.py b/cognee/api/v1/search/get_search_history.py index fada67c85..04ec49978 100644 --- a/cognee/api/v1/search/get_search_history.py +++ b/cognee/api/v1/search/get_search_history.py @@ -2,8 +2,9 @@ from cognee.modules.search.operations import get_history from cognee.modules.users.methods import get_default_user from cognee.modules.users.models import User + async def get_search_history(user: User = None) -> list: if not user: user = await get_default_user() - + return await get_history(user.id) diff --git a/cognee/api/v1/search/routers/__init__.py b/cognee/api/v1/search/routers/__init__.py index c3b199f5f..d30e865e2 100644 --- a/cognee/api/v1/search/routers/__init__.py +++ b/cognee/api/v1/search/routers/__init__.py @@ -1 +1 @@ -from .get_search_router import get_search_router \ No newline at end of file +from .get_search_router import get_search_router diff --git a/cognee/api/v1/search/routers/get_search_router.py b/cognee/api/v1/search/routers/get_search_router.py index 893067c20..a97e84cf4 100644 --- a/cognee/api/v1/search/routers/get_search_router.py +++ b/cognee/api/v1/search/routers/get_search_router.py @@ -13,6 +13,7 @@ class SearchPayloadDTO(InDTO): search_type: SearchType query: str + def get_search_router() -> APIRouter: router = APIRouter() @@ -22,21 +23,18 @@ def get_search_router() -> APIRouter: user: str created_at: datetime - @router.get("/", response_model = list[SearchHistoryItem]) + @router.get("/", response_model=list[SearchHistoryItem]) async def get_search_history(user: User = Depends(get_authenticated_user)): try: history = await get_history(user.id) return history except Exception as error: - return JSONResponse( - status_code = 500, - content = {"error": str(error)} - ) + return JSONResponse(status_code=500, content={"error": str(error)}) - @router.post("/", response_model = list) + @router.post("/", response_model=list) async def search(payload: SearchPayloadDTO, user: User = Depends(get_authenticated_user)): - """ This endpoint is responsible for searching for nodes in the graph.""" + """This endpoint is responsible for searching for nodes in the graph.""" from cognee.api.v1.search import search as cognee_search try: @@ -44,9 +42,6 @@ def get_search_router() -> APIRouter: return results except Exception as error: - return JSONResponse( - status_code = 409, - content = {"error": str(error)} - ) + return JSONResponse(status_code=409, content={"error": str(error)}) return router diff --git a/cognee/api/v1/search/search.legacy.py b/cognee/api/v1/search/search.legacy.py index cea3b3874..c4e490f01 100644 --- a/cognee/api/v1/search/search.legacy.py +++ b/cognee/api/v1/search/search.legacy.py @@ -1,4 +1,5 @@ -""" This module contains the search function that is used to search for nodes in the graph.""" +"""This module contains the search function that is used to search for nodes in the graph.""" + import asyncio from enum import Enum from typing import Dict, Any, Callable, List @@ -16,6 +17,7 @@ from cognee.modules.users.permissions.methods import get_document_ids_for_user from cognee.modules.users.methods import get_default_user from cognee.modules.users.models import User + class SearchType(Enum): ADJACENT = "ADJACENT" TRAVERSE = "TRAVERSE" @@ -23,7 +25,7 @@ class SearchType(Enum): SUMMARY = "SUMMARY" SUMMARY_CLASSIFICATION = "SUMMARY_CLASSIFICATION" NODE_CLASSIFICATION = "NODE_CLASSIFICATION" - DOCUMENT_CLASSIFICATION = "DOCUMENT_CLASSIFICATION", + DOCUMENT_CLASSIFICATION = ("DOCUMENT_CLASSIFICATION",) CYPHER = "CYPHER" @staticmethod @@ -33,12 +35,13 @@ class SearchType(Enum): except KeyError as error: raise ValueError(f"{name} is not a valid SearchType") from error + class SearchParameters(BaseModel): search_type: SearchType params: Dict[str, Any] @field_validator("search_type", mode="before") - def convert_string_to_enum(cls, value): # pylint: disable=no-self-argument + def convert_string_to_enum(cls, value): # pylint: disable=no-self-argument if isinstance(value, str): return SearchType.from_str(value) return value @@ -52,7 +55,7 @@ async def search(search_type: str, params: Dict[str, Any], user: User = None) -> raise UserNotFoundError own_document_ids = await get_document_ids_for_user(user.id) - search_params = SearchParameters(search_type = search_type, params = params) + search_params = SearchParameters(search_type=search_type, params=params) search_results = await specific_search([search_params], user) from uuid import UUID @@ -61,7 +64,7 @@ async def search(search_type: str, params: Dict[str, Any], user: User = None) -> for search_result in search_results: document_id = search_result["document_id"] if "document_id" in search_result else None - document_id = UUID(document_id) if type(document_id) == str else document_id + document_id = UUID(document_id) if isinstance(document_id, str) else document_id if document_id is None or document_id in own_document_ids: filtered_search_results.append(search_result) diff --git a/cognee/api/v1/search/search_v2.py b/cognee/api/v1/search/search_v2.py index d77aa5fa8..4166fd3f3 100644 --- a/cognee/api/v1/search/search_v2.py +++ b/cognee/api/v1/search/search_v2.py @@ -1,7 +1,7 @@ import json from uuid import UUID from enum import Enum -from typing import Callable, Dict +from typing import Callable, Dict, Union from cognee.exceptions import InvalidValueError from cognee.modules.search.operations import log_query, log_result @@ -14,13 +14,28 @@ from cognee.modules.users.permissions.methods import get_document_ids_for_user from cognee.tasks.chunks import query_chunks from cognee.tasks.graph import query_graph_connections from cognee.tasks.summarization import query_summaries +from cognee.tasks.completion import query_completion +from cognee.tasks.completion import graph_query_completion + class SearchType(Enum): SUMMARIES = "SUMMARIES" INSIGHTS = "INSIGHTS" CHUNKS = "CHUNKS" + COMPLETION = "COMPLETION" + GRAPH_COMPLETION = "GRAPH_COMPLETION" + + +async def search( + query_type: SearchType, + query_text: str, + user: User = None, + datasets: Union[list[str], str, None] = None, +) -> list: + # We use lists from now on for datasets + if isinstance(datasets, str): + datasets = [datasets] -async def search(query_type: SearchType, query_text: str, user: User = None) -> list: if user is None: user = await get_default_user() @@ -29,27 +44,30 @@ async def search(query_type: SearchType, query_text: str, user: User = None) -> query = await log_query(query_text, str(query_type), user.id) - own_document_ids = await get_document_ids_for_user(user.id) + own_document_ids = await get_document_ids_for_user(user.id, datasets) search_results = await specific_search(query_type, query_text, user) filtered_search_results = [] for search_result in search_results: document_id = search_result["document_id"] if "document_id" in search_result else None - document_id = UUID(document_id) if type(document_id) == str else document_id + document_id = UUID(document_id) if isinstance(document_id, str) else document_id if document_id is None or document_id in own_document_ids: filtered_search_results.append(search_result) - await log_result(query.id, json.dumps(filtered_search_results, cls = JSONEncoder), user.id) + await log_result(query.id, json.dumps(filtered_search_results, cls=JSONEncoder), user.id) return filtered_search_results + async def specific_search(query_type: SearchType, query: str, user) -> list: search_tasks: Dict[SearchType, Callable] = { SearchType.SUMMARIES: query_summaries, SearchType.INSIGHTS: query_graph_connections, SearchType.CHUNKS: query_chunks, + SearchType.COMPLETION: query_completion, + SearchType.GRAPH_COMPLETION: graph_query_completion, } search_task = search_tasks.get(query_type) diff --git a/cognee/api/v1/settings/routers/__init__.py b/cognee/api/v1/settings/routers/__init__.py index 363d26610..4cb4fc49b 100644 --- a/cognee/api/v1/settings/routers/__init__.py +++ b/cognee/api/v1/settings/routers/__init__.py @@ -1 +1 @@ -from .get_settings_router import get_settings_router \ No newline at end of file +from .get_settings_router import get_settings_router diff --git a/cognee/api/v1/settings/routers/get_settings_router.py b/cognee/api/v1/settings/routers/get_settings_router.py index 31692382b..138bea661 100644 --- a/cognee/api/v1/settings/routers/get_settings_router.py +++ b/cognee/api/v1/settings/routers/get_settings_router.py @@ -6,40 +6,50 @@ from fastapi import Depends from cognee.modules.users.models import User from cognee.modules.settings.get_settings import LLMConfig, VectorDBConfig + class LLMConfigOutputDTO(OutDTO, LLMConfig): pass + class VectorDBConfigOutputDTO(OutDTO, VectorDBConfig): pass + class SettingsDTO(OutDTO): llm: LLMConfigOutputDTO vector_db: VectorDBConfigOutputDTO + class LLMConfigInputDTO(InDTO): provider: Union[Literal["openai"], Literal["ollama"], Literal["anthropic"]] model: str api_key: str + class VectorDBConfigInputDTO(InDTO): provider: Union[Literal["lancedb"], Literal["qdrant"], Literal["weaviate"], Literal["pgvector"]] url: str api_key: str + class SettingsPayloadDTO(InDTO): llm: Optional[LLMConfigInputDTO] = None vector_db: Optional[VectorDBConfigInputDTO] = None + def get_settings_router() -> APIRouter: router = APIRouter() @router.get("/", response_model=SettingsDTO) async def get_settings(user: User = Depends(get_authenticated_user)): from cognee.modules.settings import get_settings as get_cognee_settings + return get_cognee_settings() @router.post("/", response_model=None) - async def save_settings(new_settings: SettingsPayloadDTO, user: User = Depends(get_authenticated_user)): + async def save_settings( + new_settings: SettingsPayloadDTO, user: User = Depends(get_authenticated_user) + ): from cognee.modules.settings import save_llm_config, save_vector_db_config if new_settings.llm is not None: @@ -48,4 +58,4 @@ def get_settings_router() -> APIRouter: if new_settings.vector_db is not None: await save_vector_db_config(new_settings.vector_db) - return router \ No newline at end of file + return router diff --git a/cognee/api/v1/users/create_user.py b/cognee/api/v1/users/create_user.py index eba7a6e89..adfbf4ee1 100644 --- a/cognee/api/v1/users/create_user.py +++ b/cognee/api/v1/users/create_user.py @@ -3,10 +3,10 @@ from cognee.modules.users.methods import create_user as create_user_method async def create_user(email: str, password: str, is_superuser: bool = False): user = await create_user_method( - email = email, - password = password, - is_superuser = is_superuser, - is_verified = True, + email=email, + password=password, + is_superuser=is_superuser, + is_verified=True, ) return user diff --git a/cognee/api/v1/users/routers/__init__.py b/cognee/api/v1/users/routers/__init__.py index 482aac265..ae4b7ca56 100644 --- a/cognee/api/v1/users/routers/__init__.py +++ b/cognee/api/v1/users/routers/__init__.py @@ -3,3 +3,4 @@ from .get_register_router import get_register_router from .get_reset_password_router import get_reset_password_router from .get_users_router import get_users_router from .get_verify_router import get_verify_router +from .get_visualize_router import get_visualize_router diff --git a/cognee/api/v1/users/routers/get_auth_router.py b/cognee/api/v1/users/routers/get_auth_router.py index 8a65cde35..b6acc62a6 100644 --- a/cognee/api/v1/users/routers/get_auth_router.py +++ b/cognee/api/v1/users/routers/get_auth_router.py @@ -1,6 +1,7 @@ from cognee.modules.users.get_fastapi_users import get_fastapi_users from cognee.modules.users.authentication.get_auth_backend import get_auth_backend + def get_auth_router(): auth_backend = get_auth_backend() return get_fastapi_users().get_auth_router(auth_backend) diff --git a/cognee/api/v1/users/routers/get_register_router.py b/cognee/api/v1/users/routers/get_register_router.py index a1152c01c..8857b01da 100644 --- a/cognee/api/v1/users/routers/get_register_router.py +++ b/cognee/api/v1/users/routers/get_register_router.py @@ -1,5 +1,6 @@ from cognee.modules.users.get_fastapi_users import get_fastapi_users from cognee.modules.users.models.User import UserRead, UserCreate + def get_register_router(): return get_fastapi_users().get_register_router(UserRead, UserCreate) diff --git a/cognee/api/v1/users/routers/get_reset_password_router.py b/cognee/api/v1/users/routers/get_reset_password_router.py index c058abe2a..33708c72a 100644 --- a/cognee/api/v1/users/routers/get_reset_password_router.py +++ b/cognee/api/v1/users/routers/get_reset_password_router.py @@ -1,4 +1,5 @@ from cognee.modules.users.get_fastapi_users import get_fastapi_users + def get_reset_password_router(): return get_fastapi_users().get_reset_password_router() diff --git a/cognee/api/v1/users/routers/get_users_router.py b/cognee/api/v1/users/routers/get_users_router.py index b81be73b0..776aefba0 100644 --- a/cognee/api/v1/users/routers/get_users_router.py +++ b/cognee/api/v1/users/routers/get_users_router.py @@ -1,5 +1,6 @@ from cognee.modules.users.get_fastapi_users import get_fastapi_users from cognee.modules.users.models.User import UserRead, UserUpdate + def get_users_router(): return get_fastapi_users().get_users_router(UserRead, UserUpdate) diff --git a/cognee/api/v1/users/routers/get_verify_router.py b/cognee/api/v1/users/routers/get_verify_router.py index 0c18b08c2..aaf52b339 100644 --- a/cognee/api/v1/users/routers/get_verify_router.py +++ b/cognee/api/v1/users/routers/get_verify_router.py @@ -1,5 +1,6 @@ from cognee.modules.users.get_fastapi_users import get_fastapi_users from cognee.modules.users.models.User import UserRead + def get_verify_router(): return get_fastapi_users().get_verify_router(UserRead) diff --git a/cognee/api/v1/users/routers/get_visualize_router.py b/cognee/api/v1/users/routers/get_visualize_router.py new file mode 100644 index 000000000..3e678cccd --- /dev/null +++ b/cognee/api/v1/users/routers/get_visualize_router.py @@ -0,0 +1,32 @@ +from fastapi import Form, UploadFile, Depends +from fastapi.responses import JSONResponse +from fastapi import APIRouter +from typing import List +import aiohttp +import subprocess +import logging +import os +from cognee.modules.users.models import User +from cognee.modules.users.methods import get_authenticated_user + +logger = logging.getLogger(__name__) + + +def get_visualize_router() -> APIRouter: + router = APIRouter() + + @router.post("/", response_model=None) + async def visualize( + user: User = Depends(get_authenticated_user), + ): + """This endpoint is responsible for adding data to the graph.""" + from cognee.api.v1.visualize import visualize_graph + + try: + html_visualization = await visualize_graph() + return html_visualization + + except Exception as error: + return JSONResponse(status_code=409, content={"error": str(error)}) + + return router diff --git a/cognee/api/v1/visualize/__init__.py b/cognee/api/v1/visualize/__init__.py new file mode 100644 index 000000000..80db0367c --- /dev/null +++ b/cognee/api/v1/visualize/__init__.py @@ -0,0 +1 @@ +from .visualize import visualize_graph diff --git a/cognee/api/v1/visualize/visualize.py b/cognee/api/v1/visualize/visualize.py new file mode 100644 index 000000000..3267f9d3d --- /dev/null +++ b/cognee/api/v1/visualize/visualize.py @@ -0,0 +1,14 @@ +from cognee.shared.utils import create_cognee_style_network_with_logo, graph_to_tuple +from cognee.infrastructure.databases.graph import get_graph_engine +import logging + + +async def visualize_graph(label: str = "name"): + """ """ + graph_engine = await get_graph_engine() + graph_data = await graph_engine.get_graph_data() + logging.info(graph_data) + + graph = await create_cognee_style_network_with_logo(graph_data, label=label) + + return graph diff --git a/cognee/base_config.py b/cognee/base_config.py index 0e70b7652..6b1b8811e 100644 --- a/cognee/base_config.py +++ b/cognee/base_config.py @@ -5,13 +5,16 @@ from pydantic_settings import BaseSettings, SettingsConfigDict from cognee.root_dir import get_absolute_path from cognee.shared.data_models import MonitoringTool + class BaseConfig(BaseSettings): data_root_directory: str = get_absolute_path(".data_storage") monitoring_tool: object = MonitoringTool.LANGFUSE graphistry_username: Optional[str] = os.getenv("GRAPHISTRY_USERNAME") graphistry_password: Optional[str] = os.getenv("GRAPHISTRY_PASSWORD") - - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + langfuse_public_key: Optional[str] = os.getenv("LANGFUSE_PUBLIC_KEY") + langfuse_secret_key: Optional[str] = os.getenv("LANGFUSE_SECRET_KEY") + langfuse_host: Optional[str] = os.getenv("LANGFUSE_HOST") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { @@ -19,6 +22,7 @@ class BaseConfig(BaseSettings): "monitoring_tool": self.monitoring_tool, } + @lru_cache def get_base_config(): return BaseConfig() diff --git a/cognee/exceptions/__init__.py b/cognee/exceptions/__init__.py index 40120e0e1..1432afcc8 100644 --- a/cognee/exceptions/__init__.py +++ b/cognee/exceptions/__init__.py @@ -10,4 +10,4 @@ from .exceptions import ( ServiceError, InvalidValueError, InvalidAttributeError, -) \ No newline at end of file +) diff --git a/cognee/exceptions/exceptions.py b/cognee/exceptions/exceptions.py index f94daf8c9..c4ce73f8c 100644 --- a/cognee/exceptions/exceptions.py +++ b/cognee/exceptions/exceptions.py @@ -3,6 +3,7 @@ import logging logger = logging.getLogger(__name__) + class CogneeApiError(Exception): """Base exception class""" @@ -36,19 +37,19 @@ class ServiceError(CogneeApiError): class InvalidValueError(CogneeApiError): def __init__( - self, - message: str = "Invalid Value.", - name: str = "InvalidValueError", - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + self, + message: str = "Invalid Value.", + name: str = "InvalidValueError", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ): super().__init__(message, name, status_code) class InvalidAttributeError(CogneeApiError): def __init__( - self, - message: str = "Invalid attribute.", - name: str = "InvalidAttributeError", - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + self, + message: str = "Invalid attribute.", + name: str = "InvalidAttributeError", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) diff --git a/cognee/fetch_secret.py b/cognee/fetch_secret.py index 65b5326a9..c36f9e4ce 100644 --- a/cognee/fetch_secret.py +++ b/cognee/fetch_secret.py @@ -15,7 +15,7 @@ sys.path.insert(0, parent_dir) environment = os.getenv("AWS_ENV", "dev") -def fetch_secret(secret_name:str, region_name:str, env_file_path:str): +def fetch_secret(secret_name: str, region_name: str, env_file_path: str): """Fetch the secret from AWS Secrets Manager and write it to the .env file.""" print("Initializing session") session = boto3.session.Session() diff --git a/cognee/infrastructure/data/chunking/DefaultChunkEngine.py b/cognee/infrastructure/data/chunking/DefaultChunkEngine.py index 2ca879b25..0d67d5e38 100644 --- a/cognee/infrastructure/data/chunking/DefaultChunkEngine.py +++ b/cognee/infrastructure/data/chunking/DefaultChunkEngine.py @@ -1,4 +1,5 @@ -""" Chunking strategies for splitting text into smaller parts.""" +"""Chunking strategies for splitting text into smaller parts.""" + from __future__ import annotations import re from cognee.shared.data_models import ChunkStrategy @@ -6,17 +7,15 @@ from cognee.shared.data_models import ChunkStrategy # /Users/vasa/Projects/cognee/cognee/infrastructure/data/chunking/DefaultChunkEngine.py -class DefaultChunkEngine(): + +class DefaultChunkEngine: def __init__(self, chunk_strategy=None, chunk_size=None, chunk_overlap=None): self.chunk_strategy = chunk_strategy self.chunk_size = chunk_size self.chunk_overlap = chunk_overlap - @staticmethod - def _split_text_with_regex( - text: str, separator: str, keep_separator: bool - ) -> list[str]: + def _split_text_with_regex(text: str, separator: str, keep_separator: bool) -> list[str]: # Now that we have the separator, split the text if separator: if keep_separator: @@ -32,13 +31,12 @@ class DefaultChunkEngine(): splits = list(text) return [s for s in splits if s != ""] - - - def chunk_data(self, - chunk_strategy = None, - source_data = None, - chunk_size = None, - chunk_overlap = None, + def chunk_data( + self, + chunk_strategy=None, + source_data=None, + chunk_size=None, + chunk_overlap=None, ): """ Chunk data based on the specified strategy. @@ -54,44 +52,47 @@ class DefaultChunkEngine(): """ if self.chunk_strategy == ChunkStrategy.PARAGRAPH: - chunked_data, chunk_number = self.chunk_data_by_paragraph(source_data,chunk_size=self.chunk_size, chunk_overlap=self.chunk_overlap) + chunked_data, chunk_number = self.chunk_data_by_paragraph( + source_data, chunk_size=self.chunk_size, chunk_overlap=self.chunk_overlap + ) elif self.chunk_strategy == ChunkStrategy.SENTENCE: - chunked_data, chunk_number = self.chunk_by_sentence(source_data, chunk_size = self.chunk_size, chunk_overlap=self.chunk_overlap) + chunked_data, chunk_number = self.chunk_by_sentence( + source_data, chunk_size=self.chunk_size, chunk_overlap=self.chunk_overlap + ) elif self.chunk_strategy == ChunkStrategy.EXACT: - chunked_data, chunk_number = self.chunk_data_exact(source_data, chunk_size = self.chunk_size, chunk_overlap=self.chunk_overlap) + chunked_data, chunk_number = self.chunk_data_exact( + source_data, chunk_size=self.chunk_size, chunk_overlap=self.chunk_overlap + ) else: chunked_data, chunk_number = "Invalid chunk strategy.", [0, "Invalid chunk strategy."] - return chunked_data, chunk_number - - def chunk_data_exact(self, data_chunks, chunk_size, chunk_overlap): data = "".join(data_chunks) chunks = [] for i in range(0, len(data), chunk_size - chunk_overlap): - chunks.append(data[i:i + chunk_size]) + chunks.append(data[i : i + chunk_size]) numbered_chunks = [] for i, chunk in enumerate(chunks): numbered_chunk = [i + 1, chunk] numbered_chunks.append(numbered_chunk) return chunks, numbered_chunks - - def chunk_by_sentence(self, data_chunks, chunk_size, chunk_overlap): # Split by periods, question marks, exclamation marks, and ellipses data = "".join(data_chunks) # The regular expression is used to find series of charaters that end with one the following chaacters (. ! ? ...) - sentence_endings = r'(?<=[.!?…]) +' + sentence_endings = r"(?<=[.!?…]) +" sentences = re.split(sentence_endings, data) sentence_chunks = [] for sentence in sentences: if len(sentence) > chunk_size: - chunks = self.chunk_data_exact(data_chunks=[sentence], chunk_size=chunk_size, chunk_overlap=chunk_overlap) + chunks = self.chunk_data_exact( + data_chunks=[sentence], chunk_size=chunk_size, chunk_overlap=chunk_overlap + ) sentence_chunks.extend(chunks) else: sentence_chunks.append(sentence) @@ -102,9 +103,7 @@ class DefaultChunkEngine(): numbered_chunks.append(numbered_chunk) return sentence_chunks, numbered_chunks - - - def chunk_data_by_paragraph(self, data_chunks, chunk_size, chunk_overlap, bound = 0.75): + def chunk_data_by_paragraph(self, data_chunks, chunk_size, chunk_overlap, bound=0.75): data = "".join(data_chunks) total_length = len(data) chunks = [] diff --git a/cognee/infrastructure/data/chunking/LangchainChunkingEngine.py b/cognee/infrastructure/data/chunking/LangchainChunkingEngine.py index c58f7517c..5de642ca8 100644 --- a/cognee/infrastructure/data/chunking/LangchainChunkingEngine.py +++ b/cognee/infrastructure/data/chunking/LangchainChunkingEngine.py @@ -5,7 +5,6 @@ from cognee.infrastructure.data.chunking.DefaultChunkEngine import DefaultChunkE from cognee.shared.data_models import ChunkStrategy - class LangchainChunkEngine: def __init__(self, chunk_strategy=None, source_data=None, chunk_size=None, chunk_overlap=None): self.chunk_strategy = chunk_strategy @@ -13,13 +12,12 @@ class LangchainChunkEngine: self.chunk_size = chunk_size self.chunk_overlap = chunk_overlap - - - def chunk_data(self, - chunk_strategy = None, - source_data = None, - chunk_size = None, - chunk_overlap = None, + def chunk_data( + self, + chunk_strategy=None, + source_data=None, + chunk_size=None, + chunk_overlap=None, ): """ Chunk data based on the specified strategy. @@ -35,20 +33,24 @@ class LangchainChunkEngine: """ if chunk_strategy == ChunkStrategy.CODE: - chunked_data, chunk_number = self.chunk_data_by_code(source_data,self.chunk_size, self.chunk_overlap) + chunked_data, chunk_number = self.chunk_data_by_code( + source_data, self.chunk_size, self.chunk_overlap + ) elif chunk_strategy == ChunkStrategy.LANGCHAIN_CHARACTER: - chunked_data, chunk_number = self.chunk_data_by_character(source_data,self.chunk_size, self.chunk_overlap) + chunked_data, chunk_number = self.chunk_data_by_character( + source_data, self.chunk_size, self.chunk_overlap + ) else: - chunked_data, chunk_number = "Invalid chunk strategy.", [0, "Invalid chunk strategy."] + chunked_data, chunk_number = "Invalid chunk strategy.", [0, "Invalid chunk strategy."] return chunked_data, chunk_number - - def chunk_data_by_code(self, data_chunks, chunk_size, chunk_overlap= 10, language=None): + def chunk_data_by_code(self, data_chunks, chunk_size, chunk_overlap=10, language=None): from langchain_text_splitters import ( Language, RecursiveCharacterTextSplitter, ) + if language is None: language = Language.PYTHON python_splitter = RecursiveCharacterTextSplitter.from_language( @@ -67,7 +69,10 @@ class LangchainChunkEngine: def chunk_data_by_character(self, data_chunks, chunk_size=1500, chunk_overlap=10): from langchain_text_splitters import RecursiveCharacterTextSplitter - splitter = RecursiveCharacterTextSplitter(chunk_size =chunk_size, chunk_overlap=chunk_overlap) + + splitter = RecursiveCharacterTextSplitter( + chunk_size=chunk_size, chunk_overlap=chunk_overlap + ) data_chunks = splitter.create_documents([data_chunks]) only_content = [chunk.page_content for chunk in data_chunks] @@ -78,4 +83,3 @@ class LangchainChunkEngine: numbered_chunks.append(numbered_chunk) return only_content, numbered_chunks - diff --git a/cognee/infrastructure/data/chunking/config.py b/cognee/infrastructure/data/chunking/config.py index b917b8ddd..e367e4de8 100644 --- a/cognee/infrastructure/data/chunking/config.py +++ b/cognee/infrastructure/data/chunking/config.py @@ -11,8 +11,7 @@ class ChunkConfig(BaseSettings): chunk_strategy: object = ChunkStrategy.PARAGRAPH chunk_engine: object = ChunkEngine.DEFAULT_ENGINE - - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { diff --git a/cognee/infrastructure/data/chunking/create_chunking_engine.py b/cognee/infrastructure/data/chunking/create_chunking_engine.py index 5cd0d9077..7966bbf6c 100644 --- a/cognee/infrastructure/data/chunking/create_chunking_engine.py +++ b/cognee/infrastructure/data/chunking/create_chunking_engine.py @@ -9,9 +9,11 @@ class ChunkingConfig(Dict): vector_db_key: str vector_db_provider: str + def create_chunking_engine(config: ChunkingConfig): if config["chunk_engine"] == ChunkEngine.LANGCHAIN_ENGINE: from cognee.infrastructure.data.chunking.LangchainChunkingEngine import LangchainChunkEngine + return LangchainChunkEngine( chunk_size=config["chunk_size"], chunk_overlap=config["chunk_overlap"], diff --git a/cognee/infrastructure/data/chunking/get_chunking_engine.py b/cognee/infrastructure/data/chunking/get_chunking_engine.py index d188ffa9b..8d40a35a9 100644 --- a/cognee/infrastructure/data/chunking/get_chunking_engine.py +++ b/cognee/infrastructure/data/chunking/get_chunking_engine.py @@ -2,5 +2,6 @@ from .config import get_chunk_config from .create_chunking_engine import create_chunking_engine + def get_chunk_engine(): return create_chunking_engine(get_chunk_config().to_dict()) diff --git a/cognee/infrastructure/data/utils/extract_keywords.py b/cognee/infrastructure/data/utils/extract_keywords.py index 11f061889..42b06884a 100644 --- a/cognee/infrastructure/data/utils/extract_keywords.py +++ b/cognee/infrastructure/data/utils/extract_keywords.py @@ -3,6 +3,7 @@ from sklearn.feature_extraction.text import TfidfVectorizer from cognee.exceptions import InvalidValueError from cognee.shared.utils import extract_pos_tags + def extract_keywords(text: str) -> list[str]: if len(text) == 0: raise InvalidValueError(message="extract_keywords cannot extract keywords from empty text.") @@ -14,9 +15,7 @@ def extract_keywords(text: str) -> list[str]: tfidf = vectorizer.fit_transform(nouns) top_nouns = sorted( - vectorizer.vocabulary_, - key = lambda x: tfidf[0, vectorizer.vocabulary_[x]], - reverse = True + vectorizer.vocabulary_, key=lambda x: tfidf[0, vectorizer.vocabulary_[x]], reverse=True ) keywords = [] diff --git a/cognee/infrastructure/databases/exceptions/EmbeddingException.py b/cognee/infrastructure/databases/exceptions/EmbeddingException.py new file mode 100644 index 000000000..130282857 --- /dev/null +++ b/cognee/infrastructure/databases/exceptions/EmbeddingException.py @@ -0,0 +1,4 @@ +class EmbeddingException(Exception): + """Custom exception for handling embedding-related errors.""" + + pass diff --git a/cognee/infrastructure/databases/exceptions/__init__.py b/cognee/infrastructure/databases/exceptions/__init__.py index 5836e7d11..7c74db3df 100644 --- a/cognee/infrastructure/databases/exceptions/__init__.py +++ b/cognee/infrastructure/databases/exceptions/__init__.py @@ -7,4 +7,4 @@ This module defines a set of exceptions for handling various database errors from .exceptions import ( EntityNotFoundError, EntityAlreadyExistsError, -) \ No newline at end of file +) diff --git a/cognee/infrastructure/databases/exceptions/exceptions.py b/cognee/infrastructure/databases/exceptions/exceptions.py index af15bb616..854e620ff 100644 --- a/cognee/infrastructure/databases/exceptions/exceptions.py +++ b/cognee/infrastructure/databases/exceptions/exceptions.py @@ -1,6 +1,7 @@ from cognee.exceptions import CogneeApiError from fastapi import status + class EntityNotFoundError(CogneeApiError): """Database returns nothing""" @@ -22,4 +23,4 @@ class EntityAlreadyExistsError(CogneeApiError): name: str = "EntityAlreadyExistsError", status_code=status.HTTP_409_CONFLICT, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) diff --git a/cognee/infrastructure/databases/graph/config.py b/cognee/infrastructure/databases/graph/config.py index 8e6da37c7..b24a9e964 100644 --- a/cognee/infrastructure/databases/graph/config.py +++ b/cognee/infrastructure/databases/graph/config.py @@ -1,4 +1,4 @@ -""" This module contains the configuration for the graph database. """ +"""This module contains the configuration for the graph database.""" import os from functools import lru_cache @@ -15,8 +15,7 @@ class GraphConfig(BaseSettings): graph_database_password: str = "" graph_database_port: int = 123 graph_file_path: str = os.path.join( - os.path.join(get_absolute_path(".cognee_system"), "databases"), - graph_filename + os.path.join(get_absolute_path(".cognee_system"), "databases"), graph_filename ) graph_model: object = KnowledgeGraph graph_topology: object = KnowledgeGraph diff --git a/cognee/infrastructure/databases/graph/get_graph_engine.py b/cognee/infrastructure/databases/graph/get_graph_engine.py index 10c16bbdd..4660a610f 100644 --- a/cognee/infrastructure/databases/graph/get_graph_engine.py +++ b/cognee/infrastructure/databases/graph/get_graph_engine.py @@ -1,4 +1,5 @@ """Factory function to get the appropriate graph client based on the graph type.""" + from functools import lru_cache from .config import get_graph_config @@ -26,7 +27,11 @@ def create_graph_engine() -> GraphDBInterface: config = get_graph_config() if config.graph_database_provider == "neo4j": - if not (config.graph_database_url and config.graph_database_username and config.graph_database_password): + if not ( + config.graph_database_url + and config.graph_database_username + and config.graph_database_password + ): raise EnvironmentError("Missing required Neo4j credentials.") from .neo4j_driver.adapter import Neo4jAdapter @@ -34,7 +39,7 @@ def create_graph_engine() -> GraphDBInterface: return Neo4jAdapter( graph_database_url=config.graph_database_url, graph_database_username=config.graph_database_username, - graph_database_password=config.graph_database_password + graph_database_password=config.graph_database_password, ) elif config.graph_database_provider == "falkordb": @@ -53,6 +58,7 @@ def create_graph_engine() -> GraphDBInterface: ) from .networkx.adapter import NetworkXAdapter + graph_client = NetworkXAdapter(filename=config.graph_file_path) return graph_client diff --git a/cognee/infrastructure/databases/graph/graph_db_interface.py b/cognee/infrastructure/databases/graph/graph_db_interface.py index bcc09658c..30acc1b95 100644 --- a/cognee/infrastructure/databases/graph/graph_db_interface.py +++ b/cognee/infrastructure/databases/graph/graph_db_interface.py @@ -1,47 +1,35 @@ from typing import Protocol, Optional, Dict, Any from abc import abstractmethod + class GraphDBInterface(Protocol): @abstractmethod async def query(self, query: str, params: dict): raise NotImplementedError @abstractmethod - async def add_node( - self, - node_id: str, - node_properties: dict - ): raise NotImplementedError + async def add_node(self, node_id: str, node_properties: dict): + raise NotImplementedError @abstractmethod - async def add_nodes( - self, - nodes: list[tuple[str, dict]] - ): raise NotImplementedError + async def add_nodes(self, nodes: list[tuple[str, dict]]): + raise NotImplementedError @abstractmethod - async def delete_node( - self, - node_id: str - ): raise NotImplementedError + async def delete_node(self, node_id: str): + raise NotImplementedError @abstractmethod - async def delete_nodes( - self, - node_ids: list[str] - ): raise NotImplementedError + async def delete_nodes(self, node_ids: list[str]): + raise NotImplementedError @abstractmethod - async def extract_node( - self, - node_id: str - ): raise NotImplementedError + async def extract_node(self, node_id: str): + raise NotImplementedError @abstractmethod - async def extract_nodes( - self, - node_ids: list[str] - ): raise NotImplementedError + async def extract_nodes(self, node_ids: list[str]): + raise NotImplementedError @abstractmethod async def add_edge( @@ -49,21 +37,20 @@ class GraphDBInterface(Protocol): from_node: str, to_node: str, relationship_name: str, - edge_properties: Optional[Dict[str, Any]] = None - ): raise NotImplementedError + edge_properties: Optional[Dict[str, Any]] = None, + ): + raise NotImplementedError @abstractmethod - async def add_edges( - self, - edges: tuple[str, str, str, dict] - ): raise NotImplementedError + async def add_edges(self, edges: tuple[str, str, str, dict]): + raise NotImplementedError @abstractmethod async def delete_graph( self, - ): raise NotImplementedError + ): + raise NotImplementedError @abstractmethod - async def get_graph_data( - self - ): raise NotImplementedError + async def get_graph_data(self): + raise NotImplementedError diff --git a/cognee/infrastructure/databases/graph/neo4j_driver/adapter.py b/cognee/infrastructure/databases/graph/neo4j_driver/adapter.py index e6520e4e2..3543418fc 100644 --- a/cognee/infrastructure/databases/graph/neo4j_driver/adapter.py +++ b/cognee/infrastructure/databases/graph/neo4j_driver/adapter.py @@ -1,4 +1,5 @@ -""" Neo4j Adapter for Graph Database""" +"""Neo4j Adapter for Graph Database""" + import logging import asyncio from textwrap import dedent @@ -13,6 +14,7 @@ from cognee.infrastructure.databases.graph.graph_db_interface import GraphDBInte logger = logging.getLogger("Neo4jAdapter") + class Neo4jAdapter(GraphDBInterface): def __init__( self, @@ -23,8 +25,8 @@ class Neo4jAdapter(GraphDBInterface): ): self.driver = driver or AsyncGraphDatabase.driver( graph_database_url, - auth = (graph_database_username, graph_database_password), - max_connection_lifetime = 120 + auth=(graph_database_username, graph_database_password), + max_connection_lifetime=120, ) @asynccontextmanager @@ -39,11 +41,11 @@ class Neo4jAdapter(GraphDBInterface): ) -> List[Dict[str, Any]]: try: async with self.get_session() as session: - result = await session.run(query, parameters = params) + result = await session.run(query, parameters=params) data = await result.data() return data except Neo4jError as error: - logger.error("Neo4j query error: %s", error, exc_info = True) + logger.error("Neo4j query error: %s", error, exc_info=True) raise error async def has_node(self, node_id: str) -> bool: @@ -53,7 +55,7 @@ class Neo4jAdapter(GraphDBInterface): WHERE n.id = $node_id RETURN COUNT(n) > 0 AS node_exists """, - {"node_id": node_id} + {"node_id": node_id}, ) return results[0]["node_exists"] if len(results) > 0 else False @@ -83,15 +85,17 @@ class Neo4jAdapter(GraphDBInterface): RETURN ID(labeledNode) AS internal_id, labeledNode.id AS nodeId """ - nodes = [{ - "node_id": str(node.id), - "properties": self.serialize_properties(node.model_dump()), - } for node in nodes] + nodes = [ + { + "node_id": str(node.id), + "properties": self.serialize_properties(node.model_dump()), + } + for node in nodes + ] - results = await self.query(query, dict(nodes = nodes)) + results = await self.query(query, dict(nodes=nodes)) return results - async def extract_node(self, node_id: str): results = await self.extract_nodes([node_id]) @@ -103,9 +107,7 @@ class Neo4jAdapter(GraphDBInterface): MATCH (node {id: id}) RETURN node""" - params = { - "node_ids": node_ids - } + params = {"node_ids": node_ids} results = await self.query(query, params) @@ -115,7 +117,7 @@ class Neo4jAdapter(GraphDBInterface): node_id = id.replace(":", "_") query = f"MATCH (node:`{node_id}` {{id: $node_id}}) DETACH DELETE n" - params = { "node_id": node_id } + params = {"node_id": node_id} return await self.query(query, params) @@ -125,9 +127,7 @@ class Neo4jAdapter(GraphDBInterface): MATCH (node {id: id}) DETACH DELETE node""" - params = { - "node_ids": node_ids - } + params = {"node_ids": node_ids} return await self.query(query, params) @@ -157,21 +157,29 @@ class Neo4jAdapter(GraphDBInterface): try: params = { - "edges": [{ - "from_node": str(edge[0]), - "to_node": str(edge[1]), - "relationship_name": edge[2], - } for edge in edges], + "edges": [ + { + "from_node": str(edge[0]), + "to_node": str(edge[1]), + "relationship_name": edge[2], + } + for edge in edges + ], } results = await self.query(query, params) return [result["edge_exists"] for result in results] except Neo4jError as error: - logger.error("Neo4j query error: %s", error, exc_info = True) + logger.error("Neo4j query error: %s", error, exc_info=True) raise error - - async def add_edge(self, from_node: UUID, to_node: UUID, relationship_name: str, edge_properties: Optional[Dict[str, Any]] = {}): + async def add_edge( + self, + from_node: UUID, + to_node: UUID, + relationship_name: str, + edge_properties: Optional[Dict[str, Any]] = {}, + ): serialized_properties = self.serialize_properties(edge_properties) query = dedent("""MATCH (from_node {id: $from_node}), @@ -186,12 +194,11 @@ class Neo4jAdapter(GraphDBInterface): "from_node": str(from_node), "to_node": str(to_node), "relationship_name": relationship_name, - "properties": serialized_properties + "properties": serialized_properties, } return await self.query(query, params) - async def add_edges(self, edges: list[tuple[str, str, str, dict[str, Any]]]) -> None: query = """ UNWIND $edges AS edge @@ -201,22 +208,25 @@ class Neo4jAdapter(GraphDBInterface): RETURN rel """ - edges = [{ - "from_node": str(edge[0]), - "to_node": str(edge[1]), - "relationship_name": edge[2], - "properties": { - **(edge[3] if edge[3] else {}), - "source_node_id": str(edge[0]), - "target_node_id": str(edge[1]), - }, - } for edge in edges] + edges = [ + { + "from_node": str(edge[0]), + "to_node": str(edge[1]), + "relationship_name": edge[2], + "properties": { + **(edge[3] if edge[3] else {}), + "source_node_id": str(edge[0]), + "target_node_id": str(edge[1]), + }, + } + for edge in edges + ] try: - results = await self.query(query, dict(edges = edges)) + results = await self.query(query, dict(edges=edges)) return results except Neo4jError as error: - logger.error("Neo4j query error: %s", error, exc_info = True) + logger.error("Neo4j query error: %s", error, exc_info=True) raise error async def get_edges(self, node_id: str): @@ -225,9 +235,12 @@ class Neo4jAdapter(GraphDBInterface): RETURN n, r, m """ - results = await self.query(query, dict(node_id = node_id)) + results = await self.query(query, dict(node_id=node_id)) - return [(result["n"]["id"], result["m"]["id"], {"relationship_name": result["r"][1]}) for result in results] + return [ + (result["n"]["id"], result["m"]["id"], {"relationship_name": result["r"][1]}) + for result in results + ] async def get_disconnected_nodes(self) -> list[str]: # return await self.query( @@ -267,7 +280,6 @@ class Neo4jAdapter(GraphDBInterface): results = await self.query(query) return results[0]["ids"] if len(results) > 0 else [] - async def get_predecessors(self, node_id: str, edge_label: str = None) -> list[str]: if edge_label is not None: query = """ @@ -279,9 +291,9 @@ class Neo4jAdapter(GraphDBInterface): results = await self.query( query, dict( - node_id = node_id, - edge_label = edge_label, - ) + node_id=node_id, + edge_label=edge_label, + ), ) return [result["predecessor"] for result in results] @@ -295,8 +307,8 @@ class Neo4jAdapter(GraphDBInterface): results = await self.query( query, dict( - node_id = node_id, - ) + node_id=node_id, + ), ) return [result["predecessor"] for result in results] @@ -312,8 +324,8 @@ class Neo4jAdapter(GraphDBInterface): results = await self.query( query, dict( - node_id = node_id, - edge_label = edge_label, + node_id=node_id, + edge_label=edge_label, ), ) @@ -328,14 +340,16 @@ class Neo4jAdapter(GraphDBInterface): results = await self.query( query, dict( - node_id = node_id, - ) + node_id=node_id, + ), ) return [result["successor"] for result in results] async def get_neighbours(self, node_id: str) -> List[Dict[str, Any]]: - predecessors, successors = await asyncio.gather(self.get_predecessors(node_id), self.get_successors(node_id)) + predecessors, successors = await asyncio.gather( + self.get_predecessors(node_id), self.get_successors(node_id) + ) return predecessors + successors @@ -352,52 +366,55 @@ class Neo4jAdapter(GraphDBInterface): """ predecessors, successors = await asyncio.gather( - self.query(predecessors_query, dict(node_id = str(node_id))), - self.query(successors_query, dict(node_id = str(node_id))), + self.query(predecessors_query, dict(node_id=str(node_id))), + self.query(successors_query, dict(node_id=str(node_id))), ) connections = [] for neighbour in predecessors: neighbour = neighbour["relation"] - connections.append((neighbour[0], { "relationship_name": neighbour[1] }, neighbour[2])) + connections.append((neighbour[0], {"relationship_name": neighbour[1]}, neighbour[2])) for neighbour in successors: neighbour = neighbour["relation"] - connections.append((neighbour[0], { "relationship_name": neighbour[1] }, neighbour[2])) + connections.append((neighbour[0], {"relationship_name": neighbour[1]}, neighbour[2])) return connections - async def remove_connection_to_predecessors_of(self, node_ids: list[str], edge_label: str) -> None: + async def remove_connection_to_predecessors_of( + self, node_ids: list[str], edge_label: str + ) -> None: query = f""" UNWIND $node_ids AS id MATCH (node:`{id}`)-[r:{edge_label}]->(predecessor) DELETE r; """ - params = { "node_ids": node_ids } + params = {"node_ids": node_ids} return await self.query(query, params) - async def remove_connection_to_successors_of(self, node_ids: list[str], edge_label: str) -> None: + async def remove_connection_to_successors_of( + self, node_ids: list[str], edge_label: str + ) -> None: query = f""" UNWIND $node_ids AS id MATCH (node:`{id}`)<-[r:{edge_label}]-(successor) DELETE r; """ - params = { "node_ids": node_ids } + params = {"node_ids": node_ids} return await self.query(query, params) - async def delete_graph(self): query = """MATCH (node) DETACH DELETE node;""" return await self.query(query) - def serialize_properties(self, properties = dict()): + def serialize_properties(self, properties=dict()): serialized_properties = {} for property_key, property_value in properties.items(): @@ -414,22 +431,28 @@ class Neo4jAdapter(GraphDBInterface): result = await self.query(query) - nodes = [( - record["properties"]["id"], - record["properties"], - ) for record in result] + nodes = [ + ( + record["properties"]["id"], + record["properties"], + ) + for record in result + ] query = """ MATCH (n)-[r]->(m) RETURN ID(n) AS source, ID(m) AS target, TYPE(r) AS type, properties(r) AS properties """ result = await self.query(query) - edges = [( - record["properties"]["source_node_id"], - record["properties"]["target_node_id"], - record["type"], - record["properties"], - ) for record in result] + edges = [ + ( + record["properties"]["source_node_id"], + record["properties"]["target_node_id"], + record["type"], + record["properties"], + ) + for record in result + ] return (nodes, edges) @@ -446,7 +469,9 @@ class Neo4jAdapter(GraphDBInterface): """ where_clauses = [] for attribute, values in attribute_filters[0].items(): - values_str = ", ".join(f"'{value}'" if isinstance(value, str) else str(value) for value in values) + values_str = ", ".join( + f"'{value}'" if isinstance(value, str) else str(value) for value in values + ) where_clauses.append(f"n.{attribute} IN [{values_str}]") where_clause = " AND ".join(where_clauses) @@ -458,23 +483,29 @@ class Neo4jAdapter(GraphDBInterface): """ result_nodes = await self.query(query_nodes) - nodes = [( - record["id"], - record["properties"], - ) for record in result_nodes] + nodes = [ + ( + record["id"], + record["properties"], + ) + for record in result_nodes + ] query_edges = f""" MATCH (n)-[r]->(m) - WHERE {where_clause} AND {where_clause.replace('n.', 'm.')} + WHERE {where_clause} AND {where_clause.replace("n.", "m.")} RETURN ID(n) AS source, ID(m) AS target, TYPE(r) AS type, properties(r) AS properties """ result_edges = await self.query(query_edges) - edges = [( - record["source"], - record["target"], - record["type"], - record["properties"], - ) for record in result_edges] + edges = [ + ( + record["source"], + record["target"], + record["type"], + record["properties"], + ) + for record in result_edges + ] - return (nodes, edges) \ No newline at end of file + return (nodes, edges) diff --git a/cognee/infrastructure/databases/graph/networkx/adapter.py b/cognee/infrastructure/databases/graph/networkx/adapter.py index aadad639f..75969c798 100644 --- a/cognee/infrastructure/databases/graph/networkx/adapter.py +++ b/cognee/infrastructure/databases/graph/networkx/adapter.py @@ -17,9 +17,10 @@ from cognee.modules.storage.utils import JSONEncoder logger = logging.getLogger("NetworkXAdapter") + class NetworkXAdapter(GraphDBInterface): _instance = None - graph = None # Class variable to store the singleton instance + graph = None # Class variable to store the singleton instance def __new__(cls, filename): if cls._instance is None: @@ -27,12 +28,12 @@ class NetworkXAdapter(GraphDBInterface): cls._instance.filename = filename return cls._instance - def __init__(self, filename = "cognee_graph.pkl"): + def __init__(self, filename="cognee_graph.pkl"): self.filename = filename async def get_graph_data(self): await self.load_graph_from_file() - return (list(self.graph.nodes(data = True)), list(self.graph.edges(data = True, keys = True))) + return (list(self.graph.nodes(data=True)), list(self.graph.edges(data=True, keys=True))) async def query(self, query: str, params: dict): pass @@ -57,24 +58,21 @@ class NetworkXAdapter(GraphDBInterface): self.graph.add_nodes_from(nodes) await self.save_graph_to_file(self.filename) - async def get_graph(self): return self.graph - async def has_edge(self, from_node: str, to_node: str, edge_label: str) -> bool: - return self.graph.has_edge(from_node, to_node, key = edge_label) + return self.graph.has_edge(from_node, to_node, key=edge_label) async def has_edges(self, edges): result = [] - for (from_node, to_node, edge_label) in edges: + for from_node, to_node, edge_label in edges: if self.graph.has_edge(from_node, to_node, edge_label): result.append((from_node, to_node, edge_label)) return result - async def add_edge( self, from_node: str, @@ -83,24 +81,38 @@ class NetworkXAdapter(GraphDBInterface): edge_properties: Dict[str, Any] = {}, ) -> None: edge_properties["updated_at"] = datetime.now(timezone.utc) - self.graph.add_edge(from_node, to_node, key = relationship_name, **(edge_properties if edge_properties else {})) + self.graph.add_edge( + from_node, + to_node, + key=relationship_name, + **(edge_properties if edge_properties else {}), + ) await self.save_graph_to_file(self.filename) async def add_edges( self, edges: tuple[str, str, str, dict], ) -> None: - edges = [(edge[0], edge[1], edge[2], { - **(edge[3] if len(edge) == 4 else {}), - "updated_at": datetime.now(timezone.utc), - }) for edge in edges] + edges = [ + ( + edge[0], + edge[1], + edge[2], + { + **(edge[3] if len(edge) == 4 else {}), + "updated_at": datetime.now(timezone.utc), + }, + ) + for edge in edges + ] self.graph.add_edges_from(edges) await self.save_graph_to_file(self.filename) async def get_edges(self, node_id: str): - return list(self.graph.in_edges(node_id, data = True)) + list(self.graph.out_edges(node_id, data = True)) - + return list(self.graph.in_edges(node_id, data=True)) + list( + self.graph.out_edges(node_id, data=True) + ) async def delete_node(self, node_id: str) -> None: """Asynchronously delete a node from the graph if it exists.""" @@ -112,12 +124,11 @@ class NetworkXAdapter(GraphDBInterface): self.graph.remove_nodes_from(node_ids) await self.save_graph_to_file(self.filename) - async def get_disconnected_nodes(self) -> List[str]: connected_components = list(nx.weakly_connected_components(self.graph)) disconnected_nodes = [] - biggest_subgraph = max(connected_components, key = len) + biggest_subgraph = max(connected_components, key=len) for component in connected_components: if component != biggest_subgraph: @@ -125,7 +136,6 @@ class NetworkXAdapter(GraphDBInterface): return disconnected_nodes - async def extract_node(self, node_id: str) -> dict: if self.graph.has_node(node_id): return self.graph.nodes[node_id] @@ -139,8 +149,8 @@ class NetworkXAdapter(GraphDBInterface): if self.graph.has_node(node_id): if edge_label is None: return [ - self.graph.nodes[predecessor] for predecessor \ - in list(self.graph.predecessors(node_id)) + self.graph.nodes[predecessor] + for predecessor in list(self.graph.predecessors(node_id)) ] nodes = [] @@ -155,8 +165,8 @@ class NetworkXAdapter(GraphDBInterface): if self.graph.has_node(node_id): if edge_label is None: return [ - self.graph.nodes[successor] for successor \ - in list(self.graph.successors(node_id)) + self.graph.nodes[successor] + for successor in list(self.graph.successors(node_id)) ] nodes = [] @@ -210,7 +220,9 @@ class NetworkXAdapter(GraphDBInterface): return connections - async def remove_connection_to_predecessors_of(self, node_ids: list[str], edge_label: str) -> None: + async def remove_connection_to_predecessors_of( + self, node_ids: list[str], edge_label: str + ) -> None: for node_id in node_ids: if self.graph.has_node(node_id): for predecessor_id in list(self.graph.predecessors(node_id)): @@ -219,7 +231,9 @@ class NetworkXAdapter(GraphDBInterface): await self.save_graph_to_file(self.filename) - async def remove_connection_to_successors_of(self, node_ids: list[str], edge_label: str) -> None: + async def remove_connection_to_successors_of( + self, node_ids: list[str], edge_label: str + ) -> None: for node_id in node_ids: if self.graph.has_node(node_id): for successor_id in list(self.graph.successors(node_id)): @@ -228,7 +242,7 @@ class NetworkXAdapter(GraphDBInterface): await self.save_graph_to_file(self.filename) - async def save_graph_to_file(self, file_path: str=None) -> None: + async def save_graph_to_file(self, file_path: str = None) -> None: """Asynchronously save the graph to a file in JSON format.""" if not file_path: file_path = self.filename @@ -236,8 +250,7 @@ class NetworkXAdapter(GraphDBInterface): graph_data = nx.readwrite.json_graph.node_link_data(self.graph) async with aiofiles.open(file_path, "w") as file: - await file.write(json.dumps(graph_data, cls = JSONEncoder)) - + await file.write(json.dumps(graph_data, cls=JSONEncoder)) async def load_graph_from_file(self, file_path: str = None): """Asynchronously load the graph from a file in JSON format.""" @@ -252,50 +265,59 @@ class NetworkXAdapter(GraphDBInterface): graph_data = json.loads(await file.read()) for node in graph_data["nodes"]: try: - node["id"] = UUID(node["id"]) - except: - pass + node["id"] = UUID(node["id"]) + except Exception as e: + print(e) + pass if "updated_at" in node: - node["updated_at"] = datetime.strptime(node["updated_at"], "%Y-%m-%dT%H:%M:%S.%f%z") + node["updated_at"] = datetime.strptime( + node["updated_at"], "%Y-%m-%dT%H:%M:%S.%f%z" + ) for edge in graph_data["links"]: try: - source_id = UUID(edge["source"]) - target_id = UUID(edge["target"]) + source_id = UUID(edge["source"]) + target_id = UUID(edge["target"]) - edge["source"] = source_id - edge["target"] = target_id - edge["source_node_id"] = source_id - edge["target_node_id"] = target_id - except: - pass + edge["source"] = source_id + edge["target"] = target_id + edge["source_node_id"] = source_id + edge["target_node_id"] = target_id + except Exception as e: + print(e) + pass if "updated_at" in edge: - edge["updated_at"] = datetime.strptime(edge["updated_at"], "%Y-%m-%dT%H:%M:%S.%f%z") + edge["updated_at"] = datetime.strptime( + edge["updated_at"], "%Y-%m-%dT%H:%M:%S.%f%z" + ) self.graph = nx.readwrite.json_graph.node_link_graph(graph_data) for node_id, node_data in self.graph.nodes(data=True): - node_data['id'] = node_id + node_data["id"] = node_id else: # Log that the file does not exist and an empty graph is initialized logger.warning("File %s not found. Initializing an empty graph.", file_path) - self.graph = nx.MultiDiGraph() # Use MultiDiGraph to keep it consistent with __init__ + self.graph = ( + nx.MultiDiGraph() + ) # Use MultiDiGraph to keep it consistent with __init__ file_dir = os.path.dirname(file_path) if not os.path.exists(file_dir): - os.makedirs(file_dir, exist_ok = True) + os.makedirs(file_dir, exist_ok=True) await self.save_graph_to_file(file_path) except Exception: logger.error("Failed to load graph from file: %s", file_path) - async def delete_graph(self, file_path: str = None): """Asynchronously delete the graph file from the filesystem.""" if file_path is None: - file_path = self.filename # Assuming self.filename is defined elsewhere and holds the default graph file path + file_path = ( + self.filename + ) # Assuming self.filename is defined elsewhere and holds the default graph file path try: if os.path.exists(file_path): await aiofiles_os.remove(file_path) @@ -305,7 +327,9 @@ class NetworkXAdapter(GraphDBInterface): except Exception as error: logger.error("Failed to delete graph: %s", error) - async def get_filtered_graph_data(self, attribute_filters: List[Dict[str, List[Union[str, int]]]]): + async def get_filtered_graph_data( + self, attribute_filters: List[Dict[str, List[Union[str, int]]]] + ): """ Fetches nodes and relationships filtered by specified attribute values. @@ -325,18 +349,21 @@ class NetworkXAdapter(GraphDBInterface): # Filter nodes filtered_nodes = [ - (node, data) for node, data in self.graph.nodes(data=True) + (node, data) + for node, data in self.graph.nodes(data=True) if all(data.get(attr) in values for attr, values in where_clauses) ] # Filter edges where both source and target nodes satisfy the filters filtered_edges = [ - (source, target, data.get('relationship_type', 'UNKNOWN'), data) + (source, target, data.get("relationship_type", "UNKNOWN"), data) for source, target, data in self.graph.edges(data=True) if ( - all(self.graph.nodes[source].get(attr) in values for attr, values in where_clauses) and - all(self.graph.nodes[target].get(attr) in values for attr, values in where_clauses) + all(self.graph.nodes[source].get(attr) in values for attr, values in where_clauses) + and all( + self.graph.nodes[target].get(attr) in values for attr, values in where_clauses + ) ) ] - return filtered_nodes, filtered_edges \ No newline at end of file + return filtered_nodes, filtered_edges diff --git a/cognee/infrastructure/databases/hybrid/falkordb/FalkorDBAdapter.py b/cognee/infrastructure/databases/hybrid/falkordb/FalkorDBAdapter.py index fdc7db069..77bfd74e6 100644 --- a/cognee/infrastructure/databases/hybrid/falkordb/FalkorDBAdapter.py +++ b/cognee/infrastructure/databases/hybrid/falkordb/FalkorDBAdapter.py @@ -1,33 +1,36 @@ import asyncio + # from datetime import datetime import json -from uuid import UUID from textwrap import dedent +from uuid import UUID +from webbrowser import Error + from falkordb import FalkorDB from cognee.exceptions import InvalidValueError -from cognee.infrastructure.engine import DataPoint from cognee.infrastructure.databases.graph.graph_db_interface import GraphDBInterface from cognee.infrastructure.databases.vector.embeddings import EmbeddingEngine from cognee.infrastructure.databases.vector.vector_db_interface import VectorDBInterface +from cognee.infrastructure.engine import DataPoint + class IndexSchema(DataPoint): text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} + class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): def __init__( self, database_url: str, database_port: int, - embedding_engine = EmbeddingEngine, + embedding_engine=EmbeddingEngine, ): self.driver = FalkorDB( - host = database_url, - port = database_port, + host=database_url, + port=database_port, ) self.embedding_engine = embedding_engine self.graph_name = "cognee_graph" @@ -51,7 +54,11 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): return f"'{str(value)}'" if type(value) is int or type(value) is float: return value - if type(value) is list and type(value[0]) is float and len(value) == self.embedding_engine.get_vector_size(): + if ( + type(value) is list + and type(value[0]) is float + and len(value) == self.embedding_engine.get_vector_size() + ): return f"'vecf32({value})'" # if type(value) is datetime: # return datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f%z") @@ -65,14 +72,21 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): node_label = type(data_point).__tablename__ property_names = DataPoint.get_embeddable_property_names(data_point) - node_properties = await self.stringify_properties({ - **data_point.model_dump(), - **({ - property_names[index]: (vectorized_values[index] \ - if index < len(vectorized_values) else getattr(data_point, property_name, None)) \ + node_properties = await self.stringify_properties( + { + **data_point.model_dump(), + **( + { + property_names[index]: ( + vectorized_values[index] + if index < len(vectorized_values) + else getattr(data_point, property_name, None) + ) for index, property_name in enumerate(property_names) - }), - }) + } + ), + } + ) return dedent(f""" MERGE (node:{node_label} {{id: '{str(data_point.id)}'}}) @@ -124,12 +138,13 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): await self.create_data_point_query( data_point, [ - vectorized_values[vector_map[str(data_point.id)][property_name]] \ - if vector_map[str(data_point.id)][property_name] is not None \ - else None \ + vectorized_values[vector_map[str(data_point.id)][property_name]] + if vector_map[str(data_point.id)][property_name] is not None + else None for property_name in DataPoint.get_embeddable_property_names(data_point) ], - ) for data_point in data_points + ) + for data_point in data_points ] for query in queries: @@ -139,17 +154,27 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): graph = self.driver.select_graph(self.graph_name) if not self.has_vector_index(graph, index_name, index_property_name): - graph.create_node_vector_index(index_name, index_property_name, dim = self.embedding_engine.get_vector_size()) + graph.create_node_vector_index( + index_name, index_property_name, dim=self.embedding_engine.get_vector_size() + ) def has_vector_index(self, graph, index_name: str, index_property_name: str) -> bool: try: indices = graph.list_indices() - return any([(index[0] == index_name and index_property_name in index[1]) for index in indices.result_set]) - except: + return any( + [ + (index[0] == index_name and index_property_name in index[1]) + for index in indices.result_set + ] + ) + except Error as e: + print(e) return False - async def index_data_points(self, index_name: str, index_property_name: str, data_points: list[DataPoint]): + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: list[DataPoint] + ): pass async def add_node(self, node: DataPoint): @@ -178,11 +203,14 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): """).strip() params = { - "edges": [{ - "from_node": str(edge[0]), - "to_node": str(edge[1]), - "relationship_name": edge[2], - } for edge in edges], + "edges": [ + { + "from_node": str(edge[0]), + "to_node": str(edge[1]), + "relationship_name": edge[2], + } + for edge in edges + ], } results = self.query(query, params).result_set @@ -191,7 +219,7 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): async def retrieve(self, data_point_ids: list[UUID]): result = self.query( - f"MATCH (node) WHERE node.id IN $node_ids RETURN node", + "MATCH (node) WHERE node.id IN $node_ids RETURN node", { "node_ids": [str(data_point) for data_point in data_point_ids], }, @@ -219,19 +247,19 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): """ predecessors, successors = await asyncio.gather( - self.query(predecessors_query, dict(node_id = node_id)), - self.query(successors_query, dict(node_id = node_id)), + self.query(predecessors_query, dict(node_id=node_id)), + self.query(successors_query, dict(node_id=node_id)), ) connections = [] for neighbour in predecessors: neighbour = neighbour["relation"] - connections.append((neighbour[0], { "relationship_name": neighbour[1] }, neighbour[2])) + connections.append((neighbour[0], {"relationship_name": neighbour[1]}, neighbour[2])) for neighbour in successors: neighbour = neighbour["relation"] - connections.append((neighbour[0], { "relationship_name": neighbour[1] }, neighbour[2])) + connections.append((neighbour[0], {"relationship_name": neighbour[1]}, neighbour[2])) return connections @@ -274,12 +302,15 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): query_vectors = await self.embedding_engine.embed_text(query_texts) return await asyncio.gather( - *[self.search( - collection_name = collection_name, - query_vector = query_vector, - limit = limit, - with_vector = with_vectors, - ) for query_vector in query_vectors] + *[ + self.search( + collection_name=collection_name, + query_vector=query_vector, + limit=limit, + with_vector=with_vectors, + ) + for query_vector in query_vectors + ] ) async def get_graph_data(self): @@ -287,28 +318,34 @@ class FalkorDBAdapter(VectorDBInterface, GraphDBInterface): result = self.query(query) - nodes = [( - record[2]["id"], - record[2], - ) for record in result.result_set] + nodes = [ + ( + record[2]["id"], + record[2], + ) + for record in result.result_set + ] query = """ MATCH (n)-[r]->(m) RETURN ID(n) AS source, ID(m) AS target, TYPE(r) AS type, properties(r) AS properties """ result = self.query(query) - edges = [( - record[3]["source_node_id"], - record[3]["target_node_id"], - record[2], - record[3], - ) for record in result.result_set] + edges = [ + ( + record[3]["source_node_id"], + record[3]["target_node_id"], + record[2], + record[3], + ) + for record in result.result_set + ] return (nodes, edges) async def delete_data_points(self, collection_name: str, data_point_ids: list[UUID]): return self.query( - f"MATCH (node) WHERE node.id IN $node_ids DETACH DELETE node", + "MATCH (node) WHERE node.id IN $node_ids DETACH DELETE node", { "node_ids": [str(data_point) for data_point in data_point_ids], }, diff --git a/cognee/infrastructure/databases/relational/ModelBase.py b/cognee/infrastructure/databases/relational/ModelBase.py index f75ec448b..fa2b68a5d 100644 --- a/cognee/infrastructure/databases/relational/ModelBase.py +++ b/cognee/infrastructure/databases/relational/ModelBase.py @@ -1,4 +1,5 @@ from sqlalchemy.orm import DeclarativeBase + class Base(DeclarativeBase): pass diff --git a/cognee/infrastructure/databases/relational/config.py b/cognee/infrastructure/databases/relational/config.py index ef8dca608..5ca121593 100644 --- a/cognee/infrastructure/databases/relational/config.py +++ b/cognee/infrastructure/databases/relational/config.py @@ -4,16 +4,17 @@ from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict from cognee.root_dir import get_absolute_path + class RelationalConfig(BaseSettings): - db_path: str = os.path.join(get_absolute_path(".cognee_system"), "databases") - db_name: str = "cognee_db" - db_host: Union[str, None] = None # "localhost" - db_port: Union[str, None] = None # "5432" - db_username: Union[str, None] = None # "cognee" - db_password: Union[str, None] = None # "cognee" + db_path: str = os.path.join(get_absolute_path(".cognee_system"), "databases") + db_name: str = "cognee_db" + db_host: Union[str, None] = None # "localhost" + db_port: Union[str, None] = None # "5432" + db_username: Union[str, None] = None # "cognee" + db_password: Union[str, None] = None # "cognee" db_provider: str = "sqlite" - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { @@ -26,6 +27,7 @@ class RelationalConfig(BaseSettings): "db_provider": self.db_provider, } + @lru_cache def get_relational_config(): return RelationalConfig() diff --git a/cognee/infrastructure/databases/relational/create_db_and_tables.py b/cognee/infrastructure/databases/relational/create_db_and_tables.py index 02ff680df..4947680f5 100644 --- a/cognee/infrastructure/databases/relational/create_db_and_tables.py +++ b/cognee/infrastructure/databases/relational/create_db_and_tables.py @@ -2,6 +2,7 @@ from cognee.infrastructure.files.storage import LocalStorage from .ModelBase import Base from .get_relational_engine import get_relational_engine, get_relational_config + async def create_db_and_tables(): relational_config = get_relational_config() relational_engine = get_relational_engine() diff --git a/cognee/infrastructure/databases/relational/create_relational_engine.py b/cognee/infrastructure/databases/relational/create_relational_engine.py index 08cf171d5..13a1edc23 100644 --- a/cognee/infrastructure/databases/relational/create_relational_engine.py +++ b/cognee/infrastructure/databases/relational/create_relational_engine.py @@ -1,5 +1,6 @@ from .sqlalchemy.SqlAlchemyAdapter import SQLAlchemyAdapter + def create_relational_engine( db_path: str, db_name: str, @@ -13,6 +14,8 @@ def create_relational_engine( connection_string = f"sqlite+aiosqlite:///{db_path}/{db_name}" if db_provider == "postgres": - connection_string = f"postgresql+asyncpg://{db_username}:{db_password}@{db_host}:{db_port}/{db_name}" + connection_string = ( + f"postgresql+asyncpg://{db_username}:{db_password}@{db_host}:{db_port}/{db_name}" + ) return SQLAlchemyAdapter(connection_string) diff --git a/cognee/infrastructure/databases/relational/get_relational_engine.py b/cognee/infrastructure/databases/relational/get_relational_engine.py index d035f5baf..44aa7213b 100644 --- a/cognee/infrastructure/databases/relational/get_relational_engine.py +++ b/cognee/infrastructure/databases/relational/get_relational_engine.py @@ -3,8 +3,9 @@ from .config import get_relational_config from .create_relational_engine import create_relational_engine + # @lru_cache def get_relational_engine(): relational_config = get_relational_config() - return create_relational_engine(**relational_config.to_dict()) \ No newline at end of file + return create_relational_engine(**relational_config.to_dict()) diff --git a/cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py b/cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py index 8041aeaea..6c3c5029d 100644 --- a/cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py +++ b/cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py @@ -1,16 +1,25 @@ +import os from os import path +import logging from uuid import UUID from typing import Optional from typing import AsyncGenerator, List from contextlib import asynccontextmanager -from sqlalchemy import text, select, MetaData, Table +from sqlalchemy import text, select, MetaData, Table, delete from sqlalchemy.orm import joinedload +from sqlalchemy.exc import NoResultFound from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker from cognee.infrastructure.databases.exceptions import EntityNotFoundError +from cognee.modules.data.models.Data import Data + from ..ModelBase import Base -class SQLAlchemyAdapter(): + +logger = logging.getLogger(__name__) + + +class SQLAlchemyAdapter: def __init__(self, connection_string: str): self.db_path: str = None self.db_uri: str = connection_string @@ -50,17 +59,23 @@ class SQLAlchemyAdapter(): fields_query_parts = [f"{item['name']} {item['type']}" for item in table_config] async with self.engine.begin() as connection: await connection.execute(text(f"CREATE SCHEMA IF NOT EXISTS {schema_name};")) - await connection.execute(text(f"CREATE TABLE IF NOT EXISTS {schema_name}.{table_name} ({', '.join(fields_query_parts)});")) + await connection.execute( + text( + f"CREATE TABLE IF NOT EXISTS {schema_name}.{table_name} ({', '.join(fields_query_parts)});" + ) + ) await connection.close() - async def delete_table(self, table_name: str, schema_name: Optional[str] = "public"): + async def delete_table(self, table_name: str, schema_name: Optional[str] = "public"): async with self.engine.begin() as connection: if self.engine.dialect.name == "sqlite": # SQLite doesn’t support schema namespaces and the CASCADE keyword. # However, foreign key constraint can be defined with ON DELETE CASCADE during table creation. await connection.execute(text(f"DROP TABLE IF EXISTS {table_name};")) else: - await connection.execute(text(f"DROP TABLE IF EXISTS {schema_name}.{table_name} CASCADE;")) + await connection.execute( + text(f"DROP TABLE IF EXISTS {schema_name}.{table_name} CASCADE;") + ) async def insert_data(self, schema_name: str, table_name: str, data: list[dict]): columns = ", ".join(data[0].keys()) @@ -86,9 +101,11 @@ class SQLAlchemyAdapter(): return [schema[0] for schema in result.fetchall()] return [] - async def delete_data_by_id(self, table_name: str, data_id: UUID, schema_name: Optional[str] = "public"): + async def delete_entity_by_id( + self, table_name: str, data_id: UUID, schema_name: Optional[str] = "public" + ): """ - Delete data in given table based on id. Table must have an id Column. + Delete entity in given table based on id. Table must have an id Column. """ if self.engine.dialect.name == "sqlite": async with self.get_async_session() as session: @@ -106,6 +123,46 @@ class SQLAlchemyAdapter(): await session.execute(TableModel.delete().where(TableModel.c.id == data_id)) await session.commit() + async def delete_data_entity(self, data_id: UUID): + """ + Delete data and local files related to data if there are no references to it anymore. + """ + async with self.get_async_session() as session: + if self.engine.dialect.name == "sqlite": + # Foreign key constraints are disabled by default in SQLite (for backwards compatibility), + # so must be enabled for each database connection/session separately. + await session.execute(text("PRAGMA foreign_keys = ON;")) + + try: + data_entity = (await session.scalars(select(Data).where(Data.id == data_id))).one() + except (ValueError, NoResultFound) as e: + raise EntityNotFoundError(message=f"Entity not found: {str(e)}") + + # Check if other data objects point to the same raw data location + raw_data_location_entities = ( + await session.execute( + select(Data.raw_data_location).where( + Data.raw_data_location == data_entity.raw_data_location + ) + ) + ).all() + + # Don't delete local file unless this is the only reference to the file in the database + if len(raw_data_location_entities) == 1: + # delete local file only if it's created by cognee + from cognee.base_config import get_base_config + + config = get_base_config() + + if config.data_root_directory in raw_data_location_entities[0].raw_data_location: + if os.path.exists(raw_data_location_entities[0].raw_data_location): + os.remove(raw_data_location_entities[0].raw_data_location) + else: + # Report bug as file should exist + logger.error("Local file which should exist can't be found.") + + await session.execute(delete(Data).where(Data.id == data_id)) + await session.commit() async def get_table(self, table_name: str, schema_name: Optional[str] = "public") -> Table: """ @@ -154,15 +211,18 @@ class SQLAlchemyAdapter(): metadata.clear() return table_names - async def get_data(self, table_name: str, filters: dict = None): async with self.engine.begin() as connection: query = f"SELECT * FROM {table_name}" if filters: - filter_conditions = " AND ".join([ - f"{key} IN ({', '.join([f':{key}{i}' for i in range(len(value))])})" if isinstance(value, list) - else f"{key} = :{key}" for key, value in filters.items() - ]) + filter_conditions = " AND ".join( + [ + f"{key} IN ({', '.join([f':{key}{i}' for i in range(len(value))])})" + if isinstance(value, list) + else f"{key} = :{key}" + for key, value in filters.items() + ] + ) query += f" WHERE {filter_conditions};" query = text(query) results = await connection.execute(query, filters) @@ -208,7 +268,6 @@ class SQLAlchemyAdapter(): except Exception as e: print(f"Error dropping database tables: {e}") - async def create_database(self): if self.engine.dialect.name == "sqlite": from cognee.infrastructure.files.storage import LocalStorage @@ -220,7 +279,6 @@ class SQLAlchemyAdapter(): if len(Base.metadata.tables.keys()) > 0: await connection.run_sync(Base.metadata.create_all) - async def delete_database(self): try: if self.engine.dialect.name == "sqlite": @@ -237,7 +295,9 @@ class SQLAlchemyAdapter(): # Load the schema information into the MetaData object await connection.run_sync(metadata.reflect, schema=schema_name) for table in metadata.sorted_tables: - drop_table_query = text(f"DROP TABLE IF EXISTS {schema_name}.{table.name} CASCADE") + drop_table_query = text( + f"DROP TABLE IF EXISTS {schema_name}.{table.name} CASCADE" + ) await connection.execute(drop_table_query) metadata.clear() except Exception as e: diff --git a/cognee/infrastructure/databases/vector/config.py b/cognee/infrastructure/databases/vector/config.py index 846bc5842..f2c180446 100644 --- a/cognee/infrastructure/databases/vector/config.py +++ b/cognee/infrastructure/databases/vector/config.py @@ -3,16 +3,16 @@ from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict from cognee.root_dir import get_absolute_path + class VectorConfig(BaseSettings): vector_db_url: str = os.path.join( - os.path.join(get_absolute_path(".cognee_system"), "databases"), - "cognee.lancedb" + os.path.join(get_absolute_path(".cognee_system"), "databases"), "cognee.lancedb" ) vector_db_port: int = 1234 vector_db_key: str = "" vector_db_provider: str = "lancedb" - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { @@ -22,6 +22,7 @@ class VectorConfig(BaseSettings): "vector_db_provider": self.vector_db_provider, } + @lru_cache def get_vectordb_config(): return VectorConfig() diff --git a/cognee/infrastructure/databases/vector/create_vector_engine.py b/cognee/infrastructure/databases/vector/create_vector_engine.py index 32db48930..e61c272e1 100644 --- a/cognee/infrastructure/databases/vector/create_vector_engine.py +++ b/cognee/infrastructure/databases/vector/create_vector_engine.py @@ -16,9 +16,7 @@ def create_vector_engine(config: VectorConfig, embedding_engine): raise EnvironmentError("Missing requred Weaviate credentials!") return WeaviateAdapter( - config["vector_db_url"], - config["vector_db_key"], - embedding_engine=embedding_engine + config["vector_db_url"], config["vector_db_key"], embedding_engine=embedding_engine ) elif config["vector_db_provider"] == "qdrant": @@ -30,10 +28,10 @@ def create_vector_engine(config: VectorConfig, embedding_engine): return QDrantAdapter( url=config["vector_db_url"], api_key=config["vector_db_key"], - embedding_engine=embedding_engine + embedding_engine=embedding_engine, ) - elif config['vector_db_provider'] == 'milvus': + elif config["vector_db_provider"] == "milvus": from .milvus.MilvusAdapter import MilvusAdapter if not config["vector_db_url"]: @@ -41,11 +39,10 @@ def create_vector_engine(config: VectorConfig, embedding_engine): return MilvusAdapter( url=config["vector_db_url"], - api_key=config['vector_db_key'], - embedding_engine=embedding_engine + api_key=config["vector_db_key"], + embedding_engine=embedding_engine, ) - elif config["vector_db_provider"] == "pgvector": from cognee.infrastructure.databases.relational import get_relational_config diff --git a/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py b/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py index bcb99fb07..ea07ff4e2 100644 --- a/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py +++ b/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py @@ -1,5 +1,6 @@ from typing import Protocol + class EmbeddingEngine(Protocol): async def embed_text(self, text: list[str]) -> list[list[float]]: raise NotImplementedError() diff --git a/cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py b/cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py index b5d780d60..27061ce45 100644 --- a/cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py +++ b/cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py @@ -3,17 +3,21 @@ import logging import math from typing import List, Optional import litellm +import os from cognee.infrastructure.databases.vector.embeddings.EmbeddingEngine import EmbeddingEngine +from cognee.infrastructure.databases.exceptions.EmbeddingException import EmbeddingException litellm.set_verbose = False logger = logging.getLogger("LiteLLMEmbeddingEngine") + class LiteLLMEmbeddingEngine(EmbeddingEngine): api_key: str endpoint: str api_version: str model: str dimensions: int + mock: bool def __init__( self, @@ -29,33 +33,45 @@ class LiteLLMEmbeddingEngine(EmbeddingEngine): self.model = model self.dimensions = dimensions + enable_mocking = os.getenv("MOCK_EMBEDDING", "false") + if isinstance(enable_mocking, bool): + enable_mocking = str(enable_mocking).lower() + self.mock = enable_mocking in ("true", "1", "yes") + MAX_RETRIES = 5 retry_count = 0 async def embed_text(self, text: List[str]) -> List[List[float]]: async def exponential_backoff(attempt): - wait_time = min(10 * (2 ** attempt), 60) # Max 60 seconds + wait_time = min(10 * (2**attempt), 60) # Max 60 seconds await asyncio.sleep(wait_time) - + try: - response = await litellm.aembedding( - self.model, - input = text, - api_key = self.api_key, - api_base = self.endpoint, - api_version = self.api_version - ) + if self.mock: + response = {"data": [{"embedding": [0.0] * self.dimensions} for _ in text]} - self.retry_count = 0 + self.retry_count = 0 - return [data["embedding"] for data in response.data] + return [data["embedding"] for data in response["data"]] + else: + response = await litellm.aembedding( + self.model, + input=text, + api_key=self.api_key, + api_base=self.endpoint, + api_version=self.api_version, + ) + + self.retry_count = 0 + + return [data["embedding"] for data in response.data] except litellm.exceptions.ContextWindowExceededError as error: if isinstance(text, list): if len(text) == 1: parts = [text] else: - parts = [text[0:math.ceil(len(text)/2)], text[math.ceil(len(text)/2):]] + parts = [text[0 : math.ceil(len(text) / 2)], text[math.ceil(len(text) / 2) :]] parts_futures = [self.embed_text(part) for part in parts] embeddings = await asyncio.gather(*parts_futures) @@ -71,7 +87,7 @@ class LiteLLMEmbeddingEngine(EmbeddingEngine): except litellm.exceptions.RateLimitError: if self.retry_count >= self.MAX_RETRIES: - raise Exception(f"Rate limit exceeded and no more retries left.") + raise Exception("Rate limit exceeded and no more retries left.") await exponential_backoff(self.retry_count) @@ -79,6 +95,9 @@ class LiteLLMEmbeddingEngine(EmbeddingEngine): return await self.embed_text(text) + except (litellm.exceptions.BadRequestError, litellm.llms.OpenAI.openai.OpenAIError): + raise EmbeddingException("Failed to index data points.") + except Exception as error: logger.error("Error embedding text: %s", str(error)) raise error diff --git a/cognee/infrastructure/databases/vector/embeddings/config.py b/cognee/infrastructure/databases/vector/embeddings/config.py index ecfb37204..042c063f8 100644 --- a/cognee/infrastructure/databases/vector/embeddings/config.py +++ b/cognee/infrastructure/databases/vector/embeddings/config.py @@ -2,6 +2,7 @@ from typing import Optional from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict + class EmbeddingConfig(BaseSettings): embedding_model: Optional[str] = "text-embedding-3-large" embedding_dimensions: Optional[int] = 3072 @@ -9,7 +10,8 @@ class EmbeddingConfig(BaseSettings): embedding_api_key: Optional[str] = None embedding_api_version: Optional[str] = None - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + model_config = SettingsConfigDict(env_file=".env", extra="allow") + @lru_cache def get_embedding_config(): diff --git a/cognee/infrastructure/databases/vector/embeddings/get_embedding_engine.py b/cognee/infrastructure/databases/vector/embeddings/get_embedding_engine.py index d2582fbf0..6bfb4dd15 100644 --- a/cognee/infrastructure/databases/vector/embeddings/get_embedding_engine.py +++ b/cognee/infrastructure/databases/vector/embeddings/get_embedding_engine.py @@ -3,15 +3,16 @@ from cognee.infrastructure.llm.config import get_llm_config from .EmbeddingEngine import EmbeddingEngine from .LiteLLMEmbeddingEngine import LiteLLMEmbeddingEngine + def get_embedding_engine() -> EmbeddingEngine: config = get_embedding_config() llm_config = get_llm_config() return LiteLLMEmbeddingEngine( # If OpenAI API is used for embeddings, litellm needs only the api_key. - api_key = config.embedding_api_key or llm_config.llm_api_key, - endpoint = config.embedding_endpoint, - api_version = config.embedding_api_version, - model = config.embedding_model, - dimensions = config.embedding_dimensions, + api_key=config.embedding_api_key or llm_config.llm_api_key, + endpoint=config.embedding_endpoint, + api_version=config.embedding_api_version, + model=config.embedding_model, + dimensions=config.embedding_dimensions, ) diff --git a/cognee/infrastructure/databases/vector/get_vector_engine.py b/cognee/infrastructure/databases/vector/get_vector_engine.py index 079a8903f..4a3e81d1e 100644 --- a/cognee/infrastructure/databases/vector/get_vector_engine.py +++ b/cognee/infrastructure/databases/vector/get_vector_engine.py @@ -3,6 +3,7 @@ from .embeddings import get_embedding_engine from .create_vector_engine import create_vector_engine from functools import lru_cache + @lru_cache def get_vector_engine(): return create_vector_engine(get_vectordb_config().to_dict(), get_embedding_engine()) diff --git a/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py b/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py index 37d340004..2caa8be1e 100644 --- a/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py +++ b/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py @@ -1,26 +1,28 @@ -from typing import List, Optional, get_type_hints, Generic, TypeVar import asyncio +from typing import Generic, List, Optional, TypeVar, get_type_hints from uuid import UUID + import lancedb +from lancedb.pydantic import LanceModel, Vector from pydantic import BaseModel -from lancedb.pydantic import Vector, LanceModel from cognee.exceptions import InvalidValueError from cognee.infrastructure.engine import DataPoint from cognee.infrastructure.files.storage import LocalStorage from cognee.modules.storage.utils import copy_model, get_own_properties -from ..models.ScoredResult import ScoredResult -from ..vector_db_interface import VectorDBInterface -from ..utils import normalize_distances + from ..embeddings.EmbeddingEngine import EmbeddingEngine +from ..models.ScoredResult import ScoredResult +from ..utils import normalize_distances +from ..vector_db_interface import VectorDBInterface + class IndexSchema(DataPoint): id: str text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} + class LanceDBAdapter(VectorDBInterface): name = "LanceDB" @@ -28,7 +30,6 @@ class LanceDBAdapter(VectorDBInterface): api_key: str connection: lancedb.AsyncConnection = None - def __init__( self, url: Optional[str], @@ -41,7 +42,7 @@ class LanceDBAdapter(VectorDBInterface): async def get_connection(self): if self.connection is None: - self.connection = await lancedb.connect_async(self.url, api_key = self.api_key) + self.connection = await lancedb.connect_async(self.url, api_key=self.api_key) return self.connection @@ -67,9 +68,9 @@ class LanceDBAdapter(VectorDBInterface): if not await self.has_collection(collection_name): connection = await self.get_connection() return await connection.create_table( - name = collection_name, - schema = LanceDataPoint, - exist_ok = True, + name=collection_name, + schema=LanceDataPoint, + exist_ok=True, ) async def create_data_points(self, collection_name: str, data_points: list[DataPoint]): @@ -104,21 +105,22 @@ class LanceDBAdapter(VectorDBInterface): properties["id"] = str(properties["id"]) return LanceDataPoint[str, self.get_data_point_schema(type(data_point))]( - id = str(data_point.id), - vector = vector, - payload = properties, + id=str(data_point.id), + vector=vector, + payload=properties, ) lance_data_points = [ create_lance_data_point(data_point, data_vectors[data_point_index]) - for (data_point_index, data_point) in enumerate(data_points) + for (data_point_index, data_point) in enumerate(data_points) ] - await collection.merge_insert("id") \ - .when_matched_update_all() \ - .when_not_matched_insert_all() \ + await ( + collection.merge_insert("id") + .when_matched_update_all() + .when_not_matched_insert_all() .execute(lance_data_points) - + ) async def retrieve(self, collection_name: str, data_point_ids: list[str]): connection = await self.get_connection() @@ -129,17 +131,17 @@ class LanceDBAdapter(VectorDBInterface): else: results = await collection.query().where(f"id IN {tuple(data_point_ids)}").to_pandas() - return [ScoredResult( - id = UUID(result["id"]), - payload = result["payload"], - score = 0, - ) for result in results.to_dict("index").values()] + return [ + ScoredResult( + id=UUID(result["id"]), + payload=result["payload"], + score=0, + ) + for result in results.to_dict("index").values() + ] async def get_distance_from_collection_elements( - self, - collection_name: str, - query_text: str = None, - query_vector: List[float] = None + self, collection_name: str, query_text: str = None, query_vector: List[float] = None ): if query_text is None and query_vector is None: raise InvalidValueError(message="One of query_text or query_vector must be provided!") @@ -156,11 +158,14 @@ class LanceDBAdapter(VectorDBInterface): normalized_values = normalize_distances(result_values) - return [ScoredResult( - id=UUID(result["id"]), - payload=result["payload"], - score=normalized_values[value_index], - ) for value_index, result in enumerate(result_values)] + return [ + ScoredResult( + id=UUID(result["id"]), + payload=result["payload"], + score=normalized_values[value_index], + ) + for value_index, result in enumerate(result_values) + ] async def search( self, @@ -169,7 +174,7 @@ class LanceDBAdapter(VectorDBInterface): query_vector: List[float] = None, limit: int = 5, with_vector: bool = False, - normalized: bool = True + normalized: bool = True, ): if query_text is None and query_vector is None: raise InvalidValueError(message="One of query_text or query_vector must be provided!") @@ -186,11 +191,14 @@ class LanceDBAdapter(VectorDBInterface): normalized_values = normalize_distances(result_values) - return [ScoredResult( - id = UUID(result["id"]), - payload = result["payload"], - score = normalized_values[value_index], - ) for value_index, result in enumerate(result_values)] + return [ + ScoredResult( + id=UUID(result["id"]), + payload=result["payload"], + score=normalized_values[value_index], + ) + for value_index, result in enumerate(result_values) + ] async def batch_search( self, @@ -202,12 +210,15 @@ class LanceDBAdapter(VectorDBInterface): query_vectors = await self.embedding_engine.embed_text(query_texts) return await asyncio.gather( - *[self.search( - collection_name = collection_name, - query_vector = query_vector, - limit = limit, - with_vector = with_vectors, - ) for query_vector in query_vectors] + *[ + self.search( + collection_name=collection_name, + query_vector=query_vector, + limit=limit, + with_vector=with_vectors, + ) + for query_vector in query_vectors + ] ) async def delete_data_points(self, collection_name: str, data_point_ids: list[str]): @@ -220,26 +231,34 @@ class LanceDBAdapter(VectorDBInterface): return results async def create_vector_index(self, index_name: str, index_property_name: str): - await self.create_collection(f"{index_name}_{index_property_name}", payload_schema = IndexSchema) + await self.create_collection( + f"{index_name}_{index_property_name}", payload_schema=IndexSchema + ) - async def index_data_points(self, index_name: str, index_property_name: str, data_points: list[DataPoint]): - await self.create_data_points(f"{index_name}_{index_property_name}", [ - IndexSchema( - id = str(data_point.id), - text = getattr(data_point, data_point._metadata["index_fields"][0]), - ) for data_point in data_points - ]) + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: list[DataPoint] + ): + await self.create_data_points( + f"{index_name}_{index_property_name}", + [ + IndexSchema( + id=str(data_point.id), + text=getattr(data_point, data_point._metadata["index_fields"][0]), + ) + for data_point in data_points + ], + ) async def prune(self): # Clean up the database if it was set up as temporary if self.url.startswith("/"): - LocalStorage.remove_all(self.url) # Remove the temporary directory and files inside + LocalStorage.remove_all(self.url) # Remove the temporary directory and files inside def get_data_point_schema(self, model_type): return copy_model( model_type, - include_fields = { + include_fields={ "id": (str, ...), }, - exclude_fields = ["_metadata"], - ) \ No newline at end of file + exclude_fields=["_metadata"], + ) diff --git a/cognee/infrastructure/databases/vector/milvus/MilvusAdapter.py b/cognee/infrastructure/databases/vector/milvus/MilvusAdapter.py index 4e5290dd1..aecd4650d 100644 --- a/cognee/infrastructure/databases/vector/milvus/MilvusAdapter.py +++ b/cognee/infrastructure/databases/vector/milvus/MilvusAdapter.py @@ -4,10 +4,12 @@ import asyncio import logging from typing import List, Optional from uuid import UUID + from cognee.infrastructure.engine import DataPoint -from ..vector_db_interface import VectorDBInterface -from ..models.ScoredResult import ScoredResult + from ..embeddings.EmbeddingEngine import EmbeddingEngine +from ..models.ScoredResult import ScoredResult +from ..vector_db_interface import VectorDBInterface logger = logging.getLogger("MilvusAdapter") @@ -15,9 +17,7 @@ logger = logging.getLogger("MilvusAdapter") class IndexSchema(DataPoint): text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} class MilvusAdapter(VectorDBInterface): @@ -32,8 +32,9 @@ class MilvusAdapter(VectorDBInterface): self.embedding_engine = embedding_engine - def get_milvus_client(self) -> "MilvusClient": + def get_milvus_client(self): from pymilvus import MilvusClient + if self.api_key: client = MilvusClient(uri=self.url, token=self.api_key) else: @@ -51,11 +52,12 @@ class MilvusAdapter(VectorDBInterface): return await future async def create_collection( - self, - collection_name: str, - payload_schema=None, + self, + collection_name: str, + payload_schema=None, ): from pymilvus import DataType, MilvusException + client = self.get_milvus_client() if client.has_collection(collection_name=collection_name): logger.info(f"Collection '{collection_name}' already exists.") @@ -71,34 +73,18 @@ class MilvusAdapter(VectorDBInterface): ) schema.add_field( - field_name="id", - datatype=DataType.VARCHAR, - is_primary=True, - max_length=36 + field_name="id", datatype=DataType.VARCHAR, is_primary=True, max_length=36 ) - schema.add_field( - field_name="vector", - datatype=DataType.FLOAT_VECTOR, - dim=dimension - ) + schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=dimension) - schema.add_field( - field_name="text", - datatype=DataType.VARCHAR, - max_length=60535 - ) + schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=60535) index_params = client.prepare_index_params() - index_params.add_index( - field_name="vector", - metric_type="COSINE" - ) + index_params.add_index(field_name="vector", metric_type="COSINE") client.create_collection( - collection_name=collection_name, - schema=schema, - index_params=index_params + collection_name=collection_name, schema=schema, index_params=index_params ) client.load_collection(collection_name) @@ -109,12 +95,9 @@ class MilvusAdapter(VectorDBInterface): logger.error(f"Error creating collection '{collection_name}': {str(e)}") raise e - async def create_data_points( - self, - collection_name: str, - data_points: List[DataPoint] - ): + async def create_data_points(self, collection_name: str, data_points: List[DataPoint]): from pymilvus import MilvusException + client = self.get_milvus_client() data_vectors = await self.embed_data( [data_point.get_embeddable_data(data_point) for data_point in data_points] @@ -130,22 +113,23 @@ class MilvusAdapter(VectorDBInterface): ] try: - result = client.insert( - collection_name=collection_name, - data=insert_data - ) + result = client.insert(collection_name=collection_name, data=insert_data) logger.info( f"Inserted {result.get('insert_count', 0)} data points into collection '{collection_name}'." ) return result except MilvusException as e: - logger.error(f"Error inserting data points into collection '{collection_name}': {str(e)}") + logger.error( + f"Error inserting data points into collection '{collection_name}': {str(e)}" + ) raise e async def create_vector_index(self, index_name: str, index_property_name: str): await self.create_collection(f"{index_name}_{index_property_name}") - async def index_data_points(self, index_name: str, index_property_name: str, data_points: List[DataPoint]): + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: List[DataPoint] + ): formatted_data_points = [ IndexSchema( id=data_point.id, @@ -158,6 +142,7 @@ class MilvusAdapter(VectorDBInterface): async def retrieve(self, collection_name: str, data_point_ids: list[str]): from pymilvus import MilvusException + client = self.get_milvus_client() try: filter_expression = f"""id in [{", ".join(f'"{id}"' for id in data_point_ids)}]""" @@ -169,18 +154,21 @@ class MilvusAdapter(VectorDBInterface): ) return results except MilvusException as e: - logger.error(f"Error retrieving data points from collection '{collection_name}': {str(e)}") + logger.error( + f"Error retrieving data points from collection '{collection_name}': {str(e)}" + ) raise e async def search( - self, - collection_name: str, - query_text: Optional[str] = None, - query_vector: Optional[List[float]] = None, - limit: int = 5, - with_vector: bool = False, + self, + collection_name: str, + query_text: Optional[str] = None, + query_vector: Optional[List[float]] = None, + limit: int = 5, + with_vector: bool = False, ): from pymilvus import MilvusException + client = self.get_milvus_client() if query_text is None and query_vector is None: raise ValueError("One of query_text or query_vector must be provided!") @@ -215,32 +203,40 @@ class MilvusAdapter(VectorDBInterface): logger.error(f"Error during search in collection '{collection_name}': {str(e)}") raise e - async def batch_search(self, collection_name: str, query_texts: List[str], limit: int, with_vectors: bool = False): + async def batch_search( + self, collection_name: str, query_texts: List[str], limit: int, with_vectors: bool = False + ): query_vectors = await self.embed_data(query_texts) return await asyncio.gather( - *[self.search(collection_name=collection_name, - query_vector=query_vector, - limit=limit, - with_vector=with_vectors, - ) for query_vector in query_vectors] + *[ + self.search( + collection_name=collection_name, + query_vector=query_vector, + limit=limit, + with_vector=with_vectors, + ) + for query_vector in query_vectors + ] ) async def delete_data_points(self, collection_name: str, data_point_ids: list[str]): from pymilvus import MilvusException + client = self.get_milvus_client() try: filter_expression = f"""id in [{", ".join(f'"{id}"' for id in data_point_ids)}]""" - delete_result = client.delete( - collection_name=collection_name, - filter=filter_expression - ) + delete_result = client.delete(collection_name=collection_name, filter=filter_expression) - logger.info(f"Deleted data points with IDs {data_point_ids} from collection '{collection_name}'.") + logger.info( + f"Deleted data points with IDs {data_point_ids} from collection '{collection_name}'." + ) return delete_result except MilvusException as e: - logger.error(f"Error deleting data points from collection '{collection_name}': {str(e)}") + logger.error( + f"Error deleting data points from collection '{collection_name}': {str(e)}" + ) raise e async def prune(self): diff --git a/cognee/infrastructure/databases/vector/models/CollectionConfig.py b/cognee/infrastructure/databases/vector/models/CollectionConfig.py index b46bdabfc..b279a6be2 100644 --- a/cognee/infrastructure/databases/vector/models/CollectionConfig.py +++ b/cognee/infrastructure/databases/vector/models/CollectionConfig.py @@ -1,5 +1,6 @@ from pydantic import BaseModel from .VectorConfig import VectorConfig + class CollectionConfig(BaseModel): vector_config: VectorConfig diff --git a/cognee/infrastructure/databases/vector/models/ScoredResult.py b/cognee/infrastructure/databases/vector/models/ScoredResult.py index f9d8bec77..8b6f00952 100644 --- a/cognee/infrastructure/databases/vector/models/ScoredResult.py +++ b/cognee/infrastructure/databases/vector/models/ScoredResult.py @@ -2,7 +2,8 @@ from typing import Any, Dict from uuid import UUID from pydantic import BaseModel + class ScoredResult(BaseModel): id: UUID - score: float # Lower score is better + score: float # Lower score is better payload: Dict[str, Any] diff --git a/cognee/infrastructure/databases/vector/models/VectorConfig.py b/cognee/infrastructure/databases/vector/models/VectorConfig.py index 2a968a997..fb89d90b5 100644 --- a/cognee/infrastructure/databases/vector/models/VectorConfig.py +++ b/cognee/infrastructure/databases/vector/models/VectorConfig.py @@ -1,6 +1,7 @@ from typing import Literal from pydantic import BaseModel + class VectorConfig(BaseModel): - distance: Literal['Cosine', 'Dot'] + distance: Literal["Cosine", "Dot"] size: int diff --git a/cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py b/cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py index cd275506a..df22e8f18 100644 --- a/cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py +++ b/cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py @@ -1,44 +1,31 @@ import asyncio -from uuid import UUID from typing import List, Optional, get_type_hints +from uuid import UUID + from sqlalchemy.orm import Mapped, mapped_column -from sqlalchemy import JSON, Column, Table, select, delete +from sqlalchemy import JSON, Column, Table, select, delete, MetaData from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker from cognee.exceptions import InvalidValueError from cognee.infrastructure.databases.exceptions import EntityNotFoundError from cognee.infrastructure.engine import DataPoint -from .serialize_data import serialize_data -from ..models.ScoredResult import ScoredResult -from ..vector_db_interface import VectorDBInterface -from ..utils import normalize_distances -from ..embeddings.EmbeddingEngine import EmbeddingEngine -from ...relational.sqlalchemy.SqlAlchemyAdapter import SQLAlchemyAdapter from ...relational.ModelBase import Base +from ...relational.sqlalchemy.SqlAlchemyAdapter import SQLAlchemyAdapter +from ..embeddings.EmbeddingEngine import EmbeddingEngine +from ..models.ScoredResult import ScoredResult +from ..utils import normalize_distances +from ..vector_db_interface import VectorDBInterface +from .serialize_data import serialize_data + class IndexSchema(DataPoint): text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} -def singleton(class_): - # Note: Using this singleton as a decorator to a class removes - # the option to use class methods for that class - instances = {} - def getinstance(*args, **kwargs): - if class_ not in instances: - instances[class_] = class_(*args, **kwargs) - return instances[class_] - - return getinstance - -@singleton class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): - def __init__( self, connection_string: str, @@ -51,15 +38,23 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): self.engine = create_async_engine(self.db_uri) self.sessionmaker = async_sessionmaker(bind=self.engine, expire_on_commit=False) + # Has to be imported at class level + # Functions reading tables from database need to know what a Vector column type is + from pgvector.sqlalchemy import Vector + + self.Vector = Vector + async def embed_data(self, data: list[str]) -> list[list[float]]: return await self.embedding_engine.embed_text(data) async def has_collection(self, collection_name: str) -> bool: async with self.engine.begin() as connection: - # Load the schema information into the MetaData object - await connection.run_sync(Base.metadata.reflect) + # Create a MetaData instance to load table information + metadata = MetaData() + # Load table information from schema into MetaData + await connection.run_sync(metadata.reflect) - if collection_name in Base.metadata.tables: + if collection_name in metadata.tables: return True else: return False @@ -70,17 +65,14 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): if not await self.has_collection(collection_name): - from pgvector.sqlalchemy import Vector class PGVectorDataPoint(Base): __tablename__ = collection_name __table_args__ = {"extend_existing": True} # PGVector requires one column to be the primary key - primary_key: Mapped[int] = mapped_column( - primary_key=True, autoincrement=True - ) + primary_key: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) id: Mapped[data_point_types["id"]] payload = Column(JSON) - vector = Column(Vector(vector_size)) + vector = Column(self.Vector(vector_size)) def __init__(self, id, payload, vector): self.id = id @@ -93,13 +85,12 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): Base.metadata.create_all, tables=[PGVectorDataPoint.__table__] ) - async def create_data_points( - self, collection_name: str, data_points: List[DataPoint] - ): + async def create_data_points(self, collection_name: str, data_points: List[DataPoint]): + data_point_types = get_type_hints(DataPoint) if not await self.has_collection(collection_name): await self.create_collection( - collection_name = collection_name, - payload_schema = type(data_points[0]), + collection_name=collection_name, + payload_schema=type(data_points[0]), ) data_vectors = await self.embed_data( @@ -108,17 +99,14 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): vector_size = self.embedding_engine.get_vector_size() - from pgvector.sqlalchemy import Vector class PGVectorDataPoint(Base): __tablename__ = collection_name __table_args__ = {"extend_existing": True} # PGVector requires one column to be the primary key - primary_key: Mapped[int] = mapped_column( - primary_key=True, autoincrement=True - ) - id: Mapped[type(data_points[0].id)] + primary_key: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + id: Mapped[data_point_types["id"]] payload = Column(JSON) - vector = Column(Vector(vector_size)) + vector = Column(self.Vector(vector_size)) def __init__(self, id, payload, vector): self.id = id @@ -127,9 +115,9 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): pgvector_data_points = [ PGVectorDataPoint( - id = data_point.id, - vector = data_vectors[data_index], - payload = serialize_data(data_point.model_dump()), + id=data_point.id, + vector=data_vectors[data_index], + payload=serialize_data(data_point.model_dump()), ) for (data_index, data_point) in enumerate(data_points) ] @@ -141,13 +129,19 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): async def create_vector_index(self, index_name: str, index_property_name: str): await self.create_collection(f"{index_name}_{index_property_name}") - async def index_data_points(self, index_name: str, index_property_name: str, data_points: list[DataPoint]): - await self.create_data_points(f"{index_name}_{index_property_name}", [ - IndexSchema( - id = data_point.id, - text = DataPoint.get_embeddable_data(data_point), - ) for data_point in data_points - ]) + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: list[DataPoint] + ): + await self.create_data_points( + f"{index_name}_{index_property_name}", + [ + IndexSchema( + id=data_point.id, + text=DataPoint.get_embeddable_data(data_point), + ) + for data_point in data_points + ], + ) async def get_table(self, collection_name: str) -> Table: """ @@ -155,10 +149,12 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): with an async engine. """ async with self.engine.begin() as connection: - # Load the schema information into the MetaData object - await connection.run_sync(Base.metadata.reflect) - if collection_name in Base.metadata.tables: - return Base.metadata.tables[collection_name] + # Create a MetaData instance to load table information + metadata = MetaData() + # Load table information from schema into MetaData + await connection.run_sync(metadata.reflect) + if collection_name in metadata.tables: + return metadata.tables[collection_name] else: raise EntityNotFoundError(message=f"Table '{collection_name}' not found.") @@ -173,20 +169,17 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): results = results.all() return [ - ScoredResult( - id = UUID(result.id), - payload = result.payload, - score = 0 - ) for result in results + ScoredResult(id=UUID(result.id), payload=result.payload, score=0) + for result in results ] async def get_distance_from_collection_elements( - self, - collection_name: str, - query_text: str = None, - query_vector: List[float] = None, - with_vector: bool = False - )-> List[ScoredResult]: + self, + collection_name: str, + query_text: str = None, + query_vector: List[float] = None, + with_vector: bool = False, + ) -> List[ScoredResult]: if query_text is None and query_vector is None: raise ValueError("One of query_text or query_vector must be provided!") @@ -202,11 +195,8 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): closest_items = await session.execute( select( PGVectorDataPoint, - PGVectorDataPoint.c.vector.cosine_distance(query_vector).label( - "similarity" - ), - ) - .order_by("similarity") + PGVectorDataPoint.c.vector.cosine_distance(query_vector).label("similarity"), + ).order_by("similarity") ) vector_list = [] @@ -218,11 +208,8 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): # Create and return ScoredResult objects return [ - ScoredResult( - id = UUID(str(row.id)), - payload = row.payload, - score = row.similarity - ) for row in vector_list + ScoredResult(id=UUID(str(row.id)), payload=row.payload, score=row.similarity) + for row in vector_list ] async def search( @@ -250,9 +237,7 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): closest_items = await session.execute( select( PGVectorDataPoint, - PGVectorDataPoint.c.vector.cosine_distance(query_vector).label( - "similarity" - ), + PGVectorDataPoint.c.vector.cosine_distance(query_vector).label("similarity"), ) .order_by("similarity") .limit(limit) @@ -267,11 +252,8 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface): # Create and return ScoredResult objects return [ - ScoredResult( - id = UUID(str(row.id)), - payload = row.payload, - score = row.similarity - ) for row in vector_list + ScoredResult(id=UUID(str(row.id)), payload=row.payload, score=row.similarity) + for row in vector_list ] async def batch_search( diff --git a/cognee/infrastructure/databases/vector/pgvector/__init__.py b/cognee/infrastructure/databases/vector/pgvector/__init__.py index 130246a31..2f8f08620 100644 --- a/cognee/infrastructure/databases/vector/pgvector/__init__.py +++ b/cognee/infrastructure/databases/vector/pgvector/__init__.py @@ -1,2 +1,2 @@ from .PGVectorAdapter import PGVectorAdapter -from .create_db_and_tables import create_db_and_tables \ No newline at end of file +from .create_db_and_tables import create_db_and_tables diff --git a/cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py b/cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py index 2f4c9cf3f..881c1e72f 100644 --- a/cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py +++ b/cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py @@ -9,4 +9,3 @@ async def create_db_and_tables(): if vector_config.vector_db_provider == "pgvector": async with vector_engine.engine.begin() as connection: await connection.execute(text("CREATE EXTENSION IF NOT EXISTS vector;")) - diff --git a/cognee/infrastructure/databases/vector/pgvector/serialize_data.py b/cognee/infrastructure/databases/vector/pgvector/serialize_data.py index cdba1e928..a61a2682f 100644 --- a/cognee/infrastructure/databases/vector/pgvector/serialize_data.py +++ b/cognee/infrastructure/databases/vector/pgvector/serialize_data.py @@ -1,6 +1,7 @@ from datetime import datetime from uuid import UUID + def serialize_data(data): """Recursively convert datetime objects in dictionaries/lists to ISO format.""" if isinstance(data, dict): @@ -12,4 +13,4 @@ def serialize_data(data): elif isinstance(data, UUID): return str(data) else: - return data \ No newline at end of file + return data diff --git a/cognee/infrastructure/databases/vector/pinecone/adapter.py b/cognee/infrastructure/databases/vector/pinecone/adapter.py index 2a8e628f9..00dd7daf1 100644 --- a/cognee/infrastructure/databases/vector/pinecone/adapter.py +++ b/cognee/infrastructure/databases/vector/pinecone/adapter.py @@ -1,8 +1,8 @@ -class PineconeVectorDB(VectorDB): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.init_pinecone(self.index_name) - - def init_pinecone(self, index_name): - # Pinecone initialization logic - pass +# class PineconeVectorDB(VectorDB): +# def __init__(self, *args, **kwargs): +# super().__init__(*args, **kwargs) +# self.init_pinecone(self.index_name) +# +# def init_pinecone(self, index_name): +# # Pinecone initialization logic +# pass diff --git a/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py b/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py index d5d2a1a5c..64e64e269 100644 --- a/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py +++ b/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py @@ -1,22 +1,24 @@ import logging +from typing import Dict, List, Optional from uuid import UUID -from typing import List, Dict, Optional + from qdrant_client import AsyncQdrantClient, models from cognee.exceptions import InvalidValueError from cognee.infrastructure.databases.vector.models.ScoredResult import ScoredResult from cognee.infrastructure.engine import DataPoint -from ..vector_db_interface import VectorDBInterface + from ..embeddings.EmbeddingEngine import EmbeddingEngine +from ..vector_db_interface import VectorDBInterface logger = logging.getLogger("QDrantAdapter") + class IndexSchema(DataPoint): text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} + # class CollectionConfig(BaseModel, extra = "forbid"): # vector_config: Dict[str, models.VectorParams] = Field(..., description="Vectors configuration" ) @@ -24,28 +26,32 @@ class IndexSchema(DataPoint): # optimizers_config: Optional[models.OptimizersConfig] = Field(default = None, description="Optimizers configuration") # quantization_config: Optional[models.QuantizationConfig] = Field(default = None, description="Quantization configuration") + def create_hnsw_config(hnsw_config: Dict): if hnsw_config is not None: return models.HnswConfig() return None + def create_optimizers_config(optimizers_config: Dict): if optimizers_config is not None: return models.OptimizersConfig() return None + def create_quantization_config(quantization_config: Dict): if quantization_config is not None: return models.QuantizationConfig() return None + class QDrantAdapter(VectorDBInterface): name = "Qdrant" url: str = None api_key: str = None qdrant_path: str = None - def __init__(self, url, api_key, embedding_engine: EmbeddingEngine, qdrant_path = None): + def __init__(self, url, api_key, embedding_engine: EmbeddingEngine, qdrant_path=None): self.embedding_engine = embedding_engine if qdrant_path is not None: @@ -56,19 +62,11 @@ class QDrantAdapter(VectorDBInterface): def get_qdrant_client(self) -> AsyncQdrantClient: if self.qdrant_path is not None: - return AsyncQdrantClient( - path = self.qdrant_path, port=6333 - ) + return AsyncQdrantClient(path=self.qdrant_path, port=6333) elif self.url is not None: - return AsyncQdrantClient( - url = self.url, - api_key = self.api_key, - port = 6333 - ) + return AsyncQdrantClient(url=self.url, api_key=self.api_key, port=6333) - return AsyncQdrantClient( - location = ":memory:" - ) + return AsyncQdrantClient(location=":memory:") async def embed_data(self, data: List[str]) -> List[float]: return await self.embedding_engine.embed_text(data) @@ -80,21 +78,20 @@ class QDrantAdapter(VectorDBInterface): return result async def create_collection( - self, - collection_name: str, - payload_schema = None, + self, + collection_name: str, + payload_schema=None, ): client = self.get_qdrant_client() if not await client.collection_exists(collection_name): await client.create_collection( - collection_name = collection_name, - vectors_config = { + collection_name=collection_name, + vectors_config={ "text": models.VectorParams( - size = self.embedding_engine.get_vector_size(), - distance = "Cosine" + size=self.embedding_engine.get_vector_size(), distance="Cosine" ) - } + }, ) await client.close() @@ -102,26 +99,21 @@ class QDrantAdapter(VectorDBInterface): async def create_data_points(self, collection_name: str, data_points: List[DataPoint]): client = self.get_qdrant_client() - data_vectors = await self.embed_data([ - DataPoint.get_embeddable_data(data_point) for data_point in data_points - ]) + data_vectors = await self.embed_data( + [DataPoint.get_embeddable_data(data_point) for data_point in data_points] + ) def convert_to_qdrant_point(data_point: DataPoint): return models.PointStruct( - id = str(data_point.id), - payload = data_point.model_dump(), - vector = { - "text": data_vectors[data_points.index(data_point)] - } + id=str(data_point.id), + payload=data_point.model_dump(), + vector={"text": data_vectors[data_points.index(data_point)]}, ) points = [convert_to_qdrant_point(point) for point in data_points] try: - client.upload_points( - collection_name = collection_name, - points = points - ) + client.upload_points(collection_name=collection_name, points=points) except Exception as error: logger.error("Error uploading data points to Qdrant: %s", str(error)) raise error @@ -131,53 +123,61 @@ class QDrantAdapter(VectorDBInterface): async def create_vector_index(self, index_name: str, index_property_name: str): await self.create_collection(f"{index_name}_{index_property_name}") - async def index_data_points(self, index_name: str, index_property_name: str, data_points: list[DataPoint]): - await self.create_data_points(f"{index_name}_{index_property_name}", [ - IndexSchema( - id = data_point.id, - text = getattr(data_point, data_point._metadata["index_fields"][0]), - ) for data_point in data_points - ]) + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: list[DataPoint] + ): + await self.create_data_points( + f"{index_name}_{index_property_name}", + [ + IndexSchema( + id=data_point.id, + text=getattr(data_point, data_point._metadata["index_fields"][0]), + ) + for data_point in data_points + ], + ) async def retrieve(self, collection_name: str, data_point_ids: list[str]): client = self.get_qdrant_client() - results = await client.retrieve(collection_name, data_point_ids, with_payload = True) + results = await client.retrieve(collection_name, data_point_ids, with_payload=True) await client.close() return results async def get_distance_from_collection_elements( - self, - collection_name: str, - query_text: str = None, - query_vector: List[float] = None, - with_vector: bool = False + self, + collection_name: str, + query_text: str = None, + query_vector: List[float] = None, + with_vector: bool = False, ) -> List[ScoredResult]: - if query_text is None and query_vector is None: raise ValueError("One of query_text or query_vector must be provided!") client = self.get_qdrant_client() results = await client.search( - collection_name = collection_name, - query_vector = models.NamedVector( - name = "text", - vector = query_vector if query_vector is not None else (await self.embed_data([query_text]))[0], + collection_name=collection_name, + query_vector=models.NamedVector( + name="text", + vector=query_vector + if query_vector is not None + else (await self.embed_data([query_text]))[0], ), - with_vectors = with_vector + with_vectors=with_vector, ) await client.close() return [ ScoredResult( - id = UUID(result.id), - payload = { + id=UUID(result.id), + payload={ **result.payload, "id": UUID(result.id), }, - score = 1 - result.score, - ) for result in results + score=1 - result.score, + ) + for result in results ] async def search( @@ -186,7 +186,7 @@ class QDrantAdapter(VectorDBInterface): query_text: Optional[str] = None, query_vector: Optional[List[float]] = None, limit: int = 5, - with_vector: bool = False + with_vector: bool = False, ): if query_text is None and query_vector is None: raise InvalidValueError(message="One of query_text or query_vector must be provided!") @@ -194,30 +194,38 @@ class QDrantAdapter(VectorDBInterface): client = self.get_qdrant_client() results = await client.search( - collection_name = collection_name, - query_vector = models.NamedVector( - name = "text", - vector = query_vector if query_vector is not None else (await self.embed_data([query_text]))[0], + collection_name=collection_name, + query_vector=models.NamedVector( + name="text", + vector=query_vector + if query_vector is not None + else (await self.embed_data([query_text]))[0], ), - limit = limit, - with_vectors = with_vector + limit=limit, + with_vectors=with_vector, ) await client.close() return [ ScoredResult( - id = UUID(result.id), - payload = { + id=UUID(result.id), + payload={ **result.payload, "id": UUID(result.id), }, - score = 1 - result.score, - ) for result in results + score=1 - result.score, + ) + for result in results ] - - async def batch_search(self, collection_name: str, query_texts: List[str], limit: int = None, with_vectors: bool = False): + async def batch_search( + self, + collection_name: str, + query_texts: List[str], + limit: int = None, + with_vectors: bool = False, + ): """ Perform batch search in a Qdrant collection with dynamic search requests. @@ -236,22 +244,17 @@ class QDrantAdapter(VectorDBInterface): # Generate dynamic search requests based on the provided embeddings requests = [ models.SearchRequest( - vector = models.NamedVector( - name = "text", - vector = vector - ), - limit = limit, - with_vector = with_vectors - ) for vector in vectors + vector=models.NamedVector(name="text", vector=vector), + limit=limit, + with_vector=with_vectors, + ) + for vector in vectors ] client = self.get_qdrant_client() # Perform batch search with the dynamically generated requests - results = await client.search_batch( - collection_name = collection_name, - requests = requests - ) + results = await client.search_batch(collection_name=collection_name, requests=requests) await client.close() diff --git a/cognee/infrastructure/databases/vector/utils.py b/cognee/infrastructure/databases/vector/utils.py index d5a5897a3..9507207c0 100644 --- a/cognee/infrastructure/databases/vector/utils.py +++ b/cognee/infrastructure/databases/vector/utils.py @@ -1,5 +1,6 @@ from typing import List + def normalize_distances(result_values: List[dict]) -> List[float]: min_value = min(result["_distance"] for result in result_values) max_value = max(result["_distance"] for result in result_values) @@ -8,7 +9,8 @@ def normalize_distances(result_values: List[dict]) -> List[float]: # Avoid division by zero: Assign all normalized values to 0 (or any constant value like 1) normalized_values = [0 for _ in result_values] else: - normalized_values = [(result["_distance"] - min_value) / (max_value - min_value) for result in - result_values] + normalized_values = [ + (result["_distance"] - min_value) / (max_value - min_value) for result in result_values + ] return normalized_values diff --git a/cognee/infrastructure/databases/vector/vector_db_interface.py b/cognee/infrastructure/databases/vector/vector_db_interface.py index 457b92f07..939997fec 100644 --- a/cognee/infrastructure/databases/vector/vector_db_interface.py +++ b/cognee/infrastructure/databases/vector/vector_db_interface.py @@ -3,8 +3,10 @@ from abc import abstractmethod from cognee.infrastructure.engine import DataPoint from .models.PayloadSchema import PayloadSchema + class VectorDBInterface(Protocol): - """ Collections """ + """Collections""" + @abstractmethod async def has_collection(self, collection_name: str) -> bool: raise NotImplementedError @@ -14,24 +16,21 @@ class VectorDBInterface(Protocol): self, collection_name: str, payload_schema: Optional[PayloadSchema] = None, - ): raise NotImplementedError + ): + raise NotImplementedError """ Data points """ - @abstractmethod - async def create_data_points( - self, - collection_name: str, - data_points: List[DataPoint] - ): raise NotImplementedError @abstractmethod - async def retrieve( - self, - collection_name: str, - data_point_ids: list[str] - ): raise NotImplementedError + async def create_data_points(self, collection_name: str, data_points: List[DataPoint]): + raise NotImplementedError + + @abstractmethod + async def retrieve(self, collection_name: str, data_point_ids: list[str]): + raise NotImplementedError """ Search """ + @abstractmethod async def search( self, @@ -39,25 +38,20 @@ class VectorDBInterface(Protocol): query_text: Optional[str], query_vector: Optional[List[float]], limit: int, - with_vector: bool = False - - ): raise NotImplementedError + with_vector: bool = False, + ): + raise NotImplementedError @abstractmethod async def batch_search( - self, - collection_name: str, - query_texts: List[str], - limit: int, - with_vectors: bool = False - ): raise NotImplementedError + self, collection_name: str, query_texts: List[str], limit: int, with_vectors: bool = False + ): + raise NotImplementedError @abstractmethod - async def delete_data_points( - self, - collection_name: str, - data_point_ids: list[str] - ): raise NotImplementedError + async def delete_data_points(self, collection_name: str, data_point_ids: list[str]): + raise NotImplementedError @abstractmethod - async def prune(self): raise NotImplementedError + async def prune(self): + raise NotImplementedError diff --git a/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py b/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py index c16f765b0..259370643 100644 --- a/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py +++ b/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py @@ -5,18 +5,19 @@ from uuid import UUID from cognee.exceptions import InvalidValueError from cognee.infrastructure.engine import DataPoint -from ..vector_db_interface import VectorDBInterface -from ..models.ScoredResult import ScoredResult + from ..embeddings.EmbeddingEngine import EmbeddingEngine +from ..models.ScoredResult import ScoredResult +from ..vector_db_interface import VectorDBInterface logger = logging.getLogger("WeaviateAdapter") + class IndexSchema(DataPoint): text: str - _metadata: dict = { - "index_fields": ["text"] - } + _metadata: dict = {"index_fields": ["text"], "type": "IndexSchema"} + class WeaviateAdapter(VectorDBInterface): name = "Weaviate" @@ -34,9 +35,9 @@ class WeaviateAdapter(VectorDBInterface): self.embedding_engine = embedding_engine self.client = weaviate.connect_to_wcs( - cluster_url = url, - auth_credentials = weaviate.auth.AuthApiKey(api_key), - additional_config = wvc.init.AdditionalConfig(timeout = wvc.init.Timeout(init=30)) + cluster_url=url, + auth_credentials=weaviate.auth.AuthApiKey(api_key), + additional_config=wvc.init.AdditionalConfig(timeout=wvc.init.Timeout(init=30)), ) async def embed_data(self, data: List[str]) -> List[float]: @@ -52,7 +53,7 @@ class WeaviateAdapter(VectorDBInterface): async def create_collection( self, collection_name: str, - payload_schema = None, + payload_schema=None, ): import weaviate.classes.config as wvcc @@ -61,14 +62,12 @@ class WeaviateAdapter(VectorDBInterface): if not self.client.collections.exists(collection_name): future.set_result( self.client.collections.create( - name = collection_name, - properties = [ + name=collection_name, + properties=[ wvcc.Property( - name = "text", - data_type = wvcc.DataType.TEXT, - skip_vectorization = True + name="text", data_type=wvcc.DataType.TEXT, skip_vectorization=True ) - ] + ], ) ) else: @@ -94,11 +93,7 @@ class WeaviateAdapter(VectorDBInterface): properties["uuid"] = str(data_point.id) del properties["id"] - return DataObject( - uuid = data_point.id, - properties = properties, - vector = vector - ) + return DataObject(uuid=data_point.id, properties=properties, vector=vector) data_points = [convert_to_weaviate_data_points(data_point) for data_point in data_points] @@ -109,26 +104,26 @@ class WeaviateAdapter(VectorDBInterface): with collection.batch.dynamic() as batch: for data_point in data_points: batch.add_object( - uuid = data_point.uuid, - vector = data_point.vector, - properties = data_point.properties, - references = data_point.references, + uuid=data_point.uuid, + vector=data_point.vector, + properties=data_point.properties, + references=data_point.references, ) else: data_point: DataObject = data_points[0] if collection.data.exists(data_point.uuid): return collection.data.update( - uuid = data_point.uuid, - vector = data_point.vector, - properties = data_point.properties, - references = data_point.references, + uuid=data_point.uuid, + vector=data_point.vector, + properties=data_point.properties, + references=data_point.references, ) else: return collection.data.insert( - uuid = data_point.uuid, - vector = data_point.vector, - properties = data_point.properties, - references = data_point.references, + uuid=data_point.uuid, + vector=data_point.vector, + properties=data_point.properties, + references=data_point.references, ) except Exception as error: logger.error("Error creating data points: %s", str(error)) @@ -137,20 +132,27 @@ class WeaviateAdapter(VectorDBInterface): async def create_vector_index(self, index_name: str, index_property_name: str): await self.create_collection(f"{index_name}_{index_property_name}") - async def index_data_points(self, index_name: str, index_property_name: str, data_points: list[DataPoint]): - await self.create_data_points(f"{index_name}_{index_property_name}", [ - IndexSchema( - id = data_point.id, - text = DataPoint.get_embeddable_data(data_point), - ) for data_point in data_points - ]) + async def index_data_points( + self, index_name: str, index_property_name: str, data_points: list[DataPoint] + ): + await self.create_data_points( + f"{index_name}_{index_property_name}", + [ + IndexSchema( + id=data_point.id, + text=DataPoint.get_embeddable_data(data_point), + ) + for data_point in data_points + ], + ) async def retrieve(self, collection_name: str, data_point_ids: list[str]): from weaviate.classes.query import Filter + future = asyncio.Future() data_points = self.get_collection(collection_name).query.fetch_objects( - filters = Filter.by_id().contains_any(data_point_ids) + filters=Filter.by_id().contains_any(data_point_ids) ) for data_point in data_points.objects: @@ -163,11 +165,11 @@ class WeaviateAdapter(VectorDBInterface): return await future async def get_distance_from_collection_elements( - self, - collection_name: str, - query_text: str = None, - query_vector: List[float] = None, - with_vector: bool = False + self, + collection_name: str, + query_text: str = None, + query_vector: List[float] = None, + with_vector: bool = False, ) -> List[ScoredResult]: import weaviate.classes as wvc @@ -188,17 +190,18 @@ class WeaviateAdapter(VectorDBInterface): ScoredResult( id=UUID(str(result.uuid)), payload=result.properties, - score=1 - float(result.metadata.score) - ) for result in search_result.objects + score=1 - float(result.metadata.score), + ) + for result in search_result.objects ] async def search( - self, - collection_name: str, - query_text: Optional[str] = None, - query_vector: Optional[List[float]] = None, - limit: int = None, - with_vector: bool = False + self, + collection_name: str, + query_text: Optional[str] = None, + query_vector: Optional[List[float]] = None, + limit: int = None, + with_vector: bool = False, ): import weaviate.classes as wvc @@ -209,33 +212,41 @@ class WeaviateAdapter(VectorDBInterface): query_vector = (await self.embed_data([query_text]))[0] search_result = self.get_collection(collection_name).query.hybrid( - query = None, - vector = query_vector, - limit = limit, - include_vector = with_vector, - return_metadata = wvc.query.MetadataQuery(score=True), + query=None, + vector=query_vector, + limit=limit, + include_vector=with_vector, + return_metadata=wvc.query.MetadataQuery(score=True), ) return [ ScoredResult( - id = UUID(str(result.uuid)), - payload = result.properties, - score = 1 - float(result.metadata.score) - ) for result in search_result.objects + id=UUID(str(result.uuid)), + payload=result.properties, + score=1 - float(result.metadata.score), + ) + for result in search_result.objects ] - async def batch_search(self, collection_name: str, query_texts: List[str], limit: int, with_vectors: bool = False): + async def batch_search( + self, collection_name: str, query_texts: List[str], limit: int, with_vectors: bool = False + ): def query_search(query_vector): - return self.search(collection_name, query_vector=query_vector, limit=limit, with_vector=with_vectors) + return self.search( + collection_name, query_vector=query_vector, limit=limit, with_vector=with_vectors + ) + + return [ + await query_search(query_vector) for query_vector in await self.embed_data(query_texts) + ] - return [await query_search(query_vector) for query_vector in await self.embed_data(query_texts)] - async def delete_data_points(self, collection_name: str, data_point_ids: list[str]): from weaviate.classes.query import Filter + future = asyncio.Future() result = self.get_collection(collection_name).data.delete_many( - filters = Filter.by_id().contains_any(data_point_ids) + filters=Filter.by_id().contains_any(data_point_ids) ) future.set_result(result) diff --git a/cognee/infrastructure/engine/models/DataPoint.py b/cognee/infrastructure/engine/models/DataPoint.py index abb924f2f..db0d9308a 100644 --- a/cognee/infrastructure/engine/models/DataPoint.py +++ b/cognee/infrastructure/engine/models/DataPoint.py @@ -1,28 +1,32 @@ -from typing_extensions import TypedDict -from uuid import UUID, uuid4 -from typing import Optional from datetime import datetime, timezone +from typing import Optional +from uuid import UUID, uuid4 + from pydantic import BaseModel, Field +from typing_extensions import TypedDict + class MetaData(TypedDict): index_fields: list[str] + class DataPoint(BaseModel): __tablename__ = "data_point" - id: UUID = Field(default_factory = uuid4) + id: UUID = Field(default_factory=uuid4) updated_at: Optional[datetime] = datetime.now(timezone.utc) topological_rank: Optional[int] = 0 - _metadata: Optional[MetaData] = { - "index_fields": [] - } + _metadata: Optional[MetaData] = {"index_fields": [], "type": "DataPoint"} # class Config: # underscore_attrs_are_private = True @classmethod def get_embeddable_data(self, data_point): - if data_point._metadata and len(data_point._metadata["index_fields"]) > 0 \ - and hasattr(data_point, data_point._metadata["index_fields"][0]): + if ( + data_point._metadata + and len(data_point._metadata["index_fields"]) > 0 + and hasattr(data_point, data_point._metadata["index_fields"][0]) + ): attribute = getattr(data_point, data_point._metadata["index_fields"][0]) if isinstance(attribute, str): @@ -33,7 +37,9 @@ class DataPoint(BaseModel): @classmethod def get_embeddable_properties(self, data_point): if data_point._metadata and len(data_point._metadata["index_fields"]) > 0: - return [getattr(data_point, field, None) for field in data_point._metadata["index_fields"]] + return [ + getattr(data_point, field, None) for field in data_point._metadata["index_fields"] + ] return [] diff --git a/cognee/infrastructure/files/add_file_to_storage.py b/cognee/infrastructure/files/add_file_to_storage.py index e2a324a83..78713f447 100644 --- a/cognee/infrastructure/files/add_file_to_storage.py +++ b/cognee/infrastructure/files/add_file_to_storage.py @@ -3,6 +3,7 @@ from cognee.root_dir import get_absolute_path from .storage.StorageManager import StorageManager from .storage.LocalStorage import LocalStorage + async def add_file_to_storage(file_path: str, file: BinaryIO): storage_manager = StorageManager(LocalStorage(get_absolute_path("data/files"))) diff --git a/cognee/infrastructure/files/remove_file_from_storage.py b/cognee/infrastructure/files/remove_file_from_storage.py index b0b9a5a61..b657ead43 100644 --- a/cognee/infrastructure/files/remove_file_from_storage.py +++ b/cognee/infrastructure/files/remove_file_from_storage.py @@ -2,6 +2,7 @@ from cognee.root_dir import get_absolute_path from .storage.StorageManager import StorageManager from .storage.LocalStorage import LocalStorage + async def remove_file_from_storage(file_path: str): storage_manager = StorageManager(LocalStorage(get_absolute_path("data/files"))) diff --git a/cognee/infrastructure/files/storage/LocalStorage.py b/cognee/infrastructure/files/storage/LocalStorage.py index 4db17c91b..7ef9131d9 100644 --- a/cognee/infrastructure/files/storage/LocalStorage.py +++ b/cognee/infrastructure/files/storage/LocalStorage.py @@ -3,6 +3,7 @@ import shutil from typing import BinaryIO, Union from .StorageManager import Storage + class LocalStorage(Storage): storage_path: str = None @@ -16,8 +17,8 @@ class LocalStorage(Storage): with open( full_file_path, - mode = "w" if isinstance(data, str) else "wb", - encoding = "utf-8" if isinstance(data, str) else None + mode="w" if isinstance(data, str) else "wb", + encoding="utf-8" if isinstance(data, str) else None, ) as f: if hasattr(data, "read"): data.seek(0) @@ -28,7 +29,7 @@ class LocalStorage(Storage): def retrieve(self, file_path: str, mode: str = "rb"): full_file_path = self.storage_path + "/" + file_path - with open(full_file_path, mode = mode) as f: + with open(full_file_path, mode=mode) as f: f.seek(0) return f.read() @@ -39,7 +40,7 @@ class LocalStorage(Storage): @staticmethod def ensure_directory_exists(file_path: str): if not os.path.exists(file_path): - os.makedirs(file_path, exist_ok = True) + os.makedirs(file_path, exist_ok=True) @staticmethod def remove(file_path: str): diff --git a/cognee/infrastructure/files/storage/StorageManager.py b/cognee/infrastructure/files/storage/StorageManager.py index 1db2d5d31..389800e00 100644 --- a/cognee/infrastructure/files/storage/StorageManager.py +++ b/cognee/infrastructure/files/storage/StorageManager.py @@ -1,5 +1,6 @@ from typing import Protocol, BinaryIO + class Storage(Protocol): def store(self, file_path: str, data: bytes): pass @@ -11,10 +12,11 @@ class Storage(Protocol): def remove(file_path: str): pass -class StorageManager(): + +class StorageManager: storage: Storage = None - def __init__ (self, storage: Storage): + def __init__(self, storage: Storage): self.storage = storage def store(self, file_path: str, data: BinaryIO): diff --git a/cognee/infrastructure/files/utils/extract_text_from_file.py b/cognee/infrastructure/files/utils/extract_text_from_file.py index 171128b2e..7a5e16829 100644 --- a/cognee/infrastructure/files/utils/extract_text_from_file.py +++ b/cognee/infrastructure/files/utils/extract_text_from_file.py @@ -2,10 +2,11 @@ from typing import BinaryIO from pypdf import PdfReader import filetype + def extract_text_from_file(file: BinaryIO, file_type: filetype.Type) -> str: """Extract text from a file""" if file_type.extension == "pdf": - reader = PdfReader(stream = file) + reader = PdfReader(stream=file) pages = list(reader.pages[:3]) return "\n".join([page.extract_text().strip() for page in pages]) diff --git a/cognee/infrastructure/files/utils/get_file_metadata.py b/cognee/infrastructure/files/utils/get_file_metadata.py index 89c3d6d8e..4bce29f60 100644 --- a/cognee/infrastructure/files/utils/get_file_metadata.py +++ b/cognee/infrastructure/files/utils/get_file_metadata.py @@ -11,6 +11,7 @@ class FileMetadata(TypedDict): extension: str content_hash: str + def get_file_metadata(file: BinaryIO) -> FileMetadata: """Get metadata from a file""" file.seek(0) @@ -23,9 +24,9 @@ def get_file_metadata(file: BinaryIO) -> FileMetadata: file_name = file_path.split("/")[-1].split(".")[0] if file_path else None return FileMetadata( - name = file_name, - file_path = file_path, - mime_type = file_type.mime, - extension = file_type.extension, - content_hash = content_hash, + name=file_name, + file_path=file_path, + mime_type=file_type.mime, + extension=file_type.extension, + content_hash=content_hash, ) diff --git a/cognee/infrastructure/files/utils/guess_file_type.py b/cognee/infrastructure/files/utils/guess_file_type.py index 001585945..3e26827d8 100644 --- a/cognee/infrastructure/files/utils/guess_file_type.py +++ b/cognee/infrastructure/files/utils/guess_file_type.py @@ -2,37 +2,45 @@ from typing import BinaryIO import filetype from .is_text_content import is_text_content + class FileTypeException(Exception): message: str def __init__(self, message: str): self.message = message + class TxtFileType(filetype.Type): """Text file type""" + MIME = "text/plain" EXTENSION = "txt" def __init__(self): - super(TxtFileType, self).__init__(mime = TxtFileType.MIME, extension = TxtFileType.EXTENSION) + super(TxtFileType, self).__init__(mime=TxtFileType.MIME, extension=TxtFileType.EXTENSION) def match(self, buf): return is_text_content(buf) + txt_file_type = TxtFileType() filetype.add_type(txt_file_type) + class CustomPdfMatcher(filetype.Type): MIME = "application/pdf" EXTENSION = "pdf" def __init__(self): - super(CustomPdfMatcher, self).__init__(mime = CustomPdfMatcher.MIME, extension = CustomPdfMatcher.EXTENSION) + super(CustomPdfMatcher, self).__init__( + mime=CustomPdfMatcher.MIME, extension=CustomPdfMatcher.EXTENSION + ) def match(self, buf): return b"PDF-" in buf + custom_pdf_matcher = CustomPdfMatcher() filetype.add_type(custom_pdf_matcher) diff --git a/cognee/infrastructure/files/utils/is_text_content.py b/cognee/infrastructure/files/utils/is_text_content.py index dc323cd2a..83a961e89 100644 --- a/cognee/infrastructure/files/utils/is_text_content.py +++ b/cognee/infrastructure/files/utils/is_text_content.py @@ -1,24 +1,27 @@ def is_text_content(content): """Check if the content is text.""" # Check for null bytes - if b'\0' in content: + if b"\0" in content: return False # Check for common text encodings (BOMs) - if content.startswith((b'\xEF\xBB\xBF', # UTF-8 - b'\xFF\xFE', # UTF-16 LE - b'\xFE\xFF', # UTF-16 BE - b'\x00\x00\xFE\xFF', # UTF-32 LE - b'\xFF\xFE\x00\x00', # UTF-32 BE - )): + if content.startswith( + ( + b"\xef\xbb\xbf", # UTF-8 + b"\xff\xfe", # UTF-16 LE + b"\xfe\xff", # UTF-16 BE + b"\x00\x00\xfe\xff", # UTF-32 LE + b"\xff\xfe\x00\x00", # UTF-32 BE + ) + ): return True # Check for ASCII characters - if all(0x20 <= byte <= 0x7E or byte in (b'\n', b'\r', b'\t') for byte in content): + if all(0x20 <= byte <= 0x7E or byte in (b"\n", b"\r", b"\t") for byte in content): return True # Check for common line break characters - if b'\n' in content or b'\r' in content: + if b"\n" in content or b"\r" in content: return True # If no obvious indicators found, assume it's a text file diff --git a/cognee/infrastructure/llm/anthropic/adapter.py b/cognee/infrastructure/llm/anthropic/adapter.py index 119b05eff..1fba732a0 100644 --- a/cognee/infrastructure/llm/anthropic/adapter.py +++ b/cognee/infrastructure/llm/anthropic/adapter.py @@ -10,34 +10,33 @@ from cognee.infrastructure.llm.prompts import read_query_prompt class AnthropicAdapter(LLMInterface): """Adapter for Anthropic API""" + name = "Anthropic" model: str def __init__(self, model: str = None): self.aclient = instructor.patch( - create = anthropic.Anthropic().messages.create, - mode = instructor.Mode.ANTHROPIC_TOOLS + create=anthropic.Anthropic().messages.create, mode=instructor.Mode.ANTHROPIC_TOOLS ) self.model = model async def acreate_structured_output( - self, - text_input: str, - system_prompt: str, - response_model: Type[BaseModel] + self, text_input: str, system_prompt: str, response_model: Type[BaseModel] ) -> BaseModel: """Generate a response from a user query.""" return await self.aclient( - model = self.model, - max_tokens = 4096, - max_retries = 5, - messages = [{ - "role": "user", - "content": f"""Use the given format to extract information + model=self.model, + max_tokens=4096, + max_retries=5, + messages=[ + { + "role": "user", + "content": f"""Use the given format to extract information from the following input: {text_input}. {system_prompt}""", - }], - response_model = response_model, + } + ], + response_model=response_model, ) def show_prompt(self, text_input: str, system_prompt: str) -> str: @@ -50,6 +49,10 @@ class AnthropicAdapter(LLMInterface): system_prompt = read_query_prompt(system_prompt) - formatted_prompt = f"""System Prompt:\n{system_prompt}\n\nUser Input:\n{text_input}\n""" if system_prompt else None + formatted_prompt = ( + f"""System Prompt:\n{system_prompt}\n\nUser Input:\n{text_input}\n""" + if system_prompt + else None + ) return formatted_prompt diff --git a/cognee/infrastructure/llm/config.py b/cognee/infrastructure/llm/config.py index d148042be..67fc82683 100644 --- a/cognee/infrastructure/llm/config.py +++ b/cognee/infrastructure/llm/config.py @@ -2,6 +2,7 @@ from typing import Optional from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict + class LLMConfig(BaseSettings): llm_provider: str = "openai" llm_model: str = "gpt-4o-mini" @@ -12,7 +13,7 @@ class LLMConfig(BaseSettings): llm_streaming: bool = False transcription_model: str = "whisper-1" - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { @@ -23,9 +24,10 @@ class LLMConfig(BaseSettings): "api_version": self.llm_api_version, "temperature": self.llm_temperature, "streaming": self.llm_streaming, - "transcription_model": self.transcription_model + "transcription_model": self.transcription_model, } + @lru_cache def get_llm_config(): return LLMConfig() diff --git a/cognee/infrastructure/llm/generic_llm_api/adapter.py b/cognee/infrastructure/llm/generic_llm_api/adapter.py index 294af9256..a910c0780 100644 --- a/cognee/infrastructure/llm/generic_llm_api/adapter.py +++ b/cognee/infrastructure/llm/generic_llm_api/adapter.py @@ -1,82 +1,54 @@ -'''Adapter for Generic API LLM provider API''' +"""Adapter for Generic API LLM provider API""" + import asyncio from typing import List, Type from pydantic import BaseModel import instructor -import openai - -from cognee.exceptions import InvalidValueError from cognee.infrastructure.llm.llm_interface import LLMInterface -from cognee.infrastructure.llm.prompts import read_query_prompt -from cognee.shared.data_models import MonitoringTool -from cognee.base_config import get_base_config from cognee.infrastructure.llm.config import get_llm_config +import litellm class GenericAPIAdapter(LLMInterface): - """Adapter for Generic API LLM provider API """ + """Adapter for Generic API LLM provider API""" + name: str model: str api_key: str - def __init__(self, api_endpoint, api_key: str, model: str, name: str): + def __init__(self, endpoint, api_key: str, model: str, name: str): self.name = name self.model = model self.api_key = api_key + self.endpoint = endpoint llm_config = get_llm_config() - if llm_config.llm_provider == "groq": - from groq import groq - self.aclient = instructor.from_openai( - client = groq.Groq( - api_key = api_key, - ), - mode = instructor.Mode.MD_JSON - ) + if llm_config.llm_provider == "ollama": + self.aclient = instructor.from_litellm(litellm.acompletion) + else: - base_config = get_base_config() + self.aclient = instructor.from_litellm(litellm.acompletion) - if base_config.monitoring_tool == MonitoringTool.LANGFUSE: - from langfuse.openai import AsyncOpenAI - elif base_config.monitoring_tool == MonitoringTool.LANGSMITH: - from langsmith import wrappers - from openai import AsyncOpenAI - AsyncOpenAI = wrappers.wrap_openai(AsyncOpenAI()) - else: - from openai import AsyncOpenAI - - self.aclient = instructor.patch( - AsyncOpenAI( - base_url = api_endpoint, - api_key = api_key, # required, but unused - ), - mode = instructor.Mode.JSON, - ) - - async def acreate_structured_output(self, text_input: str, system_prompt: str, response_model: Type[BaseModel]) -> BaseModel: + async def acreate_structured_output( + self, text_input: str, system_prompt: str, response_model: Type[BaseModel] + ) -> BaseModel: """Generate a response from a user query.""" return await self.aclient.chat.completions.create( - model = self.model, - messages = [ + model=self.model, + messages=[ { "role": "user", "content": f"""Use the given format to - extract information from the following input: {text_input}. """, + extract information from the following input: {text_input}. """, + }, + { + "role": "system", + "content": system_prompt, }, - {"role": "system", "content": system_prompt}, ], - response_model = response_model, + max_retries=5, + api_base=self.endpoint, + response_model=response_model, ) - - def show_prompt(self, text_input: str, system_prompt: str) -> str: - """Format and display the prompt for a user query.""" - if not text_input: - text_input = "No user input provided." - if not system_prompt: - raise InvalidValueError(message="No system prompt path provided.") - system_prompt = read_query_prompt(system_prompt) - - formatted_prompt = f"""System Prompt:\n{system_prompt}\n\nUser Input:\n{text_input}\n""" if system_prompt else None - return formatted_prompt diff --git a/cognee/infrastructure/llm/get_llm_client.py b/cognee/infrastructure/llm/get_llm_client.py index 9a23892f2..0f64014e3 100644 --- a/cognee/infrastructure/llm/get_llm_client.py +++ b/cognee/infrastructure/llm/get_llm_client.py @@ -1,9 +1,11 @@ """Get the LLM client.""" + from enum import Enum from cognee.exceptions import InvalidValueError from cognee.infrastructure.llm import get_llm_config + # Define an Enum for LLM Providers class LLMProvider(Enum): OPENAI = "openai" @@ -11,6 +13,7 @@ class LLMProvider(Enum): ANTHROPIC = "anthropic" CUSTOM = "custom" + def get_llm_client(): """Get the LLM client based on the configuration using Enums.""" llm_config = get_llm_config() @@ -24,12 +27,12 @@ def get_llm_client(): from .openai.adapter import OpenAIAdapter return OpenAIAdapter( - api_key = llm_config.llm_api_key, - endpoint = llm_config.llm_endpoint, - api_version = llm_config.llm_api_version, - model = llm_config.llm_model, - transcription_model = llm_config.transcription_model, - streaming = llm_config.llm_streaming, + api_key=llm_config.llm_api_key, + endpoint=llm_config.llm_endpoint, + api_version=llm_config.llm_api_version, + model=llm_config.llm_model, + transcription_model=llm_config.transcription_model, + streaming=llm_config.llm_streaming, ) elif provider == LLMProvider.OLLAMA: @@ -37,10 +40,14 @@ def get_llm_client(): raise InvalidValueError(message="LLM API key is not set.") from .generic_llm_api.adapter import GenericAPIAdapter - return GenericAPIAdapter(llm_config.llm_endpoint, llm_config.llm_api_key, llm_config.llm_model, "Ollama") + + return GenericAPIAdapter( + llm_config.llm_endpoint, llm_config.llm_api_key, llm_config.llm_model, "Ollama" + ) elif provider == LLMProvider.ANTHROPIC: from .anthropic.adapter import AnthropicAdapter + return AnthropicAdapter(llm_config.llm_model) elif provider == LLMProvider.CUSTOM: @@ -48,7 +55,10 @@ def get_llm_client(): raise InvalidValueError(message="LLM API key is not set.") from .generic_llm_api.adapter import GenericAPIAdapter - return GenericAPIAdapter(llm_config.llm_endpoint, llm_config.llm_api_key, llm_config.llm_model, "Custom") + + return GenericAPIAdapter( + llm_config.llm_endpoint, llm_config.llm_api_key, llm_config.llm_model, "Custom" + ) else: raise InvalidValueError(message=f"Unsupported LLM provider: {provider}") diff --git a/cognee/infrastructure/llm/llm_interface.py b/cognee/infrastructure/llm/llm_interface.py index 4a5bd79b6..dfcbecd29 100644 --- a/cognee/infrastructure/llm/llm_interface.py +++ b/cognee/infrastructure/llm/llm_interface.py @@ -1,18 +1,18 @@ -""" LLM Interface """ +"""LLM Interface""" from typing import Type, Protocol from abc import abstractmethod from pydantic import BaseModel from cognee.infrastructure.llm.prompts import read_query_prompt + class LLMInterface(Protocol): - """ LLM Interface """ + """LLM Interface""" @abstractmethod - async def acreate_structured_output(self, - text_input: str, - system_prompt: str, - response_model: Type[BaseModel]) -> BaseModel: + async def acreate_structured_output( + self, text_input: str, system_prompt: str, response_model: Type[BaseModel] + ) -> BaseModel: """To get structured output, import/call this function""" raise NotImplementedError diff --git a/cognee/infrastructure/llm/openai/adapter.py b/cognee/infrastructure/llm/openai/adapter.py index b2929c6c0..d45662380 100644 --- a/cognee/infrastructure/llm/openai/adapter.py +++ b/cognee/infrastructure/llm/openai/adapter.py @@ -6,18 +6,25 @@ from typing import Type import litellm import instructor from pydantic import BaseModel - +from cognee.shared.data_models import MonitoringTool from cognee.exceptions import InvalidValueError from cognee.infrastructure.llm.llm_interface import LLMInterface from cognee.infrastructure.llm.prompts import read_query_prompt +from cognee.base_config import get_base_config + +monitoring = get_base_config().monitoring_tool +if monitoring == MonitoringTool.LANGFUSE: + from langfuse.decorators import observe + class OpenAIAdapter(LLMInterface): name = "OpenAI" model: str api_key: str api_version: str - + """Adapter for OpenAI's GPT-3, GPT=4 API""" + def __init__( self, api_key: str, @@ -36,44 +43,56 @@ class OpenAIAdapter(LLMInterface): self.api_version = api_version self.streaming = streaming - async def acreate_structured_output(self, text_input: str, system_prompt: str, response_model: Type[BaseModel]) -> BaseModel: + @observe(as_type="generation") + async def acreate_structured_output( + self, text_input: str, system_prompt: str, response_model: Type[BaseModel] + ) -> BaseModel: """Generate a response from a user query.""" return await self.aclient.chat.completions.create( - model = self.model, - messages = [{ - "role": "user", - "content": f"""Use the given format to + model=self.model, + messages=[ + { + "role": "user", + "content": f"""Use the given format to extract information from the following input: {text_input}. """, - }, { - "role": "system", - "content": system_prompt, - }], - api_key = self.api_key, - api_base = self.endpoint, - api_version = self.api_version, - response_model = response_model, - max_retries = 5, + }, + { + "role": "system", + "content": system_prompt, + }, + ], + api_key=self.api_key, + api_base=self.endpoint, + api_version=self.api_version, + response_model=response_model, + max_retries=5, ) - def create_structured_output(self, text_input: str, system_prompt: str, response_model: Type[BaseModel]) -> BaseModel: + @observe + def create_structured_output( + self, text_input: str, system_prompt: str, response_model: Type[BaseModel] + ) -> BaseModel: """Generate a response from a user query.""" return self.client.chat.completions.create( - model = self.model, - messages = [{ - "role": "user", - "content": f"""Use the given format to + model=self.model, + messages=[ + { + "role": "user", + "content": f"""Use the given format to extract information from the following input: {text_input}. """, - }, { - "role": "system", - "content": system_prompt, - }], - api_key = self.api_key, - api_base = self.endpoint, - api_version = self.api_version, - response_model = response_model, - max_retries = 5, + }, + { + "role": "system", + "content": system_prompt, + }, + ], + api_key=self.api_key, + api_base=self.endpoint, + api_version=self.api_version, + response_model=response_model, + max_retries=5, ) def create_transcript(self, input): @@ -86,41 +105,44 @@ class OpenAIAdapter(LLMInterface): # audio_data = audio_file.read() transcription = litellm.transcription( - model = self.transcription_model, - file = Path(input), + model=self.transcription_model, + file=Path(input), api_key=self.api_key, api_base=self.endpoint, api_version=self.api_version, - max_retries = 5, + max_retries=5, ) return transcription def transcribe_image(self, input) -> BaseModel: with open(input, "rb") as image_file: - encoded_image = base64.b64encode(image_file.read()).decode('utf-8') + encoded_image = base64.b64encode(image_file.read()).decode("utf-8") return litellm.completion( - model = self.model, - messages = [{ - "role": "user", - "content": [ - { - "type": "text", - "text": "What’s in this image?", - }, { - "type": "image_url", - "image_url": { - "url": f"data:image/jpeg;base64,{encoded_image}", + model=self.model, + messages=[ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "What’s in this image?", }, - }, - ], - }], + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{encoded_image}", + }, + }, + ], + } + ], api_key=self.api_key, api_base=self.endpoint, api_version=self.api_version, - max_tokens = 300, - max_retries = 5, + max_tokens=300, + max_retries=5, ) def show_prompt(self, text_input: str, system_prompt: str) -> str: @@ -131,5 +153,9 @@ class OpenAIAdapter(LLMInterface): raise InvalidValueError(message="No system prompt path provided.") system_prompt = read_query_prompt(system_prompt) - formatted_prompt = f"""System Prompt:\n{system_prompt}\n\nUser Input:\n{text_input}\n""" if system_prompt else None + formatted_prompt = ( + f"""System Prompt:\n{system_prompt}\n\nUser Input:\n{text_input}\n""" + if system_prompt + else None + ) return formatted_prompt diff --git a/cognee/infrastructure/llm/prompts/answer_simple_question.txt b/cognee/infrastructure/llm/prompts/answer_simple_question.txt new file mode 100644 index 000000000..351e1e5e9 --- /dev/null +++ b/cognee/infrastructure/llm/prompts/answer_simple_question.txt @@ -0,0 +1 @@ +Answer the question using the provided context. Be as brief as possible. \ No newline at end of file diff --git a/cognee/infrastructure/llm/prompts/answer_simple_question_restricted.txt b/cognee/infrastructure/llm/prompts/answer_simple_question_restricted.txt new file mode 100644 index 000000000..fe37a2668 --- /dev/null +++ b/cognee/infrastructure/llm/prompts/answer_simple_question_restricted.txt @@ -0,0 +1 @@ +Answer the question using the provided context. If the provided context is not connected to the question, just answer "The provided knowledge base does not contain the answer to the question". Be as brief as possible. \ No newline at end of file diff --git a/cognee/infrastructure/llm/prompts/graph_context_for_question.txt b/cognee/infrastructure/llm/prompts/graph_context_for_question.txt new file mode 100644 index 000000000..dae7138ac --- /dev/null +++ b/cognee/infrastructure/llm/prompts/graph_context_for_question.txt @@ -0,0 +1,2 @@ +The question is: `{{ question }}` +and here is the context provided with a set of relationships from a knowledge graph separated by \n---\n each represented as node1 -- relation -- node2 triplet: `{{ context }}` \ No newline at end of file diff --git a/cognee/infrastructure/llm/prompts/patch_gen_kg_instructions.txt b/cognee/infrastructure/llm/prompts/patch_gen_kg_instructions.txt index ebbb03f75..3117ac9f1 100644 --- a/cognee/infrastructure/llm/prompts/patch_gen_kg_instructions.txt +++ b/cognee/infrastructure/llm/prompts/patch_gen_kg_instructions.txt @@ -1,3 +1,6 @@ -I need you to solve this issue by looking at the provided edges retrieved from a knowledge graph and -generate a single patch file that I can apply directly to this repository using git apply. -Please respond with a single patch file in the following format. \ No newline at end of file +You are a senior software engineer. I need you to solve this issue by looking at the provided context and +generate a single patch file that I can apply directly to this repository using git apply. +Additionally, please make sure that you provide code only with correct syntax and +you apply the patch on the relevant files (together with their path that you can try to find out from the github issue). Don't change the names of existing +functions or classes, as they may be referenced from other code. +Please respond only with a single patch file in the following format without adding any additional context or string. diff --git a/cognee/infrastructure/llm/prompts/read_query_prompt.py b/cognee/infrastructure/llm/prompts/read_query_prompt.py index d9ea55acd..c1f58d77f 100644 --- a/cognee/infrastructure/llm/prompts/read_query_prompt.py +++ b/cognee/infrastructure/llm/prompts/read_query_prompt.py @@ -2,12 +2,13 @@ from os import path import logging from cognee.root_dir import get_absolute_path + def read_query_prompt(prompt_file_name: str): """Read a query prompt from a file.""" try: file_path = path.join(get_absolute_path("./infrastructure/llm/prompts"), prompt_file_name) - with open(file_path, "r", encoding = "utf-8") as file: + with open(file_path, "r", encoding="utf-8") as file: return file.read() except FileNotFoundError: logging.error(f"Error: Prompt file not found. Attempted to read: %s {file_path}") diff --git a/cognee/infrastructure/llm/prompts/render_prompt.py b/cognee/infrastructure/llm/prompts/render_prompt.py index 03f1f7cb2..756fa671b 100644 --- a/cognee/infrastructure/llm/prompts/render_prompt.py +++ b/cognee/infrastructure/llm/prompts/render_prompt.py @@ -1,7 +1,8 @@ from jinja2 import Environment, FileSystemLoader, select_autoescape from cognee.root_dir import get_absolute_path -def render_prompt(filename: str, context: dict) -> str: + +def render_prompt(filename: str, context: dict) -> str: """Render a Jinja2 template asynchronously. :param filename: The name of the template file to render. :param context: The context to render the template with. @@ -12,8 +13,8 @@ def render_prompt(filename: str, context: dict) -> str: # Initialize the Jinja2 environment to load templates from the filesystem env = Environment( - loader = FileSystemLoader(base_directory), - autoescape = select_autoescape(["html", "xml", "txt"]) + loader=FileSystemLoader(base_directory), + autoescape=select_autoescape(["html", "xml", "txt"]), ) # Load the template by name diff --git a/cognee/infrastructure/llm/prompts/summarize_code.txt b/cognee/infrastructure/llm/prompts/summarize_code.txt new file mode 100644 index 000000000..405585617 --- /dev/null +++ b/cognee/infrastructure/llm/prompts/summarize_code.txt @@ -0,0 +1,10 @@ +You are an expert Python programmer and technical writer. Your task is to summarize the given Python code snippet or file. +The code may contain multiple imports, classes, functions, constants and logic. Provide a clear, structured explanation of its components +and their relationships. + +Instructions: +Provide an overview: Start with a high-level summary of what the code does as a whole. +Break it down: Summarize each class and function individually, explaining their purpose and how they interact. +Describe the workflow: Outline how the classes and functions work together. Mention any control flow (e.g., main functions, entry points, loops). +Key features: Highlight important elements like arguments, return values, or unique logic. +Maintain clarity: Write in plain English for someone familiar with Python but unfamiliar with this code. \ No newline at end of file diff --git a/cognee/infrastructure/pipeline/models/Operation.py b/cognee/infrastructure/pipeline/models/Operation.py index 62eb74c44..b0e5624cb 100644 --- a/cognee/infrastructure/pipeline/models/Operation.py +++ b/cognee/infrastructure/pipeline/models/Operation.py @@ -3,10 +3,12 @@ from sqlalchemy.orm import Mapped, MappedColumn from sqlalchemy import Column, DateTime, ForeignKey, Enum, JSON from cognee.infrastructure.databases.relational import Base, UUID + class OperationType(Enum): MERGE_DATA = "MERGE_DATA" APPEND_DATA = "APPEND_DATA" + class OperationStatus(Enum): STARTED = "OPERATION_STARTED" IN_PROGRESS = "OPERATION_IN_PROGRESS" @@ -14,14 +16,15 @@ class OperationStatus(Enum): ERROR = "OPERATION_ERROR" CANCELLED = "OPERATION_CANCELLED" + class Operation(Base): __tablename__ = "operation" - id = Column(UUID, primary_key = True) + id = Column(UUID, primary_key=True) status = Column(Enum(OperationStatus)) operation_type = Column(Enum(OperationType)) data_id = Column(UUID, ForeignKey("data.id")) - meta_data: Mapped[dict] = MappedColumn(type_ = JSON) + meta_data: Mapped[dict] = MappedColumn(type_=JSON) - created_at = Column(DateTime, default = datetime.now(timezone.utc)) + created_at = Column(DateTime, default=datetime.now(timezone.utc)) diff --git a/cognee/modules/chunking/TextChunker.py b/cognee/modules/chunking/TextChunker.py index 64c7aae5c..78c02b9c9 100644 --- a/cognee/modules/chunking/TextChunker.py +++ b/cognee/modules/chunking/TextChunker.py @@ -1,45 +1,61 @@ -from uuid import uuid5, NAMESPACE_OID +from typing import Optional +from uuid import NAMESPACE_OID, uuid5 -from .models.DocumentChunk import DocumentChunk from cognee.tasks.chunks import chunk_by_paragraph -class TextChunker(): +from .models.DocumentChunk import DocumentChunk + + +class TextChunker: document = None max_chunk_size: int chunk_index = 0 chunk_size = 0 + token_count = 0 - def __init__(self, document, get_text: callable, chunk_size: int = 1024): + def __init__( + self, document, get_text: callable, max_tokens: Optional[int] = None, chunk_size: int = 1024 + ): self.document = document self.max_chunk_size = chunk_size self.get_text = get_text + self.max_tokens = max_tokens if max_tokens else float("inf") + + def check_word_count_and_token_count(self, word_count_before, token_count_before, chunk_data): + word_count_fits = word_count_before + chunk_data["word_count"] <= self.max_chunk_size + token_count_fits = token_count_before + chunk_data["token_count"] <= self.max_tokens + return word_count_fits and token_count_fits def read(self): paragraph_chunks = [] for content_text in self.get_text(): for chunk_data in chunk_by_paragraph( content_text, + self.max_tokens, self.max_chunk_size, - batch_paragraphs = True, + batch_paragraphs=True, ): - if self.chunk_size + chunk_data["word_count"] <= self.max_chunk_size: + if self.check_word_count_and_token_count( + self.chunk_size, self.token_count, chunk_data + ): paragraph_chunks.append(chunk_data) self.chunk_size += chunk_data["word_count"] + self.token_count += chunk_data["token_count"] else: if len(paragraph_chunks) == 0: yield DocumentChunk( - id = chunk_data["chunk_id"], - text = chunk_data["text"], - word_count = chunk_data["word_count"], - is_part_of = self.document, - chunk_index = self.chunk_index, - cut_type = chunk_data["cut_type"], - contains = [], - _metadata = { + id=chunk_data["chunk_id"], + text=chunk_data["text"], + word_count=chunk_data["word_count"], + is_part_of=self.document, + chunk_index=self.chunk_index, + cut_type=chunk_data["cut_type"], + contains=[], + _metadata={ "index_fields": ["text"], - "metadata_id": self.document.metadata_id - } + "metadata_id": self.document.metadata_id, + }, ) paragraph_chunks = [] self.chunk_size = 0 @@ -47,39 +63,39 @@ class TextChunker(): chunk_text = " ".join(chunk["text"] for chunk in paragraph_chunks) try: yield DocumentChunk( - id = uuid5(NAMESPACE_OID, f"{str(self.document.id)}-{self.chunk_index}"), - text = chunk_text, - word_count = self.chunk_size, - is_part_of = self.document, - chunk_index = self.chunk_index, - cut_type = paragraph_chunks[len(paragraph_chunks) - 1]["cut_type"], - contains = [], - _metadata = { + id=uuid5( + NAMESPACE_OID, f"{str(self.document.id)}-{self.chunk_index}" + ), + text=chunk_text, + word_count=self.chunk_size, + is_part_of=self.document, + chunk_index=self.chunk_index, + cut_type=paragraph_chunks[len(paragraph_chunks) - 1]["cut_type"], + contains=[], + _metadata={ "index_fields": ["text"], - "metadata_id": self.document.metadata_id - } + "metadata_id": self.document.metadata_id, + }, ) except Exception as e: print(e) paragraph_chunks = [chunk_data] self.chunk_size = chunk_data["word_count"] + self.token_count = chunk_data["token_count"] self.chunk_index += 1 if len(paragraph_chunks) > 0: try: yield DocumentChunk( - id = uuid5(NAMESPACE_OID, f"{str(self.document.id)}-{self.chunk_index}"), - text = " ".join(chunk["text"] for chunk in paragraph_chunks), - word_count = self.chunk_size, - is_part_of = self.document, - chunk_index = self.chunk_index, - cut_type = paragraph_chunks[len(paragraph_chunks) - 1]["cut_type"], - contains = [], - _metadata = { - "index_fields": ["text"], - "metadata_id": self.document.metadata_id - } + id=uuid5(NAMESPACE_OID, f"{str(self.document.id)}-{self.chunk_index}"), + text=" ".join(chunk["text"] for chunk in paragraph_chunks), + word_count=self.chunk_size, + is_part_of=self.document, + chunk_index=self.chunk_index, + cut_type=paragraph_chunks[len(paragraph_chunks) - 1]["cut_type"], + contains=[], + _metadata={"index_fields": ["text"], "metadata_id": self.document.metadata_id}, ) except Exception as e: print(e) diff --git a/cognee/modules/chunking/models/DocumentChunk.py b/cognee/modules/chunking/models/DocumentChunk.py index b5faea560..a232d50a1 100644 --- a/cognee/modules/chunking/models/DocumentChunk.py +++ b/cognee/modules/chunking/models/DocumentChunk.py @@ -1,8 +1,10 @@ from typing import List, Optional + from cognee.infrastructure.engine import DataPoint from cognee.modules.data.processing.document_types import Document from cognee.modules.engine.models import Entity + class DocumentChunk(DataPoint): __tablename__ = "document_chunk" text: str @@ -10,8 +12,7 @@ class DocumentChunk(DataPoint): chunk_index: int cut_type: str is_part_of: Document + pydantic_type: str = "DocumentChunk" contains: List[Entity] = None - _metadata: Optional[dict] = { - "index_fields": ["text"], - } + _metadata: dict = {"index_fields": ["text"], "type": "DocumentChunk"} diff --git a/cognee/modules/cognify/config.py b/cognee/modules/cognify/config.py index ffc54856c..dd94d8b41 100644 --- a/cognee/modules/cognify/config.py +++ b/cognee/modules/cognify/config.py @@ -1,12 +1,15 @@ from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict from cognee.shared.data_models import DefaultContentPrediction, SummarizedContent +from typing import Optional +import os + class CognifyConfig(BaseSettings): classification_model: object = DefaultContentPrediction summarization_model: object = SummarizedContent - - model_config = SettingsConfigDict(env_file = ".env", extra = "allow") + max_tokens: Optional[int] = os.getenv("MAX_TOKENS") + model_config = SettingsConfigDict(env_file=".env", extra="allow") def to_dict(self) -> dict: return { @@ -14,6 +17,7 @@ class CognifyConfig(BaseSettings): "summarization_model": self.summarization_model, } + @lru_cache def get_cognify_config(): return CognifyConfig() diff --git a/cognee/modules/data/deletion/prune_data.py b/cognee/modules/data/deletion/prune_data.py index cef0c5ffa..12a516329 100644 --- a/cognee/modules/data/deletion/prune_data.py +++ b/cognee/modules/data/deletion/prune_data.py @@ -1,6 +1,7 @@ from cognee.base_config import get_base_config from cognee.infrastructure.files.storage import LocalStorage + async def prune_data(): base_config = get_base_config() data_root_directory = base_config.data_root_directory diff --git a/cognee/modules/data/deletion/prune_system.py b/cognee/modules/data/deletion/prune_system.py index 38c625558..055d69b55 100644 --- a/cognee/modules/data/deletion/prune_system.py +++ b/cognee/modules/data/deletion/prune_system.py @@ -2,7 +2,8 @@ from cognee.infrastructure.databases.vector import get_vector_engine from cognee.infrastructure.databases.graph.get_graph_engine import get_graph_engine from cognee.infrastructure.databases.relational import get_relational_engine -async def prune_system(graph = True, vector = True, metadata = False): + +async def prune_system(graph=True, vector=True, metadata=False): if graph: graph_engine = await get_graph_engine() await graph_engine.delete_graph() diff --git a/cognee/modules/data/exceptions/__init__.py b/cognee/modules/data/exceptions/__init__.py index fa8468c88..16c363bed 100644 --- a/cognee/modules/data/exceptions/__init__.py +++ b/cognee/modules/data/exceptions/__init__.py @@ -6,4 +6,5 @@ This module defines a set of exceptions for handling various data errors from .exceptions import ( UnstructuredLibraryImportError, -) \ No newline at end of file + UnauthorizedDataAccessError, +) diff --git a/cognee/modules/data/exceptions/exceptions.py b/cognee/modules/data/exceptions/exceptions.py index 3b1aac52c..cebc1efe5 100644 --- a/cognee/modules/data/exceptions/exceptions.py +++ b/cognee/modules/data/exceptions/exceptions.py @@ -1,11 +1,22 @@ from cognee.exceptions import CogneeApiError from fastapi import status + class UnstructuredLibraryImportError(CogneeApiError): def __init__( - self, - message: str = "Import error. Unstructured library is not installed.", - name: str = "UnstructuredModuleImportError", - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + self, + message: str = "Import error. Unstructured library is not installed.", + name: str = "UnstructuredModuleImportError", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) + + +class UnauthorizedDataAccessError(CogneeApiError): + def __init__( + self, + message: str = "User does not have permission to access this data.", + name: str = "UnauthorizedDataAccessError", + status_code=status.HTTP_401_UNAUTHORIZED, + ): + super().__init__(message, name, status_code) diff --git a/cognee/modules/data/extraction/extract_summary.py b/cognee/modules/data/extraction/extract_summary.py index a17bf3ae6..27b3997f3 100644 --- a/cognee/modules/data/extraction/extract_summary.py +++ b/cognee/modules/data/extraction/extract_summary.py @@ -1,7 +1,18 @@ +import logging +import os from typing import Type + +from instructor.exceptions import InstructorRetryException from pydantic import BaseModel -from cognee.infrastructure.llm.prompts import read_query_prompt +from tenacity import RetryError + from cognee.infrastructure.llm.get_llm_client import get_llm_client +from cognee.infrastructure.llm.prompts import read_query_prompt +from cognee.shared.data_models import SummarizedCode +from cognee.tasks.summarization.mock_summary import get_mock_summarized_code + +logger = logging.getLogger("extract_summary") + async def extract_summary(content: str, response_model: Type[BaseModel]): llm_client = get_llm_client() @@ -11,3 +22,22 @@ async def extract_summary(content: str, response_model: Type[BaseModel]): llm_output = await llm_client.acreate_structured_output(content, system_prompt, response_model) return llm_output + + +async def extract_code_summary(content: str): + enable_mocking = os.getenv("MOCK_CODE_SUMMARY", "false") + if isinstance(enable_mocking, bool): + enable_mocking = str(enable_mocking).lower() + enable_mocking = enable_mocking in ("true", "1", "yes") + + if enable_mocking: + result = get_mock_summarized_code() + return result + else: + try: + result = await extract_summary(content, response_model=SummarizedCode) + except (RetryError, InstructorRetryException) as e: + logger.error("Failed to extract code summary, falling back to mock summary", exc_info=e) + result = get_mock_summarized_code() + + return result diff --git a/cognee/modules/data/extraction/extract_topics_naive.py b/cognee/modules/data/extraction/extract_topics_naive.py index a8487224f..d1323e24b 100644 --- a/cognee/modules/data/extraction/extract_topics_naive.py +++ b/cognee/modules/data/extraction/extract_topics_naive.py @@ -6,6 +6,7 @@ from nltk.corpus import stopwords, wordnet from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import TruncatedSVD + def extract_topics(text: str): sentences = sent_tokenize(text) @@ -18,24 +19,19 @@ def extract_topics(text: str): lemmatizer = WordNetLemmatizer() base_notation_sentences = [lemmatizer.lemmatize(sentence) for sentence in sentences] - tf_vectorizer = TfidfVectorizer(tokenizer = word_tokenize, token_pattern = None) + tf_vectorizer = TfidfVectorizer(tokenizer=word_tokenize, token_pattern=None) transformed_corpus = tf_vectorizer.fit_transform(base_notation_sentences) - svd = TruncatedSVD(n_components = 10) + svd = TruncatedSVD(n_components=10) svd_corpus = svd.fit(transformed_corpus) - feature_scores = dict( - zip( - tf_vectorizer.vocabulary_, - svd_corpus.components_[0] - ) - ) + feature_scores = dict(zip(tf_vectorizer.vocabulary_, svd_corpus.components_[0])) topics = sorted( feature_scores, # key = feature_scores.get, - key = lambda x: transformed_corpus[0, tf_vectorizer.vocabulary_[x]], - reverse = True, + key=lambda x: transformed_corpus[0, tf_vectorizer.vocabulary_[x]], + reverse=True, )[:10] return topics @@ -45,6 +41,7 @@ def clean_text(text: str): text = re.sub(r"[ \t]{2,}|[\n\r]", " ", text.lower()) return re.sub(r"[`\"'.,;!?…]", "", text).strip() + def remove_stop_words(text: str): try: stopwords.ensure_loaded() @@ -54,7 +51,7 @@ def remove_stop_words(text: str): stop_words = set(stopwords.words("english")) text = text.split() - text = [word for word in text if not word in stop_words] + text = [word for word in text if word not in stop_words] return " ".join(text) diff --git a/cognee/modules/data/extraction/knowledge_graph/add_model_class_to_graph.py b/cognee/modules/data/extraction/knowledge_graph/add_model_class_to_graph.py index 08691cbf2..9da226541 100644 --- a/cognee/modules/data/extraction/knowledge_graph/add_model_class_to_graph.py +++ b/cognee/modules/data/extraction/knowledge_graph/add_model_class_to_graph.py @@ -2,6 +2,7 @@ from typing import Type, Optional, get_args, get_origin from pydantic import BaseModel from cognee.infrastructure.databases.graph.graph_db_interface import GraphDBInterface + async def add_model_class_to_graph( model_class: Type[BaseModel], graph: GraphDBInterface, @@ -13,7 +14,7 @@ async def add_model_class_to_graph( if await graph.extract_node(model_name): return - await graph.add_node(model_name, dict(type = "model")) + await graph.add_node(model_name, dict(type="model")) if parent and relationship: await graph.add_edge( @@ -21,9 +22,9 @@ async def add_model_class_to_graph( model_name, relationship, dict( - relationship_name = relationship, - source_node_id = parent, - target_node_id = model_name, + relationship_name=relationship, + source_node_id=parent, + target_node_id=model_name, ), ) @@ -36,7 +37,7 @@ async def add_model_class_to_graph( if hasattr(field_type, "model_fields"): # Check if field type is a Pydantic model await add_model_class_to_graph(field_type, graph, model_name, field_name) - elif get_origin(field.annotation) == list: + elif isinstance(get_origin(field.annotation), list): list_types = get_args(field_type) for item_type in list_types: await add_model_class_to_graph(item_type, graph, model_name, field_name) @@ -45,26 +46,26 @@ async def add_model_class_to_graph( if hasattr(item_type, "model_fields"): await add_model_class_to_graph(item_type, graph, model_name, field_name) else: - await graph.add_node(str(item_type), dict(type = "value")) + await graph.add_node(str(item_type), dict(type="value")) await graph.add_edge( model_name, str(item_type), field_name, dict( - relationship_name = field_name, - source_node_id = model_name, - target_node_id = str(item_type), + relationship_name=field_name, + source_node_id=model_name, + target_node_id=str(item_type), ), ) else: - await graph.add_node(str(field_type), dict(type = "value")) + await graph.add_node(str(field_type), dict(type="value")) await graph.add_edge( model_name, str(field_type), field_name, dict( - relationship_name = field_name, - source_node_id = model_name, - target_node_id = str(field_type), + relationship_name=field_name, + source_node_id=model_name, + target_node_id=str(field_type), ), ) diff --git a/cognee/modules/data/extraction/knowledge_graph/extract_content_graph.py b/cognee/modules/data/extraction/knowledge_graph/extract_content_graph.py index e52f3992a..49af7351a 100644 --- a/cognee/modules/data/extraction/knowledge_graph/extract_content_graph.py +++ b/cognee/modules/data/extraction/knowledge_graph/extract_content_graph.py @@ -3,10 +3,13 @@ from pydantic import BaseModel from cognee.infrastructure.llm.get_llm_client import get_llm_client from cognee.infrastructure.llm.prompts import render_prompt + async def extract_content_graph(content: str, response_model: Type[BaseModel]): llm_client = get_llm_client() system_prompt = render_prompt("generate_graph_prompt.txt", {}) - content_graph = await llm_client.acreate_structured_output(content, system_prompt, response_model) + content_graph = await llm_client.acreate_structured_output( + content, system_prompt, response_model + ) return content_graph diff --git a/cognee/modules/data/methods/__init__.py b/cognee/modules/data/methods/__init__.py index 34f943359..c32db1d2f 100644 --- a/cognee/modules/data/methods/__init__.py +++ b/cognee/modules/data/methods/__init__.py @@ -10,4 +10,4 @@ from .get_data import get_data # Delete from .delete_dataset import delete_dataset -from .delete_data import delete_data \ No newline at end of file +from .delete_data import delete_data diff --git a/cognee/modules/data/methods/create_dataset.py b/cognee/modules/data/methods/create_dataset.py index aa9c645f7..be4ea8792 100644 --- a/cognee/modules/data/methods/create_dataset.py +++ b/cognee/modules/data/methods/create_dataset.py @@ -4,20 +4,19 @@ from sqlalchemy import select from sqlalchemy.orm import joinedload from cognee.modules.data.models import Dataset + async def create_dataset(dataset_name: str, owner_id: UUID, session: AsyncSession) -> Dataset: - dataset = (await session.scalars( - select(Dataset)\ - .options(joinedload(Dataset.data))\ + dataset = ( + await session.scalars( + select(Dataset) + .options(joinedload(Dataset.data)) .filter(Dataset.name == dataset_name) .filter(Dataset.owner_id == owner_id) - )).first() + ) + ).first() if dataset is None: - dataset = Dataset( - id = uuid5(NAMESPACE_OID, dataset_name), - name = dataset_name, - data = [] - ) + dataset = Dataset(id=uuid5(NAMESPACE_OID, dataset_name), name=dataset_name, data=[]) dataset.owner_id = owner_id session.add(dataset) diff --git a/cognee/modules/data/methods/delete_data.py b/cognee/modules/data/methods/delete_data.py index c0493a606..2d87d73a5 100644 --- a/cognee/modules/data/methods/delete_data.py +++ b/cognee/modules/data/methods/delete_data.py @@ -6,15 +6,17 @@ from cognee.infrastructure.databases.relational import get_relational_engine async def delete_data(data: Data): """Delete a data record from the database. - Args: - data (Data): The data object to be deleted. + Args: + data (Data): The data object to be deleted. - Raises: - ValueError: If the data object is invalid. + Raises: + ValueError: If the data object is invalid. """ - if not hasattr(data, '__tablename__'): - raise InvalidAttributeError(message="The provided data object is missing the required '__tablename__' attribute.") + if not hasattr(data, "__tablename__"): + raise InvalidAttributeError( + message="The provided data object is missing the required '__tablename__' attribute." + ) db_engine = get_relational_engine() - return await db_engine.delete_data_by_id(data.__tablename__, data.id) + return await db_engine.delete_data_entity(data.id) diff --git a/cognee/modules/data/methods/delete_dataset.py b/cognee/modules/data/methods/delete_dataset.py index c2205144d..ff20ff9e7 100644 --- a/cognee/modules/data/methods/delete_dataset.py +++ b/cognee/modules/data/methods/delete_dataset.py @@ -1,7 +1,8 @@ from cognee.modules.data.models import Dataset from cognee.infrastructure.databases.relational import get_relational_engine + async def delete_dataset(dataset: Dataset): db_engine = get_relational_engine() - return await db_engine.delete_data_by_id(dataset.__tablename__, dataset.id) + return await db_engine.delete_entity_by_id(dataset.__tablename__, dataset.id) diff --git a/cognee/modules/data/methods/get_data.py b/cognee/modules/data/methods/get_data.py index b07401463..d1fff2a0a 100644 --- a/cognee/modules/data/methods/get_data.py +++ b/cognee/modules/data/methods/get_data.py @@ -1,20 +1,28 @@ from uuid import UUID from typing import Optional from cognee.infrastructure.databases.relational import get_relational_engine +from ..exceptions import UnauthorizedDataAccessError from ..models import Data -async def get_data(data_id: UUID) -> Optional[Data]: + +async def get_data(user_id: UUID, data_id: UUID) -> Optional[Data]: """Retrieve data by ID. - Args: - data_id (UUID): ID of the data to retrieve + Args: + user_id (UUID): user ID + data_id (UUID): ID of the data to retrieve - Returns: - Optional[Data]: The requested data object if found, None otherwise + Returns: + Optional[Data]: The requested data object if found, None otherwise """ db_engine = get_relational_engine() async with db_engine.get_async_session() as session: data = await session.get(Data, data_id) - return data \ No newline at end of file + if data and data.owner_id != user_id: + raise UnauthorizedDataAccessError( + message=f"User {user_id} is not authorized to access data {data_id}" + ) + + return data diff --git a/cognee/modules/data/methods/get_dataset.py b/cognee/modules/data/methods/get_dataset.py index 9f46fa223..e5f7e9923 100644 --- a/cognee/modules/data/methods/get_dataset.py +++ b/cognee/modules/data/methods/get_dataset.py @@ -3,6 +3,7 @@ from uuid import UUID from cognee.infrastructure.databases.relational import get_relational_engine from ..models import Dataset + async def get_dataset(user_id: UUID, dataset_id: UUID) -> Optional[Dataset]: db_engine = get_relational_engine() diff --git a/cognee/modules/data/methods/get_dataset_data.py b/cognee/modules/data/methods/get_dataset_data.py index f1b969b2d..80669fddb 100644 --- a/cognee/modules/data/methods/get_dataset_data.py +++ b/cognee/modules/data/methods/get_dataset_data.py @@ -3,6 +3,7 @@ from sqlalchemy import select from cognee.modules.data.models import Data, Dataset from cognee.infrastructure.databases.relational import get_relational_engine + async def get_dataset_data(dataset_id: UUID) -> list[Data]: db_engine = get_relational_engine() diff --git a/cognee/modules/data/methods/get_datasets.py b/cognee/modules/data/methods/get_datasets.py index 040c4c590..f6db585df 100644 --- a/cognee/modules/data/methods/get_datasets.py +++ b/cognee/modules/data/methods/get_datasets.py @@ -3,12 +3,13 @@ from sqlalchemy import select from cognee.infrastructure.databases.relational import get_relational_engine from ..models import Dataset + async def get_datasets(user_id: UUID) -> list[Dataset]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - datasets = (await session.scalars( - select(Dataset).filter(Dataset.owner_id == user_id) - )).all() + datasets = ( + await session.scalars(select(Dataset).filter(Dataset.owner_id == user_id)) + ).all() return datasets diff --git a/cognee/modules/data/methods/get_datasets_by_name.py b/cognee/modules/data/methods/get_datasets_by_name.py index f562268ce..be0613792 100644 --- a/cognee/modules/data/methods/get_datasets_by_name.py +++ b/cognee/modules/data/methods/get_datasets_by_name.py @@ -3,16 +3,19 @@ from sqlalchemy import select from cognee.infrastructure.databases.relational import get_relational_engine from ..models import Dataset + async def get_datasets_by_name(dataset_names: list[str], user_id: UUID) -> list[Dataset]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: if isinstance(dataset_names, str): dataset_names = [dataset_names] - datasets = (await session.scalars( - select(Dataset) + datasets = ( + await session.scalars( + select(Dataset) .filter(Dataset.owner_id == user_id) .filter(Dataset.name.in_(dataset_names)) - )).all() + ) + ).all() return datasets diff --git a/cognee/modules/data/models/Data.py b/cognee/modules/data/models/Data.py index e24bc7c5c..cf8918db7 100644 --- a/cognee/modules/data/models/Data.py +++ b/cognee/modules/data/models/Data.py @@ -9,6 +9,7 @@ from cognee.infrastructure.databases.relational import Base from .DatasetData import DatasetData from .Metadata import Metadata + class Data(Base): __tablename__ = "data" @@ -20,12 +21,8 @@ class Data(Base): raw_data_location = Column(String) owner_id = Column(UUID, index=True) content_hash = Column(String) - created_at = Column( - DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) - ) - updated_at = Column( - DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc) - ) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) datasets = relationship( "Dataset", @@ -42,7 +39,6 @@ class Data(Base): cascade="all, delete", ) - def to_json(self) -> dict: return { "id": str(self.id), diff --git a/cognee/modules/data/models/Dataset.py b/cognee/modules/data/models/Dataset.py index f7078b8f1..dc2a81a20 100644 --- a/cognee/modules/data/models/Dataset.py +++ b/cognee/modules/data/models/Dataset.py @@ -6,24 +6,25 @@ from sqlalchemy import Column, Text, DateTime, UUID from cognee.infrastructure.databases.relational import Base from .DatasetData import DatasetData + class Dataset(Base): __tablename__ = "datasets" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) name = Column(Text) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) - owner_id = Column(UUID, index = True) + owner_id = Column(UUID, index=True) data: Mapped[List["Data"]] = relationship( "Data", - secondary = DatasetData.__tablename__, - back_populates = "datasets", - lazy = "noload", - cascade="all, delete" + secondary=DatasetData.__tablename__, + back_populates="datasets", + lazy="noload", + cascade="all, delete", ) def to_json(self) -> dict: @@ -33,5 +34,5 @@ class Dataset(Base): "createdAt": self.created_at.isoformat(), "updatedAt": self.updated_at.isoformat() if self.updated_at else None, "ownerId": str(self.owner_id), - "data": [data.to_json() for data in self.data] + "data": [data.to_json() for data in self.data], } diff --git a/cognee/modules/data/models/DatasetData.py b/cognee/modules/data/models/DatasetData.py index a35c120eb..209771581 100644 --- a/cognee/modules/data/models/DatasetData.py +++ b/cognee/modules/data/models/DatasetData.py @@ -2,10 +2,11 @@ from datetime import datetime, timezone from sqlalchemy import Column, DateTime, ForeignKey, UUID from cognee.infrastructure.databases.relational import Base + class DatasetData(Base): __tablename__ = "dataset_data" - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) - dataset_id = Column(UUID, ForeignKey("datasets.id", ondelete="CASCADE"), primary_key = True) - data_id = Column(UUID, ForeignKey("data.id", ondelete="CASCADE"), primary_key = True) + dataset_id = Column(UUID, ForeignKey("datasets.id", ondelete="CASCADE"), primary_key=True) + data_id = Column(UUID, ForeignKey("data.id", ondelete="CASCADE"), primary_key=True) diff --git a/cognee/modules/data/models/Metadata.py b/cognee/modules/data/models/Metadata.py index 3ab30b38d..ab41d94be 100644 --- a/cognee/modules/data/models/Metadata.py +++ b/cognee/modules/data/models/Metadata.py @@ -14,13 +14,8 @@ class Metadata(Base): metadata_repr = Column(String) metadata_source = Column(String) - created_at = Column( - DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) - ) - updated_at = Column( - DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc) - ) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) - data_id = Column(UUID, ForeignKey("data.id", ondelete="CASCADE"), primary_key = False) + data_id = Column(UUID, ForeignKey("data.id", ondelete="CASCADE"), primary_key=False) data = relationship("Data", back_populates="metadata_relationship") - diff --git a/cognee/modules/data/models/__init__.py b/cognee/modules/data/models/__init__.py index 5d79dbd40..bd5774f88 100644 --- a/cognee/modules/data/models/__init__.py +++ b/cognee/modules/data/models/__init__.py @@ -1,2 +1,3 @@ from .Data import Data from .Dataset import Dataset +from .DatasetData import DatasetData diff --git a/cognee/modules/data/operations/detect_language.py b/cognee/modules/data/operations/detect_language.py index e82675736..27fb853c6 100644 --- a/cognee/modules/data/operations/detect_language.py +++ b/cognee/modules/data/operations/detect_language.py @@ -2,6 +2,7 @@ import logging logger = logging.getLogger(__name__) + async def detect_language(text: str): """ Detect the language of the given text and return its ISO 639-1 language code. @@ -14,6 +15,7 @@ async def detect_language(text: str): """ from langdetect import detect, LangDetectException + # Trim the text to the first 100 characters trimmed_text = text[:100] diff --git a/cognee/modules/data/operations/get_metadata.py b/cognee/modules/data/operations/get_metadata.py index 26637e383..f827c47c3 100644 --- a/cognee/modules/data/operations/get_metadata.py +++ b/cognee/modules/data/operations/get_metadata.py @@ -15,5 +15,3 @@ async def get_metadata(metadata_id: UUID) -> Metadata: metadata = await session.get(Metadata, metadata_id) return metadata - - diff --git a/cognee/modules/data/operations/translate_text.py b/cognee/modules/data/operations/translate_text.py index d8c27e42a..d9a7c9505 100644 --- a/cognee/modules/data/operations/translate_text.py +++ b/cognee/modules/data/operations/translate_text.py @@ -4,7 +4,10 @@ from cognee.exceptions import InvalidValueError logger = logging.getLogger(__name__) -async def translate_text(text, source_language: str = "sr", target_language: str = "en", region_name = "eu-west-1"): + +async def translate_text( + text, source_language: str = "sr", target_language: str = "en", region_name="eu-west-1" +): """ Translate text from source language to target language using AWS Translate. Parameters: @@ -26,11 +29,11 @@ async def translate_text(text, source_language: str = "sr", target_language: str raise InvalidValueError(message="Source and target language codes are required.") try: - translate = boto3.client(service_name = "translate", region_name = region_name, use_ssl = True) + translate = boto3.client(service_name="translate", region_name=region_name, use_ssl=True) result = translate.translate_text( - Text = text, - SourceLanguageCode = source_language, - TargetLanguageCode = target_language, + Text=text, + SourceLanguageCode=source_language, + TargetLanguageCode=target_language, ) yield result.get("TranslatedText", "No translation found.") diff --git a/cognee/modules/data/operations/write_metadata.py b/cognee/modules/data/operations/write_metadata.py index 67c8c0e45..3c2c839c2 100644 --- a/cognee/modules/data/operations/write_metadata.py +++ b/cognee/modules/data/operations/write_metadata.py @@ -11,11 +11,12 @@ from cognee.infrastructure.files.utils.get_file_metadata import FileMetadata from ..models.Metadata import Metadata -async def write_metadata(data_item: Union[BinaryIO, str, Any], data_id: UUID, file_metadata: FileMetadata) -> UUID: +async def write_metadata( + data_item: Union[BinaryIO, str, Any], data_id: UUID, file_metadata: FileMetadata +) -> UUID: metadata_dict = get_metadata_dict(data_item, file_metadata) db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - metadata = ( await session.execute(select(Metadata).filter(Metadata.data_id == data_id)) ).scalar_one_or_none() @@ -29,14 +30,13 @@ async def write_metadata(data_item: Union[BinaryIO, str, Any], data_id: UUID, fi id=data_id, metadata_repr=json.dumps(metadata_dict), metadata_source=parse_type(type(data_item)), - data_id=data_id + data_id=data_id, ) session.add(metadata) await session.commit() - def parse_type(type_: Any) -> str: pattern = r".+'([\w_\.]+)'" match = re.search(pattern, str(type_)) @@ -46,11 +46,13 @@ def parse_type(type_: Any) -> str: raise Exception(f"type: {type_} could not be parsed") -def get_metadata_dict(data_item: Union[BinaryIO, str, Any], file_metadata: FileMetadata) -> dict[str, Any]: +def get_metadata_dict( + data_item: Union[BinaryIO, str, Any], file_metadata: FileMetadata +) -> dict[str, Any]: if isinstance(data_item, str): - return(file_metadata) + return file_metadata elif isinstance(data_item, BinaryIO): - return(file_metadata) + return file_metadata elif hasattr(data_item, "dict") and inspect.ismethod(getattr(data_item, "dict")): return {**file_metadata, **data_item.dict()} else: diff --git a/cognee/modules/data/processing/document_types/AudioDocument.py b/cognee/modules/data/processing/document_types/AudioDocument.py index 0d2cddd3d..b7d2476b4 100644 --- a/cognee/modules/data/processing/document_types/AudioDocument.py +++ b/cognee/modules/data/processing/document_types/AudioDocument.py @@ -1,19 +1,26 @@ +from typing import Optional + from cognee.infrastructure.llm.get_llm_client import get_llm_client -from cognee.modules.chunking.TextChunker import TextChunker + +from .ChunkerMapping import ChunkerConfig from .Document import Document + class AudioDocument(Document): type: str = "audio" def create_transcript(self): result = get_llm_client().create_transcript(self.raw_data_location) - return(result.text) + return result.text - def read(self, chunk_size: int): + def read(self, chunk_size: int, chunker: str, max_tokens: Optional[int] = None): # Transcribe the audio file - + text = self.create_transcript() - chunker = TextChunker(self, chunk_size = chunk_size, get_text = lambda: [text]) + chunker_func = ChunkerConfig.get_chunker(chunker) + chunker = chunker_func( + self, chunk_size=chunk_size, get_text=lambda: [text], max_tokens=max_tokens + ) yield from chunker.read() diff --git a/cognee/modules/data/processing/document_types/ChunkerMapping.py b/cognee/modules/data/processing/document_types/ChunkerMapping.py new file mode 100644 index 000000000..f9a251528 --- /dev/null +++ b/cognee/modules/data/processing/document_types/ChunkerMapping.py @@ -0,0 +1,14 @@ +from cognee.modules.chunking.TextChunker import TextChunker + + +class ChunkerConfig: + chunker_mapping = {"text_chunker": TextChunker} + + @classmethod + def get_chunker(cls, chunker_name: str): + chunker_class = cls.chunker_mapping.get(chunker_name) + if chunker_class is None: + raise NotImplementedError( + f"Chunker '{chunker_name}' is not implemented. Available options: {list(cls.chunker_mapping.keys())}" + ) + return chunker_class diff --git a/cognee/modules/data/processing/document_types/Document.py b/cognee/modules/data/processing/document_types/Document.py index 45441dcce..7ecdf289e 100644 --- a/cognee/modules/data/processing/document_types/Document.py +++ b/cognee/modules/data/processing/document_types/Document.py @@ -1,12 +1,15 @@ -from cognee.infrastructure.engine import DataPoint +from typing import Optional from uuid import UUID +from cognee.infrastructure.engine import DataPoint + + class Document(DataPoint): - type: str name: str raw_data_location: str metadata_id: UUID mime_type: str + _metadata: dict = {"index_fields": ["name"], "type": "Document"} - def read(self, chunk_size: int) -> str: + def read(self, chunk_size: int, chunker=str, max_tokens: Optional[int] = None) -> str: pass diff --git a/cognee/modules/data/processing/document_types/ImageDocument.py b/cognee/modules/data/processing/document_types/ImageDocument.py index e8f0dd8ee..c055b8253 100644 --- a/cognee/modules/data/processing/document_types/ImageDocument.py +++ b/cognee/modules/data/processing/document_types/ImageDocument.py @@ -1,19 +1,25 @@ +from typing import Optional + from cognee.infrastructure.llm.get_llm_client import get_llm_client -from cognee.modules.chunking.TextChunker import TextChunker + +from .ChunkerMapping import ChunkerConfig from .Document import Document + class ImageDocument(Document): type: str = "image" - def transcribe_image(self): result = get_llm_client().transcribe_image(self.raw_data_location) - return(result.choices[0].message.content) + return result.choices[0].message.content - def read(self, chunk_size: int): + def read(self, chunk_size: int, chunker: str, max_tokens: Optional[int] = None): # Transcribe the image file text = self.transcribe_image() - chunker = TextChunker(self, chunk_size = chunk_size, get_text = lambda: [text]) + chunker_func = ChunkerConfig.get_chunker(chunker) + chunker = chunker_func( + self, chunk_size=chunk_size, get_text=lambda: [text], max_tokens=max_tokens + ) yield from chunker.read() diff --git a/cognee/modules/data/processing/document_types/PdfDocument.py b/cognee/modules/data/processing/document_types/PdfDocument.py index 2d1941996..768f91264 100644 --- a/cognee/modules/data/processing/document_types/PdfDocument.py +++ b/cognee/modules/data/processing/document_types/PdfDocument.py @@ -1,11 +1,15 @@ +from typing import Optional + from pypdf import PdfReader -from cognee.modules.chunking.TextChunker import TextChunker + +from .ChunkerMapping import ChunkerConfig from .Document import Document + class PdfDocument(Document): type: str = "pdf" - def read(self, chunk_size: int): + def read(self, chunk_size: int, chunker: str, max_tokens: Optional[int] = None): file = PdfReader(self.raw_data_location) def get_text(): @@ -13,7 +17,10 @@ class PdfDocument(Document): page_text = page.extract_text() yield page_text - chunker = TextChunker(self, chunk_size = chunk_size, get_text = get_text) + chunker_func = ChunkerConfig.get_chunker(chunker) + chunker = chunker_func( + self, chunk_size=chunk_size, get_text=get_text, max_tokens=max_tokens + ) yield from chunker.read() diff --git a/cognee/modules/data/processing/document_types/TextDocument.py b/cognee/modules/data/processing/document_types/TextDocument.py index 32d3416b9..b62ccd56e 100644 --- a/cognee/modules/data/processing/document_types/TextDocument.py +++ b/cognee/modules/data/processing/document_types/TextDocument.py @@ -1,12 +1,15 @@ -from cognee.modules.chunking.TextChunker import TextChunker +from typing import Optional + +from .ChunkerMapping import ChunkerConfig from .Document import Document + class TextDocument(Document): type: str = "text" - def read(self, chunk_size: int): + def read(self, chunk_size: int, chunker: str, max_tokens: Optional[int] = None): def get_text(): - with open(self.raw_data_location, mode = "r", encoding = "utf-8") as file: + with open(self.raw_data_location, mode="r", encoding="utf-8") as file: while True: text = file.read(1024) @@ -15,6 +18,10 @@ class TextDocument(Document): yield text - chunker = TextChunker(self, chunk_size = chunk_size, get_text = get_text) + chunker_func = ChunkerConfig.get_chunker(chunker) + + chunker = chunker_func( + self, chunk_size=chunk_size, get_text=get_text, max_tokens=max_tokens + ) yield from chunker.read() diff --git a/cognee/modules/data/processing/document_types/UnstructuredDocument.py b/cognee/modules/data/processing/document_types/UnstructuredDocument.py index 62632cd08..1c291d0dc 100644 --- a/cognee/modules/data/processing/document_types/UnstructuredDocument.py +++ b/cognee/modules/data/processing/document_types/UnstructuredDocument.py @@ -1,14 +1,16 @@ from io import StringIO +from typing import Optional from cognee.modules.chunking.TextChunker import TextChunker -from .Document import Document from cognee.modules.data.exceptions import UnstructuredLibraryImportError +from .Document import Document + class UnstructuredDocument(Document): type: str = "unstructured" - def read(self, chunk_size: int): + def read(self, chunk_size: int, chunker: str, max_tokens: Optional[int] = None) -> str: def get_text(): try: from unstructured.partition.auto import partition @@ -27,6 +29,6 @@ class UnstructuredDocument(Document): yield text - chunker = TextChunker(self, chunk_size = chunk_size, get_text = get_text) + chunker = TextChunker(self, chunk_size=chunk_size, get_text=get_text, max_tokens=max_tokens) yield from chunker.read() diff --git a/cognee/modules/data/processing/has_new_chunks.py b/cognee/modules/data/processing/has_new_chunks.py index e5302b626..fb21be603 100644 --- a/cognee/modules/data/processing/has_new_chunks.py +++ b/cognee/modules/data/processing/has_new_chunks.py @@ -1,7 +1,10 @@ from cognee.infrastructure.databases.vector import get_vector_engine from cognee.modules.chunking import DocumentChunk -async def has_new_chunks(data_chunks: list[DocumentChunk], collection_name: str) -> list[DocumentChunk]: + +async def has_new_chunks( + data_chunks: list[DocumentChunk], collection_name: str +) -> list[DocumentChunk]: vector_engine = get_vector_engine() if not await vector_engine.has_collection(collection_name): @@ -22,9 +25,10 @@ async def has_new_chunks(data_chunks: list[DocumentChunk], collection_name: str) existing_chunks_map = {chunk.id: chunk.payload for chunk in existing_chunks} new_data_chunks = [ - chunk for chunk in data_chunks \ - if chunk.chunk_id not in existing_chunks_map \ - or chunk.text != existing_chunks_map[chunk.chunk_id]["text"] + chunk + for chunk in data_chunks + if chunk.chunk_id not in existing_chunks_map + or chunk.text != existing_chunks_map[chunk.chunk_id]["text"] ] return len(new_data_chunks) > 0 diff --git a/cognee/modules/engine/models/Entity.py b/cognee/modules/engine/models/Entity.py index b805d3d11..0e57d5dba 100644 --- a/cognee/modules/engine/models/Entity.py +++ b/cognee/modules/engine/models/Entity.py @@ -7,7 +7,6 @@ class Entity(DataPoint): name: str is_a: EntityType description: str + pydantic_type: str = "Entity" - _metadata: dict = { - "index_fields": ["name"], - } + _metadata: dict = {"index_fields": ["name"], "type": "Entity"} diff --git a/cognee/modules/engine/models/EntityType.py b/cognee/modules/engine/models/EntityType.py index 1c7843cfd..10799bb33 100644 --- a/cognee/modules/engine/models/EntityType.py +++ b/cognee/modules/engine/models/EntityType.py @@ -1,11 +1,10 @@ from cognee.infrastructure.engine import DataPoint + class EntityType(DataPoint): __tablename__ = "entity_type" name: str - type: str description: str + pydantic_type: str = "EntityType" - _metadata: dict = { - "index_fields": ["name"], - } + _metadata: dict = {"index_fields": ["name"], "type": "EntityType"} diff --git a/cognee/modules/engine/utils/generate_node_id.py b/cognee/modules/engine/utils/generate_node_id.py index db086a19c..489a88875 100644 --- a/cognee/modules/engine/utils/generate_node_id.py +++ b/cognee/modules/engine/utils/generate_node_id.py @@ -1,4 +1,5 @@ from uuid import NAMESPACE_OID, uuid5 + def generate_node_id(node_id: str) -> str: return uuid5(NAMESPACE_OID, node_id.lower().replace(" ", "_").replace("'", "")) diff --git a/cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py b/cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py index 9a7fb677f..471977d4c 100644 --- a/cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py +++ b/cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py @@ -3,6 +3,7 @@ from typing import List, Dict, Union from cognee.modules.graph.cognee_graph.CogneeGraphElements import Node, Edge from cognee.infrastructure.databases.graph.graph_db_interface import GraphDBInterface + class CogneeAbstractGraph(ABC): """ Abstract base class for representing a graph structure. @@ -30,6 +31,8 @@ class CogneeAbstractGraph(ABC): pass @abstractmethod - async def project_graph_from_db(self, adapter: GraphDBInterface, directed: bool, dimension: int) -> None: + async def project_graph_from_db( + self, adapter: GraphDBInterface, directed: bool, dimension: int + ) -> None: """Project the graph structure from a database using the provided adapter.""" pass diff --git a/cognee/modules/graph/cognee_graph/CogneeGraph.py b/cognee/modules/graph/cognee_graph/CogneeGraph.py index dbfbc7bb7..279a73b19 100644 --- a/cognee/modules/graph/cognee_graph/CogneeGraph.py +++ b/cognee/modules/graph/cognee_graph/CogneeGraph.py @@ -52,7 +52,7 @@ class CogneeGraph(CogneeAbstractGraph): else: raise EntityNotFoundError(message=f"Node with id {node_id} does not exist.") - def get_edges(self)-> List[Edge]: + def get_edges(self) -> List[Edge]: return self.edges async def project_graph_from_db( @@ -60,12 +60,11 @@ class CogneeGraph(CogneeAbstractGraph): adapter: Union[GraphDBInterface], node_properties_to_project: List[str], edge_properties_to_project: List[str], - directed = True, - node_dimension = 1, - edge_dimension = 1, - memory_fragment_filter = [], + directed=True, + node_dimension=1, + edge_dimension=1, + memory_fragment_filter=[], ) -> None: - if node_dimension < 1 or edge_dimension < 1: raise InvalidValueError(message="Dimensions must be positive integers") @@ -73,7 +72,9 @@ class CogneeGraph(CogneeAbstractGraph): if len(memory_fragment_filter) == 0: nodes_data, edges_data = await adapter.get_graph_data() else: - nodes_data, edges_data = await adapter.get_filtered_graph_data(attribute_filters = memory_fragment_filter) + nodes_data, edges_data = await adapter.get_filtered_graph_data( + attribute_filters=memory_fragment_filter + ) if not nodes_data: raise EntityNotFoundError(message="No node data retrieved from the database.") @@ -88,17 +89,27 @@ class CogneeGraph(CogneeAbstractGraph): source_node = self.get_node(str(source_id)) target_node = self.get_node(str(target_id)) if source_node and target_node: - edge_attributes = {key: properties.get(key) for key in edge_properties_to_project} - edge_attributes['relationship_type'] = relationship_type + edge_attributes = { + key: properties.get(key) for key in edge_properties_to_project + } + edge_attributes["relationship_type"] = relationship_type - edge = Edge(source_node, target_node, attributes=edge_attributes, directed=directed, dimension=edge_dimension) + edge = Edge( + source_node, + target_node, + attributes=edge_attributes, + directed=directed, + dimension=edge_dimension, + ) self.add_edge(edge) source_node.add_skeleton_edge(edge) target_node.add_skeleton_edge(edge) else: - raise EntityNotFoundError(message=f"Edge references nonexistent nodes: {source_id} -> {target_id}") + raise EntityNotFoundError( + message=f"Edge references nonexistent nodes: {source_id} -> {target_id}" + ) except (ValueError, TypeError) as e: print(f"Error projecting graph: {e}") @@ -110,13 +121,15 @@ class CogneeGraph(CogneeAbstractGraph): for scored_result in scored_results: node_id = str(scored_result.id) score = scored_result.score - node =self.get_node(node_id) + node = self.get_node(node_id) if node: node.add_attribute("vector_distance", score) else: print(f"Node with id {node_id} not found in the graph.") - async def map_vector_distances_to_graph_edges(self, vector_engine, query) -> None: # :TODO: When we calculate edge embeddings in vector db change this similarly to node mapping + async def map_vector_distances_to_graph_edges( + self, vector_engine, query + ) -> None: # :TODO: When we calculate edge embeddings in vector db change this similarly to node mapping try: # Step 1: Generate the query embedding query_vector = await vector_engine.embed_data([query]) @@ -127,7 +140,7 @@ class CogneeGraph(CogneeAbstractGraph): # Step 2: Collect all unique relationship types unique_relationship_types = set() for edge in self.edges: - relationship_type = edge.attributes.get('relationship_type') + relationship_type = edge.attributes.get("relationship_type") if relationship_type: unique_relationship_types.add(relationship_type) @@ -137,12 +150,14 @@ class CogneeGraph(CogneeAbstractGraph): # Step 4: Map relationship types to their embeddings and calculate distances embedding_map = {} - for relationship_type, embedding in zip(unique_relationship_types, relationship_type_embeddings): + for relationship_type, embedding in zip( + unique_relationship_types, relationship_type_embeddings + ): edge_vector = np.array(embedding) # Calculate cosine similarity similarity = np.dot(query_vector, edge_vector) / ( - np.linalg.norm(query_vector) * np.linalg.norm(edge_vector) + np.linalg.norm(query_vector) * np.linalg.norm(edge_vector) ) distance = 1 - similarity @@ -151,7 +166,7 @@ class CogneeGraph(CogneeAbstractGraph): # Step 4: Assign precomputed distances to edges for edge in self.edges: - relationship_type = edge.attributes.get('relationship_type') + relationship_type = edge.attributes.get("relationship_type") if not relationship_type or relationship_type not in embedding_map: print(f"Edge {edge} has an unknown or missing relationship type.") continue @@ -162,7 +177,6 @@ class CogneeGraph(CogneeAbstractGraph): except Exception as ex: print(f"Error mapping vector distances to edges: {ex}") - async def calculate_top_triplet_importances(self, k: int) -> List: min_heap = [] for i, edge in enumerate(self.edges): @@ -179,6 +193,4 @@ class CogneeGraph(CogneeAbstractGraph): if len(min_heap) > k: heapq.heappop(min_heap) - return [edge for _, _, edge in sorted(min_heap)] - diff --git a/cognee/modules/graph/cognee_graph/CogneeGraphElements.py b/cognee/modules/graph/cognee_graph/CogneeGraphElements.py index bab0f3bb6..33f02dc22 100644 --- a/cognee/modules/graph/cognee_graph/CogneeGraphElements.py +++ b/cognee/modules/graph/cognee_graph/CogneeGraphElements.py @@ -6,25 +6,28 @@ from cognee.exceptions import InvalidValueError class Node: """ - Represents a node in a graph. - Attributes: - id (str): A unique identifier for the node. - attributes (Dict[str, Any]): A dictionary of attributes associated with the node. - neighbors (List[Node]): Represents the original nodes - skeleton_edges (List[Edge]): Represents the original edges - """ + Represents a node in a graph. + Attributes: + id (str): A unique identifier for the node. + attributes (Dict[str, Any]): A dictionary of attributes associated with the node. + neighbors (List[Node]): Represents the original nodes + skeleton_edges (List[Edge]): Represents the original edges + """ + id: str attributes: Dict[str, Any] skeleton_neighbours: List["Node"] skeleton_edges: List["Edge"] status: np.ndarray - def __init__(self, node_id: str, attributes: Optional[Dict[str, Any]] = None, dimension: int = 1): + def __init__( + self, node_id: str, attributes: Optional[Dict[str, Any]] = None, dimension: int = 1 + ): if dimension <= 0: raise InvalidValueError(message="Dimension must be a positive integer") self.id = node_id self.attributes = attributes if attributes is not None else {} - self.attributes["vector_distance"] = float('inf') + self.attributes["vector_distance"] = float("inf") self.skeleton_neighbours = [] self.skeleton_edges = [] self.status = np.ones(dimension, dtype=int) @@ -56,7 +59,9 @@ class Node: def is_node_alive_in_dimension(self, dimension: int) -> bool: if dimension < 0 or dimension >= len(self.status): - raise InvalidValueError(message=f"Dimension {dimension} is out of range. Valid range is 0 to {len(self.status) - 1}.") + raise InvalidValueError( + message=f"Dimension {dimension} is out of range. Valid range is 0 to {len(self.status) - 1}." + ) return self.status[dimension] == 1 def add_attribute(self, key: str, value: Any) -> None: @@ -83,12 +88,12 @@ class Node: class Edge: """ - Represents an edge in a graph, connecting two nodes. - Attributes: - node1 (Node): The starting node of the edge. - node2 (Node): The ending node of the edge. - attributes (Dict[str, Any]): A dictionary of attributes associated with the edge. - directed (bool): A flag indicating whether the edge is directed or undirected. + Represents an edge in a graph, connecting two nodes. + Attributes: + node1 (Node): The starting node of the edge. + node2 (Node): The ending node of the edge. + attributes (Dict[str, Any]): A dictionary of attributes associated with the edge. + directed (bool): A flag indicating whether the edge is directed or undirected. """ node1: "Node" @@ -97,19 +102,28 @@ class Edge: directed: bool status: np.ndarray - def __init__(self, node1: "Node", node2: "Node", attributes: Optional[Dict[str, Any]] = None, directed: bool = True, dimension: int = 1): + def __init__( + self, + node1: "Node", + node2: "Node", + attributes: Optional[Dict[str, Any]] = None, + directed: bool = True, + dimension: int = 1, + ): if dimension <= 0: raise InvalidValueError(message="Dimensions must be a positive integer.") self.node1 = node1 self.node2 = node2 self.attributes = attributes if attributes is not None else {} - self.attributes["vector_distance"] = float('inf') + self.attributes["vector_distance"] = float("inf") self.directed = directed self.status = np.ones(dimension, dtype=int) def is_edge_alive_in_dimension(self, dimension: int) -> bool: if dimension < 0 or dimension >= len(self.status): - raise InvalidValueError(message=f"Dimension {dimension} is out of range. Valid range is 0 to {len(self.status) - 1}.") + raise InvalidValueError( + message=f"Dimension {dimension} is out of range. Valid range is 0 to {len(self.status) - 1}." + ) return self.status[dimension] == 1 def add_attribute(self, key: str, value: Any) -> None: @@ -140,4 +154,4 @@ class Edge: if self.directed: return self.node1 == other.node1 and self.node2 == other.node2 else: - return {self.node1, self.node2} == {other.node1, other.node2} \ No newline at end of file + return {self.node1, self.node2} == {other.node1, other.node2} diff --git a/cognee/modules/graph/exceptions/__init__.py b/cognee/modules/graph/exceptions/__init__.py index e8330caf3..5cf600099 100644 --- a/cognee/modules/graph/exceptions/__init__.py +++ b/cognee/modules/graph/exceptions/__init__.py @@ -7,4 +7,4 @@ This module defines a set of exceptions for handling various graph errors from .exceptions import ( EntityNotFoundError, EntityAlreadyExistsError, -) \ No newline at end of file +) diff --git a/cognee/modules/graph/exceptions/exceptions.py b/cognee/modules/graph/exceptions/exceptions.py index af15bb616..854e620ff 100644 --- a/cognee/modules/graph/exceptions/exceptions.py +++ b/cognee/modules/graph/exceptions/exceptions.py @@ -1,6 +1,7 @@ from cognee.exceptions import CogneeApiError from fastapi import status + class EntityNotFoundError(CogneeApiError): """Database returns nothing""" @@ -22,4 +23,4 @@ class EntityAlreadyExistsError(CogneeApiError): name: str = "EntityAlreadyExistsError", status_code=status.HTTP_409_CONFLICT, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) diff --git a/cognee/modules/graph/models/EdgeType.py b/cognee/modules/graph/models/EdgeType.py index f9554d25d..36aec2e7c 100644 --- a/cognee/modules/graph/models/EdgeType.py +++ b/cognee/modules/graph/models/EdgeType.py @@ -1,11 +1,11 @@ from typing import Optional + from cognee.infrastructure.engine import DataPoint + class EdgeType(DataPoint): __tablename__ = "edge_type" relationship_name: str number_of_edges: int - _metadata: Optional[dict] = { - "index_fields": ["relationship_name"], - } \ No newline at end of file + _metadata: dict = {"index_fields": ["relationship_name"], "type": "EdgeType"} diff --git a/cognee/modules/graph/utils/convert_node_to_data_point.py b/cognee/modules/graph/utils/convert_node_to_data_point.py index 292f53733..b89e50db9 100644 --- a/cognee/modules/graph/utils/convert_node_to_data_point.py +++ b/cognee/modules/graph/utils/convert_node_to_data_point.py @@ -2,7 +2,7 @@ from cognee.infrastructure.engine import DataPoint def convert_node_to_data_point(node_data: dict) -> DataPoint: - subclass = find_subclass_by_name(DataPoint, node_data["type"]) + subclass = find_subclass_by_name(DataPoint, node_data._metadata["type"]) return subclass(**node_data) @@ -15,6 +15,7 @@ def get_all_subclasses(cls): return subclasses + def find_subclass_by_name(cls, name): for subclass in get_all_subclasses(cls): if subclass.__name__ == name: diff --git a/cognee/modules/graph/utils/deduplicate_nodes_and_edges.py b/cognee/modules/graph/utils/deduplicate_nodes_and_edges.py index e863960ea..f61d51f3e 100644 --- a/cognee/modules/graph/utils/deduplicate_nodes_and_edges.py +++ b/cognee/modules/graph/utils/deduplicate_nodes_and_edges.py @@ -1,5 +1,6 @@ from cognee.infrastructure.engine import DataPoint + def deduplicate_nodes_and_edges(nodes: list[DataPoint], edges: list[dict]): added_entities = {} final_nodes = [] diff --git a/cognee/modules/graph/utils/expand_with_nodes_and_edges.py b/cognee/modules/graph/utils/expand_with_nodes_and_edges.py index cfa2ad9b4..23a6f4f63 100644 --- a/cognee/modules/graph/utils/expand_with_nodes_and_edges.py +++ b/cognee/modules/graph/utils/expand_with_nodes_and_edges.py @@ -36,10 +36,10 @@ def expand_with_nodes_and_edges( if f"{str(type_node_id)}_type" not in added_nodes_map: type_node = EntityType( - id = type_node_id, - name = type_node_name, - type = type_node_name, - description = type_node_name, + id=type_node_id, + name=type_node_name, + type=type_node_name, + description=type_node_name, ) added_nodes_map[f"{str(type_node_id)}_type"] = type_node else: @@ -47,10 +47,10 @@ def expand_with_nodes_and_edges( if f"{str(node_id)}_entity" not in added_nodes_map: entity_node = Entity( - id = node_id, - name = node_name, - is_a = type_node, - description = node.description, + id=node_id, + name=node_name, + is_a=type_node, + description=node.description, ) if data_chunk.contains is None: @@ -75,11 +75,9 @@ def expand_with_nodes_and_edges( target_node_id, edge.relationship_name, dict( - relationship_name = generate_edge_name( - edge.relationship_name - ), - source_node_id = source_node_id, - target_node_id = target_node_id, + relationship_name=generate_edge_name(edge.relationship_name), + source_node_id=source_node_id, + target_node_id=target_node_id, ), ) ) diff --git a/cognee/modules/graph/utils/get_graph_from_model.py b/cognee/modules/graph/utils/get_graph_from_model.py index c675792bf..f4d2ed77a 100644 --- a/cognee/modules/graph/utils/get_graph_from_model.py +++ b/cognee/modules/graph/utils/get_graph_from_model.py @@ -2,12 +2,14 @@ from datetime import datetime, timezone from cognee.infrastructure.engine import DataPoint from cognee.modules.storage.utils import copy_model + async def get_graph_from_model( data_point: DataPoint, added_nodes: dict, added_edges: dict, visited_properties: dict = None, - include_root = True, + only_root=False, + include_root=True, ): if str(data_point.id) in added_nodes: return [], [] @@ -36,7 +38,11 @@ async def get_graph_from_model( continue - if isinstance(field_value, list) and len(field_value) > 0 and isinstance(field_value[0], DataPoint): + if ( + isinstance(field_value, list) + and len(field_value) > 0 + and isinstance(field_value[0], DataPoint) + ): excluded_properties.add(field_name) for index, item in enumerate(field_value): @@ -51,15 +57,14 @@ async def get_graph_from_model( data_point_properties[field_name] = field_value - if include_root and str(data_point.id) not in added_nodes: SimpleDataPointModel = copy_model( type(data_point), - include_fields = { + include_fields={ "_metadata": (dict, data_point._metadata), "__tablename__": (str, data_point.__tablename__), }, - exclude_fields = list(excluded_properties), + exclude_fields=list(excluded_properties), ) nodes.append(SimpleDataPointModel(**data_point_properties)) added_nodes[str(data_point.id)] = True @@ -78,23 +83,30 @@ async def get_graph_from_model( edge_key = str(data_point.id) + str(field_value.id) + field_name if str(edge_key) not in added_edges: - edges.append((data_point.id, field_value.id, field_name, { - "source_node_id": data_point.id, - "target_node_id": field_value.id, - "relationship_name": field_name, - "updated_at": datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), - })) + edges.append( + ( + data_point.id, + field_value.id, + field_name, + { + "source_node_id": data_point.id, + "target_node_id": field_value.id, + "relationship_name": field_name, + "updated_at": datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), + }, + ) + ) added_edges[str(edge_key)] = True - if str(field_value.id) in added_nodes: + if str(field_value.id) in added_nodes or only_root: continue property_nodes, property_edges = await get_graph_from_model( field_value, - include_root = True, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, + include_root=True, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, ) for node in property_nodes: diff --git a/cognee/modules/graph/utils/get_model_instance_from_graph.py b/cognee/modules/graph/utils/get_model_instance_from_graph.py index 82cdfa150..abe378f51 100644 --- a/cognee/modules/graph/utils/get_model_instance_from_graph.py +++ b/cognee/modules/graph/utils/get_model_instance_from_graph.py @@ -18,12 +18,16 @@ def get_model_instance_from_graph(nodes: list[DataPoint], edges: list, entity_id edge_type = edge_metadata.get("type") if edge_type == "list": - NewModel = copy_model(type(source_node), { edge_label: (list[type(target_node)], PydanticUndefined) }) + NewModel = copy_model( + type(source_node), {edge_label: (list[type(target_node)], PydanticUndefined)} + ) - node_map[edge[0]] = NewModel(**source_node.model_dump(), **{ edge_label: [target_node] }) + node_map[edge[0]] = NewModel(**source_node.model_dump(), **{edge_label: [target_node]}) else: - NewModel = copy_model(type(source_node), { edge_label: (type(target_node), PydanticUndefined) }) + NewModel = copy_model( + type(source_node), {edge_label: (type(target_node), PydanticUndefined)} + ) - node_map[edge[0]] = NewModel(**source_node.model_dump(), **{ edge_label: target_node }) + node_map[edge[0]] = NewModel(**source_node.model_dump(), **{edge_label: target_node}) return node_map[entity_id] diff --git a/cognee/modules/graph/utils/retrieve_existing_edges.py b/cognee/modules/graph/utils/retrieve_existing_edges.py index 0959e79d8..637317a8f 100644 --- a/cognee/modules/graph/utils/retrieve_existing_edges.py +++ b/cognee/modules/graph/utils/retrieve_existing_edges.py @@ -22,18 +22,12 @@ async def retrieve_existing_edges( entity_node_id = generate_node_id(node.id) if str(type_node_id) not in processed_nodes: - type_node_edges.append( - (data_chunk.id, type_node_id, "exists_in") - ) + type_node_edges.append((data_chunk.id, type_node_id, "exists_in")) processed_nodes[str(type_node_id)] = True if str(entity_node_id) not in processed_nodes: - entity_node_edges.append( - (data_chunk.id, entity_node_id, "mentioned_in") - ) - type_entity_edges.append( - (entity_node_id, type_node_id, "is_a") - ) + entity_node_edges.append((data_chunk.id, entity_node_id, "mentioned_in")) + type_entity_edges.append((entity_node_id, type_node_id, "is_a")) processed_nodes[str(entity_node_id)] = True graph_node_edges = [ diff --git a/cognee/modules/ingestion/classify.py b/cognee/modules/ingestion/classify.py index dbb191cc3..8c428cbb9 100644 --- a/cognee/modules/ingestion/classify.py +++ b/cognee/modules/ingestion/classify.py @@ -13,4 +13,6 @@ def classify(data: Union[str, BinaryIO], filename: str = None): if isinstance(data, BufferedReader) or isinstance(data, SpooledTemporaryFile): return BinaryData(data, data.name.split("/")[-1] if data.name else filename) - raise IngestionError(message=f"Type of data sent to classify(data: Union[str, BinaryIO) not supported: {type(data)}") + raise IngestionError( + message=f"Type of data sent to classify(data: Union[str, BinaryIO) not supported: {type(data)}" + ) diff --git a/cognee/modules/ingestion/data_types/BinaryData.py b/cognee/modules/ingestion/data_types/BinaryData.py index 0606250ea..7f137a6a0 100644 --- a/cognee/modules/ingestion/data_types/BinaryData.py +++ b/cognee/modules/ingestion/data_types/BinaryData.py @@ -2,9 +2,11 @@ from typing import BinaryIO from cognee.infrastructure.files import get_file_metadata, FileMetadata from .IngestionData import IngestionData + def create_binary_data(data: BinaryIO): return BinaryData(data) + class BinaryData(IngestionData): name: str = None data: BinaryIO = None diff --git a/cognee/modules/ingestion/data_types/TextData.py b/cognee/modules/ingestion/data_types/TextData.py index 9f10b0d54..b518d54a9 100644 --- a/cognee/modules/ingestion/data_types/TextData.py +++ b/cognee/modules/ingestion/data_types/TextData.py @@ -2,9 +2,11 @@ from typing import BinaryIO from cognee.infrastructure.data.utils.extract_keywords import extract_keywords from .IngestionData import IngestionData + def create_text_data(data: str): return TextData(data) + class TextData(IngestionData): data: str = None metadata = None diff --git a/cognee/modules/ingestion/discover_directory_datasets.py b/cognee/modules/ingestion/discover_directory_datasets.py index 1fdb573f0..861784c16 100644 --- a/cognee/modules/ingestion/discover_directory_datasets.py +++ b/cognee/modules/ingestion/discover_directory_datasets.py @@ -1,5 +1,6 @@ from os import path, listdir + def discover_directory_datasets(root_dir_path: str, parent_dir: str = None): datasets = {} @@ -7,7 +8,9 @@ def discover_directory_datasets(root_dir_path: str, parent_dir: str = None): if path.isdir(path.join(root_dir_path, file_or_dir)): dataset_name = file_or_dir if parent_dir is None else f"{parent_dir}.{file_or_dir}" - nested_datasets = discover_directory_datasets(path.join(root_dir_path, file_or_dir), dataset_name) + nested_datasets = discover_directory_datasets( + path.join(root_dir_path, file_or_dir), dataset_name + ) for dataset in nested_datasets.keys(): datasets[dataset] = nested_datasets[dataset] diff --git a/cognee/modules/ingestion/exceptions/__init__.py b/cognee/modules/ingestion/exceptions/__init__.py index 33d59e113..7efe94987 100644 --- a/cognee/modules/ingestion/exceptions/__init__.py +++ b/cognee/modules/ingestion/exceptions/__init__.py @@ -6,4 +6,4 @@ This module defines a set of exceptions for handling various ingestion errors from .exceptions import ( IngestionError, -) \ No newline at end of file +) diff --git a/cognee/modules/ingestion/exceptions/exceptions.py b/cognee/modules/ingestion/exceptions/exceptions.py index 4901be110..08991a946 100644 --- a/cognee/modules/ingestion/exceptions/exceptions.py +++ b/cognee/modules/ingestion/exceptions/exceptions.py @@ -1,11 +1,12 @@ from cognee.exceptions import CogneeApiError from fastapi import status + class IngestionError(CogneeApiError): def __init__( - self, - message: str = "Type of data sent to classify not supported.", - name: str = "IngestionError", - status_code=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE, + self, + message: str = "Type of data sent to classify not supported.", + name: str = "IngestionError", + status_code=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) diff --git a/cognee/modules/ingestion/get_matched_datasets.py b/cognee/modules/ingestion/get_matched_datasets.py index 563d8016c..d1c41b0f6 100644 --- a/cognee/modules/ingestion/get_matched_datasets.py +++ b/cognee/modules/ingestion/get_matched_datasets.py @@ -1,5 +1,6 @@ from .discover_directory_datasets import discover_directory_datasets + def get_matched_datasets(data_path: str, dataset_name_to_match: str = None): datasets = discover_directory_datasets(data_path) diff --git a/cognee/modules/ingestion/save_data_to_file.py b/cognee/modules/ingestion/save_data_to_file.py index 1af6ab0aa..2e6ba7e15 100644 --- a/cognee/modules/ingestion/save_data_to_file.py +++ b/cognee/modules/ingestion/save_data_to_file.py @@ -5,6 +5,7 @@ from cognee.base_config import get_base_config from cognee.infrastructure.files.storage import LocalStorage from .classify import classify + def save_data_to_file(data: Union[str, BinaryIO], filename: str = None): base_config = get_base_config() data_directory_path = base_config.data_root_directory @@ -16,7 +17,7 @@ def save_data_to_file(data: Union[str, BinaryIO], filename: str = None): file_metadata = classified_data.get_metadata() if "name" not in file_metadata or file_metadata["name"] is None: - data_contents = classified_data.get_data().encode('utf-8') + data_contents = classified_data.get_data().encode("utf-8") hash_contents = hashlib.md5(data_contents).hexdigest() file_metadata["name"] = "text_" + hash_contents + ".txt" file_name = file_metadata["name"] diff --git a/cognee/modules/pipelines/models/Pipeline.py b/cognee/modules/pipelines/models/Pipeline.py index f4d20bb0f..6d97633f0 100644 --- a/cognee/modules/pipelines/models/Pipeline.py +++ b/cognee/modules/pipelines/models/Pipeline.py @@ -6,18 +6,19 @@ from cognee.infrastructure.databases.relational import Base from .PipelineTask import PipelineTask from .Task import Task + class Pipeline(Base): __tablename__ = "pipelines" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) name = Column(String) - description = Column(Text, nullable = True) + description = Column(Text, nullable=True) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) tasks = Mapped[list["Task"]] = relationship( - secondary = PipelineTask.__tablename__, - back_populates = "pipeline", + secondary=PipelineTask.__tablename__, + back_populates="pipeline", ) diff --git a/cognee/modules/pipelines/models/PipelineRun.py b/cognee/modules/pipelines/models/PipelineRun.py index ab3498efe..c778066fe 100644 --- a/cognee/modules/pipelines/models/PipelineRun.py +++ b/cognee/modules/pipelines/models/PipelineRun.py @@ -4,19 +4,21 @@ from datetime import datetime, timezone from sqlalchemy import Column, DateTime, JSON, Enum, UUID from cognee.infrastructure.databases.relational import Base + class PipelineRunStatus(enum.Enum): DATASET_PROCESSING_STARTED = "DATASET_PROCESSING_STARTED" DATASET_PROCESSING_COMPLETED = "DATASET_PROCESSING_COMPLETED" DATASET_PROCESSING_ERRORED = "DATASET_PROCESSING_ERRORED" + class PipelineRun(Base): __tablename__ = "pipeline_runs" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) status = Column(Enum(PipelineRunStatus)) - run_id = Column(UUID, index = True) + run_id = Column(UUID, index=True) run_info = Column(JSON) diff --git a/cognee/modules/pipelines/models/PipelineTask.py b/cognee/modules/pipelines/models/PipelineTask.py index c6c7eb5e9..ca38fde48 100644 --- a/cognee/modules/pipelines/models/PipelineTask.py +++ b/cognee/modules/pipelines/models/PipelineTask.py @@ -2,10 +2,11 @@ from datetime import datetime, timezone from sqlalchemy import Column, DateTime, ForeignKey, UUID from cognee.infrastructure.databases.relational import Base + class PipelineTask(Base): __tablename__ = "pipeline_task" - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) - pipeline_id = Column("pipeline", UUID, ForeignKey("pipeline.id"), primary_key = True) - task_id = Column("task", UUID, ForeignKey("task.id"), primary_key = True) + pipeline_id = Column("pipeline", UUID, ForeignKey("pipeline.id"), primary_key=True) + task_id = Column("task", UUID, ForeignKey("task.id"), primary_key=True) diff --git a/cognee/modules/pipelines/models/Task.py b/cognee/modules/pipelines/models/Task.py index eba6508e3..bf960bf09 100644 --- a/cognee/modules/pipelines/models/Task.py +++ b/cognee/modules/pipelines/models/Task.py @@ -5,20 +5,20 @@ from sqlalchemy import Column, String, DateTime, Text from cognee.infrastructure.databases.relational import Base, UUID from .PipelineTask import PipelineTask + class Task(Base): __tablename__ = "tasks" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) name = Column(String) - description = Column(Text, nullable = True) + description = Column(Text, nullable=True) executable = Column(Text) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) datasets: Mapped[list["Pipeline"]] = relationship( - secondary = PipelineTask.__tablename__, - back_populates = "task" + secondary=PipelineTask.__tablename__, back_populates="task" ) diff --git a/cognee/modules/pipelines/models/TaskRun.py b/cognee/modules/pipelines/models/TaskRun.py index bf2e2a9f8..4f5059cdb 100644 --- a/cognee/modules/pipelines/models/TaskRun.py +++ b/cognee/modules/pipelines/models/TaskRun.py @@ -3,14 +3,15 @@ from datetime import datetime, timezone from sqlalchemy import Column, DateTime, String, JSON from cognee.infrastructure.databases.relational import Base, UUID + class TaskRun(Base): __tablename__ = "task_runs" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) task_name = Column(String) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) status = Column(String) diff --git a/cognee/modules/pipelines/operations/get_pipeline_status.py b/cognee/modules/pipelines/operations/get_pipeline_status.py index 4249d3bf0..4f49cd544 100644 --- a/cognee/modules/pipelines/operations/get_pipeline_status.py +++ b/cognee/modules/pipelines/operations/get_pipeline_status.py @@ -4,29 +4,32 @@ from sqlalchemy.orm import aliased from cognee.infrastructure.databases.relational import get_relational_engine from ..models import PipelineRun + async def get_pipeline_status(pipeline_ids: list[UUID]): db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - query = select( - PipelineRun, - func.row_number().over( - partition_by = PipelineRun.run_id, - order_by = PipelineRun.created_at.desc(), - ).label("rn") - ).filter(PipelineRun.run_id.in_(pipeline_ids)).subquery() + query = ( + select( + PipelineRun, + func.row_number() + .over( + partition_by=PipelineRun.run_id, + order_by=PipelineRun.created_at.desc(), + ) + .label("rn"), + ) + .filter(PipelineRun.run_id.in_(pipeline_ids)) + .subquery() + ) aliased_pipeline_run = aliased(PipelineRun, query) - latest_runs = ( - select(aliased_pipeline_run).filter(query.c.rn == 1) - ) - + latest_runs = select(aliased_pipeline_run).filter(query.c.rn == 1) + runs = (await session.execute(latest_runs)).scalars().all() - pipeline_statuses = { - str(run.run_id): run.status for run in runs - } + pipeline_statuses = {str(run.run_id): run.status for run in runs} return pipeline_statuses @@ -38,4 +41,4 @@ async def get_pipeline_status(pipeline_ids: list[UUID]): # ) t # WHERE rn = 1;""" - # return { dataset["data_id"]: dataset["status"] for dataset in datasets_statuses } + # return { dataset["data_id"]: dataset["status"] for dataset in datasets_statuses } diff --git a/cognee/modules/pipelines/operations/log_pipeline_status.py b/cognee/modules/pipelines/operations/log_pipeline_status.py index 94872dee4..c0f08cd2a 100644 --- a/cognee/modules/pipelines/operations/log_pipeline_status.py +++ b/cognee/modules/pipelines/operations/log_pipeline_status.py @@ -2,14 +2,17 @@ from uuid import UUID from cognee.infrastructure.databases.relational import get_relational_engine from ..models.PipelineRun import PipelineRun + async def log_pipeline_status(run_id: UUID, status: str, run_info: dict): db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - session.add(PipelineRun( - run_id = run_id, - status = status, - run_info = run_info, - )) + session.add( + PipelineRun( + run_id=run_id, + status=status, + run_info=run_info, + ) + ) await session.commit() diff --git a/cognee/modules/pipelines/operations/run_parallel.py b/cognee/modules/pipelines/operations/run_parallel.py index ab78b8300..d1774299b 100644 --- a/cognee/modules/pipelines/operations/run_parallel.py +++ b/cognee/modules/pipelines/operations/run_parallel.py @@ -2,6 +2,7 @@ from typing import Any, Callable, Generator, List import asyncio from ..tasks.Task import Task + def run_tasks_parallel(tasks: List[Task]) -> Callable[[Any], Generator[Any, Any, Any]]: async def parallel_run(*args, **kwargs): parallel_tasks = [asyncio.create_task(task.run(*args, **kwargs)) for task in tasks] diff --git a/cognee/modules/pipelines/operations/run_tasks.py b/cognee/modules/pipelines/operations/run_tasks.py index 35e32cf74..d5d7ef7a4 100644 --- a/cognee/modules/pipelines/operations/run_tasks.py +++ b/cognee/modules/pipelines/operations/run_tasks.py @@ -11,7 +11,8 @@ from ..tasks.Task import Task logger = logging.getLogger("run_tasks(tasks: [Task], data)") -async def run_tasks_base(tasks: list[Task], data = None, user: User = None): + +async def run_tasks_base(tasks: list[Task], data=None, user: User = None): if len(tasks) == 0: yield data return @@ -25,9 +26,13 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): if inspect.isasyncgenfunction(running_task.executable): logger.info("Async generator task started: `%s`", running_task.executable.__name__) - send_telemetry("Async Generator Task Started", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Async Generator Task Started", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) try: results = [] @@ -40,7 +45,7 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): async for result in run_tasks_base( leftover_tasks, results[0] if next_task_batch_size == 1 else results, - user = user, + user=user, ): yield result @@ -53,26 +58,38 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): results = [] logger.info("Async generator task completed: `%s`", running_task.executable.__name__) - send_telemetry("Async Generator Task Completed", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Async Generator Task Completed", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) except Exception as error: logger.error( "Async generator task errored: `%s`\n%s\n", running_task.executable.__name__, str(error), - exc_info = True, + exc_info=True, + ) + send_telemetry( + "Async Generator Task Errored", + user.id, + { + "task_name": running_task.executable.__name__, + }, ) - send_telemetry("Async Generator Task Errored", user.id, { - "task_name": running_task.executable.__name__, - }) raise error elif inspect.isgeneratorfunction(running_task.executable): logger.info("Generator task started: `%s`", running_task.executable.__name__) - send_telemetry("Generator Task Started", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Generator Task Started", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) try: results = [] @@ -80,7 +97,9 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): results.append(partial_result) if len(results) == next_task_batch_size: - async for result in run_tasks_base(leftover_tasks, results[0] if next_task_batch_size == 1 else results, user): + async for result in run_tasks_base( + leftover_tasks, results[0] if next_task_batch_size == 1 else results, user + ): yield result results = [] @@ -92,26 +111,38 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): results = [] logger.info("Generator task completed: `%s`", running_task.executable.__name__) - send_telemetry("Generator Task Completed", user_id = user.id, additional_properties = { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Generator Task Completed", + user_id=user.id, + additional_properties={ + "task_name": running_task.executable.__name__, + }, + ) except Exception as error: logger.error( "Generator task errored: `%s`\n%s\n", running_task.executable.__name__, str(error), - exc_info = True, + exc_info=True, + ) + send_telemetry( + "Generator Task Errored", + user_id=user.id, + additional_properties={ + "task_name": running_task.executable.__name__, + }, ) - send_telemetry("Generator Task Errored", user_id = user.id, additional_properties = { - "task_name": running_task.executable.__name__, - }) raise error elif inspect.iscoroutinefunction(running_task.executable): logger.info("Coroutine task started: `%s`", running_task.executable.__name__) - send_telemetry("Coroutine Task Started", user_id = user.id, additional_properties = { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Coroutine Task Started", + user_id=user.id, + additional_properties={ + "task_name": running_task.executable.__name__, + }, + ) try: task_result = await running_task.run(*args) @@ -119,26 +150,38 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): yield result logger.info("Coroutine task completed: `%s`", running_task.executable.__name__) - send_telemetry("Coroutine Task Completed", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Coroutine Task Completed", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) except Exception as error: logger.error( "Coroutine task errored: `%s`\n%s\n", running_task.executable.__name__, str(error), - exc_info = True, + exc_info=True, + ) + send_telemetry( + "Coroutine Task Errored", + user.id, + { + "task_name": running_task.executable.__name__, + }, ) - send_telemetry("Coroutine Task Errored", user.id, { - "task_name": running_task.executable.__name__, - }) raise error elif inspect.isfunction(running_task.executable): logger.info("Function task started: `%s`", running_task.executable.__name__) - send_telemetry("Function Task Started", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Function Task Started", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) try: task_result = running_task.run(*args) @@ -146,59 +189,78 @@ async def run_tasks_base(tasks: list[Task], data = None, user: User = None): yield result logger.info("Function task completed: `%s`", running_task.executable.__name__) - send_telemetry("Function Task Completed", user.id, { - "task_name": running_task.executable.__name__, - }) + send_telemetry( + "Function Task Completed", + user.id, + { + "task_name": running_task.executable.__name__, + }, + ) except Exception as error: logger.error( "Function task errored: `%s`\n%s\n", running_task.executable.__name__, str(error), - exc_info = True, + exc_info=True, + ) + send_telemetry( + "Function Task Errored", + user.id, + { + "task_name": running_task.executable.__name__, + }, ) - send_telemetry("Function Task Errored", user.id, { - "task_name": running_task.executable.__name__, - }) raise error -async def run_tasks_with_telemetry(tasks: list[Task], data, pipeline_name: str): +async def run_tasks_with_telemetry(tasks: list[Task], data, pipeline_name: str): config = get_current_settings() - - logger.debug("\nRunning pipeline with configuration:\n%s\n", json.dumps(config, indent = 1)) - + + logger.debug("\nRunning pipeline with configuration:\n%s\n", json.dumps(config, indent=1)) + user = await get_default_user() - + try: logger.info("Pipeline run started: `%s`", pipeline_name) - send_telemetry("Pipeline Run Started", - user.id, - additional_properties = {"pipeline_name": pipeline_name, } | config - ) - + send_telemetry( + "Pipeline Run Started", + user.id, + additional_properties={ + "pipeline_name": pipeline_name, + } + | config, + ) + async for result in run_tasks_base(tasks, data, user): yield result logger.info("Pipeline run completed: `%s`", pipeline_name) - send_telemetry("Pipeline Run Completed", - user.id, - additional_properties = {"pipeline_name": pipeline_name, } - ) + send_telemetry( + "Pipeline Run Completed", + user.id, + additional_properties={ + "pipeline_name": pipeline_name, + }, + ) except Exception as error: logger.error( "Pipeline run errored: `%s`\n%s\n", pipeline_name, str(error), - exc_info = True, + exc_info=True, + ) + send_telemetry( + "Pipeline Run Errored", + user.id, + additional_properties={ + "pipeline_name": pipeline_name, + } + | config, ) - send_telemetry("Pipeline Run Errored", - user.id, - additional_properties = {"pipeline_name": pipeline_name, } | config - ) raise error -async def run_tasks(tasks: list[Task], data = None, pipeline_name: str = "default_pipeline"): - + +async def run_tasks(tasks: list[Task], data=None, pipeline_name: str = "default_pipeline"): async for result in run_tasks_with_telemetry(tasks, data, pipeline_name): yield result diff --git a/cognee/modules/pipelines/tasks/Task.py b/cognee/modules/pipelines/tasks/Task.py index 7de60643a..753152d0d 100644 --- a/cognee/modules/pipelines/tasks/Task.py +++ b/cognee/modules/pipelines/tasks/Task.py @@ -1,6 +1,7 @@ from typing import Union, Callable, Any, Coroutine, Generator, AsyncGenerator -class Task(): + +class Task: executable: Union[ Callable[..., Any], Callable[..., Coroutine[Any, Any, Any]], @@ -12,12 +13,9 @@ class Task(): } default_params: dict[str, Any] = {} - def __init__(self, executable, *args, task_config = None, **kwargs): + def __init__(self, executable, *args, task_config=None, **kwargs): self.executable = executable - self.default_params = { - "args": args, - "kwargs": kwargs - } + self.default_params = {"args": args, "kwargs": kwargs} if task_config is not None: self.task_config = task_config @@ -27,6 +25,6 @@ class Task(): def run(self, *args, **kwargs): combined_args = args + self.default_params["args"] - combined_kwargs = { **self.default_params["kwargs"], **kwargs } + combined_kwargs = {**self.default_params["kwargs"], **kwargs} return self.executable(*combined_args, **combined_kwargs) diff --git a/cognee/modules/retrieval/brute_force_triplet_search.py b/cognee/modules/retrieval/brute_force_triplet_search.py index b5ee5b612..9c778505d 100644 --- a/cognee/modules/retrieval/brute_force_triplet_search.py +++ b/cognee/modules/retrieval/brute_force_triplet_search.py @@ -12,6 +12,7 @@ from cognee.shared.utils import send_telemetry def format_triplets(edges): print("\n\n\n") + def filter_attributes(obj, attributes): """Helper function to filter out non-None properties, including nested dicts.""" result = {} @@ -20,7 +21,9 @@ def format_triplets(edges): if value is not None: # If the value is a dict, extract relevant keys from it if isinstance(value, dict): - nested_values = {k: v for k, v in value.items() if k in attributes and v is not None} + nested_values = { + k: v for k, v in value.items() if k in attributes and v is not None + } result[attr] = nested_values else: result[attr] = value @@ -40,17 +43,15 @@ def format_triplets(edges): edge_info = {key: value for key, value in edge_attributes.items() if value is not None} # Create the formatted triplet - triplet = ( - f"Node1: {node1_info}\n" - f"Edge: {edge_info}\n" - f"Node2: {node2_info}\n\n\n" - ) + triplet = f"Node1: {node1_info}\nEdge: {edge_info}\nNode2: {node2_info}\n\n\n" triplets.append(triplet) return "".join(triplets) -async def brute_force_triplet_search(query: str, user: User = None, top_k = 5, collections = None) -> list: +async def brute_force_triplet_search( + query: str, user: User = None, top_k=5, collections=None +) -> list: if user is None: user = await get_default_user() @@ -61,7 +62,9 @@ async def brute_force_triplet_search(query: str, user: User = None, top_k = 5, c return retrieved_results -def delete_duplicated_vector_db_elements(collections, results): #:TODO: This is just for now to fix vector db duplicates +def delete_duplicated_vector_db_elements( + collections, results +): #:TODO: This is just for now to fix vector db duplicates results_dict = {} for collection, results in zip(collections, results): seen_ids = set() @@ -78,22 +81,19 @@ def delete_duplicated_vector_db_elements(collections, results): #:TODO: This is async def brute_force_search( - query: str, - user: User, - top_k: int, - collections: List[str] = None + query: str, user: User, top_k: int, collections: List[str] = None ) -> list: """ - Performs a brute force search to retrieve the top triplets from the graph. + Performs a brute force search to retrieve the top triplets from the graph. - Args: - query (str): The search query. - user (User): The user performing the search. - top_k (int): The number of top results to retrieve. - collections (Optional[List[str]]): List of collections to query. Defaults to predefined collections. + Args: + query (str): The search query. + user (User): The user performing the search. + top_k (int): The number of top results to retrieve. + collections (Optional[List[str]]): List of collections to query. Defaults to predefined collections. - Returns: - list: The top triplet results. + Returns: + list: The top triplet results. """ if not query or not isinstance(query, str): raise ValueError("The query must be a non-empty string.") @@ -101,7 +101,12 @@ async def brute_force_search( raise ValueError("top_k must be a positive integer.") if collections is None: - collections = ["entity_name", "text_summary_text", "entity_type_name", "document_chunk_text"] + collections = [ + "entity_name", + "text_summary_text", + "entity_type_name", + "document_chunk_text", + ] try: vector_engine = get_vector_engine() @@ -114,7 +119,10 @@ async def brute_force_search( try: results = await asyncio.gather( - *[vector_engine.get_distance_from_collection_elements(collection, query_text=query) for collection in collections] + *[ + vector_engine.get_distance_from_collection_elements(collection, query_text=query) + for collection in collections + ] ) ############################################# :TODO: Change when vector db does not contain duplicates @@ -124,13 +132,11 @@ async def brute_force_search( memory_fragment = CogneeGraph() - await memory_fragment.project_graph_from_db(graph_engine, - node_properties_to_project=['id', - 'description', - 'name', - 'type', - 'text'], - edge_properties_to_project=['relationship_name']) + await memory_fragment.project_graph_from_db( + graph_engine, + node_properties_to_project=["id", "description", "name", "type", "text"], + edge_properties_to_project=["relationship_name"], + ) await memory_fragment.map_vector_distances_to_graph_nodes(node_distances=node_distances) @@ -145,6 +151,8 @@ async def brute_force_search( return results except Exception as e: - logging.error("Error during brute force search for user: %s, query: %s. Error: %s", user.id, query, e) + logging.error( + "Error during brute force search for user: %s, query: %s. Error: %s", user.id, query, e + ) send_telemetry("cognee.brute_force_triplet_search EXECUTION FAILED", user.id) raise RuntimeError("An error occurred during brute force search") from e diff --git a/cognee/modules/retrieval/description_to_codepart_search.py b/cognee/modules/retrieval/description_to_codepart_search.py index e1da9a43f..243fdbde3 100644 --- a/cognee/modules/retrieval/description_to_codepart_search.py +++ b/cognee/modules/retrieval/description_to_codepart_search.py @@ -8,24 +8,26 @@ from cognee.modules.graph.cognee_graph.CogneeGraph import CogneeGraph from cognee.modules.users.methods import get_default_user from cognee.modules.users.models import User from cognee.shared.utils import send_telemetry +from cognee.api.v1.search import SearchType +from cognee.api.v1.search.search_v2 import search +from cognee.infrastructure.llm.get_llm_client import get_llm_client -async def code_description_to_code_part_search(query: str, user: User = None, top_k = 2) -> list: +async def code_description_to_code_part_search( + query: str, include_docs=False, user: User = None, top_k=5 +) -> list: if user is None: user = await get_default_user() if user is None: raise PermissionError("No user found in the system. Please create a user.") - retrieved_codeparts = await code_description_to_code_part(query, user, top_k) + retrieved_codeparts = await code_description_to_code_part(query, user, top_k, include_docs) return retrieved_codeparts - async def code_description_to_code_part( - query: str, - user: User, - top_k: int + query: str, user: User, top_k: int, include_docs: bool = False ) -> List[str]: """ Maps a code description query to relevant code parts using a CodeGraph pipeline. @@ -34,6 +36,7 @@ async def code_description_to_code_part( query (str): The search query describing the code parts. user (User): The user performing the search. top_k (int): Number of codegraph descriptions to match ( num of corresponding codeparts will be higher) + include_docs(bool): Boolean showing whether we have the docs in the graph or not Returns: Set[str]: A set of unique code parts matching the query. @@ -55,26 +58,53 @@ async def code_description_to_code_part( raise RuntimeError("System initialization error. Please try again later.") from init_error send_telemetry("code_description_to_code_part_search EXECUTION STARTED", user.id) - logging.info("Search initiated by user %s with query: '%s' and top_k: %d", user.id, query, top_k) + logging.info( + "Search initiated by user %s with query: '%s' and top_k: %d", user.id, query, top_k + ) try: - results = await vector_engine.search( + if include_docs: + search_results = await search(SearchType.INSIGHTS, query_text=query) + + concatenated_descriptions = " ".join( + obj["description"] + for tpl in search_results + for obj in tpl + if isinstance(obj, dict) and "description" in obj + ) + + llm_client = get_llm_client() + context_from_documents = await llm_client.acreate_structured_output( + text_input=f"The retrieved context from documents is {concatenated_descriptions}.", + system_prompt="You are a Senior Software Engineer, summarize the context from documents" + f" in a way that it is gonna be provided next to codeparts as context" + f" while trying to solve this github issue connected to the project: {query}]", + response_model=str, + ) + + code_summaries = await vector_engine.search( "code_summary_text", query_text=query, limit=top_k ) - if not results: + if not code_summaries: logging.warning("No results found for query: '%s' by user: %s", query, user.id) return [] memory_fragment = CogneeGraph() await memory_fragment.project_graph_from_db( graph_engine, - node_properties_to_project=['id', 'type', 'text', 'source_code'], - edge_properties_to_project=['relationship_name'] + node_properties_to_project=[ + "id", + "type", + "text", + "source_code", + "pydantic_type", + ], + edge_properties_to_project=["relationship_name"], ) code_pieces_to_return = set() - for node in results: + for node in code_summaries: node_id = str(node.id) node_to_search_from = memory_fragment.get_node(node_id) @@ -83,25 +113,47 @@ async def code_description_to_code_part( continue for code_file in node_to_search_from.get_skeleton_neighbours(): - for code_file_edge in code_file.get_skeleton_edges(): - if code_file_edge.get_attribute('relationship_name') == 'contains': - code_pieces_to_return.add(code_file_edge.get_destination_node()) + if code_file.get_attribute("pydantic_type") == "SourceCodeChunk": + for code_file_edge in code_file.get_skeleton_edges(): + if code_file_edge.get_attribute("relationship_name") == "code_chunk_of": + code_pieces_to_return.add(code_file_edge.get_destination_node()) + elif code_file.get_attribute("pydantic_type") == "CodePart": + code_pieces_to_return.add(code_file) + elif code_file.get_attribute("pydantic_type") == "CodeFile": + for code_file_edge in code_file.get_skeleton_edges(): + if code_file_edge.get_attribute("relationship_name") == "contains": + code_pieces_to_return.add(code_file_edge.get_destination_node()) - logging.info("Search completed for user: %s, query: '%s'. Found %d code pieces.", - user.id, query, len(code_pieces_to_return)) + logging.info( + "Search completed for user: %s, query: '%s'. Found %d code pieces.", + user.id, + query, + len(code_pieces_to_return), + ) - return list(code_pieces_to_return) + context = "" + for code_piece in code_pieces_to_return: + context = context + code_piece.get_attribute("source_code") + + if include_docs: + context = context_from_documents + context + + return context except Exception as exec_error: logging.error( "Error during code description to code part search for user: %s, query: '%s'. Error: %s", - user.id, query, exec_error, exc_info=True + user.id, + query, + exec_error, + exc_info=True, ) send_telemetry("code_description_to_code_part_search EXECUTION FAILED", user.id) raise RuntimeError("An error occurred while processing your request.") from exec_error if __name__ == "__main__": + async def main(): query = "I am looking for a class with blue eyes" user = None @@ -112,5 +164,3 @@ if __name__ == "__main__": print(f"An error occurred: {e}") asyncio.run(main()) - - diff --git a/cognee/modules/search/models/Query.py b/cognee/modules/search/models/Query.py index 182196333..ac19286b6 100644 --- a/cognee/modules/search/models/Query.py +++ b/cognee/modules/search/models/Query.py @@ -3,14 +3,15 @@ from datetime import datetime, timezone from sqlalchemy import Column, DateTime, String, UUID from cognee.infrastructure.databases.relational import Base + class Query(Base): __tablename__ = "queries" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) text = Column(String) query_type = Column(String) user_id = Column(UUID) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) diff --git a/cognee/modules/search/models/Result.py b/cognee/modules/search/models/Result.py index acda59ddb..cff097704 100644 --- a/cognee/modules/search/models/Result.py +++ b/cognee/modules/search/models/Result.py @@ -3,14 +3,15 @@ from uuid import uuid4 from sqlalchemy import Column, DateTime, Text, UUID from cognee.infrastructure.databases.relational import Base + class Result(Base): __tablename__ = "results" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) value = Column(Text) query_id = Column(UUID) - user_id = Column(UUID, index = True) + user_id = Column(UUID, index=True) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) diff --git a/cognee/modules/search/operations/get_history.py b/cognee/modules/search/operations/get_history.py index 831c4acc2..4ce6bac0c 100644 --- a/cognee/modules/search/operations/get_history.py +++ b/cognee/modules/search/operations/get_history.py @@ -4,24 +4,17 @@ from cognee.infrastructure.databases.relational import get_relational_engine from ..models.Query import Query from ..models.Result import Result + async def get_history(user_id: UUID, limit: int = 10) -> list[Result]: db_engine = get_relational_engine() queries_query = select( - Query.id, - Query.text.label("text"), - Query.created_at, - literal("user").label("user") - ) \ - .filter(Query.user_id == user_id) + Query.id, Query.text.label("text"), Query.created_at, literal("user").label("user") + ).filter(Query.user_id == user_id) results_query = select( - Result.id, - Result.value.label("text"), - Result.created_at, - literal("system").label("user") - ) \ - .filter(Result.user_id == user_id) + Result.id, Result.value.label("text"), Result.created_at, literal("system").label("user") + ).filter(Result.user_id == user_id) history_query = queries_query.union(results_query).order_by("created_at").limit(limit) diff --git a/cognee/modules/search/operations/get_queries.py b/cognee/modules/search/operations/get_queries.py index ded10a8e5..921dbfff3 100644 --- a/cognee/modules/search/operations/get_queries.py +++ b/cognee/modules/search/operations/get_queries.py @@ -3,15 +3,18 @@ from sqlalchemy import select from cognee.infrastructure.databases.relational import get_relational_engine from ..models.Query import Query + async def get_queries(user_id: UUID, limit: int) -> list[Query]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - queries = (await session.scalars( - select(Query) + queries = ( + await session.scalars( + select(Query) .filter(Query.user_id == user_id) .order_by(Query.created_at.desc()) .limit(limit) - )).all() + ) + ).all() return queries diff --git a/cognee/modules/search/operations/get_results.py b/cognee/modules/search/operations/get_results.py index 7f90a3f0f..a15cda44e 100644 --- a/cognee/modules/search/operations/get_results.py +++ b/cognee/modules/search/operations/get_results.py @@ -3,15 +3,18 @@ from sqlalchemy import select from cognee.infrastructure.databases.relational import get_relational_engine from ..models.Result import Result + async def get_results(user_id: UUID, limit: int = 10) -> list[Result]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - results = (await session.scalars( - select(Result) + results = ( + await session.scalars( + select(Result) .filter(Result.user_id == user_id) .order_by(Result.created_at.desc()) .limit(limit) - )).all() + ) + ).all() return results diff --git a/cognee/modules/search/operations/log_query.py b/cognee/modules/search/operations/log_query.py index 02ed3f157..d46a82890 100644 --- a/cognee/modules/search/operations/log_query.py +++ b/cognee/modules/search/operations/log_query.py @@ -2,14 +2,15 @@ from uuid import UUID from cognee.infrastructure.databases.relational import get_relational_engine from ..models.Query import Query + async def log_query(query_text: str, query_type: str, user_id: UUID) -> Query: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: query = Query( - text = query_text, - query_type = query_type, - user_id = user_id, + text=query_text, + query_type=query_type, + user_id=user_id, ) session.add(query) diff --git a/cognee/modules/search/operations/log_result.py b/cognee/modules/search/operations/log_result.py index b81e0b447..e03c45185 100644 --- a/cognee/modules/search/operations/log_result.py +++ b/cognee/modules/search/operations/log_result.py @@ -2,14 +2,17 @@ from uuid import UUID from cognee.infrastructure.databases.relational import get_relational_engine from ..models.Result import Result + async def log_result(query_id: UUID, result: str, user_id: UUID): db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - session.add(Result( - value = result, - query_id = query_id, - user_id = user_id, - )) + session.add( + Result( + value=result, + query_id=query_id, + user_id=user_id, + ) + ) await session.commit() diff --git a/cognee/modules/settings/get_current_settings.py b/cognee/modules/settings/get_current_settings.py index 3d6bad896..2fb1d3c81 100644 --- a/cognee/modules/settings/get_current_settings.py +++ b/cognee/modules/settings/get_current_settings.py @@ -4,28 +4,34 @@ from cognee.infrastructure.databases.graph import get_graph_config from cognee.infrastructure.databases.vector import get_vectordb_config from cognee.infrastructure.databases.relational.config import get_relational_config + class LLMConfig(TypedDict): model: str provider: str + class VectorDBConfig(TypedDict): url: str provider: str + class GraphDBConfig(TypedDict): url: str provider: str + class RelationalConfig(TypedDict): url: str provider: str + class SettingsDict(TypedDict): llm: LLMConfig graph: GraphDBConfig vector: VectorDBConfig relational: RelationalConfig + def get_current_settings() -> SettingsDict: llm_config = get_llm_config() graph_config = get_graph_config() @@ -33,22 +39,22 @@ def get_current_settings() -> SettingsDict: relational_config = get_relational_config() return dict( - llm = { + llm={ "provider": llm_config.llm_provider, "model": llm_config.llm_model, }, - graph = { + graph={ "provider": graph_config.graph_database_provider, "url": graph_config.graph_database_url or graph_config.graph_file_path, }, - vector = { + vector={ "provider": vector_config.vector_db_provider, "url": vector_config.vector_db_url, }, - relational = { + relational={ "provider": relational_config.db_provider, - "url": f"{relational_config.db_host}:{relational_config.db_port}" \ - if relational_config.db_host \ - else f"{relational_config.db_path}/{relational_config.db_name}", + "url": f"{relational_config.db_host}:{relational_config.db_port}" + if relational_config.db_host + else f"{relational_config.db_path}/{relational_config.db_name}", }, ) diff --git a/cognee/modules/settings/get_settings.py b/cognee/modules/settings/get_settings.py index b67b9d6ab..93fd67cff 100644 --- a/cognee/modules/settings/get_settings.py +++ b/cognee/modules/settings/get_settings.py @@ -3,15 +3,18 @@ from pydantic import BaseModel from cognee.infrastructure.databases.vector import get_vectordb_config from cognee.infrastructure.llm import get_llm_config + class ConfigChoice(BaseModel): value: str label: str + class ModelName(Enum): openai = "openai" ollama = "ollama" anthropic = "anthropic" - + + class LLMConfig(BaseModel): api_key: str model: ConfigChoice @@ -19,98 +22,130 @@ class LLMConfig(BaseModel): models: dict[str, list[ConfigChoice]] providers: list[ConfigChoice] + class VectorDBConfig(BaseModel): api_key: str url: str provider: ConfigChoice providers: list[ConfigChoice] + class SettingsDict(BaseModel): llm: LLMConfig vector_db: VectorDBConfig + def get_settings() -> SettingsDict: llm_config = get_llm_config() - vector_dbs = [{ - "value": "weaviate", - "label": "Weaviate", - }, { - "value": "qdrant", - "label": "Qdrant", - }, { - "value": "lancedb", - "label": "LanceDB", - }, { - "value": "pgvector", - "label": "PGVector", - }] + vector_dbs = [ + { + "value": "weaviate", + "label": "Weaviate", + }, + { + "value": "qdrant", + "label": "Qdrant", + }, + { + "value": "lancedb", + "label": "LanceDB", + }, + { + "value": "pgvector", + "label": "PGVector", + }, + ] vector_config = get_vectordb_config() - llm_providers = [{ - "value": "openai", - "label": "OpenAI", - }, { - "value": "ollama", - "label": "Ollama", - }, { - "value": "anthropic", - "label": "Anthropic", - }] + llm_providers = [ + { + "value": "openai", + "label": "OpenAI", + }, + { + "value": "ollama", + "label": "Ollama", + }, + { + "value": "anthropic", + "label": "Anthropic", + }, + ] - return SettingsDict.model_validate(dict( - llm = { - "provider": { - "label": llm_config.llm_provider, - "value": llm_config.llm_provider, - } if llm_config.llm_provider else llm_providers[0], - "model": { - "value": llm_config.llm_model, - "label": llm_config.llm_model, - } if llm_config.llm_model else None, - "api_key": (llm_config.llm_api_key[:-10] + "**********") if llm_config.llm_api_key else None, - "providers": llm_providers, - "models": { - "openai": [{ - "value": "gpt-4o-mini", - "label": "gpt-4o-mini", - }, { - "value": "gpt-4o", - "label": "gpt-4o", - }, { - "value": "gpt-4-turbo", - "label": "gpt-4-turbo", - }, { - "value": "gpt-3.5-turbo", - "label": "gpt-3.5-turbo", - }], - "ollama": [{ - "value": "llama3", - "label": "llama3", - }, { - "value": "mistral", - "label": "mistral", - }], - "anthropic": [{ - "value": "Claude 3 Opus", - "label": "Claude 3 Opus", - }, { - "value": "Claude 3 Sonnet", - "label": "Claude 3 Sonnet", - }, { - "value": "Claude 3 Haiku", - "label": "Claude 3 Haiku", - }] + return SettingsDict.model_validate( + dict( + llm={ + "provider": { + "label": llm_config.llm_provider, + "value": llm_config.llm_provider, + } + if llm_config.llm_provider + else llm_providers[0], + "model": { + "value": llm_config.llm_model, + "label": llm_config.llm_model, + } + if llm_config.llm_model + else None, + "api_key": (llm_config.llm_api_key[:-10] + "**********") + if llm_config.llm_api_key + else None, + "providers": llm_providers, + "models": { + "openai": [ + { + "value": "gpt-4o-mini", + "label": "gpt-4o-mini", + }, + { + "value": "gpt-4o", + "label": "gpt-4o", + }, + { + "value": "gpt-4-turbo", + "label": "gpt-4-turbo", + }, + { + "value": "gpt-3.5-turbo", + "label": "gpt-3.5-turbo", + }, + ], + "ollama": [ + { + "value": "llama3", + "label": "llama3", + }, + { + "value": "mistral", + "label": "mistral", + }, + ], + "anthropic": [ + { + "value": "Claude 3 Opus", + "label": "Claude 3 Opus", + }, + { + "value": "Claude 3 Sonnet", + "label": "Claude 3 Sonnet", + }, + { + "value": "Claude 3 Haiku", + "label": "Claude 3 Haiku", + }, + ], + }, }, - }, - vector_db = { - "provider": { - "label": vector_config.vector_db_provider, - "value": vector_config.vector_db_provider.lower(), + vector_db={ + "provider": { + "label": vector_config.vector_db_provider, + "value": vector_config.vector_db_provider.lower(), + }, + "url": vector_config.vector_db_url, + "api_key": vector_config.vector_db_key, + "providers": vector_dbs, }, - "url": vector_config.vector_db_url, - "api_key": vector_config.vector_db_key, - "providers": vector_dbs, - }, - )) + ) + ) diff --git a/cognee/modules/settings/save_llm_config.py b/cognee/modules/settings/save_llm_config.py index 83bb91d50..620d6bc32 100644 --- a/cognee/modules/settings/save_llm_config.py +++ b/cognee/modules/settings/save_llm_config.py @@ -1,11 +1,13 @@ from pydantic import BaseModel from cognee.infrastructure.llm import get_llm_config + class LLMConfig(BaseModel): api_key: str model: str provider: str + async def save_llm_config(new_llm_config: LLMConfig): llm_config = get_llm_config() diff --git a/cognee/modules/settings/save_vector_db_config.py b/cognee/modules/settings/save_vector_db_config.py index 1e0b683ea..7c48435a8 100644 --- a/cognee/modules/settings/save_vector_db_config.py +++ b/cognee/modules/settings/save_vector_db_config.py @@ -2,11 +2,13 @@ from typing import Union, Literal from pydantic import BaseModel from cognee.infrastructure.databases.vector import get_vectordb_config + class VectorDBConfig(BaseModel): url: str api_key: str provider: Union[Literal["lancedb"], Literal["qdrant"], Literal["weaviate"], Literal["pgvector"]] + async def save_vector_db_config(vector_db_config: VectorDBConfig): vector_config = get_vectordb_config() diff --git a/cognee/modules/storage/utils/__init__.py b/cognee/modules/storage/utils/__init__.py index a399e8a82..a877826db 100644 --- a/cognee/modules/storage/utils/__init__.py +++ b/cognee/modules/storage/utils/__init__.py @@ -2,9 +2,11 @@ import json from uuid import UUID from datetime import datetime from pydantic_core import PydanticUndefined +from pydantic import create_model from cognee.infrastructure.engine import DataPoint + class JSONEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): @@ -15,32 +17,30 @@ class JSONEncoder(json.JSONEncoder): return json.JSONEncoder.default(self, obj) -from pydantic import create_model - def copy_model(model: DataPoint, include_fields: dict = {}, exclude_fields: list = []): fields = { name: (field.annotation, field.default if field.default is not None else PydanticUndefined) - for name, field in model.model_fields.items() - if name not in exclude_fields + for name, field in model.model_fields.items() + if name not in exclude_fields } - final_fields = { - **fields, - **include_fields - } + final_fields = {**fields, **include_fields} model = create_model(model.__name__, **final_fields) model.model_rebuild() return model + def get_own_properties(data_point: DataPoint): properties = {} for field_name, field_value in data_point: - if field_name == "_metadata" \ - or isinstance(field_value, dict) \ - or isinstance(field_value, DataPoint) \ - or (isinstance(field_value, list) and isinstance(field_value[0], DataPoint)): + if ( + field_name == "_metadata" + or isinstance(field_value, dict) + or isinstance(field_value, DataPoint) + or (isinstance(field_value, list) and isinstance(field_value[0], DataPoint)) + ): continue properties[field_name] = field_value diff --git a/cognee/modules/users/authentication/get_auth_backend.py b/cognee/modules/users/authentication/get_auth_backend.py index 3e5017ffa..c9d2b85b7 100644 --- a/cognee/modules/users/authentication/get_auth_backend.py +++ b/cognee/modules/users/authentication/get_auth_backend.py @@ -7,18 +7,19 @@ from fastapi_users.authentication import ( JWTStrategy, ) + @lru_cache def get_auth_backend(): - bearer_transport = BearerTransport(tokenUrl = "auth/jwt/login") + bearer_transport = BearerTransport(tokenUrl="auth/jwt/login") def get_jwt_strategy() -> JWTStrategy[models.UP, models.ID]: secret = os.getenv("FASTAPI_USERS_JWT_SECRET", "super_secret") - return JWTStrategy(secret, lifetime_seconds = 3600) + return JWTStrategy(secret, lifetime_seconds=3600) auth_backend = AuthenticationBackend( - name = "jwt", - transport = bearer_transport, - get_strategy = get_jwt_strategy, + name="jwt", + transport=bearer_transport, + get_strategy=get_jwt_strategy, ) return auth_backend diff --git a/cognee/modules/users/authentication/methods/authenticate_user.py b/cognee/modules/users/authentication/methods/authenticate_user.py index 5095092f4..026304695 100644 --- a/cognee/modules/users/authentication/methods/authenticate_user.py +++ b/cognee/modules/users/authentication/methods/authenticate_user.py @@ -4,6 +4,7 @@ from cognee.infrastructure.databases.relational import get_relational_engine from ...get_user_manager import get_user_manager_context from ...get_user_db import get_user_db_context + async def authenticate_user(email: str, password: str): try: relational_engine = get_relational_engine() @@ -11,7 +12,7 @@ async def authenticate_user(email: str, password: str): async with relational_engine.get_async_session() as session: async with get_user_db_context(session) as user_db: async with get_user_manager_context(user_db) as user_manager: - credentials = OAuth2PasswordRequestForm(username = email, password = password) + credentials = OAuth2PasswordRequestForm(username=email, password=password) user = await user_manager.authenticate(credentials) if user is None or not user.is_active: return None diff --git a/cognee/modules/users/exceptions/__init__.py b/cognee/modules/users/exceptions/__init__.py index 70e6e9d2a..8d1a9818c 100644 --- a/cognee/modules/users/exceptions/__init__.py +++ b/cognee/modules/users/exceptions/__init__.py @@ -8,4 +8,4 @@ from .exceptions import ( GroupNotFoundError, UserNotFoundError, PermissionDeniedError, -) \ No newline at end of file +) diff --git a/cognee/modules/users/exceptions/exceptions.py b/cognee/modules/users/exceptions/exceptions.py index 7dda702db..3c27b01e5 100644 --- a/cognee/modules/users/exceptions/exceptions.py +++ b/cognee/modules/users/exceptions/exceptions.py @@ -28,9 +28,9 @@ class UserNotFoundError(CogneeApiError): class PermissionDeniedError(CogneeApiError): def __init__( - self, - message: str = "User does not have permission on documents.", - name: str = "PermissionDeniedError", - status_code=status.HTTP_403_FORBIDDEN, + self, + message: str = "User does not have permission on documents.", + name: str = "PermissionDeniedError", + status_code=status.HTTP_403_FORBIDDEN, ): super().__init__(message, name, status_code) diff --git a/cognee/modules/users/get_fastapi_users.py b/cognee/modules/users/get_fastapi_users.py index 81abe3551..62cf7d692 100644 --- a/cognee/modules/users/get_fastapi_users.py +++ b/cognee/modules/users/get_fastapi_users.py @@ -6,6 +6,7 @@ from .authentication.get_auth_backend import get_auth_backend from .get_user_manager import get_user_manager from .models.User import User + @lru_cache def get_fastapi_users(): auth_backend = get_auth_backend() diff --git a/cognee/modules/users/get_user_db.py b/cognee/modules/users/get_user_db.py index e77ae54b4..80a6f7ba3 100644 --- a/cognee/modules/users/get_user_db.py +++ b/cognee/modules/users/get_user_db.py @@ -1,17 +1,20 @@ from typing import AsyncGenerator from fastapi import Depends +from contextlib import asynccontextmanager from sqlalchemy.ext.asyncio import AsyncSession from fastapi_users.db import SQLAlchemyUserDatabase from cognee.infrastructure.databases.relational import get_relational_engine from .models.User import User + async def get_async_session() -> AsyncGenerator[AsyncSession, None]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: yield session + async def get_user_db(session: AsyncSession = Depends(get_async_session)): yield SQLAlchemyUserDatabase(session, User) -from contextlib import asynccontextmanager + get_user_db_context = asynccontextmanager(get_user_db) diff --git a/cognee/modules/users/get_user_manager.py b/cognee/modules/users/get_user_manager.py index 30410a985..a1bd9e174 100644 --- a/cognee/modules/users/get_user_manager.py +++ b/cognee/modules/users/get_user_manager.py @@ -4,7 +4,7 @@ from typing import Optional from fastapi import Depends, Request from fastapi_users import BaseUserManager, UUIDIDMixin, models from fastapi_users.db import SQLAlchemyUserDatabase - +from contextlib import asynccontextmanager from .get_user_db import get_user_db from .models import User from .methods import get_user @@ -12,7 +12,9 @@ from fastapi_users.exceptions import UserNotExists class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): - reset_password_token_secret = os.getenv("FASTAPI_USERS_RESET_PASSWORD_TOKEN_SECRET", "super_secret") + reset_password_token_secret = os.getenv( + "FASTAPI_USERS_RESET_PASSWORD_TOKEN_SECRET", "super_secret" + ) verification_token_secret = os.getenv("FASTAPI_USERS_VERIFICATION_TOKEN_SECRET", "super_secret") async def get(self, id: models.ID) -> models.UP: @@ -43,8 +45,9 @@ class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): ): print(f"Verification requested for user {user.id}. Verification token: {token}") + async def get_user_manager(user_db: SQLAlchemyUserDatabase = Depends(get_user_db)): yield UserManager(user_db) -from contextlib import asynccontextmanager + get_user_manager_context = asynccontextmanager(get_user_manager) diff --git a/cognee/modules/users/methods/create_default_user.py b/cognee/modules/users/methods/create_default_user.py index 6cd8115a7..7000a2ad6 100644 --- a/cognee/modules/users/methods/create_default_user.py +++ b/cognee/modules/users/methods/create_default_user.py @@ -1,16 +1,17 @@ from .create_user import create_user + async def create_default_user(): default_user_email = "default_user@example.com" default_user_password = "default_password" user = await create_user( - email = default_user_email, - password = default_user_password, - is_superuser = False, - is_active = True, - is_verified = True, - auto_login = True, + email=default_user_email, + password=default_user_password, + is_superuser=False, + is_active=True, + is_verified=True, + auto_login=True, ) return user diff --git a/cognee/modules/users/methods/create_user.py b/cognee/modules/users/methods/create_user.py index cfe1dbd03..deae6fc8f 100644 --- a/cognee/modules/users/methods/create_user.py +++ b/cognee/modules/users/methods/create_user.py @@ -4,6 +4,7 @@ from ..get_user_manager import get_user_manager_context from ..get_user_db import get_user_db_context from ..models.User import UserCreate + async def create_user( email: str, password: str, @@ -20,11 +21,11 @@ async def create_user( async with get_user_manager_context(user_db) as user_manager: user = await user_manager.create( UserCreate( - email = email, - password = password, - is_superuser = is_superuser, - is_active = is_active, - is_verified = is_verified, + email=email, + password=password, + is_superuser=is_superuser, + is_active=is_active, + is_verified=is_verified, ) ) diff --git a/cognee/modules/users/methods/delete_user.py b/cognee/modules/users/methods/delete_user.py index dd0a585b6..3f92d815f 100644 --- a/cognee/modules/users/methods/delete_user.py +++ b/cognee/modules/users/methods/delete_user.py @@ -3,6 +3,7 @@ from cognee.infrastructure.databases.relational import get_relational_engine from ..get_user_manager import get_user_manager_context from ..get_user_db import get_user_db_context + async def delete_user(email: str): try: relational_engine = get_relational_engine() diff --git a/cognee/modules/users/methods/get_authenticated_user.py b/cognee/modules/users/methods/get_authenticated_user.py index cbc3c67ff..b088d14cb 100644 --- a/cognee/modules/users/methods/get_authenticated_user.py +++ b/cognee/modules/users/methods/get_authenticated_user.py @@ -2,4 +2,4 @@ from ..get_fastapi_users import get_fastapi_users fastapi_users = get_fastapi_users() -get_authenticated_user = fastapi_users.current_user(active = True, verified = True) +get_authenticated_user = fastapi_users.current_user(active=True, verified=True) diff --git a/cognee/modules/users/methods/get_default_user.py b/cognee/modules/users/methods/get_default_user.py index 9732515f3..c67d9d71f 100644 --- a/cognee/modules/users/methods/get_default_user.py +++ b/cognee/modules/users/methods/get_default_user.py @@ -4,12 +4,16 @@ from cognee.modules.users.models import User from cognee.infrastructure.databases.relational import get_relational_engine from .create_default_user import create_default_user + async def get_default_user(): db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - query = select(User).options(joinedload(User.groups))\ + query = ( + select(User) + .options(joinedload(User.groups)) .where(User.email == "default_user@example.com") + ) result = await session.execute(query) user = result.scalars().first() diff --git a/cognee/modules/users/methods/get_user.py b/cognee/modules/users/methods/get_user.py index bc7adb0b1..fe32491d8 100644 --- a/cognee/modules/users/methods/get_user.py +++ b/cognee/modules/users/methods/get_user.py @@ -4,12 +4,15 @@ from sqlalchemy.orm import joinedload from cognee.infrastructure.databases.relational import get_relational_engine from ..models import User + async def get_user(user_id: UUID): db_engine = get_relational_engine() async with db_engine.get_async_session() as session: - user = (await session.execute( - select(User).options(joinedload(User.groups)).where(User.id == user_id) - )).scalar() + user = ( + await session.execute( + select(User).options(joinedload(User.groups)).where(User.id == user_id) + ) + ).scalar() return user diff --git a/cognee/modules/users/models/ACL.py b/cognee/modules/users/models/ACL.py index f54d24224..c920db5f3 100644 --- a/cognee/modules/users/models/ACL.py +++ b/cognee/modules/users/models/ACL.py @@ -5,13 +5,14 @@ from sqlalchemy import Column, ForeignKey, DateTime, UUID from cognee.infrastructure.databases.relational import Base from .ACLResources import ACLResources + class ACL(Base): __tablename__ = "acls" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) principal_id = Column(UUID, ForeignKey("principals.id")) permission_id = Column(UUID, ForeignKey("permissions.id")) @@ -20,6 +21,6 @@ class ACL(Base): permission = relationship("Permission") resources: Mapped[list["Resource"]] = relationship( "Resource", - secondary = ACLResources.__tablename__, - back_populates = "acls", + secondary=ACLResources.__tablename__, + back_populates="acls", ) diff --git a/cognee/modules/users/models/ACLResources.py b/cognee/modules/users/models/ACLResources.py index 464fed2e8..020ced6c0 100644 --- a/cognee/modules/users/models/ACLResources.py +++ b/cognee/modules/users/models/ACLResources.py @@ -2,10 +2,11 @@ from datetime import datetime, timezone from sqlalchemy import Column, ForeignKey, DateTime, UUID from cognee.infrastructure.databases.relational import Base + class ACLResources(Base): __tablename__ = "acl_resources" - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) - acl_id = Column(UUID, ForeignKey("acls.id"), primary_key = True) - resource_id = Column(UUID, ForeignKey("resources.id"), primary_key = True) + acl_id = Column(UUID, ForeignKey("acls.id"), primary_key=True) + resource_id = Column(UUID, ForeignKey("resources.id"), primary_key=True) diff --git a/cognee/modules/users/models/Group.py b/cognee/modules/users/models/Group.py index 793decb35..8d6119327 100644 --- a/cognee/modules/users/models/Group.py +++ b/cognee/modules/users/models/Group.py @@ -3,17 +3,18 @@ from sqlalchemy import Column, String, ForeignKey, UUID from .Principal import Principal from .UserGroup import UserGroup + class Group(Principal): __tablename__ = "groups" - id = Column(UUID, ForeignKey("principals.id"), primary_key = True) + id = Column(UUID, ForeignKey("principals.id"), primary_key=True) - name = Column(String, unique = True, nullable = False, index = True) + name = Column(String, unique=True, nullable=False, index=True) users: Mapped[list["User"]] = relationship( "User", - secondary = UserGroup.__tablename__, - back_populates = "groups", + secondary=UserGroup.__tablename__, + back_populates="groups", ) __mapper_args__ = { diff --git a/cognee/modules/users/models/GroupPermission.py b/cognee/modules/users/models/GroupPermission.py new file mode 100644 index 000000000..fd2ec4b76 --- /dev/null +++ b/cognee/modules/users/models/GroupPermission.py @@ -0,0 +1,12 @@ +from datetime import datetime, timezone +from sqlalchemy import Column, ForeignKey, DateTime, UUID +from cognee.infrastructure.databases.relational import Base + + +class GroupPermission(Base): + __tablename__ = "group_permissions" + + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + + group_id = Column(UUID, ForeignKey("groups.id"), primary_key=True) + permission_id = Column(UUID, ForeignKey("permissions.id"), primary_key=True) diff --git a/cognee/modules/users/models/Permission.py b/cognee/modules/users/models/Permission.py index 3b1709371..46406f0b5 100644 --- a/cognee/modules/users/models/Permission.py +++ b/cognee/modules/users/models/Permission.py @@ -1,17 +1,19 @@ from uuid import uuid4 from datetime import datetime, timezone + # from sqlalchemy.orm import relationship from sqlalchemy import Column, DateTime, String, UUID from cognee.infrastructure.databases.relational import Base + class Permission(Base): __tablename__ = "permissions" - id = Column(UUID, primary_key = True, index = True, default = uuid4) + id = Column(UUID, primary_key=True, index=True, default=uuid4) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) - name = Column(String, unique = True, nullable = False, index = True) + name = Column(String, unique=True, nullable=False, index=True) # acls = relationship("ACL", back_populates = "permission") diff --git a/cognee/modules/users/models/Principal.py b/cognee/modules/users/models/Principal.py index dc6e51302..a595a636a 100644 --- a/cognee/modules/users/models/Principal.py +++ b/cognee/modules/users/models/Principal.py @@ -3,15 +3,16 @@ from datetime import datetime, timezone from sqlalchemy import Column, String, DateTime, UUID from cognee.infrastructure.databases.relational import Base + class Principal(Base): __tablename__ = "principals" - id = Column(UUID, primary_key = True, index = True, default = uuid4) + id = Column(UUID, primary_key=True, index=True, default=uuid4) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) - type = Column(String, nullable = False) + type = Column(String, nullable=False) __mapper_args__ = { "polymorphic_identity": "principal", diff --git a/cognee/modules/users/models/Resource.py b/cognee/modules/users/models/Resource.py index 563f96272..c7e3a148b 100644 --- a/cognee/modules/users/models/Resource.py +++ b/cognee/modules/users/models/Resource.py @@ -5,14 +5,15 @@ from sqlalchemy import Column, DateTime, UUID from cognee.infrastructure.databases.relational import Base from .ACLResources import ACLResources + class Resource(Base): __tablename__ = "resources" - id = Column(UUID, primary_key = True, default = uuid4) + id = Column(UUID, primary_key=True, default=uuid4) - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) - updated_at = Column(DateTime(timezone = True), onupdate = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime(timezone=True), onupdate=lambda: datetime.now(timezone.utc)) - resource_id = Column(UUID, nullable = False) + resource_id = Column(UUID, nullable=False) - acls = relationship("ACL", secondary = ACLResources.__tablename__, back_populates = "resources") + acls = relationship("ACL", secondary=ACLResources.__tablename__, back_populates="resources") diff --git a/cognee/modules/users/models/User.py b/cognee/modules/users/models/User.py index 3536ac948..0cbe75037 100644 --- a/cognee/modules/users/models/User.py +++ b/cognee/modules/users/models/User.py @@ -5,15 +5,17 @@ from fastapi_users.db import SQLAlchemyBaseUserTableUUID from .Principal import Principal from .UserGroup import UserGroup from .Group import Group +from fastapi_users import schemas + class User(SQLAlchemyBaseUserTableUUID, Principal): __tablename__ = "users" - id = Column(UUID, ForeignKey("principals.id"), primary_key = True) + id = Column(UUID, ForeignKey("principals.id"), primary_key=True) groups: Mapped[list["Group"]] = relationship( - secondary = UserGroup.__tablename__, - back_populates = "users", + secondary=UserGroup.__tablename__, + back_populates="users", ) __mapper_args__ = { @@ -22,13 +24,15 @@ class User(SQLAlchemyBaseUserTableUUID, Principal): # Keep these schemas in sync with User model -from fastapi_users import schemas + class UserRead(schemas.BaseUser[uuid_UUID]): pass + class UserCreate(schemas.BaseUserCreate): pass + class UserUpdate(schemas.BaseUserUpdate): pass diff --git a/cognee/modules/users/models/UserGroup.py b/cognee/modules/users/models/UserGroup.py index 5a85c9d3c..a4ce8f13d 100644 --- a/cognee/modules/users/models/UserGroup.py +++ b/cognee/modules/users/models/UserGroup.py @@ -2,10 +2,11 @@ from datetime import datetime, timezone from sqlalchemy import Column, ForeignKey, DateTime, UUID from cognee.infrastructure.databases.relational import Base + class UserGroup(Base): __tablename__ = "user_groups" - created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc)) + created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) - user_id = Column(UUID, ForeignKey("users.id"), primary_key = True) - group_id = Column(UUID, ForeignKey("groups.id"), primary_key = True) + user_id = Column(UUID, ForeignKey("users.id"), primary_key=True) + group_id = Column(UUID, ForeignKey("groups.id"), primary_key=True) diff --git a/cognee/modules/users/models/__init__.py b/cognee/modules/users/models/__init__.py index 7dc1bf8ca..a713798d5 100644 --- a/cognee/modules/users/models/__init__.py +++ b/cognee/modules/users/models/__init__.py @@ -1,5 +1,7 @@ from .User import User from .Group import Group +from .UserGroup import UserGroup +from .GroupPermission import GroupPermission from .Resource import Resource from .Permission import Permission from .ACL import ACL diff --git a/cognee/modules/users/permissions/methods/check_permission_on_documents.py b/cognee/modules/users/permissions/methods/check_permission_on_documents.py index f9c5a2258..0a292bfa0 100644 --- a/cognee/modules/users/permissions/methods/check_permission_on_documents.py +++ b/cognee/modules/users/permissions/methods/check_permission_on_documents.py @@ -1,4 +1,4 @@ -import logging +import logging from uuid import UUID from sqlalchemy import select from sqlalchemy.orm import joinedload @@ -23,11 +23,13 @@ async def check_permission_on_documents(user: User, permission_type: str, docume .join(ACL.permission) .options(joinedload(ACL.resources)) .where(ACL.principal_id.in_([user.id, *user_group_ids])) - .where(ACL.permission.has(name = permission_type)) + .where(ACL.permission.has(name=permission_type)) ) acls = result.unique().scalars().all() resource_ids = [resource.resource_id for acl in acls for resource in acl.resources] has_permissions = all(document_id in resource_ids for document_id in document_ids) if not has_permissions: - raise PermissionDeniedError(message=f"User {user.email} does not have {permission_type} permission on documents") + raise PermissionDeniedError( + message=f"User {user.email} does not have {permission_type} permission on documents" + ) diff --git a/cognee/modules/users/permissions/methods/get_document_ids_for_user.py b/cognee/modules/users/permissions/methods/get_document_ids_for_user.py index 79736db0f..0d641960c 100644 --- a/cognee/modules/users/permissions/methods/get_document_ids_for_user.py +++ b/cognee/modules/users/permissions/methods/get_document_ids_for_user.py @@ -1,21 +1,54 @@ from uuid import UUID from sqlalchemy import select from cognee.infrastructure.databases.relational import get_relational_engine +from cognee.modules.data.models import Dataset, DatasetData from ...models import ACL, Resource, Permission -async def get_document_ids_for_user(user_id: UUID) -> list[str]: + +async def get_document_ids_for_user(user_id: UUID, datasets: list[str] = None) -> list[str]: db_engine = get_relational_engine() async with db_engine.get_async_session() as session: async with session.begin(): - document_ids = (await session.scalars( - select(Resource.resource_id) - .join(ACL.resources) - .join(ACL.permission) - .where( - ACL.principal_id == user_id, - Permission.name == "read", + document_ids = ( + await session.scalars( + select(Resource.resource_id) + .join(ACL.resources) + .join(ACL.permission) + .where( + ACL.principal_id == user_id, + Permission.name == "read", + ) ) - )).all() + ).all() + if datasets: + documents_ids_in_dataset = set() + # If datasets are specified filter out documents that aren't part of the specified datasets + for dataset in datasets: + # Find dataset id for dataset element + dataset_id = ( + await session.scalars( + select(Dataset.id).where( + Dataset.name == dataset, + Dataset.owner_id == user_id, + ) + ) + ).one_or_none() + + # Check which documents are connected to this dataset + for document_id in document_ids: + data_id = ( + await session.scalars( + select(DatasetData.data_id).where( + DatasetData.dataset_id == dataset_id, + DatasetData.data_id == document_id, + ) + ) + ).one_or_none() + + # If document is related to dataset added it to return value + if data_id: + documents_ids_in_dataset.add(document_id) + return list(documents_ids_in_dataset) return document_ids diff --git a/cognee/modules/users/permissions/methods/give_permission_on_document.py b/cognee/modules/users/permissions/methods/give_permission_on_document.py index b724be631..1e13463f8 100644 --- a/cognee/modules/users/permissions/methods/give_permission_on_document.py +++ b/cognee/modules/users/permissions/methods/give_permission_on_document.py @@ -2,6 +2,7 @@ from sqlalchemy.future import select from cognee.infrastructure.databases.relational import get_relational_engine from ...models import User, ACL, Resource, Permission + async def give_permission_on_document( user: User, document_id: str, @@ -9,15 +10,19 @@ async def give_permission_on_document( ): db_engine = get_relational_engine() - document_resource = Resource(resource_id = document_id) + document_resource = Resource(resource_id=document_id) async with db_engine.get_async_session() as session: - permission = (await session.execute(select(Permission).filter(Permission.name == permission_name))).scalars().first() + permission = ( + (await session.execute(select(Permission).filter(Permission.name == permission_name))) + .scalars() + .first() + ) if permission is None: - permission = Permission(name = permission_name) + permission = Permission(name=permission_name) - acl = ACL(principal_id = user.id) + acl = ACL(principal_id=user.id) acl.permission = permission acl.resources.append(document_resource) diff --git a/cognee/root_dir.py b/cognee/root_dir.py index 0f96b8065..2e21d5ce3 100644 --- a/cognee/root_dir.py +++ b/cognee/root_dir.py @@ -2,6 +2,7 @@ from pathlib import Path ROOT_DIR = Path(__file__).resolve().parent + def get_absolute_path(path_from_root: str) -> str: absolute_path = ROOT_DIR / path_from_root return str(absolute_path.resolve()) diff --git a/cognee/shared/CodeGraphEntities.py b/cognee/shared/CodeGraphEntities.py index 8859fd0d6..926aae9fa 100644 --- a/cognee/shared/CodeGraphEntities.py +++ b/cognee/shared/CodeGraphEntities.py @@ -1,40 +1,44 @@ from typing import List, Optional from cognee.infrastructure.engine import DataPoint + class Repository(DataPoint): __tablename__ = "Repository" path: str - type: Optional[str] = "Repository" + pydantic_type: str = "Repository" + _metadata: dict = {"index_fields": [], "type": "Repository"} + class CodeFile(DataPoint): __tablename__ = "codefile" extracted_id: str # actually file path - type: Optional[str] = "CodeFile" + pydantic_type: str = "CodeFile" source_code: Optional[str] = None part_of: Optional[Repository] = None depends_on: Optional[List["CodeFile"]] = None depends_directly_on: Optional[List["CodeFile"]] = None contains: Optional[List["CodePart"]] = None + _metadata: dict = {"index_fields": [], "type": "CodeFile"} - _metadata: dict = { - "index_fields": ["source_code"] - } class CodePart(DataPoint): __tablename__ = "codepart" - # part_of: Optional[CodeFile] - source_code: str - type: Optional[str] = "CodePart" + # part_of: Optional[CodeFile] = None + pydantic_type: str = "CodePart" + source_code: Optional[str] = None + _metadata: dict = {"index_fields": [], "type": "CodePart"} - _metadata: dict = { - "index_fields": ["source_code"] - } -class CodeRelationship(DataPoint): - source_id: str - target_id: str - type: str # between files - relation: str # depends on or depends directly +class SourceCodeChunk(DataPoint): + __tablename__ = "sourcecodechunk" + code_chunk_of: Optional[CodePart] = None + source_code: Optional[str] = None + pydantic_type: str = "SourceCodeChunk" + previous_chunk: Optional["SourceCodeChunk"] = None + + _metadata: dict = {"index_fields": ["source_code"], "type": "SourceCodeChunk"} + CodeFile.model_rebuild() CodePart.model_rebuild() +SourceCodeChunk.model_rebuild() diff --git a/cognee/shared/GithubClassification.py b/cognee/shared/GithubClassification.py index 66f14ec91..2642b9e98 100644 --- a/cognee/shared/GithubClassification.py +++ b/cognee/shared/GithubClassification.py @@ -4,7 +4,6 @@ from typing import List from pydantic import BaseModel - class TextSubclass(str, Enum): SOURCE_CODE = "Source code in various programming languages" SHELL_SCRIPTS = "Shell commands and scripts" @@ -12,14 +11,20 @@ class TextSubclass(str, Enum): STYLESHEETS = "Stylesheets (CSS) and configuration files (YAML, JSON, INI)" OTHER = "Other that does not fit into any of the above categories" + class ContentType(BaseModel): """Base class for content type, storing type of content as string.""" + type: str = "TEXT" + class TextContent(ContentType): """Textual content class for more specific text categories.""" + subclass: List[TextSubclass] + class CodeContentPrediction(BaseModel): """Model to predict the type of content.""" - label: TextContent \ No newline at end of file + + label: TextContent diff --git a/cognee/shared/GithubTopology.py b/cognee/shared/GithubTopology.py index 3315c72e4..50c74705a 100644 --- a/cognee/shared/GithubTopology.py +++ b/cognee/shared/GithubTopology.py @@ -1,29 +1,33 @@ - - from pydantic import BaseModel from typing import List, Optional, Dict, Any, Union + class Relationship(BaseModel): type: str attributes: Optional[Dict[str, Any]] = {} + class Document(BaseModel): name: str content: str filetype: str + class Directory(BaseModel): name: str documents: List[Document] = [] - directories: List['Directory'] = [] + directories: List["Directory"] = [] + # Allows recursive Directory Model Directory.model_rebuild() + class RepositoryProperties(BaseModel): custom_properties: Optional[Dict[str, Any]] = None location: Optional[str] = None # Simplified location reference + class RepositoryNode(BaseModel): node_id: str node_type: str # 'document' or 'directory' @@ -31,6 +35,7 @@ class RepositoryNode(BaseModel): content: Union[Document, Directory, None] = None relationships: List[Relationship] = [] + class RepositoryGraphModel(BaseModel): root: RepositoryNode default_relationships: List[Relationship] = [] diff --git a/cognee/shared/SourceCodeGraph.py b/cognee/shared/SourceCodeGraph.py index 0fc8f9487..6c8cea3e9 100644 --- a/cognee/shared/SourceCodeGraph.py +++ b/cognee/shared/SourceCodeGraph.py @@ -1,94 +1,96 @@ -from typing import Any, List, Union, Literal, Optional +from typing import Any, List, Literal, Optional, Union + from cognee.infrastructure.engine import DataPoint + class Variable(DataPoint): id: str name: str - type: Literal["Variable"] = "Variable" description: str is_static: Optional[bool] = False default_value: Optional[str] = None data_type: str - _metadata = { - "index_fields": ["name"] - } + _metadata = {"index_fields": ["name"], "type": "Variable"} + class Operator(DataPoint): id: str name: str - type: Literal["Operator"] = "Operator" description: str return_type: str + _metadata = {"index_fields": ["name"], "type": "Operator"} + class Class(DataPoint): id: str name: str - type: Literal["Class"] = "Class" description: str constructor_parameters: List[Variable] extended_from_class: Optional["Class"] = None has_methods: List["Function"] - _metadata = { - "index_fields": ["name"] - } + _metadata = {"index_fields": ["name"], "type": "Class"} + class ClassInstance(DataPoint): id: str name: str - type: Literal["ClassInstance"] = "ClassInstance" description: str from_class: Class instantiated_by: Union["Function"] instantiation_arguments: List[Variable] - _metadata = { - "index_fields": ["name"] - } + _metadata = {"index_fields": ["name"], "type": "ClassInstance"} + class Function(DataPoint): id: str name: str - type: Literal["Function"] = "Function" description: str parameters: List[Variable] return_type: str is_static: Optional[bool] = False - _metadata = { - "index_fields": ["name"] - } + _metadata = {"index_fields": ["name"], "type": "Function"} + class FunctionCall(DataPoint): id: str - type: Literal["FunctionCall"] = "FunctionCall" called_by: Union[Function, Literal["main"]] function_called: Function function_arguments: List[Any] + _metadata = {"index_fields": [], "type": "FunctionCall"} + class Expression(DataPoint): id: str name: str - type: Literal["Expression"] = "Expression" description: str expression: str members: List[Union[Variable, Function, Operator, "Expression"]] + _metadata = {"index_fields": ["name"], "type": "Expression"} + class SourceCodeGraph(DataPoint): id: str name: str description: str language: str - nodes: List[Union[ - Class, - ClassInstance, - Function, - FunctionCall, - Variable, - Operator, - Expression, - ]] + nodes: List[ + Union[ + Class, + ClassInstance, + Function, + FunctionCall, + Variable, + Operator, + Expression, + ] + ] + _metadata = {"index_fields": ["name"], "type": "SourceCodeGraph"} + + Class.model_rebuild() ClassInstance.model_rebuild() Expression.model_rebuild() diff --git a/cognee/shared/data_models.py b/cognee/shared/data_models.py index 6cb4d436a..a36a09010 100644 --- a/cognee/shared/data_models.py +++ b/cognee/shared/data_models.py @@ -1,42 +1,58 @@ """Data models for the cognitive architecture.""" from enum import Enum, auto -from typing import Optional, List, Union, Dict, Any +from typing import Any, Dict, List, Optional, Union + from pydantic import BaseModel, Field + class Node(BaseModel): """Node in a knowledge graph.""" + id: str name: str type: str description: str - properties: Optional[Dict[str, Any]] = Field(None, description = "A dictionary of properties associated with the node.") + properties: Optional[Dict[str, Any]] = Field( + None, description="A dictionary of properties associated with the node." + ) + class Edge(BaseModel): """Edge in a knowledge graph.""" + source_node_id: str target_node_id: str relationship_name: str - properties: Optional[Dict[str, Any]] = Field(None, description = "A dictionary of properties associated with the edge.") + properties: Optional[Dict[str, Any]] = Field( + None, description="A dictionary of properties associated with the edge." + ) + class KnowledgeGraph(BaseModel): """Knowledge graph.""" + nodes: List[Node] = Field(..., default_factory=list) edges: List[Edge] = Field(..., default_factory=list) + class GraphQLQuery(BaseModel): """GraphQL query.""" + query: str + class Answer(BaseModel): """Answer.""" + answer: str + class ChunkStrategy(Enum): EXACT = "exact" PARAGRAPH = "paragraph" SENTENCE = "sentence" - CODE = "code" + CODE = "code" LANGCHAIN_CHARACTER = "langchain_character" @@ -45,11 +61,14 @@ class ChunkEngine(Enum): DEFAULT_ENGINE = "default" HAYSTACK_ENGINE = "haystack" + class MemorySummary(BaseModel): - """ Memory summary. """ + """Memory summary.""" + nodes: List[Node] = Field(..., default_factory=list) edges: List[Edge] = Field(..., default_factory=list) + class TextSubclass(str, Enum): ARTICLES = "Articles, essays, and reports" BOOKS = "Books and manuscripts" @@ -98,6 +117,7 @@ class TextSubclass(str, Enum): LEGAL_AND_REGULATORY_DOCUMENTS = "Legal and Regulatory Documents" OTHER_TEXT = "Other types of text data" + class AudioSubclass(str, Enum): MUSIC_TRACKS = "Music tracks and albums" PODCASTS = "Podcasts and radio broadcasts" @@ -106,6 +126,7 @@ class AudioSubclass(str, Enum): SOUND_EFFECTS = "Sound effects and ambient sounds" OTHER_AUDIO = "Other types of audio recordings" + class ImageSubclass(str, Enum): PHOTOGRAPHS = "Photographs and digital images" ILLUSTRATIONS = "Illustrations, diagrams, and charts" @@ -114,6 +135,7 @@ class ImageSubclass(str, Enum): SCREENSHOTS = "Screenshots and graphical user interfaces" OTHER_IMAGES = "Other types of images" + class VideoSubclass(str, Enum): MOVIES = "Movies and short films" DOCUMENTARIES = "Documentaries and educational videos" @@ -122,6 +144,7 @@ class VideoSubclass(str, Enum): LIVE_EVENTS = "Live event recordings and sports broadcasts" OTHER_VIDEOS = "Other types of video content" + class MultimediaSubclass(str, Enum): WEB_CONTENT = "Interactive web content and games" VR_EXPERIENCES = "Virtual reality (VR) and augmented reality (AR) experiences" @@ -130,6 +153,7 @@ class MultimediaSubclass(str, Enum): DIGITAL_EXHIBITIONS = "Digital exhibitions and virtual tours" OTHER_MULTIMEDIA = "Other types of multimedia content" + class Model3DSubclass(str, Enum): ARCHITECTURAL_RENDERINGS = "Architectural renderings and building plans" PRODUCT_MODELS = "Product design models and prototypes" @@ -138,6 +162,7 @@ class Model3DSubclass(str, Enum): VR_OBJECTS = "Virtual objects for AR/VR applications" OTHER_3D_MODELS = "Other types of 3D models" + class ProceduralSubclass(str, Enum): TUTORIALS_GUIDES = "Tutorials and step-by-step guides" WORKFLOW_DESCRIPTIONS = "Workflow and process descriptions" @@ -145,40 +170,51 @@ class ProceduralSubclass(str, Enum): RECIPES = "Recipes and crafting instructions" OTHER_PROCEDURAL = "Other types of procedural content" + class ContentType(BaseModel): """Base class for different types of content.""" + type: str + class TextContent(ContentType): type: str = "TEXTUAL_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[TextSubclass] + class AudioContent(ContentType): type: str = "AUDIO_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[AudioSubclass] + class ImageContent(ContentType): type: str = "IMAGE_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[ImageSubclass] + class VideoContent(ContentType): type: str = "VIDEO_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[VideoSubclass] + class MultimediaContent(ContentType): type: str = "MULTIMEDIA_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[MultimediaSubclass] + class Model3DContent(ContentType): type: str = "3D_MODEL_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[Model3DSubclass] + class ProceduralContent(ContentType): type: str = "PROCEDURAL_DOCUMENTS_USED_FOR_GENERAL_PURPOSES" subclass: List[ProceduralSubclass] + class DefaultContentPrediction(BaseModel): """Class for a single class label prediction.""" + label: Union[ TextContent, AudioContent, @@ -189,10 +225,41 @@ class DefaultContentPrediction(BaseModel): ProceduralContent, ] + class SummarizedContent(BaseModel): """Class for a single class label summary and description.""" + summary: str description: str + pydantic_type: str = "SummarizedContent" + + +class SummarizedFunction(BaseModel): + name: str + description: str + inputs: Optional[List[str]] = None + outputs: Optional[List[str]] = None + decorators: Optional[List[str]] = None + pydantic_type: str = "SummarizedFunction" + + +class SummarizedClass(BaseModel): + name: str + description: str + methods: Optional[List[SummarizedFunction]] = None + decorators: Optional[List[str]] = None + pydantic_type: str = "SummarizedClass" + + +class SummarizedCode(BaseModel): + high_level_summary: str + key_features: List[str] + imports: List[str] = [] + constants: List[str] = [] + classes: List[SummarizedClass] = [] + functions: List[SummarizedFunction] = [] + workflow_description: Optional[str] = None + pydantic_type: str = "SummarizedCode" class GraphDBType(Enum): @@ -208,50 +275,58 @@ class Relationship(BaseModel): target: Optional[str] = None properties: Optional[Dict[str, Any]] = None + class DocumentType(BaseModel): type_id: str description: str - default_relationship: Relationship = Relationship(type = "is_type") + default_relationship: Relationship = Relationship(type="is_type") + class Category(BaseModel): category_id: str name: str - default_relationship: Relationship = Relationship(type = "categorized_as") + default_relationship: Relationship = Relationship(type="categorized_as") + class Document(BaseModel): id: str type: str title: str + class UserLocation(BaseModel): location_id: str description: str - default_relationship: Relationship = Relationship(type = "located_in") + default_relationship: Relationship = Relationship(type="located_in") + class UserProperties(BaseModel): custom_properties: Optional[Dict[str, Any]] = None location: Optional[UserLocation] = None + class DefaultGraphModel(BaseModel): node_id: str user_properties: UserProperties = UserProperties() documents: List[Document] = [] default_fields: Optional[Dict[str, Any]] = {} - default_relationship: Relationship = Relationship(type = "has_properties") + default_relationship: Relationship = Relationship(type="has_properties") class ChunkSummary(BaseModel): text: str chunk_id: str + class ChunkSummaries(BaseModel): - """ Relevant summary and chunk id """ + """Relevant summary and chunk id""" + summaries: List[ChunkSummary] class MonitoringTool(str, Enum): - """ Monitoring tools """ + """Monitoring tools""" + LANGFUSE = "langfuse" LLMLITE = "llmlite" LANGSMITH = "langsmith" - diff --git a/cognee/shared/encode_uuid.py b/cognee/shared/encode_uuid.py index 21fda1a91..230fd7c27 100644 --- a/cognee/shared/encode_uuid.py +++ b/cognee/shared/encode_uuid.py @@ -1,11 +1,12 @@ from uuid import UUID + def encode_uuid(uuid: UUID) -> str: uuid_int = uuid.int base = 52 - charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - encoded = '' + encoded = "" while len(encoded) < 36: uuid_int, remainder = divmod(uuid_int, base) uuid_int = uuid_int * 8 diff --git a/cognee/shared/exceptions/__init__.py b/cognee/shared/exceptions/__init__.py index 9b86cccab..5e2ae6875 100644 --- a/cognee/shared/exceptions/__init__.py +++ b/cognee/shared/exceptions/__init__.py @@ -6,4 +6,4 @@ This module defines a set of exceptions for handling various shared utility erro from .exceptions import ( IngestionError, -) \ No newline at end of file +) diff --git a/cognee/shared/exceptions/exceptions.py b/cognee/shared/exceptions/exceptions.py index 101711398..4b4164995 100644 --- a/cognee/shared/exceptions/exceptions.py +++ b/cognee/shared/exceptions/exceptions.py @@ -1,11 +1,12 @@ from cognee.exceptions import CogneeApiError from fastapi import status + class IngestionError(CogneeApiError): def __init__( - self, - message: str = "Failed to load data.", - name: str = "IngestionError", - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + self, + message: str = "Failed to load data.", + name: str = "IngestionError", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ): - super().__init__(message, name, status_code) \ No newline at end of file + super().__init__(message, name, status_code) diff --git a/cognee/shared/utils.py b/cognee/shared/utils.py index b75076e55..e57decde1 100644 --- a/cognee/shared/utils.py +++ b/cognee/shared/utils.py @@ -1,4 +1,5 @@ -""" This module contains utility functions for the cognee. """ +"""This module contains utility functions for the cognee.""" + import os from typing import BinaryIO, Union @@ -7,11 +8,15 @@ import hashlib from datetime import datetime, timezone import graphistry import networkx as nx -import numpy as np import pandas as pd import matplotlib.pyplot as plt import tiktoken import nltk +import base64 + + +import logging +import sys from cognee.base_config import get_base_config from cognee.infrastructure.databases.graph import get_graph_engine @@ -24,6 +29,7 @@ from cognee.shared.exceptions import IngestionError # Analytics Proxy Url, currently hosted by Vercel proxy_url = "https://test.prometh.ai" + def get_anonymous_id(): """Creates or reads a anonymous user id""" home_dir = str(pathlib.Path(pathlib.Path(__file__).parent.parent.parent.resolve())) @@ -40,6 +46,7 @@ def get_anonymous_id(): anonymous_id = f.read() return anonymous_id + def send_telemetry(event_name: str, user_id, additional_properties: dict = {}): if os.getenv("TELEMETRY_DISABLED"): return @@ -58,7 +65,7 @@ def send_telemetry(event_name: str, user_id, additional_properties: dict = {}): "properties": { "time": current_time.strftime("%m/%d/%Y"), "user_id": str(user_id), - **additional_properties + **additional_properties, }, } @@ -67,6 +74,7 @@ def send_telemetry(event_name: str, user_id, additional_properties: dict = {}): if response.status_code != 200: print(f"Error sending telemetry through proxy: {response.status_code}") + def num_tokens_from_string(string: str, encoding_name: str) -> int: """Returns the number of tokens in a text string.""" @@ -75,12 +83,13 @@ def num_tokens_from_string(string: str, encoding_name: str) -> int: num_tokens = len(encoding.encode(string)) return num_tokens + def get_file_content_hash(file_obj: Union[str, BinaryIO]) -> str: h = hashlib.md5() try: if isinstance(file_obj, str): - with open(file_obj, 'rb') as file: + with open(file_obj, "rb") as file: while True: # Reading is buffered, so we can read smaller chunks. chunk = file.read(h.block_size) @@ -99,6 +108,7 @@ def get_file_content_hash(file_obj: Union[str, BinaryIO]) -> str: except IOError as e: raise IngestionError(message=f"Failed to load data from {file}: {e}") + def trim_text_to_max_tokens(text: str, max_tokens: int, encoding_name: str) -> str: """ Trims the text so that the number of tokens does not exceed max_tokens. @@ -130,22 +140,30 @@ def trim_text_to_max_tokens(text: str, max_tokens: int, encoding_name: str) -> s def generate_color_palette(unique_layers): colormap = plt.cm.get_cmap("viridis", len(unique_layers)) colors = [colormap(i) for i in range(len(unique_layers))] - hex_colors = ["#%02x%02x%02x" % (int(rgb[0]*255), int(rgb[1]*255), int(rgb[2]*255)) for rgb in colors] + hex_colors = [ + "#%02x%02x%02x" % (int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255)) + for rgb in colors + ] return dict(zip(unique_layers, hex_colors)) async def register_graphistry(): config = get_base_config() - graphistry.register(api = 3, username = config.graphistry_username, password = config.graphistry_password) + graphistry.register( + api=3, username=config.graphistry_username, password=config.graphistry_password + ) def prepare_edges(graph, source, target, edge_key): - edge_list = [{ - source: str(edge[0]), - target: str(edge[1]), - edge_key: str(edge[2]), - } for edge in graph.edges(keys = True, data = True)] + edge_list = [ + { + source: str(edge[0]), + target: str(edge[1]), + edge_key: str(edge[2]), + } + for edge in graph.edges(keys=True, data=True) + ] return pd.DataFrame(edge_list) @@ -167,7 +185,9 @@ def prepare_nodes(graph, include_size=False): default_size = 10 # Default node size larger_size = 20 # Size for nodes with specific keywords in their ID keywords = ["DOCUMENT", "User"] - node_size = larger_size if any(keyword in str(node) for keyword in keywords) else default_size + node_size = ( + larger_size if any(keyword in str(node) for keyword in keywords) else default_size + ) node_data["size"] = node_size nodes_data.append(node_data) @@ -175,7 +195,9 @@ def prepare_nodes(graph, include_size=False): return pd.DataFrame(nodes_data) -async def render_graph(graph, include_nodes=False, include_color=False, include_size=False, include_labels=False): +async def render_graph( + graph, include_nodes=False, include_color=False, include_size=False, include_labels=False +): await register_graphistry() if not isinstance(graph, nx.MultiDiGraph): @@ -191,15 +213,14 @@ async def render_graph(graph, include_nodes=False, include_color=False, include_ edges = prepare_edges(graph, "source_node", "target_node", "relationship_name") plotter = graphistry.edges(edges, "source_node", "target_node") - plotter = plotter.bind(edge_label = "relationship_name") + plotter = plotter.bind(edge_label="relationship_name") if include_nodes: - nodes = prepare_nodes(graph, include_size = include_size) + nodes = prepare_nodes(graph, include_size=include_size) plotter = plotter.nodes(nodes, "id") if include_size: - plotter = plotter.bind(point_size = "size") - + plotter = plotter.bind(point_size="size") if include_color: pass @@ -208,10 +229,8 @@ async def render_graph(graph, include_nodes=False, include_color=False, include_ # plotter = plotter.encode_point_color("layer_description", categorical_mapping=color_palette, # default_mapping="silver") - if include_labels: - plotter = plotter.bind(point_label = "name") - + plotter = plotter.bind(point_label="name") # Visualization url = plotter.plot(render=False, as_files=True, memoize=False) @@ -219,14 +238,15 @@ async def render_graph(graph, include_nodes=False, include_color=False, include_ return url -def sanitize_df(df): - """Replace NaNs and infinities in a DataFrame with None, making it JSON compliant.""" - return df.replace([np.inf, -np.inf, np.nan], None) +# def sanitize_df(df): +# """Replace NaNs and infinities in a DataFrame with None, making it JSON compliant.""" +# return df.replace([np.inf, -np.inf, np.nan], None) def get_entities(tagged_tokens): nltk.download("maxent_ne_chunker", quiet=True) from nltk.chunk import ne_chunk + return ne_chunk(tagged_tokens) @@ -250,41 +270,276 @@ def extract_pos_tags(sentence): return pos_tags -def extract_named_entities(sentence): - """Extract Named Entities from a sentence.""" - # Tokenize the sentence into words - tagged_tokens = extract_pos_tags(sentence) - - # Perform Named Entity Recognition (NER) on the tagged tokens - entities = get_entities(tagged_tokens) - - return entities +logging.basicConfig(level=logging.INFO) -def extract_sentiment_vader(text): +async def convert_to_serializable_graph(G): """ - Analyzes the sentiment of a given text using the VADER Sentiment Intensity Analyzer. - - Parameters: - text (str): The text to analyze. - - Returns: - dict: A dictionary containing the polarity scores for the text. + Convert a graph into a serializable format with stringified node and edge attributes. """ - from nltk.sentiment import SentimentIntensityAnalyzer - nltk.download("vader_lexicon", quiet=True) + (nodes, edges) = G - # Initialize the VADER Sentiment Intensity Analyzer - sia = SentimentIntensityAnalyzer() + networkx_graph = nx.MultiDiGraph() + networkx_graph.add_nodes_from(nodes) + networkx_graph.add_edges_from(edges) - # Obtain the polarity scores for the text - polarity_scores = sia.polarity_scores(text) + # Create a new graph to store the serializable version + new_G = nx.MultiDiGraph() - return polarity_scores + # Serialize nodes + for node, data in networkx_graph.nodes(data=True): + serializable_data = {k: str(v) for k, v in data.items()} + new_G.add_node(str(node), **serializable_data) + + # Serialize edges + for u, v, data in networkx_graph.edges(data=True): + serializable_data = {k: str(v) for k, v in data.items()} + new_G.add_edge(str(u), str(v), **serializable_data) + + return new_G +def generate_layout_positions(G, layout_func, layout_scale): + """ + Generate layout positions for the graph using the specified layout function. + """ + positions = layout_func(G) + return {str(node): (x * layout_scale, y * layout_scale) for node, (x, y) in positions.items()} + + +def assign_node_colors(G, node_attribute, palette): + """ + Assign colors to nodes based on a specified attribute and a given palette. + """ + unique_attrs = set(G.nodes[node].get(node_attribute, "Unknown") for node in G.nodes) + color_map = {attr: palette[i % len(palette)] for i, attr in enumerate(unique_attrs)} + return [color_map[G.nodes[node].get(node_attribute, "Unknown")] for node in G.nodes], color_map + + +def embed_logo(p, layout_scale, logo_alpha, position): + """ + Embed a logo into the graph visualization as a watermark. + """ + + # svg_logo = """ + # + # + # + # + # + # + # """ + # Convert the SVG to a ReportLab Drawing + + logo_url = "data:image/png;base64,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" + + # Finally, add the PNG image to your Bokeh plot as an image_url + p.image_url( + url=[logo_url], + x=-layout_scale * 0.5, + y=layout_scale * 0.5, + w=layout_scale, + h=layout_scale, + anchor=position, + global_alpha=logo_alpha, + ) + + +def style_and_render_graph(p, G, layout_positions, node_attribute, node_colors, centrality): + """ + Apply styling and render the graph into the plot. + """ + from bokeh.plotting import figure, from_networkx + from bokeh.models import Circle, MultiLine, HoverTool, ColumnDataSource, Range1d + from bokeh.plotting import output_file, show + + from bokeh.embed import file_html + from bokeh.resources import CDN + + graph_renderer = from_networkx(G, layout_positions) + node_radii = [0.02 + 0.1 * centrality[node] for node in G.nodes()] + graph_renderer.node_renderer.data_source.data["radius"] = node_radii + graph_renderer.node_renderer.data_source.data["fill_color"] = node_colors + graph_renderer.node_renderer.glyph = Circle( + radius="radius", + fill_color="fill_color", + fill_alpha=0.9, + line_color="#000000", + line_width=1.5, + ) + graph_renderer.edge_renderer.glyph = MultiLine( + line_color="#000000", + line_alpha=0.3, + line_width=1.5, + ) + p.renderers.append(graph_renderer) + return graph_renderer + + +async def create_cognee_style_network_with_logo( + G, + output_filename="cognee_network_with_logo.html", + title="Cognee-Style Network", + label="group", + layout_func=nx.spring_layout, + layout_scale=3.0, + logo_alpha=0.1, + bokeh_object=False, +): + """ + Create a Cognee-inspired network visualization with an embedded logo. + """ + from bokeh.plotting import figure, from_networkx + from bokeh.models import Circle, MultiLine, HoverTool, ColumnDataSource, Range1d + from bokeh.plotting import output_file, show + + from bokeh.embed import file_html + from bokeh.resources import CDN + + logging.info("Converting graph to serializable format...") + G = await convert_to_serializable_graph(G) + + logging.info("Generating layout positions...") + layout_positions = generate_layout_positions(G, layout_func, layout_scale) + + logging.info("Assigning node colors...") + palette = ["#6510F4", "#0DFF00", "#FFFFFF"] + node_colors, color_map = assign_node_colors(G, label, palette) + + logging.info("Calculating centrality...") + centrality = nx.degree_centrality(G) + + logging.info("Preparing Bokeh output...") + output_file(output_filename) + p = figure( + title=title, + tools="pan,wheel_zoom,save,reset,hover", + active_scroll="wheel_zoom", + width=1200, + height=900, + background_fill_color="#F4F4F4", + x_range=Range1d(-layout_scale, layout_scale), + y_range=Range1d(-layout_scale, layout_scale), + ) + p.toolbar.logo = None + p.axis.visible = False + p.grid.visible = False + + logging.info("Embedding logo into visualization...") + embed_logo(p, layout_scale, logo_alpha, "bottom_right") + embed_logo(p, layout_scale, logo_alpha, "top_left") + + logging.info("Styling and rendering graph...") + style_and_render_graph(p, G, layout_positions, label, node_colors, centrality) + + logging.info("Adding hover tool...") + hover_tool = HoverTool( + tooltips=[ + ("Node", "@index"), + (label.capitalize(), f"@{label}"), + ("Centrality", "@radius{0.00}"), + ], + ) + p.add_tools(hover_tool) + + logging.info(f"Saving visualization to {output_filename}...") + html_content = file_html(p, CDN, title) + with open(output_filename, "w") as f: + f.write(html_content) + + logging.info("Visualization complete.") + + if bokeh_object: + return p + return html_content + + +def graph_to_tuple(graph): + """ + Converts a networkx graph to a tuple of (nodes, edges). + + :param graph: A networkx graph. + :return: A tuple (nodes, edges). + """ + nodes = list(graph.nodes(data=True)) # Get nodes with attributes + edges = list(graph.edges(data=True)) # Get edges with attributes + return (nodes, edges) + + +def setup_logging(log_level=logging.INFO): + """This method sets up the logging configuration.""" + formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s\n") + stream_handler = logging.StreamHandler(sys.stdout) + stream_handler.setFormatter(formatter) + stream_handler.setLevel(log_level) + + logging.basicConfig( + level=log_level, + handlers=[stream_handler], + ) + + +# ---------------- Example Usage ---------------- if __name__ == "__main__": - sample_text = "I love sunny days, but I hate the rain." - sentiment_scores = extract_sentiment_vader(sample_text) - print("Sentiment analysis results:", sentiment_scores) + import networkx as nx + + # Create a sample graph + nodes = [ + (1, {"group": "A"}), + (2, {"group": "A"}), + (3, {"group": "B"}), + (4, {"group": "B"}), + (5, {"group": "C"}), + ] + edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 1)] + + # Create a NetworkX graph + G = nx.Graph() + G.add_nodes_from(nodes) + G.add_edges_from(edges) + + G = graph_to_tuple(G) + + import asyncio + + output_html = asyncio.run( + create_cognee_style_network_with_logo( + G, + output_filename="example_network.html", + title="Example Cognee Network", + node_attribute="group", # Attribute to use for coloring nodes + layout_func=nx.spring_layout, # Layout function + layout_scale=3.0, # Scale for the layout + logo_alpha=0.2, + ) + ) + + # Call the function + # output_html = await create_cognee_style_network_with_logo( + # G=G, + # output_filename="example_network.html", + # title="Example Cognee Network", + # node_attribute="group", # Attribute to use for coloring nodes + # layout_func=nx.spring_layout, # Layout function + # layout_scale=3.0, # Scale for the layout + # logo_alpha=0.2, # Transparency of the logo + # ) + + # Print the output filename + print("Network visualization saved as example_network.html") + +# # Create a random geometric graph +# G = nx.random_geometric_graph(50, 0.3) +# # Assign random group attributes for coloring +# for i, node in enumerate(G.nodes()): +# G.nodes[node]["group"] = f"Group {i % 3 + 1}" +# +# create_cognee_graph( +# G, +# output_filename="cognee_style_network_with_logo.html", +# title="Cognee-Graph Network", +# node_attribute="group", +# layout_func=nx.spring_layout, +# layout_scale=3.0, # Replace with your logo file path +# ) diff --git a/cognee/tasks/chunk_naive_llm_classifier/chunk_naive_llm_classifier.py b/cognee/tasks/chunk_naive_llm_classifier/chunk_naive_llm_classifier.py index 154dadb61..4c058de18 100644 --- a/cognee/tasks/chunk_naive_llm_classifier/chunk_naive_llm_classifier.py +++ b/cognee/tasks/chunk_naive_llm_classifier/chunk_naive_llm_classifier.py @@ -8,7 +8,9 @@ from cognee.modules.data.extraction.extract_categories import extract_categories from cognee.modules.chunking.models.DocumentChunk import DocumentChunk -async def chunk_naive_llm_classifier(data_chunks: list[DocumentChunk], classification_model: Type[BaseModel]): +async def chunk_naive_llm_classifier( + data_chunks: list[DocumentChunk], classification_model: Type[BaseModel] +): if len(data_chunks) == 0: return data_chunks @@ -36,10 +38,17 @@ async def chunk_naive_llm_classifier(data_chunks: list[DocumentChunk], classific collection_name = "classification" if await vector_engine.has_collection(collection_name): - existing_data_points = await vector_engine.retrieve( - collection_name, - [str(classification_data) for classification_data in list(set(classification_data_points))], - ) if len(classification_data_points) > 0 else [] + existing_data_points = ( + await vector_engine.retrieve( + collection_name, + [ + str(classification_data) + for classification_data in list(set(classification_data_points)) + ], + ) + if len(classification_data_points) > 0 + else [] + ) existing_points_map = {point.id: True for point in existing_data_points} else: @@ -50,7 +59,7 @@ async def chunk_naive_llm_classifier(data_chunks: list[DocumentChunk], classific nodes = [] edges = [] - for (chunk_index, data_chunk) in enumerate(data_chunks): + for chunk_index, data_chunk in enumerate(data_chunks): chunk_classification = chunk_classifications[chunk_index] classification_type_label = chunk_classification.label.type classification_type_id = uuid5(NAMESPACE_OID, classification_type_label) @@ -59,36 +68,42 @@ async def chunk_naive_llm_classifier(data_chunks: list[DocumentChunk], classific data_points.append( DataPoint[Keyword]( id=str(classification_type_id), - payload=Keyword.model_validate({ - "uuid": str(classification_type_id), - "text": classification_type_label, - "chunk_id": str(data_chunk.chunk_id), - "document_id": str(data_chunk.document_id), - }), + payload=Keyword.model_validate( + { + "uuid": str(classification_type_id), + "text": classification_type_label, + "chunk_id": str(data_chunk.chunk_id), + "document_id": str(data_chunk.document_id), + } + ), index_fields=["text"], ) ) - nodes.append(( - str(classification_type_id), - dict( - id=str(classification_type_id), - name=classification_type_label, - type=classification_type_label, + nodes.append( + ( + str(classification_type_id), + dict( + id=str(classification_type_id), + name=classification_type_label, + type=classification_type_label, + ), ) - )) + ) existing_points_map[classification_type_id] = True - edges.append(( - str(data_chunk.chunk_id), - str(classification_type_id), - "is_media_type", - dict( - relationship_name="is_media_type", - source_node_id=str(data_chunk.chunk_id), - target_node_id=str(classification_type_id), - ), - )) + edges.append( + ( + str(data_chunk.chunk_id), + str(classification_type_id), + "is_media_type", + dict( + relationship_name="is_media_type", + source_node_id=str(data_chunk.chunk_id), + target_node_id=str(classification_type_id), + ), + ) + ) for classification_subclass in chunk_classification.label.subclass: classification_subtype_label = classification_subclass.value @@ -98,47 +113,55 @@ async def chunk_naive_llm_classifier(data_chunks: list[DocumentChunk], classific data_points.append( DataPoint[Keyword]( id=str(classification_subtype_id), - payload=Keyword.model_validate({ - "uuid": str(classification_subtype_id), - "text": classification_subtype_label, - "chunk_id": str(data_chunk.chunk_id), - "document_id": str(data_chunk.document_id), - }), + payload=Keyword.model_validate( + { + "uuid": str(classification_subtype_id), + "text": classification_subtype_label, + "chunk_id": str(data_chunk.chunk_id), + "document_id": str(data_chunk.document_id), + } + ), index_fields=["text"], ) ) - nodes.append(( - str(classification_subtype_id), - dict( - id=str(classification_subtype_id), - name=classification_subtype_label, - type=classification_subtype_label, + nodes.append( + ( + str(classification_subtype_id), + dict( + id=str(classification_subtype_id), + name=classification_subtype_label, + type=classification_subtype_label, + ), ) - )) - edges.append(( - str(classification_subtype_id), - str(classification_type_id), - "is_subtype_of", - dict( - relationship_name="contains", - source_node_id=str(classification_type_id), - target_node_id=str(classification_subtype_id), - ), - )) + ) + edges.append( + ( + str(classification_subtype_id), + str(classification_type_id), + "is_subtype_of", + dict( + relationship_name="contains", + source_node_id=str(classification_type_id), + target_node_id=str(classification_subtype_id), + ), + ) + ) existing_points_map[classification_subtype_id] = True - edges.append(( - str(data_chunk.chunk_id), - str(classification_subtype_id), - "is_classified_as", - dict( - relationship_name="is_classified_as", - source_node_id=str(data_chunk.chunk_id), - target_node_id=str(classification_subtype_id), - ), - )) + edges.append( + ( + str(data_chunk.chunk_id), + str(classification_subtype_id), + "is_classified_as", + dict( + relationship_name="is_classified_as", + source_node_id=str(data_chunk.chunk_id), + target_node_id=str(classification_subtype_id), + ), + ) + ) if len(nodes) > 0 or len(edges) > 0: await vector_engine.create_data_points(collection_name, data_points) diff --git a/cognee/tasks/chunks/chunk_by_paragraph.py b/cognee/tasks/chunks/chunk_by_paragraph.py index 00bb5670c..24d566074 100644 --- a/cognee/tasks/chunks/chunk_by_paragraph.py +++ b/cognee/tasks/chunks/chunk_by_paragraph.py @@ -1,8 +1,19 @@ -from uuid import uuid5, NAMESPACE_OID -from typing import Dict, Any, Iterator +from typing import Any, Dict, Iterator, Optional, Union +from uuid import NAMESPACE_OID, uuid5 + +import tiktoken + +from cognee.infrastructure.databases.vector import get_vector_engine + from .chunk_by_sentence import chunk_by_sentence -def chunk_by_paragraph(data: str, paragraph_length: int = 1024, batch_paragraphs: bool = True) -> Iterator[Dict[str, Any]]: + +def chunk_by_paragraph( + data: str, + max_tokens: Optional[Union[int, float]] = None, + paragraph_length: int = 1024, + batch_paragraphs: bool = True, +) -> Iterator[Dict[str, Any]]: """ Chunks text by paragraph while preserving exact text reconstruction capability. When chunks are joined with empty string "", they reproduce the original text exactly. @@ -12,61 +23,82 @@ def chunk_by_paragraph(data: str, paragraph_length: int = 1024, batch_paragraphs chunk_index = 0 paragraph_ids = [] last_cut_type = None - - for paragraph_id, sentence, word_count, end_type in chunk_by_sentence(data, maximum_length=paragraph_length): + current_token_count = 0 + if not max_tokens: + max_tokens = float("inf") + + vector_engine = get_vector_engine() + embedding_model = vector_engine.embedding_engine.model + embedding_model = embedding_model.split("/")[-1] + + for paragraph_id, sentence, word_count, end_type in chunk_by_sentence( + data, maximum_length=paragraph_length + ): # Check if this sentence would exceed length limit - if current_word_count > 0 and current_word_count + word_count > paragraph_length: + + tokenizer = tiktoken.encoding_for_model(embedding_model) + token_count = len(tokenizer.encode(sentence)) + + if current_word_count > 0 and ( + current_word_count + word_count > paragraph_length + or current_token_count + token_count > max_tokens + ): # Yield current chunk chunk_dict = { "text": current_chunk, "word_count": current_word_count, + "token_count": current_token_count, "chunk_id": uuid5(NAMESPACE_OID, current_chunk), "paragraph_ids": paragraph_ids, "chunk_index": chunk_index, "cut_type": last_cut_type, } - + yield chunk_dict - + # Start new chunk with current sentence paragraph_ids = [] current_chunk = "" current_word_count = 0 + current_token_count = 0 chunk_index += 1 paragraph_ids.append(paragraph_id) current_chunk += sentence current_word_count += word_count - + current_token_count += token_count + # Handle end of paragraph if end_type in ("paragraph_end", "sentence_cut") and not batch_paragraphs: # For non-batch mode, yield each paragraph separately chunk_dict = { "text": current_chunk, "word_count": current_word_count, + "token_count": current_token_count, "paragraph_ids": paragraph_ids, "chunk_id": uuid5(NAMESPACE_OID, current_chunk), "chunk_index": chunk_index, - "cut_type": end_type + "cut_type": end_type, } yield chunk_dict paragraph_ids = [] current_chunk = "" current_word_count = 0 + current_token_count = 0 chunk_index += 1 - + last_cut_type = end_type - + # Yield any remaining text if current_chunk: chunk_dict = { "text": current_chunk, "word_count": current_word_count, + "token_count": current_token_count, "chunk_id": uuid5(NAMESPACE_OID, current_chunk), "paragraph_ids": paragraph_ids, "chunk_index": chunk_index, - "cut_type": "sentence_cut" if last_cut_type == "word" else last_cut_type + "cut_type": "sentence_cut" if last_cut_type == "word" else last_cut_type, } - - - yield chunk_dict \ No newline at end of file + + yield chunk_dict diff --git a/cognee/tasks/chunks/chunk_by_sentence.py b/cognee/tasks/chunks/chunk_by_sentence.py index c6848f066..128ed4047 100644 --- a/cognee/tasks/chunks/chunk_by_sentence.py +++ b/cognee/tasks/chunks/chunk_by_sentence.py @@ -1,10 +1,8 @@ - - - from uuid import uuid4 from typing import Optional from .chunk_by_word import chunk_by_word + def chunk_by_sentence(data: str, maximum_length: Optional[int] = None): sentence = "" paragraph_id = uuid4() @@ -16,7 +14,7 @@ def chunk_by_sentence(data: str, maximum_length: Optional[int] = None): # the word type is 'word', the word doesn't contain any letters # and words with the same characteristics connect it to a preceding # word with word_type 'paragraph_end' or 'sentence_end' - for (word, word_type) in chunk_by_word(data): + for word, word_type in chunk_by_word(data): sentence += word word_count += 1 @@ -28,7 +26,9 @@ def chunk_by_sentence(data: str, maximum_length: Optional[int] = None): word_type_state = word_type break - if word_type in ["paragraph_end", "sentence_end"] or (maximum_length and (word_count == maximum_length)): + if word_type in ["paragraph_end", "sentence_end"] or ( + maximum_length and (word_count == maximum_length) + ): yield (paragraph_id, sentence, word_count, word_type_state) sentence = "" word_count = 0 diff --git a/cognee/tasks/chunks/chunk_by_word.py b/cognee/tasks/chunks/chunk_by_word.py index ab4d8343e..c42d0cfa1 100644 --- a/cognee/tasks/chunks/chunk_by_word.py +++ b/cognee/tasks/chunks/chunk_by_word.py @@ -3,15 +3,16 @@ import re SENTENCE_ENDINGS = r"[.;!?…]" PARAGRAPH_ENDINGS = r"[\n\r]" + def is_real_paragraph_end(last_char: str, current_pos: int, text: str) -> bool: """ Determines if the current position represents a real paragraph ending. - + Args: last_char: The last processed character current_pos: Current position in the text text: The input text - + Returns: bool: True if this is a real paragraph end, False otherwise """ @@ -20,18 +21,19 @@ def is_real_paragraph_end(last_char: str, current_pos: int, text: str) -> bool: j = current_pos + 1 if j >= len(text): return False - + next_character = text[j] while j < len(text) and (re.match(PARAGRAPH_ENDINGS, next_character) or next_character == " "): j += 1 if j >= len(text): return False next_character = text[j] - + if next_character.isupper(): return True return False + def chunk_by_word(data: str): """ Chunks text into words and endings while preserving whitespace. @@ -40,32 +42,32 @@ def chunk_by_word(data: str): """ current_chunk = "" i = 0 - + while i < len(data): character = data[i] - + current_chunk += character - + if character == " ": yield (current_chunk, "word") current_chunk = "" i += 1 continue - - if re.match(SENTENCE_ENDINGS, character): + + if re.match(SENTENCE_ENDINGS, character): # Look ahead for whitespace next_i = i + 1 while next_i < len(data) and data[next_i] == " ": current_chunk += data[next_i] next_i += 1 - + is_paragraph_end = next_i < len(data) and re.match(PARAGRAPH_ENDINGS, data[next_i]) yield (current_chunk, "paragraph_end" if is_paragraph_end else "sentence_end") current_chunk = "" i = next_i continue - + i += 1 - + if current_chunk: - yield (current_chunk, "word") \ No newline at end of file + yield (current_chunk, "word") diff --git a/cognee/tasks/chunks/query_chunks.py b/cognee/tasks/chunks/query_chunks.py index 399528ee9..5a6d4f666 100644 --- a/cognee/tasks/chunks/query_chunks.py +++ b/cognee/tasks/chunks/query_chunks.py @@ -1,5 +1,6 @@ from cognee.infrastructure.databases.vector import get_vector_engine + async def query_chunks(query: str) -> list[dict]: """ Parameters: @@ -10,7 +11,7 @@ async def query_chunks(query: str) -> list[dict]: """ vector_engine = get_vector_engine() - found_chunks = await vector_engine.search("document_chunk_text", query, limit = 5) + found_chunks = await vector_engine.search("document_chunk_text", query, limit=5) chunks = [result.payload for result in found_chunks] diff --git a/cognee/tasks/chunks/remove_disconnected_chunks.py b/cognee/tasks/chunks/remove_disconnected_chunks.py index 4a36a33ec..60443ecfc 100644 --- a/cognee/tasks/chunks/remove_disconnected_chunks.py +++ b/cognee/tasks/chunks/remove_disconnected_chunks.py @@ -1,6 +1,7 @@ from cognee.infrastructure.databases.graph import get_graph_engine from cognee.modules.chunking.models.DocumentChunk import DocumentChunk + async def remove_disconnected_chunks(data_chunks: list[DocumentChunk]) -> list[DocumentChunk]: graph_engine = await get_graph_engine() @@ -9,10 +10,12 @@ async def remove_disconnected_chunks(data_chunks: list[DocumentChunk]) -> list[D obsolete_chunk_ids = [] for document_id in document_ids: - chunks = await graph_engine.get_successors(document_id, edge_label = "has_chunk") + chunks = await graph_engine.get_successors(document_id, edge_label="has_chunk") for chunk in chunks: - previous_chunks = await graph_engine.get_predecessors(chunk["uuid"], edge_label = "next_chunk") + previous_chunks = await graph_engine.get_predecessors( + chunk["uuid"], edge_label="next_chunk" + ) if len(previous_chunks) == 0: obsolete_chunk_ids.append(chunk["uuid"]) diff --git a/cognee/tasks/completion/__init__.py b/cognee/tasks/completion/__init__.py new file mode 100644 index 000000000..4bbbd01e1 --- /dev/null +++ b/cognee/tasks/completion/__init__.py @@ -0,0 +1,2 @@ +from .query_completion import query_completion +from .graph_query_completion import graph_query_completion diff --git a/cognee/tasks/completion/exceptions/__init__.py b/cognee/tasks/completion/exceptions/__init__.py new file mode 100644 index 000000000..1530bf3f2 --- /dev/null +++ b/cognee/tasks/completion/exceptions/__init__.py @@ -0,0 +1,9 @@ +""" +Custom exceptions for the Cognee API. + +This module defines a set of exceptions for handling various compute errors +""" + +from .exceptions import ( + NoRelevantDataFound, +) diff --git a/cognee/tasks/completion/exceptions/exceptions.py b/cognee/tasks/completion/exceptions/exceptions.py new file mode 100644 index 000000000..bb4bcb0c8 --- /dev/null +++ b/cognee/tasks/completion/exceptions/exceptions.py @@ -0,0 +1,12 @@ +from cognee.exceptions import CogneeApiError +from fastapi import status + + +class NoRelevantDataFound(CogneeApiError): + def __init__( + self, + message: str = "Search did not find any data.", + name: str = "NoRelevantDataFound", + status_code=status.HTTP_404_NOT_FOUND, + ): + super().__init__(message, name, status_code) diff --git a/cognee/tasks/completion/graph_query_completion.py b/cognee/tasks/completion/graph_query_completion.py new file mode 100644 index 000000000..b130d4f7b --- /dev/null +++ b/cognee/tasks/completion/graph_query_completion.py @@ -0,0 +1,46 @@ +from cognee.infrastructure.databases.vector import get_vector_engine +from cognee.tasks.completion.exceptions import NoRelevantDataFound +from cognee.infrastructure.llm.get_llm_client import get_llm_client +from cognee.infrastructure.llm.prompts import read_query_prompt, render_prompt +from cognee.modules.retrieval.brute_force_triplet_search import brute_force_triplet_search + + +def retrieved_edges_to_string(retrieved_edges: list) -> str: + edge_strings = [] + for edge in retrieved_edges: + node1_string = edge.node1.attributes.get("text") or edge.node1.attributes.get("name") + node2_string = edge.node2.attributes.get("text") or edge.node2.attributes.get("name") + edge_string = edge.attributes["relationship_type"] + edge_str = f"{node1_string} -- {edge_string} -- {node2_string}" + edge_strings.append(edge_str) + return "\n---\n".join(edge_strings) + + +async def graph_query_completion(query: str) -> list: + """ + Parameters: + - query (str): The query string to compute. + + Returns: + - list: Answer to the query. + """ + found_triplets = await brute_force_triplet_search(query, top_k=5) + + if len(found_triplets) == 0: + raise NoRelevantDataFound + + args = { + "question": query, + "context": retrieved_edges_to_string(found_triplets), + } + user_prompt = render_prompt("graph_context_for_question.txt", args) + system_prompt = read_query_prompt("answer_simple_question_restricted.txt") + + llm_client = get_llm_client() + computed_answer = await llm_client.acreate_structured_output( + text_input=user_prompt, + system_prompt=system_prompt, + response_model=str, + ) + + return [computed_answer] diff --git a/cognee/tasks/completion/query_completion.py b/cognee/tasks/completion/query_completion.py new file mode 100644 index 000000000..12e5168b0 --- /dev/null +++ b/cognee/tasks/completion/query_completion.py @@ -0,0 +1,36 @@ +from cognee.infrastructure.databases.vector import get_vector_engine +from cognee.tasks.completion.exceptions import NoRelevantDataFound +from cognee.infrastructure.llm.get_llm_client import get_llm_client +from cognee.infrastructure.llm.prompts import read_query_prompt, render_prompt + + +async def query_completion(query: str) -> list: + """ + Parameters: + - query (str): The query string to compute. + + Returns: + - list: Answer to the query. + """ + vector_engine = get_vector_engine() + + found_chunks = await vector_engine.search("document_chunk_text", query, limit=1) + + if len(found_chunks) == 0: + raise NoRelevantDataFound + + args = { + "question": query, + "context": found_chunks[0].payload["text"], + } + user_prompt = render_prompt("context_for_question.txt", args) + system_prompt = read_query_prompt("answer_simple_question.txt") + + llm_client = get_llm_client() + computed_answer = await llm_client.acreate_structured_output( + text_input=user_prompt, + system_prompt=system_prompt, + response_model=str, + ) + + return [computed_answer] diff --git a/cognee/tasks/documents/check_permissions_on_documents.py b/cognee/tasks/documents/check_permissions_on_documents.py index ddedefe3f..7d18cbf3a 100644 --- a/cognee/tasks/documents/check_permissions_on_documents.py +++ b/cognee/tasks/documents/check_permissions_on_documents.py @@ -1,6 +1,7 @@ from cognee.modules.data.processing.document_types import Document from cognee.modules.users.permissions.methods import check_permission_on_documents + async def check_permissions_on_documents(documents: list[Document], user, permissions): document_ids = [document.id for document in documents] diff --git a/cognee/tasks/documents/classify_documents.py b/cognee/tasks/documents/classify_documents.py index 47beeb917..118da5738 100644 --- a/cognee/tasks/documents/classify_documents.py +++ b/cognee/tasks/documents/classify_documents.py @@ -54,13 +54,13 @@ async def classify_documents(data_documents: list[Data]) -> list[Document]: for data_item in data_documents: metadata = await get_metadata(data_item.id) document = EXTENSION_TO_DOCUMENT_CLASS[data_item.extension]( - id = data_item.id, - title = f"{data_item.name}.{data_item.extension}", - raw_data_location = data_item.raw_data_location, - name = data_item.name, - mime_type = data_item.mime_type, - metadata_id = metadata.id + id=data_item.id, + title=f"{data_item.name}.{data_item.extension}", + raw_data_location=data_item.raw_data_location, + name=data_item.name, + mime_type=data_item.mime_type, + metadata_id=metadata.id, ) documents.append(document) - + return documents diff --git a/cognee/tasks/documents/extract_chunks_from_documents.py b/cognee/tasks/documents/extract_chunks_from_documents.py index ec19a786d..5ce224002 100644 --- a/cognee/tasks/documents/extract_chunks_from_documents.py +++ b/cognee/tasks/documents/extract_chunks_from_documents.py @@ -1,7 +1,16 @@ +from typing import Optional + from cognee.modules.data.processing.document_types.Document import Document -async def extract_chunks_from_documents(documents: list[Document], chunk_size: int = 1024): +async def extract_chunks_from_documents( + documents: list[Document], + chunk_size: int = 1024, + chunker="text_chunker", + max_tokens: Optional[int] = None, +): for document in documents: - for document_chunk in document.read(chunk_size = chunk_size): + for document_chunk in document.read( + chunk_size=chunk_size, chunker=chunker, max_tokens=max_tokens + ): yield document_chunk diff --git a/cognee/tasks/graph/extract_graph_from_code.py b/cognee/tasks/graph/extract_graph_from_code.py index 159e9baa4..8688b0af5 100644 --- a/cognee/tasks/graph/extract_graph_from_code.py +++ b/cognee/tasks/graph/extract_graph_from_code.py @@ -5,12 +5,13 @@ from cognee.modules.data.extraction.knowledge_graph import extract_content_graph from cognee.modules.chunking.models.DocumentChunk import DocumentChunk from cognee.tasks.storage import add_data_points + async def extract_graph_from_code(data_chunks: list[DocumentChunk], graph_model: Type[BaseModel]): chunk_graphs = await asyncio.gather( *[extract_content_graph(chunk.text, graph_model) for chunk in data_chunks] ) - for (chunk_index, chunk) in enumerate(data_chunks): + for chunk_index, chunk in enumerate(data_chunks): chunk_graph = chunk_graphs[chunk_index] await add_data_points(chunk_graph.nodes) diff --git a/cognee/tasks/graph/extract_graph_from_data.py b/cognee/tasks/graph/extract_graph_from_data.py index c6a613105..b05c55a9e 100644 --- a/cognee/tasks/graph/extract_graph_from_data.py +++ b/cognee/tasks/graph/extract_graph_from_data.py @@ -13,9 +13,7 @@ from cognee.modules.graph.utils import ( from cognee.tasks.storage import add_data_points -async def extract_graph_from_data( - data_chunks: list[DocumentChunk], graph_model: Type[BaseModel] -): +async def extract_graph_from_data(data_chunks: list[DocumentChunk], graph_model: Type[BaseModel]): chunk_graphs = await asyncio.gather( *[extract_content_graph(chunk.text, graph_model) for chunk in data_chunks] ) diff --git a/cognee/tasks/graph/infer_data_ontology.py b/cognee/tasks/graph/infer_data_ontology.py index 4e11cd9af..ca7807e1e 100644 --- a/cognee/tasks/graph/infer_data_ontology.py +++ b/cognee/tasks/graph/infer_data_ontology.py @@ -1,4 +1,4 @@ -""" This module contains the OntologyEngine class which is responsible for adding graph ontology from a JSON or CSV file. """ +"""This module contains the OntologyEngine class which is responsible for adding graph ontology from a JSON or CSV file.""" import csv import json @@ -20,7 +20,9 @@ from cognee.infrastructure.data.chunking.get_chunking_engine import get_chunk_en from cognee.infrastructure.databases.graph.get_graph_engine import get_graph_engine from cognee.infrastructure.files.utils.extract_text_from_file import extract_text_from_file from cognee.infrastructure.files.utils.guess_file_type import guess_file_type, FileTypeException -from cognee.modules.data.extraction.knowledge_graph.add_model_class_to_graph import add_model_class_to_graph +from cognee.modules.data.extraction.knowledge_graph.add_model_class_to_graph import ( + add_model_class_to_graph, +) from cognee.tasks.graph.models import NodeModel, GraphOntology from cognee.shared.data_models import KnowledgeGraph from cognee.modules.engine.utils import generate_node_id, generate_node_name @@ -39,20 +41,26 @@ async def extract_ontology(content: str, response_model: Type[BaseModel]): class OntologyEngine: - async def flatten_model(self, model: NodeModel, parent_id: Optional[str] = None) -> Dict[str, Any]: + async def flatten_model( + self, model: NodeModel, parent_id: Optional[str] = None + ) -> Dict[str, Any]: """Flatten the model to a dictionary.""" result = model.dict() result["parent_id"] = parent_id if model.default_relationship: - result.update({ - "relationship_type": model.default_relationship.type, - "relationship_source": model.default_relationship.source, - "relationship_target": model.default_relationship.target - }) + result.update( + { + "relationship_type": model.default_relationship.type, + "relationship_source": model.default_relationship.source, + "relationship_target": model.default_relationship.target, + } + ) return result - async def recursive_flatten(self, items: Union[List[Dict[str, Any]], Dict[str, Any]], parent_id: Optional[str] = None) -> List[Dict[str, Any]]: - """Recursively flatten the items. """ + async def recursive_flatten( + self, items: Union[List[Dict[str, Any]], Dict[str, Any]], parent_id: Optional[str] = None + ) -> List[Dict[str, Any]]: + """Recursively flatten the items.""" flat_list = [] if isinstance(items, list): @@ -80,8 +88,10 @@ class OntologyEngine: else: raise IngestionError(message="Unsupported file format") except Exception as e: - raise IngestionError(message=f"Failed to load data from {file_path}: {e}", - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY) + raise IngestionError( + message=f"Failed to load data from {file_path}: {e}", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + ) async def add_graph_ontology(self, file_path: str = None, documents: list = None): """Add graph ontology from a JSON or CSV file or infer from documents content.""" @@ -109,31 +119,43 @@ class OntologyEngine: initial_chunks_and_ids.append({base_file.id: chunks_with_ids}) except FileTypeException: - logger.warning("File (%s) has an unknown file type. We are skipping it.", file["id"]) - + logger.warning( + "File (%s) has an unknown file type. We are skipping it.", file["id"] + ) ontology = await extract_ontology(str(initial_chunks_and_ids), GraphOntology) graph_client = await get_graph_engine() - await graph_client.add_nodes([(node.id, dict( - uuid = generate_node_id(node.id), - name = generate_node_name(node.name), - type = generate_node_id(node.id), - description = node.description, - updated_at = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), - )) for node in ontology.nodes]) + await graph_client.add_nodes( + [ + ( + node.id, + dict( + uuid=generate_node_id(node.id), + name=generate_node_name(node.name), + type=generate_node_id(node.id), + description=node.description, + updated_at=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), + ), + ) + for node in ontology.nodes + ] + ) - await graph_client.add_edges(( - generate_node_id(edge.source_id), - generate_node_id(edge.target_id), - edge.relationship_type, - dict( - source_node_id = generate_node_id(edge.source_id), - target_node_id = generate_node_id(edge.target_id), - relationship_name = edge.relationship_type, - updated_at = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), - ), - ) for edge in ontology.edges) + await graph_client.add_edges( + ( + generate_node_id(edge.source_id), + generate_node_id(edge.target_id), + edge.relationship_type, + dict( + source_node_id=generate_node_id(edge.source_id), + target_node_id=generate_node_id(edge.target_id), + relationship_name=edge.relationship_type, + updated_at=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), + ), + ) + for edge in ontology.edges + ) else: dataset_level_information = documents[0][1] @@ -152,17 +174,23 @@ class OntologyEngine: if node_id in valid_ids: await graph_client.add_node(node_id, node_data) if node_id not in valid_ids: - raise EntityNotFoundError(message=f"Node ID {node_id} not found in the dataset") - if pd.notna(row.get("relationship_source")) and pd.notna(row.get("relationship_target")): + raise EntityNotFoundError( + message=f"Node ID {node_id} not found in the dataset" + ) + if pd.notna(row.get("relationship_source")) and pd.notna( + row.get("relationship_target") + ): await graph_client.add_edge( row["relationship_source"], row["relationship_target"], relationship_name=row["relationship_type"], - edge_properties = { + edge_properties={ "source_node_id": row["relationship_source"], "target_node_id": row["relationship_target"], "relationship_name": row["relationship_type"], - "updated_at": datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"), + "updated_at": datetime.now(timezone.utc).strftime( + "%Y-%m-%d %H:%M:%S" + ), }, ) @@ -171,10 +199,10 @@ class OntologyEngine: raise RuntimeError(f"Failed to add graph ontology from {file_path}: {e}") from e -async def infer_data_ontology(documents, ontology_model = KnowledgeGraph, root_node_id = None): +async def infer_data_ontology(documents, ontology_model=KnowledgeGraph, root_node_id=None): if ontology_model == KnowledgeGraph: ontology_engine = OntologyEngine() - root_node_id = await ontology_engine.add_graph_ontology(documents = documents) + root_node_id = await ontology_engine.add_graph_ontology(documents=documents) else: graph_engine = await get_graph_engine() await add_model_class_to_graph(ontology_model, graph_engine) diff --git a/cognee/tasks/graph/models.py b/cognee/tasks/graph/models.py index 5b1108e6a..bfffb0262 100644 --- a/cognee/tasks/graph/models.py +++ b/cognee/tasks/graph/models.py @@ -1,31 +1,36 @@ from typing import Any, Dict, List, Optional, Union from pydantic import BaseModel, Field + class RelationshipModel(BaseModel): type: str source: str target: str + class NodeModel(BaseModel): node_id: str name: str default_relationship: Optional[RelationshipModel] = None children: List[Union[Dict[str, Any], "NodeModel"]] = Field(default_factory=list) + NodeModel.model_rebuild() class OntologyNode(BaseModel): - id: str = Field(..., description = "Unique identifier made from node name.") + id: str = Field(..., description="Unique identifier made from node name.") name: str description: str + class OntologyEdge(BaseModel): id: str source_id: str target_id: str relationship_type: str + class GraphOntology(BaseModel): nodes: list[OntologyNode] - edges: list[OntologyEdge] \ No newline at end of file + edges: list[OntologyEdge] diff --git a/cognee/tasks/graph/query_graph_connections.py b/cognee/tasks/graph/query_graph_connections.py index 4020ddd13..faec94546 100644 --- a/cognee/tasks/graph/query_graph_connections.py +++ b/cognee/tasks/graph/query_graph_connections.py @@ -2,7 +2,8 @@ import asyncio from cognee.infrastructure.databases.graph import get_graph_engine from cognee.infrastructure.databases.vector import get_vector_engine -async def query_graph_connections(query: str, exploration_levels = 1) -> list[(str, str, str)]: + +async def query_graph_connections(query: str, exploration_levels=1) -> list[(str, str, str)]: """ Find the neighbours of a given node in the graph and return formed sentences. @@ -27,8 +28,8 @@ async def query_graph_connections(query: str, exploration_levels = 1) -> list[(s else: vector_engine = get_vector_engine() results = await asyncio.gather( - vector_engine.search("entity_name", query_text = query, limit = 5), - vector_engine.search("entity_type_name", query_text = query, limit = 5), + vector_engine.search("entity_name", query_text=query, limit=5), + vector_engine.search("entity_type_name", query_text=query, limit=5), ) results = [*results[0], *results[1]] relevant_results = [result for result in results if result.score < 0.5][:5] @@ -44,7 +45,6 @@ async def query_graph_connections(query: str, exploration_levels = 1) -> list[(s for neighbours in node_connections_results: node_connections.extend(neighbours) - unique_node_connections_map = {} unique_node_connections = [] for node_connection in node_connections: @@ -58,5 +58,4 @@ async def query_graph_connections(query: str, exploration_levels = 1) -> list[(s unique_node_connections.append(node_connection) - return unique_node_connections diff --git a/cognee/tasks/ingestion/__init__.py b/cognee/tasks/ingestion/__init__.py index f569267a1..8b873b273 100644 --- a/cognee/tasks/ingestion/__init__.py +++ b/cognee/tasks/ingestion/__init__.py @@ -3,3 +3,4 @@ from .save_data_to_storage import save_data_to_storage from .save_data_item_to_storage import save_data_item_to_storage from .save_data_item_with_metadata_to_storage import save_data_item_with_metadata_to_storage from .ingest_data_with_metadata import ingest_data_with_metadata +from .resolve_data_directories import resolve_data_directories diff --git a/cognee/tasks/ingestion/get_dlt_destination.py b/cognee/tasks/ingestion/get_dlt_destination.py index 12042c75b..2de0d7f0d 100644 --- a/cognee/tasks/ingestion/get_dlt_destination.py +++ b/cognee/tasks/ingestion/get_dlt_destination.py @@ -6,6 +6,7 @@ from typing import Union from cognee.infrastructure.databases.relational import get_relational_config + @lru_cache def get_dlt_destination() -> Union[type[dlt.destinations.sqlalchemy], None]: """ @@ -21,24 +22,24 @@ def get_dlt_destination() -> Union[type[dlt.destinations.sqlalchemy], None]: # When sqlite is the database provider hostname, port, username and password should not be forwarded. # The database is found by combining the path location and the database name destination = dlt.destinations.sqlalchemy( - credentials = { - "database": os.path.join(relational_config.db_path, relational_config.db_name), - "drivername": relational_config.db_provider, - }, - ) + credentials={ + "database": os.path.join(relational_config.db_path, relational_config.db_name), + "drivername": relational_config.db_provider, + }, + ) elif relational_config.db_provider == "postgres": # The dlt library doesn't accept postgres as the drivername, it only accepts postgresql destination = dlt.destinations.sqlalchemy( - credentials = { - "host": relational_config.db_host, - "port": relational_config.db_port, - "username": relational_config.db_username, - "password": relational_config.db_password, - "database": relational_config.db_name, - "drivername": "postgresql", - }, - ) + credentials={ + "host": relational_config.db_host, + "port": relational_config.db_port, + "username": relational_config.db_username, + "password": relational_config.db_password, + "database": relational_config.db_name, + "drivername": "postgresql", + }, + ) else: destination = None - + return destination diff --git a/cognee/tasks/ingestion/ingest_data.py b/cognee/tasks/ingestion/ingest_data.py index 9418d035b..cf7dd38ad 100644 --- a/cognee/tasks/ingestion/ingest_data.py +++ b/cognee/tasks/ingestion/ingest_data.py @@ -9,18 +9,19 @@ from cognee.modules.data.methods import create_dataset from cognee.modules.users.permissions.methods import give_permission_on_document from .get_dlt_destination import get_dlt_destination + async def ingest_data(file_paths: list[str], dataset_name: str, user: User): destination = get_dlt_destination() pipeline = dlt.pipeline( - pipeline_name = "file_load_from_filesystem", - destination = destination, + pipeline_name="file_load_from_filesystem", + destination=destination, ) - @dlt.resource(standalone = True, merge_key = "id") + @dlt.resource(standalone=True, merge_key="id") async def data_resources(file_paths: str): for file_path in file_paths: - with open(file_path.replace("file://", ""), mode = "rb") as file: + with open(file_path.replace("file://", ""), mode="rb") as file: classified_data = ingestion.classify(file) data_id = ingestion.identify(classified_data) file_metadata = classified_data.get_metadata() @@ -39,39 +40,39 @@ async def ingest_data(file_paths: list[str], dataset_name: str, user: User): # Read metadata stored with dlt files_metadata = await db_engine.get_all_data_from_table(table_name, dataset_name) for file_metadata in files_metadata: - from sqlalchemy import select - from cognee.modules.data.models import Data - dataset = await create_dataset(dataset_name, user.id, session) + from sqlalchemy import select + from cognee.modules.data.models import Data - data = (await session.execute( - select(Data).filter(Data.id == UUID(file_metadata["id"])) - )).scalar_one_or_none() + dataset = await create_dataset(dataset_name, user.id, session) - if data is not None: - data.name = file_metadata["name"] - data.raw_data_location = file_metadata["file_path"] - data.extension = file_metadata["extension"] - data.mime_type = file_metadata["mime_type"] + data = ( + await session.execute(select(Data).filter(Data.id == UUID(file_metadata["id"]))) + ).scalar_one_or_none() - await session.merge(data) - await session.commit() - else: - data = Data( - id = UUID(file_metadata["id"]), - name = file_metadata["name"], - raw_data_location = file_metadata["file_path"], - extension = file_metadata["extension"], - mime_type = file_metadata["mime_type"], - ) + if data is not None: + data.name = file_metadata["name"] + data.raw_data_location = file_metadata["file_path"] + data.extension = file_metadata["extension"] + data.mime_type = file_metadata["mime_type"] - dataset.data.append(data) - await session.commit() + await session.merge(data) + await session.commit() + else: + data = Data( + id=UUID(file_metadata["id"]), + name=file_metadata["name"], + raw_data_location=file_metadata["file_path"], + extension=file_metadata["extension"], + mime_type=file_metadata["mime_type"], + ) - await give_permission_on_document(user, UUID(file_metadata["id"]), "read") - await give_permission_on_document(user, UUID(file_metadata["id"]), "write") + dataset.data.append(data) + await session.commit() + await give_permission_on_document(user, UUID(file_metadata["id"]), "read") + await give_permission_on_document(user, UUID(file_metadata["id"]), "write") - send_telemetry("cognee.add EXECUTION STARTED", user_id = user.id) + send_telemetry("cognee.add EXECUTION STARTED", user_id=user.id) db_engine = get_relational_engine() @@ -82,9 +83,9 @@ async def ingest_data(file_paths: list[str], dataset_name: str, user: User): # Sqlite doesn't support schemas run_info = pipeline.run( data_resources(file_paths), - table_name = "file_metadata", - dataset_name = "main", - write_disposition = "merge", + table_name="file_metadata", + dataset_name="main", + write_disposition="merge", ) else: run_info = pipeline.run( @@ -95,6 +96,6 @@ async def ingest_data(file_paths: list[str], dataset_name: str, user: User): ) await data_storing("file_metadata", dataset_name, user) - send_telemetry("cognee.add EXECUTION COMPLETED", user_id = user.id) + send_telemetry("cognee.add EXECUTION COMPLETED", user_id=user.id) return run_info diff --git a/cognee/tasks/ingestion/ingest_data_with_metadata.py b/cognee/tasks/ingestion/ingest_data_with_metadata.py index c6b42f482..04396485c 100644 --- a/cognee/tasks/ingestion/ingest_data_with_metadata.py +++ b/cognee/tasks/ingestion/ingest_data_with_metadata.py @@ -19,8 +19,8 @@ async def ingest_data_with_metadata(data: Any, dataset_name: str, user: User): destination = get_dlt_destination() pipeline = dlt.pipeline( - pipeline_name = "file_load_from_filesystem", - destination = destination, + pipeline_name="file_load_from_filesystem", + destination=destination, ) @dlt.resource(standalone=True, primary_key="id", merge_key="id") @@ -49,14 +49,12 @@ async def ingest_data_with_metadata(data: Any, dataset_name: str, user: User): # Process data for data_item in data: - file_path = await save_data_item_with_metadata_to_storage( - data_item, dataset_name - ) + file_path = await save_data_item_with_metadata_to_storage(data_item, dataset_name) file_paths.append(file_path) # Ingest data and add metadata - with open(file_path.replace("file://", ""), mode = "rb") as file: + with open(file_path.replace("file://", ""), mode="rb") as file: classified_data = ingestion.classify(file) # data_id is the hash of file contents + owner id to avoid duplicate data @@ -88,19 +86,22 @@ async def ingest_data_with_metadata(data: Any, dataset_name: str, user: User): await session.merge(data_point) else: data_point = Data( - id = data_id, - name = file_metadata["name"], - raw_data_location = file_metadata["file_path"], - extension = file_metadata["extension"], - mime_type = file_metadata["mime_type"], - owner_id = user.id, - content_hash = file_metadata["content_hash"], + id=data_id, + name=file_metadata["name"], + raw_data_location=file_metadata["file_path"], + extension=file_metadata["extension"], + mime_type=file_metadata["mime_type"], + owner_id=user.id, + content_hash=file_metadata["content_hash"], ) # Check if data is already in dataset dataset_data = ( - await session.execute(select(DatasetData).filter(DatasetData.data_id == data_id, - DatasetData.dataset_id == dataset.id)) + await session.execute( + select(DatasetData).filter( + DatasetData.data_id == data_id, DatasetData.dataset_id == dataset.id + ) + ) ).scalar_one_or_none() # If data is not present in dataset add it if dataset_data is None: diff --git a/cognee/tasks/ingestion/resolve_data_directories.py b/cognee/tasks/ingestion/resolve_data_directories.py new file mode 100644 index 000000000..e549688d8 --- /dev/null +++ b/cognee/tasks/ingestion/resolve_data_directories.py @@ -0,0 +1,44 @@ +import os +from typing import List, Union, BinaryIO + + +async def resolve_data_directories( + data: Union[BinaryIO, List[BinaryIO], str, List[str]], include_subdirectories: bool = True +): + """ + Resolves directories by replacing them with their contained files. + + Args: + data: A single file, directory, or binary stream, or a list of such items. + include_subdirectories: Whether to include files in subdirectories recursively. + + Returns: + A list of resolved files and binary streams. + """ + # Ensure `data` is a list + if not isinstance(data, list): + data = [data] + + resolved_data = [] + + for item in data: + if isinstance(item, str): # Check if the item is a path + if os.path.isdir(item): # If it's a directory + if include_subdirectories: + # Recursively add all files in the directory and subdirectories + for root, _, files in os.walk(item): + resolved_data.extend([os.path.join(root, f) for f in files]) + else: + # Add all files (not subdirectories) in the directory + resolved_data.extend( + [ + os.path.join(item, f) + for f in os.listdir(item) + if os.path.isfile(os.path.join(item, f)) + ] + ) + else: # If it's a file or text add it directly + resolved_data.append(item) + else: # If it's not a string add it directly + resolved_data.append(item) + return resolved_data diff --git a/cognee/tasks/ingestion/save_data_item_to_storage.py b/cognee/tasks/ingestion/save_data_item_to_storage.py index 88d499e74..9191f7ebc 100644 --- a/cognee/tasks/ingestion/save_data_item_to_storage.py +++ b/cognee/tasks/ingestion/save_data_item_to_storage.py @@ -3,8 +3,8 @@ from typing import Union, BinaryIO from cognee.modules.ingestion.exceptions import IngestionError from cognee.modules.ingestion import save_data_to_file -def save_data_item_to_storage(data_item: Union[BinaryIO, str], dataset_name: str) -> str: +def save_data_item_to_storage(data_item: Union[BinaryIO, str], dataset_name: str) -> str: # data is a file object coming from upload. if hasattr(data_item, "file"): file_path = save_data_to_file(data_item.file, filename=data_item.filename) @@ -19,4 +19,4 @@ def save_data_item_to_storage(data_item: Union[BinaryIO, str], dataset_name: str else: raise IngestionError(message=f"Data type not supported: {type(data_item)}") - return file_path \ No newline at end of file + return file_path diff --git a/cognee/tasks/ingestion/save_data_item_with_metadata_to_storage.py b/cognee/tasks/ingestion/save_data_item_with_metadata_to_storage.py index 06dde11bd..92697abb7 100644 --- a/cognee/tasks/ingestion/save_data_item_with_metadata_to_storage.py +++ b/cognee/tasks/ingestion/save_data_item_with_metadata_to_storage.py @@ -7,7 +7,6 @@ from cognee.modules.ingestion import save_data_to_file async def save_data_item_with_metadata_to_storage( data_item: Union[BinaryIO, str, Any], dataset_name: str ) -> str: - if "llama_index" in str(type(data_item)): # Dynamic import is used because the llama_index module is optional. from .transform_data import get_data_from_llama_index @@ -16,9 +15,7 @@ async def save_data_item_with_metadata_to_storage( # data is a file object coming from upload. elif hasattr(data_item, "file"): - file_path = save_data_to_file( - data_item.file, filename=data_item.filename - ) + file_path = save_data_to_file(data_item.file, filename=data_item.filename) elif isinstance(data_item, str): # data is a file path diff --git a/cognee/tasks/ingestion/save_data_to_storage.py b/cognee/tasks/ingestion/save_data_to_storage.py index 85eb81582..a56857261 100644 --- a/cognee/tasks/ingestion/save_data_to_storage.py +++ b/cognee/tasks/ingestion/save_data_to_storage.py @@ -1,6 +1,7 @@ from typing import Union, BinaryIO from cognee.tasks.ingestion.save_data_item_to_storage import save_data_item_to_storage + def save_data_to_storage(data: Union[BinaryIO, str], dataset_name) -> list[str]: if not isinstance(data, list): # Convert data to a list as we work with lists further down. diff --git a/cognee/tasks/ingestion/transform_data.py b/cognee/tasks/ingestion/transform_data.py index 898ac6e71..cc75c7a65 100644 --- a/cognee/tasks/ingestion/transform_data.py +++ b/cognee/tasks/ingestion/transform_data.py @@ -3,16 +3,17 @@ from llama_index.core.schema import ImageDocument from cognee.modules.ingestion import save_data_to_file from typing import Union + def get_data_from_llama_index(data_point: Union[Document, ImageDocument], dataset_name: str) -> str: # Specific type checking is used to ensure it's not a child class from Document - if type(data_point) == Document: + if isinstance(data_point, Document) and type(data_point) is Document: file_path = data_point.metadata.get("file_path") if file_path is None: file_path = save_data_to_file(data_point.text) return file_path return file_path - elif type(data_point) == ImageDocument: + elif isinstance(data_point, ImageDocument) and type(data_point) is ImageDocument: if data_point.image_path is None: file_path = save_data_to_file(data_point.text) return file_path - return data_point.image_path \ No newline at end of file + return data_point.image_path diff --git a/cognee/tasks/repo_processor/__init__.py b/cognee/tasks/repo_processor/__init__.py index 05e111b29..8f0df23d8 100644 --- a/cognee/tasks/repo_processor/__init__.py +++ b/cognee/tasks/repo_processor/__init__.py @@ -1,7 +1,4 @@ -import logging - -logger = logging.getLogger("task:repo_processor") - from .enrich_dependency_graph import enrich_dependency_graph from .expand_dependency_graph import expand_dependency_graph +from .get_non_code_files import get_data_list_for_user, get_non_py_files from .get_repo_file_dependencies import get_repo_file_dependencies diff --git a/cognee/tasks/repo_processor/enrich_dependency_graph.py b/cognee/tasks/repo_processor/enrich_dependency_graph.py index 8cce7c42a..5f2b91d95 100644 --- a/cognee/tasks/repo_processor/enrich_dependency_graph.py +++ b/cognee/tasks/repo_processor/enrich_dependency_graph.py @@ -8,7 +8,9 @@ from cognee.modules.graph.utils import get_graph_from_model, convert_node_to_dat from cognee.infrastructure.databases.graph import get_graph_engine -def topologically_sort_subgraph(subgraph_node_to_indegree: Dict[str, int], graph: nx.DiGraph) -> List[str]: +def topologically_sort_subgraph( + subgraph_node_to_indegree: Dict[str, int], graph: nx.DiGraph +) -> List[str]: """Performs a topological sort on a subgraph based on node indegrees.""" results = [] remaining_nodes = subgraph_node_to_indegree.copy() @@ -33,13 +35,8 @@ def topologically_sort(graph: nx.DiGraph) -> List[str]: topological_order = [] for subgraph in subgraphs: - node_to_indegree = { - node: len(list(subgraph.successors(node))) - for node in subgraph.nodes - } - topological_order.extend( - topologically_sort_subgraph(node_to_indegree, subgraph) - ) + node_to_indegree = {node: len(list(subgraph.successors(node))) for node in subgraph.nodes} + topological_order.extend(topologically_sort_subgraph(node_to_indegree, subgraph)) return topological_order @@ -62,7 +59,7 @@ async def node_enrich_and_connect( graph_engine = await get_graph_engine() for desc_id in node_descendants: - if desc_id not in topological_order[:topological_rank + 1]: + if desc_id not in topological_order[: topological_rank + 1]: continue desc = None @@ -83,7 +80,9 @@ async def node_enrich_and_connect( node.depends_directly_on.extend(new_connections) -async def enrich_dependency_graph(data_points: list[DataPoint]) -> AsyncGenerator[list[DataPoint], None]: +async def enrich_dependency_graph( + data_points: list[DataPoint], +) -> AsyncGenerator[list[DataPoint], None]: """Enriches the graph with topological ranks and 'depends_on' edges.""" nodes = [] edges = [] @@ -94,9 +93,9 @@ async def enrich_dependency_graph(data_points: list[DataPoint]) -> AsyncGenerato for data_point in data_points: graph_nodes, graph_edges = await get_graph_from_model( data_point, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, ) nodes.extend(graph_nodes) edges.extend(graph_edges) @@ -122,7 +121,7 @@ async def enrich_dependency_graph(data_points: list[DataPoint]) -> AsyncGenerato data_points_map = {data_point.id: data_point for data_point in data_points} # data_points_futures = [] - for data_point in tqdm(data_points, desc = "Enriching dependency graph", unit = "data_point"): + for data_point in tqdm(data_points, desc="Enriching dependency graph", unit="data_point"): if data_point.id not in node_rank_map: continue @@ -131,7 +130,7 @@ async def enrich_dependency_graph(data_points: list[DataPoint]) -> AsyncGenerato await node_enrich_and_connect(graph, topological_order, data_point, data_points_map) yield data_point - + # await asyncio.gather(*data_points_futures) # return data_points diff --git a/cognee/tasks/repo_processor/expand_dependency_graph.py b/cognee/tasks/repo_processor/expand_dependency_graph.py index 43a451bd6..cc957742b 100644 --- a/cognee/tasks/repo_processor/expand_dependency_graph.py +++ b/cognee/tasks/repo_processor/expand_dependency_graph.py @@ -1,10 +1,14 @@ from typing import AsyncGenerator from uuid import NAMESPACE_OID, uuid5 + # from tqdm import tqdm from cognee.infrastructure.engine import DataPoint from cognee.shared.CodeGraphEntities import CodeFile, CodePart from cognee.tasks.repo_processor.extract_code_parts import extract_code_parts -from cognee.tasks.repo_processor import logger +import logging + +logger = logging.getLogger(__name__) + def _add_code_parts_nodes_and_edges(code_file: CodeFile, part_type, code_parts) -> None: """Add code part nodes and edges for a specific part type.""" @@ -21,12 +25,14 @@ def _add_code_parts_nodes_and_edges(code_file: CodeFile, part_type, code_parts) part_node_id = uuid5(NAMESPACE_OID, f"{code_file.id}_{part_type}_{idx}") - part_nodes.append(CodePart( - id = part_node_id, - type = part_type, - # part_of = code_file, - source_code = code_part, - )) + part_nodes.append( + CodePart( + id=part_node_id, + type=part_type, + # part_of = code_file, + source_code=code_part, + ) + ) # graph.add_node(part_node_id, source_code=code_part, node_type=part_type) # graph.add_edge(parent_node_id, part_node_id, relation="contains") @@ -54,7 +60,9 @@ def _process_single_node(code_file: CodeFile) -> None: _add_code_parts_nodes_and_edges(code_file, part_type, code_parts) -async def expand_dependency_graph(data_points: list[DataPoint]) -> AsyncGenerator[list[DataPoint], None]: +async def expand_dependency_graph( + data_points: list[DataPoint], +) -> AsyncGenerator[list[DataPoint], None]: """Process Python file nodes, adding code part nodes and edges.""" # for data_point in tqdm(data_points, desc = "Expand dependency graph", unit = "data_point"): for data_point in data_points: diff --git a/cognee/tasks/repo_processor/extract_code_parts.py b/cognee/tasks/repo_processor/extract_code_parts.py index d772c73f5..c8e478692 100644 --- a/cognee/tasks/repo_processor/extract_code_parts.py +++ b/cognee/tasks/repo_processor/extract_code_parts.py @@ -1,7 +1,8 @@ from typing import Dict, List import parso +import logging -from cognee.tasks.repo_processor import logger +logger = logging.getLogger(__name__) def _extract_parts_from_module(module, parts_dict: Dict[str, List[str]]) -> Dict[str, List[str]]: @@ -9,19 +10,19 @@ def _extract_parts_from_module(module, parts_dict: Dict[str, List[str]]) -> Dict current_top_level_code = [] child_to_code_type = { - 'classdef': "classes", - 'funcdef': "functions", - 'import_name': "imports", - 'import_from': "imports", + "classdef": "classes", + "funcdef": "functions", + "import_name": "imports", + "import_from": "imports", } for child in module.children: - if child.type == 'simple_stmt': + if child.type == "simple_stmt": current_top_level_code.append(child.get_code()) continue if current_top_level_code: - parts_dict["top_level_code"].append('\n'.join(current_top_level_code)) + parts_dict["top_level_code"].append("\n".join(current_top_level_code)) current_top_level_code = [] if child.type in child_to_code_type: @@ -29,10 +30,10 @@ def _extract_parts_from_module(module, parts_dict: Dict[str, List[str]]) -> Dict parts_dict[code_type].append(child.get_code()) if current_top_level_code: - parts_dict["top_level_code"].append('\n'.join(current_top_level_code)) + parts_dict["top_level_code"].append("\n".join(current_top_level_code)) if parts_dict["imports"]: - parts_dict["imports"] = ['\n'.join(parts_dict["imports"])] + parts_dict["imports"] = ["\n".join(parts_dict["imports"])] return parts_dict diff --git a/cognee/tasks/repo_processor/get_local_dependencies.py b/cognee/tasks/repo_processor/get_local_dependencies.py index fb4c68710..888f847da 100644 --- a/cognee/tasks/repo_processor/get_local_dependencies.py +++ b/cognee/tasks/repo_processor/get_local_dependencies.py @@ -9,8 +9,9 @@ import aiofiles import jedi import parso from parso.tree import BaseNode +import logging -from cognee.tasks.repo_processor import logger +logger = logging.getLogger(__name__) @contextmanager @@ -29,15 +30,15 @@ def _get_code_entities(node: parso.tree.NodeOrLeaf) -> List[Dict[str, any]]: """ code_entity_list = [] - if not hasattr(node, 'children'): + if not hasattr(node, "children"): return code_entity_list - name_nodes = (child for child in node.children if child.type == 'name') + name_nodes = (child for child in node.children if child.type == "name") for name_node in name_nodes: code_entity = { - 'name': name_node.value, - 'line': name_node.start_pos[0], - 'column': name_node.start_pos[1] + "name": name_node.value, + "line": name_node.start_pos[0], + "column": name_node.start_pos[1], } code_entity_list.append(code_entity) @@ -97,7 +98,9 @@ async def _extract_dependencies(script_path: str) -> List[str]: return sorted(str_paths) -async def get_local_script_dependencies(script_path: str, repo_path: Optional[str] = None) -> List[str]: +async def get_local_script_dependencies( + script_path: str, repo_path: Optional[str] = None +) -> List[str]: """ Extract and return a list of unique module paths that the script depends on. """ @@ -117,7 +120,9 @@ async def get_local_script_dependencies(script_path: str, repo_path: Optional[st return await _extract_dependencies(script_path) if not script_path.is_relative_to(repo_path): - logger.warning(f"Script {script_path} not in repo {repo_path}. Proceeding without repo_path.") + logger.warning( + f"Script {script_path} not in repo {repo_path}. Proceeding without repo_path." + ) return await _extract_dependencies(script_path) with add_sys_path(str(repo_path)): diff --git a/cognee/tasks/repo_processor/get_non_code_files.py b/cognee/tasks/repo_processor/get_non_code_files.py new file mode 100644 index 000000000..12f32e841 --- /dev/null +++ b/cognee/tasks/repo_processor/get_non_code_files.py @@ -0,0 +1,150 @@ +import os + +import aiofiles + +import cognee.modules.ingestion as ingestion +from cognee.infrastructure.engine import DataPoint +from cognee.modules.data.methods import get_datasets +from cognee.modules.data.methods.get_dataset_data import get_dataset_data +from cognee.modules.data.methods.get_datasets_by_name import get_datasets_by_name +from cognee.modules.data.models import Data +from cognee.modules.data.operations.write_metadata import write_metadata +from cognee.modules.ingestion.data_types import BinaryData +from cognee.modules.users.methods import get_default_user +from cognee.shared.CodeGraphEntities import Repository + + +async def get_non_py_files(repo_path): + """Get files that are not .py files and their contents""" + if not os.path.exists(repo_path): + return {} + + IGNORED_PATTERNS = { + ".git", + "__pycache__", + "*.pyc", + "*.pyo", + "*.pyd", + "node_modules", + "*.egg-info", + } + + ALLOWED_EXTENSIONS = { + ".txt", + ".md", + ".csv", + ".json", + ".xml", + ".yaml", + ".yml", + ".html", + ".css", + ".js", + ".ts", + ".jsx", + ".tsx", + ".sql", + ".log", + ".ini", + ".toml", + ".properties", + ".sh", + ".bash", + ".dockerfile", + ".gitignore", + ".gitattributes", + ".makefile", + ".pyproject", + ".requirements", + ".env", + ".pdf", + ".doc", + ".docx", + ".dot", + ".dotx", + ".rtf", + ".wps", + ".wpd", + ".odt", + ".ott", + ".ottx", + ".txt", + ".wp", + ".sdw", + ".sdx", + ".docm", + ".dotm", + # Additional extensions for other programming languages + ".java", + ".c", + ".cpp", + ".h", + ".cs", + ".go", + ".php", + ".rb", + ".swift", + ".pl", + ".lua", + ".rs", + ".scala", + ".kt", + ".sh", + ".sql", + ".v", + ".asm", + ".pas", + ".d", + ".ml", + ".clj", + ".cljs", + ".erl", + ".ex", + ".exs", + ".f", + ".fs", + ".r", + ".pyi", + ".pdb", + ".ipynb", + ".rmd", + ".cabal", + ".hs", + ".nim", + ".vhdl", + ".verilog", + ".svelte", + ".html", + ".css", + ".scss", + ".less", + ".json5", + ".yaml", + ".yml", + } + + def should_process(path): + _, ext = os.path.splitext(path) + return ext in ALLOWED_EXTENSIONS and not any( + pattern in path for pattern in IGNORED_PATTERNS + ) + + non_py_files_paths = [ + os.path.join(root, file) + for root, _, files in os.walk(repo_path) + for file in files + if not file.endswith(".py") and should_process(os.path.join(root, file)) + ] + return non_py_files_paths + + +async def get_data_list_for_user(_, dataset_name, user): + # Note: This method is meant to be used as a Task in a pipeline. + # By the nature of pipelines, the output of the previous Task will be passed as the first argument here, + # but it is not needed here, hence the "_" input. + datasets = await get_datasets_by_name(dataset_name, user.id) + data_documents: list[Data] = [] + for dataset in datasets: + data_docs: list[Data] = await get_dataset_data(dataset_id=dataset.id) + data_documents.extend(data_docs) + return data_documents diff --git a/cognee/tasks/repo_processor/get_repo_file_dependencies.py b/cognee/tasks/repo_processor/get_repo_file_dependencies.py index 221af6cf6..f9be53d7d 100644 --- a/cognee/tasks/repo_processor/get_repo_file_dependencies.py +++ b/cognee/tasks/repo_processor/get_repo_file_dependencies.py @@ -7,8 +7,7 @@ from uuid import NAMESPACE_OID, uuid5 import aiofiles from cognee.shared.CodeGraphEntities import CodeFile, Repository -from cognee.tasks.repo_processor.get_local_dependencies import \ - get_local_script_dependencies +from cognee.tasks.repo_processor.get_local_dependencies import get_local_script_dependencies async def get_py_path_and_source(file_path): @@ -28,23 +27,27 @@ async def get_py_files_dict(repo_path): py_files_paths = ( os.path.join(root, file) - for root, _, files in os.walk(repo_path) for file in files if file.endswith(".py") + for root, _, files in os.walk(repo_path) + for file in files + if file.endswith(".py") ) py_files_dict = {} for file_path in py_files_paths: absolute_path = os.path.abspath(file_path) - + if os.path.getsize(absolute_path) == 0: continue - + relative_path, source_code = await get_py_path_and_source(absolute_path) py_files_dict[relative_path] = {"source_code": source_code} return py_files_dict -def get_edge(file_path: str, dependency: str, repo_path: str, relative_paths: bool = False) -> tuple: +def get_edge( + file_path: str, dependency: str, repo_path: str, relative_paths: bool = False +) -> tuple: if relative_paths: file_path = os.path.relpath(file_path, repo_path) dependency = os.path.relpath(dependency, repo_path) @@ -58,22 +61,23 @@ def run_coroutine(coroutine_func, *args, **kwargs): loop.close() return result + async def get_repo_file_dependencies(repo_path: str) -> AsyncGenerator[list, None]: """Generate a dependency graph for Python files in the given repository path.""" - + if not os.path.exists(repo_path): raise FileNotFoundError(f"Repository path {repo_path} does not exist.") - + py_files_dict = await get_py_files_dict(repo_path) repo = Repository( - id = uuid5(NAMESPACE_OID, repo_path), - path = repo_path, + id=uuid5(NAMESPACE_OID, repo_path), + path=repo_path, ) - yield repo + yield [repo] - with ProcessPoolExecutor(max_workers = 12) as executor: + with ProcessPoolExecutor(max_workers=12) as executor: loop = asyncio.get_event_loop() tasks = [ @@ -82,7 +86,7 @@ async def get_repo_file_dependencies(repo_path: str) -> AsyncGenerator[list, Non run_coroutine, get_local_script_dependencies, os.path.join(repo_path, file_path), - repo_path + repo_path, ) for file_path, metadata in py_files_dict.items() if metadata.get("source_code") is not None @@ -90,20 +94,28 @@ async def get_repo_file_dependencies(repo_path: str) -> AsyncGenerator[list, Non results = await asyncio.gather(*tasks) + code_files = [] for (file_path, metadata), dependencies in zip(py_files_dict.items(), results): source_code = metadata.get("source_code") - yield CodeFile( - id = uuid5(NAMESPACE_OID, file_path), - source_code = source_code, - extracted_id = file_path, - part_of = repo, - depends_on = [ - CodeFile( - id = uuid5(NAMESPACE_OID, dependency), - extracted_id = dependency, - part_of = repo, - source_code = py_files_dict.get(dependency, {}).get("source_code"), - ) for dependency in dependencies - ] if dependencies else None, + code_files.append( + CodeFile( + id=uuid5(NAMESPACE_OID, file_path), + source_code=source_code, + extracted_id=file_path, + part_of=repo, + depends_on=[ + CodeFile( + id=uuid5(NAMESPACE_OID, dependency), + extracted_id=dependency, + part_of=repo, + source_code=py_files_dict.get(dependency, {}).get("source_code"), + ) + for dependency in dependencies + ] + if dependencies + else None, + ) ) + + yield code_files diff --git a/cognee/tasks/repo_processor/get_source_code_chunks.py b/cognee/tasks/repo_processor/get_source_code_chunks.py new file mode 100644 index 000000000..82fa46cf0 --- /dev/null +++ b/cognee/tasks/repo_processor/get_source_code_chunks.py @@ -0,0 +1,177 @@ +import logging +from typing import AsyncGenerator, Generator +from uuid import NAMESPACE_OID, uuid5 + +import parso +import tiktoken + +from cognee.infrastructure.databases.vector import get_vector_engine +from cognee.infrastructure.engine import DataPoint +from cognee.shared.CodeGraphEntities import CodeFile, CodePart, SourceCodeChunk + +logger = logging.getLogger(__name__) + + +def _count_tokens(tokenizer: tiktoken.Encoding, source_code: str) -> int: + return len(tokenizer.encode(source_code)) + + +def _get_naive_subchunk_token_counts( + tokenizer: tiktoken.Encoding, source_code: str, max_subchunk_tokens: int = 8000 +) -> list[tuple[str, int]]: + """Splits source code into subchunks of up to max_subchunk_tokens and counts tokens.""" + + token_ids = tokenizer.encode(source_code) + subchunk_token_counts = [] + + for start_idx in range(0, len(token_ids), max_subchunk_tokens): + subchunk_token_ids = token_ids[start_idx : start_idx + max_subchunk_tokens] + token_count = len(subchunk_token_ids) + subchunk = "".join( + tokenizer.decode_single_token_bytes(token_id).decode("utf-8", errors="replace") + for token_id in subchunk_token_ids + ) + subchunk_token_counts.append((subchunk, token_count)) + + return subchunk_token_counts + + +def _get_subchunk_token_counts( + tokenizer: tiktoken.Encoding, + source_code: str, + max_subchunk_tokens: int = 8000, + depth: int = 0, + max_depth: int = 100, +) -> list[tuple[str, int]]: + """Splits source code into subchunk and counts tokens for each subchunk.""" + if depth > max_depth: + return _get_naive_subchunk_token_counts(tokenizer, source_code, max_subchunk_tokens) + + try: + module = parso.parse(source_code) + except Exception as e: + logger.error(f"Error parsing source code: {e}") + return [] + + if not module.children: + logger.warning("Parsed module has no children (empty or invalid source code).") + return [] + + # Handle cases with only one real child and an EndMarker to prevent infinite recursion. + if len(module.children) <= 2: + module = module.children[0] + + subchunk_token_counts = [] + for child in module.children: + subchunk = child.get_code() + token_count = _count_tokens(tokenizer, subchunk) + + if token_count == 0: + continue + + if token_count <= max_subchunk_tokens: + subchunk_token_counts.append((subchunk, token_count)) + continue + + if child.type == "string": + subchunk_token_counts.extend( + _get_naive_subchunk_token_counts(tokenizer, subchunk, max_subchunk_tokens) + ) + continue + + subchunk_token_counts.extend( + _get_subchunk_token_counts( + tokenizer, subchunk, max_subchunk_tokens, depth=depth + 1, max_depth=max_depth + ) + ) + + return subchunk_token_counts + + +def _get_chunk_source_code( + code_token_counts: list[tuple[str, int]], overlap: float, max_tokens: int +) -> tuple[list[tuple[str, int]], str]: + """Generates a chunk of source code from tokenized subchunks with overlap handling.""" + current_count = 0 + cumulative_counts = [] + current_source_code = "" + + for i, (child_code, token_count) in enumerate(code_token_counts): + current_count += token_count + cumulative_counts.append(current_count) + if current_count > max_tokens: + break + current_source_code += f"\n{child_code}" + + if current_count <= max_tokens: + return [], current_source_code.strip() + + cutoff = 1 + for i, cum_count in enumerate(cumulative_counts): + if cum_count > (1 - overlap) * max_tokens: + break + cutoff = i + + return code_token_counts[cutoff:], current_source_code.strip() + + +def get_source_code_chunks_from_code_part( + code_file_part: CodePart, + max_tokens: int = 8192, + overlap: float = 0.25, + granularity: float = 0.1, + model_name: str = "text-embedding-3-large", +) -> Generator[SourceCodeChunk, None, None]: + """Yields source code chunks from a CodePart object, with configurable token limits and overlap.""" + if not code_file_part.source_code: + logger.error(f"No source code in CodeFile {code_file_part.id}") + return + + vector_engine = get_vector_engine() + embedding_model = vector_engine.embedding_engine.model + model_name = embedding_model.split("/")[-1] + tokenizer = tiktoken.encoding_for_model(model_name) + max_subchunk_tokens = max(1, int(granularity * max_tokens)) + subchunk_token_counts = _get_subchunk_token_counts( + tokenizer, code_file_part.source_code, max_subchunk_tokens + ) + + previous_chunk = None + while subchunk_token_counts: + subchunk_token_counts, chunk_source_code = _get_chunk_source_code( + subchunk_token_counts, overlap, max_tokens + ) + if not chunk_source_code: + continue + current_chunk = SourceCodeChunk( + id=uuid5(NAMESPACE_OID, chunk_source_code), + code_chunk_of=code_file_part, + source_code=chunk_source_code, + previous_chunk=previous_chunk, + ) + yield current_chunk + previous_chunk = current_chunk + + +async def get_source_code_chunks( + data_points: list[DataPoint], +) -> AsyncGenerator[list[DataPoint], None]: + """Processes code graph datapoints, create SourceCodeChink datapoints.""" + # TODO: Add support for other embedding models, with max_token mapping + for data_point in data_points: + try: + yield data_point + if not isinstance(data_point, CodeFile): + continue + if not data_point.contains: + logger.warning(f"CodeFile {data_point.id} contains no code parts") + continue + for code_part in data_point.contains: + try: + yield code_part + for source_code_chunk in get_source_code_chunks_from_code_part(code_part): + yield source_code_chunk + except Exception as e: + logger.error(f"Error processing code part: {e}") + except Exception as e: + logger.error(f"Error processing data point: {e}") diff --git a/cognee/tasks/repo_processor/top_down_repo_parse.py b/cognee/tasks/repo_processor/top_down_repo_parse.py new file mode 100644 index 000000000..87b7b8c95 --- /dev/null +++ b/cognee/tasks/repo_processor/top_down_repo_parse.py @@ -0,0 +1,179 @@ +import os + +import jedi +import parso +from tqdm import tqdm + +import logging + +logger = logging.getLogger(__name__) + +_NODE_TYPE_MAP = { + "funcdef": "func_def", + "classdef": "class_def", + "async_funcdef": "async_func_def", + "async_stmt": "async_func_def", + "simple_stmt": "var_def", +} + + +def _create_object_dict(name_node, type_name=None): + return { + "name": name_node.value, + "line": name_node.start_pos[0], + "column": name_node.start_pos[1], + "type": type_name, + } + + +def _parse_node(node): + """Parse a node to extract importable object details, including async functions and classes.""" + node_type = _NODE_TYPE_MAP.get(node.type) + + if node.type in {"funcdef", "classdef", "async_funcdef"}: + return [_create_object_dict(node.name, type_name=node_type)] + if node.type == "async_stmt" and len(node.children) > 1: + function_node = node.children[1] + if function_node.type == "funcdef": + return [ + _create_object_dict( + function_node.name, type_name=_NODE_TYPE_MAP.get(function_node.type) + ) + ] + if node.type == "simple_stmt": + # TODO: Handle multi-level/nested unpacking variable definitions in the future + expr_child = node.children[0] + if expr_child.type != "expr_stmt": + return [] + if expr_child.children[0].type == "testlist_star_expr": + name_targets = expr_child.children[0].children + else: + name_targets = expr_child.children + return [ + _create_object_dict(target, type_name=_NODE_TYPE_MAP.get(target.type)) + for target in name_targets + if target.type == "name" + ] + return [] + + +def extract_importable_objects_with_positions_from_source_code(source_code): + """Extract top-level objects in a Python source code string with their positions (line/column).""" + try: + tree = parso.parse(source_code) + except Exception as e: + logger.error(f"Error parsing source code: {e}") + return [] + + importable_objects = [] + try: + for node in tree.children: + importable_objects.extend(_parse_node(node)) + except Exception as e: + logger.error(f"Error extracting nodes from parsed tree: {e}") + return [] + + return importable_objects + + +def extract_importable_objects_with_positions(file_path): + """Extract top-level objects in a Python file with their positions (line/column).""" + try: + with open(file_path, "r") as file: + source_code = file.read() + except Exception as e: + logger.error(f"Error reading file {file_path}: {e}") + return [] + + return extract_importable_objects_with_positions_from_source_code(source_code) + + +def find_entity_usages(script, line, column): + """ + Return a list of files in the repo where the entity at module_path:line,column is used. + """ + usages = set() + + try: + inferred = script.infer(line, column) + except Exception as e: + logger.error(f"Error inferring entity at {script.path}:{line},{column}: {e}") + return [] + + if not inferred or not inferred[0]: + logger.info(f"No entity inferred at {script.path}:{line},{column}") + return [] + + logger.debug(f"Inferred entity: {inferred[0].name}, type: {inferred[0].type}") + + try: + references = script.get_references( + line=line, column=column, scope="project", include_builtins=False + ) + except Exception as e: + logger.error( + f"Error retrieving references for entity at {script.path}:{line},{column}: {e}" + ) + references = [] + + for ref in references: + if ref.module_path: # Collect unique module paths + usages.add(ref.module_path) + logger.info(f"Entity used in: {ref.module_path}") + + return list(usages) + + +def parse_file_with_references(project, file_path): + """Parse a file to extract object names and their references within a project.""" + try: + importable_objects = extract_importable_objects_with_positions(file_path) + except Exception as e: + logger.error(f"Error extracting objects from {file_path}: {e}") + return [] + + if not os.path.isfile(file_path): + logger.warning(f"Module file does not exist: {file_path}") + return [] + + try: + script = jedi.Script(path=file_path, project=project) + except Exception as e: + logger.error(f"Error initializing Jedi Script: {e}") + return [] + + parsed_results = [ + { + "name": obj["name"], + "type": obj["type"], + "references": find_entity_usages(script, obj["line"], obj["column"]), + } + for obj in importable_objects + ] + return parsed_results + + +def parse_repo(repo_path): + """Parse a repository to extract object names, types, and references for all Python files.""" + try: + project = jedi.Project(path=repo_path) + except Exception as e: + logger.error(f"Error creating Jedi project for repository at {repo_path}: {e}") + return {} + + EXCLUDE_DIRS = {"venv", ".git", "__pycache__", "build"} + + python_files = [ + os.path.join(directory, file) + for directory, _, filenames in os.walk(repo_path) + if not any(excluded in directory for excluded in EXCLUDE_DIRS) + for file in filenames + if file.endswith(".py") and os.path.getsize(os.path.join(directory, file)) > 0 + ] + + results = { + file_path: parse_file_with_references(project, file_path) + for file_path in tqdm(python_files) + } + + return results diff --git a/cognee/tasks/storage/add_data_points.py b/cognee/tasks/storage/add_data_points.py index 2ce0fc57d..21cc5a3c2 100644 --- a/cognee/tasks/storage/add_data_points.py +++ b/cognee/tasks/storage/add_data_points.py @@ -5,7 +5,7 @@ from cognee.modules.graph.utils import deduplicate_nodes_and_edges, get_graph_fr from .index_data_points import index_data_points -async def add_data_points(data_points: list[DataPoint]): +async def add_data_points(data_points: list[DataPoint], only_root=False): nodes = [] edges = [] @@ -13,14 +13,18 @@ async def add_data_points(data_points: list[DataPoint]): added_edges = {} visited_properties = {} - results = await asyncio.gather(*[ - get_graph_from_model( - data_point, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, - ) for data_point in data_points - ]) + results = await asyncio.gather( + *[ + get_graph_from_model( + data_point, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, + only_root=only_root, + ) + for data_point in data_points + ] + ) for result_nodes, result_edges in results: nodes.extend(result_nodes) diff --git a/cognee/tasks/storage/index_data_points.py b/cognee/tasks/storage/index_data_points.py index 786168b58..65f516bac 100644 --- a/cognee/tasks/storage/index_data_points.py +++ b/cognee/tasks/storage/index_data_points.py @@ -1,6 +1,12 @@ +import logging + +from cognee.infrastructure.databases.exceptions.EmbeddingException import EmbeddingException from cognee.infrastructure.databases.vector import get_vector_engine from cognee.infrastructure.engine import DataPoint +logger = logging.getLogger("index_data_points") + + async def index_data_points(data_points: list[DataPoint]): created_indexes = {} index_points = {} @@ -29,11 +35,17 @@ async def index_data_points(data_points: list[DataPoint]): for index_name, indexable_points in index_points.items(): index_name, field_name = index_name.split(".") - await vector_engine.index_data_points(index_name, field_name, indexable_points) + try: + await vector_engine.index_data_points(index_name, field_name, indexable_points) + except EmbeddingException as e: + logger.warning(f"Failed to index data points for {index_name}.{field_name}: {e}") return data_points -async def get_data_points_from_model(data_point: DataPoint, added_data_points = None, visited_properties = None) -> list[DataPoint]: + +async def get_data_points_from_model( + data_point: DataPoint, added_data_points=None, visited_properties=None +) -> list[DataPoint]: data_points = [] added_data_points = added_data_points or {} visited_properties = visited_properties or {} @@ -47,14 +59,20 @@ async def get_data_points_from_model(data_point: DataPoint, added_data_points = visited_properties[property_key] = True - new_data_points = await get_data_points_from_model(field_value, added_data_points, visited_properties) + new_data_points = await get_data_points_from_model( + field_value, added_data_points, visited_properties + ) for new_point in new_data_points: if str(new_point.id) not in added_data_points: added_data_points[str(new_point.id)] = True data_points.append(new_point) - if isinstance(field_value, list) and len(field_value) > 0 and isinstance(field_value[0], DataPoint): + if ( + isinstance(field_value, list) + and len(field_value) > 0 + and isinstance(field_value[0], DataPoint) + ): for field_value_item in field_value: property_key = f"{str(data_point.id)}{field_name}{str(field_value_item.id)}" @@ -62,33 +80,38 @@ async def get_data_points_from_model(data_point: DataPoint, added_data_points = return [] visited_properties[property_key] = True - - new_data_points = await get_data_points_from_model(field_value_item, added_data_points, visited_properties) + + new_data_points = await get_data_points_from_model( + field_value_item, added_data_points, visited_properties + ) for new_point in new_data_points: if str(new_point.id) not in added_data_points: added_data_points[str(new_point.id)] = True data_points.append(new_point) - if (str(data_point.id) not in added_data_points): + if str(data_point.id) not in added_data_points: data_points.append(data_point) return data_points if __name__ == "__main__": + class Car(DataPoint): model: str color: str - + _metadata = {"index_fields": ["name"], "type": "Car"} + class Person(DataPoint): name: str age: int owns_car: list[Car] + _metadata = {"index_fields": ["name"], "type": "Person"} - car1 = Car(model = "Tesla Model S", color = "Blue") - car2 = Car(model = "Toyota Camry", color = "Red") - person = Person(name = "John", age = 30, owns_car = [car1, car2]) + car1 = Car(model="Tesla Model S", color="Blue") + car2 = Car(model="Toyota Camry", color="Red") + person = Person(name="John", age=30, owns_car=[car1, car2]) data_points = get_data_points_from_model(person) diff --git a/cognee/tasks/storage/index_graph_edges.py b/cognee/tasks/storage/index_graph_edges.py index 88514af48..2aeb2bef2 100644 --- a/cognee/tasks/storage/index_graph_edges.py +++ b/cognee/tasks/storage/index_graph_edges.py @@ -8,25 +8,25 @@ from cognee.modules.graph.models.EdgeType import EdgeType async def index_graph_edges(): """ - Indexes graph edges by creating and managing vector indexes for relationship types. + Indexes graph edges by creating and managing vector indexes for relationship types. - This function retrieves edge data from the graph engine, counts distinct relationship - types, and creates `EdgeType` pydantic objects. It ensures that vector indexes are created for - the `relationship_name` field. + This function retrieves edge data from the graph engine, counts distinct relationship + types, and creates `EdgeType` pydantic objects. It ensures that vector indexes are created for + the `relationship_name` field. - Steps: - 1. Initialize the vector engine and graph engine. - 2. Retrieve graph edge data and count relationship types (`relationship_name`). - 3. Create vector indexes for `relationship_name` if they don't exist. - 4. Transform the counted relationships into `EdgeType` objects. - 5. Index the transformed data points in the vector engine. + Steps: + 1. Initialize the vector engine and graph engine. + 2. Retrieve graph edge data and count relationship types (`relationship_name`). + 3. Create vector indexes for `relationship_name` if they don't exist. + 4. Transform the counted relationships into `EdgeType` objects. + 5. Index the transformed data points in the vector engine. - Raises: - RuntimeError: If initialization of the vector engine or graph engine fails. + Raises: + RuntimeError: If initialization of the vector engine or graph engine fails. - Returns: - None - """ + Returns: + None + """ try: created_indexes = {} index_points = {} @@ -40,9 +40,10 @@ async def index_graph_edges(): _, edges_data = await graph_engine.get_graph_data() edge_types = Counter( - item.get('relationship_name') + item.get("relationship_name") for edge in edges_data - for item in edge if isinstance(item, dict) and 'relationship_name' in item + for item in edge + if isinstance(item, dict) and "relationship_name" in item ) for text, count in edge_types.items(): @@ -67,4 +68,4 @@ async def index_graph_edges(): index_name, field_name = index_name.split(".") await vector_engine.index_data_points(index_name, field_name, indexable_points) - return None \ No newline at end of file + return None diff --git a/cognee/tasks/summarization/mock_summary.py b/cognee/tasks/summarization/mock_summary.py new file mode 100644 index 000000000..f60ce2d82 --- /dev/null +++ b/cognee/tasks/summarization/mock_summary.py @@ -0,0 +1,38 @@ +from cognee.shared.data_models import SummarizedCode, SummarizedClass, SummarizedFunction + + +def get_mock_summarized_code() -> SummarizedCode: + return SummarizedCode( + file_name="mock_file.py", + high_level_summary="This is a mock high-level summary.", + key_features=["Mock feature 1", "Mock feature 2"], + imports=["mock_import1", "mock_import2"], + constants=["MOCK_CONSTANT = 'mock_value'"], + classes=[ + SummarizedClass( + name="MockClass", + description="This is a mock description of the MockClass.", + methods=[ + SummarizedFunction( + name="mock_method", + description="This is a description of the mock method.", + docstring="This is a mock method.", + inputs=["mock_input: str"], + outputs=["mock_output: str"], + decorators=None, + ) + ], + ) + ], + functions=[ + SummarizedFunction( + name="mock_function", + description="This is a description of the mock function.", + docstring="This is a mock function.", + inputs=["mock_input: str"], + outputs=["mock_output: str"], + decorators=None, + ) + ], + workflow_description="This is a mock workflow description.", + ) diff --git a/cognee/tasks/summarization/models.py b/cognee/tasks/summarization/models.py index 6fef4fb02..bc7b4886d 100644 --- a/cognee/tasks/summarization/models.py +++ b/cognee/tasks/summarization/models.py @@ -1,6 +1,8 @@ +from typing import Union + from cognee.infrastructure.engine import DataPoint from cognee.modules.chunking.models import DocumentChunk -from cognee.shared.CodeGraphEntities import CodeFile +from cognee.shared.CodeGraphEntities import CodeFile, CodePart, SourceCodeChunk class TextSummary(DataPoint): @@ -8,16 +10,13 @@ class TextSummary(DataPoint): text: str made_from: DocumentChunk - _metadata: dict = { - "index_fields": ["text"], - } + _metadata: dict = {"index_fields": ["text"], "type": "TextSummary"} class CodeSummary(DataPoint): __tablename__ = "code_summary" text: str - made_from: CodeFile + summarizes: Union[CodeFile, CodePart, SourceCodeChunk] + pydantic_type: str = "CodeSummary" - _metadata: dict = { - "index_fields": ["text"], - } + _metadata: dict = {"index_fields": ["text"], "type": "CodeSummary"} diff --git a/cognee/tasks/summarization/query_summaries.py b/cognee/tasks/summarization/query_summaries.py index d9ec0fa00..5f04e3eb4 100644 --- a/cognee/tasks/summarization/query_summaries.py +++ b/cognee/tasks/summarization/query_summaries.py @@ -1,5 +1,6 @@ from cognee.infrastructure.databases.vector import get_vector_engine + async def query_summaries(query: str) -> list: """ Parameters: @@ -10,7 +11,7 @@ async def query_summaries(query: str) -> list: """ vector_engine = get_vector_engine() - summaries_results = await vector_engine.search("text_summary_text", query, limit = 5) + summaries_results = await vector_engine.search("text_summary_text", query, limit=5) summaries = [summary.payload for summary in summaries_results] diff --git a/cognee/tasks/summarization/summarize_code.py b/cognee/tasks/summarization/summarize_code.py index 277081f40..9efc5b6ca 100644 --- a/cognee/tasks/summarization/summarize_code.py +++ b/cognee/tasks/summarization/summarize_code.py @@ -1,39 +1,40 @@ import asyncio -from typing import Type +from typing import AsyncGenerator, Union from uuid import uuid5 -from pydantic import BaseModel - from cognee.infrastructure.engine import DataPoint -from cognee.modules.data.extraction.extract_summary import extract_summary -from cognee.shared.CodeGraphEntities import CodeFile -from cognee.tasks.storage import add_data_points +from cognee.modules.data.extraction.extract_summary import extract_code_summary from .models import CodeSummary async def summarize_code( - code_files: list[DataPoint], - summarization_model: Type[BaseModel], -) -> list[DataPoint]: - if len(code_files) == 0: - return code_files + code_graph_nodes: list[DataPoint], +) -> AsyncGenerator[Union[DataPoint, CodeSummary], None]: + if len(code_graph_nodes) == 0: + return - code_files_data_points = [file for file in code_files if isinstance(file, CodeFile)] + code_data_points = [file for file in code_graph_nodes if hasattr(file, "source_code")] file_summaries = await asyncio.gather( - *[extract_summary(file.source_code, summarization_model) for file in code_files_data_points] + *[extract_code_summary(file.source_code) for file in code_data_points] ) - summaries = [ - CodeSummary( - id = uuid5(file.id, "CodeSummary"), - made_from = file, - text = file_summaries[file_index].summary, + file_summaries_map = { + code_data_point.id: str(file_summary) + for code_data_point, file_summary in zip(code_data_points, file_summaries) + } + + for node in code_graph_nodes: + if not isinstance(node, DataPoint): + continue + yield node + + if not hasattr(node, "source_code"): + continue + + yield CodeSummary( + id=uuid5(node.id, "CodeSummary"), + summarizes=node, + text=file_summaries_map[node.id], ) - for (file_index, file) in enumerate(code_files_data_points) - ] - - await add_data_points(summaries) - - return code_files diff --git a/cognee/tasks/summarization/summarize_text.py b/cognee/tasks/summarization/summarize_text.py index 60ec66f5c..df7ac6740 100644 --- a/cognee/tasks/summarization/summarize_text.py +++ b/cognee/tasks/summarization/summarize_text.py @@ -6,6 +6,7 @@ from cognee.modules.data.extraction.extract_summary import extract_summary from cognee.modules.chunking.models.DocumentChunk import DocumentChunk from .models import TextSummary + async def summarize_text(data_chunks: list[DocumentChunk], summarization_model: Type[BaseModel]): if len(data_chunks) == 0: return data_chunks @@ -16,10 +17,11 @@ async def summarize_text(data_chunks: list[DocumentChunk], summarization_model: summaries = [ TextSummary( - id = uuid5(chunk.id, "TextSummary"), - made_from = chunk, - text = chunk_summaries[chunk_index].summary, - ) for (chunk_index, chunk) in enumerate(data_chunks) + id=uuid5(chunk.id, "TextSummary"), + made_from=chunk, + text=chunk_summaries[chunk_index].summary, + ) + for (chunk_index, chunk) in enumerate(data_chunks) ] return summaries diff --git a/cognee/tasks/temporal_awareness/__init__.py b/cognee/tasks/temporal_awareness/__init__.py index 9b6717f5f..4a47d33be 100644 --- a/cognee/tasks/temporal_awareness/__init__.py +++ b/cognee/tasks/temporal_awareness/__init__.py @@ -1,4 +1,2 @@ -from .build_graph_with_temporal_awareness import \ - build_graph_with_temporal_awareness -from .search_graph_with_temporal_awareness import \ - search_graph_with_temporal_awareness +from .build_graph_with_temporal_awareness import build_graph_with_temporal_awareness +from .search_graph_with_temporal_awareness import search_graph_with_temporal_awareness diff --git a/cognee/tasks/temporal_awareness/build_graph_with_temporal_awareness.py b/cognee/tasks/temporal_awareness/build_graph_with_temporal_awareness.py index ac534623b..ecbf2b6be 100644 --- a/cognee/tasks/temporal_awareness/build_graph_with_temporal_awareness.py +++ b/cognee/tasks/temporal_awareness/build_graph_with_temporal_awareness.py @@ -6,12 +6,11 @@ from graphiti_core.nodes import EpisodeType async def build_graph_with_temporal_awareness(text_list): - url = os.getenv("GRAPH_DATABASE_URL") password = os.getenv("GRAPH_DATABASE_PASSWORD") graphiti = Graphiti(url, "neo4j", password) - - await graphiti.build_indices_and_constraints() + + await graphiti.build_indices_and_constraints() print("Graph database initialized.") for i, text in enumerate(text_list): @@ -20,7 +19,7 @@ async def build_graph_with_temporal_awareness(text_list): episode_body=text, source=EpisodeType.text, source_description="input", - reference_time=datetime.now() + reference_time=datetime.now(), ) print(f"Added text: {text[:35]}...") - return graphiti \ No newline at end of file + return graphiti diff --git a/cognee/tasks/temporal_awareness/search_graph_with_temporal_awareness.py b/cognee/tasks/temporal_awareness/search_graph_with_temporal_awareness.py index 8e2cd0fc8..247b04e71 100644 --- a/cognee/tasks/temporal_awareness/search_graph_with_temporal_awareness.py +++ b/cognee/tasks/temporal_awareness/search_graph_with_temporal_awareness.py @@ -1,6 +1,4 @@ - - async def search_graph_with_temporal_awareness(graphiti, query): search_result = await graphiti.search(query) await graphiti.close() - return search_result \ No newline at end of file + return search_result diff --git a/cognee/tests/get_graph_url.py b/cognee/tests/get_graph_url.py index c5909676d..1e0abbaf0 100644 --- a/cognee/tests/get_graph_url.py +++ b/cognee/tests/get_graph_url.py @@ -3,14 +3,23 @@ from cognee.shared.utils import render_graph from cognee.infrastructure.databases.graph import get_graph_engine if __name__ == "__main__": + async def main(): import os import pathlib import cognee - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_library")).resolve()) + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_library") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_library")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_library") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) graph_client = await get_graph_engine() diff --git a/cognee/tests/integration/documents/AudioDocument_test.py b/cognee/tests/integration/documents/AudioDocument_test.py index da8b85d0b..e07a2431b 100644 --- a/cognee/tests/integration/documents/AudioDocument_test.py +++ b/cognee/tests/integration/documents/AudioDocument_test.py @@ -25,20 +25,23 @@ TEST_TEXT = """ def test_AudioDocument(): - document = AudioDocument( - id=uuid.uuid4(), name="audio-dummy-test", raw_data_location="", metadata_id=uuid.uuid4(), mime_type="", + id=uuid.uuid4(), + name="audio-dummy-test", + raw_data_location="", + metadata_id=uuid.uuid4(), + mime_type="", ) with patch.object(AudioDocument, "create_transcript", return_value=TEST_TEXT): for ground_truth, paragraph_data in zip( - GROUND_TRUTH, document.read(chunk_size=64) + GROUND_TRUTH, document.read(chunk_size=64, chunker="text_chunker") ): - assert ( - ground_truth["word_count"] == paragraph_data.word_count - ), f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' - assert ground_truth["len_text"] == len( - paragraph_data.text - ), f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' - assert ( - ground_truth["cut_type"] == paragraph_data.cut_type - ), f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + assert ground_truth["word_count"] == paragraph_data.word_count, ( + f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' + ) + assert ground_truth["len_text"] == len(paragraph_data.text), ( + f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' + ) + assert ground_truth["cut_type"] == paragraph_data.cut_type, ( + f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + ) diff --git a/cognee/tests/integration/documents/ImageDocument_test.py b/cognee/tests/integration/documents/ImageDocument_test.py index 8a8ee8ef3..b8d585419 100644 --- a/cognee/tests/integration/documents/ImageDocument_test.py +++ b/cognee/tests/integration/documents/ImageDocument_test.py @@ -14,21 +14,23 @@ The commotion has attracted an audience: a murder of crows has gathered in the l def test_ImageDocument(): - document = ImageDocument( - id=uuid.uuid4(), name="image-dummy-test", raw_data_location="", metadata_id=uuid.uuid4(), mime_type="", + id=uuid.uuid4(), + name="image-dummy-test", + raw_data_location="", + metadata_id=uuid.uuid4(), + mime_type="", ) with patch.object(ImageDocument, "transcribe_image", return_value=TEST_TEXT): - for ground_truth, paragraph_data in zip( - GROUND_TRUTH, document.read(chunk_size=64) + GROUND_TRUTH, document.read(chunk_size=64, chunker="text_chunker") ): - assert ( - ground_truth["word_count"] == paragraph_data.word_count - ), f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' - assert ground_truth["len_text"] == len( - paragraph_data.text - ), f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' - assert ( - ground_truth["cut_type"] == paragraph_data.cut_type - ), f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + assert ground_truth["word_count"] == paragraph_data.word_count, ( + f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' + ) + assert ground_truth["len_text"] == len(paragraph_data.text), ( + f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' + ) + assert ground_truth["cut_type"] == paragraph_data.cut_type, ( + f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + ) diff --git a/cognee/tests/integration/documents/PdfDocument_test.py b/cognee/tests/integration/documents/PdfDocument_test.py index ac57eaf75..fc4307846 100644 --- a/cognee/tests/integration/documents/PdfDocument_test.py +++ b/cognee/tests/integration/documents/PdfDocument_test.py @@ -17,19 +17,22 @@ def test_PdfDocument(): "artificial-intelligence.pdf", ) document = PdfDocument( - id=uuid.uuid4(), name="Test document.pdf", raw_data_location=test_file_path, metadata_id=uuid.uuid4(), + id=uuid.uuid4(), + name="Test document.pdf", + raw_data_location=test_file_path, + metadata_id=uuid.uuid4(), mime_type="", ) for ground_truth, paragraph_data in zip( - GROUND_TRUTH, document.read(chunk_size=1024) + GROUND_TRUTH, document.read(chunk_size=1024, chunker="text_chunker") ): - assert ( - ground_truth["word_count"] == paragraph_data.word_count - ), f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' - assert ground_truth["len_text"] == len( - paragraph_data.text - ), f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' - assert ( - ground_truth["cut_type"] == paragraph_data.cut_type - ), f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + assert ground_truth["word_count"] == paragraph_data.word_count, ( + f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' + ) + assert ground_truth["len_text"] == len(paragraph_data.text), ( + f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' + ) + assert ground_truth["cut_type"] == paragraph_data.cut_type, ( + f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + ) diff --git a/cognee/tests/integration/documents/TextDocument_test.py b/cognee/tests/integration/documents/TextDocument_test.py index f663418f5..6daec62b7 100644 --- a/cognee/tests/integration/documents/TextDocument_test.py +++ b/cognee/tests/integration/documents/TextDocument_test.py @@ -29,18 +29,22 @@ def test_TextDocument(input_file, chunk_size): input_file, ) document = TextDocument( - id=uuid.uuid4(), name=input_file, raw_data_location=test_file_path, metadata_id=uuid.uuid4(), mime_type="", + id=uuid.uuid4(), + name=input_file, + raw_data_location=test_file_path, + metadata_id=uuid.uuid4(), + mime_type="", ) for ground_truth, paragraph_data in zip( - GROUND_TRUTH[input_file], document.read(chunk_size=chunk_size) + GROUND_TRUTH[input_file], document.read(chunk_size=chunk_size, chunker="text_chunker") ): - assert ( - ground_truth["word_count"] == paragraph_data.word_count - ), f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' - assert ground_truth["len_text"] == len( - paragraph_data.text - ), f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' - assert ( - ground_truth["cut_type"] == paragraph_data.cut_type - ), f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + assert ground_truth["word_count"] == paragraph_data.word_count, ( + f'{ground_truth["word_count"] = } != {paragraph_data.word_count = }' + ) + assert ground_truth["len_text"] == len(paragraph_data.text), ( + f'{ground_truth["len_text"] = } != {len(paragraph_data.text) = }' + ) + assert ground_truth["cut_type"] == paragraph_data.cut_type, ( + f'{ground_truth["cut_type"] = } != {paragraph_data.cut_type = }' + ) diff --git a/cognee/tests/integration/documents/UnstructuredDocument_test.py b/cognee/tests/integration/documents/UnstructuredDocument_test.py index 418b18810..773dc2293 100644 --- a/cognee/tests/integration/documents/UnstructuredDocument_test.py +++ b/cognee/tests/integration/documents/UnstructuredDocument_test.py @@ -3,6 +3,7 @@ import uuid from cognee.modules.data.processing.document_types.UnstructuredDocument import UnstructuredDocument + def test_UnstructuredDocument(): # Define file paths of test data pptx_file_path = os.path.join( @@ -35,46 +36,67 @@ def test_UnstructuredDocument(): # Define test documents pptx_document = UnstructuredDocument( - id=uuid.uuid4(), name="example.pptx", raw_data_location=pptx_file_path, metadata_id=uuid.uuid4(), - mime_type="application/vnd.openxmlformats-officedocument.presentationml.presentation" + id=uuid.uuid4(), + name="example.pptx", + raw_data_location=pptx_file_path, + metadata_id=uuid.uuid4(), + mime_type="application/vnd.openxmlformats-officedocument.presentationml.presentation", ) docx_document = UnstructuredDocument( - id=uuid.uuid4(), name="example.docx", raw_data_location=docx_file_path, metadata_id=uuid.uuid4(), - mime_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document" + id=uuid.uuid4(), + name="example.docx", + raw_data_location=docx_file_path, + metadata_id=uuid.uuid4(), + mime_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", ) csv_document = UnstructuredDocument( - id=uuid.uuid4(), name="example.csv", raw_data_location=csv_file_path, metadata_id=uuid.uuid4(), - mime_type="text/csv" + id=uuid.uuid4(), + name="example.csv", + raw_data_location=csv_file_path, + metadata_id=uuid.uuid4(), + mime_type="text/csv", ) xlsx_document = UnstructuredDocument( - id=uuid.uuid4(), name="example.xlsx", raw_data_location=xlsx_file_path, metadata_id=uuid.uuid4(), - mime_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + id=uuid.uuid4(), + name="example.xlsx", + raw_data_location=xlsx_file_path, + metadata_id=uuid.uuid4(), + mime_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ) # Test PPTX - for paragraph_data in pptx_document.read(chunk_size=1024): - assert 19 == paragraph_data.word_count, f' 19 != {paragraph_data.word_count = }' - assert 104 == len(paragraph_data.text), f' 104 != {len(paragraph_data.text) = }' - assert 'sentence_cut' == paragraph_data.cut_type, f' sentence_cut != {paragraph_data.cut_type = }' + for paragraph_data in pptx_document.read(chunk_size=1024, chunker="text_chunker"): + assert 19 == paragraph_data.word_count, f" 19 != {paragraph_data.word_count = }" + assert 104 == len(paragraph_data.text), f" 104 != {len(paragraph_data.text) = }" + assert "sentence_cut" == paragraph_data.cut_type, ( + f" sentence_cut != {paragraph_data.cut_type = }" + ) # Test DOCX - for paragraph_data in docx_document.read(chunk_size=1024): - assert 16 == paragraph_data.word_count, f' 16 != {paragraph_data.word_count = }' - assert 145 == len(paragraph_data.text), f' 145 != {len(paragraph_data.text) = }' - assert 'sentence_end' == paragraph_data.cut_type, f' sentence_end != {paragraph_data.cut_type = }' + for paragraph_data in docx_document.read(chunk_size=1024, chunker="text_chunker"): + assert 16 == paragraph_data.word_count, f" 16 != {paragraph_data.word_count = }" + assert 145 == len(paragraph_data.text), f" 145 != {len(paragraph_data.text) = }" + assert "sentence_end" == paragraph_data.cut_type, ( + f" sentence_end != {paragraph_data.cut_type = }" + ) # TEST CSV - for paragraph_data in csv_document.read(chunk_size=1024): - assert 15 == paragraph_data.word_count, f' 15 != {paragraph_data.word_count = }' - assert 'A A A A A A A A A,A A A A A A,A A' == paragraph_data.text, \ - f'Read text doesn\'t match expected text: {paragraph_data.text}' - assert 'sentence_cut' == paragraph_data.cut_type, f' sentence_cut != {paragraph_data.cut_type = }' + for paragraph_data in csv_document.read(chunk_size=1024, chunker="text_chunker"): + assert 15 == paragraph_data.word_count, f" 15 != {paragraph_data.word_count = }" + assert "A A A A A A A A A,A A A A A A,A A" == paragraph_data.text, ( + f"Read text doesn't match expected text: {paragraph_data.text}" + ) + assert "sentence_cut" == paragraph_data.cut_type, ( + f" sentence_cut != {paragraph_data.cut_type = }" + ) # Test XLSX - for paragraph_data in xlsx_document.read(chunk_size=1024): - assert 36 == paragraph_data.word_count, f' 36 != {paragraph_data.word_count = }' - assert 171 == len(paragraph_data.text), f' 171 != {len(paragraph_data.text) = }' - assert 'sentence_cut' == paragraph_data.cut_type, f' sentence_cut != {paragraph_data.cut_type = }' + for paragraph_data in xlsx_document.read(chunk_size=1024, chunker="text_chunker"): + assert 36 == paragraph_data.word_count, f" 36 != {paragraph_data.word_count = }" + assert 171 == len(paragraph_data.text), f" 171 != {len(paragraph_data.text) = }" + assert "sentence_cut" == paragraph_data.cut_type, ( + f" sentence_cut != {paragraph_data.cut_type = }" + ) diff --git a/cognee/tests/integration/run_toy_tasks/run_task_from_queue_test.py b/cognee/tests/integration/run_toy_tasks/run_task_from_queue_test.py index e57b16f39..6a4024342 100644 --- a/cognee/tests/integration/run_toy_tasks/run_task_from_queue_test.py +++ b/cognee/tests/integration/run_toy_tasks/run_task_from_queue_test.py @@ -31,9 +31,7 @@ async def pipeline(data_queue): results = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] index = 0 async for result in tasks_run: - assert ( - result == results[index] - ), f"at {index = }: {result = } != {results[index] = }" + assert result == results[index], f"at {index = }: {result = } != {results[index] = }" index += 1 diff --git a/cognee/tests/integration/run_toy_tasks/run_tasks_test.py b/cognee/tests/integration/run_toy_tasks/run_tasks_test.py index d0a2af80b..54613c214 100644 --- a/cognee/tests/integration/run_toy_tasks/run_tasks_test.py +++ b/cognee/tests/integration/run_toy_tasks/run_tasks_test.py @@ -33,9 +33,7 @@ async def run_and_check_tasks(): results = [5, 7, 9, 11, 13, 15, 17, 19, 21, 23] index = 0 async for result in pipeline: - assert ( - result == results[index] - ), f"at {index = }: {result = } != {results[index] = }" + assert result == results[index], f"at {index = }: {result = } != {results[index] = }" index += 1 diff --git a/cognee/tests/test_code_generation.py b/cognee/tests/test_code_generation.py deleted file mode 100755 index a21925585..000000000 --- a/cognee/tests/test_code_generation.py +++ /dev/null @@ -1,38 +0,0 @@ -import os -import logging -import pathlib -import cognee -from cognee.api.v1.cognify.code_graph_pipeline import code_graph_pipeline -from cognee.api.v1.search import SearchType -from cognee.shared.utils import render_graph - -logging.basicConfig(level = logging.DEBUG) - -async def main(): - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_code_generation")).resolve()) - cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_code_generation")).resolve()) - cognee.config.system_root_directory(cognee_directory_path) - - await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) - - dataset_name = "artificial_intelligence" - - ai_text_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/code.txt") - await cognee.add([ai_text_file_path], dataset_name) - - await code_graph_pipeline([dataset_name]) - - await render_graph(None, include_nodes = True, include_labels = True) - - search_results = await cognee.search(SearchType.CHUNKS, query_text = "Student") - assert len(search_results) != 0, "The search results list is empty." - print("\n\nExtracted chunks are:\n") - for result in search_results: - print(f"{result}\n") - - -if __name__ == "__main__": - import asyncio - asyncio.run(main(), debug=True) diff --git a/cognee/tests/test_deduplication.py b/cognee/tests/test_deduplication.py index 467a52368..89c866f12 100644 --- a/cognee/tests/test_deduplication.py +++ b/cognee/tests/test_deduplication.py @@ -8,6 +8,7 @@ from cognee.infrastructure.databases.relational import get_relational_engine logging.basicConfig(level=logging.DEBUG) + async def test_deduplication(): await cognee.prune.prune_data() await cognee.prune.prune_system(metadata=True) @@ -29,7 +30,9 @@ async def test_deduplication(): result = await relational_engine.get_all_data_from_table("data") assert len(result) == 1, "More than one data entity was found." - assert result[0]["name"] == "Natural_language_processing_copy", "Result name does not match expected value." + assert result[0]["name"] == "Natural_language_processing_copy", ( + "Result name does not match expected value." + ) result = await relational_engine.get_all_data_from_table("datasets") assert len(result) == 2, "Unexpected number of datasets found." @@ -58,15 +61,15 @@ async def test_deduplication(): result = await relational_engine.get_all_data_from_table("data") assert len(result) == 1, "More than one data entity was found." - assert hashlib.md5(text.encode('utf-8')).hexdigest() in result[0]["name"], "Content hash is not a part of file name." + assert hashlib.md5(text.encode("utf-8")).hexdigest() in result[0]["name"], ( + "Content hash is not a part of file name." + ) await cognee.prune.prune_data() await cognee.prune.prune_system(metadata=True) # Test deduplication of image files - explanation_file_path = os.path.join( - pathlib.Path(__file__).parent, "test_data/example.png" - ) + explanation_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/example.png") explanation_file_path2 = os.path.join( pathlib.Path(__file__).parent, "test_data/example_copy.png" ) @@ -100,11 +103,7 @@ async def test_deduplication(): async def test_deduplication_postgres(): cognee.config.set_vector_db_config( - { - "vector_db_url": "", - "vector_db_key": "", - "vector_db_provider": "pgvector" - } + {"vector_db_url": "", "vector_db_key": "", "vector_db_provider": "pgvector"} ) cognee.config.set_relational_db_config( { @@ -119,13 +118,10 @@ async def test_deduplication_postgres(): await test_deduplication() + async def test_deduplication_sqlite(): cognee.config.set_vector_db_config( - { - "vector_db_url": "", - "vector_db_key": "", - "vector_db_provider": "lancedb" - } + {"vector_db_url": "", "vector_db_key": "", "vector_db_provider": "lancedb"} ) cognee.config.set_relational_db_config( { @@ -137,7 +133,6 @@ async def test_deduplication_sqlite(): async def main(): - data_directory_path = str( pathlib.Path( os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_deduplication") @@ -154,6 +149,7 @@ async def main(): await test_deduplication_postgres() await test_deduplication_sqlite() + if __name__ == "__main__": import asyncio diff --git a/cognee/tests/test_falkordb.py b/cognee/tests/test_falkordb.py index 25fe81a75..af0e87916 100755 --- a/cognee/tests/test_falkordb.py +++ b/cognee/tests/test_falkordb.py @@ -5,20 +5,31 @@ import cognee from cognee.api.v1.search import SearchType from cognee.shared.utils import render_graph -logging.basicConfig(level = logging.DEBUG) +logging.basicConfig(level=logging.DEBUG) -async def main(): - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_falkordb")).resolve()) + +async def main(): + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_falkordb") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_falkordb")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_falkordb") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) dataset_name = "artificial_intelligence" - ai_text_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/artificial-intelligence.pdf") + ai_text_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/artificial-intelligence.pdf" + ) await cognee.add([ai_text_file_path], dataset_name) text = """A large language model (LLM) is a language model notable for its ability to achieve general-purpose language generation and other natural language processing tasks such as classification. LLMs acquire these abilities by learning statistical relationships from text documents during a computationally intensive self-supervised and semi-supervised training process. LLMs can be used for text generation, a form of generative AI, by taking an input text and repeatedly predicting the next token or word. @@ -34,23 +45,24 @@ async def main(): # await render_graph(None, include_labels = True, include_nodes = True) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity.name", "AI"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search(SearchType.CHUNKS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\nExtracted summaries are:\n") for result in search_results: @@ -72,12 +84,18 @@ async def main(): assert len(collection_names) == 0, "LanceDB vector database is not empty" from cognee.infrastructure.databases.relational import get_relational_engine - assert not os.path.exists(get_relational_engine().db_path), "SQLite relational database is not empty" + + assert not os.path.exists(get_relational_engine().db_path), ( + "SQLite relational database is not empty" + ) from cognee.infrastructure.databases.graph import get_graph_config + graph_config = get_graph_config() assert not os.path.exists(graph_config.graph_file_path), "Networkx graph database is not empty" + if __name__ == "__main__": import asyncio + asyncio.run(main(), debug=True) diff --git a/cognee/tests/test_library.py b/cognee/tests/test_library.py index 6c9d41800..192b67506 100755 --- a/cognee/tests/test_library.py +++ b/cognee/tests/test_library.py @@ -4,20 +4,31 @@ import pathlib import cognee from cognee.api.v1.search import SearchType -logging.basicConfig(level = logging.DEBUG) +logging.basicConfig(level=logging.DEBUG) -async def main(): - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_library")).resolve()) + +async def main(): + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_library") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_library")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_library") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) dataset_name = "artificial_intelligence" - ai_text_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/artificial-intelligence.pdf") + ai_text_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/artificial-intelligence.pdf" + ) await cognee.add([ai_text_file_path], dataset_name) text = """A large language model (LLM) is a language model notable for its ability to achieve general-purpose language generation and other natural language processing tasks such as classification. LLMs acquire these abilities by learning statistical relationships from text documents during a computationally intensive self-supervised and semi-supervised training process. LLMs can be used for text generation, a form of generative AI, by taking an input text and repeatedly predicting the next token or word. @@ -31,23 +42,24 @@ async def main(): await cognee.cognify([dataset_name]) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "AI"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search(SearchType.CHUNKS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\nExtracted summaries are:\n") for result in search_results: @@ -69,12 +81,18 @@ async def main(): assert len(collection_names) == 0, "LanceDB vector database is not empty" from cognee.infrastructure.databases.relational import get_relational_engine - assert not os.path.exists(get_relational_engine().db_path), "SQLite relational database is not empty" + + assert not os.path.exists(get_relational_engine().db_path), ( + "SQLite relational database is not empty" + ) from cognee.infrastructure.databases.graph import get_graph_config + graph_config = get_graph_config() assert not os.path.exists(graph_config.graph_file_path), "Networkx graph database is not empty" + if __name__ == "__main__": import asyncio + asyncio.run(main(), debug=True) diff --git a/cognee/tests/test_milvus.py b/cognee/tests/test_milvus.py index b32d3590b..da02ca936 100644 --- a/cognee/tests/test_milvus.py +++ b/cognee/tests/test_milvus.py @@ -10,17 +10,23 @@ logging.basicConfig(level=logging.DEBUG) async def main(): cognee.config.set_vector_db_provider("milvus") data_directory_path = str( - pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_milvus")).resolve()) + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_milvus") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) cognee_directory_path = str( - pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_milvus")).resolve()) + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_milvus") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) cognee.config.set_vector_db_config( { "vector_db_url": os.path.join(cognee_directory_path, "databases/milvus.db"), "vector_db_key": "", - "vector_db_provider": "milvus" + "vector_db_provider": "milvus", } ) @@ -29,7 +35,9 @@ async def main(): dataset_name = "cs_explanations" - explanation_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt") + explanation_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt" + ) await cognee.add([explanation_file_path], dataset_name) text = """A quantum computer is a computer that takes advantage of quantum mechanical phenomena. @@ -45,6 +53,7 @@ async def main(): await cognee.cognify([dataset_name]) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0] random_node_name = random_node.payload["text"] @@ -81,4 +90,5 @@ async def main(): if __name__ == "__main__": import asyncio + asyncio.run(main()) diff --git a/cognee/tests/test_neo4j.py b/cognee/tests/test_neo4j.py index 92e5b5f05..07274c010 100644 --- a/cognee/tests/test_neo4j.py +++ b/cognee/tests/test_neo4j.py @@ -1,4 +1,3 @@ - import os import logging import pathlib @@ -8,19 +7,30 @@ from cognee.modules.retrieval.brute_force_triplet_search import brute_force_trip logging.basicConfig(level=logging.DEBUG) + async def main(): cognee.config.set_graph_database_provider("neo4j") - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_neo4j")).resolve()) + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_neo4j") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_neo4j")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_neo4j") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) dataset_name = "cs_explanations" - explanation_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt") + explanation_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt" + ) await cognee.add([explanation_file_path], dataset_name) text = """A quantum computer is a computer that takes advantage of quantum mechanical phenomena. @@ -36,23 +46,24 @@ async def main(): await cognee.cognify([dataset_name]) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search(SearchType.CHUNKS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\nExtracted summaries are:\n") for result in search_results: @@ -62,7 +73,7 @@ async def main(): assert len(history) == 6, "Search history is not correct." - results = await brute_force_triplet_search('What is a quantum computer?') + results = await brute_force_triplet_search("What is a quantum computer?") assert len(results) > 0 await cognee.prune.prune_data() @@ -70,10 +81,13 @@ async def main(): await cognee.prune.prune_system(metadata=True) from cognee.infrastructure.databases.graph import get_graph_engine + graph_engine = await get_graph_engine() nodes, edges = await graph_engine.get_graph_data() assert len(nodes) == 0 and len(edges) == 0, "Neo4j graph database is not empty" + if __name__ == "__main__": import asyncio + asyncio.run(main()) diff --git a/cognee/tests/test_pgvector.py b/cognee/tests/test_pgvector.py index 3b4fa19c5..73b6be974 100644 --- a/cognee/tests/test_pgvector.py +++ b/cognee/tests/test_pgvector.py @@ -2,19 +2,73 @@ import os import logging import pathlib import cognee + +from cognee.modules.data.models import Data from cognee.api.v1.search import SearchType from cognee.modules.retrieval.brute_force_triplet_search import brute_force_triplet_search +from cognee.modules.users.methods import get_default_user logging.basicConfig(level=logging.DEBUG) +async def test_local_file_deletion(data_text, file_location): + from sqlalchemy import select + import hashlib + from cognee.infrastructure.databases.relational import get_relational_engine + + engine = get_relational_engine() + + async with engine.get_async_session() as session: + # Get hash of data contents + encoded_text = data_text.encode("utf-8") + data_hash = hashlib.md5(encoded_text).hexdigest() + # Get data entry from database based on hash contents + data = (await session.scalars(select(Data).where(Data.content_hash == data_hash))).one() + assert os.path.isfile(data.raw_data_location), ( + f"Data location doesn't exist: {data.raw_data_location}" + ) + # Test deletion of data along with local files created by cognee + await engine.delete_data_entity(data.id) + assert not os.path.exists(data.raw_data_location), ( + f"Data location still exists after deletion: {data.raw_data_location}" + ) + + async with engine.get_async_session() as session: + # Get data entry from database based on file path + data = ( + await session.scalars(select(Data).where(Data.raw_data_location == file_location)) + ).one() + assert os.path.isfile(data.raw_data_location), ( + f"Data location doesn't exist: {data.raw_data_location}" + ) + # Test local files not created by cognee won't get deleted + await engine.delete_data_entity(data.id) + assert os.path.exists(data.raw_data_location), ( + f"Data location doesn't exists: {data.raw_data_location}" + ) + + +async def test_getting_of_documents(dataset_name_1): + # Test getting of documents for search per dataset + from cognee.modules.users.permissions.methods import get_document_ids_for_user + + user = await get_default_user() + document_ids = await get_document_ids_for_user(user.id, [dataset_name_1]) + assert len(document_ids) == 1, ( + f"Number of expected documents doesn't match {len(document_ids)} != 1" + ) + + # Test getting of documents for search when no dataset is provided + user = await get_default_user() + document_ids = await get_document_ids_for_user(user.id) + assert len(document_ids) == 2, ( + f"Number of expected documents doesn't match {len(document_ids)} != 2" + ) + + async def main(): cognee.config.set_vector_db_config( - { - "vector_db_url": "", - "vector_db_key": "", - "vector_db_provider": "pgvector" - } + {"vector_db_url": "", "vector_db_key": "", "vector_db_provider": "pgvector"} ) cognee.config.set_relational_db_config( { @@ -42,14 +96,15 @@ async def main(): cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) - dataset_name = "cs_explanations" + dataset_name_1 = "natural_language" + dataset_name_2 = "quantum" explanation_file_path = os.path.join( pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt" ) - await cognee.add([explanation_file_path], dataset_name) + await cognee.add([explanation_file_path], dataset_name_1) text = """A quantum computer is a computer that takes advantage of quantum mechanical phenomena. At small scales, physical matter exhibits properties of both particles and waves, and quantum computing leverages this behavior, specifically quantum superposition and entanglement, using specialized hardware that supports the preparation and manipulation of quantum states. @@ -59,29 +114,33 @@ async def main(): In principle, a non-quantum (classical) computer can solve the same computational problems as a quantum computer, given enough time. Quantum advantage comes in the form of time complexity rather than computability, and quantum complexity theory shows that some quantum algorithms for carefully selected tasks require exponentially fewer computational steps than the best known non-quantum algorithms. Such tasks can in theory be solved on a large-scale quantum computer whereas classical computers would not finish computations in any reasonable amount of time. However, quantum speedup is not universal or even typical across computational tasks, since basic tasks such as sorting are proven to not allow any asymptotic quantum speedup. Claims of quantum supremacy have drawn significant attention to the discipline, but are demonstrated on contrived tasks, while near-term practical use cases remain limited. """ - await cognee.add([text], dataset_name) + await cognee.add([text], dataset_name_2) - await cognee.cognify([dataset_name]) + await cognee.cognify([dataset_name_2, dataset_name_1]) from cognee.infrastructure.databases.vector import get_vector_engine + await test_getting_of_documents(dataset_name_1) + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search( + SearchType.CHUNKS, query_text=random_node_name, datasets=[dataset_name_2] + ) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\n\nExtracted summaries are:\n") for result in search_results: @@ -90,9 +149,11 @@ async def main(): history = await cognee.get_search_history() assert len(history) == 6, "Search history is not correct." - results = await brute_force_triplet_search('What is a quantum computer?') + results = await brute_force_triplet_search("What is a quantum computer?") assert len(results) > 0 + await test_local_file_deletion(text, explanation_file_path) + await cognee.prune.prune_data() assert not os.path.isdir(data_directory_path), "Local data files are not deleted" @@ -100,6 +161,7 @@ async def main(): tables_in_database = await vector_engine.get_table_names() assert len(tables_in_database) == 0, "PostgreSQL database is not empty" + if __name__ == "__main__": import asyncio diff --git a/cognee/tests/test_qdrant.py b/cognee/tests/test_qdrant.py index f32e0b4a4..7f82a569f 100644 --- a/cognee/tests/test_qdrant.py +++ b/cognee/tests/test_qdrant.py @@ -1,5 +1,3 @@ - - import os import logging import pathlib @@ -9,19 +7,30 @@ from cognee.modules.retrieval.brute_force_triplet_search import brute_force_trip logging.basicConfig(level=logging.DEBUG) + async def main(): cognee.config.set_vector_db_provider("qdrant") - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_qdrant")).resolve()) + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_qdrant") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_qdrant")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_qdrant") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) dataset_name = "cs_explanations" - explanation_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt") + explanation_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt" + ) await cognee.add([explanation_file_path], dataset_name) text = """A quantum computer is a computer that takes advantage of quantum mechanical phenomena. @@ -37,23 +46,24 @@ async def main(): await cognee.cognify([dataset_name]) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search(SearchType.CHUNKS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\nExtracted summaries are:\n") for result in search_results: @@ -62,7 +72,7 @@ async def main(): history = await cognee.get_search_history() assert len(history) == 6, "Search history is not correct." - results = await brute_force_triplet_search('What is a quantum computer?') + results = await brute_force_triplet_search("What is a quantum computer?") assert len(results) > 0 await cognee.prune.prune_data() @@ -73,6 +83,8 @@ async def main(): collections_response = await qdrant_client.get_collections() assert len(collections_response.collections) == 0, "QDrant vector database is not empty" + if __name__ == "__main__": import asyncio + asyncio.run(main()) diff --git a/cognee/tests/test_weaviate.py b/cognee/tests/test_weaviate.py index 43ec30aaf..874f21347 100644 --- a/cognee/tests/test_weaviate.py +++ b/cognee/tests/test_weaviate.py @@ -7,19 +7,30 @@ from cognee.modules.retrieval.brute_force_triplet_search import brute_force_trip logging.basicConfig(level=logging.DEBUG) + async def main(): cognee.config.set_vector_db_provider("weaviate") - data_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_weaviate")).resolve()) + data_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".data_storage/test_weaviate") + ).resolve() + ) cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_weaviate")).resolve()) + cognee_directory_path = str( + pathlib.Path( + os.path.join(pathlib.Path(__file__).parent, ".cognee_system/test_weaviate") + ).resolve() + ) cognee.config.system_root_directory(cognee_directory_path) await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) + await cognee.prune.prune_system(metadata=True) dataset_name = "cs_explanations" - explanation_file_path = os.path.join(pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt") + explanation_file_path = os.path.join( + pathlib.Path(__file__).parent, "test_data/Natural_language_processing.txt" + ) await cognee.add([explanation_file_path], dataset_name) text = """A quantum computer is a computer that takes advantage of quantum mechanical phenomena. @@ -35,23 +46,24 @@ async def main(): await cognee.cognify([dataset_name]) from cognee.infrastructure.databases.vector import get_vector_engine + vector_engine = get_vector_engine() random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0] random_node_name = random_node.payload["text"] - search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name) + search_results = await cognee.search(SearchType.INSIGHTS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted sentences are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.CHUNKS, query_text = random_node_name) + search_results = await cognee.search(SearchType.CHUNKS, query_text=random_node_name) assert len(search_results) != 0, "The search results list is empty." print("\n\nExtracted chunks are:\n") for result in search_results: print(f"{result}\n") - search_results = await cognee.search(SearchType.SUMMARIES, query_text = random_node_name) + search_results = await cognee.search(SearchType.SUMMARIES, query_text=random_node_name) assert len(search_results) != 0, "Query related summaries don't exist." print("\nExtracted summaries are:\n") for result in search_results: @@ -60,16 +72,18 @@ async def main(): history = await cognee.get_search_history() assert len(history) == 6, "Search history is not correct." - results = await brute_force_triplet_search('What is a quantum computer?') + results = await brute_force_triplet_search("What is a quantum computer?") assert len(results) > 0 await cognee.prune.prune_data() assert not os.path.isdir(data_directory_path), "Local data files are not deleted" await cognee.prune.prune_system(metadata=True) - collections = get_vector_engine().client.collections.list_all() + collections = get_vector_engine().client.collections.list_all() assert len(collections) == 0, "Weaviate vector database is not empty" + if __name__ == "__main__": import asyncio + asyncio.run(main()) diff --git a/cognee/tests/unit/infrastructure/databases/test_index_graph_edges.py b/cognee/tests/unit/infrastructure/databases/test_index_graph_edges.py index e4c1dac05..59ad606b0 100644 --- a/cognee/tests/unit/infrastructure/databases/test_index_graph_edges.py +++ b/cognee/tests/unit/infrastructure/databases/test_index_graph_edges.py @@ -1,21 +1,33 @@ import pytest from unittest.mock import AsyncMock, patch + @pytest.mark.asyncio async def test_index_graph_edges_success(): """Test that index_graph_edges uses the index datapoints and creates vector index.""" mock_graph_engine = AsyncMock() - mock_graph_engine.get_graph_data.return_value = (None, [ - [{"relationship_name": "rel1"}, {"relationship_name": "rel1"}], - [{"relationship_name": "rel2"}] - ]) + mock_graph_engine.get_graph_data.return_value = ( + None, + [ + [{"relationship_name": "rel1"}, {"relationship_name": "rel1"}], + [{"relationship_name": "rel2"}], + ], + ) mock_vector_engine = AsyncMock() - with patch("cognee.tasks.storage.index_graph_edges.get_graph_engine", return_value=mock_graph_engine), \ - patch("cognee.tasks.storage.index_graph_edges.get_vector_engine", return_value=mock_vector_engine): - + with ( + patch( + "cognee.tasks.storage.index_graph_edges.get_graph_engine", + return_value=mock_graph_engine, + ), + patch( + "cognee.tasks.storage.index_graph_edges.get_vector_engine", + return_value=mock_vector_engine, + ), + ): from cognee.tasks.storage.index_graph_edges import index_graph_edges + await index_graph_edges() mock_graph_engine.get_graph_data.assert_awaited_once() @@ -31,10 +43,18 @@ async def test_index_graph_edges_no_relationships(): mock_vector_engine = AsyncMock() - with patch("cognee.tasks.storage.index_graph_edges.get_graph_engine", return_value=mock_graph_engine), \ - patch("cognee.tasks.storage.index_graph_edges.get_vector_engine", return_value=mock_vector_engine): - + with ( + patch( + "cognee.tasks.storage.index_graph_edges.get_graph_engine", + return_value=mock_graph_engine, + ), + patch( + "cognee.tasks.storage.index_graph_edges.get_vector_engine", + return_value=mock_vector_engine, + ), + ): from cognee.tasks.storage.index_graph_edges import index_graph_edges + await index_graph_edges() mock_graph_engine.get_graph_data.assert_awaited_once() @@ -45,12 +65,14 @@ async def test_index_graph_edges_no_relationships(): @pytest.mark.asyncio async def test_index_graph_edges_initialization_error(): """Test that index_graph_edges raises a RuntimeError if initialization fails.""" - with patch("cognee.tasks.storage.index_graph_edges.get_graph_engine", side_effect=Exception("Graph engine failed")), \ - patch("cognee.tasks.storage.index_graph_edges.get_vector_engine", return_value=AsyncMock()): - + with ( + patch( + "cognee.tasks.storage.index_graph_edges.get_graph_engine", + side_effect=Exception("Graph engine failed"), + ), + patch("cognee.tasks.storage.index_graph_edges.get_vector_engine", return_value=AsyncMock()), + ): from cognee.tasks.storage.index_graph_edges import index_graph_edges with pytest.raises(RuntimeError, match="Initialization error"): await index_graph_edges() - - diff --git a/cognee/tests/unit/interfaces/graph/get_graph_from_huge_model_test.py b/cognee/tests/unit/interfaces/graph/get_graph_from_huge_model_test.py index 016f2be33..9900670f2 100644 --- a/cognee/tests/unit/interfaces/graph/get_graph_from_huge_model_test.py +++ b/cognee/tests/unit/interfaces/graph/get_graph_from_huge_model_test.py @@ -2,25 +2,32 @@ import asyncio import random import time from typing import List -from uuid import uuid5, NAMESPACE_OID +from uuid import NAMESPACE_OID, uuid5 from cognee.infrastructure.engine import DataPoint from cognee.modules.graph.utils import get_graph_from_model random.seed(1500) + class Repository(DataPoint): path: str + _metadata = {"index_fields": [], "type": "Repository"} + class CodeFile(DataPoint): part_of: Repository contains: List["CodePart"] = [] depends_on: List["CodeFile"] = [] source_code: str + _metadata = {"index_fields": [], "type": "CodeFile"} + class CodePart(DataPoint): part_of: CodeFile source_code: str + _metadata = {"index_fields": [], "type": "CodePart"} + CodeFile.model_rebuild() CodePart.model_rebuild() @@ -29,13 +36,13 @@ CodePart.model_rebuild() def nanoseconds_to_largest_unit(nanoseconds): # Define conversion factors conversion_factors = { - 'weeks': 7 * 24 * 60 * 60 * 1e9, - 'days': 24 * 60 * 60 * 1e9, - 'hours': 60 * 60 * 1e9, - 'minutes': 60 * 1e9, - 'seconds': 1e9, - 'miliseconds': 1e6, - 'microseconds': 1e3, + "weeks": 7 * 24 * 60 * 60 * 1e9, + "days": 24 * 60 * 60 * 1e9, + "hours": 60 * 60 * 1e9, + "minutes": 60 * 1e9, + "seconds": 1e9, + "miliseconds": 1e6, + "microseconds": 1e3, } # Iterate through conversion factors to find the largest unit @@ -45,30 +52,41 @@ def nanoseconds_to_largest_unit(nanoseconds): return converted_value, unit # If nanoseconds is smaller than a second - return nanoseconds, 'nanoseconds' + return nanoseconds, "nanoseconds" async def test_circular_reference_extraction(): - repo = Repository(path = "repo1") + repo = Repository(path="repo1") - code_files = [CodeFile( - id = uuid5(NAMESPACE_OID, f"file{file_index}"), - source_code = "source code", - part_of = repo, - contains = [], - depends_on = [CodeFile( - id = uuid5(NAMESPACE_OID, f"file{random_id}"), - source_code = "source code", - part_of = repo, - depends_on = [], - ) for random_id in [random.randint(0, 1499) for _ in range(random.randint(0, 5))]], - ) for file_index in range(1500)] + code_files = [ + CodeFile( + id=uuid5(NAMESPACE_OID, f"file{file_index}"), + source_code="source code", + part_of=repo, + contains=[], + depends_on=[ + CodeFile( + id=uuid5(NAMESPACE_OID, f"file{random_id}"), + source_code="source code", + part_of=repo, + depends_on=[], + ) + for random_id in [random.randint(0, 1499) for _ in range(random.randint(0, 5))] + ], + ) + for file_index in range(1500) + ] for code_file in code_files: - code_file.contains.extend([CodePart( - part_of = code_file, - source_code = f"Part {part_index}", - ) for part_index in range(random.randint(1, 20))]) + code_file.contains.extend( + [ + CodePart( + part_of=code_file, + source_code=f"Part {part_index}", + ) + for part_index in range(random.randint(1, 20)) + ] + ) nodes = [] edges = [] @@ -78,9 +96,12 @@ async def test_circular_reference_extraction(): start = time.perf_counter_ns() - results = await asyncio.gather(*[ - get_graph_from_model(code_file, added_nodes = added_nodes, added_edges = added_edges) for code_file in code_files - ]) + results = await asyncio.gather( + *[ + get_graph_from_model(code_file, added_nodes=added_nodes, added_edges=added_edges) + for code_file in code_files + ] + ) time_to_run = time.perf_counter_ns() - start @@ -93,5 +114,6 @@ async def test_circular_reference_extraction(): assert len(nodes) == 1501 assert len(edges) == 1501 * 20 + 1500 * 5 + if __name__ == "__main__": asyncio.run(test_circular_reference_extraction()) diff --git a/cognee/tests/unit/interfaces/graph/get_graph_from_model_test.py b/cognee/tests/unit/interfaces/graph/get_graph_from_model_test.py index 000d45c15..36fa71c25 100644 --- a/cognee/tests/unit/interfaces/graph/get_graph_from_model_test.py +++ b/cognee/tests/unit/interfaces/graph/get_graph_from_model_test.py @@ -1,46 +1,60 @@ import asyncio import random from typing import List -from uuid import uuid5, NAMESPACE_OID +from uuid import NAMESPACE_OID, uuid5 from cognee.infrastructure.engine import DataPoint from cognee.modules.graph.utils import get_graph_from_model + class Document(DataPoint): path: str + _metadata = {"index_fields": [], "type": "Document"} + class DocumentChunk(DataPoint): part_of: Document text: str contains: List["Entity"] = None + _metadata = {"index_fields": ["text"], "type": "DocumentChunk"} + class EntityType(DataPoint): name: str + _metadata = {"index_fields": ["name"], "type": "EntityType"} + class Entity(DataPoint): name: str is_type: EntityType + _metadata = {"index_fields": ["name"], "type": "Entity"} + DocumentChunk.model_rebuild() async def get_graph_from_model_test(): - document = Document(path = "file_path") + document = Document(path="file_path") - document_chunks = [DocumentChunk( - id = uuid5(NAMESPACE_OID, f"file{file_index}"), - text = "some text", - part_of = document, - contains = [], - ) for file_index in range(1)] + document_chunks = [ + DocumentChunk( + id=uuid5(NAMESPACE_OID, f"file{file_index}"), + text="some text", + part_of=document, + contains=[], + ) + for file_index in range(1) + ] for document_chunk in document_chunks: - document_chunk.contains.append(Entity( - name = f"Entity", - is_type = EntityType( - name = "Type 1", - ), - )) + document_chunk.contains.append( + Entity( + name="Entity", + is_type=EntityType( + name="Type 1", + ), + ) + ) nodes = [] edges = [] @@ -49,14 +63,17 @@ async def get_graph_from_model_test(): added_edges = {} visited_properties = {} - results = await asyncio.gather(*[ - get_graph_from_model( - document_chunk, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, - ) for document_chunk in document_chunks - ]) + results = await asyncio.gather( + *[ + get_graph_from_model( + document_chunk, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, + ) + for document_chunk in document_chunks + ] + ) for result_nodes, result_edges in results: nodes.extend(result_nodes) @@ -65,5 +82,6 @@ async def get_graph_from_model_test(): assert len(nodes) == 4 assert len(edges) == 3 + if __name__ == "__main__": asyncio.run(get_graph_from_model_test()) diff --git a/cognee/tests/unit/modules/graph/cognee_graph_elements_test.py b/cognee/tests/unit/modules/graph/cognee_graph_elements_test.py index 1d9bad07c..000856b12 100644 --- a/cognee/tests/unit/modules/graph/cognee_graph_elements_test.py +++ b/cognee/tests/unit/modules/graph/cognee_graph_elements_test.py @@ -9,7 +9,7 @@ def test_node_initialization(): """Test that a Node is initialized correctly.""" node = Node("node1", {"attr1": "value1"}, dimension=2) assert node.id == "node1" - assert node.attributes == {"attr1": "value1", 'vector_distance': np.inf} + assert node.attributes == {"attr1": "value1", "vector_distance": np.inf} assert len(node.status) == 2 assert np.all(node.status == 1) @@ -96,7 +96,7 @@ def test_edge_initialization(): edge = Edge(node1, node2, {"weight": 10}, directed=False, dimension=2) assert edge.node1 == node1 assert edge.node2 == node2 - assert edge.attributes == {'vector_distance': np.inf,"weight": 10} + assert edge.attributes == {"vector_distance": np.inf, "weight": 10} assert edge.directed is False assert len(edge.status) == 2 assert np.all(edge.status == 1) diff --git a/cognee/tests/unit/modules/retriever/test_description_to_codepart_search.py b/cognee/tests/unit/modules/retriever/test_description_to_codepart_search.py index 4c39883a9..5cceade71 100644 --- a/cognee/tests/unit/modules/retriever/test_description_to_codepart_search.py +++ b/cognee/tests/unit/modules/retriever/test_description_to_codepart_search.py @@ -2,7 +2,6 @@ import pytest from unittest.mock import AsyncMock, patch - @pytest.mark.asyncio async def test_code_description_to_code_part_no_results(): """Test that code_description_to_code_part handles no search results.""" @@ -12,11 +11,24 @@ async def test_code_description_to_code_part_no_results(): mock_vector_engine = AsyncMock() mock_vector_engine.search.return_value = [] - with patch("cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", return_value=mock_vector_engine), \ - patch("cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", return_value=AsyncMock()), \ - patch("cognee.modules.retrieval.description_to_codepart_search.CogneeGraph", return_value=AsyncMock()): + with ( + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", + return_value=mock_vector_engine, + ), + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", + return_value=AsyncMock(), + ), + patch( + "cognee.modules.retrieval.description_to_codepart_search.CogneeGraph", + return_value=AsyncMock(), + ), + ): + from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part, + ) - from cognee.modules.retrieval.description_to_codepart_search import code_description_to_code_part result = await code_description_to_code_part("search query", mock_user, 2) assert result == [] @@ -29,7 +41,10 @@ async def test_code_description_to_code_part_invalid_query(): mock_user = AsyncMock() with pytest.raises(ValueError, match="The query must be a non-empty string."): - from cognee.modules.retrieval.description_to_codepart_search import code_description_to_code_part + from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part, + ) + await code_description_to_code_part("", mock_user, 2) @@ -40,7 +55,10 @@ async def test_code_description_to_code_part_invalid_top_k(): mock_user = AsyncMock() with pytest.raises(ValueError, match="top_k must be a positive integer."): - from cognee.modules.retrieval.description_to_codepart_search import code_description_to_code_part + from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part, + ) + await code_description_to_code_part("search query", mock_user, 0) @@ -50,11 +68,23 @@ async def test_code_description_to_code_part_initialization_error(): mock_user = AsyncMock() - with patch("cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", side_effect=Exception("Engine init failed")), \ - patch("cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", return_value=AsyncMock()): + with ( + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", + side_effect=Exception("Engine init failed"), + ), + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", + return_value=AsyncMock(), + ), + ): + from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part, + ) - from cognee.modules.retrieval.description_to_codepart_search import code_description_to_code_part - with pytest.raises(RuntimeError, match="System initialization error. Please try again later."): + with pytest.raises( + RuntimeError, match="System initialization error. Please try again later." + ): await code_description_to_code_part("search query", mock_user, 2) @@ -67,10 +97,23 @@ async def test_code_description_to_code_part_execution_error(): mock_vector_engine = AsyncMock() mock_vector_engine.search.side_effect = Exception("Execution error") - with patch("cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", return_value=mock_vector_engine), \ - patch("cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", return_value=AsyncMock()), \ - patch("cognee.modules.retrieval.description_to_codepart_search.CogneeGraph", return_value=AsyncMock()): + with ( + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_vector_engine", + return_value=mock_vector_engine, + ), + patch( + "cognee.modules.retrieval.description_to_codepart_search.get_graph_engine", + return_value=AsyncMock(), + ), + patch( + "cognee.modules.retrieval.description_to_codepart_search.CogneeGraph", + return_value=AsyncMock(), + ), + ): + from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part, + ) - from cognee.modules.retrieval.description_to_codepart_search import code_description_to_code_part with pytest.raises(RuntimeError, match="An error occurred while processing your request."): await code_description_to_code_part("search query", mock_user, 2) diff --git a/cognee/tests/unit/processing/chunks/chunk_by_paragraph_2_test.py b/cognee/tests/unit/processing/chunks/chunk_by_paragraph_2_test.py index 8e900727d..d8680a604 100644 --- a/cognee/tests/unit/processing/chunks/chunk_by_paragraph_2_test.py +++ b/cognee/tests/unit/processing/chunks/chunk_by_paragraph_2_test.py @@ -17,9 +17,9 @@ batch_paragraphs_vals = [True, False] def test_chunk_by_paragraph_isomorphism(input_text, paragraph_length, batch_paragraphs): chunks = chunk_by_paragraph(input_text, paragraph_length, batch_paragraphs) reconstructed_text = "".join([chunk["text"] for chunk in chunks]) - assert ( - reconstructed_text == input_text - ), f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + assert reconstructed_text == input_text, ( + f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + ) @pytest.mark.parametrize( @@ -27,27 +27,29 @@ def test_chunk_by_paragraph_isomorphism(input_text, paragraph_length, batch_para list(product(list(INPUT_TEXTS.values()), paragraph_lengths, batch_paragraphs_vals)), ) def test_paragraph_chunk_length(input_text, paragraph_length, batch_paragraphs): - chunks = list(chunk_by_paragraph(input_text, paragraph_length, batch_paragraphs)) - - chunk_lengths = np.array( - [len(list(chunk_by_word(chunk["text"]))) for chunk in chunks] + chunks = list( + chunk_by_paragraph( + data=input_text, paragraph_length=paragraph_length, batch_paragraphs=batch_paragraphs + ) ) + chunk_lengths = np.array([len(list(chunk_by_word(chunk["text"]))) for chunk in chunks]) + larger_chunks = chunk_lengths[chunk_lengths > paragraph_length] - assert np.all( - chunk_lengths <= paragraph_length - ), f"{paragraph_length = }: {larger_chunks} are too large" + assert np.all(chunk_lengths <= paragraph_length), ( + f"{paragraph_length = }: {larger_chunks} are too large" + ) @pytest.mark.parametrize( "input_text,paragraph_length,batch_paragraphs", list(product(list(INPUT_TEXTS.values()), paragraph_lengths, batch_paragraphs_vals)), ) -def test_chunk_by_paragraph_chunk_numbering( - input_text, paragraph_length, batch_paragraphs -): - chunks = chunk_by_paragraph(input_text, paragraph_length, batch_paragraphs) +def test_chunk_by_paragraph_chunk_numbering(input_text, paragraph_length, batch_paragraphs): + chunks = chunk_by_paragraph( + data=input_text, paragraph_length=paragraph_length, batch_paragraphs=batch_paragraphs + ) chunk_indices = np.array([chunk["chunk_index"] for chunk in chunks]) - assert np.all( - chunk_indices == np.arange(len(chunk_indices)) - ), f"{chunk_indices = } are not monotonically increasing" + assert np.all(chunk_indices == np.arange(len(chunk_indices))), ( + f"{chunk_indices = } are not monotonically increasing" + ) diff --git a/cognee/tests/unit/processing/chunks/chunk_by_paragraph_test.py b/cognee/tests/unit/processing/chunks/chunk_by_paragraph_test.py index 3ddc6f4f5..e420b2e9f 100644 --- a/cognee/tests/unit/processing/chunks/chunk_by_paragraph_test.py +++ b/cognee/tests/unit/processing/chunks/chunk_by_paragraph_test.py @@ -49,16 +49,18 @@ Third paragraph is cut and is missing the dot at the end""", def run_chunking_test(test_text, expected_chunks): chunks = [] - for chunk_data in chunk_by_paragraph(test_text, 12, batch_paragraphs=False): + for chunk_data in chunk_by_paragraph( + data=test_text, paragraph_length=12, batch_paragraphs=False + ): chunks.append(chunk_data) assert len(chunks) == 3 for expected_chunks_item, chunk in zip(expected_chunks, chunks): for key in ["text", "word_count", "cut_type"]: - assert ( - chunk[key] == expected_chunks_item[key] - ), f"{key = }: {chunk[key] = } != {expected_chunks_item[key] = }" + assert chunk[key] == expected_chunks_item[key], ( + f"{key = }: {chunk[key] = } != {expected_chunks_item[key] = }" + ) def test_chunking_whole_text(): diff --git a/cognee/tests/unit/processing/chunks/chunk_by_sentence_test.py b/cognee/tests/unit/processing/chunks/chunk_by_sentence_test.py index d1c75d7ed..efa053077 100644 --- a/cognee/tests/unit/processing/chunks/chunk_by_sentence_test.py +++ b/cognee/tests/unit/processing/chunks/chunk_by_sentence_test.py @@ -16,9 +16,9 @@ maximum_length_vals = [None, 8, 64] def test_chunk_by_sentence_isomorphism(input_text, maximum_length): chunks = chunk_by_sentence(input_text, maximum_length) reconstructed_text = "".join([chunk[1] for chunk in chunks]) - assert ( - reconstructed_text == input_text - ), f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + assert reconstructed_text == input_text, ( + f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + ) @pytest.mark.parametrize( @@ -36,6 +36,6 @@ def test_paragraph_chunk_length(input_text, maximum_length): chunk_lengths = np.array([len(list(chunk_by_word(chunk[1]))) for chunk in chunks]) larger_chunks = chunk_lengths[chunk_lengths > maximum_length] - assert np.all( - chunk_lengths <= maximum_length - ), f"{maximum_length = }: {larger_chunks} are too large" + assert np.all(chunk_lengths <= maximum_length), ( + f"{maximum_length = }: {larger_chunks} are too large" + ) diff --git a/cognee/tests/unit/processing/chunks/chunk_by_word_test.py b/cognee/tests/unit/processing/chunks/chunk_by_word_test.py index 42523c106..d79fcdbc8 100644 --- a/cognee/tests/unit/processing/chunks/chunk_by_word_test.py +++ b/cognee/tests/unit/processing/chunks/chunk_by_word_test.py @@ -17,9 +17,9 @@ from cognee.tests.unit.processing.chunks.test_input import INPUT_TEXTS def test_chunk_by_word_isomorphism(input_text): chunks = chunk_by_word(input_text) reconstructed_text = "".join([chunk[0] for chunk in chunks]) - assert ( - reconstructed_text == input_text - ), f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + assert reconstructed_text == input_text, ( + f"texts are not identical: {len(input_text) = }, {len(reconstructed_text) = }" + ) @pytest.mark.parametrize( @@ -35,6 +35,4 @@ def test_chunk_by_word_splits(input_text): chunks = np.array(list(chunk_by_word(input_text))) space_test = np.array([" " not in chunk[0].strip() for chunk in chunks]) - assert np.all( - space_test - ), f"These chunks contain spaces within them: {chunks[space_test == False]}" + assert np.all(space_test), f"These chunks contain spaces within them: {chunks[~space_test]}" diff --git a/cognee/tests/unit/processing/utils/utils_test.py b/cognee/tests/unit/processing/utils/utils_test.py new file mode 100644 index 000000000..f8c325100 --- /dev/null +++ b/cognee/tests/unit/processing/utils/utils_test.py @@ -0,0 +1,131 @@ +import os +import pytest +import networkx as nx +import pandas as pd +from unittest.mock import patch, mock_open +from io import BytesIO +from uuid import uuid4 +from datetime import datetime, timezone +from cognee.shared.exceptions import IngestionError + +from cognee.shared.utils import ( + get_anonymous_id, + send_telemetry, + num_tokens_from_string, + get_file_content_hash, + trim_text_to_max_tokens, + prepare_edges, + prepare_nodes, + create_cognee_style_network_with_logo, + graph_to_tuple, +) + + +@pytest.fixture +def temp_dir(tmp_path): + return tmp_path + + +@patch("os.makedirs") +@patch("builtins.open", new_callable=mock_open, read_data=str(uuid4())) +def test_get_anonymous_id(mock_open_file, mock_makedirs, temp_dir): + os.environ["HOME"] = str(temp_dir) + anon_id = get_anonymous_id() + assert isinstance(anon_id, str) + assert len(anon_id) > 0 + + +# @patch("requests.post") +# def test_send_telemetry(mock_post): +# mock_post.return_value.status_code = 200 +# +# send_telemetry("test_event", "test_user", {"key": "value"}) +# mock_post.assert_called_once() +# +# args, kwargs = mock_post.call_args +# assert kwargs["json"]["event_name"] == "test_event" + +# +# @patch("tiktoken.encoding_for_model") +# def test_num_tokens_from_string(mock_encoding): +# mock_encoding.return_value.encode = lambda x: list(x) +# +# assert num_tokens_from_string("hello", "test_encoding") == 5 +# assert num_tokens_from_string("world", "test_encoding") == 5 +# + + +@patch("builtins.open", new_callable=mock_open, read_data=b"test_data") +def test_get_file_content_hash_file(mock_open_file): + import hashlib + + expected_hash = hashlib.md5(b"test_data").hexdigest() + result = get_file_content_hash("test_file.txt") + assert result == expected_hash + + +def test_get_file_content_hash_stream(): + stream = BytesIO(b"test_data") + import hashlib + + expected_hash = hashlib.md5(b"test_data").hexdigest() + result = get_file_content_hash(stream) + assert result == expected_hash + + +# def test_trim_text_to_max_tokens(): +# text = "This is a test string with multiple words." +# encoding_name = "test_encoding" +# +# with patch("tiktoken.get_encoding") as mock_get_encoding: +# mock_get_encoding.return_value.encode = lambda x: list(x) +# mock_get_encoding.return_value.decode = lambda x: "".join(x) +# +# result = trim_text_to_max_tokens(text, 5, encoding_name) +# assert result == text[:5] + + +def test_prepare_edges(): + graph = nx.MultiDiGraph() + graph.add_edge("A", "B", key="AB", weight=1) + edges_df = prepare_edges(graph, "source", "target", "key") + + assert isinstance(edges_df, pd.DataFrame) + assert len(edges_df) == 1 + + +def test_prepare_nodes(): + graph = nx.Graph() + graph.add_node(1, name="Node1") + nodes_df = prepare_nodes(graph) + + assert isinstance(nodes_df, pd.DataFrame) + assert len(nodes_df) == 1 + + +@pytest.mark.asyncio +async def test_create_cognee_style_network_with_logo(): + import networkx as nx + from unittest.mock import patch + from io import BytesIO + + # Create a sample graph + graph = nx.Graph() + graph.add_node(1, group="A") + graph.add_node(2, group="B") + graph.add_edge(1, 2) + + # Convert the graph to a tuple format for serialization + graph_tuple = graph_to_tuple(graph) + + result = await create_cognee_style_network_with_logo( + graph_tuple, + title="Test Network", + layout_func=nx.spring_layout, + layout_scale=3.0, + logo_alpha=0.5, + ) + + assert result is not None + assert isinstance(result, str) + assert len(result) > 0 diff --git a/evals/deepeval_metrics.py b/evals/deepeval_metrics.py index b07d2e1ac..9ce1e9e4f 100644 --- a/evals/deepeval_metrics.py +++ b/evals/deepeval_metrics.py @@ -6,21 +6,17 @@ from evals.official_hotpot_metrics import exact_match_score, f1_score correctness_metric = GEval( name="Correctness", model="gpt-4o-mini", - evaluation_params=[ - LLMTestCaseParams.ACTUAL_OUTPUT, - LLMTestCaseParams.EXPECTED_OUTPUT - ], + evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT, LLMTestCaseParams.EXPECTED_OUTPUT], evaluation_steps=[ - "Determine whether the actual output is factually correct based on the expected output." - ] + "Determine whether the actual output is factually correct based on the expected output." + ], ) class f1_score_metric(BaseMetric): - - """F1 score taken directly from the official hotpot benchmark + """F1 score taken directly from the official hotpot benchmark implementation and wrapped into a deepeval metric.""" - + def __init__(self, threshold: float = 0.5): self.threshold = threshold @@ -43,12 +39,12 @@ class f1_score_metric(BaseMetric): @property def __name__(self): return "Official hotpot F1 score" - -class em_score_metric(BaseMetric): - """Exact Match score taken directly from the official hotpot benchmark + +class em_score_metric(BaseMetric): + """Exact Match score taken directly from the official hotpot benchmark implementation and wrapped into a deepeval metric.""" - + def __init__(self, threshold: float = 0.5): self.threshold = threshold @@ -69,4 +65,4 @@ class em_score_metric(BaseMetric): @property def __name__(self): - return "Official hotpot EM score" \ No newline at end of file + return "Official hotpot EM score" diff --git a/evals/eval_on_hotpot.py b/evals/eval_on_hotpot.py index e07e80e0c..5a95ea05d 100644 --- a/evals/eval_on_hotpot.py +++ b/evals/eval_on_hotpot.py @@ -34,19 +34,25 @@ async def answer_without_cognee(instance): ) return answer_prediction + async def answer_with_cognee(instance): await cognee.prune.prune_data() await cognee.prune.prune_system(metadata=True) - - for (title, sentences) in instance["context"]: - await cognee.add("\n".join(sentences), dataset_name = "HotPotQA") - - await cognee.cognify("HotPotQA") - search_results = await cognee.search( - SearchType.INSIGHTS, query_text=instance["question"] + for title, sentences in instance["context"]: + await cognee.add("\n".join(sentences), dataset_name="HotPotQA") + + for n in range(1, 4): + print(n) + + await cognee.cognify("HotPotQA") + + search_results = await cognee.search(SearchType.INSIGHTS, query_text=instance["question"]) + search_results_second = await cognee.search( + SearchType.SUMMARIES, query_text=instance["question"] ) - + search_results = search_results + search_results_second + args = { "question": instance["question"], "context": search_results, @@ -60,61 +66,67 @@ async def answer_with_cognee(instance): system_prompt=system_prompt, response_model=str, ) - + return answer_prediction async def eval_answers(instances, answers, eval_metric): test_cases = [] - + for instance, answer in zip(instances, answers): test_case = LLMTestCase( - input=instance["question"], - actual_output=answer, - expected_output=instance["answer"] + input=instance["question"], actual_output=answer, expected_output=instance["answer"] ) test_cases.append(test_case) - + eval_set = EvaluationDataset(test_cases) eval_results = eval_set.evaluate([eval_metric]) - + return eval_results + async def eval_on_hotpotQA(answer_provider, num_samples, eval_metric): base_config = get_base_config() data_root_dir = base_config.data_root_directory - + if not Path(data_root_dir).exists(): Path(data_root_dir).mkdir() - + filepath = data_root_dir / Path("hotpot_dev_fullwiki_v1.json") if not filepath.exists(): - url = 'http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json' + url = "http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json" wget.download(url, out=data_root_dir) - + with open(filepath, "r") as file: dataset = json.load(file) - + instances = dataset if not num_samples else dataset[:num_samples] answers = [] for instance in tqdm(instances, desc="Getting answers"): answer = await answer_provider(instance) answers.append(answer) - + eval_results = await eval_answers(instances, answers, eval_metric) - avg_score = statistics.mean([result.metrics_data[0].score for result in eval_results.test_results]) - + avg_score = statistics.mean( + [result.metrics_data[0].score for result in eval_results.test_results] + ) + return avg_score + if __name__ == "__main__": parser = argparse.ArgumentParser() - + parser.add_argument("--with_cognee", action="store_true") parser.add_argument("--num_samples", type=int, default=500) - parser.add_argument("--metric", type=str, default="correctness_metric", - help="Valid options are Deepeval metrics (e.g. AnswerRelevancyMetric) \ - and metrics defined in evals/deepeval_metrics.py, e.g. f1_score_metric") - + parser.add_argument( + "--metric", + type=str, + default="correctness_metric", + help="Valid options are Deepeval metrics (e.g. AnswerRelevancyMetric) \ + and metrics defined in evals/deepeval_metrics.py, e.g. f1_score_metric", + ) + args = parser.parse_args() try: @@ -124,11 +136,11 @@ if __name__ == "__main__": metric = getattr(evals.deepeval_metrics, args.metric) if isinstance(metric, type): metric = metric() - + if args.with_cognee: answer_provider = answer_with_cognee else: answer_provider = answer_without_cognee - + avg_score = asyncio.run(eval_on_hotpotQA(answer_provider, args.num_samples, metric)) - print(f"Average {args.metric}: {avg_score}") \ No newline at end of file + print(f"Average {args.metric}: {avg_score}") diff --git a/evals/eval_swe_bench.py b/evals/eval_swe_bench.py index 67826fc12..a8b4c8a1d 100644 --- a/evals/eval_swe_bench.py +++ b/evals/eval_swe_bench.py @@ -7,19 +7,13 @@ from pathlib import Path from swebench.harness.utils import load_swebench_dataset from swebench.inference.make_datasets.create_instance import PATCH_EXAMPLE +from cognee.api.v1.cognify.code_graph_pipeline import run_code_graph_pipeline from cognee.api.v1.search import SearchType from cognee.infrastructure.llm.get_llm_client import get_llm_client from cognee.infrastructure.llm.prompts import read_query_prompt -from cognee.modules.pipelines import Task, run_tasks -from cognee.modules.retrieval.brute_force_triplet_search import \ - brute_force_triplet_search -# from cognee.shared.data_models import SummarizedContent -from cognee.shared.utils import render_graph -from cognee.tasks.repo_processor import (enrich_dependency_graph, - expand_dependency_graph, - get_repo_file_dependencies) -from cognee.tasks.storage import add_data_points -# from cognee.tasks.summarization import summarize_code +from cognee.modules.retrieval.description_to_codepart_search import ( + code_description_to_code_part_search, +) from evals.eval_utils import download_github_repo, retrieved_edges_to_string @@ -33,67 +27,35 @@ def check_install_package(package_name): return True except ImportError: try: - subprocess.check_call( - [sys.executable, "-m", "pip", "install", package_name] - ) + subprocess.check_call([sys.executable, "-m", "pip", "install", package_name]) return True except subprocess.CalledProcessError: return False -async def generate_patch_with_cognee(instance, llm_client, search_type=SearchType.CHUNKS): - import os - import pathlib - import cognee - from cognee.infrastructure.databases.relational import create_db_and_tables - - file_path = Path(__file__).parent - data_directory_path = str(pathlib.Path(os.path.join(file_path, ".data_storage/code_graph")).resolve()) - cognee.config.data_root_directory(data_directory_path) - cognee_directory_path = str(pathlib.Path(os.path.join(file_path, ".cognee_system/code_graph")).resolve()) - cognee.config.system_root_directory(cognee_directory_path) - - await cognee.prune.prune_data() - await cognee.prune.prune_system(metadata = True) - - await create_db_and_tables() - - # repo_path = download_github_repo(instance, '../RAW_GIT_REPOS') - - repo_path = '/Users/borisarzentar/Projects/graphrag' - - tasks = [ - Task(get_repo_file_dependencies), - Task(enrich_dependency_graph, task_config = { "batch_size": 50 }), - Task(expand_dependency_graph, task_config = { "batch_size": 50 }), - Task(add_data_points, task_config = { "batch_size": 50 }), - # Task(summarize_code, summarization_model = SummarizedContent), - ] - - pipeline = run_tasks(tasks, repo_path, "cognify_code_pipeline") - - async for result in pipeline: - print(result) - - print('Here we have the repo under the repo_path') - - await render_graph(None, include_labels = True, include_nodes = True) - - problem_statement = instance['problem_statement'] +async def generate_patch_with_cognee(instance): + repo_path = download_github_repo(instance, "../RAW_GIT_REPOS") + include_docs = True + problem_statement = instance["problem_statement"] instructions = read_query_prompt("patch_gen_kg_instructions.txt") - retrieved_edges = await brute_force_triplet_search(problem_statement, top_k = 3, collections = ["data_point_source_code", "data_point_text"]) - - retrieved_edges_str = retrieved_edges_to_string(retrieved_edges) + async for result in run_code_graph_pipeline(repo_path, include_docs=include_docs): + print(result) - prompt = "\n".join([ - problem_statement, - "", - PATCH_EXAMPLE, - "", - "These are the retrieved edges:", - retrieved_edges_str - ]) + retrieved_codeparts = await code_description_to_code_part_search( + problem_statement, include_docs=include_docs + ) + + prompt = "\n".join( + [ + problem_statement, + "", + PATCH_EXAMPLE, + "", + "This is the additional context to solve the problem (description from documentation together with codeparts):", + retrieved_codeparts, + ] + ) llm_client = get_llm_client() answer_prediction = await llm_client.acreate_structured_output( @@ -117,8 +79,6 @@ async def generate_patch_without_cognee(instance, llm_client): async def get_preds(dataset, with_cognee=True): - llm_client = get_llm_client() - if with_cognee: model_name = "with_cognee" pred_func = generate_patch_with_cognee @@ -126,28 +86,25 @@ async def get_preds(dataset, with_cognee=True): model_name = "without_cognee" pred_func = generate_patch_without_cognee - futures = [ - (instance["instance_id"], pred_func(instance, llm_client)) - for instance in dataset - ] - model_patches = await asyncio.gather(*[x[1] for x in futures]) + preds = [] - preds = [ - { - "instance_id": instance_id, - "model_patch": model_patch, - "model_name_or_path": model_name, - } - for (instance_id, _), model_patch in zip(futures, model_patches) - ] + for instance in dataset: + instance_id = instance["instance_id"] + model_patch = await pred_func(instance) # Sequentially await the async function + preds.append( + { + "instance_id": instance_id, + "model_patch": model_patch, + "model_name_or_path": model_name, + } + ) return preds async def main(): - parser = argparse.ArgumentParser( - description="Run LLM predictions on SWE-bench dataset") - parser.add_argument('--cognee_off', action='store_true') + parser = argparse.ArgumentParser(description="Run LLM predictions on SWE-bench dataset") + parser.add_argument("--cognee_off", action="store_true") parser.add_argument("--max_workers", type=int, required=True) args = parser.parse_args() @@ -155,23 +112,22 @@ async def main(): check_install_package(dependency) if args.cognee_off: - dataset_name = 'princeton-nlp/SWE-bench_Lite_bm25_13K' - dataset = load_swebench_dataset(dataset_name, split='test') + dataset_name = "princeton-nlp/SWE-bench_Lite_bm25_13K" + dataset = load_swebench_dataset(dataset_name, split="test") predictions_path = "preds_nocognee.json" if not Path(predictions_path).exists(): preds = await get_preds(dataset, with_cognee=False) with open(predictions_path, "w") as file: json.dump(preds, file) else: - dataset_name = 'princeton-nlp/SWE-bench_Lite' - swe_dataset = load_swebench_dataset( - dataset_name, split='test')[:1] + dataset_name = "princeton-nlp/SWE-bench_Lite" + swe_dataset = load_swebench_dataset(dataset_name, split="test")[:1] predictions_path = "preds.json" preds = await get_preds(swe_dataset, with_cognee=not args.cognee_off) with open(predictions_path, "w") as file: json.dump(preds, file) - + """ This part is for the evaluation subprocess.run( [ "python", @@ -189,6 +145,7 @@ async def main(): "test_run", ] ) + """ if __name__ == "__main__": diff --git a/evals/eval_utils.py b/evals/eval_utils.py index 26c4ec2b8..6241cd4dd 100644 --- a/evals/eval_utils.py +++ b/evals/eval_utils.py @@ -15,9 +15,9 @@ def download_github_repo(instance, output_dir): Returns: str: Path to the downloaded repository. """ - repo_owner_repo = instance['repo'] - base_commit = instance['base_commit'] - instance_id = instance['instance_id'] + repo_owner_repo = instance["repo"] + base_commit = instance["base_commit"] + instance_id = instance["instance_id"] repo_url = f"https://github.com/{repo_owner_repo}.git" @@ -30,7 +30,6 @@ def download_github_repo(instance, output_dir): else: print(f"Repository already exists at {repo_path}.") - repo = Repo(repo_path) repo.git.checkout(base_commit) @@ -69,4 +68,4 @@ def retrieved_edges_to_string(retrieved_edges): relationship_type = edge.attributes["relationship_type"] edge_str = f"{node_to_string(edge.node1)} {relationship_type} {node_to_string(edge.node2)}" edge_strings.append(edge_str) - return "\n".join(edge_strings) \ No newline at end of file + return "\n".join(edge_strings) diff --git a/evals/generate_test_set.py b/evals/generate_test_set.py index 58bf4222a..ccac8d0e9 100644 --- a/evals/generate_test_set.py +++ b/evals/generate_test_set.py @@ -3,6 +3,10 @@ from deepeval.synthesizer import Synthesizer import dotenv from deepeval.test_case import LLMTestCase +# import pytest +# from deepeval import assert_test +from deepeval.metrics import AnswerRelevancyMetric + dotenv.load_dotenv() # synthesizer = Synthesizer() @@ -22,7 +26,7 @@ dotenv.load_dotenv() dataset = EvaluationDataset() dataset.generate_goldens_from_docs( - document_paths=['natural_language_processing.txt', 'soldiers_home.pdf', 'trump.txt'], + document_paths=["natural_language_processing.txt", "soldiers_home.pdf", "trump.txt"], max_goldens_per_document=10, num_evolutions=5, enable_breadth_evolve=True, @@ -33,16 +37,9 @@ print(dataset.goldens) print(dataset) -import pytest -from deepeval import assert_test -from deepeval.metrics import AnswerRelevancyMetric - - answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.5) -from deepeval import evaluate +# from deepeval import evaluate # evaluate(dataset, [answer_relevancy_metric]) - - diff --git a/evals/official_hotpot_metrics.py b/evals/official_hotpot_metrics.py index b598e90d3..70444f7be 100644 --- a/evals/official_hotpot_metrics.py +++ b/evals/official_hotpot_metrics.py @@ -11,16 +11,15 @@ import ujson as json def normalize_answer(s): - def remove_articles(text): - return re.sub(r'\b(a|an|the)\b', ' ', text) + return re.sub(r"\b(a|an|the)\b", " ", text) def white_space_fix(text): - return ' '.join(text.split()) + return " ".join(text.split()) def remove_punc(text): exclude = set(string.punctuation) - return ''.join(ch for ch in text if ch not in exclude) + return "".join(ch for ch in text if ch not in exclude) def lower(text): return text.lower() @@ -34,9 +33,15 @@ def f1_score(prediction, ground_truth): ZERO_METRIC = (0, 0, 0) - if normalized_prediction in ['yes', 'no', 'noanswer'] and normalized_prediction != normalized_ground_truth: + if ( + normalized_prediction in ["yes", "no", "noanswer"] + and normalized_prediction != normalized_ground_truth + ): return ZERO_METRIC - if normalized_ground_truth in ['yes', 'no', 'noanswer'] and normalized_prediction != normalized_ground_truth: + if ( + normalized_ground_truth in ["yes", "no", "noanswer"] + and normalized_prediction != normalized_ground_truth + ): return ZERO_METRIC prediction_tokens = normalized_prediction.split() @@ -52,17 +57,19 @@ def f1_score(prediction, ground_truth): def exact_match_score(prediction, ground_truth): - return (normalize_answer(prediction) == normalize_answer(ground_truth)) + return normalize_answer(prediction) == normalize_answer(ground_truth) + def update_answer(metrics, prediction, gold): em = exact_match_score(prediction, gold) f1, prec, recall = f1_score(prediction, gold) - metrics['em'] += float(em) - metrics['f1'] += f1 - metrics['prec'] += prec - metrics['recall'] += recall + metrics["em"] += float(em) + metrics["f1"] += f1 + metrics["prec"] += prec + metrics["recall"] += recall return em, prec, recall + def update_sp(metrics, prediction, gold): cur_sp_pred = set(map(tuple, prediction)) gold_sp_pred = set(map(tuple, gold)) @@ -79,8 +86,8 @@ def update_sp(metrics, prediction, gold): recall = 1.0 * tp / (tp + fn) if tp + fn > 0 else 0.0 f1 = 2 * prec * recall / (prec + recall) if prec + recall > 0 else 0.0 em = 1.0 if fp + fn == 0 else 0.0 - metrics['sp_em'] += em - metrics['sp_f1'] += f1 - metrics['sp_prec'] += prec - metrics['sp_recall'] += recall + metrics["sp_em"] += em + metrics["sp_f1"] += f1 + metrics["sp_prec"] += prec + metrics["sp_recall"] += recall return em, prec, recall diff --git a/evals/simple_rag_vs_cognee_eval.py b/evals/simple_rag_vs_cognee_eval.py index 5d1ddb4ca..82b1df600 100644 --- a/evals/simple_rag_vs_cognee_eval.py +++ b/evals/simple_rag_vs_cognee_eval.py @@ -1,13 +1,19 @@ from deepeval.dataset import EvaluationDataset from pydantic import BaseModel - +import os from typing import List, Type from deepeval.test_case import LLMTestCase import dotenv +from cognee.infrastructure.llm.get_llm_client import get_llm_client +from cognee.infrastructure.databases.vector import get_vector_engine +from cognee.base_config import get_base_config + +import logging + +logger = logging.getLogger(__name__) dotenv.load_dotenv() -from cognee.infrastructure.llm.get_llm_client import get_llm_client dataset = EvaluationDataset() dataset.add_test_cases_from_json_file( @@ -16,7 +22,7 @@ dataset.add_test_cases_from_json_file( input_key_name="input", actual_output_key_name="actual_output", expected_output_key_name="expected_output", - context_key_name="context" + context_key_name="context", ) print(dataset) @@ -38,32 +44,26 @@ print(dataset.goldens) print(dataset) - - -import logging - -logger = logging.getLogger(__name__) - class AnswerModel(BaseModel): - response:str -def get_answer_base(content: str, context:str, response_model: Type[BaseModel]): + response: str + + +def get_answer_base(content: str, context: str, response_model: Type[BaseModel]): llm_client = get_llm_client() system_prompt = "THIS IS YOUR CONTEXT:" + str(context) - return llm_client.create_structured_output(content, system_prompt, response_model) -def get_answer(content: str,context, model: Type[BaseModel]= AnswerModel): + return llm_client.create_structured_output(content, system_prompt, response_model) + +def get_answer(content: str, context, model: Type[BaseModel] = AnswerModel): try: - return (get_answer_base( - content, - context, - model - )) + return get_answer_base(content, context, model) except Exception as error: - logger.error("Error extracting cognitive layers from content: %s", error, exc_info = True) + logger.error("Error extracting cognitive layers from content: %s", error, exc_info=True) raise error + async def run_cognify_base_rag(): from cognee.api.v1.add import add from cognee.api.v1.prune import prune @@ -74,17 +74,10 @@ async def run_cognify_base_rag(): await add("data://test_datasets", "initial_test") graph = await cognify("initial_test") + return graph - - pass - - -import os -from cognee.base_config import get_base_config -from cognee.infrastructure.databases.vector import get_vector_engine - -async def cognify_search_base_rag(content:str, context:str): +async def cognify_search_base_rag(content: str, context: str): base_config = get_base_config() cognee_directory_path = os.path.abspath(".cognee_system") @@ -97,23 +90,24 @@ async def cognify_search_base_rag(content:str, context:str): print("results", return_) return return_ -async def cognify_search_graph(content:str, context:str): + +async def cognify_search_graph(content: str, context: str): from cognee.api.v1.search import search, SearchType - params = {'query': 'Donald Trump'} + + params = {"query": "Donald Trump"} results = await search(SearchType.INSIGHTS, params) print("results", results) return results - def convert_goldens_to_test_cases(test_cases_raw: List[LLMTestCase]) -> List[LLMTestCase]: test_cases = [] for case in test_cases_raw: test_case = LLMTestCase( input=case.input, # Generate actual output using the 'input' and 'additional_metadata' - actual_output= str(get_answer(case.input, case.context).model_dump()['response']), + actual_output=str(get_answer(case.input, case.context).model_dump()["response"]), expected_output=case.expected_output, context=case.context, retrieval_context=["retrieval_context"], @@ -121,6 +115,7 @@ def convert_goldens_to_test_cases(test_cases_raw: List[LLMTestCase]) -> List[LLM test_cases.append(test_case) return test_cases + # # Data preprocessing before setting the dataset test cases # dataset.test_cases = convert_goldens_to_test_cases(dataset.test_cases) # @@ -133,13 +128,13 @@ def convert_goldens_to_test_cases(test_cases_raw: List[LLMTestCase]) -> List[LLM if __name__ == "__main__": - import asyncio async def main(): # await run_cognify_base_rag() # await cognify_search_base_rag("show_all_processes", "context") await cognify_search_graph("show_all_processes", "context") + asyncio.run(main()) # run_cognify_base_rag_and_search() # # Data preprocessing before setting the dataset test cases @@ -147,4 +142,4 @@ if __name__ == "__main__": # from deepeval.metrics import HallucinationMetric # metric = HallucinationMetric() # dataset.evaluate([metric]) - pass \ No newline at end of file + pass diff --git a/examples/python/code_graph_example.py b/examples/python/code_graph_example.py new file mode 100644 index 000000000..59229344f --- /dev/null +++ b/examples/python/code_graph_example.py @@ -0,0 +1,47 @@ +import argparse +import asyncio +import logging + +from cognee.api.v1.cognify.code_graph_pipeline import run_code_graph_pipeline +from cognee.shared.utils import setup_logging + + +async def main(repo_path, include_docs): + async for result in run_code_graph_pipeline(repo_path, include_docs): + print(result) + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--repo_path", type=str, required=True, help="Path to the repository") + parser.add_argument( + "--include_docs", + type=lambda x: x.lower() in ("true", "1"), + default=True, + help="Whether or not to process non-code files", + ) + parser.add_argument( + "--time", + type=lambda x: x.lower() in ("true", "1"), + default=True, + help="Whether or not to time the pipeline run", + ) + return parser.parse_args() + + +if __name__ == "__main__": + setup_logging(logging.ERROR) + + args = parse_args() + + if args.time: + import time + + start_time = time.time() + asyncio.run(main(args.repo_path, args.include_docs)) + end_time = time.time() + print("\n" + "=" * 50) + print(f"Pipeline Execution Time: {end_time - start_time:.2f} seconds") + print("=" * 50 + "\n") + else: + asyncio.run(main(args.repo_path, args.include_docs)) diff --git a/examples/python/dynamic_steps_example.py b/examples/python/dynamic_steps_example.py index 6af31750f..11596a5e2 100644 --- a/examples/python/dynamic_steps_example.py +++ b/examples/python/dynamic_steps_example.py @@ -1,7 +1,9 @@ import cognee import asyncio -from cognee.modules.retrieval.brute_force_triplet_search import brute_force_triplet_search -from cognee.modules.retrieval.brute_force_triplet_search import format_triplets +import logging + +from cognee.api.v1.search import SearchType +from cognee.shared.utils import setup_logging job_1 = """ CV 1: Relevant @@ -158,6 +160,7 @@ CRM Software: Salesforce, Zoho Negotiation and Relationship Building """ + async def main(enable_steps): # Step 1: Reset data and system state if enable_steps.get("prune_data"): @@ -182,10 +185,15 @@ async def main(enable_steps): # Step 4: Query insights if enable_steps.get("retriever"): - results = await brute_force_triplet_search('Who has the most experience with graphic design?') - print(format_triplets(results)) + search_results = await cognee.search( + SearchType.GRAPH_COMPLETION, query_text="Who has experience in design tools?" + ) + print(search_results) + + +if __name__ == "__main__": + setup_logging(logging.INFO) -if __name__ == '__main__': rebuild_kg = True retrieve = True steps_to_enable = { @@ -193,7 +201,7 @@ if __name__ == '__main__': "prune_system": rebuild_kg, "add_text": rebuild_kg, "cognify": rebuild_kg, - "retriever": retrieve + "retriever": retrieve, } asyncio.run(main(steps_to_enable)) diff --git a/examples/python/graphiti_example.py b/examples/python/graphiti_example.py index a48fa9b4c..248361321 100644 --- a/examples/python/graphiti_example.py +++ b/examples/python/graphiti_example.py @@ -4,7 +4,9 @@ import cognee from cognee.api.v1.search import SearchType from cognee.modules.pipelines import Task, run_tasks from cognee.tasks.temporal_awareness import ( - build_graph_with_temporal_awareness, search_graph_with_temporal_awareness) + build_graph_with_temporal_awareness, + search_graph_with_temporal_awareness, +) text_list = [ "Kamala Harris is the Attorney General of California. She was previously " @@ -12,18 +14,20 @@ text_list = [ "As AG, Harris was in office from January 3, 2011 – January 3, 2017", ] -async def main(): +async def main(): tasks = [ Task(build_graph_with_temporal_awareness, text_list=text_list), - Task(search_graph_with_temporal_awareness, query='Who was the California Attorney General?') + Task( + search_graph_with_temporal_awareness, query="Who was the California Attorney General?" + ), ] - + pipeline = run_tasks(tasks) - + async for result in pipeline: print(result) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.run(main()) diff --git a/examples/python/simple_example.py b/examples/python/simple_example.py index 55b07c4c3..bf3c95de1 100644 --- a/examples/python/simple_example.py +++ b/examples/python/simple_example.py @@ -20,47 +20,50 @@ async def main(): Natural language processing (NLP) is an interdisciplinary subfield of computer science and information retrieval. """ - + print("Adding text to cognee:") - print(text.strip()) + print(text.strip()) # Add the text, and make it available for cognify await cognee.add(text) print("Text added successfully.\n") - print("Running cognify to create knowledge graph...\n") print("Cognify process steps:") print("1. Classifying the document: Determining the type and category of the input text.") - print("2. Checking permissions: Ensuring the user has the necessary rights to process the text.") - print("3. Extracting text chunks: Breaking down the text into sentences or phrases for analysis.") + print( + "2. Checking permissions: Ensuring the user has the necessary rights to process the text." + ) + print( + "3. Extracting text chunks: Breaking down the text into sentences or phrases for analysis." + ) print("4. Adding data points: Storing the extracted chunks for processing.") - print("5. Generating knowledge graph: Extracting entities and relationships to form a knowledge graph.") + print( + "5. Generating knowledge graph: Extracting entities and relationships to form a knowledge graph." + ) print("6. Summarizing text: Creating concise summaries of the content for quick insights.\n") - + # Use LLMs and cognee to create knowledge graph await cognee.cognify() print("Cognify process complete.\n") - - query_text = 'Tell me about NLP' + query_text = "Tell me about NLP" print(f"Searching cognee for insights with query: '{query_text}'") # Query cognee for insights on the added text - search_results = await cognee.search( - SearchType.INSIGHTS, query_text=query_text - ) - + search_results = await cognee.search(SearchType.INSIGHTS, query_text=query_text) + print("Search results:") # Display results for result_text in search_results: print(result_text) # Example output: - # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'natural language processing', 'description': 'An interdisciplinary subfield of computer science and information retrieval.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'computer science', 'description': 'The study of computation and information processing.'}) - # (...) - # It represents nodes and relationships in the knowledge graph: - # - The first element is the source node (e.g., 'natural language processing'). - # - The second element is the relationship between nodes (e.g., 'is_a_subfield_of'). - # - The third element is the target node (e.g., 'computer science'). + # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'natural language processing', 'description': 'An interdisciplinary subfield of computer science and information retrieval.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'computer science', 'description': 'The study of computation and information processing.'}) + # (...) + # It represents nodes and relationships in the knowledge graph: + # - The first element is the source node (e.g., 'natural language processing'). + # - The second element is the relationship between nodes (e.g., 'is_a_subfield_of'). + # - The third element is the target node (e.g., 'computer science'). -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.run(main()) diff --git a/notebooks/cognee_code_graph_demo.ipynb b/notebooks/cognee_code_graph_demo.ipynb index 8c47dbf68..d5bde67ef 100644 --- a/notebooks/cognee_code_graph_demo.ipynb +++ b/notebooks/cognee_code_graph_demo.ipynb @@ -7,8 +7,9 @@ "outputs": [], "source": [ "import os\n", - "os.environ['GRAPHISTRY_USERNAME'] = input(\"Please enter your graphistry username\")\n", - "os.environ['GRAPHISTRY_PASSWORD'] = input(\"Please enter your graphistry password\")" + "\n", + "os.environ[\"GRAPHISTRY_USERNAME\"] = input(\"Please enter your graphistry username\")\n", + "os.environ[\"GRAPHISTRY_PASSWORD\"] = input(\"Please enter your graphistry password\")" ] }, { @@ -23,13 +24,17 @@ "from cognee.infrastructure.databases.relational import create_db_and_tables\n", "\n", "notebook_path = os.path.abspath(\"\")\n", - "data_directory_path = str(pathlib.Path(os.path.join(notebook_path, \".data_storage/code_graph\")).resolve())\n", + "data_directory_path = str(\n", + " pathlib.Path(os.path.join(notebook_path, \".data_storage/code_graph\")).resolve()\n", + ")\n", "cognee.config.data_root_directory(data_directory_path)\n", - "cognee_directory_path = str(pathlib.Path(os.path.join(notebook_path, \".cognee_system/code_graph\")).resolve())\n", + "cognee_directory_path = str(\n", + " pathlib.Path(os.path.join(notebook_path, \".cognee_system/code_graph\")).resolve()\n", + ")\n", "cognee.config.system_root_directory(cognee_directory_path)\n", "\n", "await cognee.prune.prune_data()\n", - "await cognee.prune.prune_system(metadata = True)\n", + "await cognee.prune.prune_system(metadata=True)\n", "\n", "await create_db_and_tables()" ] @@ -46,15 +51,15 @@ "import git\n", "\n", "notebook_path = path.abspath(\"\")\n", - "repo_clone_location = path.join(notebook_path, \"data/graphrag\")\n", + "repo_clone_location = path.join(notebook_path, \".data/graphrag\")\n", "\n", "LocalStorage.remove_all(repo_clone_location)\n", "\n", "git.Repo.clone_from(\n", " \"git@github.com:microsoft/graphrag.git\",\n", " Path(repo_clone_location),\n", - " branch = \"main\",\n", - " single_branch = True,\n", + " branch=\"main\",\n", + " single_branch=True,\n", ")" ] }, @@ -64,16 +69,20 @@ "metadata": {}, "outputs": [], "source": [ - "from cognee.tasks.repo_processor import enrich_dependency_graph, expand_dependency_graph, get_repo_file_dependencies\n", + "from cognee.tasks.repo_processor import (\n", + " enrich_dependency_graph,\n", + " expand_dependency_graph,\n", + " get_repo_file_dependencies,\n", + ")\n", "from cognee.tasks.storage import add_data_points\n", "from cognee.modules.pipelines.tasks.Task import Task\n", "\n", "tasks = [\n", " Task(get_repo_file_dependencies),\n", - " Task(add_data_points, task_config = { \"batch_size\": 50 }),\n", - " Task(enrich_dependency_graph, task_config = { \"batch_size\": 50 }),\n", - " Task(expand_dependency_graph, task_config = { \"batch_size\": 50 }),\n", - " Task(add_data_points, task_config = { \"batch_size\": 50 }),\n", + " Task(add_data_points, task_config={\"batch_size\": 50}),\n", + " Task(enrich_dependency_graph, task_config={\"batch_size\": 50}),\n", + " Task(expand_dependency_graph, task_config={\"batch_size\": 50}),\n", + " Task(add_data_points, task_config={\"batch_size\": 50}),\n", "]" ] }, @@ -86,7 +95,7 @@ "from cognee.modules.pipelines import run_tasks\n", "\n", "notebook_path = os.path.abspath(\"\")\n", - "repo_clone_location = os.path.join(notebook_path, \"data/graphrag\")\n", + "repo_clone_location = os.path.join(notebook_path, \".data/graphrag\")\n", "\n", "pipeline = run_tasks(tasks, repo_clone_location, \"code_graph_pipeline\")\n", "\n", @@ -101,19 +110,20 @@ "outputs": [], "source": [ "from cognee.shared.utils import render_graph\n", - "await render_graph(None, include_nodes = True, include_labels = True)" + "\n", + "await render_graph(None, include_nodes=True, include_labels=True)" ] }, { - "metadata": {}, "cell_type": "markdown", + "metadata": {}, "source": "# Let's check the evaluations" }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from evals.eval_on_hotpot import eval_on_hotpotQA\n", "from evals.eval_on_hotpot import answer_with_cognee\n", @@ -133,8 +143,8 @@ "metadata": {}, "outputs": [], "source": [ - "answer_provider = answer_with_cognee # For native LLM answers use answer_without_cognee\n", - "num_samples = 10 # With cognee, it takes ~1m10s per sample\n", + "answer_provider = answer_with_cognee # For native LLM answers use answer_without_cognee\n", + "num_samples = 10 # With cognee, it takes ~1m10s per sample\n", "\n", "base_config = get_base_config()\n", "data_root_dir = base_config.data_root_directory\n", @@ -144,7 +154,7 @@ "\n", "filepath = data_root_dir / Path(\"hotpot_dev_fullwiki_v1.json\")\n", "if not filepath.exists():\n", - " url = 'http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json'\n", + " url = \"http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json\"\n", " wget.download(url, out=data_root_dir)\n", "\n", "with open(filepath, \"r\") as file:\n", diff --git a/notebooks/cognee_demo.ipynb b/notebooks/cognee_demo.ipynb index de8c07cfb..f59f6338c 100644 --- a/notebooks/cognee_demo.ipynb +++ b/notebooks/cognee_demo.ipynb @@ -76,7 +76,7 @@ }, { "cell_type": "markdown", - "id": "b6a98710-a14b-4a14-bb56-d3ae055e94d9", + "id": "1bf1fa3631dc03ed", "metadata": {}, "source": [ "#### The problem lies in the nature of the search. If you just find some keywords, and return one or many documents from vectorstore this way, you will have an issue with the the way you would use to organise and prioritise documents. \n" @@ -92,7 +92,7 @@ }, { "cell_type": "markdown", - "id": "b6a98710-a14b-4a14-bb56-d3ae055e94d9", + "id": "390e0d0805096f80", "metadata": {}, "source": [ "## Semantic similarity search is not magic\n", @@ -265,15 +265,13 @@ }, { "cell_type": "code", - "execution_count": null, "id": "df16431d0f48b006", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:48.519686Z", - "start_time": "2024-09-20T14:02:48.515589Z" + "end_time": "2024-12-24T11:53:59.351640Z", + "start_time": "2024-12-24T11:53:59.347420Z" } }, - "outputs": [], "source": [ "job_position = \"\"\"Senior Data Scientist (Machine Learning)\n", "\n", @@ -300,19 +298,19 @@ "Strong problem-solving skills and attention to detail.\n", "Candidate CVs\n", "\"\"\"\n" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "code", - "execution_count": null, "id": "9086abf3af077ab4", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:49.120838Z", - "start_time": "2024-09-20T14:02:49.118294Z" + "end_time": "2024-12-24T11:53:59.365410Z", + "start_time": "2024-12-24T11:53:59.363662Z" } }, - "outputs": [], "source": [ "job_1 = \"\"\"\n", "CV 1: Relevant\n", @@ -345,19 +343,19 @@ "Big Data Technologies: Hadoop, Spark\n", "Data Visualization: Tableau, Matplotlib\n", "\"\"\"" - ] + ], + "outputs": [], + "execution_count": 2 }, { "cell_type": "code", - "execution_count": null, "id": "a9de0cc07f798b7f", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:49.675003Z", - "start_time": "2024-09-20T14:02:49.671615Z" + "end_time": "2024-12-24T11:53:59.372957Z", + "start_time": "2024-12-24T11:53:59.371152Z" } }, - "outputs": [], "source": [ "job_2 = \"\"\"\n", "CV 2: Relevant\n", @@ -389,19 +387,19 @@ "Data Visualization: Seaborn, Plotly\n", "Databases: MySQL, MongoDB\n", "\"\"\"" - ] + ], + "outputs": [], + "execution_count": 3 }, { "cell_type": "code", - "execution_count": null, "id": "185ff1c102d06111", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:50.286828Z", - "start_time": "2024-09-20T14:02:50.284369Z" + "end_time": "2024-12-24T11:53:59.961140Z", + "start_time": "2024-12-24T11:53:59.959103Z" } }, - "outputs": [], "source": [ "job_3 = \"\"\"\n", "CV 3: Relevant\n", @@ -433,19 +431,19 @@ "Statistical Analysis: SAS, SPSS\n", "Cloud Platforms: AWS, Azure\n", "\"\"\"" - ] + ], + "outputs": [], + "execution_count": 4 }, { "cell_type": "code", - "execution_count": null, "id": "d55ce4c58f8efb67", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:50.950343Z", - "start_time": "2024-09-20T14:02:50.946378Z" + "end_time": "2024-12-24T11:54:00.656495Z", + "start_time": "2024-12-24T11:54:00.654716Z" } }, - "outputs": [], "source": [ "job_4 = \"\"\"\n", "CV 4: Not Relevant\n", @@ -475,19 +473,19 @@ "Web Design: HTML, CSS\n", "Specialties: Branding and Identity, Typography\n", "\"\"\"" - ] + ], + "outputs": [], + "execution_count": 5 }, { "cell_type": "code", - "execution_count": null, "id": "ca4ecc32721ad332", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:51.548191Z", - "start_time": "2024-09-20T14:02:51.545520Z" + "end_time": "2024-12-24T11:54:01.184899Z", + "start_time": "2024-12-24T11:54:01.183028Z" } }, - "outputs": [], "source": [ "job_5 = \"\"\"\n", "CV 5: Not Relevant\n", @@ -517,7 +515,9 @@ "CRM Software: Salesforce, Zoho\n", "Negotiation and Relationship Building\n", "\"\"\"" - ] + ], + "outputs": [], + "execution_count": 6 }, { "cell_type": "markdown", @@ -529,10 +529,13 @@ }, { "cell_type": "code", - "execution_count": null, "id": "bce39dc6", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T11:54:04.417315Z", + "start_time": "2024-12-24T11:54:04.414132Z" + } + }, "source": [ "import os\n", "\n", @@ -570,14 +573,19 @@ "# os.environ[\"DB_PORT\"]=\"5432\"\n", "# os.environ[\"DB_USERNAME\"]=\"cognee\"\n", "# os.environ[\"DB_PASSWORD\"]=\"cognee\"" - ] + ], + "outputs": [], + "execution_count": 7 }, { "cell_type": "code", - "execution_count": null, "id": "9f1a1dbd", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T11:54:16.672999Z", + "start_time": "2024-12-24T11:54:07.425202Z" + } + }, "source": [ "# Reset the cognee system with the following command:\n", "\n", @@ -585,7 +593,32 @@ "\n", "await cognee.prune.prune_data()\n", "await cognee.prune.prune_system(metadata=True)" - ] + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "File /Users/vasilije/cognee/cognee/.cognee_system/databases/cognee_graph.pkl not found. Initializing an empty graph." + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Database deleted successfully.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/vasilije/cognee/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "execution_count": 8 }, { "cell_type": "markdown", @@ -597,20 +630,48 @@ }, { "cell_type": "code", - "execution_count": null, "id": "904df61ba484a8e5", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:54.243987Z", - "start_time": "2024-09-20T14:02:52.498195Z" + "end_time": "2024-12-24T11:54:28.313862Z", + "start_time": "2024-12-24T11:54:23.756587Z" } }, - "outputs": [], "source": [ "import cognee\n", "\n", "await cognee.add([job_1, job_2, job_3, job_4, job_5, job_position], \"example\")" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "User df77f15b-a077-4c86-a3e4-c059bf4cacb9 has registered.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/vasilije/cognee/.venv/lib/python3.11/site-packages/dlt/destinations/impl/sqlalchemy/merge_job.py:194: SAWarning: Table 'file_metadata' already exists within the given MetaData - not copying.\n", + " staging_table_obj = table_obj.to_metadata(\n", + "/Users/vasilije/cognee/.venv/lib/python3.11/site-packages/dlt/destinations/impl/sqlalchemy/merge_job.py:229: SAWarning: implicitly coercing SELECT object to scalar subquery; please use the .scalar_subquery() method to produce a scalar subquery.\n", + " order_by=order_dir_func(order_by_col),\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pipeline file_load_from_filesystem load step completed in 0.03 seconds\n", + "1 load package(s) were loaded to destination sqlalchemy and into dataset main\n", + "The sqlalchemy destination used sqlite:////Users/vasilije/cognee/cognee/.cognee_system/databases/cognee_db location to store data\n", + "Load package 1735041267.4777632 is LOADED and contains no failed jobs\n" + ] + } + ], + "execution_count": 9 }, { "cell_type": "markdown", @@ -622,15 +683,13 @@ }, { "cell_type": "code", - "execution_count": null, "id": "7c431fdef4921ae0", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:57.925667Z", - "start_time": "2024-09-20T14:02:57.922353Z" + "end_time": "2024-12-24T11:54:44.728010Z", + "start_time": "2024-12-24T11:54:44.723877Z" } }, - "outputs": [], "source": [ "from cognee.shared.data_models import KnowledgeGraph\n", "from cognee.modules.data.models import Dataset, Data\n", @@ -669,19 +728,19 @@ " print(result)\n", " except Exception as error:\n", " raise error\n" - ] + ], + "outputs": [], + "execution_count": 10 }, { "cell_type": "code", - "execution_count": null, "id": "f0a91b99c6215e09", "metadata": { "ExecuteTime": { - "end_time": "2024-09-20T14:02:58.905774Z", - "start_time": "2024-09-20T14:02:58.625915Z" + "end_time": "2024-12-24T11:55:26.027386Z", + "start_time": "2024-12-24T11:54:47.384342Z" } }, - "outputs": [], "source": [ "from cognee.modules.users.methods import get_default_user\n", "from cognee.modules.data.methods import get_datasets_by_name\n", @@ -691,7 +750,27 @@ "datasets = await get_datasets_by_name([\"example\"], user.id)\n", "\n", "await run_cognify_pipeline(datasets[0], user)" - ] + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "File /Users/vasilije/cognee/cognee/.cognee_system/databases/cognee_graph.pkl not found. Initializing an empty graph./Users/vasilije/cognee/.venv/lib/python3.11/site-packages/pydantic/main.py:1522: RuntimeWarning: fields may not start with an underscore, ignoring \"_metadata\"\n", + " warnings.warn(f'fields may not start with an underscore, ignoring \"{f_name}\"', RuntimeWarning)\n", + "/Users/vasilije/cognee/.venv/lib/python3.11/site-packages/pydantic/main.py:1522: RuntimeWarning: fields may not start with an underscore, ignoring \"__tablename__\"\n", + " warnings.warn(f'fields may not start with an underscore, ignoring \"{f_name}\"', RuntimeWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[TextSummary(id=UUID('92b5d0a7-f980-529d-bb5b-48e72825a01a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Experienced Senior Data Scientist with expertise in machine learning and predictive modeling, demonstrating over 8 years in the field.', made_from=DocumentChunk(id=UUID('70b823e2-5b12-57b5-ad8d-798e1d721f8e'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='\\nCV 1: Relevant\\nName: Dr. Emily Carter\\nContact Information:\\n\\nEmail: emily.carter@example.com\\nPhone: (555) 123-4567\\nSummary:\\n\\nSenior Data Scientist with over 8 years of experience in machine learning and predictive analytics. Expertise in developing advanced algorithms and deploying scalable models in production environments.\\n\\nEducation:\\n\\nPh.D. in Computer Science, Stanford University (2014)\\nB.S. in Mathematics, University of California, Berkeley (2010)\\nExperience:\\n\\nSenior Data Scientist, InnovateAI Labs (2016 – Present)\\nLed a team in developing machine learning models for natural language processing applications.\\nImplemented deep learning algorithms that improved prediction accuracy by 25%.\\nCollaborated with cross-functional teams to integrate models into cloud-based platforms.\\nData Scientist, DataWave Analytics (2014 – 2016)\\nDeveloped predictive models for customer segmentation and churn analysis.\\nAnalyzed large datasets using Hadoop and Spark frameworks.\\nSkills:\\n\\nProgramming Languages: Python, R, SQL\\nMachin e Learning: TensorFlow, Keras, Scikit-Learn\\nBig Data Technologies: Hadoop, Spark\\nData Visualization: Tableau, Matplotlib\\n', word_count=133, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('11a2b08a-c160-5961-80b7-b3498eafa973'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_85410f4ad1197f5974aef9aed6f103c8', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_85410f4ad1197f5974aef9aed6f103c8.txt', metadata_id=UUID('11a2b08a-c160-5961-80b7-b3498eafa973'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('29e771c8-4c3f-52de-9511-6b705878e130'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='dr. emily carter', is_a=EntityType(id=UUID('d072ba0f-e1a9-58bf-9974-e1802adc8134'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='person', description='person'), description='Senior Data Scientist with over 8 years of experience in machine learning and predictive analytics.'), Entity(id=UUID('ce8b394a-b30e-52fc-b80a-6352edc60e5b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='stanford university', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='Prestigious university located in Stanford, California.'), Entity(id=UUID('2c02c93c-9cd1-56b8-9cc0-55ff0b290e57'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='university of california, berkeley', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='Public research university located in Berkeley, California.'), Entity(id=UUID('9780afb1-dccc-53eb-9a30-c0d4ce033711'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='innovateai labs', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='A lab focused on artificial intelligence projects.'), Entity(id=UUID('50d0a685-5300-544f-b081-edca4b625886'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='datawave analytics', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='Analytics firm specialized in data-driven insights.'), Entity(id=UUID('c95db510-e2ee-5a00-bded-20bbcb50c492'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='python', is_a=EntityType(id=UUID('80d409bb-e431-5939-a1ad-3acd96267128'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='programming language', description='programming language'), description='A high-level programming language used for general-purpose programming.'), Entity(id=UUID('39bd9707-8098-52ed-9cbf-bbdd26b963fb'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='r', is_a=EntityType(id=UUID('80d409bb-e431-5939-a1ad-3acd96267128'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='programming language', description='programming language'), description='A programming language and environment for statistical computing and graphics.'), Entity(id=UUID('1ff6821a-b207-5050-83e9-37ff67a27d03'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='sql', is_a=EntityType(id=UUID('80d409bb-e431-5939-a1ad-3acd96267128'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='programming language', description='programming language'), description='A domain-specific language used in programming and managing relational databases.'), Entity(id=UUID('6e72f6f5-0452-5d42-a4e8-4aba6a614cb1'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='tensorflow', is_a=EntityType(id=UUID('9ffe9ce7-8938-5a5c-8d03-5f1a4c5210a1'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='machine learning framework', description='machine learning framework'), description='An open-source software library for dataflow and differentiable programming across a range of tasks.'), Entity(id=UUID('ab85cdff-2a98-5c6d-99a3-df1f40f4ec16'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='keras', is_a=EntityType(id=UUID('9ffe9ce7-8938-5a5c-8d03-5f1a4c5210a1'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='machine learning framework', description='machine learning framework'), description='An open-source neural network library written in Python that runs on top of TensorFlow.'), Entity(id=UUID('37eecdcc-fb56-519c-bc18-d0d3afea0c0d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='scikit-learn', is_a=EntityType(id=UUID('9ffe9ce7-8938-5a5c-8d03-5f1a4c5210a1'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='machine learning framework', description='machine learning framework'), description='A free software machine learning library for the Python programming language.'), Entity(id=UUID('f9a0eeca-c9ff-53b3-90eb-347254d7d7eb'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='hadoop', is_a=EntityType(id=UUID('7c2287d0-16fc-53dc-86ce-8d8e61c8642c'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='big data technology', description='big data technology'), description='An open-source framework for storing and processing large datasets in a distributed computing environment.'), Entity(id=UUID('46a235af-5ed5-5023-a4ec-c253e3f93031'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='spark', is_a=EntityType(id=UUID('7c2287d0-16fc-53dc-86ce-8d8e61c8642c'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='big data technology', description='big data technology'), description='An open-source unified analytics engine for large-scale data processing.'), Entity(id=UUID('c55004f3-8a6d-5130-b8bd-ed8278daa9a4'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='tableau', is_a=EntityType(id=UUID('674cc5fa-7849-575a-917f-90b7b77f52b3'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='data visualization software', description='data visualization software'), description='A visual analytics platform transforming the way we use data to solve problems.'), Entity(id=UUID('3c7adf8f-ef23-5330-a3fe-6a0b791cee2b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='matplotlib', is_a=EntityType(id=UUID('3f3619fc-ebd1-50ed-adde-cf94e8bb3c1b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='data visualization library', description='data visualization library'), description='A plotting library for the Python programming language and its numerical mathematics extension NumPy.')])), TextSummary(id=UUID('2f680bef-2edd-566e-b98c-78d549799e77'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Senior Data Scientist specializing in Machine Learning at TechNova Solutions', made_from=DocumentChunk(id=UUID('eb6617b8-c78c-519b-b765-1eefc2e3a0d7'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Senior Data Scientist (Machine Learning)\\n\\nCompany: TechNova Solutions\\nLocation: San Francisco, CA\\n\\nJob Description:\\n\\nTechNova Solutions is seeking a Senior Data Scientist specializing in Machine Learning to join our dynamic analytics team. The ideal candidate will have a strong background in developing and deploying machine learning models, working with large datasets, and translating complex data into actionable insights.\\n\\nResponsibilities:\\n\\nDevelop and implement advanced machine learning algorithms and models.\\nAnalyze large, complex datasets to extract meaningful patterns and insights.\\nCollaborate with cross-functional teams to integrate predictive models into products.\\nStay updated with the latest advancements in machine learning and data science.\\nMentor junior data scientists and provide technical guidance.\\nQualifications:\\n\\nMaster’s or Ph.D. in Data Science, Computer Science, Statistics, or a related field.\\n5+ years of experience in data science and machine learning.\\nProficient in Python, R, and SQL.\\nExpe rience with deep learning frameworks (e.g., TensorFlow, PyTorch).\\nStrong problem-solving skills and attention to detail.\\nCandidate CVs\\n', word_count=153, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('171f3035-4c37-5f7b-97c8-6b222404cc9a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_81a5a96a9a7325d40521ea453778ebe0', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_81a5a96a9a7325d40521ea453778ebe0.txt', metadata_id=UUID('171f3035-4c37-5f7b-97c8-6b222404cc9a'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('453a45c9-14e7-5b73-adb8-55991096fef0'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='technova solutions', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='A technology company specializing in data analytics and machine learning.'), Entity(id=UUID('435dbd37-ab20-503c-9e99-ab8b8a3484e5'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='senior data scientist', is_a=EntityType(id=UUID('524c6bbb-1534-5a51-8068-18dd4ae171eb'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='profession', description='profession'), description='A role focused on advanced data analysis and machine learning.'), Entity(id=UUID('198e2ab8-75e9-5931-97ab-da9a5a8e188c'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='san francisco, ca', is_a=EntityType(id=UUID('19dd7d4d-a966-5ed5-82a0-6ae377761a29'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='location', description='location'), description='A city in California, USA.'), Entity(id=UUID('5187986a-7305-5a63-b057-8f2c097419eb'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='machine learning', is_a=EntityType(id=UUID('0198571b-3e94-50ea-8b9f-19e3a31080c0'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='field', description='field'), description='A subset of artificial intelligence focused on the development of algorithms that enable computers to learn from data.'), Entity(id=UUID('d6545b21-153c-58ba-be47-46e5216521a3'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='data science', is_a=EntityType(id=UUID('0198571b-3e94-50ea-8b9f-19e3a31080c0'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='field', description='field'), description='A multidisciplinary field that uses scientific methods to extract knowledge and insights from data.'), Entity(id=UUID('c0d95499-de6b-5fcf-b0f5-9cbf427ad5c6'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='pytorch', is_a=EntityType(id=UUID('36a32bd3-8880-547a-949b-8447477d1ef5'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='framework', description='framework'), description='An open-source machine learning framework for deep learning.'), Entity(id=UUID('62b4dda1-de4a-5098-a56e-d3fe81f84dbc'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='masters or ph.d. in data science', is_a=EntityType(id=UUID('a49b283a-ce92-50e0-b7fa-ca7c628eb01a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='degree', description='degree'), description='Advanced academic degree in data science or related fields.')])), TextSummary(id=UUID('5c988618-db52-5979-9cf8-db80c0098285'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Data Scientist with expertise in machine learning and statistical analysis, adept at managing extensive datasets and converting data into practical business solutions.', made_from=DocumentChunk(id=UUID('a6e82ac7-e791-5d6b-b4a9-f5e41cbe95bf'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='\\nCV 2: Relevant\\nName: Michael Rodriguez\\nContact Information:\\n\\nEmail: michael.rodriguez@example.com\\nPhone: (555) 234-5678\\nSummary:\\n\\nData Scientist with a strong background in machine learning and statistical modeling. Skilled in handling large datasets and translating data into actionable business insights.\\n\\nEducation:\\n\\nM.S. in Data Science, Carnegie Mellon University (2013)\\nB.S. in Computer Science, University of Michigan (2011)\\nExperience:\\n\\nSenior Data Scientist, Alpha Analytics (2017 – Present)\\nDeveloped machine learning models to optimize marketing strategies.\\nReduced customer acquisition cost by 15% through predictive modeling.\\nData Scientist, TechInsights (2013 – 2017)\\nAnalyzed user behavior data to improve product features.\\nImplemented A/B testing frameworks to evaluate product changes.\\nSkills:\\n\\nProgramming Languages: Python, Java, SQL\\nMachine Learning: Scikit-Learn, XGBoost\\nData Visualization: Seaborn, Plotly\\nDatabases: MySQL, MongoDB\\n', word_count=108, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('1f078b0a-3cc1-57a9-9802-f78565d49f29'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_f0f63a5c88dbbeef1eca23d32848220c', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_f0f63a5c88dbbeef1eca23d32848220c.txt', metadata_id=UUID('1f078b0a-3cc1-57a9-9802-f78565d49f29'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('73ae630f-7b09-5dce-8c18-45d0a57b30f9'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='michael rodriguez', is_a=EntityType(id=UUID('d072ba0f-e1a9-58bf-9974-e1802adc8134'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='person', description='person'), description='Data Scientist with a strong background in machine learning and statistical modeling.'), Entity(id=UUID('5534e0b0-d0c4-5ab9-82e9-91bed36f70bd'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='carnegie mellon university', is_a=EntityType(id=UUID('912b273c-683d-53ea-8ffe-aadef0b84237'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='educational institution', description='educational institution'), description='University known for its data science program.'), Entity(id=UUID('0af613e0-c11b-550d-ada2-2c2aa6550884'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='university of michigan', is_a=EntityType(id=UUID('912b273c-683d-53ea-8ffe-aadef0b84237'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='educational institution', description='educational institution'), description='University known for its computer science program.'), Entity(id=UUID('04a91fef-8a07-5d50-8f1b-46f3afeec497'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='alpha analytics', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='Company where Michael Rodriguez works as a Senior Data Scientist.'), Entity(id=UUID('3f848ed6-902f-5a8e-9577-cb67f8c17acd'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='techinsights', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='Company where Michael Rodriguez worked as a Data Scientist.')])), TextSummary(id=UUID('ee6cb607-27eb-5b87-bf2a-305721534263'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Sales Manager with proven ability to enhance revenue and cultivate effective teams. Strong communicator and leader.', made_from=DocumentChunk(id=UUID('7e35407f-7c59-5429-8824-23f1d17118c0'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text=\"\\nCV 5: Not Relevant\\nName: Jessica Miller\\nContact Information:\\n\\nEmail: jessica.miller@example.com\\nPhone: (555) 567-8901\\nSummary:\\n\\nExperienced Sales Manager with a strong track record in driving sales growth and building high-performing teams. Excellent communication and leadership skills.\\n\\nEducation:\\n\\nB.A. in Business Administration, University of Southern California (2010)\\nExperience:\\n\\nSales Manager, Global Enterprises (2015 – Present)\\nManaged a sales team of 15 members, achieving a 20% increase in annual revenue.\\nDeveloped sales strategies that expanded customer base by 25%.\\nSales Representative, Market Leaders Inc. (2010 – 2015)\\nConsistently exceeded sales targets and received the 'Top Salesperson' award in 2013.\\nSkills:\\n\\nSales Strategy and Planning\\nTeam Leadership and Development\\nCRM Software: Salesforce, Zoho\\nNegotiation and Relationship Building\\n\", word_count=102, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('3c323fc9-9165-52da-a079-2627a9556b08'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_9b35c7df1f5d4dc84e78270c0bf9cac6', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_9b35c7df1f5d4dc84e78270c0bf9cac6.txt', metadata_id=UUID('3c323fc9-9165-52da-a079-2627a9556b08'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('36a5e3c8-c5f5-5ab5-8d59-ea69d8b36932'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='jessica miller', is_a=EntityType(id=UUID('d072ba0f-e1a9-58bf-9974-e1802adc8134'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='person', description='person'), description='An experienced sales manager with a strong track record in driving sales growth and building high-performing teams.'), Entity(id=UUID('5c32691d-c0e4-5378-9aab-dda8b0fa3931'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='global enterprises', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='A company where Jessica Miller worked as a Sales Manager.'), Entity(id=UUID('67544857-983a-5152-801d-4fc9d35d14e4'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='market leaders inc.', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='A company where Jessica Miller worked as a Sales Representative.'), Entity(id=UUID('f39d6c00-689b-5fd2-9021-893b28ac6ff2'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='university of southern california', is_a=EntityType(id=UUID('912b273c-683d-53ea-8ffe-aadef0b84237'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='educational institution', description='educational institution'), description='University where Jessica Miller obtained her degree in Business Administration.'), Entity(id=UUID('0abc801d-38ca-5003-b974-b60f1956c94a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='2010', is_a=EntityType(id=UUID('d61d99ac-b291-5666-9748-3e80e1c8b56a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='date', description='date'), description='Year Jessica Miller graduated from University of Southern California.'), Entity(id=UUID('7c8b43c1-e133-52e6-99aa-239534f1ed45'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='2015', is_a=EntityType(id=UUID('d61d99ac-b291-5666-9748-3e80e1c8b56a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='date', description='date'), description='Year Jessica Miller started working as Sales Manager at Global Enterprises.'), Entity(id=UUID('2f4749e9-e1e4-5af0-be80-2a10d07557ff'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='present', is_a=EntityType(id=UUID('d61d99ac-b291-5666-9748-3e80e1c8b56a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='date', description='date'), description=\"Current time indicative of Jessica Miller's ongoing role.\")])), TextSummary(id=UUID('d8a8668e-b122-5713-b289-932407bb294e'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Creative Graphic Designer with 8+ years of expertise in visual design and branding, skilled in Adobe Creative Suite, dedicated to crafting engaging visuals.', made_from=DocumentChunk(id=UUID('c401b5b1-21d8-5830-8c7b-48e7d94c5b95'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='\\nCV 4: Not Relevant\\nName: David Thompson\\nContact Information:\\n\\nEmail: david.thompson@example.com\\nPhone: (555) 456-7890\\nSummary:\\n\\nCreative Graphic Designer with over 8 years of experience in visual design and branding. Proficient in Adobe Creative Suite and passionate about creating compelling visuals.\\n\\nEducation:\\n\\nB.F.A. in Graphic Design, Rhode Island School of Design (2012)\\nExperience:\\n\\nSenior Graphic Designer, CreativeWorks Agency (2015 – Present)\\nLed design projects for clients in various industries.\\nCreated branding materials that increased client engagement by 30%.\\nGraphic Designer, Visual Innovations (2012 – 2015)\\nDesigned marketing collateral, including brochures, logos, and websites.\\nCollaborated with the marketing team to develop cohesive brand strategies.\\nSkills:\\n\\nDesign Software: Adobe Photoshop, Illustrator, InDesign\\nWeb Design: HTML, CSS\\nSpecialties: Branding and Identity, Typography\\n', word_count=108, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('e71daf63-15a0-50fe-a909-766bc8fd311b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_9abf20fa7defd7e49296c51b4e38edf2', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_9abf20fa7defd7e49296c51b4e38edf2.txt', metadata_id=UUID('e71daf63-15a0-50fe-a909-766bc8fd311b'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('a4777597-06c7-562c-bc44-56f74571a01a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='david thompson', is_a=EntityType(id=UUID('d072ba0f-e1a9-58bf-9974-e1802adc8134'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='person', description='person'), description='Creative Graphic Designer with over 8 years of experience in visual design and branding.'), Entity(id=UUID('ca20272a-3e88-552f-92fe-491e23f117f8'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='creativeworks agency', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='An agency where David Thompson is a Senior Graphic Designer.'), Entity(id=UUID('1e97bb97-4d29-5fb8-863a-15ab51f1dd46'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='visual innovations', is_a=EntityType(id=UUID('d3d7b6b4-9b0d-52e8-9e09-a9e9cf4b5a4d'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='organization', description='organization'), description='An organization where David Thompson worked as a Graphic Designer.'), Entity(id=UUID('60b027fe-7bb4-535d-8a47-19f1a491591b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='rhode island school of design', is_a=EntityType(id=UUID('b5866225-05ad-5cfc-908e-c22916c6a1c6'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='institution', description='institution'), description='Educational institution where David Thompson earned his B.F.A. in Graphic Design.'), Entity(id=UUID('7e3df89c-2691-580b-84dc-378cb1df3db6'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='adobe creative suite', is_a=EntityType(id=UUID('2d66edc2-1e14-55ab-8304-680b514a597a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='software', description='software'), description='A suite of graphic design, video editing, and web development applications.'), Entity(id=UUID('2a0f9b58-c695-5bad-baa2-fd2da02da013'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='html', is_a=EntityType(id=UUID('c90c7d6b-3532-5dcf-91e1-4a0e1f179794'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='language', description='language'), description='A markup language for creating web pages and applications.'), Entity(id=UUID('9b062f3c-fe02-5427-9b44-b287a1cac367'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='css', is_a=EntityType(id=UUID('c90c7d6b-3532-5dcf-91e1-4a0e1f179794'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='language', description='language'), description='A stylesheet language used for describing the presentation of a document written in HTML.')])), TextSummary(id=UUID('8aedca6b-fa78-5987-a79b-3b0bebff8eb1'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='Data Scientist with 6 years of expertise in machine learning, focused on utilizing data for business improvement and product enhancement.', made_from=DocumentChunk(id=UUID('00692e43-9f02-54d0-b695-44bf47342d36'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, text='\\nCV 3: Relevant\\nName: Sarah Nguyen\\nContact Information:\\n\\nEmail: sarah.nguyen@example.com\\nPhone: (555) 345-6789\\nSummary:\\n\\nData Scientist specializing in machine learning with 6 years of experience. Passionate about leveraging data to drive business solutions and improve product performance.\\n\\nEducation:\\n\\nM.S. in Statistics, University of Washington (2014)\\nB.S. in Applied Mathematics, University of Texas at Austin (2012)\\nExperience:\\n\\nData Scientist, QuantumTech (2016 – Present)\\nDesigned and implemented machine learning algorithms for financial forecasting.\\nImproved model efficiency by 20% through algorithm optimization.\\nJunior Data Scientist, DataCore Solutions (2014 – 2016)\\nAssisted in developing predictive models for supply chain optimization.\\nConducted data cleaning and preprocessing on large datasets.\\nSkills:\\n\\nProgramming Languages: Python, R\\nMachine Learning Frameworks: PyTorch, Scikit-Learn\\nStatistical Analysis: SAS, SPSS\\nCloud Platforms: AWS, Azure\\n', word_count=110, chunk_index=0, cut_type='sentence_cut', is_part_of=TextDocument(id=UUID('e7d6246b-e414-5b9d-8daa-6d4434b7fa47'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='text_f8c7482e727f228001b0046ed68d656f', raw_data_location='/Users/vasilije/cognee/cognee/.data_storage/data/text_f8c7482e727f228001b0046ed68d656f.txt', metadata_id=UUID('e7d6246b-e414-5b9d-8daa-6d4434b7fa47'), mime_type='text/plain', type='text'), contains=[Entity(id=UUID('4d8dda57-2681-5264-a2bd-e2ddfe66a785'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='sarah nguyen', is_a=EntityType(id=UUID('d072ba0f-e1a9-58bf-9974-e1802adc8134'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='person', description='person'), description='Data Scientist specializing in machine learning with 6 years of experience.'), Entity(id=UUID('ae74a35b-d5f1-5622-ade1-6703d5e069fb'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='university of washington', is_a=EntityType(id=UUID('912b273c-683d-53ea-8ffe-aadef0b84237'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='educational institution', description='educational institution'), description='University located in Seattle, Washington.'), Entity(id=UUID('301b3cf8-5a5c-585e-80bd-f79901e4368c'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='university of texas at austin', is_a=EntityType(id=UUID('912b273c-683d-53ea-8ffe-aadef0b84237'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='educational institution', description='educational institution'), description='Public research university located in Austin, Texas.'), Entity(id=UUID('0d980f2a-09dd-581e-acc3-cc2d87c1bab4'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='quantumtech', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='Company where Sarah Nguyen works as a Data Scientist from 2016 to present.'), Entity(id=UUID('95ac0551-38fc-5187-a422-533aeb7e8db0'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='datacore solutions', is_a=EntityType(id=UUID('a6ed6bf1-fe31-5dfe-8ab4-484691fdf219'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='company', description='company'), description='Company where Sarah Nguyen worked as a Junior Data Scientist from 2014 to 2016.'), Entity(id=UUID('3edcdf3f-25af-57a3-8878-8008bd7ea05a'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='aws', is_a=EntityType(id=UUID('d84d991a-dab3-5c36-8806-df076ccb731b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='cloud platform', description='cloud platform'), description='Amazon Web Services, a cloud computing platform.'), Entity(id=UUID('8b431923-4aa2-5886-a661-b8de0f888a9b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='azure', is_a=EntityType(id=UUID('d84d991a-dab3-5c36-8806-df076ccb731b'), updated_at=datetime.datetime(2024, 12, 24, 11, 54, 13, 481297, tzinfo=datetime.timezone.utc), topological_rank=0, name='cloud platform', description='cloud platform'), description='Microsoft Azure, a cloud computing service created by Microsoft.')]))]\n" + ] + } + ], + "execution_count": 11 }, { "cell_type": "markdown", @@ -703,23 +782,61 @@ }, { "cell_type": "code", - "execution_count": null, "id": "080389e5", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-29T16:55:51.378129Z", + "start_time": "2024-12-29T16:55:46.922951Z" + } + }, "source": [ "import os\n", "from cognee.shared.utils import render_graph\n", "from cognee.infrastructure.databases.graph import get_graph_engine\n", "import graphistry\n", - "\n", + "# from dotenv import load_dotenv \n", "graphistry.login(username=os.getenv(\"GRAPHISTRY_USERNAME\"), password=os.getenv(\"GRAPHISTRY_PASSWORD\"))\n", "\n", "graph_engine = await get_graph_engine()\n", "\n", "graph_url = await render_graph(graph_engine.graph)\n", "print(graph_url)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph is visualized at: https://hub.graphistry.com/graph/graph.html?dataset=cc21b1d2d6074323aa37af53e693b1a4&type=arrow&viztoken=db05565e-79e9-4fe3-99b2-b7a2e6d48eff&usertag=5f822e63-pygraphistry-0.33.9&splashAfter=1735491366&info=true\n", + "https://hub.graphistry.com/graph/graph.html?dataset=cc21b1d2d6074323aa37af53e693b1a4&type=arrow&viztoken=db05565e-79e9-4fe3-99b2-b7a2e6d48eff&usertag=5f822e63-pygraphistry-0.33.9&splashAfter=1735491366&info=true\n" + ] + } + ], + "execution_count": 12 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-29T16:56:06.571404Z", + "start_time": "2024-12-29T16:56:06.569280Z" + } + }, + "cell_type": "code", + "source": [ + "graph_engine = await get_graph_engine()\n", + "print(graph_url)" + ], + "id": "8f69caa0e353a889", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://hub.graphistry.com/graph/graph.html?dataset=cc21b1d2d6074323aa37af53e693b1a4&type=arrow&viztoken=db05565e-79e9-4fe3-99b2-b7a2e6d48eff&usertag=5f822e63-pygraphistry-0.33.9&splashAfter=1735491366&info=true\n" + ] + } + ], + "execution_count": 13 }, { "cell_type": "markdown", @@ -731,10 +848,13 @@ }, { "cell_type": "code", - "execution_count": null, "id": "e5e7dfc8", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T13:44:16.575843Z", + "start_time": "2024-12-24T13:44:16.047897Z" + } + }, "source": [ "async def search(\n", " vector_engine,\n", @@ -763,7 +883,26 @@ "results = await search(vector_engine, \"entity_name\", \"sarah.nguyen@example.com\")\n", "for result in results:\n", " print(result)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'id': '4d8dda57-2681-5264-a2bd-e2ddfe66a785', 'payload': {'id': '4d8dda57-2681-5264-a2bd-e2ddfe66a785', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'sarah nguyen'}, 'score': 0.5708460211753845}\n", + "{'id': '198e2ab8-75e9-5931-97ab-da9a5a8e188c', 'payload': {'id': '198e2ab8-75e9-5931-97ab-da9a5a8e188c', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'san francisco, ca'}, 'score': 1.349550724029541}\n", + "{'id': '435dbd37-ab20-503c-9e99-ab8b8a3484e5', 'payload': {'id': '435dbd37-ab20-503c-9e99-ab8b8a3484e5', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'senior data scientist'}, 'score': 1.3934645652770996}\n", + "{'id': '36a5e3c8-c5f5-5ab5-8d59-ea69d8b36932', 'payload': {'id': '36a5e3c8-c5f5-5ab5-8d59-ea69d8b36932', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'jessica miller'}, 'score': 1.4042469263076782}\n", + "{'id': '73ae630f-7b09-5dce-8c18-45d0a57b30f9', 'payload': {'id': '73ae630f-7b09-5dce-8c18-45d0a57b30f9', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'michael rodriguez'}, 'score': 1.4521806240081787}\n", + "{'id': '29e771c8-4c3f-52de-9511-6b705878e130', 'payload': {'id': '29e771c8-4c3f-52de-9511-6b705878e130', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'dr. emily carter'}, 'score': 1.471205472946167}\n", + "{'id': 'ce8b394a-b30e-52fc-b80a-6352edc60e5b', 'payload': {'id': 'ce8b394a-b30e-52fc-b80a-6352edc60e5b', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'stanford university'}, 'score': 1.4871069192886353}\n", + "{'id': '9780afb1-dccc-53eb-9a30-c0d4ce033711', 'payload': {'id': '9780afb1-dccc-53eb-9a30-c0d4ce033711', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'innovateai labs'}, 'score': 1.498255968093872}\n", + "{'id': '301b3cf8-5a5c-585e-80bd-f79901e4368c', 'payload': {'id': '301b3cf8-5a5c-585e-80bd-f79901e4368c', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'university of texas at austin'}, 'score': 1.5053001642227173}\n", + "{'id': '2c02c93c-9cd1-56b8-9cc0-55ff0b290e57', 'payload': {'id': '2c02c93c-9cd1-56b8-9cc0-55ff0b290e57', 'updated_at': datetime.datetime(2024, 12, 24, 11, 54, 13, 481297), 'topological_rank': 0, 'text': 'university of california, berkeley'}, 'score': 1.5213639736175537}\n" + ] + } + ], + "execution_count": 23 }, { "cell_type": "markdown", @@ -842,20 +981,455 @@ ] }, { - "cell_type": "markdown", - "id": "2ab3d84a", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T13:46:09.644509Z", + "start_time": "2024-12-24T13:46:04.538592Z" + } + }, + "cell_type": "code", "source": [ - "#### Bellow is a diagram of the cognee process for the data used in this example notebook" - ] + "!pip install wget\n", + "!pip install deepeval\n", + "!pip install ujson" + ], + "id": "afae18ac6a794925", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: wget in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (3.2)\r\n", + "\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m A new release of pip is available: \u001B[0m\u001B[31;49m23.2.1\u001B[0m\u001B[39;49m -> \u001B[0m\u001B[32;49m24.3.1\u001B[0m\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m To update, run: \u001B[0m\u001B[32;49mpip install --upgrade pip\u001B[0m\r\n", + "Requirement already satisfied: deepeval in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (2.0.9)\r\n", + "Requirement already satisfied: requests in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (2.32.3)\r\n", + "Requirement already satisfied: tqdm in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (4.67.1)\r\n", + "Requirement already satisfied: pytest in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (7.4.4)\r\n", + "Requirement already satisfied: tabulate in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.9.0)\r\n", + "Requirement already satisfied: typer in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.15.1)\r\n", + "Requirement already satisfied: rich in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (13.9.4)\r\n", + "Requirement already satisfied: protobuf in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (4.25.5)\r\n", + "Requirement already satisfied: pydantic in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (2.8.2)\r\n", + "Requirement already satisfied: sentry-sdk in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (2.19.2)\r\n", + "Requirement already satisfied: pytest-repeat in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.9.3)\r\n", + "Requirement already satisfied: pytest-xdist in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (3.6.1)\r\n", + "Requirement already satisfied: portalocker in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (3.0.0)\r\n", + "Requirement already satisfied: langchain in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.3.13)\r\n", + "Requirement already satisfied: langchain-core in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.3.28)\r\n", + "Requirement already satisfied: langchain_openai in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.2.14)\r\n", + "Requirement already satisfied: langchain-community in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.3.13)\r\n", + "Requirement already satisfied: docx2txt~=0.8 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (0.8)\r\n", + "Requirement already satisfied: importlib-metadata>=6.0.2 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (8.4.0)\r\n", + "Requirement already satisfied: tenacity<=9.0.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (8.5.0)\r\n", + "Requirement already satisfied: opentelemetry-api<2.0.0,>=1.24.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (1.27.0)\r\n", + "Requirement already satisfied: opentelemetry-sdk<2.0.0,>=1.24.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (1.27.0)\r\n", + "Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (1.27.0)\r\n", + "Requirement already satisfied: grpcio==1.60.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (1.60.1)\r\n", + "Requirement already satisfied: nest-asyncio in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deepeval) (1.6.0)\r\n", + "Requirement already satisfied: zipp>=0.5 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from importlib-metadata>=6.0.2->deepeval) (3.21.0)\r\n", + "Requirement already satisfied: deprecated>=1.2.6 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-api<2.0.0,>=1.24.0->deepeval) (1.2.15)\r\n", + "Requirement already satisfied: googleapis-common-protos~=1.52 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->deepeval) (1.66.0)\r\n", + "Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.27.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->deepeval) (1.27.0)\r\n", + "Requirement already satisfied: opentelemetry-proto==1.27.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->deepeval) (1.27.0)\r\n", + "Requirement already satisfied: opentelemetry-semantic-conventions==0.48b0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-sdk<2.0.0,>=1.24.0->deepeval) (0.48b0)\r\n", + "Requirement already satisfied: typing-extensions>=3.7.4 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from opentelemetry-sdk<2.0.0,>=1.24.0->deepeval) (4.12.2)\r\n", + "Requirement already satisfied: PyYAML>=5.3 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (6.0.2)\r\n", + "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (2.0.35)\r\n", + "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (3.10.10)\r\n", + "Requirement already satisfied: langchain-text-splitters<0.4.0,>=0.3.3 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (0.3.4)\r\n", + "Requirement already satisfied: langsmith<0.3,>=0.1.17 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (0.2.4)\r\n", + "Requirement already satisfied: numpy<2,>=1.22.4 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain->deepeval) (1.26.4)\r\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain-core->deepeval) (1.33)\r\n", + "Requirement already satisfied: packaging<25,>=23.2 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain-core->deepeval) (24.2)\r\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pydantic->deepeval) (0.7.0)\r\n", + "Requirement already satisfied: pydantic-core==2.20.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pydantic->deepeval) (2.20.1)\r\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from requests->deepeval) (3.4.0)\r\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from requests->deepeval) (3.10)\r\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from requests->deepeval) (2.2.3)\r\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from requests->deepeval) (2024.12.14)\r\n", + "Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain-community->deepeval) (0.6.7)\r\n", + "Requirement already satisfied: httpx-sse<0.5.0,>=0.4.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain-community->deepeval) (0.4.0)\r\n", + "Requirement already satisfied: pydantic-settings<3.0.0,>=2.4.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain-community->deepeval) (2.7.0)\r\n", + "Requirement already satisfied: openai<2.0.0,>=1.58.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain_openai->deepeval) (1.58.1)\r\n", + "Requirement already satisfied: tiktoken<1,>=0.7 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langchain_openai->deepeval) (0.7.0)\r\n", + "Requirement already satisfied: iniconfig in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pytest->deepeval) (2.0.0)\r\n", + "Requirement already satisfied: pluggy<2.0,>=0.12 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pytest->deepeval) (1.5.0)\r\n", + "Requirement already satisfied: execnet>=2.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pytest-xdist->deepeval) (2.1.1)\r\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from rich->deepeval) (3.0.0)\r\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from rich->deepeval) (2.18.0)\r\n", + "Requirement already satisfied: click>=8.0.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from typer->deepeval) (8.1.7)\r\n", + "Requirement already satisfied: shellingham>=1.3.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from typer->deepeval) (1.5.4)\r\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (2.4.4)\r\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (1.3.2)\r\n", + "Requirement already satisfied: attrs>=17.3.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (24.3.0)\r\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (1.5.0)\r\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (6.1.0)\r\n", + "Requirement already satisfied: yarl<2.0,>=1.12.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (1.18.3)\r\n", + "Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community->deepeval) (3.23.2)\r\n", + "Requirement already satisfied: typing-inspect<1,>=0.4.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community->deepeval) (0.9.0)\r\n", + "Requirement already satisfied: wrapt<2,>=1.10 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from deprecated>=1.2.6->opentelemetry-api<2.0.0,>=1.24.0->deepeval) (1.17.0)\r\n", + "Requirement already satisfied: jsonpointer>=1.9 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from jsonpatch<2.0,>=1.33->langchain-core->deepeval) (3.0.0)\r\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langsmith<0.3,>=0.1.17->langchain->deepeval) (0.27.0)\r\n", + "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langsmith<0.3,>=0.1.17->langchain->deepeval) (3.10.12)\r\n", + "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from langsmith<0.3,>=0.1.17->langchain->deepeval) (1.0.0)\r\n", + "Requirement already satisfied: mdurl~=0.1 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->deepeval) (0.1.2)\r\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.58.1->langchain_openai->deepeval) (4.7.0)\r\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.58.1->langchain_openai->deepeval) (1.9.0)\r\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.58.1->langchain_openai->deepeval) (0.5.0)\r\n", + "Requirement already satisfied: sniffio in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.58.1->langchain_openai->deepeval) (1.3.1)\r\n", + "Requirement already satisfied: python-dotenv>=0.21.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from pydantic-settings<3.0.0,>=2.4.0->langchain-community->deepeval) (1.0.1)\r\n", + "Requirement already satisfied: regex>=2022.1.18 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from tiktoken<1,>=0.7->langchain_openai->deepeval) (2024.11.6)\r\n", + "Requirement already satisfied: httpcore==1.* in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from httpx<1,>=0.23.0->langsmith<0.3,>=0.1.17->langchain->deepeval) (1.0.7)\r\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->langsmith<0.3,>=0.1.17->langchain->deepeval) (0.14.0)\r\n", + "Requirement already satisfied: mypy-extensions>=0.3.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community->deepeval) (1.0.0)\r\n", + "Requirement already satisfied: propcache>=0.2.0 in /Users/vasilije/cognee/.venv/lib/python3.11/site-packages (from yarl<2.0,>=1.12.0->aiohttp<4.0.0,>=3.8.3->langchain->deepeval) (0.2.1)\r\n", + "\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m A new release of pip is available: \u001B[0m\u001B[31;49m23.2.1\u001B[0m\u001B[39;49m -> \u001B[0m\u001B[32;49m24.3.1\u001B[0m\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m To update, run: \u001B[0m\u001B[32;49mpip install --upgrade pip\u001B[0m\r\n", + "Collecting ujson\r\n", + " Obtaining dependency information for ujson from https://files.pythonhosted.org/packages/8d/9f/4731ef0671a0653e9f5ba18db7c4596d8ecbf80c7922dd5fe4150f1aea76/ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl.metadata\r\n", + " Downloading ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl.metadata (9.3 kB)\r\n", + "Downloading ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl (51 kB)\r\n", + "\u001B[2K \u001B[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001B[0m \u001B[32m51.8/51.8 kB\u001B[0m \u001B[31m1.7 MB/s\u001B[0m eta \u001B[36m0:00:00\u001B[0m\r\n", + "\u001B[?25hInstalling collected packages: ujson\r\n", + "Successfully installed ujson-5.10.0\r\n", + "\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m A new release of pip is available: \u001B[0m\u001B[31;49m23.2.1\u001B[0m\u001B[39;49m -> \u001B[0m\u001B[32;49m24.3.1\u001B[0m\r\n", + "\u001B[1m[\u001B[0m\u001B[34;49mnotice\u001B[0m\u001B[1;39;49m]\u001B[0m\u001B[39;49m To update, run: \u001B[0m\u001B[32;49mpip install --upgrade pip\u001B[0m\r\n" + ] + } + ], + "execution_count": 29 }, { - "cell_type": "markdown", - "id": "31412c52", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T15:29:11.123483Z", + "start_time": "2024-12-24T15:29:11.120888Z" + } + }, + "cell_type": "code", "source": [ - "![cognee_final.drawio.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGkAAAIXCAYAAAAv7AMgAABOcnRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBhZ2VudCUzRCUyMk1vemlsbGElMkY1LjAlMjAoWDExJTNCJTIwVWJ1bnR1JTNCJTIwTGludXglMjB4ODZfNjQlM0IlMjBydiUzQTEzMS4wKSUyMEdlY2tvJTJGMjAxMDAxMDElMjBGaXJlZm94JTJGMTMxLjAlMjIlMjB2ZXJzaW9uJTNEJTIyMjQuNy4xNyUyMiUzRSUwQSUyMCUyMCUzQ2RpYWdyYW0lMjBuYW1lJTNEJTIyUGFnZS0xJTIyJTIwaWQlM0QlMjJLM1NsbDFHNEIwRE92RFM2MTJ3ZSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ214R3JhcGhNb2RlbCUyMGR4JTNEJTIyMzk0NiUyMiUyMGR5JTNEJTIyOTY3JTIyJTIwZ3JpZCUzRCUyMjAlMjIlMjBncmlkU2l6ZSUzRCUyMjEwJTIyJTIwZ3VpZGVzJTNEJTIyMSUyMiUyMHRvb2x0aXBzJTNEJTIyMSUyMiUyMGNvbm5lY3QlM0QlMjIxJTIyJTIwYXJyb3dzJTNEJTIyMSUyMiUyMGZvbGQlM0QlMjIxJTIyJTIwcGFnZSUzRCUyMjElMjIlMjBwYWdlU2NhbGUlM0QlMjIxJTIyJTIwcGFnZVdpZHRoJTNEJTIyODUwJTIyJTIwcGFnZUhlaWdodCUzRCUyMjExMDAlMjIlMjBiYWNrZ3JvdW5kJTNEJTIyJTIzZmZmZmZmJTIyJTIwbWF0aCUzRCUyMjAlMjIlMjBzaGFkb3clM0QlMjIwJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDcm9vdCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyMCUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMjAlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTIwdmFsdWUlM0QlMjIlMjIlMjBzdHlsZSUzRCUyMmdyb3VwJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMGNvbm5lY3RhYmxlJTNEJTIyMCUyMiUyMHBhcmVudCUzRCUyMjElMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjEzMCUyMiUyMHklM0QlMjI2MCUyMiUyMHdpZHRoJTNEJTIyMTEyOCUyMiUyMGhlaWdodCUzRCUyMjUzMy44MyUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTI2JTIyJTIwc3R5bGUlM0QlMjJyb3VuZGVkJTNEMCUzQm9ydGhvZ29uYWxMb29wJTNEMSUzQmpldHR5U2l6ZSUzRGF1dG8lM0JodG1sJTNEMSUzQmVudHJ5WCUzRDAlM0JlbnRyeVklM0QwLjA5NyUzQmVudHJ5RHglM0QwJTNCZW50cnlEeSUzRDAlM0JlbnRyeVBlcmltZXRlciUzRDAlM0IlMjIlMjBlZGdlJTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTIwc291cmNlJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMSUyMiUyMHRhcmdldCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTE1JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHJlbGF0aXZlJTNEJTIyMSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteFBvaW50JTIweCUzRCUyMjMxMC44Nzg5MDc2NTM2MTEyNCUyMiUyMHklM0QlMjIzMDguNTQwNDg4MzYwNjcwNSUyMiUyMGFzJTNEJTIydGFyZ2V0UG9pbnQlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteEdlb21ldHJ5JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0xJTIyJTIwdmFsdWUlM0QlMjJDViUyMDElMjIlMjBzdHlsZSUzRCUyMndoaXRlU3BhY2UlM0R3cmFwJTNCaHRtbCUzRDElM0JzaGFwZSUzRG14Z3JhcGguYmFzaWMuZG9jdW1lbnQlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxNSUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjc0LjgyMTcwMzE5Nzk4Nzc3JTIyJTIweSUzRCUyMjE0OC4wOTk0MzQ0MTMxMjE4MyUyMiUyMHdpZHRoJTNEJTIyOTAuNzkxMjMyNDgyOTMyMDklMjIlMjBoZWlnaHQlM0QlMjIxMjMuNDE2MTk1MzQ0MjY4MTklMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0yOSUyMiUyMHN0eWxlJTNEJTIycm91bmRlZCUzRDAlM0JvcnRob2dvbmFsTG9vcCUzRDElM0JqZXR0eVNpemUlM0RhdXRvJTNCaHRtbCUzRDElM0JlbnRyeVglM0QwJTNCZW50cnlZJTNEMSUzQmVudHJ5RHglM0QwJTNCZW50cnlEeSUzRDAlM0IlMjIlMjBlZGdlJTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTIwc291cmNlJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMyUyMiUyMHRhcmdldCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTE1JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHJlbGF0aXZlJTNEJTIyMSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTMlMjIlMjB2YWx1ZSUzRCUyMkNWJTIwMyUyMiUyMHN0eWxlJTNEJTIyd2hpdGVTcGFjZSUzRHdyYXAlM0JodG1sJTNEMSUzQnNoYXBlJTNEbXhncmFwaC5iYXNpYy5kb2N1bWVudCUzQmZvbnRGYW1pbHklM0R2aXJnaWwlM0Jmb250U291cmNlJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZleGNhbGlkcmF3Lm55YzMuY2RuLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20lMjUyRmZvbnRzJTI1MkZWaXJnaWwud29mZjIlM0Jmb250U2l6ZSUzRDE1JTNCY29udGFpbmVyJTNEMCUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyMzguNTA1MjEwMjA0ODE0OTUlMjIlMjB5JTNEJTIyMzk0LjkzMTgyNTEwMTY1ODIlMjIlMjB3aWR0aCUzRCUyMjkwLjc5MTIzMjQ4MjkzMjA5JTIyJTIwaGVpZ2h0JTNEJTIyMTIzLjQxNjE5NTM0NDI2ODE5JTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMjclMjIlMjBzdHlsZSUzRCUyMnJvdW5kZWQlM0QwJTNCb3J0aG9nb25hbExvb3AlM0QxJTNCamV0dHlTaXplJTNEYXV0byUzQmh0bWwlM0QxJTNCZW50cnlYJTNELTAuMDE0JTNCZW50cnlZJTNEMC4zODklM0JlbnRyeUR4JTNEMCUzQmVudHJ5RHklM0QwJTNCZW50cnlQZXJpbWV0ZXIlM0QwJTNCJTIyJTIwZWRnZSUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUyMHNvdXJjZSUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTQlMjIlMjB0YXJnZXQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0xNSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjByZWxhdGl2ZSUzRCUyMjElMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC00JTIyJTIwdmFsdWUlM0QlMjJDViUyMDIlMjIlMjBzdHlsZSUzRCUyMndoaXRlU3BhY2UlM0R3cmFwJTNCaHRtbCUzRDElM0JzaGFwZSUzRG14Z3JhcGguYmFzaWMuZG9jdW1lbnQlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxNSUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjI5LjQyNjA4Njk1NjUyMTc0JTIyJTIweSUzRCUyMjIyMi4xNDkxNTE2MTk2ODI3MyUyMiUyMHdpZHRoJTNEJTIyOTAuNzkxMjMyNDgyOTMyMDklMjIlMjBoZWlnaHQlM0QlMjIxMjMuNDE2MTk1MzQ0MjY4MTklMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0xMCUyMiUyMHZhbHVlJTNEJTIyJTIyJTIwc3R5bGUlM0QlMjJza2V0Y2glM0QwJTNCcG9pbnRlckV2ZW50cyUzRDElM0JzaGFkb3clM0QwJTNCZGFzaGVkJTNEMCUzQmh0bWwlM0QxJTNCc3Ryb2tlQ29sb3IlM0Rub25lJTNCbGFiZWxQb3NpdGlvbiUzRGNlbnRlciUzQnZlcnRpY2FsTGFiZWxQb3NpdGlvbiUzRGJvdHRvbSUzQnZlcnRpY2FsQWxpZ24lM0R0b3AlM0JhbGlnbiUzRGNlbnRlciUzQmZpbGxDb2xvciUzRCUyMzUwNTA1MCUzQnNoYXBlJTNEbXhncmFwaC5tc2NhZS5vbXMubG9nX3NlYXJjaCUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjg5NC44MzkwMzU4NjA1ODIlMjIlMjB5JTNEJTIyNDAxLjEwMjYzNDg2ODg3MTYlMjIlMjB3aWR0aCUzRCUyMjkwLjc5MTIzMjQ4MjkzMjA5JTIyJTIwaGVpZ2h0JTNEJTIyMTExLjA3NDU3NTgwOTg0MTM4JTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTElMjIlMjB2YWx1ZSUzRCUyMlByb2Nlc3NlZCUyMGRhdGElMjIlMjBzdHlsZSUzRCUyMnNoYXBlJTNEZGF0YXN0b3JlJTNCd2hpdGVTcGFjZSUzRHdyYXAlM0JodG1sJTNEMSUzQmZvbnRGYW1pbHklM0R2aXJnaWwlM0Jmb250U291cmNlJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZleGNhbGlkcmF3Lm55YzMuY2RuLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20lMjUyRmZvbnRzJTI1MkZWaXJnaWwud29mZjIlM0Jmb250U2l6ZSUzRDE2JTNCY29udGFpbmVyJTNEMCUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyNzQ2LjY3NjgyMzU3MTY4NTMlMjIlMjB5JTNEJTIyMjc3LjY4NjQzOTUyNDYwMzQzJTIyJTIwd2lkdGglM0QlMjI5MC43OTEyMzI0ODI5MzIwOSUyMiUyMGhlaWdodCUzRCUyMjExMS4wNzQ1NzU4MDk4NDEzOCUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTI4JTIyJTIwc3R5bGUlM0QlMjJyb3VuZGVkJTNEMCUzQm9ydGhvZ29uYWxMb29wJTNEMSUzQmpldHR5U2l6ZSUzRGF1dG8lM0JodG1sJTNEMSUzQmVudHJ5WCUzRDAlM0JlbnRyeVklM0QwLjc1JTNCZW50cnlEeCUzRDAlM0JlbnRyeUR5JTNEMCUzQiUyMiUyMGVkZ2UlM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlMjBzb3VyY2UlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0yJTIyJTIwdGFyZ2V0JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTUlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIwcmVsYXRpdmUlM0QlMjIxJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMiUyMiUyMHZhbHVlJTNEJTIySm9iJTIwcG9zaXRpb24lMjIlMjBzdHlsZSUzRCUyMndoaXRlU3BhY2UlM0R3cmFwJTNCaHRtbCUzRDElM0JzaGFwZSUzRG14Z3JhcGguYmFzaWMuZG9jdW1lbnQlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxNSUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjgzLjkwMDgyNjQ0NjI4MDk5JTIyJTIweSUzRCUyMjI5Ni4xOTg4Njg4MjYyNDM2NSUyMiUyMHdpZHRoJTNEJTIyOTAuNzkxMjMyNDgyOTMyMDklMjIlMjBoZWlnaHQlM0QlMjIxMjMuNDE2MTk1MzQ0MjY4MTklMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0zMCUyMiUyMHN0eWxlJTNEJTIyZWRnZVN0eWxlJTNEb3J0aG9nb25hbEVkZ2VTdHlsZSUzQnJvdW5kZWQlM0QwJTNCb3J0aG9nb25hbExvb3AlM0QxJTNCamV0dHlTaXplJTNEYXV0byUzQmh0bWwlM0QxJTNCJTIyJTIwZWRnZSUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUyMHNvdXJjZSUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTE1JTIyJTIwdGFyZ2V0JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIwcmVsYXRpdmUlM0QlMjIxJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTUlMjIlMjB2YWx1ZSUzRCUyMkNvZ25lZSUyMEFkZCUyMiUyMHN0eWxlJTNEJTIycm91bmRlZCUzRDElM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQmh0bWwlM0QxJTNCZm9udEZhbWlseSUzRHZpcmdpbCUzQmZvbnRTb3VyY2UlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmV4Y2FsaWRyYXcubnljMy5jZG4uZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSUyNTJGZm9udHMlMjUyRlZpcmdpbC53b2ZmMiUzQmZvbnRTaXplJTNEMTYlM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjIzMDEuNzk5Nzg0NDA1MzE4JTIyJTIweSUzRCUyMjI5Ni4xOTg4Njg4MjYyNDM2NSUyMiUyMHdpZHRoJTNEJTIyMTA4Ljk0OTQ3ODk3OTUxODUlMjIlMjBoZWlnaHQlM0QlMjI3NC4wNDk3MTcyMDY1NjA5MSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTMxJTIyJTIwc3R5bGUlM0QlMjJlZGdlU3R5bGUlM0RvcnRob2dvbmFsRWRnZVN0eWxlJTNCcm91bmRlZCUzRDAlM0JvcnRob2dvbmFsTG9vcCUzRDElM0JqZXR0eVNpemUlM0RhdXRvJTNCaHRtbCUzRDElM0JlbnRyeVglM0QwJTNCZW50cnlZJTNEMC41JTNCZW50cnlEeCUzRDAlM0JlbnRyeUR5JTNEMCUzQiUyMiUyMGVkZ2UlM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlMjBzb3VyY2UlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0xNiUyMiUyMHRhcmdldCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTExJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHJlbGF0aXZlJTNEJTIyMSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTE2JTIyJTIwdmFsdWUlM0QlMjJDb2duaWZ5JTIwcGlwZWxpbmUlMjIlMjBzdHlsZSUzRCUyMnJvdW5kZWQlM0QxJTNCd2hpdGVTcGFjZSUzRHdyYXAlM0JodG1sJTNEMSUzQmZvbnRGYW1pbHklM0R2aXJnaWwlM0Jmb250U291cmNlJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZleGNhbGlkcmF3Lm55YzMuY2RuLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20lMjUyRmZvbnRzJTI1MkZWaXJnaWwud29mZjIlM0Jmb250U2l6ZSUzRDE2JTNCY29udGFpbmVyJTNEMCUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyNTE5LjY5ODc0MjM2NDM1NTElMjIlMjB5JTNEJTIyMjk2LjE5ODg2ODgyNjI0MzY1JTIyJTIwd2lkdGglM0QlMjIxMDguOTQ5NDc4OTc5NTE4NSUyMiUyMGhlaWdodCUzRCUyMjc0LjA0OTcxNzIwNjU2MDkxJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTglMjIlMjB2YWx1ZSUzRCUyMiUyMiUyMHN0eWxlJTNEJTIyaW1hZ2UlM0Jhc3BlY3QlM0RmaXhlZCUzQmh0bWwlM0QxJTNCcG9pbnRzJTNEJTVCJTVEJTNCYWxpZ24lM0RjZW50ZXIlM0Jmb250U2l6ZSUzRDEyJTNCaW1hZ2UlM0RpbWclMkZsaWIlMkZhenVyZTIlMkZnZW5lcmFsJTJGTWFuYWdlbWVudF9Hcm91cHMuc3ZnJTNCY29udGFpbmVyJTNEMCUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyOTIwLjA4ODA3NzYxNDA4NTclMjIlMjB5JTNEJTIyMTYwLjQ0MTA1Mzk0NzU0ODY1JTIyJTIwd2lkdGglM0QlMjI2NC4xMDEyNTQzNzc5MDMyMiUyMiUyMGhlaWdodCUzRCUyMjYyLjE1NjYzOTUxMzEzNTEzJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTIlMjIlMjB2YWx1ZSUzRCUyMiUyMiUyMHN0eWxlJTNEJTIyc2hhcGUlM0RteGdyYXBoLnNpZ25zLmhlYWx0aGNhcmUuZXllJTNCaHRtbCUzRDElM0Jwb2ludGVyRXZlbnRzJTNEMSUzQmZpbGxDb2xvciUzRCUyMzAwMDAwMCUzQnN0cm9rZUNvbG9yJTNEbm9uZSUzQnZlcnRpY2FsTGFiZWxQb3NpdGlvbiUzRGJvdHRvbSUzQnZlcnRpY2FsQWxpZ24lM0R0b3AlM0JhbGlnbiUzRGNlbnRlciUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjkzOC4yNDYzMjQxMTA2NzE5JTIyJTIweSUzRCUyMjExMS4wNzQ1NzU4MDk4NDEzNiUyMiUyMHdpZHRoJTNEJTIyODkuODgzMzIwMTU4MTAyNzglMjIlMjBoZWlnaHQlM0QlMjI2Ny44Nzg5MDc0MzkzNDc1JTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTklMjIlMjB2YWx1ZSUzRCUyMlF1ZXJ5JTIwJTIyJTIwc3R5bGUlM0QlMjJ0ZXh0JTNCaHRtbCUzRDElM0JhbGlnbiUzRGNlbnRlciUzQnZlcnRpY2FsQWxpZ24lM0RtaWRkbGUlM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQnJvdW5kZWQlM0QwJTNCZm9udEZhbWlseSUzRHZpcmdpbCUzQmZvbnRTb3VyY2UlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmV4Y2FsaWRyYXcubnljMy5jZG4uZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSUyNTJGZm9udHMlMjUyRlZpcmdpbC53b2ZmMiUzQmZvbnRTaXplJTNEMTYlM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjI5MzcuMzM4NDExNzg1ODQyNiUyMiUyMHklM0QlMjI0NzUuMTUyMzUyMDc1NDMyNSUyMiUyMHdpZHRoJTNEJTIyOTAuNzkxMjMyNDgyOTMyMDklMjIlMjBoZWlnaHQlM0QlMjIzNy4wMjQ4NTg2MDMyODA0NiUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTIwJTIyJTIwdmFsdWUlM0QlMjJBbmFseXplJTIwS25vd2xlZGdlJTIwZ3JhcGglMjIlMjBzdHlsZSUzRCUyMnRleHQlM0JodG1sJTNEMSUzQmFsaWduJTNEY2VudGVyJTNCdmVydGljYWxBbGlnbiUzRG1pZGRsZSUzQndoaXRlU3BhY2UlM0R3cmFwJTNCcm91bmRlZCUzRDAlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxNiUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjk5MS44MTMxNTEyNzU2MDIlMjIlMjB5JTNEJTIyMTcyLjc4MjY3MzQ4MTk3NTQ1JTIyJTIwd2lkdGglM0QlMjIxMzYuMTg2ODQ4NzI0Mzk4MTUlMjIlMjBoZWlnaHQlM0QlMjI5Mi41NjIxNDY1MDgyMDExNCUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTM0JTIyJTIwdmFsdWUlM0QlMjJHYXRoZXIlMjBkYXRhJTIyJTIwc3R5bGUlM0QlMjJ0ZXh0JTNCaHRtbCUzRDElM0JhbGlnbiUzRGNlbnRlciUzQnZlcnRpY2FsQWxpZ24lM0RtaWRkbGUlM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQnJvdW5kZWQlM0QwJTNCZm9udEZhbWlseSUzRHZpcmdpbCUzQmZvbnRTb3VyY2UlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmV4Y2FsaWRyYXcubnljMy5jZG4uZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSUyNTJGZm9udHMlMjUyRlZpcmdpbC53b2ZmMiUzQmZvbnRTaXplJTNEMTglM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjI2NS43NDI1Nzk5NDk2OTQ1OSUyMiUyMHklM0QlMjIzNy4wMjQ4NTg2MDMyODA0NjQlMjIlMjB3aWR0aCUzRCUyMjEwOC45NDk0Nzg5Nzk1MTg1JTIyJTIwaGVpZ2h0JTNEJTIyNzQuMDQ5NzE3MjA2NTYwOTElMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0zNSUyMiUyMHZhbHVlJTNEJTIyUnVuJTIwY29nbmlmeSUyMHBpcGVsaW5lJTIyJTIwc3R5bGUlM0QlMjJ0ZXh0JTNCaHRtbCUzRDElM0JhbGlnbiUzRGNlbnRlciUzQnZlcnRpY2FsQWxpZ24lM0RtaWRkbGUlM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQnJvdW5kZWQlM0QwJTNCZm9udEZhbWlseSUzRHZpcmdpbCUzQmZvbnRTb3VyY2UlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmV4Y2FsaWRyYXcubnljMy5jZG4uZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSUyNTJGZm9udHMlMjUyRlZpcmdpbC53b2ZmMiUzQmZvbnRTaXplJTNEMTglM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjI1MDcuMzklMjIlMjB5JTNEJTIyMjklMjIlMjB3aWR0aCUzRCUyMjExMy4yMiUyMiUyMGhlaWdodCUzRCUyMjg2LjM5JTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMzYlMjIlMjB2YWx1ZSUzRCUyMlVzZSUyMHRoZSUyMHByb2Nlc3NlZCUyMGRhdGElMjIlMjBzdHlsZSUzRCUyMnRleHQlM0JodG1sJTNEMSUzQmFsaWduJTNEY2VudGVyJTNCdmVydGljYWxBbGlnbiUzRG1pZGRsZSUzQndoaXRlU3BhY2UlM0R3cmFwJTNCcm91bmRlZCUzRDAlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxOCUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjcwNi4zMTAwMDAwMDAwMDAxJTIyJTIweSUzRCUyMjQ0LjQzJTIyJTIwd2lkdGglM0QlMjIxNzEuNTIlMjIlMjBoZWlnaHQlM0QlMjI3MC45NiUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTM4JTIyJTIwdmFsdWUlM0QlMjJBZGQlMjBkYXRhJTIwdG8lMjBjb2duZWUlMjIlMjBzdHlsZSUzRCUyMnRleHQlM0JodG1sJTNEMSUzQmFsaWduJTNEY2VudGVyJTNCdmVydGljYWxBbGlnbiUzRG1pZGRsZSUzQndoaXRlU3BhY2UlM0R3cmFwJTNCcm91bmRlZCUzRDAlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udFNpemUlM0QxOCUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjI5Mi43MjA2NjExNTcwMjQ4NCUyMiUyMHklM0QlMjI0MC4xMTAyNjM0ODY4ODcxNiUyMiUyMHdpZHRoJTNEJTIyMTE4LjAyODYwMjIyNzgxMTcyJTIyJTIwaGVpZ2h0JTNEJTIyNjcuODc4OTA3NDM5MzQ3NSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTM5JTIyJTIwdmFsdWUlM0QlMjJTdGVwJTIwMSUyMiUyMHN0eWxlJTNEJTIydGV4dCUzQmh0bWwlM0QxJTNCYWxpZ24lM0RjZW50ZXIlM0J2ZXJ0aWNhbEFsaWduJTNEbWlkZGxlJTNCd2hpdGVTcGFjZSUzRHdyYXAlM0Jyb3VuZGVkJTNEMCUzQmZvbnRGYW1pbHklM0R2aXJnaWwlM0Jmb250U291cmNlJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZleGNhbGlkcmF3Lm55YzMuY2RuLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20lMjUyRmZvbnRzJTI1MkZWaXJnaWwud29mZjIlM0Jmb250Q29sb3IlM0QlMjMxODg4N2MlM0Jmb250U3R5bGUlM0QxJTNCZm9udFNpemUlM0QxOCUzQmNvbnRhaW5lciUzRDAlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIweCUzRCUyMjcwLjI4MjE0MTU3Mzg0MTE3JTIyJTIwd2lkdGglM0QlMjI5OS44NzAzNTU3MzEyMjUzJTIyJTIwaGVpZ2h0JTNEJTIyNzQuMDQ5NzE3MjA2NTYwOTElMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC00MCUyMiUyMHZhbHVlJTNEJTIyU3RlcCUyMDIlMjIlMjBzdHlsZSUzRCUyMnRleHQlM0JodG1sJTNEMSUzQmFsaWduJTNEY2VudGVyJTNCdmVydGljYWxBbGlnbiUzRG1pZGRsZSUzQndoaXRlU3BhY2UlM0R3cmFwJTNCcm91bmRlZCUzRDAlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udENvbG9yJTNEJTIzMTg4ODdjJTNCZm9udFN0eWxlJTNEMSUzQmZvbnRTaXplJTNEMTglM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjIzMDEuNzk5Nzg0NDA1MzE4JTIyJTIwd2lkdGglM0QlMjI5OS44NzAzNTU3MzEyMjUzJTIyJTIwaGVpZ2h0JTNEJTIyNzQuMDQ5NzE3MjA2NTYwOTElMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC00MSUyMiUyMHZhbHVlJTNEJTIyU3RlcCUyMDMlMjIlMjBzdHlsZSUzRCUyMnRleHQlM0JodG1sJTNEMSUzQmFsaWduJTNEY2VudGVyJTNCdmVydGljYWxBbGlnbiUzRG1pZGRsZSUzQndoaXRlU3BhY2UlM0R3cmFwJTNCcm91bmRlZCUzRDAlM0Jmb250RmFtaWx5JTNEdmlyZ2lsJTNCZm9udFNvdXJjZSUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZXhjYWxpZHJhdy5ueWMzLmNkbi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tJTI1MkZmb250cyUyNTJGVmlyZ2lsLndvZmYyJTNCZm9udENvbG9yJTNEJTIzMTg4ODdjJTNCZm9udFN0eWxlJTNEMSUzQmZvbnRTaXplJTNEMTglM0Jjb250YWluZXIlM0QwJTNCJTIyJTIwdmVydGV4JTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTU2JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMHglM0QlMjI1MTQuMDY4NzQyMzY0MzU1MSUyMiUyMHdpZHRoJTNEJTIyOTkuODcwMzU1NzMxMjI1MyUyMiUyMGhlaWdodCUzRCUyMjc0LjA0OTcxNzIwNjU2MDkxJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNDIlMjIlMjB2YWx1ZSUzRCUyMlN0ZXAlMjA0JTIyJTIwc3R5bGUlM0QlMjJ0ZXh0JTNCaHRtbCUzRDElM0JhbGlnbiUzRGNlbnRlciUzQnZlcnRpY2FsQWxpZ24lM0RtaWRkbGUlM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQnJvdW5kZWQlM0QwJTNCZm9udEZhbWlseSUzRHZpcmdpbCUzQmZvbnRTb3VyY2UlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmV4Y2FsaWRyYXcubnljMy5jZG4uZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSUyNTJGZm9udHMlMjUyRlZpcmdpbC53b2ZmMiUzQmZvbnRDb2xvciUzRCUyMzE4ODg3YyUzQmZvbnRTdHlsZSUzRDElM0Jmb250U2l6ZSUzRDE4JTNCY29udGFpbmVyJTNEMCUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyNzQyLjEzNzI2MTk0NzUzODYlMjIlMjB3aWR0aCUzRCUyMjk5Ljg3MDM1NTczMTIyNTMlMjIlMjBoZWlnaHQlM0QlMjI3NC4wNDk3MTcyMDY1NjA5MSUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTQ3JTIyJTIwc3R5bGUlM0QlMjJyb3VuZGVkJTNEMCUzQm9ydGhvZ29uYWxMb29wJTNEMSUzQmpldHR5U2l6ZSUzRGF1dG8lM0JodG1sJTNEMSUzQmV4aXRYJTNELTAuMDE1JTNCZXhpdFklM0QwLjklM0JleGl0RHglM0QwJTNCZXhpdER5JTNEMCUzQmV4aXRQZXJpbWV0ZXIlM0QwJTNCJTIyJTIwZWRnZSUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUyMHNvdXJjZSUzRCUyMnd0d2FkVktleS1taTRvOWMwVmJoLTE4JTIyJTIwdGFyZ2V0JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtMTElMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteEdlb21ldHJ5JTIwcmVsYXRpdmUlM0QlMjIxJTIyJTIwYXMlM0QlMjJnZW9tZXRyeSUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm14Q2VsbCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNDglMjIlMjBzdHlsZSUzRCUyMnJvdW5kZWQlM0QwJTNCb3J0aG9nb25hbExvb3AlM0QxJTNCamV0dHlTaXplJTNEYXV0byUzQmh0bWwlM0QxJTNCZXhpdFglM0QwLjMxJTNCZXhpdFklM0QwLjMzJTNCZXhpdER4JTNEMCUzQmV4aXREeSUzRDAlM0JleGl0UGVyaW1ldGVyJTNEMCUzQmVudHJ5WCUzRDAuMzElM0JlbnRyeVklM0QwLjMzJTNCZW50cnlEeCUzRDAlM0JlbnRyeUR5JTNEMCUzQmVudHJ5UGVyaW1ldGVyJTNEMCUzQiUyMiUyMGVkZ2UlM0QlMjIxJTIyJTIwcGFyZW50JTNEJTIyd3R3YWRWS2V5LW1pNG85YzBWYmgtNTYlMjIlMjBzb3VyY2UlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC0xMCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjByZWxhdGl2ZSUzRCUyMjElMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhQb2ludCUyMHglM0QlMjI5MjQuMDgyODkxODQzMzM0NyUyMiUyMHklM0QlMjI0NzEuMTQxMzI1NzI2NzQzODQlMjIlMjBhcyUzRCUyMnNvdXJjZVBvaW50JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhQb2ludCUyMHglM0QlMjI4MzcuNDY4MDU2MDU0NjE3JTIyJTIweSUzRCUyMjM3MC4yNDg1ODYwMzI4MDQ4NCUyMiUyMGFzJTNEJTIydGFyZ2V0UG9pbnQlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteEdlb21ldHJ5JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01MyUyMiUyMHZhbHVlJTNEJTIyJTIyJTIwc3R5bGUlM0QlMjJyb3VuZGVkJTNEMCUzQndoaXRlU3BhY2UlM0R3cmFwJTNCaHRtbCUzRDElM0JzdHJva2VDb2xvciUzRCUyM0ZGRkZGRiUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB5JTNEJTIyMjIyLjE0NjM1NzI5MDczMTU0JTIyJTIwd2lkdGglM0QlMjIyMy41NDA4Njk1NjUyMTczOTIlMjIlMjBoZWlnaHQlM0QlMjI1OC42ODA5MDc5NzUwMTA1MzQlMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhDZWxsJTIwaWQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NCUyMiUyMHZhbHVlJTNEJTIyJTIyJTIwc3R5bGUlM0QlMjJyb3VuZGVkJTNEMCUzQndoaXRlU3BhY2UlM0R3cmFwJTNCaHRtbCUzRDElM0JzdHJva2VDb2xvciUzRCUyM0ZGRkZGRiUzQiUyMiUyMHZlcnRleCUzRCUyMjElMjIlMjBwYXJlbnQlM0QlMjJ3dHdhZFZLZXktbWk0bzljMFZiaC01NiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214R2VvbWV0cnklMjB4JTNEJTIyMTM1LjM2JTIyJTIweSUzRCUyMjQ3NS4xNDkwOTIwMjQ5ODk1JTIyJTIwd2lkdGglM0QlMjIyMy41NDA4Njk1NjUyMTczOTIlMjIlMjBoZWlnaHQlM0QlMjI1OC42ODA5MDc5NzUwMTA1MzQlMjIlMjBhcyUzRCUyMmdlb21ldHJ5JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbXhDZWxsJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGcm9vdCUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRm14R3JhcGhNb2RlbCUzRSUwQSUyMCUyMCUzQyUyRmRpYWdyYW0lM0UlMEElM0MlMkZteGZpbGUlM0UlMEHV7mQ/AAAgAElEQVR4XuydCbxV4/7/v81FKEpFkxShEipKVEilIhS6RTJdQ8h4zbNrHkMZy80QQiVKgxCVsZFGDZSiUJTm+q/387POf7fbw9rD2Xufcz7f++qWc571rGe91157Pc/n+Q7FtntmMhEQAREQAREQAREQAREQAREQAREQAREQgawSKCaRJqv8dXIREAEREAEREAEREAEREAEREAEREAERcAQk0uiDIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI5QEAiTQ7cBA1BBERABERABERABERABERABERABERABCTS6DMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtwEDUEEREAEREAEREAEREAEREAEREAEREAEJNLoMyACIiACIiACIiACIiACIiACIiACIiACOUBAIk0O3AQNQQREQAREQAREQAREQAREQAREQAREQAQk0ugzIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI5QEAiTQ7cBA1BBERABERABERABERABERABERABERABCTS6DMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtwEDUEEREAEREAEREAEREAEREAEREAEREAEJNLoMyACIiACIiACIiACIiACIiACIiACIiACOUBAIk0O3AQNQQREQAREQAREQAREQAREQAREQAREQAQk0ugzIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI5QEAiTQ7cBA1BBERABERABERABERABERABERABERABCTS6DMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtwEDUEEREAEREAEREAEREAEREAEREAEREAEJNLoMyACIiACIiACIiACIiACIiACIiACIiACOUBAIk0O3AQNQQREQAREQAREQAREQAREQAREQAREQAQk0ugzIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI5QEAiTQ7cBA1BBERABERABERABERABERABERABERABCTS6DMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtwEDUEEREAEREAEREAEREAEREAEREAEREAEJNLoMyACIiACIiACIiACIiACIiACIiACIiACOUBAIk0O3AQNQQREQAREQAREQAREQAREQAREQAREQAQk0ugzIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI5QEAiTQ7cBA1BBERABERABERABERABERABERABERABCTS6DMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtyE0CGs3bTRxi6Yawt+X2Un1j3QDq26r/v15m1b7eWpX1rLmnWsfuUqOTPq7bbdPl280A6vVt12K1MmZ8algYhAOggUtOcx/Jq3bNtmJYsXTwcK9SECKRPg8/j5koU2dflS23/PSta5foO8PkfO/c7KlCxpbfc/MOXzpKODn9asttdnfGO/rvvL/tq40eruVdkO9t69rfara+VL612XDsbqI/sElv/1p41ZMMd+X/+3/avREVal/G5uUNNXLLNvf15qvQ8/MvuD1AhEQAREoAgSkEiTAzcdoeOLn5Z4E8JvbcScWbZhy2Y3qqq77W5TL73O/Xveql+t1Yv93ARxyBm9cmDU/zeEPiOH2tvfTbcnO55u3Ro0zplxaSAikCyBgvw8cs0rvEn3Q599ZB/M+95Wb1hvFcvtYkdWr2U3t2rrFpoyEcg0gR+8TYc3Z061ITO/9USPtXmnn3TRVbZfxT3dfzfod7+t37zZ5vS9yUoVL5HpIe5wPp6bIwc8an9u3LDTONiM6O4tZi878hjbe9fyWR2nTi4CyRDYtHWLfTh/jr3miZCfLPrBm4Fud92cdvCh9nTnru7fFw1/w97z5qPv9bzImuxbI5nT5Msxm7dutTdmTbWGVarlbWJyokV//G5nDBno5qHXH3N8vpxbnYqACIhAJglIpMkk7bBz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3fqMHLpDWcVCcWG6CBEogAT0PBbAm6Yh5ywB8mAc7uXRIM+Gci7l7G3SwIoQAfIWslHx3RU3KjywCN13XaoIiEDqBCTSpM6wQPWwzCuX3cQrm02M8beXXhc4iWKBukgNVgQKCAE9jwXkRmmYBYbAUc8+aku8/DHjvKqH5GCTiYAIZI/A1aPedUmL7zr+JLuwSfPsDURnFgEREIECRkAiTQG7YekY7kn/e9amepWe3vnX+dbcSy4sEwERyB4BPY/ZY68zFz4C5GV7+ouJroLUNV7FQpkIiED2CHy0cJ71eGuwl59mP1eVTSYCIiACIhCMgESaYJwKVSvKIlIe9Y42HVxWfpkIiED2COh5zB57nbnwEaDM/B0fjbarjm5tdSruVfguUFckAgWIAAUteB6PqV3H2u5/YAEauYYqAiIgAtklIJEmu/x1dhEQAREQAREQAREQAREQAREQAREQARFwBCTS6IMgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjlAQCJNDtwEDUEEREAEREAERKDgE1i6dKlNmzbNmjZtalWqVCn4F6QrEAEREAEREAERyDgBiTQZR64TioAIiIAIiIAIFDYCK1eutIMOOsh+++03K1++vD300EN28cUXF7bL1PWIgAiIgAiIgAjkMwGJNPkMWN2LgAiIgAiIQEEg0L9/fxs9erRdffXVdtRRR1mZMmUKwrBzZoyPPvqoXXPNNXbsscfaunXr7JtvvrGbbrrJ7r333pwZowYiAiIgAiIgAiKQ+wQk0uT+PdIIRUAEIhDYuHGj+2m8heSSJUvsuOOOsyFDhrgQhGi2bds2a9mypfXs2dMuvfTSlJmz0P3111/tlVdeSbkvdSACmSCw55572h9//OFOVaxYMdtvv/2se/fuds4559gBBxyQiSEU6HOcd9559uGHH9rChQutZMmSdscdd9g999xjN954o/33v/8t0NemwYuACIiACIiACGSOgESazLHO6Jlwt959992tVKlSGT2vTiYCmSCwdetWO/DAA23XXXe16dOnxzzliy++aBdccIE9/PDDbpc7mv3www9Wt25d69Spk7333nspX0aNGjVs9erV9tdff6XU1/Lly61atWop9ZHswfoeSZZcwTtu1apV1qxZMzv00ENdyA7P2Pfff2/jxo2zDRs2WPPmze2qq66ybt26FbyLy4cRv/zyy/bl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TXBWaikCIiACIiACIiACIiACIiACIiACIiAC+UZAIk2+oVXHIiACIiACIiACIiACIiACIiACIiACIhCcgESa4KzUUgREQAREQAREQAREQAREQAREQAREQATyjYBEmnxDq45FQAREQAREQAREQAREQAREQAREQAREIDgBiTTBWamlCIiACIiACIiACIiACIiACIiACIiACOQbAYk0+YZWHYuACIiACIiACIiACIiACIiACIiACIhAcAISaYKzUksREAEREAEREAEREAEREAEREAEREAERyDcCEmnyDa06FgEREAEREAEREAEREAEREAEREAEREIHgBCTSBGelliIgAiIgAiIgAiIgAiIgAiIgAiLgCKxatcr9WbFihfuzYcMG9/OqVatahQoV3N/Vq1e3kiVLipgIBCYgkSYwKjUUAREQAREQAREQAREQAREQAREoigSmTZtm48aNs/Hjx9usWbNs6dKlgTGUL1/eateubS1btrR27dpZ69atnYgjE4FIBCTS6HMhAiIgAiIgAiIgAiIgAiIgAiIgAiEEFi9ebKNHj3aiDOLM6tWr08qncePG1r59e2vVqpWdcMIJ8rZJK92C3ZlEmoJ9/zR6ERABERABERABERABERABERCBNBAgdGnEiBE2fPhw93em7LDDDrNTTjnFTj75ZOPfsqJNQCJN0b7/unoREAEREAEREAEREAEREAERKNIE5s6dmyfMfP7551ljUaNGjTyxpm3btlkbh06cXQISabLLX2cXAREQAREQAREQAREQAREQARHIAoEtW7bY448/bo888ohL/JsrRqLhTp062d13320NGjTIlWFpHBkiIJEmQ6B1GhEQAREQAREQAREQAREQAREQgdwgMHDgQHvxxRctm54z8UhUrlzZzjvvPDv//POtXr168Zrr94WEgESaQnIjdRkiIAIiIAIiIAIiIAIiIAIiIAKxCXz55ZdOnOHP1q1bCwSuY4891ok1vXr1KhDj1SBTIyCRJjV+OloEREAEREAEREAEREAEREAERKAAEBg5cqRdfvnlRuWmIFapUiXr0qWLERY1aNCgIIcEbtOkSROrWrWqqyBF/0Hs3HPPtYceesgYl6zwEpBIU3jvra5MBERABERABERABERABERABIo8AUSQCy+8MJDQQj6Ys846y3mttG7d2u68806755578oXhxRdfbLfffrsNGTLEXn75ZZs2bVrc8yDQDB482JXvlhVOAhJpCud91VWJgAiIgAiIgAiIgAiIgAiIQJEnQELgbt262WeffRaTRdmyZZ04c/PNN1vdunWdd8vZZ5/tBJT8tK5du9rrr79uiEPDhg1zolA8sYa2/fr1M0QeWeEjIJGm8N1TXZEIiIAIiIAIiIAIiIAIiIAIFHkCc+bMsc6dO9uCBQuiskDwQOxAnCH8yLerrrrKVX7KhHH+/v37550KsebWW2+1WbNmxTz9tddea/fdd58TeGSFh4BEmsJzL3UlIiACIiACIiACIiACIiACIiACHgFyveBBs3bt2qg86tevb1R5Ouqoo3ZogziDSJNJQ2y54YYb8k6JJ8+9997rQq1i5ayhVDeeOOXLl8/kcHWufCQgkSYf4aprERABERABERABERABERABERCBzBIYMGCASxAcTdzA8+SWW25x3jPhXijjxo2zDh06BE7mm64rYxwTJkywli1b7tAl3jTk05kyZUrUUzVu3NhGjRq1gydQusalfjJPQCJN5pnrjCIgAiIgAiIgAiIgAiIgAiIgAvlAIJ4XDPlm3n33XWvQoMFOZ9+wYYM1bNgwZnhUPgw5r8vatWvbzJkzd/KKQWx6+OGHXQhUNOEJryBEntCQrfwcq/rOPwISafKPrXoWAREQAREQAREQAREQAREQARHIEAGS/Hbv3j3q2aiIRGhQhQoVIrYhtAghJJtGmW1CsCIZXj5c36pVqyL+Ho+aiRMnKvQpmzcwDeeWSJMGiOpCBERABERABERABERABERABEQgewTihSkR3kS562hJdhcvXmwHHXSQ4U2TiFWvXt1Vhdp///1dVSiMRMVz5851laGoLpWoTZ061RBcIhnjPPXUU6NWgCJcCo8aJRNOlHrutJdIkzv3QiMRAREQAREQAREQAREQAREQARFIkMDXX39tbdq0iZgkGLFi8ODBTkiJZQgfVFUKaogod999t+GdE00QITSJPkkAHK+sduh5u3Tp4kKyohnJkHv37m1Dhw6N2CS0rHfQ61G73CEgkSZ37oVGIgIiIAIiIAIiIAIiIAIiIAIikAABymwj0ETyWEE8IbwJ0SKWIfI0bdo08Fn79u3rSl+XLVs20DF451AtioTGQS2WNw19IAAR+hRNqAkv6x30vGqXfQISabJ/DzQCERABERABERABERABERABERCBBAmQm+WYY44xhJpwoyT1e++9Z61bt47b6yWXXBJYQMErp2fPnnH7jNQgXlLj0GM4B+eKZfGEGkK88PaRFSwCEmkK1v3SaEVABERABERABERABERABERABDwC0UKUEGgoSR1ezjoSNLxcKleuHDFUKrw9ggfCRypGYmISFMczvHRWrlwZNwlwLKEGT6KxY8cGEqrijUe/zxwBiTSZY60ziYAIiIAIiIAIiIAIiIAIiIAIpIEAoUN4wIQbwgT5XDp16hToLIMGDXL5XeJZrKpL8Y4N//3ZZ59tr7zyStzDnn/+ebvgggvitkOo6dChg5E8Odwo603oVLSKVnE7V4OME5BIk3HkOqEIiIAIiIAIiIAIiIAIiIAIiECyBAhvIocMCXTDrV+/ftanT5/AXTdv3tymTJkSs32lSpVs/vz5aRM6CNOqV6+erV69OuZ58QSipHYQoy+uJVLoV5DQqSDnUJvMEJBIkxnOOosIiIAIiIAIiIAIiIAIiIAIiECKBL7//nu77LLL7OOPP96pJ8KIbr755sBnmDRpkh199NFx2+Nt06tXrx3aIYaQcBghBW+VRO3hhx+26667LuZhlPeePHmy8XcQGz16tOtz1qxZOzTHu+jpp5+2iy66KEg3apNlAhJpsnwDdHoREAEREAEREAEREAEREAEREIFgBG688Ua7//77d2pMKWwSBUcrhx2pd8pjk9cmljVo0MBmzpyZ14R/Iwa9+eabeT+7/PLLjVwz5LYJaoQoHXbYYTsJKuHHv/XWW3GrU4UeQ8gToU/0H2qEOzH2oIJP0OtQu/QTkEiTfqbqUQREQAREQAREQAREQAREQAREIM0E8J5p27btTgIEwgMCRKJ5V4Ik8X3ooYfs2muvzbsS8tfgWRNuyZS8DuJNQ04actMkYohYiFnhRqWrCRMmJNKV2maBgESaLEDXKUVABERABERABERABERABERABIIToApTw4YNbcGCBTsdhPAQpNR2+IEIPpGS7frt8MpZvny5kZMGe+2116xHjx4RB73vvvs675oWLVoEvihy01SrVm0n0Sm0g/r169vs2bMD90lDvGi4tkghYUGTESd0QjVOKwGJNGnFqc5EQAREQAREQAREQAREQAREQATSTeDxxx+3q666aqdu8XLB2yUZq1ixYszkvVSIIoTKN6pJUVUqmt1www123333JTSUzp0728iRI2Mes3nz5oTCuOhs8eLFLpwqPDlx1apVbdGiRUaJb1luEpBIk5v3RaMSAREQAREQAREQAREQAREQARHwCCA07LfffjsJDo0bN7avvvoqYQEDqCTXxTMnlj322GPWt2/fvCZHHnmkffnll1EPSaZMd7TQpNCTEMpFbpxEbciQIda9e/edDrvjjjvs9ttvT7Q7tc8QAYk0GQKt04iACIiACIiACIiACIiACIiACCROIFKyYEKREC8IB0rGCAVq06ZNzEMRgJo0aZLXBqEID5VolkxoUpBxvPvuu9alS5dkLtO6detmQ4cO3eFYcvcQQoVXjSz3CEikyb17ohGJgAiIgAiIgAiIgAiIgAiIgAh4BJYuXWr16tUzctKEWiphTvQTzcvEP0f58uXtjz/+2MFL54gjjrBvv/026n3p2bOnDR48OKH7tnbtWiPsKrwaU2gnhFARSpWMrVixwvHjPKHWp08f69evXzJd6ph8JiCRJp8Bq3sREAEREAEREAEREAEREAEREIHkCCB8vPrqqzscfPzxx9vLL79sJOtN1hA+brrppqiHR6qEdMYZZxglsaPZbbfdZnfeeWfCQyIx8W+//Rb1OPLxXHnllQn36x9AaNNdd921w/E1atRwXI855pik+9WB+UNAIk3+cFWvIiACIiACIiACIiACIiACIiACKRCIVk2JEti9evVKoWez66+/PmbC4VNPPdXeeeedHc5BZaSLLroo4nkJIaK6E1WVEjU8XSJVrfL7uffee2MKSvHO98MPP9g555xjkyZN2qFpMmXD451Lv0+dgESa1BmqBxEQAREQAREQAREQAREQAREQgTQTiFT5KJVkwaHDu+666+zhhx+OOuLwyk5+w6ZNm9rXX3+903GRPG+C4iA3TqRy2f7xySQkDj83eWnITxNuU6dONZjKcoeARJrcuRcaiQiIgAiIgAiIgAiIgAiIgAiIgEeAik7kagm3gQMHGqJFqta7d2/DIyeaRRNGJk6caHfffbeNHTs279Czzz7bbrnlFjvggAOSGlYmRBoGFinxMdWrqGIlyx0CEmly515oJCIgAiIgAiIgAiIgAiIgAiIgAv8QiORJQylqvD+o7pSKRaoYFdpfNE8a2qxatcpVTPrmm2/s6KOPdpWXCHdK1uKJNCQNJodOKhYtUbI8aVKhmj/HSqQJyJX69Rs3bgzYWs18At27d09aURZFERABERABERABERABERCBoktg+PDhRuLg8MpETz75pF1++eUpgSFpcCzh45RTTrFhw4aldI6gB++///62cOHCqM379+9v5I9J1hBiyOFDyfJQu+aaa2KGfCV7Ph2XGgGJNAH5oW7WqlXLuYjJghF48MEHHa9Zs2YFO0CtREAEREAEREAEREAEREAERCCEwL///W977rnndmBCXhiqOx100EFJsyIfDXlpolmrVq1i5olJ+sQRDtxzzz1due9o9sYbbxiVpZK1q666yqgQFWr169d31Z0OP/zwZLvVcflEQCJNQLCINJQuIyGULBiBa6+91saMGWMnn3yy3XPPPcEOUisREAEREAEREAEREAEREAER+IfA0qVLjepHGzZs2IFJnz59rF+/fklzipZI1++Q8KVYwknSJw47EC8hcu9s2bIlapeU/e7atWtSp1y8eLETs9LNL6nB6KBABCTSBMJkJpEmIKiQZqjTuO2NGDHCBgwYYMR1ykRABERABERABERABERABEQgEQKR8seQk4YwHnLUJGNUU2KNF8syka8lyDgmTJiQtLMAFZ0QpEINAWr27NlWtWrVZNDpmHwmIJEmIGCJNAFBhTTD8whF+Mgjj3Qxo99++63ttddeiXekI0RABERABERABERABERABIosASo9kUaBv0MtlXLcCxYscB46sQxPHTx28tPIfYoIFcvmz59vdevWTXgYr7zyilF5KtzuuOMOFyUiy00CEmkC3heJNAFBhTQ78cQT7corr7SOHTu6Lx68aoinlImACIiACIiACIiACIiACIhAIgTIqUJulXAjxcJDDz2USFd5bStXruwqNUUzQowINcpPi1TBKvR8lSpVspUrVyY8BMKcDjvssJ2ELbxnFi1aZGXLlk24Tx2QGQISaQJylkgTEFRIs/Lly9uPP/5oJMLCYEh+mkhfron3riNEQAREQAREQAREQAREQASKCgFyqjRs2NDwgAk1wp7Gjh2bVDhQPIEEIeOnn34yhJL8MASiatWqxcxHE6sUeKwxRSvr/fzzz9sFF1yQH5ejPtNEQCJNQJASaQKC+qfZ008/bSNHjrRRo0blHUjcI9nDP/roI2vevHliHaq1CIiACIiACIiACIiACIhAkSYQLX9L7dq1XX4acq0kYhQ3ufXWW2MegpcO3jr5YfEqTHHOu+++22655ZaETh+tX4rgkN9GltsEJNIEvD8SaQKC8poRK0rM5AcffGDNmjXb4cCBAwe6LOzkp5GJgAiIgAiIgAiIgAiIgAiIQCIEKJuNCBFuXbp0caFJeNYEtXHjxlnbtm1jNqdU9cyZMxPqN8j5yd1JONKsWbNiNmfTu3379kG6dG0+++wzF8EQXi0KAYvrqF69euC+1DA7BCTSBOQukSYgKK8ZeWiwJ554IuJBF110kfuSe+aZZ4J3qpYiIAIiIAIiIAIiIAIiIAJFngBhT3jlT5s2bScWN9xwg913332BGbG5TF6aWOWv6ax///528cUXB+43SEOq315yySVxm1IGPKiHEHloYLNixYqd+n399dftrLPOins+Ncg+AYk0Ae+BRJpgoMg3wxfme++9Z+SkiWR8CRL2hNvgOeecE6xjtRIBERABERABERABERABERABjwBrjUsvvdSWLl26A4/SpUvbgw8+mLdpHATW6aefbu+8807MpqxdBg0a5HLipMMI2+rdu7chqsQyNrefffbZQKecPHmy4WX0+eef79T+pptusnvvvTdQP2qUfQISaQLeA4k08UHxRUmm8OHDhxtfkLEMNzzc9gh7OuCAA+J3rhYiIAIiIAIiIAIiIAIiIAIi8A+BaNWeEk0kPHToUOvWrVtcrueee66RuiEdRllsymPHM8K3qDAVz9gEP/XUU11O0HBLNl9PvHPq9/lHQCJNQLYSaWKDmjRpkh133HF27LHHWs+ePa1Hjx5WokSJmAcRS/rhhx+6bOwyERABERABERABERABERABEUiEAPlkyCsTbnj0k8ulZcuWcbtD4KhRo0bEEKHwg5NJ4hveB4mKSVgcz6gotXz58ri5cBh/9+7dDbEp3BIVrOKNSb/PDAGJNAE5S6QJBurNN990qvAnn3zihBoEmxYtWkQ9GPfCgw8+2GUtl4mACIiACIiACIiACIiACBQNAuvWrXNrBkQGqg7tvvvuCV844U5NmzaNKLAkItTceOONdv/99wc6/+DBg90aJxmL5v0TqS9SQ1BZKpbFEmg4jqpQWmclc6eye4xEmoD8JdIEBPVPsyVLltirr77qBJty5co5wYY/VapU2aGjX375xeWnee6556xjx46JnUStRUAEREAEREAEREAEREAEChSB33//3b7++mtbuXKlbd++3Y29YsWKSa8F5syZ45LlkgQ43IIKNfRx0EEHBebYp08fJ6CULVs20DFr1641cne+8MILgdrTaPbs2UZlqWgWT6Ah0TEJj2UFj4BEmoD3TCJNQFARmo0fP94JNvyhNB5izcknn5zXkhw2V1xxhctPs9deeyV/Ih0pAiIgAiIgAiIgAiIgAiKQswSmTJnikuVGqqZEOepDDjkkqbGT77JDhw6GGBJJqCHRMN46sezCCy9MSERp0KCB3X777W59E63sN5Wohg0bZnfeeachBAU1PHXw2IlmXCeJhyOFOHEMeWyo5pRIOfKgY1O7/CcgkSYgY4k0AUHFaIZLI541iDV42vi5awh3wsWQpMNDhgxJ/UTqQQREQAREQAREQAREQAREIGcIzJ07177//ntjPRDNdtllFzvttNOSHjNiCAmAIwlAiBWPPfaY4QETzVatWmX16tWL6JETa1DVq1d365patWpZ3bp1XdMFCxbYd99959Y29JuIUW4bL5qqVatGPAyRiyTBkUqQcwB5eCZMmCCBJhHoOdZWIk3AGyKRJiCogM2mT5+eFw6FayHeNZS144u5b9++AXtRMxEQAREQAREQAREQAREQgVwmQIGRhQsXBhrioYcemlKZ6yeffNIoNx1NDKIaLWFHvpgSPqhHHnnEyAWTTSMNBF49kYzrI68Nm9uRrFevXq7U9r777pvNS9C5UyQgkSYgQIk0AUEl0eztt992gs3o0aNt8+bNNn/+fKNUnEwEREAEREAEREAEREAERKBgEkBIILxp69atgS6A/DSNGjUyhJpULF5y3saNG9u7774bdb1BvsypU6emMoSkjyWEinOHhynhHURiY8KmInkKcULy1+AgI66PAAAgAElEQVRBE80DJ+lB6cCME5BIExC5RJqAoFJotmzZsjz3PIk0KYDUoSIgAiIgAiIgAiIgAiKQJQKENZF/5e+//w40AsSZPffc04kzhA6lw5566innMRNN0CCkiKpHJNcNF0QIIyJkKFZoVjrGGN4HSYgnTpxoTZo02eFXjAfPGpItRzOEJ0qOS6DJjzuT+T4l0gRkLpEmIKgUm+23335OAZZIkyJIHS4CIiACIiACIiACIiACWSDw2muv2bZt2wKduVixYk6UOPDAAwO1T6TRSy+9ZA8++KCRDyeanXTSSS4BL4l2Q+3555+366+/PuH8NImML7Qt4UkPPPCASwHh24wZ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7vR6OxT7/thvPnf/WThnvWPb1qnvrt9p/YpPEmnyeIOVg64l0vicZIk0PkFleZhEmiwB6nQREAEREAEREAEREAERyCOBdESaF7770vX85P1SR9v6H0+WWxs2LfrZotU/uw7vTnN///NfSWtQZTP3eNN/uwr/eMBgX//jldPh3anu13/CqEpao6o13LA9Dy727Us+fMvN/ml5qeN4vOmhbsdNqxX7mUSaYG+wn376ydWokTxsLdgeo92aRBqf8yORxieoLA+TSJMlQJ0uAiIgAiIgAiIgAiIgAnkkkI5IM/H7pa77gndLHe1Om1Z3I5r+r9T297+vcce9M6nMK5t8QGu3WYX/K59N6FS7/072dSwHcawXblXypHsa7+cO3qKORJoc3lNU8poyZYrbe++9c9hLfJqWSONzriTS+ASV5WESabIEqNNFQAREQAREQAREQAREII8E0hFplq5Z7U6a9Wqpoy0thAmRBrGmpG1fpap7Yu9/F32bfDSHvz3BkZC4pG2xSUX34v5HFvv2lR/NcDN+/L7UcYze+zBX/x9PnUSTJ02wN9jGG2/sxo4d64477rhgG45paxJpfE6cRBqfoLI8TCJNlgB1ugiIgAiIgAiIgAiIgAjkkUA6Ig3D7PVPLphx33xebMRV//GIGflPmNGWFSsX+z75aMhLU9J6N9nfkUA40R74fJ4bvuTT9Y69dsfd3Ql1GxT7/ovfLXF3fvq+JRtOtPb1tnddti9eCYqfl0eR5u9/2Lz55pvuwAMPtCpYQRrtPfXUU+6kk04KstnYtiWRxufUSaTxCSrLwyTSZAlQp4uACIiACIiACIiACIhAHgmkK9IgjAz78p8S2Mu/cj+s/d3tW6O2u+xfjV3dSsUrMHmX9Nryr92IJQvd52t+cTv/kyvmgga7uKbVa613xbRL8uAxX39mP6Ni09nb7uzO3m5n+/+S9ty3X9rxnvcNSYsRdGpsvMl6x5ZHkebee+9111xzjXvjjTfcQQcdFNgdhviDSDNhwgR31FFHBdZunBuSSONz9iTS+ASV5WESabIEqNNFQAREQAREQAREQAREII8E0hVpcj1URBcEnR2qVHObpPAAQdj5ZPVKt22lTYvy25Q2vvIo0uy1117u/fffd++9957bc889A5u2tWvXuooVK7rXX3/dNW/ePLB249yQRBqfsxclkea7774zBXPVqlVuyy23dEcffbTPq0h92Jw5c1zbtm2t/a23Ll7yLvXZ2R8hkSZ7hmpBBERABERABERABERABPJFIGoiTS44lDeRZtasWW7fffc1lF9++aXbdtttA8O6evVqt9lmm7l3333XIQTJnJNI4/MuiIpIM3DgQHf11Vc7FEdcwxo1auQ++uijorjA4cOHu3322cc1adKk2JVNmjTJtWvXzvH1gAMOKPWqV6xYYed+/vnn9qlfv75POsEdJpEmOJZqSQREQAREQAREQAREQATCJiCR5rywkee8P8KQXn75Zevn559/dlWrVg2szx9++MFtscUW7pNPPnE77bRTYO3GuSGJND5nLwoiDQLMWWed5e6++253xRVXuP/85z+uW7du7umnn7YkS3/88YerUqWKiTDTp08vdmWMH0OkqVChQqlXTTbt559/3n4mkcbnjaHDREAEREAEREAEREAEREAEighIpCkskWbkyJHuzDPPdJ06dXLMLXvOkvvJL774wi1YsMC1atVqvZXw22+/2TllCTt45uAc8M0337g6depYO4sXL3atW7cuamvdunUObx7Com688Ubb726//fauQYMG9qlbt67boJQ8Qzg1IC59++23rkWLFm6HHXaIxUqVSONzmvIt0vzyyy8OL5PzzjvP3XXXXTbqX3/91dWsWdNdcsklrnfv3vY9xJrnnnvO/fjjj27TTTe17xE32LRpU/fBBx+43XffvcwrJg6QBYEQJJHG542hw0RABERABERABERABERABCTS/EMAEYH9WqEYe0L2keecc47tIxFqEEwQRA499FB3ww03WAQHoVAIIUR9XHzxxXb5P/30kzv33HPduHHjLAIEb5m33nrL7bzzzsXwzJ071+26666WyoOwp2OOOcaEmoULFxYdR+Wn9u3bu9tvv93amDdvnlu6dKn766+/7JhNNtnE3Xfffe6iiy4qOmfRokXulFNOsTAqDGHpiSeecCeffHLkp0cijc8pyrdI069fP1MNv/76a1e9evWiUffq1csSNx155JH2PZRC3NEmTpxY9L0zzjjDff/99+ZFk8pefPFF16ZNG7vp69Wrl+rwwH+ucKfAkapBERABERABERABERABEQiNgDxpCkOk+f33362K00YbbWT5SkePHm0eNYg0GKFJ7BsnT57sCFlCBGH/iIiyfPly17JlS4ejQY8ePUzEufPOO93YsWNNgMHzxbOZM2eaZwyCC+LPLrvsYkKN54TAcccee6x75ZVX7Fw8Z7A///zT3XLLLRZlgvXp08d16dLF/h/BaL/99jPRbNCgQdYmUSOVKlVyb7/9dmhrIdOOJNL4JJdvkQblkIXy7LPPJh0xx6BS4l2DgIOC2LBhQzd+/Hi72VPZqFGj3GmnnWbKZ6IYlOq8oH4ukSYokmpHBERABERABERABERABMInIJGmMEQaPIIQVYjKqFatmoksCCGIJxdccIHbZpttbM+I9wsRGeSUwdMGjxg8b1577TU3e/ZsK3SDsMOeFO+Y888/3z344INFN+arr75qhWs4D0PAQWy59tpr7d/sZxs3buwuvfTSIuGGxM2XX365e+aZZ9zBBx/s7rjjjmKVoehjyJAhtv89/PDDTdx56KGHbHyPPPJI+IsizR4l0vgElm+RBtetGTNmmLtWafF2iZdx/PHH2wLAdezss88uWjTUn09lDz/8sLnokZh44403TnV44D+XSBM4UjUoAiIgAiIgAiIgAiIgAqERKE2k8cJj2GwXgi1ZssRSTJRmvCyPuyFoIMSwH8QbBY8YzxA6cAYgfwz7SyIxiOTAe6Z27dqWYoP9KHvKm266yU7r3r27u+222yyPDPlrKOVNiBP20ksvmZcL+0/aYz+I8EI+VhwQqGSM2EPoFU4EhFQRYYI4NGDAAHfiiScWw42AQ44bvGzmz59vTg60Sx8PPPCAq1GjRuSnRyKNzynKt0jz8ccfWxzghRdeaPF2ZSX/5XI8b5h77rnH4gRRPFEa/Vj//v0tKbEXa+jnnCCPkUgTJE21JQIiIAIiIAIiIAIiIALhEigp0rDRr1y5clEoC9Vk42wkuJ0yZYqJCmvWrCkK//GuKe4iDflfOnToYLlodtxxR9esWTOrAEzaDQQRCtRQgtvLl4rHimd8n/0nxWjmzJlj4VGEPxEuhaBCdEjz5s0tfyr9IMbgSYO3y2effWahTDgn4GmDd82nn35qlYzJbTN06FATxhCAML4SxlSrVi0bJx/y3dAewo6Xj9ULo/LjsBCV+1Iijc+ZyLdIwzC5Kckvg2sZHjLckKi4CCrXXHONqYkYGbRxE8P9jNAnMmZT9cmPecKOl4TJzzlBHiORJkiaaksEREAEREAEREAEREAEwiXgiTSIMyR0LflymbwgbKaTFTQJd8T+evMiFShB7UU2kBAXsYYPe7K4Jw6mavCpp55qjgH3339/sQgOL/eplxyYSsOIMFtttVURQEKiqOTEnhWhB6GGue7Zs6flr8HYmyLKkDeGECnEEzxf8M7BsQC+FLLx0nx4FZqoHEXeVH6G8INAVtLYJ3MeQhDHE66VzLnB38yHf5REGp/MoyDSMNRly5Y5kgiTGJibmupO3OR4wCQKMSiQgwcPtng+PGn8GhmzOR6BJx8mkSYf1NWnCIiACIiACIiACIiACARD4NFHHzXBApEmWZqGzTff3Aqg5KNYSTpXitcH5Z+/++67Mk/jBTdCDdcb5+pO7CH32GMPE2lKGoVoSMZ76623msNANgYvRBbPyYCUHoRK4YnjGSFWJP299957zYsnmdgCewSclStX2j1F3hmugeTG5FvlXqONN99803344YeWy4bqVFE1iTQ+ZyYqIo3P4VrcHgLNY489VpQB28+5uO/hGkZcYT5MIk0+qKtPERABERABERABERABEQiGAFWA8Kbwa40aNXJ7772338NDPY4QHKoBeRWNUnWO10fHjh1THaaf+yTQokULC7Xq27evzzP+dxjCGp49hGetXr3aBCDCq0gm3K5du7TbC/MEiTQ+acdNpPF5WZE7TCJN5KZEAxIBERABERABERABERABXwQQaEjQSlllPBf8ihvkrMHrISohUPPmzXN82NynKtrigYmLZ5CviYzAQVR14p7A+WCvvfaKwIjCG4JEGp+sJdL4BJXlYRJpsgSo00VABERABERABERABEQgZAJ//vmnO+mkk6z6DlV5sF9//dWSuBKC4tcIVfGq/vg9J+jjqD6E94VfcYbjGHeTJk2CHkq5bu/mm2+2nKzktSlvJpHG54xLpPEJKsvDJNJkCVCni4AIiIAIiIAIiIAIiECIBFasWGECzW677WZ5MksahU5I9OonBOrAAw+0Ms35NHKbTJ061dcQKEN9yCGHWP4dWXAE8MAimXDnzp1dt27dgms4Ji1JpPE5URJpfILK8jCJNFkC1OkiIAIiIAIiIAIiIAIiEBKBxYsXm0BDno8ePXqU2SsCzTvvvGOVfcqqIku4EO1EwcaPH+9WrVpV5lAYKwl2qSZUyIYXVLVq1Xx7FQXF4rXXXnMtW7Z0L730kmvdunVQzcamHYk0PqdKIo1PUFkeJpEmS4A6XQREQAREQAREQAREQARCIPDee++ZQENFoK5du/rqkQpBVPJZvnx5seMJGSJJ7HbbbeernVwfRBVdRKWSRu4cSkrjNVQe7Nhjj7UqSFdffXWolzt//nzLT0Ti5qhX/8oFmLyINH7dx3JxwZm2SaWkTp06WbxhvizKZcKCYiKRJiiSakcEREAEREAEREAEREAEckOA/RwCzV133WUhKenawoULraIsZZixWrVq5a26bFljnzhxYpGYRPlnqgM1a9bMbbTRRulebmyPP+KII0yQ6tOnT1bXcN9991n566efftp3O+Q5SlZ223dDMTwwLyINSmncBAd+kRBz6NVyD3uup02b5gYPHuzOP//8sLsOtT+JNKHiVmciIAIiIAIiIAIiIAIikBYBQoEQaEaOHOlOOeWUtM5NPJiwJ7xqli1bZnvDKlWqZNxWLk5cu3ate/HFF00oYHxVq1bNRTeRbvOwww5zjRs3dvfff39W40Ts+fDDD923336bVTvl5eS8iTTUkJf5J7DDDjs4knKhOJNEqVBNIk2hzqyuSwREQAREQAREQAREIO4EHnvsMXfxxRe7sWPHuiOPPDLulxOr8SMabbLJJqGOmaTIBxxwgLv77ruz6pcwNgQarkGWmoBEmtSMInFEq1atLB7vu+++swRKhWoSaQp1ZnVdIiACIiACIiACIiACcSYwYMAA16tXLzdmzBgL+5EFT4AQnzZt2rgzzzzTnX766UUdwPzss882seSSSy4JvuMyWqTa1tFHH+0oh52pEdK26aabWvJhEkhvuOGGmTYVq/MoH77ffvtZNE66JpEmXWJ5Or5t27bujDPOcCNGjHD77LNPwZYik0iTpxtM3YqACIiACIiACIiACIhAGQR69uzpnnzySRNoGjVqJE45IkDOFkLIRo8eXRRKRshVu3btXI0aNdxDDz3k2BeGZfvuu6+JReRnzdQ+/vhj16RJE8s7RGhbebHLLrvMbbHFFq579+5pX7JEmrSR5Tn4PE4AACAASURBVOeELbfc0pFBnTCxvffe2+FqWIguhhJp8nN/qVcREAEREAEREAEREAERKI3ANddcY0lfEWi23nprQcohARL0Uklp5syZ5oVBKWrKkjdo0MBNmjQp9JLfVFhCbMgkObSHiSpZ+++/v8Mrh/uovBjr5quvvnJPPPFE2pcskSZtZOGfMHfuXFNPKQWHEQN67bXXWqKt6tWrhz+gHPYokSaHcNW0CIiACIiACIiACIiACKRBgKIlS5YsMYGGkBVZbgnceOONFlK2atUqy0VKwt2aNWuauEF1qZL2yy+/mJDTsmXLYvNDUmbOX7RokZUM32OPPYpOJeSIojQkBS4r9Oj22293L7zwglW3uvPOO92pp55arOvVq1e7559/3hwIWrdubV4+ntG3V76cfDbTp0935LahEtj1119frJ3Zs2fbuHfZZZdSwSbrx89MkAMHwWunnXZaL+xo1KhRDg+xpUuXur322stCzAgpSzTmYeONN3aVKlUqszuOwdsJD7NEzt26dbM0JbNmzfIz1GLHSKRJG1n4JzDBX375pXv00UeLOs9GmQv/Cvz3KJHGPysdKQIiIAIiIAIiIAIiIAK5ItC+fXvLI8JmVhYOgXPPPdcEGbxmSHHx+++/u7fffrtYiBn7wGrVqpngQWTFlClT3Mknn+yeeuopGyShUldddZX7+uuviwbdtGlT+/6OO+5onjp47Dz77LPu+OOPX+/CaIe5p6IToTrDhg2zPDmeITycd9557ptvvrFvEcb01ltvmRDy/fffWw4bxBeMJNOcy/feeOMNd9BBB9n3uUYEkU8//dT+TaWwxBw8fC9ZP35mY+jQoQ5WP/30k1VoxsGBMWJEqOCptM0225iA9MMPP7hXXnnFHXfcce7xxx93CxYsMNHm/ffft+MRm/h5yUrPXOexxx5bxKJFixZWZnyrrbYyUerhhx92VInGuP558+a5jh07JhV9OFYijZ8ZzuMx3CC77rqrTW7Jqk4HH3ywlb+7/PLL8zjCYLuWSBMsT7UmAiIgAiIgAiIgAiIgAukQwDuDPQZ7jwcffDCdU3VslgTwbpkzZ455zfCVcueJAgnNE3qEh0zdunVNmMF7AzHh559/dq+//ro76qijzEMGLxGSDCMM9O7d27388svm8YEgMnjwYBMd8NTBW8Xzkvroo49MSDnxxBPdI4884ipXruwmTpxoQgaGIET7eO7g8YOnSvPmzd2VV15pogSCBWMgdw77Otru16+fCUJ43nAtCFB431DaG2cE0npw7D333GOiYP/+/VP2kwrzrbfe6vAGIhoFoQjvHkKuGN+FF17opk6dahyIWKFv7LPPPrNxImiR92fPPfd0N910k3kiHX744eYthFcOY/SMnD14yiBU4XEEE9hTbhwGJHom5GnQ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1vBVJgIiIAIiIAIiIAIiIAJRJUAF07ffftsEmjp16kR1mBqXCIhAGgQk0qQBK06HSqTJfLb69u1rYg3hT4g1u+++e+aN6UwREAEREAEREAEREAERyAGBzp07u6+++soEmsqVK+egBzUpAiKQDwISafJBPYQ+JdJkB5kKUAg1fKgChVgj99HsmOpsERABERABERABERCBYAhQualChQruySefDKZBtSICIhAZAhJpIjMVwQ5EIk0wPH/99dcisaZTp04m1jRo0CCYxtWKCIiACIiACIiACIiACKRBYNWqVVZie/vtt3eDBw9O40wdKgIiEBcCEmniMlNpjlMiTZrAUhz+448/Fok1lDZErKEqlEwEREAEREAEREAEREAEwiCwdOlSE2gOPfRQ16tXrzC6VB8iIAJ5ICCRJg/Qw+hSIk1uKH/77bcm1vTr18+EGj41a9bMTWdqVQREQAREQAREQAREQAT+ITB37lwTaM4880x34403iokIiEABE5BIU6CTK5EmtxP7xRdfmFgzbNiwIrFm0003zW2nal0EREAEREAEREAERKDcEXjrrbdMoLnlllvcxRdfXO6uXxcsAuWNgESaAp1xiTThTOwnn3xiYg1Z9T3PGpK4yURABERABERABERABEQgWwITJkwwgWbIkCHujDPOyLY5nS8CIhADAhJpYjBJmQxRIk0m1DI/58MPPzSxZtKkSSbWXHXVVZk3pjNFQAREQAREQAREQATKPYFRo0Y5ClfwMrBNmzblnocAiEB5ISCRpkBnWiJNfiZ21qxZJtbMnDnTxJpLLrkkPwNRryIgAiIgAiIgAiIgArEl8OCDD1p4EwJNixYtYnsdGrgIiED6BCTSpM8sFmdIpMnvNL355psm1sybN8917drVde7cOb8DUu8iIAIiIAIiIAIiIAKxIEDlpqFDh5pAs/vuu8dizBqkCIhAcAQk0gTHMlItSaSJxnS89tprJtZQMhHPGjLyy0RABERABERABERABESgNAJUbnrllVdMoKlfv74giYAIlEMCEmkKdNIl0kRrYidOnGhizcqVK02sad++fbQGqNGIgAiIgAiIgAiIgAjklQBh8vPnzzeBpkaNGnkdizoXARHIHwGJNPljn9OeJdLkFG/GjY8fP97Emr///tvEmrZt22bclk4UAREQAREQAREQAREoDAIdOnRwa9ascWPGjHEbbLBBYVyUrkIERCAjAhJpMsIW/ZMk0kR7jp566ikTa6pWrWpiTevWraM9YI1OBERABERABERABEQgcAJr1661Etu1a9d2jzzySODtq0EREIH4EZBIE7858zViiTS+MOX9oBEjRphYU69ePRNrDjvssLyPSQMQAREQAREQAREQARHIPYFly5aZQLP33nu7vn375r5D9SACIhALAhJpYjFN6Q9SIk36zPJ5Bhn8EWsaNWpkYs1BBx2Uz+GobxEQAREQAREQAREQgRwSWLhwoQk07dq1c927d89hT2paBEQgbgQk0sRtxnyOVyKNT1ARO2zgwIEm1uy///4m1uyzzz4RG6GGIwIiIAIiIAIiIAIikA2B2bNnm0BzxRVXuC5dumTTlM4VAREoQAISaQpwUrkkiTTxntg+ffqYWHPEEUeYWLPbbrvF+4I0ehEQAREQAREQAREQAffaa6+ZQNO7d293zjnniIgIiIAIrEdAIk2B3hQSaeI/sX/++acJNXz4Y45Ys/POO8f/wnQFIiACIiACIiACIlAOCTzzzDPupJNOck8//bQ928lEQAREoDQCEmkK9L6QSFM4E7t69eoisebss882saZ+/fqFc4G6EhEQAREQAREQAREocALDhg1zV155pRs7dqw7/PDDC/xqdXkiIALZEJBIkw29CJ/riTTvvfdehEe5/tD22GMPN23aNNegQYNYjTuMwf7www9FYg0xzIg1derUCaNr9SECIiACIiACIiACIpAhgfvuu8+qN40ZM8btu+++Gbai00RABMoLAYk0BTrTiDQtWrRwv/zyS+yuEGFJIk3Z0/bNN9+YWDNgwAATavhsvvnmsZtnDVgEREAEREAEREAECp3AbbfdZt4zCDQKWy/02db1iUAwBCTSBMMxcq3ENdwpciAjPCDmGLFm+PDhRWJNlSpVIjxiDU0EREAEREAEREAEyg+Bq666yv33v/81kWbLLbcsPxeuKxUBEciKgESarPBF92SJNNGdm6BHtmDBAhNrxo0bVyTWbLTRRkF3o/ZEQAREQAREQAREQAR8Ejj33HPdd999ZwJNxYoVfZ6lw0RABETAOYk0BXoXSKQp0IlNcllz5swxsebVV181saZLly7lD4KuWAREQAREQAREQATyTIAKTggzI0eOzPNI1L0IiEAcCUikieOs+RizRBofkAr0ENxqEWv42rVrV3fJJZcU6JXqskRABERABERABEQgOgR+/vlnK6290047uUGDBkVnYBqJCIhArAhIpInVdPkfrEQa/6wK9cg33njDxJr58+ebZ815551XqJeq6xIBERABERABERCBvBL48ssvHR40LVu2dHfddVdex6LORUAE4k1AIk2856/M0UukKdCJzeCyCH+699573VdffWViTceOHTNoRaeIgAiIgAiIgAiUFwJr1qxxy5Ytc8uXL7dPyf/n52vXrnW///67fbz/976uW7fOwn022WSTYl8Tv1ezZk1Xq1YtV7t27WJf+V6NGjVihfrDDz80gebss892119/fazGrsGKgAhEj4BEmujNSSAjkkgTCMaCamTChAnmWbNq1SoTa0455ZSCuj5djAiIgAiIgAiIgH8CvLxZuHBhsc+nn37qFi1a5P766y8TTsoSUagmmUyA2XDDDYuJN6UJOStWrFhPBPLEoF9//dXVr1/f7bjjjqV+olQgAc9lQpy6d+/uLrroIv8ToCNFQAREoAwC5U6kIfTj3XfftT8KrVu3tpjRoG3mzJn2B69u3bquWbNmLh9lkSXSBD2rhdPes88+a2LNBhtsYGLN8ccfXzgXpysRAREQAREQARFYjwDCy4wZMxzPqHydN2+eq1q1apkiSLVq1fJKEY+czz77bD0RyROVEG/2339/e87m67777puX8b744osm0DzyyCPu9NNPz8sY1KkIiEDhESg3Ig2/7FG3+SXK5vTvv/92F1xwgRs8eLDNKqIGngalKeDEllauXNm98MILSe+AJUuWmKvjO++8U3Tc1ltv7SZOnOh22223UO8eiTSh4o5lZ6NHjzaxpnr16ibWHHXUUbG8Dg1aBERABERABESgOAGEmOnTpxeJMnieeIIGX3kuzbcQk+mc4eXzySefmNjkCU/8O1G0adu2babN+z7viSeecJTZpsT20Ucf7fs8HSgCIiACqQiUG5GGGFF+ibIxPfjggy3UY9KkSSbOIKTgonjbbbdZ+eLDDjusiNu0adPs3wg4rVq1Ssrz8MMPd1OnTnX80j7yyCPNY+e0005zBx54oHvmmWdSzUWgP5dIEyjOgm7sscceM7Fm2223NbHm3//+d0Ffry5OBERABERABAqRwOzZs+15kw/hRjy3esJFgwYNCvGSi65p5cqVRYLU66+/bi9MTzjhBPsce+yx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)" - ] + "# from evals.eval_on_hotpot import eval_on_hotpotQA\n", + "# from evals.eval_on_hotpot import answer_with_cognee\n", + "# from evals.eval_on_hotpot import answer_without_cognee\n", + "# from evals.eval_on_hotpot import eval_answers\n", + "# from cognee.base_config import get_base_config\n", + "# from pathlib import Path\n", + "# from tqdm import tqdm\n", + "# import wget\n", + "# import json\n", + "# import statistics" + ], + "id": "5f36b67668fdb646", + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T15:57:30.764970Z", + "start_time": "2024-12-24T15:57:07.861187Z" + } + }, + "cell_type": "code", + "source": [ + "# answer_provider = answer_without_cognee # For native LLM answers use answer_without_cognee\n", + "# num_samples = 10 # With cognee, it takes ~1m10s per sample\n", + "# \n", + "# base_config = get_base_config()\n", + "# data_root_dir = base_config.data_root_directory\n", + "# \n", + "# if not Path(data_root_dir).exists():\n", + "# Path(data_root_dir).mkdir()\n", + "# \n", + "# filepath = data_root_dir / Path(\"hotpot_dev_fullwiki_v1.json\")\n", + "# if not filepath.exists():\n", + "# url = 'http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json'\n", + "# wget.download(url, out=data_root_dir)\n", + "# \n", + "# with open(filepath, \"r\") as file:\n", + "# dataset = json.load(file)\n", + "# instances = dataset if not num_samples else dataset[:num_samples]\n", + "# answers = []\n", + "# for instance in tqdm(instances, desc=\"Getting answers\"):\n", + "# answer = await answer_provider(instance)\n", + "# answers.append(answer)" + ], + "id": "d5af4b516c6621a3", + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Getting answers: 100%|██████████| 10/10 [00:13<00:00, 1.31s/it]\n" + ] + } + ], + "execution_count": 9 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T15:57:30.787382Z", + "start_time": "2024-12-24T15:57:30.785259Z" + } + }, + "cell_type": "code", + "source": [ + "# from evals.deepeval_metrics import f1_score_metric\n", + "# from evals.deepeval_metrics import em_score_metric" + ], + "id": "2bf69048a272158c", + "outputs": [], + "execution_count": 10 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-24T15:57:30.828509Z", + "start_time": "2024-12-24T15:57:30.795197Z" + } + }, + "cell_type": "code", + "source": [ + "# f1_metric = f1_score_metric()\n", + "# eval_results = await eval_answers(instances, answers, f1_metric)\n", + "# avg_f1_score = statistics.mean([result.metrics_data[0].score for result in eval_results.test_results])\n", + "# print(\"F1 score: \", avg_f1_score)" + ], + "id": "72ba5f89cccbee6b", + "outputs": [ + { + "data": { + "text/plain": [ + "✨ You're running DeepEval's latest \u001B[38;2;106;0;255mOfficial hotpot F1 score Metric\u001B[0m! \u001B[1;38;2;55;65;81m(\u001B[0m\u001B[38;2;55;65;81musing \u001B[0m\u001B[3;38;2;55;65;81mNone\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\u001B[38;2;55;65;81mstrict\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mFalse\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\u001B[38;2;55;65;81masync_mode\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mTrue\u001B[0m\u001B[1;38;2;55;65;81m)\u001B[0m\u001B[38;2;55;65;81m...\u001B[0m\n" + ], + "text/html": [ + "

✨ You're running DeepEval's latest Official hotpot F1 score Metric! (using None, strict=False, async_mode=True)...\n",
+       "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Event loop is already running. Applying nest_asyncio patch to allow async execution...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Evaluating 10 test case(s) in parallel: |██████████|100% (10/10) [Time Taken: 00:00, 407.84test case/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.0, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: Were Scott Derrickson and Ed Wood of the same nationality?\n", + " - actual output: Scott Derrickson is described as an American filmmaker in the context. Ed Wood is referenced as a cult filmmaker in the American biographical film \"Ed Wood.\" Therefore, both Scott Derrickson and Ed Wood are of the same nationality: American.\n", + " - expected output: yes\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.04255319148936171, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: What government position was held by the woman who portrayed Corliss Archer in the film Kiss and Tell?\n", + " - actual output: The woman who portrayed Corliss Archer in the film \"Kiss and Tell\" was Shirley Temple. After her acting career, she held the position of U.S. Ambassador to Czechoslovakia from 1989 to 1992, and she was also a member of the U.S. delegation to the United Nations from 1969 to 1970.\n", + " - expected output: Chief of Protocol\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.05882352941176471, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: What science fantasy young adult series, told in first person, has a set of companion books narrating the stories of enslaved worlds and alien species?\n", + " - actual output: The book series that fits the description is \"Animorphs\". It is a science fantasy young adult series told in the first person with multiple narrators, and it deals with themes relevant to enslaved worlds and alien species.\n", + " - expected output: Animorphs\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.0, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: Are the Laleli Mosque and Esma Sultan Mansion located in the same neighborhood?\n", + " - actual output: The Laleli Mosque is located in Laleli, Fatih, Istanbul. The Esma Sultan Mansion is located in the Ortaköy neighborhood of Istanbul. Therefore, they are not located in the same neighborhood.\n", + " - expected output: no\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.22222222222222218, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: The director of the romantic comedy \"Big Stone Gap\" is based in what New York city?\n", + " - actual output: The director of the romantic comedy \"Big Stone Gap\" is Adriana Trigiani, and there is no specific New York city mentioned in the provided context.\n", + " - expected output: Greenwich Village, New York City\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.11764705882352941, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: 2014 S/S is the debut album of a South Korean boy group that was formed by who?\n", + " - actual output: The South Korean boy group that debuted with the album \"2014 S/S\" was formed by FNC Entertainment.\n", + " - expected output: YG Entertainment\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.18181818181818182, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: Who was known by his stage name Aladin and helped organizations improve their performance as a consultant?\n", + " - actual output: Eenasul Fateh, known by his stage name Aladin, is a Bangladeshi-British cultural practitioner, magician, live artist, and former international management consultant.\n", + " - expected output: Eenasul Fateh\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.0, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: The arena where the Lewiston Maineiacs played their home games can seat how many people?\n", + " - actual output: The Lewiston Maineiacs played their home games at the Androscoggin Bank Colisée. The capacity of the arena is not directly stated in the context, but it is implied from the information provided.\n", + " - expected output: 3,677 seated\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.12903225806451613, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: Who is older, Annie Morton or Terry Richardson?\n", + " - actual output: Annie Morton was born on October 8, 1970, while Terry Richardson's birthdate is not provided in the context. Therefore, based on the available information, Annie Morton is older than Terry Richardson.\n", + " - expected output: Terry Richardson\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Metrics Summary\n", + "\n", + " - ❌ Official hotpot F1 score (score: 0.0, threshold: 0.5, strict: False, evaluation model: None, reason: None, error: None)\n", + "\n", + "For test case:\n", + "\n", + " - input: Are Local H and For Against both from the United States?\n", + " - actual output: Yes, Local H is from the United States, specifically mentioned as a band from the Chicago suburbs, and For Against is also a band mentioned as being from the United States, although specific details about For Against's origin are not provided in the context.\n", + " - expected output: yes\n", + " - context: None\n", + " - retrieval context: None\n", + "\n", + "======================================================================\n", + "\n", + "Overall Metric Pass Rates\n", + "\n", + "Official hotpot F1 score: 0.00% pass rate\n", + "\n", + "======================================================================\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001B[38;2;5;245;141m✓\u001B[0m Tests finished 🎉! Run \u001B[32m'deepeval login'\u001B[0m to save and analyze evaluation results on Confident AI. \n", + "‼️ Friendly reminder 😇: You can also run evaluations with ALL of deepeval's metrics directly on Confident AI \n", + "instead.\n" + ], + "text/html": [ + "
 Tests finished 🎉! Run 'deepeval login' to save and analyze evaluation results on Confident AI. \n",
+       "‼️  Friendly reminder 😇: You can also run evaluations with ALL of deepeval's metrics directly on Confident AI \n",
+       "instead.\n",
+       "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F1 score: 0.0752096441829576\n" + ] + } + ], + "execution_count": 11 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-05T19:23:30.332977Z", + "start_time": "2025-01-05T19:23:30.331538Z" + } + }, + "cell_type": "code", + "source": "", + "id": "783985c35d1126de", + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -865,6 +1439,22 @@ "# Give us a star if you like it!\n", "https://github.com/topoteretes/cognee" ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "d042efe5d38144fa" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "9436af97520e0ae" } ], "metadata": { diff --git a/notebooks/cognee_hotpot_eval.ipynb b/notebooks/cognee_hotpot_eval.ipynb new file mode 100644 index 000000000..445a13c1d --- /dev/null +++ b/notebooks/cognee_hotpot_eval.ipynb @@ -0,0 +1,229 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Evaluation on the hotpotQA dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from evals.eval_on_hotpot import eval_on_hotpotQA\n", + "from evals.eval_on_hotpot import answer_with_cognee\n", + "from evals.eval_on_hotpot import answer_without_cognee\n", + "from evals.eval_on_hotpot import eval_answers\n", + "from cognee.base_config import get_base_config\n", + "from pathlib import Path\n", + "from tqdm import tqdm\n", + "import wget\n", + "import json\n", + "import statistics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Getting the answers for the first num_samples questions of the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "answer_provider = answer_with_cognee # For native LLM answers use answer_without_cognee\n", + "num_samples = 10 # With cognee, it takes ~1m10s per sample\n", + "\n", + "base_config = get_base_config()\n", + "data_root_dir = base_config.data_root_directory\n", + "\n", + "if not Path(data_root_dir).exists():\n", + " Path(data_root_dir).mkdir()\n", + "\n", + "filepath = data_root_dir / Path(\"hotpot_dev_fullwiki_v1.json\")\n", + "if not filepath.exists():\n", + " url = \"http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json\"\n", + " wget.download(url, out=data_root_dir)\n", + "\n", + "with open(filepath, \"r\") as file:\n", + " dataset = json.load(file)\n", + "\n", + "instances = dataset if not num_samples else dataset[:num_samples]\n", + "answers = []\n", + "for instance in tqdm(instances, desc=\"Getting answers\"):\n", + " answer = await answer_provider(instance)\n", + " answers.append(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculating the official HotpotQA benchmark metrics: F1 score and EM" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from evals.deepeval_metrics import f1_score_metric\n", + "from evals.deepeval_metrics import em_score_metric" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f1_metric = f1_score_metric()\n", + "eval_results = await eval_answers(instances, answers, f1_metric)\n", + "avg_f1_score = statistics.mean(\n", + " [result.metrics_data[0].score for result in eval_results.test_results]\n", + ")\n", + "print(\"F1 score: \", avg_f1_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "em_metric = em_score_metric()\n", + "eval_results = await eval_answers(instances, answers, em_metric)\n", + "avg_em_score = statistics.mean(\n", + " [result.metrics_data[0].score for result in eval_results.test_results]\n", + ")\n", + "print(\"EM score: \", avg_em_score)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculating a custom metric called Correctness\n", + "##### Correctness is judged by an LLM" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from evals.deepeval_metrics import correctness_metric" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "eval_results = await eval_answers(\n", + " instances, answers, correctness_metric\n", + ") # note that instantiation is not needed for correctness metric as it is already an instance\n", + "avg_correctness_score = statistics.mean(\n", + " [result.metrics_data[0].score for result in eval_results.test_results]\n", + ")\n", + "print(\"Correctness score: \", avg_correctness_score)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using a metric from Deepeval" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from deepeval.metrics import AnswerRelevancyMetric" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "relevancy_metric = AnswerRelevancyMetric()\n", + "eval_results = await eval_answers(\n", + " instances, answers, relevancy_metric\n", + ") # note that instantiation is not needed for correctness metric as it is already an instance\n", + "avg_relevancy_score = statistics.mean(\n", + " [result.metrics_data[0].score for result in eval_results.test_results]\n", + ")\n", + "print(\"Relevancy score: \", avg_relevancy_score)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Answering and eval in one step" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "answer_provider = answer_without_cognee\n", + "f1_metric = f1_score_metric()\n", + "f1_score = await eval_on_hotpotQA(\n", + " answer_provider, num_samples=10, eval_metric=f1_metric\n", + ") # takes ~1m10s per sample\n", + "print(\"F1 score: \", f1_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "myenv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.20" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/cognee_llama_index.ipynb b/notebooks/cognee_llama_index.ipynb index ec899aaea..c7c28af5f 100644 --- a/notebooks/cognee_llama_index.ipynb +++ b/notebooks/cognee_llama_index.ipynb @@ -56,10 +56,7 @@ "metadata": {}, "outputs": [], "source": [ - "documents = [\n", - " Document(text=f\"{row['title']}: {row['text']}\")\n", - " for i, row in news.iterrows()\n", - "]" + "documents = [Document(text=f\"{row['title']}: {row['text']}\") for i, row in news.iterrows()]" ] }, { @@ -78,33 +75,33 @@ "import os\n", "\n", "# Setting environment variables\n", - "if \"GRAPHISTRY_USERNAME\" not in os.environ: \n", + "if \"GRAPHISTRY_USERNAME\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_USERNAME\"] = \"\"\n", "\n", - "if \"GRAPHISTRY_PASSWORD\" not in os.environ: \n", + "if \"GRAPHISTRY_PASSWORD\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_PASSWORD\"] = \"\"\n", "\n", "if \"LLM_API_KEY\" not in os.environ:\n", " os.environ[\"LLM_API_KEY\"] = \"\"\n", "\n", "# \"neo4j\" or \"networkx\"\n", - "os.environ[\"GRAPH_DATABASE_PROVIDER\"]=\"networkx\" \n", + "os.environ[\"GRAPH_DATABASE_PROVIDER\"] = \"networkx\"\n", "# Not needed if using networkx\n", - "#os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", "\n", "# \"pgvector\", \"qdrant\", \"weaviate\" or \"lancedb\"\n", - "os.environ[\"VECTOR_DB_PROVIDER\"]=\"lancedb\" \n", + "os.environ[\"VECTOR_DB_PROVIDER\"] = \"lancedb\"\n", "# Not needed if using \"lancedb\" or \"pgvector\"\n", "# os.environ[\"VECTOR_DB_URL\"]=\"\"\n", "# os.environ[\"VECTOR_DB_KEY\"]=\"\"\n", "\n", "# Relational Database provider \"sqlite\" or \"postgres\"\n", - "os.environ[\"DB_PROVIDER\"]=\"sqlite\"\n", + "os.environ[\"DB_PROVIDER\"] = \"sqlite\"\n", "\n", "# Database name\n", - "os.environ[\"DB_NAME\"]=\"cognee_db\"\n", + "os.environ[\"DB_NAME\"] = \"cognee_db\"\n", "\n", "# Postgres specific parameters (Only if Postgres or PGVector is used)\n", "# os.environ[\"DB_HOST\"]=\"127.0.0.1\"\n", @@ -128,8 +125,12 @@ "source": [ "from typing import Union, BinaryIO\n", "\n", - "from cognee.infrastructure.databases.vector.pgvector import create_db_and_tables as create_pgvector_db_and_tables\n", - "from cognee.infrastructure.databases.relational import create_db_and_tables as create_relational_db_and_tables\n", + "from cognee.infrastructure.databases.vector.pgvector import (\n", + " create_db_and_tables as create_pgvector_db_and_tables,\n", + ")\n", + "from cognee.infrastructure.databases.relational import (\n", + " create_db_and_tables as create_relational_db_and_tables,\n", + ")\n", "from cognee.modules.users.models import User\n", "from cognee.modules.users.methods import get_default_user\n", "from cognee.tasks.ingestion.ingest_data_with_metadata import ingest_data_with_metadata\n", @@ -139,8 +140,13 @@ "await cognee.prune.prune_data()\n", "await cognee.prune.prune_system(metadata=True)\n", "\n", + "\n", "# Add the LlamaIndex documents, and make it available for cognify\n", - "async def add(data: Union[BinaryIO, list[BinaryIO], str, list[str]], dataset_name: str = \"main_dataset\", user: User = None):\n", + "async def add(\n", + " data: Union[BinaryIO, list[BinaryIO], str, list[str]],\n", + " dataset_name: str = \"main_dataset\",\n", + " user: User = None,\n", + "):\n", " await create_relational_db_and_tables()\n", " await create_pgvector_db_and_tables()\n", "\n", @@ -149,6 +155,7 @@ "\n", " await ingest_data_with_metadata(data, dataset_name, user)\n", "\n", + "\n", "await add(documents)\n", "\n", "# Use LLMs and cognee to create knowledge graph\n", @@ -198,7 +205,9 @@ "from cognee.shared.utils import render_graph\n", "\n", "# Get graph\n", - "graphistry.login(username=os.getenv(\"GRAPHISTRY_USERNAME\"), password=os.getenv(\"GRAPHISTRY_PASSWORD\"))\n", + "graphistry.login(\n", + " username=os.getenv(\"GRAPHISTRY_USERNAME\"), password=os.getenv(\"GRAPHISTRY_PASSWORD\")\n", + ")\n", "graph_engine = await get_graph_engine()\n", "\n", "graph_url = await render_graph(graph_engine.graph)\n", diff --git a/notebooks/cognee_multimedia_demo.ipynb b/notebooks/cognee_multimedia_demo.ipynb index 2d35132f6..d373b5bd9 100644 --- a/notebooks/cognee_multimedia_demo.ipynb +++ b/notebooks/cognee_multimedia_demo.ipynb @@ -32,11 +32,13 @@ "# cognee knowledge graph will be created based on the text\n", "# and description of these files\n", "mp3_file_path = os.path.join(\n", - " os.path.abspath(''), \"../\",\n", + " os.path.abspath(\"\"),\n", + " \"../\",\n", " \".data/multimedia/text_to_speech.mp3\",\n", ")\n", "png_file_path = os.path.join(\n", - " os.path.abspath(''), \"../\",\n", + " os.path.abspath(\"\"),\n", + " \"../\",\n", " \".data/multimedia/example.png\",\n", ")" ] @@ -57,33 +59,33 @@ "import os\n", "\n", "# Setting environment variables\n", - "if \"GRAPHISTRY_USERNAME\" not in os.environ: \n", + "if \"GRAPHISTRY_USERNAME\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_USERNAME\"] = \"\"\n", "\n", - "if \"GRAPHISTRY_PASSWORD\" not in os.environ: \n", + "if \"GRAPHISTRY_PASSWORD\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_PASSWORD\"] = \"\"\n", "\n", "if \"LLM_API_KEY\" not in os.environ:\n", " os.environ[\"LLM_API_KEY\"] = \"\"\n", "\n", "# \"neo4j\" or \"networkx\"\n", - "os.environ[\"GRAPH_DATABASE_PROVIDER\"]=\"networkx\" \n", + "os.environ[\"GRAPH_DATABASE_PROVIDER\"] = \"networkx\"\n", "# Not needed if using networkx\n", - "#os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", "\n", "# \"pgvector\", \"qdrant\", \"weaviate\" or \"lancedb\"\n", - "os.environ[\"VECTOR_DB_PROVIDER\"]=\"lancedb\" \n", + "os.environ[\"VECTOR_DB_PROVIDER\"] = \"lancedb\"\n", "# Not needed if using \"lancedb\" or \"pgvector\"\n", "# os.environ[\"VECTOR_DB_URL\"]=\"\"\n", "# os.environ[\"VECTOR_DB_KEY\"]=\"\"\n", "\n", "# Relational Database provider \"sqlite\" or \"postgres\"\n", - "os.environ[\"DB_PROVIDER\"]=\"sqlite\"\n", + "os.environ[\"DB_PROVIDER\"] = \"sqlite\"\n", "\n", "# Database name\n", - "os.environ[\"DB_NAME\"]=\"cognee_db\"\n", + "os.environ[\"DB_NAME\"] = \"cognee_db\"\n", "\n", "# Postgres specific parameters (Only if Postgres or PGVector is used)\n", "# os.environ[\"DB_HOST\"]=\"127.0.0.1\"\n", diff --git a/notebooks/hr_demo.ipynb b/notebooks/hr_demo.ipynb index ad3fc09d6..c6c3c3ed1 100644 --- a/notebooks/hr_demo.ipynb +++ b/notebooks/hr_demo.ipynb @@ -60,7 +60,7 @@ "Experience with deep learning frameworks (e.g., TensorFlow, PyTorch).\n", "Strong problem-solving skills and attention to detail.\n", "Candidate CVs\n", - "\"\"\"\n" + "\"\"\"" ] }, { @@ -298,33 +298,33 @@ "import os\n", "\n", "# Setting environment variables\n", - "if \"GRAPHISTRY_USERNAME\" not in os.environ: \n", + "if \"GRAPHISTRY_USERNAME\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_USERNAME\"] = \"\"\n", "\n", - "if \"GRAPHISTRY_PASSWORD\" not in os.environ: \n", + "if \"GRAPHISTRY_PASSWORD\" not in os.environ:\n", " os.environ[\"GRAPHISTRY_PASSWORD\"] = \"\"\n", "\n", "if \"LLM_API_KEY\" not in os.environ:\n", " os.environ[\"LLM_API_KEY\"] = \"\"\n", "\n", "# \"neo4j\" or \"networkx\"\n", - "os.environ[\"GRAPH_DATABASE_PROVIDER\"]=\"networkx\" \n", + "os.environ[\"GRAPH_DATABASE_PROVIDER\"] = \"networkx\"\n", "# Not needed if using networkx\n", - "#os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", - "#os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_URL\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_USERNAME\"]=\"\"\n", + "# os.environ[\"GRAPH_DATABASE_PASSWORD\"]=\"\"\n", "\n", "# \"pgvector\", \"qdrant\", \"weaviate\" or \"lancedb\"\n", - "os.environ[\"VECTOR_DB_PROVIDER\"]=\"lancedb\" \n", + "os.environ[\"VECTOR_DB_PROVIDER\"] = \"lancedb\"\n", "# Not needed if using \"lancedb\" or \"pgvector\"\n", "# os.environ[\"VECTOR_DB_URL\"]=\"\"\n", "# os.environ[\"VECTOR_DB_KEY\"]=\"\"\n", "\n", "# Relational Database provider \"sqlite\" or \"postgres\"\n", - "os.environ[\"DB_PROVIDER\"]=\"sqlite\"\n", + "os.environ[\"DB_PROVIDER\"] = \"sqlite\"\n", "\n", "# Database name\n", - "os.environ[\"DB_NAME\"]=\"cognee_db\"\n", + "os.environ[\"DB_NAME\"] = \"cognee_db\"\n", "\n", "# Postgres specific parameters (Only if Postgres or PGVector is used)\n", "# os.environ[\"DB_HOST\"]=\"127.0.0.1\"\n", @@ -400,28 +400,35 @@ "from cognee.modules.pipelines.tasks.Task import Task\n", "from cognee.modules.pipelines import run_tasks\n", "from cognee.modules.users.models import User\n", - "from cognee.tasks.documents import check_permissions_on_documents, classify_documents, extract_chunks_from_documents\n", + "from cognee.tasks.documents import (\n", + " check_permissions_on_documents,\n", + " classify_documents,\n", + " extract_chunks_from_documents,\n", + ")\n", "from cognee.tasks.graph import extract_graph_from_data\n", "from cognee.tasks.storage import add_data_points\n", "from cognee.tasks.summarization import summarize_text\n", "\n", + "\n", "async def run_cognify_pipeline(dataset: Dataset, user: User = None):\n", - " data_documents: list[Data] = await get_dataset_data(dataset_id = dataset.id)\n", + " data_documents: list[Data] = await get_dataset_data(dataset_id=dataset.id)\n", "\n", " try:\n", " cognee_config = get_cognify_config()\n", "\n", " tasks = [\n", " Task(classify_documents),\n", - " Task(check_permissions_on_documents, user = user, permissions = [\"write\"]),\n", - " Task(extract_chunks_from_documents), # Extract text chunks based on the document type.\n", - " Task(extract_graph_from_data, graph_model = KnowledgeGraph, task_config = { \"batch_size\": 10 }), # Generate knowledge graphs from the document chunks.\n", + " Task(check_permissions_on_documents, user=user, permissions=[\"write\"]),\n", + " Task(extract_chunks_from_documents), # Extract text chunks based on the document type.\n", + " Task(\n", + " extract_graph_from_data, graph_model=KnowledgeGraph, task_config={\"batch_size\": 10}\n", + " ), # Generate knowledge graphs from the document chunks.\n", " Task(\n", " summarize_text,\n", - " summarization_model = cognee_config.summarization_model,\n", - " task_config = { \"batch_size\": 10 }\n", + " summarization_model=cognee_config.summarization_model,\n", + " task_config={\"batch_size\": 10},\n", " ),\n", - " Task(add_data_points, task_config = { \"batch_size\": 10 }),\n", + " Task(add_data_points, task_config={\"batch_size\": 10}),\n", " ]\n", "\n", " pipeline = run_tasks(tasks, data_documents)\n", @@ -429,7 +436,7 @@ " async for result in pipeline:\n", " print(result)\n", " except Exception as error:\n", - " raise error\n" + " raise error" ] }, { @@ -474,7 +481,9 @@ "from cognee.infrastructure.databases.graph import get_graph_engine\n", "import graphistry\n", "\n", - "graphistry.login(username=os.getenv(\"GRAPHISTRY_USERNAME\"), password=os.getenv(\"GRAPHISTRY_PASSWORD\"))\n", + "graphistry.login(\n", + " username=os.getenv(\"GRAPHISTRY_USERNAME\"), password=os.getenv(\"GRAPHISTRY_PASSWORD\")\n", + ")\n", "\n", "graph_engine = await get_graph_engine()\n", "\n", @@ -511,11 +520,14 @@ "\n", " result_values = list(results.to_dict(\"index\").values())\n", "\n", - " return [dict(\n", - " id = str(result[\"id\"]),\n", - " payload = result[\"payload\"],\n", - " score = result[\"_distance\"],\n", - " ) for result in result_values]\n", + " return [\n", + " dict(\n", + " id=str(result[\"id\"]),\n", + " payload=result[\"payload\"],\n", + " score=result[\"_distance\"],\n", + " )\n", + " for result in result_values\n", + " ]\n", "\n", "\n", "from cognee.infrastructure.databases.vector import get_vector_engine\n", @@ -554,7 +566,7 @@ "node = (await vector_engine.search(\"entity_name\", \"sarah.nguyen@example.com\"))[0]\n", "node_name = node.payload[\"text\"]\n", "\n", - "search_results = await cognee.search(SearchType.SUMMARIES, query_text = node_name)\n", + "search_results = await cognee.search(SearchType.SUMMARIES, query_text=node_name)\n", "print(\"\\n\\Extracted summaries are:\\n\")\n", "for result in search_results:\n", " print(f\"{result}\\n\")" @@ -575,7 +587,7 @@ "metadata": {}, "outputs": [], "source": [ - "search_results = await cognee.search(SearchType.CHUNKS, query_text = node_name)\n", + "search_results = await cognee.search(SearchType.CHUNKS, query_text=node_name)\n", "print(\"\\n\\nExtracted chunks are:\\n\")\n", "for result in search_results:\n", " print(f\"{result}\\n\")" @@ -596,26 +608,42 @@ "metadata": {}, "outputs": [], "source": [ - "search_results = await cognee.search(SearchType.INSIGHTS, query_text = node_name)\n", + "search_results = await cognee.search(SearchType.INSIGHTS, query_text=node_name)\n", "print(\"\\n\\nExtracted sentences are:\\n\")\n", "for result in search_results:\n", " print(f\"{result}\\n\")" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "## Let's add evals", - "id": "e519e30c0423c2a" + "id": "e519e30c0423c2a", + "metadata": {}, + "source": "## Let's add evals" }, { + "cell_type": "code", + "execution_count": 3, + "id": "b22ae3d868fa5606", "metadata": { "ExecuteTime": { "end_time": "2024-12-19T18:01:11.387716Z", "start_time": "2024-12-19T18:01:11.278042Z" } }, - "cell_type": "code", + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'deepeval'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mevals\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01meval_on_hotpot\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m eval_on_hotpotQA\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mevals\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01meval_on_hotpot\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m answer_with_cognee\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mevals\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01meval_on_hotpot\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m answer_without_cognee\n", + "File \u001b[0;32m~/cognee/evals/eval_on_hotpot.py:7\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mstatistics\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpathlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Path\n\u001b[0;32m----> 7\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mdeepeval\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmetrics\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwget\u001b[39;00m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdeepeval\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataset\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m EvaluationDataset\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'deepeval'" + ] + } + ], "source": [ "from evals.eval_on_hotpot import eval_on_hotpotQA\n", "from evals.eval_on_hotpot import answer_with_cognee\n", @@ -626,33 +654,18 @@ "from tqdm import tqdm\n", "import wget\n", "import json\n", - "import statistics\n" - ], - "id": "b22ae3d868fa5606", - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'deepeval'", - "output_type": "error", - "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[3], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mevals\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01meval_on_hotpot\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m eval_on_hotpotQA\n\u001B[1;32m 2\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mevals\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01meval_on_hotpot\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m answer_with_cognee\n\u001B[1;32m 3\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mevals\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01meval_on_hotpot\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m answer_without_cognee\n", - "File \u001B[0;32m~/cognee/evals/eval_on_hotpot.py:7\u001B[0m\n\u001B[1;32m 4\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mstatistics\u001B[39;00m\n\u001B[1;32m 5\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mpathlib\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m Path\n\u001B[0;32m----> 7\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mdeepeval\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mmetrics\u001B[39;00m\n\u001B[1;32m 8\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mwget\u001B[39;00m\n\u001B[1;32m 9\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mdeepeval\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mdataset\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m EvaluationDataset\n", - "\u001B[0;31mModuleNotFoundError\u001B[0m: No module named 'deepeval'" - ] - } - ], - "execution_count": 3 + "import statistics" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "728355d390e3a01b", + "metadata": {}, + "outputs": [], "source": [ - "answer_provider = answer_with_cognee # For native LLM answers use answer_without_cognee\n", - "num_samples = 10 # With cognee, it takes ~1m10s per sample\n", + "answer_provider = answer_with_cognee # For native LLM answers use answer_without_cognee\n", + "num_samples = 10 # With cognee, it takes ~1m10s per sample\n", "\n", "base_config = get_base_config()\n", "data_root_dir = base_config.data_root_directory\n", @@ -662,7 +675,7 @@ "\n", "filepath = data_root_dir / Path(\"hotpot_dev_fullwiki_v1.json\")\n", "if not filepath.exists():\n", - " url = 'http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json'\n", + " url = \"http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_fullwiki_v1.json\"\n", " wget.download(url, out=data_root_dir)\n", "\n", "with open(filepath, \"r\") as file:\n", @@ -673,8 +686,7 @@ "for instance in tqdm(instances, desc=\"Getting answers\"):\n", " answer = answer_provider(instance)\n", " answers.append(answer)" - ], - "id": "728355d390e3a01b" + ] }, { "cell_type": "markdown", diff --git a/poetry.lock b/poetry.lock index c9ea09006..ddcaf6618 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiofiles" @@ -136,13 +136,13 @@ speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" -version = "1.3.1" +version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, ] [package.dependencies] @@ -223,24 +223,24 @@ vertex = ["google-auth (>=2,<3)"] [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.8.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, + {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -332,13 +332,13 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock [[package]] name = "astroid" -version = "3.3.5" +version = "3.3.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" files = [ - {file = "astroid-3.3.5-py3-none-any.whl", hash = "sha256:a9d1c946ada25098d790e079ba2a1b112157278f3fb7e718ae6a9252f5835dc8"}, - {file = "astroid-3.3.5.tar.gz", hash = "sha256:5cfc40ae9f68311075d27ef68a4841bdc5cc7f6cf86671b49f00607d30188e2d"}, + {file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"}, + {file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"}, ] [package.dependencies] @@ -452,32 +452,32 @@ test = ["distro (>=1.9.0,<1.10.0)", "flake8 (>=6.1,<7.0)", "flake8-pyi (>=24.1.0 [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, - {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "authlib" -version = "1.3.2" +version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = true python-versions = ">=3.8" files = [ - {file = "Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc"}, - {file = "authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2"}, + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, ] [package.dependencies] @@ -501,7 +501,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" -optional = true +optional = false python-versions = ">=3.7,<4.0" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, @@ -579,24 +579,47 @@ files = [ ] [package.dependencies] +tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.5)"] +[[package]] +name = "bokeh" +version = "3.6.2" +description = "Interactive plots and applications in the browser from Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "bokeh-3.6.2-py3-none-any.whl", hash = "sha256:fddc4b91f8b40178c0e3e83dfcc33886d7803a3a1f041a840834255e435a18c2"}, + {file = "bokeh-3.6.2.tar.gz", hash = "sha256:2f3043d9ecb3d5dc2e8c0ebf8ad55727617188d4e534f3e7208b36357e352396"}, +] + +[package.dependencies] +contourpy = ">=1.2" +Jinja2 = ">=2.9" +numpy = ">=1.16" +packaging = ">=16.8" +pandas = ">=1.2" +pillow = ">=7.1.0" +PyYAML = ">=3.10" +tornado = ">=6.2" +xyzservices = ">=2021.09.1" + [[package]] name = "boto3" -version = "1.35.74" +version = "1.35.94" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.74-py3-none-any.whl", hash = "sha256:dab5bddbbe57dc707b6f6a1f25dc2823b8e234b6fe99fafef7fc406ab73031b9"}, - {file = "boto3-1.35.74.tar.gz", hash = "sha256:88370c6845ba71a4dae7f6b357099df29b3965da584be040c8e72c9902bc9492"}, + {file = "boto3-1.35.94-py3-none-any.whl", hash = "sha256:516c514fb447d6f216833d06a0781c003fcf43099a4ca2f5a363a8afe0942070"}, + {file = "boto3-1.35.94.tar.gz", hash = "sha256:5aa606239f0fe0dca0506e0ad6bbe4c589048e7e6c2486cee5ec22b6aa7ec2f8"}, ] [package.dependencies] -botocore = ">=1.35.74,<1.36.0" +botocore = ">=1.35.94,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -605,46 +628,32 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.74" +version = "1.35.94" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.74-py3-none-any.whl", hash = "sha256:9ac9d33d84dd9f05b35085de081552342a2c9ae22e3c4ee105723c9e92c07bd9"}, - {file = "botocore-1.35.74.tar.gz", hash = "sha256:de5c4fa9a24cef3a758974857b5c5820a12fad345ebf33c052a5988e88f33634"}, + {file = "botocore-1.35.94-py3-none-any.whl", hash = "sha256:d784d944865d8279c79d2301fc09ac28b5221d4e7328fb4e23c642c253b9932c"}, + {file = "botocore-1.35.94.tar.gz", hash = "sha256:2b3309b356541faa4d88bb957dcac1d8004aa44953c0b7d4521a6cc5d3d5d6ba"}, ] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" -urllib3 = [ - {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, - {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, -] +urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] crt = ["awscrt (==0.22.0)"] -[[package]] -name = "cachetools" -version = "5.5.0" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, - {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, -] - [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] @@ -726,6 +735,17 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + [[package]] name = "chardet" version = "5.2.0" @@ -739,127 +759,114 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.0" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.7" files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -895,76 +902,65 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.3.0" +version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, ] [package.dependencies] @@ -979,73 +975,73 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.8" +version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, - {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed"}, - {file = "coverage-7.6.8-cp310-cp310-win32.whl", hash = "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e"}, - {file = "coverage-7.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0"}, - {file = "coverage-7.6.8-cp311-cp311-win32.whl", hash = "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801"}, - {file = "coverage-7.6.8-cp311-cp311-win_amd64.whl", hash = "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443"}, - {file = "coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad"}, - {file = "coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b"}, - {file = "coverage-7.6.8-cp313-cp313-win32.whl", hash = "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146"}, - {file = "coverage-7.6.8-cp313-cp313-win_amd64.whl", hash = "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b"}, - {file = "coverage-7.6.8-cp313-cp313t-win32.whl", hash = "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71"}, - {file = "coverage-7.6.8-cp313-cp313t-win_amd64.whl", hash = "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea"}, - {file = "coverage-7.6.8-cp39-cp39-win32.whl", hash = "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e"}, - {file = "coverage-7.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076"}, - {file = "coverage-7.6.8-pp39.pp310-none-any.whl", hash = "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce"}, - {file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] [package.extras] @@ -1053,51 +1049,53 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "43.0.3" +version = "44.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false -python-versions = ">=3.7" +python-versions = "!=3.9.0,!=3.9.1,>=3.7" files = [ - {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, - {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, - {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, - {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, - {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, - {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, - {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, + {file = "cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543"}, + {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385"}, + {file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e"}, + {file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e"}, + {file = "cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053"}, + {file = "cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd"}, + {file = "cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c"}, + {file = "cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba"}, + {file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64"}, + {file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285"}, + {file = "cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417"}, + {file = "cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa"}, + {file = "cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c"}, + {file = "cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02"}, ] [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0)"] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"] +pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.0)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] [[package]] @@ -1184,33 +1182,37 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.2" +version = "1.8.9" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7ee2e1afbf44b138c005e4380097d92532e1001580853a7cb40ed84e0ef1c3d2"}, - {file = "debugpy-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8c3f7c53130a070f0fc845a0f2cee8ed88d220d6b04595897b66605df1edd6"}, - {file = "debugpy-1.8.2-cp310-cp310-win32.whl", hash = "sha256:f179af1e1bd4c88b0b9f0fa153569b24f6b6f3de33f94703336363ae62f4bf47"}, - {file = "debugpy-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:0600faef1d0b8d0e85c816b8bb0cb90ed94fc611f308d5fde28cb8b3d2ff0fe3"}, - {file = "debugpy-1.8.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a"}, - {file = "debugpy-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634"}, - {file = "debugpy-1.8.2-cp311-cp311-win32.whl", hash = "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad"}, - {file = "debugpy-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:d3408fddd76414034c02880e891ea434e9a9cf3a69842098ef92f6e809d09afa"}, - {file = "debugpy-1.8.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:5d3ccd39e4021f2eb86b8d748a96c766058b39443c1f18b2dc52c10ac2757835"}, - {file = "debugpy-1.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62658aefe289598680193ff655ff3940e2a601765259b123dc7f89c0239b8cd3"}, - {file = "debugpy-1.8.2-cp312-cp312-win32.whl", hash = "sha256:bd11fe35d6fd3431f1546d94121322c0ac572e1bfb1f6be0e9b8655fb4ea941e"}, - {file = "debugpy-1.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:15bc2f4b0f5e99bf86c162c91a74c0631dbd9cef3c6a1d1329c946586255e859"}, - {file = "debugpy-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:5a019d4574afedc6ead1daa22736c530712465c0c4cd44f820d803d937531b2d"}, - {file = "debugpy-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40f062d6877d2e45b112c0bbade9a17aac507445fd638922b1a5434df34aed02"}, - {file = "debugpy-1.8.2-cp38-cp38-win32.whl", hash = "sha256:c78ba1680f1015c0ca7115671fe347b28b446081dada3fedf54138f44e4ba031"}, - {file = "debugpy-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cf327316ae0c0e7dd81eb92d24ba8b5e88bb4d1b585b5c0d32929274a66a5210"}, - {file = "debugpy-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1523bc551e28e15147815d1397afc150ac99dbd3a8e64641d53425dba57b0ff9"}, - {file = "debugpy-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e24ccb0cd6f8bfaec68d577cb49e9c680621c336f347479b3fce060ba7c09ec1"}, - {file = "debugpy-1.8.2-cp39-cp39-win32.whl", hash = "sha256:7f8d57a98c5a486c5c7824bc0b9f2f11189d08d73635c326abef268f83950326"}, - {file = "debugpy-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:16c8dcab02617b75697a0a925a62943e26a0330da076e2a10437edd9f0bf3755"}, - {file = "debugpy-1.8.2-py2.py3-none-any.whl", hash = "sha256:16e16df3a98a35c63c3ab1e4d19be4cbc7fdda92d9ddc059294f18910928e0ca"}, - {file = "debugpy-1.8.2.zip", hash = "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00"}, + {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"}, + {file = "debugpy-1.8.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada7fb65102a4d2c9ab62e8908e9e9f12aed9d76ef44880367bc9308ebe49a0f"}, + {file = "debugpy-1.8.9-cp310-cp310-win32.whl", hash = "sha256:c36856343cbaa448171cba62a721531e10e7ffb0abff838004701454149bc037"}, + {file = "debugpy-1.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:17c5e0297678442511cf00a745c9709e928ea4ca263d764e90d233208889a19e"}, + {file = "debugpy-1.8.9-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:b74a49753e21e33e7cf030883a92fa607bddc4ede1aa4145172debc637780040"}, + {file = "debugpy-1.8.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d22dacdb0e296966d7d74a7141aaab4bec123fa43d1a35ddcb39bf9fd29d70"}, + {file = "debugpy-1.8.9-cp311-cp311-win32.whl", hash = "sha256:8138efff315cd09b8dcd14226a21afda4ca582284bf4215126d87342bba1cc66"}, + {file = "debugpy-1.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:ff54ef77ad9f5c425398efb150239f6fe8e20c53ae2f68367eba7ece1e96226d"}, + {file = "debugpy-1.8.9-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:957363d9a7a6612a37458d9a15e72d03a635047f946e5fceee74b50d52a9c8e2"}, + {file = "debugpy-1.8.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e565fc54b680292b418bb809f1386f17081d1346dca9a871bf69a8ac4071afe"}, + {file = "debugpy-1.8.9-cp312-cp312-win32.whl", hash = "sha256:3e59842d6c4569c65ceb3751075ff8d7e6a6ada209ceca6308c9bde932bcef11"}, + {file = "debugpy-1.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:66eeae42f3137eb428ea3a86d4a55f28da9bd5a4a3d369ba95ecc3a92c1bba53"}, + {file = "debugpy-1.8.9-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:957ecffff80d47cafa9b6545de9e016ae8c9547c98a538ee96ab5947115fb3dd"}, + {file = "debugpy-1.8.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1efbb3ff61487e2c16b3e033bc8595aea578222c08aaf3c4bf0f93fadbd662ee"}, + {file = "debugpy-1.8.9-cp313-cp313-win32.whl", hash = "sha256:7c4d65d03bee875bcb211c76c1d8f10f600c305dbd734beaed4077e902606fee"}, + {file = "debugpy-1.8.9-cp313-cp313-win_amd64.whl", hash = "sha256:e46b420dc1bea64e5bbedd678148be512442bc589b0111bd799367cde051e71a"}, + {file = "debugpy-1.8.9-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:472a3994999fe6c0756945ffa359e9e7e2d690fb55d251639d07208dbc37caea"}, + {file = "debugpy-1.8.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365e556a4772d7d0d151d7eb0e77ec4db03bcd95f26b67b15742b88cacff88e9"}, + {file = "debugpy-1.8.9-cp38-cp38-win32.whl", hash = "sha256:54a7e6d3014c408eb37b0b06021366ee985f1539e12fe49ca2ee0d392d9ceca5"}, + {file = "debugpy-1.8.9-cp38-cp38-win_amd64.whl", hash = "sha256:8e99c0b1cc7bf86d83fb95d5ccdc4ad0586d4432d489d1f54e4055bcc795f693"}, + {file = "debugpy-1.8.9-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:7e8b079323a56f719977fde9d8115590cb5e7a1cba2fcee0986ef8817116e7c1"}, + {file = "debugpy-1.8.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6953b335b804a41f16a192fa2e7851bdcfd92173cbb2f9f777bb934f49baab65"}, + {file = "debugpy-1.8.9-cp39-cp39-win32.whl", hash = "sha256:7e646e62d4602bb8956db88b1e72fe63172148c1e25c041e03b103a25f36673c"}, + {file = "debugpy-1.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:3d9755e77a2d680ce3d2c5394a444cf42be4a592caaf246dbfbdd100ffcf7ae5"}, + {file = "debugpy-1.8.9-py2.py3-none-any.whl", hash = "sha256:cc37a6c9987ad743d9c3a14fa1b1a14b7e4e6041f9dd0c8abf8895fe7a97b899"}, + {file = "debugpy-1.8.9.zip", hash = "sha256:1339e14c7d980407248f09824d1b25ff5c5616651689f1e0f0e51bdead3ea13e"}, ] [[package]] @@ -1226,31 +1228,31 @@ files = [ [[package]] name = "deepdiff" -version = "8.0.1" +version = "8.1.1" description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." optional = true python-versions = ">=3.8" files = [ - {file = "deepdiff-8.0.1-py3-none-any.whl", hash = "sha256:42e99004ce603f9a53934c634a57b04ad5900e0d8ed0abb15e635767489cbc05"}, - {file = "deepdiff-8.0.1.tar.gz", hash = "sha256:245599a4586ab59bb599ca3517a9c42f3318ff600ded5e80a3432693c8ec3c4b"}, + {file = "deepdiff-8.1.1-py3-none-any.whl", hash = "sha256:b0231fa3afb0f7184e82535f2b4a36636442ed21e94a0cf3aaa7982157e7ebca"}, + {file = "deepdiff-8.1.1.tar.gz", hash = "sha256:dd7bc7d5c8b51b5b90f01b0e2fe23c801fd8b4c6a7ee7e31c5a3c3663fcc7ceb"}, ] [package.dependencies] -orderly-set = "5.2.2" +orderly-set = ">=5.2.3,<6" [package.extras] -cli = ["click (==8.1.7)", "pyyaml (==6.0.1)"] +cli = ["click (==8.1.7)", "pyyaml (==6.0.2)"] optimize = ["orjson"] [[package]] name = "deepeval" -version = "2.0.1" -description = "The open-source LLMs evaluation framework." +version = "2.1.1" +description = "The Open-Source LLM Evaluation Framework." optional = true python-versions = "<3.13,>=3.9" files = [ - {file = "deepeval-2.0.1-py3-none-any.whl", hash = "sha256:e06134a36f6b2a9173c92bdebe1e42325f4e27ded77bbf4b5323fa955682b6ea"}, - {file = "deepeval-2.0.1.tar.gz", hash = "sha256:63360c4e0101d7ad29419bc754fba239d0d02d969bf5c070d387cf8b973cab01"}, + {file = "deepeval-2.1.1-py3-none-any.whl", hash = "sha256:6b3c48c184ed7d904bea379427f62aad8bbf50ddfa493957d8adb160520ab429"}, + {file = "deepeval-2.1.1.tar.gz", hash = "sha256:8554b7abad140c4948d5ae33670beaabd7c3c969cd216ead4ef74268032d4f2d"}, ] [package.dependencies] @@ -1261,6 +1263,7 @@ langchain = "*" langchain-community = "*" langchain-core = "*" langchain_openai = "*" +nest-asyncio = "*" opentelemetry-api = ">=1.24.0,<2.0.0" opentelemetry-exporter-otlp-proto-grpc = ">=1.24.0,<2.0.0" opentelemetry-sdk = ">=1.24.0,<2.0.0" @@ -1274,7 +1277,7 @@ requests = "*" rich = "*" sentry-sdk = "*" tabulate = "*" -tenacity = ">=8.4.1,<8.5.0" +tenacity = "<=9.0.0" tqdm = "*" typer = "*" @@ -1375,6 +1378,17 @@ files = [ {file = "dirtyjson-1.0.8.tar.gz", hash = "sha256:90ca4a18f3ff30ce849d100dcf4a003953c79d3a2348ef056f1d9c22231a25fd"}, ] +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + [[package]] name = "distro" version = "1.9.0" @@ -1388,13 +1402,13 @@ files = [ [[package]] name = "dlt" -version = "1.4.1" +version = "1.5.0" description = "dlt is an open-source python-first scalable data loading library that does not require any backend to run." optional = false python-versions = "<3.13,>=3.8.1" files = [ - {file = "dlt-1.4.1-py3-none-any.whl", hash = "sha256:fdfda790084914902579c903882b75d3c683b7545e15f86240cd1005bb3e8e64"}, - {file = "dlt-1.4.1.tar.gz", hash = "sha256:73e797e8d1c220caa80d464aebdd23c300b1c8385fbb605df04167fc513f8670"}, + {file = "dlt-1.5.0-py3-none-any.whl", hash = "sha256:b9eaaa4966f3f696b8ba5cb988ce3c1a1030bede0cb92ecfa75f663709a7d296"}, + {file = "dlt-1.5.0.tar.gz", hash = "sha256:2ece1c96242699630793681f0e3b9ec8bd41c79db3de20266cde427a71869b61"}, ] [package.dependencies] @@ -1416,10 +1430,10 @@ pytz = ">=2022.6" PyYAML = ">=5.4.1" requests = ">=2.26.0" requirements-parser = ">=0.5.0" -semver = ">=2.13.0" +semver = ">=3.0.0" setuptools = ">=65.6.0" simplejson = ">=3.17.5" -sqlalchemy = {version = ">=1.4", optional = true, markers = "extra == \"sql-database\" or extra == \"sqlalchemy\""} +sqlalchemy = {version = ">=1.4", optional = true, markers = "extra == \"sql-database\" or extra == \"sqlalchemy\" or extra == \"pyiceberg\""} tenacity = ">=8.0.2" tomlkit = ">=0.11.3" typing-extensions = ">=4.0.0" @@ -1428,11 +1442,11 @@ win-precise-time = {version = ">=1.4.2", markers = "os_name == \"nt\""} [package.extras] athena = ["botocore (>=1.28)", "pyarrow (>=12.0.0)", "pyathena (>=2.9.6)", "s3fs (>=2022.4.0)"] -az = ["adlfs (>=2022.4.0)"] +az = ["adlfs (>=2024.7.0)"] bigquery = ["db-dtypes (>=1.2.0)", "gcsfs (>=2022.4.0)", "google-cloud-bigquery (>=2.26.0)", "grpcio (>=1.50.0)", "pyarrow (>=12.0.0)"] cli = ["cron-descriptor (>=1.2.32)", "pipdeptree (>=2.9.0,<2.10)"] -clickhouse = ["adlfs (>=2022.4.0)", "clickhouse-connect (>=0.7.7)", "clickhouse-driver (>=0.2.7)", "gcsfs (>=2022.4.0)", "pyarrow (>=12.0.0)", "s3fs (>=2022.4.0)"] -databricks = ["databricks-sql-connector (>=2.9.3)"] +clickhouse = ["adlfs (>=2024.7.0)", "clickhouse-connect (>=0.7.7)", "clickhouse-driver (>=0.2.7)", "gcsfs (>=2022.4.0)", "pyarrow (>=12.0.0)", "s3fs (>=2022.4.0)"] +databricks = ["databricks-sdk (>=0.38.0)", "databricks-sql-connector (>=2.9.3)"] deltalake = ["deltalake (>=0.21.0)", "pyarrow (>=12.0.0)"] dremio = ["pyarrow (>=12.0.0)"] duckdb = ["duckdb (>=0.9)"] @@ -1445,6 +1459,7 @@ mssql = ["pyodbc (>=4.0.39)"] parquet = ["pyarrow (>=12.0.0)"] postgis = ["psycopg2-binary (>=2.9.1)", "psycopg2cffi (>=2.9.0)"] postgres = ["psycopg2-binary (>=2.9.1)", "psycopg2cffi (>=2.9.0)"] +pyiceberg = ["pyarrow (>=12.0.0)", "pyiceberg (>=0.8.1)", "sqlalchemy (>=1.4)"] qdrant = ["qdrant-client[fastembed] (>=1.8)"] redshift = ["psycopg2-binary (>=2.9.1)", "psycopg2cffi (>=2.9.0)"] s3 = ["botocore (>=1.28)", "s3fs (>=2022.4.0)"] @@ -1452,7 +1467,7 @@ sftp = ["paramiko (>=3.3.0)"] snowflake = ["snowflake-connector-python (>=3.5.0)"] sql-database = ["sqlalchemy (>=1.4)"] sqlalchemy = ["alembic (>1.10.0)", "sqlalchemy (>=1.4)"] -synapse = ["adlfs (>=2022.4.0)", "pyarrow (>=12.0.0)", "pyodbc (>=4.0.39)"] +synapse = ["adlfs (>=2024.7.0)", "pyarrow (>=12.0.0)", "pyodbc (>=4.0.39)"] weaviate = ["weaviate-client (>=3.22)"] [[package]] @@ -1593,58 +1608,59 @@ redis = ">=5.0.1,<6.0.0" [[package]] name = "fastapi" -version = "0.109.2" +version = "0.115.6" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, - {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, + {file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"}, + {file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"}, ] [package.dependencies] pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.36.3,<0.37.0" +starlette = ">=0.40.0,<0.42.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "fastapi-users" -version = "14.0.0" +version = "14.0.1" description = "Ready-to-use and customizable users management for FastAPI" optional = false python-versions = ">=3.9" files = [ - {file = "fastapi_users-14.0.0-py3-none-any.whl", hash = "sha256:e1230e044ddc2209b890b5b5c6fc1d13def961298d40e01c2d28f8bc2fe8c4c7"}, - {file = "fastapi_users-14.0.0.tar.gz", hash = "sha256:6dceefbd2db87a17f791ef431d616bb5ce40cb123da7922969b704cbee5e7384"}, + {file = "fastapi_users-14.0.1-py3-none-any.whl", hash = "sha256:074df59676dccf79412d2880bdcb661ab1fabc2ecec1f043b4e6a23be97ed9e1"}, + {file = "fastapi_users-14.0.1.tar.gz", hash = "sha256:8c032b3a75c6fb2b1f5eab8ffce5321176e9916efe1fe93e7c15ee55f0b02236"}, ] [package.dependencies] email-validator = ">=1.1.0,<2.3" fastapi = ">=0.65.2" -fastapi-users-db-sqlalchemy = {version = ">=6.0.0", optional = true, markers = "extra == \"sqlalchemy\""} +fastapi-users-db-sqlalchemy = {version = ">=7.0.0", optional = true, markers = "extra == \"sqlalchemy\""} makefun = ">=1.11.2,<2.0.0" pwdlib = {version = "0.2.1", extras = ["argon2", "bcrypt"]} -pyjwt = {version = "2.9.0", extras = ["crypto"]} -python-multipart = "0.0.17" +pyjwt = {version = "2.10.1", extras = ["crypto"]} +python-multipart = "0.0.20" [package.extras] -beanie = ["fastapi-users-db-beanie (>=3.0.0)"] +beanie = ["fastapi-users-db-beanie (>=4.0.0)"] oauth = ["httpx-oauth (>=0.13)"] redis = ["redis (>=4.3.3,<6.0.0)"] -sqlalchemy = ["fastapi-users-db-sqlalchemy (>=6.0.0)"] +sqlalchemy = ["fastapi-users-db-sqlalchemy (>=7.0.0)"] [[package]] name = "fastapi-users-db-sqlalchemy" -version = "6.0.1" +version = "7.0.0" description = "FastAPI Users database adapter for SQLAlchemy" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "fastapi_users_db_sqlalchemy-6.0.1-py3-none-any.whl", hash = "sha256:d1050ec31eb75e8c4fa9abafa4addaf0baf5c97afeea2f0f910ea55e2451fcad"}, - {file = "fastapi_users_db_sqlalchemy-6.0.1.tar.gz", hash = "sha256:f0ef9fe3250453712d25c13170700c80fa205867ce7add7ef391c384ec27cbe1"}, + {file = "fastapi_users_db_sqlalchemy-7.0.0-py3-none-any.whl", hash = "sha256:5fceac018e7cfa69efc70834dd3035b3de7988eb4274154a0dbe8b14f5aa001e"}, + {file = "fastapi_users_db_sqlalchemy-7.0.0.tar.gz", hash = "sha256:6823eeedf8a92f819276a2b2210ef1dcfd71fe8b6e37f7b4da8d1c60e3dfd595"}, ] [package.dependencies] @@ -1694,61 +1710,61 @@ files = [ [[package]] name = "fonttools" -version = "4.55.1" +version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.55.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c17a6f9814f83772cd6d9c9009928e1afa4ab66210a31ced721556651075a9a0"}, - {file = "fonttools-4.55.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c4d14eecc814826a01db87a40af3407c892ba49996bc6e49961e386cd78b537c"}, - {file = "fonttools-4.55.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8589f9a15dc005592b94ecdc45b4dfae9bbe9e73542e89af5a5e776e745db83b"}, - {file = "fonttools-4.55.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfee95bd9395bcd9e6c78955387554335109b6a613db71ef006020b42f761c58"}, - {file = "fonttools-4.55.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34fa2ecc0bf1923d1a51bf2216a006de2c3c0db02c6aa1470ea50b62b8619bd5"}, - {file = "fonttools-4.55.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9c1c48483148bfb1b9ad951133ceea957faa004f6cb475b67e7bc75d482b48f8"}, - {file = "fonttools-4.55.1-cp310-cp310-win32.whl", hash = "sha256:3e2fc388ca7d023b3c45badd71016fd4185f93e51a22cfe4bd65378af7fba759"}, - {file = "fonttools-4.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:c4c36c71f69d2b3ee30394b0986e5f8b2c461e7eff48dde49b08a90ded9fcdbd"}, - {file = "fonttools-4.55.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5daab3a55d460577f45bb8f5a8eca01fa6cde43ef2ab943b527991f54b735c41"}, - {file = "fonttools-4.55.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:acf1e80cf96c2fbc79e46f669d8713a9a79faaebcc68e31a9fbe600cf8027992"}, - {file = "fonttools-4.55.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e88a0329f7f88a210f09f79c088fb64f8032fc3ab65e2390a40b7d3a11773026"}, - {file = "fonttools-4.55.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03105b42259a8a94b2f0cbf1bee45f7a8a34e7b26c946a8fb89b4967e44091a8"}, - {file = "fonttools-4.55.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9af3577e821649879ab5774ad0e060af34816af556c77c6d3820345d12bf415e"}, - {file = "fonttools-4.55.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34bd5de3d0ad085359b79a96575cd6bd1bc2976320ef24a2aa152ead36dbf656"}, - {file = "fonttools-4.55.1-cp311-cp311-win32.whl", hash = "sha256:5da92c4b637f0155a41f345fa81143c8e17425260fcb21521cb2ad4d2cea2a95"}, - {file = "fonttools-4.55.1-cp311-cp311-win_amd64.whl", hash = "sha256:f70234253d15f844e6da1178f019a931f03181463ce0c7b19648b8c370527b07"}, - {file = "fonttools-4.55.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9c372e527d58ba64b695f15f8014e97bc8826cf64d3380fc89b4196edd3c0fa8"}, - {file = "fonttools-4.55.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:845a967d3bef3245ba81fb5582dc731f6c2c8417fa211f1068c56893504bc000"}, - {file = "fonttools-4.55.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03be82bcd4ba4418adf10e6165743f824bb09d6594c2743d7f93ea50968805b"}, - {file = "fonttools-4.55.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c42e935cf146f826f556d977660dac88f2fa3fb2efa27d5636c0b89a60c16edf"}, - {file = "fonttools-4.55.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96328bf91e05621d8e40d9f854af7a262cb0e8313e9b38e7f3a7f3c4c0caaa8b"}, - {file = "fonttools-4.55.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:291acec4d774e8cd2d8472d88c04643a77a3324a15247951bd6cfc969799b69e"}, - {file = "fonttools-4.55.1-cp312-cp312-win32.whl", hash = "sha256:6d768d6632809aec1c3fa8f195b173386d85602334701a6894a601a4d3c80368"}, - {file = "fonttools-4.55.1-cp312-cp312-win_amd64.whl", hash = "sha256:2a3850afdb0be1f79a1e95340a2059226511675c5b68098d4e49bfbeb48a8aab"}, - {file = "fonttools-4.55.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0c88d427eaf8bd8497b9051f56e0f5f9fb96a311aa7c72cda35e03e18d59cd16"}, - {file = "fonttools-4.55.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f062c95a725a79fd908fe8407b6ad63e230e1c7d6dece2d5d6ecaf843d6927f6"}, - {file = "fonttools-4.55.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f298c5324c45cad073475146bf560f4110ce2dc2488ff12231a343ec489f77bc"}, - {file = "fonttools-4.55.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f06dbb71344ffd85a6cb7e27970a178952f0bdd8d319ed938e64ba4bcc41700"}, - {file = "fonttools-4.55.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4c46b3525166976f5855b1f039b02433dc51eb635fb54d6a111e0c5d6e6cdc4c"}, - {file = "fonttools-4.55.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:af46f52a21e086a2f89b87bd941c9f0f91e5f769e1a5eb3b37c912228814d3e5"}, - {file = "fonttools-4.55.1-cp313-cp313-win32.whl", hash = "sha256:cd7f36335c5725a3fd724cc667c10c3f5254e779bdc5bffefebb33cf5a75ecb1"}, - {file = "fonttools-4.55.1-cp313-cp313-win_amd64.whl", hash = "sha256:5d6394897710ccac7f74df48492d7f02b9586ff0588c66a2c218844e90534b22"}, - {file = "fonttools-4.55.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:52c4f4b383c56e1a4fe8dab1b63c2269ba9eab0695d2d8e033fa037e61e6f1ef"}, - {file = "fonttools-4.55.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d83892dafdbd62b56545c77b6bd4fa49eef6ec1d6b95e042ee2c930503d1831e"}, - {file = "fonttools-4.55.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604d5bf16f811fcaaaec2dde139f7ce958462487565edcd54b6fadacb2942083"}, - {file = "fonttools-4.55.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3324b92feb5fd084923a8e89a8248afd5b9f9d81ab9517d7b07cc84403bd448"}, - {file = "fonttools-4.55.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:30f8b1ca9b919c04850678d026fc330c19acaa9e3b282fcacc09a5eb3c8d20c3"}, - {file = "fonttools-4.55.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:1835c98df2cf28c86a66d234895c87df7b9325fd079a8019c5053a389ff55d23"}, - {file = "fonttools-4.55.1-cp38-cp38-win32.whl", hash = "sha256:9f202703720a7cc0049f2ed1a2047925e264384eb5cc4d34f80200d7b17f1b6a"}, - {file = "fonttools-4.55.1-cp38-cp38-win_amd64.whl", hash = "sha256:2efff20aed0338d37c2ff58766bd67f4b9607ded61cf3d6baf1b3e25ea74e119"}, - {file = "fonttools-4.55.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3032d9bf010c395e6eca2851666cafb1f4ecde85d420188555e928ad0144326e"}, - {file = "fonttools-4.55.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0794055588c30ffe25426048e8a7c0a5271942727cd61fc939391e37f4d580d5"}, - {file = "fonttools-4.55.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ba980e3ffd3206b8c63a365f90dc10eeec27da946d5ee5373c3a325a46d77c"}, - {file = "fonttools-4.55.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d7063babd7434a17a5e355e87de9b2306c85a5c19c7da0794be15c58aab0c39"}, - {file = "fonttools-4.55.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ed84c15144015a58ef550dd6312884c9fb31a2dbc31a6467bcdafd63be7db476"}, - {file = "fonttools-4.55.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e89419d88b0bbfdb55209e03a17afa2d20db3c2fa0d785543c9d0875668195d5"}, - {file = "fonttools-4.55.1-cp39-cp39-win32.whl", hash = "sha256:6eb781e401b93cda99356bc043ababead2a5096550984d8a4ecf3d5c9f859dc2"}, - {file = "fonttools-4.55.1-cp39-cp39-win_amd64.whl", hash = "sha256:db1031acf04523c5a51c3e1ae19c21a1c32bc5f820a477dd4659a02f9cb82002"}, - {file = "fonttools-4.55.1-py3-none-any.whl", hash = "sha256:4bcfb11f90f48b48c366dd638d773a52fca0d1b9e056dc01df766bf5835baa08"}, - {file = "fonttools-4.55.1.tar.gz", hash = "sha256:85bb2e985718b0df96afc659abfe194c171726054314b019dbbfed31581673c7"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, + {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, + {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, + {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, + {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, + {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, + {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, + {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, + {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, + {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, + {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, + {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, + {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, + {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, + {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] [package.extras] @@ -1938,13 +1954,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" -version = "4.0.11" +version = "4.0.12" description = "Git Object Database" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, + {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, + {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, ] [package.dependencies] @@ -1952,20 +1968,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.43" +version = "3.1.44" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, - {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, + {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"}, + {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] [[package]] @@ -2122,13 +2138,13 @@ test = ["objgraph", "psutil"] [[package]] name = "griffe" -version = "1.5.1" +version = "1.5.4" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" files = [ - {file = "griffe-1.5.1-py3-none-any.whl", hash = "sha256:ad6a7980f8c424c9102160aafa3bcdf799df0e75f7829d75af9ee5aef656f860"}, - {file = "griffe-1.5.1.tar.gz", hash = "sha256:72964f93e08c553257706d6cd2c42d1c172213feb48b2be386f243380b405d4b"}, + {file = "griffe-1.5.4-py3-none-any.whl", hash = "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d"}, + {file = "griffe-1.5.4.tar.gz", hash = "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52"}, ] [package.dependencies] @@ -2465,13 +2481,13 @@ files = [ [[package]] name = "huggingface-hub" -version = "0.26.3" +version = "0.27.1" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.26.3-py3-none-any.whl", hash = "sha256:e66aa99e569c2d5419240a9e553ad07245a5b1300350bfbc5a4945cf7432991b"}, - {file = "huggingface_hub-0.26.3.tar.gz", hash = "sha256:90e1fe62ffc26757a073aaad618422b899ccf9447c2bba8c902a90bef5b42e1d"}, + {file = "huggingface_hub-0.27.1-py3-none-any.whl", hash = "sha256:1c5155ca7d60b60c2e2fc38cbb3ffb7f7c3adf48f824015b219af9061771daec"}, + {file = "huggingface_hub-0.27.1.tar.gz", hash = "sha256:c004463ca870283909d715d20f066ebd6968c2207dae9393fdffb3c1d4d8f98b"}, ] [package.dependencies] @@ -2522,6 +2538,20 @@ files = [ {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, ] +[[package]] +name = "identify" +version = "2.6.5" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "identify-2.6.5-py2.py3-none-any.whl", hash = "sha256:14181a47091eb75b337af4c23078c9d09225cd4c48929f521f3bf16b09d02566"}, + {file = "identify-2.6.5.tar.gz", hash = "sha256:c10b33f250e5bba374fae86fb57f3adcebf1161bce7cdf92031915fd480c13bc"}, +] + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.10" @@ -2555,28 +2585,6 @@ doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linke perf = ["ipython"] test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] -[[package]] -name = "importlib-resources" -version = "6.4.5" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, - {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -2590,36 +2598,38 @@ files = [ [[package]] name = "instructor" -version = "1.5.2" +version = "1.7.2" description = "structured outputs for llm" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "instructor-1.5.2-py3-none-any.whl", hash = "sha256:da25abbf1ab792fb094992f1d9ce593e26fe458cb1f9a8e7ebf9d68f3f2c757a"}, - {file = "instructor-1.5.2.tar.gz", hash = "sha256:fdd5ccbca21b4c558a24e9ba12c84afd907e65153a39d035f47c25800011a977"}, + {file = "instructor-1.7.2-py3-none-any.whl", hash = "sha256:cb43d27f6d7631c31762b936b2fcb44d2a3f9d8a020430a0f4d3484604ffb95b"}, + {file = "instructor-1.7.2.tar.gz", hash = "sha256:6c01b2b159766df24865dc81f7bf8457cbda88a3c0bbc810da3467d19b185ed2"}, ] [package.dependencies] aiohttp = ">=3.9.1,<4.0.0" -docstring-parser = ">=0.16,<0.17" -jiter = ">=0.5.0,<0.6.0" -openai = ">=1.45.0,<2.0.0" +docstring-parser = ">=0.16,<1.0" +jinja2 = ">=3.1.4,<4.0.0" +jiter = ">=0.6.1,<0.9" +openai = ">=1.52.0,<2.0.0" pydantic = ">=2.8.0,<3.0.0" pydantic-core = ">=2.18.0,<3.0.0" +requests = ">=2.32.3,<3.0.0" rich = ">=13.7.0,<14.0.0" -tenacity = ">=8.4.1,<9.0.0" +tenacity = ">=9.0.0,<10.0.0" typer = ">=0.9.0,<1.0.0" [package.extras] -anthropic = ["anthropic (>=0.34.0,<0.35.0)", "xmltodict (>=0.13.0,<0.14.0)"] -cerebras-cloud-sdk = ["cerebras_cloud_sdk (>=1.5.0,<2.0.0)"] +anthropic = ["anthropic (==0.42.0)", "xmltodict (>=0.13,<0.15)"] +cerebras-cloud-sdk = ["cerebras-cloud-sdk (>=1.5.0,<2.0.0)"] cohere = ["cohere (>=5.1.8,<6.0.0)"] -google-generativeai = ["google-generativeai (>=0.8.2,<0.9.0)"] -groq = ["groq (>=0.4.2,<0.5.0)"] -litellm = ["litellm (>=1.35.31,<2.0.0)"] -mistralai = ["mistralai (>=1.0.3,<2.0.0)"] -test-docs = ["anthropic (>=0.34.0,<0.35.0)", "cohere (>=5.1.8,<6.0.0)", "diskcache (>=5.6.3,<6.0.0)", "fastapi (>=0.109.2,<0.110.0)", "groq (>=0.4.2,<0.5.0)", "litellm (>=1.35.31,<2.0.0)", "mistralai (>=1.0.3,<2.0.0)", "pandas (>=2.2.0,<3.0.0)", "pydantic_extra_types (>=2.6.0,<3.0.0)", "redis (>=5.0.1,<6.0.0)", "tabulate (>=0.9.0,<0.10.0)"] +fireworks-ai = ["fireworks-ai (>=0.15.4,<1.0.0)"] +google-generativeai = ["google-generativeai (>=0.8.2,<1.0.0)", "jsonref (>=1.1.0,<2.0.0)"] +groq = ["groq (>=0.4.2,<0.14.0)"] +test-docs = ["diskcache (>=5.6.3,<6.0.0)", "fastapi (>=0.109.2,<0.116.0)", "litellm (>=1.35.31,<2.0.0)", "mistralai (>=1.0.3,<2.0.0)", "pandas (>=2.2.0,<3.0.0)", "pydantic-extra-types (>=2.6.0,<3.0.0)", "redis (>=5.0.1,<6.0.0)", "tabulate (>=0.9.0,<1.0.0)"] vertexai = ["google-cloud-aiplatform (>=1.53.0,<2.0.0)", "jsonref (>=1.1.0,<2.0.0)"] +writer = ["writer-sdk (>=1.2.0,<2.0.0)"] [[package]] name = "ipykernel" @@ -2656,13 +2666,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.18.1" +version = "8.31.0" description = "IPython: Productive Interactive Computing" optional = true -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, - {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, + {file = "ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6"}, + {file = "ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b"}, ] [package.dependencies] @@ -2671,25 +2681,26 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.41,<3.1.0" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] name = "isoduration" @@ -2740,13 +2751,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -2757,72 +2768,87 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.5.0" +version = "0.8.2" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, - {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, - {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, - {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, - {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, - {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, - {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, - {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, - {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, - {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, - {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, - {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, - {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, + {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, + {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff"}, + {file = "jiter-0.8.2-cp310-cp310-win32.whl", hash = "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43"}, + {file = "jiter-0.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6"}, + {file = "jiter-0.8.2-cp311-cp311-win32.whl", hash = "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44"}, + {file = "jiter-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29"}, + {file = "jiter-0.8.2-cp312-cp312-win32.whl", hash = "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e"}, + {file = "jiter-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05"}, + {file = "jiter-0.8.2-cp313-cp313-win32.whl", hash = "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a"}, + {file = "jiter-0.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865"}, + {file = "jiter-0.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca"}, + {file = "jiter-0.8.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0"}, + {file = "jiter-0.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9e1fa156ee9454642adb7e7234a383884452532bc9d53d5af2d18d98ada1d79c"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cf5dfa9956d96ff2efb0f8e9c7d055904012c952539a774305aaaf3abdf3d6c"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e52bf98c7e727dd44f7c4acb980cb988448faeafed8433c867888268899b298b"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a2ecaa3c23e7a7cf86d00eda3390c232f4d533cd9ddea4b04f5d0644faf642c5"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08d4c92bf480e19fc3f2717c9ce2aa31dceaa9163839a311424b6862252c943e"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d9a1eded738299ba8e106c6779ce5c3893cffa0e32e4485d680588adae6db8"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20be8b7f606df096e08b0b1b4a3c6f0515e8dac296881fe7461dfa0fb5ec817"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d33f94615fcaf872f7fd8cd98ac3b429e435c77619777e8a449d9d27e01134d1"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:317b25e98a35ffec5c67efe56a4e9970852632c810d35b34ecdd70cc0e47b3b6"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc9043259ee430ecd71d178fccabd8c332a3bf1e81e50cae43cc2b28d19e4cb7"}, + {file = "jiter-0.8.2-cp38-cp38-win32.whl", hash = "sha256:fc5adda618205bd4678b146612ce44c3cbfdee9697951f2c0ffdef1f26d72b63"}, + {file = "jiter-0.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cd646c827b4f85ef4a78e4e58f4f5854fae0caf3db91b59f0d73731448a970c6"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e41e75344acef3fc59ba4765df29f107f309ca9e8eace5baacabd9217e52a5ee"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f22b16b35d5c1df9dfd58843ab2cd25e6bf15191f5a236bed177afade507bfc"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7200b8f7619d36aa51c803fd52020a2dfbea36ffec1b5e22cab11fd34d95a6d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70bf4c43652cc294040dbb62256c83c8718370c8b93dd93d934b9a7bf6c4f53c"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9d471356dc16f84ed48768b8ee79f29514295c7295cb41e1133ec0b2b8d637d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:859e8eb3507894093d01929e12e267f83b1d5f6221099d3ec976f0c995cb6bd9"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa58399c01db555346647a907b4ef6d4f584b123943be6ed5588c3f2359c9f4"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f2d5ed877f089862f4c7aacf3a542627c1496f972a34d0474ce85ee7d939c27"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:03c9df035d4f8d647f8c210ddc2ae0728387275340668fb30d2421e17d9a0841"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8bd2a824d08d8977bb2794ea2682f898ad3d8837932e3a74937e93d62ecbb637"}, + {file = "jiter-0.8.2-cp39-cp39-win32.whl", hash = "sha256:ca29b6371ebc40e496995c94b988a101b9fbbed48a51190a4461fcb0a68b4a36"}, + {file = "jiter-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a"}, + {file = "jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d"}, ] [[package]] @@ -2893,8 +2919,6 @@ optional = false python-versions = "*" files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, - {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, - {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -2977,7 +3001,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" @@ -3010,13 +3033,13 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.10.0" +version = "0.11.0" description = "Jupyter Event System library" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, - {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, + {file = "jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf"}, + {file = "jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90"}, ] [package.dependencies] @@ -3030,7 +3053,7 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] @@ -3045,18 +3068,17 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.14.2" +version = "2.15.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, - {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, + {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, + {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, ] [package.dependencies] @@ -3065,7 +3087,7 @@ argon2-cffi = ">=21.1" jinja2 = ">=3.0.3" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.9.0" +jupyter-events = ">=0.11.0" jupyter-server-terminals = ">=0.4.4" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" @@ -3105,19 +3127,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.3" +version = "4.3.4" description = "JupyterLab computational environment" optional = true python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.3-py3-none-any.whl", hash = "sha256:32a8fd30677e734ffcc3916a4758b9dab21b02015b668c60eb36f84357b7d4b1"}, - {file = "jupyterlab-4.3.3.tar.gz", hash = "sha256:76fa39e548fdac94dc1204af5956c556f54c785f70ee26aa47ea08eda4d5bbcd"}, + {file = "jupyterlab-4.3.4-py3-none-any.whl", hash = "sha256:b754c2601c5be6adf87cb5a1d8495d653ffb945f021939f77776acaa94dae952"}, + {file = "jupyterlab-4.3.4.tar.gz", hash = "sha256:f0bb9b09a04766e3423cccc2fc23169aa2ffedcdf8713e9e0fb33cac0b6859d0"}, ] [package.dependencies] async-lru = ">=1.0.0" httpx = ">=0.25.0" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" jupyter-core = "*" @@ -3162,7 +3183,6 @@ files = [ [package.dependencies] babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" jsonschema = ">=4.18.0" @@ -3177,151 +3197,115 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "kiwisolver" -version = "1.4.7" +version = "1.4.8" description = "A fast implementation of the Cassowary constraint solver" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, - {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b"}, + {file = "kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e"}, ] [[package]] name = "lancedb" -version = "0.15.0" +version = "0.16.0" description = "lancedb" optional = false python-versions = ">=3.9" files = [ - {file = "lancedb-0.15.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:3eacc9c6766594874a7d54e822550c7991d64b14571251f1e4b43985cc4f3cdb"}, - {file = "lancedb-0.15.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:48c28571f79805e11a3bca09486fd1c8d6c3f7762f7692cca1c5e0cdea6bfa20"}, - {file = "lancedb-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e349a1671943b75a536d2589b5a12f685c129149b0cad266e12555f9501f8ccd"}, - {file = "lancedb-0.15.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c567866b08222457e1aca51df9abeb871aad8fed0db58c004365629c05f8ecbb"}, - {file = "lancedb-0.15.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:223cd77fa84a1317301ad4771de58ac5685d58cee03f0a20ba4bc95517b5c79f"}, - {file = "lancedb-0.15.0-cp38-abi3-win_amd64.whl", hash = "sha256:66d251f22709c72f819aace9e665127f1040845d88b25c1f088c4beb36087f7e"}, + {file = "lancedb-0.16.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:3521c53a116bfbb054318a35b2297cd01d57e1db500de4ba3cc7fad6c4add98c"}, + {file = "lancedb-0.16.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e0968e6b7a3611437dc4c4f468aafb4e665aa315ee0b201e589ea1fa433b5b6"}, + {file = "lancedb-0.16.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e466b2c734f8dde5d037b082cff1ccd9a913e7b87ecc73efa7d921ed1aa6ded"}, + {file = "lancedb-0.16.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:84980ccd4a170a5a07f83c85f90841e6995a05dc92cadedcb806401bc60f832b"}, + {file = "lancedb-0.16.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7135cd4733c3f7bcff7bc5f017bb79dda8e23dc3530476e0b91a4cb3ffef9e2e"}, + {file = "lancedb-0.16.0-cp38-abi3-win_amd64.whl", hash = "sha256:357a4cd2d7c5bf9677f84f7aa408d6c98c9d9012b3110979b126d40d30530e12"}, ] [package.dependencies] -attrs = ">=21.3.0" -cachetools = "*" deprecation = "*" +nest-asyncio = ">=1.0,<2.0" overrides = ">=0.7" packaging = "*" pydantic = ">=1.10" -pylance = "0.19.1" -requests = ">=2.31.0" +pylance = "0.19.2" tqdm = ">=4.27.0" [package.extras] @@ -3329,27 +3313,30 @@ azure = ["adlfs (>=2024.2.0)"] clip = ["open-clip", "pillow", "torch"] dev = ["pre-commit", "ruff"] docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocstrings[python]"] -embeddings = ["awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google-generativeai", "huggingface-hub", "ibm-watsonx-ai (>=1.1.2)", "instructorembedding", "ollama", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +embeddings = ["awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google-generativeai", "huggingface-hub", "ibm-watsonx-ai (>=1.1.2)", "instructorembedding", "ollama", "open-clip-torch", "openai (>=1.6.1)", "pillow", "requests (>=2.31.0)", "sentence-transformers", "torch"] tests = ["aiohttp", "boto3", "duckdb", "pandas (>=1.4)", "polars (>=0.19,<=1.3.0)", "pytest", "pytest-asyncio", "pytest-mock", "pytz", "tantivy"] [[package]] name = "langchain" -version = "0.3.9" +version = "0.3.11" description = "Building applications with LLMs through composability" optional = true python-versions = "<4.0,>=3.9" files = [ - {file = "langchain-0.3.9-py3-none-any.whl", hash = "sha256:ade5a1fee2f94f2e976a6c387f97d62cc7f0b9f26cfe0132a41d2bda761e1045"}, - {file = "langchain-0.3.9.tar.gz", hash = "sha256:4950c4ad627d0aa95ce6bda7de453e22059b7e7836b562a8f781fb0b05d7294c"}, + {file = "langchain-0.3.11-py3-none-any.whl", hash = "sha256:6655feded1f7569e5a4bd11e38de0a26c7c86646c0dea49afccceba42df60ad7"}, + {file = "langchain-0.3.11.tar.gz", hash = "sha256:17868ea3f0cf5a46b4b88bf1961c4a12d32ea0778930e7d2eb5103e0287ff478"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.3.21,<0.4.0" +langchain-core = ">=0.3.24,<0.4.0" langchain-text-splitters = ">=0.3.0,<0.4.0" -langsmith = ">=0.1.17,<0.2.0" -numpy = {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""} +langsmith = ">=0.1.17,<0.3" +numpy = [ + {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, +] pydantic = ">=2.7.4,<3.0.0" PyYAML = ">=5.3" requests = ">=2,<3" @@ -3358,23 +3345,26 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" [[package]] name = "langchain-community" -version = "0.3.9" +version = "0.3.11" description = "Community contributed LangChain integrations." optional = true python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_community-0.3.9-py3-none-any.whl", hash = "sha256:ccccf9e703ccb7d929034be56e36177e3ee796e5ab8417aa79c25dc6ef40e1bd"}, - {file = "langchain_community-0.3.9.tar.gz", hash = "sha256:b0b44c530c7647a360f2321749e7b7e95a3cbdfa2fceed7e1214228833996223"}, + {file = "langchain_community-0.3.11-py3-none-any.whl", hash = "sha256:c67091dc7652f44161bbea915c03a296f3c1ef2a8dfbcb475cdf23a1deb9790e"}, + {file = "langchain_community-0.3.11.tar.gz", hash = "sha256:31a96de1578f6037cd49acf287227d54e88e81f82e3e49cb4d90bfe05b1cdc32"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" dataclasses-json = ">=0.5.7,<0.7" httpx-sse = ">=0.4.0,<0.5.0" -langchain = ">=0.3.8,<0.4.0" -langchain-core = ">=0.3.21,<0.4.0" -langsmith = ">=0.1.125,<0.2.0" -numpy = {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""} +langchain = ">=0.3.11,<0.4.0" +langchain-core = ">=0.3.24,<0.4.0" +langsmith = ">=0.1.125,<0.3" +numpy = [ + {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, +] pydantic-settings = ">=2.4.0,<3.0.0" PyYAML = ">=5.3" requests = ">=2,<3" @@ -3383,38 +3373,41 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" [[package]] name = "langchain-core" -version = "0.3.21" +version = "0.3.29" description = "Building applications with LLMs through composability" optional = true python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_core-0.3.21-py3-none-any.whl", hash = "sha256:7e723dff80946a1198976c6876fea8326dc82566ef9bcb5f8d9188f738733665"}, - {file = "langchain_core-0.3.21.tar.gz", hash = "sha256:561b52b258ffa50a9fb11d7a1940ebfd915654d1ec95b35e81dfd5ee84143411"}, + {file = "langchain_core-0.3.29-py3-none-any.whl", hash = "sha256:817db1474871611a81105594a3e4d11704949661008e455a10e38ca9ff601a1a"}, + {file = "langchain_core-0.3.29.tar.gz", hash = "sha256:773d6aeeb612e7ce3d996c0be403433d8c6a91e77bbb7a7461c13e15cfbe5b06"}, ] [package.dependencies] jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.125,<0.2.0" +langsmith = ">=0.1.125,<0.3" packaging = ">=23.2,<25" -pydantic = {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""} +pydantic = [ + {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" typing-extensions = ">=4.7" [[package]] name = "langchain-openai" -version = "0.2.5" +version = "0.2.14" description = "An integration package connecting OpenAI and LangChain" optional = true python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_openai-0.2.5-py3-none-any.whl", hash = "sha256:745fd9d51a5a3a9cb8839d41f3786ab38dfc539e47c713a806cbca32f3d0875c"}, - {file = "langchain_openai-0.2.5.tar.gz", hash = "sha256:55b98711a880474ec363267bf6cd0e2727dc00e8433731318d063a2184582c28"}, + {file = "langchain_openai-0.2.14-py3-none-any.whl", hash = "sha256:d232496662f79ece9a11caf7d798ba863e559c771bc366814f7688e0fe664fe8"}, + {file = "langchain_openai-0.2.14.tar.gz", hash = "sha256:7a514f309e356b182a337c0ed36ab3fbe34d9834a235a3b85cb7f91ae775d978"}, ] [package.dependencies] -langchain-core = ">=0.3.15,<0.4.0" -openai = ">=1.52.0,<2.0.0" +langchain-core = ">=0.3.27,<0.4.0" +openai = ">=1.58.1,<2.0.0" tiktoken = ">=0.7,<1" [[package]] @@ -3447,13 +3440,13 @@ six = "*" [[package]] name = "langfuse" -version = "2.55.0" +version = "2.57.5" description = "A client library for accessing langfuse" -optional = true +optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langfuse-2.55.0-py3-none-any.whl", hash = "sha256:c902894b50befdd8639e5b0d78ca79f8b5d391bae2c3f0889a1f47ea59d795ad"}, - {file = "langfuse-2.55.0.tar.gz", hash = "sha256:fb671a8cf5252a7d1def3b41b6f70f8de50c53250e5832209649301c14453222"}, + {file = "langfuse-2.57.5-py3-none-any.whl", hash = "sha256:5bc53ee33e7e58b4d112abdf971f16bc9e7e8e8ba4690b3c4339d37b83601f80"}, + {file = "langfuse-2.57.5.tar.gz", hash = "sha256:48b4db5d4e86824153ad6f1e10d14c2c7994bcbf67578c2bdd6786bf3896c3e8"}, ] [package.dependencies] @@ -3473,59 +3466,65 @@ openai = ["openai (>=0.27.8)"] [[package]] name = "langsmith" -version = "0.1.139" +version = "0.2.3" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = true -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "langsmith-0.1.139-py3-none-any.whl", hash = "sha256:2a4a541bfbd0a9727255df28a60048c85bc8c4c6a276975923785c3fd82dc879"}, - {file = "langsmith-0.1.139.tar.gz", hash = "sha256:2f9e4d32fef3ad7ef42c8506448cce3a31ad6b78bb4f3310db04ddaa1e9d744d"}, + {file = "langsmith-0.2.3-py3-none-any.whl", hash = "sha256:4958b6e918f57fedba6ddc55b8534d1e06478bb44c779aa73713ce898ca6ae87"}, + {file = "langsmith-0.2.3.tar.gz", hash = "sha256:54c231b07fdeb0f8472925074a0ec0ed2cb654a0437d63c6ccf76a9da635900d"}, ] [package.dependencies] httpx = ">=0.23.0,<1" -orjson = ">=3.9.14,<4.0.0" -pydantic = {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""} +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] + [[package]] name = "litellm" -version = "1.49.1" +version = "1.57.2" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.49.1-py3-none-any.whl", hash = "sha256:2ba6689fe4ea3b0d69f56f2843caff6422497489e6252943b13ef1463f016728"}, - {file = "litellm-1.49.1.tar.gz", hash = "sha256:f51450ad823c8bdf057017009ae8bcce1a2810690b2f0d9dcdaff04ddc68209a"}, + {file = "litellm-1.57.2-py3-none-any.whl", hash = "sha256:b572c0d3d3c33ff3a4d18928ac6f051d10ac159814017a817d88ec7af9a8600c"}, + {file = "litellm-1.57.2.tar.gz", hash = "sha256:0a07c4e288f4bd9033335d5606d7da497f1193d51cf262b96812f40b8842a842"}, ] [package.dependencies] aiohttp = "*" click = "*" +httpx = ">=0.23.0,<0.28.0" importlib-metadata = ">=6.8.0" jinja2 = ">=3.1.2,<4.0.0" jsonschema = ">=4.22.0,<5.0.0" -openai = ">=1.51.0" +openai = ">=1.55.3" pydantic = ">=2.0.0,<3.0.0" python-dotenv = ">=0.2.0" -requests = ">=2.31.0,<3.0.0" tiktoken = ">=0.7.0" tokenizers = "*" [package.extras] extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "resend (>=0.8.0,<0.9.0)"] -proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "cryptography (>=42.0.5,<43.0.0)", "fastapi (>=0.111.0,<0.112.0)", "fastapi-sso (>=0.10.0,<0.11.0)", "gunicorn (>=22.0.0,<23.0.0)", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.9,<0.0.10)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] +proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=22.0.0,<23.0.0)", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] [[package]] name = "llama-index-core" -version = "0.11.23" +version = "0.12.10.post1" description = "Interface between LLMs and your data" optional = true -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "llama_index_core-0.11.23-py3-none-any.whl", hash = "sha256:25a0cb4a055bfb348655ca4acd1b475529bd8537a7b81874ef14ed13f56e06c1"}, - {file = "llama_index_core-0.11.23.tar.gz", hash = "sha256:e150859696a0eae169fe19323f46e9a31af2c12c3182012e4d0353ea8eb06d24"}, + {file = "llama_index_core-0.12.10.post1-py3-none-any.whl", hash = "sha256:897e8cd4efeff6842580b043bdf4008ac60f693df1de2bfd975307a4845707c2"}, + {file = "llama_index_core-0.12.10.post1.tar.gz", hash = "sha256:af27bea4d1494ba84983a649976e60e3de677a73946aa45ed12ce27e3a623ddf"}, ] [package.dependencies] @@ -3539,13 +3538,13 @@ httpx = "*" nest-asyncio = ">=1.5.8,<2.0.0" networkx = ">=3.0" nltk = ">3.8.1" -numpy = "<2.0.0" +numpy = "*" pillow = ">=9.0.0" -pydantic = ">=2.7.0,<3.0.0" +pydantic = ">=2.8.0" PyYAML = ">=6.0.1" requests = ">=2.31.0" SQLAlchemy = {version = ">=1.4.49", extras = ["asyncio"]} -tenacity = ">=8.2.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = ">=8.2.0,<8.4.0 || >8.4.0,<10.0.0" tiktoken = ">=0.3.3" tqdm = ">=4.66.1,<5.0.0" typing-extensions = ">=4.5.0" @@ -3719,13 +3718,13 @@ files = [ [[package]] name = "mako" -version = "1.3.7" +version = "1.3.8" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false python-versions = ">=3.8" files = [ - {file = "Mako-1.3.7-py3-none-any.whl", hash = "sha256:d18f990ad57f800ce8e76cbfb0b74afe471c293517e9f5003ace6dad5aa72c36"}, - {file = "mako-1.3.7.tar.gz", hash = "sha256:20405b1232e0759f0e7d87b01f6bb94fce0761747f1cb876ecf90bd512d0b639"}, + {file = "Mako-1.3.8-py3-none-any.whl", hash = "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627"}, + {file = "mako-1.3.8.tar.gz", hash = "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8"}, ] [package.dependencies] @@ -3747,9 +3746,6 @@ files = [ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -3850,13 +3846,13 @@ files = [ [[package]] name = "marshmallow" -version = "3.23.1" +version = "3.24.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = true python-versions = ">=3.9" files = [ - {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, - {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, + {file = "marshmallow-3.24.1-py3-none-any.whl", hash = "sha256:ddb5c9987017d37be351c184e4e867e7bf55f7331f4da730dedad6b7af662cdd"}, + {file = "marshmallow-3.24.1.tar.gz", hash = "sha256:efdcb656ac8788f0e3d1d938f8dc0f237bf1a99aff8f6dfbffa594981641cea0"}, ] [package.dependencies] @@ -3864,64 +3860,56 @@ packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)"] tests = ["pytest", "simplejson"] [[package]] name = "matplotlib" -version = "3.9.3" +version = "3.10.0" description = "Python plotting package" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "matplotlib-3.9.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:41b016e3be4e740b66c79a031a0a6e145728dbc248142e751e8dab4f3188ca1d"}, - {file = "matplotlib-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e0143975fc2a6d7136c97e19c637321288371e8f09cff2564ecd73e865ea0b9"}, - {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f459c8ee2c086455744723628264e43c884be0c7d7b45d84b8cd981310b4815"}, - {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:687df7ceff57b8f070d02b4db66f75566370e7ae182a0782b6d3d21b0d6917dc"}, - {file = "matplotlib-3.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:edd14cf733fdc4f6e6fe3f705af97676a7e52859bf0044aa2c84e55be739241c"}, - {file = "matplotlib-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c40c244221a1adbb1256692b1133c6fb89418df27bf759a31a333e7912a4010"}, - {file = "matplotlib-3.9.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cf2a60daf6cecff6828bc608df00dbc794380e7234d2411c0ec612811f01969d"}, - {file = "matplotlib-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:213d6dc25ce686516208d8a3e91120c6a4fdae4a3e06b8505ced5b716b50cc04"}, - {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52f48eb75fcc119a4fdb68ba83eb5f71656999420375df7c94cc68e0e14686e"}, - {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c93796b44fa111049b88a24105e947f03c01966b5c0cc782e2ee3887b790a3"}, - {file = "matplotlib-3.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cd1077b9a09b16d8c3c7075a8add5ffbfe6a69156a57e290c800ed4d435bef1d"}, - {file = "matplotlib-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:c96eeeb8c68b662c7747f91a385688d4b449687d29b691eff7068a4602fe6dc4"}, - {file = "matplotlib-3.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a361bd5583bf0bcc08841df3c10269617ee2a36b99ac39d455a767da908bbbc"}, - {file = "matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e14485bb1b83eeb3d55b6878f9560240981e7bbc7a8d4e1e8c38b9bd6ec8d2de"}, - {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8d279f78844aad213c4935c18f8292a9432d51af2d88bca99072c903948045"}, - {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6c12514329ac0d03128cf1dcceb335f4fbf7c11da98bca68dca8dcb983153a9"}, - {file = "matplotlib-3.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6e9de2b390d253a508dd497e9b5579f3a851f208763ed67fdca5dc0c3ea6849c"}, - {file = "matplotlib-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d796272408f8567ff7eaa00eb2856b3a00524490e47ad505b0b4ca6bb8a7411f"}, - {file = "matplotlib-3.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:203d18df84f5288973b2d56de63d4678cc748250026ca9e1ad8f8a0fd8a75d83"}, - {file = "matplotlib-3.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b651b0d3642991259109dc0351fc33ad44c624801367bb8307be9bfc35e427ad"}, - {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66d7b171fecf96940ce069923a08ba3df33ef542de82c2ff4fe8caa8346fa95a"}, - {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be0ba61f6ff2e6b68e4270fb63b6813c9e7dec3d15fc3a93f47480444fd72f0"}, - {file = "matplotlib-3.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d6b2e8856dec3a6db1ae51aec85c82223e834b228c1d3228aede87eee2b34f9"}, - {file = "matplotlib-3.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:90a85a004fefed9e583597478420bf904bb1a065b0b0ee5b9d8d31b04b0f3f70"}, - {file = "matplotlib-3.9.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3119b2f16de7f7b9212ba76d8fe6a0e9f90b27a1e04683cd89833a991682f639"}, - {file = "matplotlib-3.9.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:87ad73763d93add1b6c1f9fcd33af662fd62ed70e620c52fcb79f3ac427cf3a6"}, - {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:026bdf3137ab6022c866efa4813b6bbeddc2ed4c9e7e02f0e323a7bca380dfa0"}, - {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760a5e89ebbb172989e8273024a1024b0f084510b9105261b3b00c15e9c9f006"}, - {file = "matplotlib-3.9.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a42b9dc42de2cfe357efa27d9c50c7833fc5ab9b2eb7252ccd5d5f836a84e1e4"}, - {file = "matplotlib-3.9.3-cp313-cp313t-win_amd64.whl", hash = "sha256:e0fcb7da73fbf67b5f4bdaa57d85bb585a4e913d4a10f3e15b32baea56a67f0a"}, - {file = "matplotlib-3.9.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:031b7f5b8e595cc07def77ec5b58464e9bb67dc5760be5d6f26d9da24892481d"}, - {file = "matplotlib-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fa6e193c14d6944e0685cdb527cb6b38b0e4a518043e7212f214113af7391da"}, - {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6eefae6effa0c35bbbc18c25ee6e0b1da44d2359c3cd526eb0c9e703cf055d"}, - {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d3e5c7a99bd28afb957e1ae661323b0800d75b419f24d041ed1cc5d844a764"}, - {file = "matplotlib-3.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:816a966d5d376bf24c92af8f379e78e67278833e4c7cbc9fa41872eec629a060"}, - {file = "matplotlib-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fb0b37c896172899a4a93d9442ffdc6f870165f59e05ce2e07c6fded1c15749"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f2a4ea08e6876206d511365b0bc234edc813d90b930be72c3011bbd7898796f"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b081dac96ab19c54fd8558fac17c9d2c9cb5cc4656e7ed3261ddc927ba3e2c5"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a0a63cb8404d1d1f94968ef35738900038137dab8af836b6c21bb6f03d75465"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:896774766fd6be4571a43bc2fcbcb1dcca0807e53cab4a5bf88c4aa861a08e12"}, - {file = "matplotlib-3.9.3.tar.gz", hash = "sha256:cd5dbbc8e25cad5f706845c4d100e2c8b34691b412b93717ce38d8ae803bcfa5"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6"}, + {file = "matplotlib-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1"}, + {file = "matplotlib-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683"}, + {file = "matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765"}, + {file = "matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8"}, + {file = "matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12"}, + {file = "matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf"}, + {file = "matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae"}, + {file = "matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e"}, + {file = "matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede"}, + {file = "matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef"}, + {file = "matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278"}, ] [package.dependencies] contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.3.1" numpy = ">=1.23" packaging = ">=20.0" @@ -3930,7 +3918,7 @@ pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "matplotlib-inline" @@ -3981,15 +3969,15 @@ files = [ [[package]] name = "milvus-lite" -version = "2.4.10" +version = "2.4.11" description = "A lightweight version of Milvus wrapped with Python." optional = true python-versions = ">=3.7" files = [ - {file = "milvus_lite-2.4.10-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fc4246d3ed7d1910847afce0c9ba18212e93a6e9b8406048436940578dfad5cb"}, - {file = "milvus_lite-2.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:74a8e07c5e3b057df17fbb46913388e84df1dc403a200f4e423799a58184c800"}, - {file = "milvus_lite-2.4.10-py3-none-manylinux2014_aarch64.whl", hash = "sha256:240c7386b747bad696ecb5bd1f58d491e86b9d4b92dccee3315ed7256256eddc"}, - {file = "milvus_lite-2.4.10-py3-none-manylinux2014_x86_64.whl", hash = "sha256:211d2e334a043f9282bdd9755f76b9b2d93b23bffa7af240919ffce6a8dfe325"}, + {file = "milvus_lite-2.4.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9e563ae0dca1b41bfd76b90f06b2bcc474460fe4eba142c9bab18d2747ff843b"}, + {file = "milvus_lite-2.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d21472bd24eb327542817829ce7cb51878318e6173c4d62353c77421aecf98d6"}, + {file = "milvus_lite-2.4.11-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8e6ef27f7f84976f9fd0047b675ede746db2e0cc581c44a916ac9e71e0cef05d"}, + {file = "milvus_lite-2.4.11-py3-none-manylinux2014_x86_64.whl", hash = "sha256:551f56b49fcfbb330b658b4a3c56ed29ba9b692ec201edd1f2dade7f5e39957d"}, ] [package.dependencies] @@ -3997,15 +3985,18 @@ tqdm = "*" [[package]] name = "mistune" -version = "3.0.2" +version = "3.1.0" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, - {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, + {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"}, + {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"}, ] +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} + [[package]] name = "mkdocs" version = "1.6.1" @@ -4021,7 +4012,6 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -4065,20 +4055,19 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.47" +version = "9.5.49" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, - {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, + {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, + {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, ] [package.dependencies] @@ -4140,7 +4129,6 @@ files = [ [package.dependencies] click = ">=7.0" -importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" Markdown = ">=3.6" MarkupSafe = ">=1.1" @@ -4149,7 +4137,6 @@ mkdocs-autorefs = ">=1.2" mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} platformdirs = ">=2.2" pymdown-extensions = ">=6.3" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} [package.extras] crystal = ["mkdocstrings-crystal (>=0.3.4)"] @@ -4158,13 +4145,13 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.12.2" +version = "1.13.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" files = [ - {file = "mkdocstrings_python-1.12.2-py3-none-any.whl", hash = "sha256:7f7d40d6db3cb1f5d19dbcd80e3efe4d0ba32b073272c0c0de9de2e604eda62a"}, - {file = "mkdocstrings_python-1.12.2.tar.gz", hash = "sha256:7a1760941c0b52a2cd87b960a9e21112ffe52e7df9d0b9583d04d47ed2e186f3"}, + {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, + {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, ] [package.dependencies] @@ -4313,49 +4300,55 @@ dill = ">=0.3.8" [[package]] name = "mypy" -version = "1.13.0" +version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, - {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, - {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, - {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, - {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, - {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, - {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, - {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, - {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, - {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, - {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, - {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, - {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, - {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, - {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, - {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, - {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, - {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, - {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, - {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, - {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, - {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, + {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, + {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, + {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, + {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, + {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, + {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, + {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, + {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, + {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, + {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, + {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, + {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, + {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, + {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" +mypy_extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.6.0" +typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -4377,13 +4370,13 @@ files = [ [[package]] name = "nbclient" -version = "0.10.1" +version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = true -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "nbclient-0.10.1-py3-none-any.whl", hash = "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d"}, - {file = "nbclient-0.10.1.tar.gz", hash = "sha256:3e93e348ab27e712acd46fccd809139e356eb9a31aab641d1a7991a6eb4e6f68"}, + {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, + {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, ] [package.dependencies] @@ -4394,25 +4387,24 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.16.4" +version = "7.16.5" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = true python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, - {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, + {file = "nbconvert-7.16.5-py3-none-any.whl", hash = "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547"}, + {file = "nbconvert-7.16.5.tar.gz", hash = "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "!=5.0.0" +bleach = {version = "!=5.0.0", extras = ["css"]} defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" @@ -4423,7 +4415,6 @@ nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" -tinycss2 = "*" traitlets = ">=5.1" [package.extras] @@ -4456,6 +4447,17 @@ traitlets = ">=5.1" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] test = ["pep440", "pre-commit", "pytest", "testpath"] +[[package]] +name = "ndjson" +version = "0.3.1" +description = "JsonDecoder for ndjson" +optional = true +python-versions = "*" +files = [ + {file = "ndjson-0.3.1-py2.py3-none-any.whl", hash = "sha256:839c22275e6baa3040077b83c005ac24199b94973309a8a1809be962c753a410"}, + {file = "ndjson-0.3.1.tar.gz", hash = "sha256:bf9746cb6bb1cb53d172cda7f154c07c786d665ff28341e4e689b796b229e5d6"}, +] + [[package]] name = "neo4j" version = "5.27.0" @@ -4488,20 +4490,21 @@ files = [ [[package]] name = "networkx" -version = "3.2.1" +version = "3.4.2" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, ] [package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] @@ -4529,20 +4532,31 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + [[package]] name = "notebook" -version = "7.3.1" +version = "7.3.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = true python-versions = ">=3.8" files = [ - {file = "notebook-7.3.1-py3-none-any.whl", hash = "sha256:212e1486b2230fe22279043f33c7db5cf9a01d29feb063a85cb139747b7c9483"}, - {file = "notebook-7.3.1.tar.gz", hash = "sha256:84381c2a82d867517fd25b86e986dae1fe113a70b98f03edff9b94e499fec8fa"}, + {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"}, + {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.3.2,<4.4" +jupyterlab = ">=4.3.4,<4.4" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -4646,13 +4660,13 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "openai" -version = "1.52.0" +version = "1.59.4" description = "The official Python library for the openai API" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8" files = [ - {file = "openai-1.52.0-py3-none-any.whl", hash = "sha256:0c249f20920183b0a2ca4f7dba7b0452df3ecd0fa7985eb1d91ad884bc3ced9c"}, - {file = "openai-1.52.0.tar.gz", hash = "sha256:95c65a5f77559641ab8f3e4c3a050804f7b51d278870e2ec1f7444080bfe565a"}, + {file = "openai-1.59.4-py3-none-any.whl", hash = "sha256:82113498699998e98104f87c19a890e82df9b01251a0395484360575d3a1d98a"}, + {file = "openai-1.59.4.tar.gz", hash = "sha256:b946dc5a2308dc1e03efbda80bf1cd64b6053b536851ad519f57ee44401663d2"}, ] [package.dependencies] @@ -4667,6 +4681,7 @@ typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +realtime = ["websockets (>=13,<15)"] [[package]] name = "openpyxl" @@ -4778,97 +4793,97 @@ opentelemetry-api = "1.27.0" [[package]] name = "orderly-set" -version = "5.2.2" +version = "5.2.3" description = "Orderly set" optional = true python-versions = ">=3.8" files = [ - {file = "orderly_set-5.2.2-py3-none-any.whl", hash = "sha256:f7a37c95a38c01cdfe41c3ffb62925a318a2286ea0a41790c057fc802aec54da"}, - {file = "orderly_set-5.2.2.tar.gz", hash = "sha256:52a18b86aaf3f5d5a498bbdb27bf3253a4e5c57ab38e5b7a56fa00115cd28448"}, + {file = "orderly_set-5.2.3-py3-none-any.whl", hash = "sha256:d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"}, + {file = "orderly_set-5.2.3.tar.gz", hash = "sha256:571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"}, ] [[package]] name = "orjson" -version = "3.10.12" +version = "3.10.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, - {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, - {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, - {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, - {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, - {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, - {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, - {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, - {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, - {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, - {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, - {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, - {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, - {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, - {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, - {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, - {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, - {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, - {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, + {file = "orjson-3.10.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4b6acd7c9c829895e50d385a357d4b8c3fafc19c5989da2bae11783b0fd4977"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1884e53c6818686891cc6fc5a3a2540f2f35e8c76eac8dc3b40480fb59660b00"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a428afb5720f12892f64920acd2eeb4d996595bf168a26dd9190115dbf1130d"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba5b13b8739ce5b630c65cb1c85aedbd257bcc2b9c256b06ab2605209af75a2e"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cab83e67f6aabda1b45882254b2598b48b80ecc112968fc6483fa6dae609e9f0"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:62c3cc00c7e776c71c6b7b9c48c5d2701d4c04e7d1d7cdee3572998ee6dc57cc"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dc03db4922e75bbc870b03fc49734cefbd50fe975e0878327d200022210b82d8"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:22f1c9a30b43d14a041a6ea190d9eca8a6b80c4beb0e8b67602c82d30d6eec3e"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b42f56821c29e697c68d7d421410d7c1d8f064ae288b525af6a50cf99a4b1200"}, + {file = "orjson-3.10.13-cp310-cp310-win32.whl", hash = "sha256:0dbf3b97e52e093d7c3e93eb5eb5b31dc7535b33c2ad56872c83f0160f943487"}, + {file = "orjson-3.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:46c249b4e934453be4ff2e518cd1adcd90467da7391c7a79eaf2fbb79c51e8c7"}, + {file = "orjson-3.10.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a36c0d48d2f084c800763473020a12976996f1109e2fcb66cfea442fdf88047f"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0065896f85d9497990731dfd4a9991a45b0a524baec42ef0a63c34630ee26fd6"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92b4ec30d6025a9dcdfe0df77063cbce238c08d0404471ed7a79f309364a3d19"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a94542d12271c30044dadad1125ee060e7a2048b6c7034e432e116077e1d13d2"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3723e137772639af8adb68230f2aa4bcb27c48b3335b1b1e2d49328fed5e244c"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f00c7fb18843bad2ac42dc1ce6dd214a083c53f1e324a0fd1c8137c6436269b"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0e2759d3172300b2f892dee85500b22fca5ac49e0c42cfff101aaf9c12ac9617"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee948c6c01f6b337589c88f8e0bb11e78d32a15848b8b53d3f3b6fea48842c12"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa6fe68f0981fba0d4bf9cdc666d297a7cdba0f1b380dcd075a9a3dd5649a69e"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dbcd7aad6bcff258f6896abfbc177d54d9b18149c4c561114f47ebfe74ae6bfd"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2149e2fcd084c3fd584881c7f9d7f9e5ad1e2e006609d8b80649655e0d52cd02"}, + {file = "orjson-3.10.13-cp311-cp311-win32.whl", hash = "sha256:89367767ed27b33c25c026696507c76e3d01958406f51d3a2239fe9e91959df2"}, + {file = "orjson-3.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:dca1d20f1af0daff511f6e26a27354a424f0b5cf00e04280279316df0f604a6f"}, + {file = "orjson-3.10.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a3614b00621c77f3f6487792238f9ed1dd8a42f2ec0e6540ee34c2d4e6db813a"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c976bad3996aa027cd3aef78aa57873f3c959b6c38719de9724b71bdc7bd14b"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f74d878d1efb97a930b8a9f9898890067707d683eb5c7e20730030ecb3fb930"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33ef84f7e9513fb13b3999c2a64b9ca9c8143f3da9722fbf9c9ce51ce0d8076e"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd2bcde107221bb9c2fa0c4aaba735a537225104173d7e19cf73f70b3126c993"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:064b9dbb0217fd64a8d016a8929f2fae6f3312d55ab3036b00b1d17399ab2f3e"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0044b0b8c85a565e7c3ce0a72acc5d35cda60793edf871ed94711e712cb637d"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7184f608ad563032e398f311910bc536e62b9fbdca2041be889afcbc39500de8"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d36f689e7e1b9b6fb39dbdebc16a6f07cbe994d3644fb1c22953020fc575935f"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54433e421618cd5873e51c0e9d0b9fb35f7bf76eb31c8eab20b3595bb713cd3d"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e1ba0c5857dd743438acecc1cd0e1adf83f0a81fee558e32b2b36f89e40cee8b"}, + {file = "orjson-3.10.13-cp312-cp312-win32.whl", hash = "sha256:a42b9fe4b0114b51eb5cdf9887d8c94447bc59df6dbb9c5884434eab947888d8"}, + {file = "orjson-3.10.13-cp312-cp312-win_amd64.whl", hash = "sha256:3a7df63076435f39ec024bdfeb4c9767ebe7b49abc4949068d61cf4857fa6d6c"}, + {file = "orjson-3.10.13-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2cdaf8b028a976ebab837a2c27b82810f7fc76ed9fb243755ba650cc83d07730"}, + {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48a946796e390cbb803e069472de37f192b7a80f4ac82e16d6eb9909d9e39d56"}, + {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d64f1db5ecbc21eb83097e5236d6ab7e86092c1cd4c216c02533332951afc"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:711878da48f89df194edd2ba603ad42e7afed74abcd2bac164685e7ec15f96de"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cf16f06cb77ce8baf844bc222dbcb03838f61d0abda2c3341400c2b7604e436e"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8257c3fb8dd7b0b446b5e87bf85a28e4071ac50f8c04b6ce2d38cb4abd7dff57"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9c3a87abe6f849a4a7ac8a8a1dede6320a4303d5304006b90da7a3cd2b70d2c"}, + {file = "orjson-3.10.13-cp313-cp313-win32.whl", hash = "sha256:527afb6ddb0fa3fe02f5d9fba4920d9d95da58917826a9be93e0242da8abe94a"}, + {file = "orjson-3.10.13-cp313-cp313-win_amd64.whl", hash = "sha256:b5f7c298d4b935b222f52d6c7f2ba5eafb59d690d9a3840b7b5c5cda97f6ec5c"}, + {file = "orjson-3.10.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e49333d1038bc03a25fdfe11c86360df9b890354bfe04215f1f54d030f33c342"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:003721c72930dbb973f25c5d8e68d0f023d6ed138b14830cc94e57c6805a2eab"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63664bf12addb318dc8f032160e0f5dc17eb8471c93601e8f5e0d07f95003784"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6066729cf9552d70de297b56556d14b4f49c8f638803ee3c90fd212fa43cc6af"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a1152e2761025c5d13b5e1908d4b1c57f3797ba662e485ae6f26e4e0c466388"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b21d91c5c5ef8a201036d207b1adf3aa596b930b6ca3c71484dd11386cf6c3"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b12a63f48bb53dba8453d36ca2661f2330126d54e26c1661e550b32864b28ce3"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a5a7624ab4d121c7e035708c8dd1f99c15ff155b69a1c0affc4d9d8b551281ba"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0fee076134398d4e6cb827002468679ad402b22269510cf228301b787fdff5ae"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ae537fcf330b3947e82c6ae4271e092e6cf16b9bc2cef68b14ffd0df1fa8832a"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f81b26c03f5fb5f0d0ee48d83cea4d7bc5e67e420d209cc1a990f5d1c62f9be0"}, + {file = "orjson-3.10.13-cp38-cp38-win32.whl", hash = "sha256:0bc858086088b39dc622bc8219e73d3f246fb2bce70a6104abd04b3a080a66a8"}, + {file = "orjson-3.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:3ca6f17467ebbd763f8862f1d89384a5051b461bb0e41074f583a0ebd7120e8e"}, + {file = "orjson-3.10.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a11532cbfc2f5752c37e84863ef8435b68b0e6d459b329933294f65fa4bda1a"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c96d2fb80467d1d0dfc4d037b4e1c0f84f1fe6229aa7fea3f070083acef7f3d7"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dda4ba4d3e6f6c53b6b9c35266788053b61656a716a7fef5c884629c2a52e7aa"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f998bbf300690be881772ee9c5281eb9c0044e295bcd4722504f5b5c6092ff"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1cc42ed75b585c0c4dc5eb53a90a34ccb493c09a10750d1a1f9b9eff2bd12"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b0f29d485411e3c13d79604b740b14e4e5fb58811743f6f4f9693ee6480a8f"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:233aae4474078d82f425134bb6a10fb2b3fc5a1a1b3420c6463ddd1b6a97eda8"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e384e330a67cf52b3597ee2646de63407da6f8fc9e9beec3eaaaef5514c7a1c9"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4222881d0aab76224d7b003a8e5fdae4082e32c86768e0e8652de8afd6c4e2c1"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e400436950ba42110a20c50c80dff4946c8e3ec09abc1c9cf5473467e83fd1c5"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f47c9e7d224b86ffb086059cdcf634f4b3f32480f9838864aa09022fe2617ce2"}, + {file = "orjson-3.10.13-cp39-cp39-win32.whl", hash = "sha256:a9ecea472f3eb653e1c0a3d68085f031f18fc501ea392b98dcca3e87c24f9ebe"}, + {file = "orjson-3.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588"}, + {file = "orjson-3.10.13.tar.gz", hash = "sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec"}, ] [[package]] @@ -4921,70 +4936,89 @@ files = [ [[package]] name = "pandas" -version = "2.0.3" +version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, - {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, ] [package.dependencies] numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" -tzdata = ">=2022.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "pandocfilters" @@ -5025,18 +5059,18 @@ files = [ [[package]] name = "pathvalidate" -version = "3.2.1" +version = "3.2.3" description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "pathvalidate-3.2.1-py3-none-any.whl", hash = "sha256:9a6255eb8f63c9e2135b9be97a5ce08f10230128c4ae7b3e935378b82b22c4c9"}, - {file = "pathvalidate-3.2.1.tar.gz", hash = "sha256:f5d07b1e2374187040612a1fcd2bcb2919f8db180df254c9581bb90bf903377d"}, + {file = "pathvalidate-3.2.3-py3-none-any.whl", hash = "sha256:5eaf0562e345d4b6d0c0239d0f690c3bd84d2a9a3c4c73b99ea667401b27bee1"}, + {file = "pathvalidate-3.2.3.tar.gz", hash = "sha256:59b5b9278e30382d6d213497623043ebe63f10e29055be4419a9c04c721739cb"}, ] [package.extras] -docs = ["Sphinx (>=2.4)", "sphinx-rtd-theme (>=1.2.2)", "urllib3 (<2)"] -readme = ["path (>=13,<17)", "readmemaker (>=1.1.0)"] +docs = ["Sphinx (>=2.4)", "sphinx_rtd_theme (>=1.2.2)", "urllib3 (<2)"] +readme = ["path (>=13,<18)", "readmemaker (>=1.2.0)"] test = ["Faker (>=1.0.8)", "allpairspy (>=2)", "click (>=6.2)", "pytest (>=6.0.1)", "pytest-md-report (>=0.6.2)"] [[package]] @@ -5168,93 +5202,89 @@ numpy = "*" [[package]] name = "pillow" -version = "11.0.0" +version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" files = [ - {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, - {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"}, - {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"}, - {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"}, - {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"}, - {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"}, - {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"}, - {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"}, - {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"}, - {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"}, - {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"}, - {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"}, - {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"}, - {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"}, - {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"}, - {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"}, - {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"}, - {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"}, - {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"}, - {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"}, - {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"}, - {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"}, - {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"}, - {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"}, - {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"}, - {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"}, - {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"}, - {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"}, - {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"}, - {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"}, - {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"}, - {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"}, - {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"}, - {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"}, - {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"}, - {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"}, - {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"}, - {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"}, - {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"}, - {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"}, - {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"}, - {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"}, - {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"}, - {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] typing = ["typing-extensions"] xmp = ["defusedxml"] @@ -5321,13 +5351,13 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "posthog" -version = "3.7.4" +version = "3.7.5" description = "Integrate PostHog into any python application." optional = true python-versions = "*" files = [ - {file = "posthog-3.7.4-py2.py3-none-any.whl", hash = "sha256:21c18c6bf43b2de303ea4cd6e95804cc0f24c20cb2a96a8fd09da2ed50b62faa"}, - {file = "posthog-3.7.4.tar.gz", hash = "sha256:19384bd09d330f9787a7e2446aba14c8057ece56144970ea2791072d4e40cd36"}, + {file = "posthog-3.7.5-py2.py3-none-any.whl", hash = "sha256:022132c17069dde03c5c5904e2ae1b9bd68d5059cbc5a8dffc5c1537a1b71cb5"}, + {file = "posthog-3.7.5.tar.gz", hash = "sha256:8ba40ab623da35db72715fc87fe7dccb7fc272ced92581fe31db2d4dbe7ad761"}, ] [package.dependencies] @@ -5342,6 +5372,24 @@ dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] sentry = ["django", "sentry-sdk"] test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] +[[package]] +name = "pre-commit" +version = "4.0.1" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, + {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + [[package]] name = "prometheus-client" version = "0.21.1" @@ -5483,32 +5531,32 @@ files = [ [[package]] name = "psutil" -version = "6.1.0" +version = "6.1.1" description = "Cross-platform lib for process and system monitoring in Python." optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"}, - {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"}, - {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:000d1d1ebd634b4efb383f4034437384e44a6d455260aaee2eca1e9c1b55f047"}, - {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5cd2bcdc75b452ba2e10f0e8ecc0b57b827dd5d7aaffbc6821b2a9a242823a76"}, - {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:045f00a43c737f960d273a83973b2511430d61f283a44c96bf13a6e829ba8fdc"}, - {file = "psutil-6.1.0-cp27-none-win32.whl", hash = "sha256:9118f27452b70bb1d9ab3198c1f626c2499384935aaf55388211ad982611407e"}, - {file = "psutil-6.1.0-cp27-none-win_amd64.whl", hash = "sha256:a8506f6119cff7015678e2bce904a4da21025cc70ad283a53b099e7620061d85"}, - {file = "psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688"}, - {file = "psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a"}, - {file = "psutil-6.1.0-cp36-cp36m-win32.whl", hash = "sha256:6d3fbbc8d23fcdcb500d2c9f94e07b1342df8ed71b948a2649b5cb060a7c94ca"}, - {file = "psutil-6.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1209036fbd0421afde505a4879dee3b2fd7b1e14fee81c0069807adcbbcca747"}, - {file = "psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e"}, - {file = "psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be"}, - {file = "psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a"}, + {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, + {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, + {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, + {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, + {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, + {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, + {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, + {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, ] [package.extras] -dev = ["black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "wheel"] +dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] test = ["pytest", "pytest-xdist", "setuptools"] [[package]] @@ -5760,13 +5808,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.6.1" +version = "2.7.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, - {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, + {file = "pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd"}, + {file = "pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93"}, ] [package.dependencies] @@ -5780,13 +5828,13 @@ yaml = ["pyyaml (>=6.0.1)"] [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] @@ -5794,13 +5842,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" -version = "2.9.0" +version = "2.10.1" description = "JSON Web Token implementation in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, - {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, ] [package.dependencies] @@ -5814,21 +5862,21 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylance" -version = "0.19.1" +version = "0.19.2" description = "python wrapper for Lance columnar format" optional = false python-versions = ">=3.9" files = [ - {file = "pylance-0.19.1-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:a254d09690a5e09cadc5fecc7b43b2bfc20b477e0f0ba31497e1d6abb36b524a"}, - {file = "pylance-0.19.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9859c372b2d7fe443b6218f62e9d77caf94961cac73b274c85b724f20dd6b690"}, - {file = "pylance-0.19.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8315152f57329e7668ff5c82c252591ea0e3d2aed702dd19a42d645945e7a07e"}, - {file = "pylance-0.19.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:7c2e0e00b40214edae576075dbfa432cadaf5ba21354b0c46f307daf4e77403f"}, - {file = "pylance-0.19.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e26ce273840912c45dd2b8f6f8fb9082c1c788d696e11b78ddad3949e3892d50"}, - {file = "pylance-0.19.1-cp39-abi3-win_amd64.whl", hash = "sha256:b341e547c995b5d6b32eb63e1e015d31b608de49a9ad03f8981453f4c667e8e1"}, + {file = "pylance-0.19.2-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:659b2ba45b7c905a2873bb36e9b4a6ec4634690723d45af0b469a502acacf5eb"}, + {file = "pylance-0.19.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:6a15b8b09e015feb11307ff63ef0742f9e120100e17476b1091d3db543c19bdf"}, + {file = "pylance-0.19.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1732ff03acceacc6793f6b209357a757ce3cfd5a94369a81b3d15e8e425f9a"}, + {file = "pylance-0.19.2-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c3be7883ae860c39186f41798cd752b93298450cc09488108f2aa738aa352f0e"}, + {file = "pylance-0.19.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:48a618dfc493932b49a8c1f50ad031e39c4d505d30c968d6467da1a03720a523"}, + {file = "pylance-0.19.2-cp39-abi3-win_amd64.whl", hash = "sha256:70d47d94521fc973460c8d765c3960db79a1f676aab658434693ab3e5a7112c1"}, ] [package.dependencies] -numpy = ">=1.22,<2" +numpy = ">=1.22" pyarrow = ">=12" [package.extras] @@ -5836,34 +5884,34 @@ benchmarks = ["pytest-benchmark"] cuvs-cu11 = ["cuvs-cu11", "pylibraft-cu11"] cuvs-cu12 = ["cuvs-cu12", "pylibraft-cu12"] dev = ["ruff (==0.4.1)"] -ray = ["ray[data]"] +ray = ["ray[data] (<2.38)"] tests = ["boto3", "datasets", "duckdb", "ml-dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] torch = ["torch"] [[package]] name = "pylint" -version = "3.3.2" +version = "3.3.3" description = "python code static checker" optional = false python-versions = ">=3.9.0" files = [ - {file = "pylint-3.3.2-py3-none-any.whl", hash = "sha256:77f068c287d49b8683cd7c6e624243c74f92890f767f106ffa1ddf3c0a54cb7a"}, - {file = "pylint-3.3.2.tar.gz", hash = "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01"}, + {file = "pylint-3.3.3-py3-none-any.whl", hash = "sha256:26e271a2bc8bce0fc23833805a9076dd9b4d5194e2a02164942cb3cdc37b4183"}, + {file = "pylint-3.3.3.tar.gz", hash = "sha256:07c607523b17e6d16e2ae0d7ef59602e332caa762af64203c24b41c27139f36a"}, ] [package.dependencies] -astroid = ">=3.3.5,<=3.4.0-dev0" +astroid = ">=3.3.8,<=3.4.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] spelling = ["pyenchant (>=3.2,<4.0)"] @@ -5871,13 +5919,13 @@ testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "10.12" +version = "10.14" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, - {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, + {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, + {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, ] [package.dependencies] @@ -5885,17 +5933,17 @@ markdown = ">=3.6" pyyaml = "*" [package.extras] -extra = ["pygments (>=2.12)"] +extra = ["pygments (>=2.19.1)"] [[package]] name = "pymilvus" -version = "2.5.0" +version = "2.5.3" description = "Python Sdk for Milvus" optional = true python-versions = ">=3.8" files = [ - {file = "pymilvus-2.5.0-py3-none-any.whl", hash = "sha256:a0e8653d8fe78019abfda79b3404ef7423f312501e8cbd7dc728051ce8732652"}, - {file = "pymilvus-2.5.0.tar.gz", hash = "sha256:4da14a3bd957a4921166f9355fd1f1ac5c5e4e80b46f12f64d9c9a6dcb8cb395"}, + {file = "pymilvus-2.5.3-py3-none-any.whl", hash = "sha256:64ca63594284586937274800be27a402f3be2d078130bf81d94ab8d7798ac9c8"}, + {file = "pymilvus-2.5.3.tar.gz", hash = "sha256:68bc3797b7a14c494caf116cee888894ffd6eba7b96a3ac841be85d60694cc5d"}, ] [package.dependencies] @@ -5925,13 +5973,13 @@ files = [ [[package]] name = "pyparsing" -version = "3.2.0" +version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" files = [ - {file = "pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84"}, - {file = "pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"}, + {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, + {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, ] [package.extras] @@ -6091,15 +6139,18 @@ dev = ["black (==24.10.0)", "build (==1.2.1)", "flake8 (==7.1.1)", "pytest (==8. [[package]] name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" +version = "3.2.1" +description = "JSON Log Formatter for the Python Logging Package" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, + {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"}, + {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"}, ] +[package.extras] +dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + [[package]] name = "python-magic" version = "0.4.27" @@ -6113,13 +6164,13 @@ files = [ [[package]] name = "python-multipart" -version = "0.0.17" +version = "0.0.20" description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" files = [ - {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"}, - {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"}, + {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, + {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, ] [[package]] @@ -6407,123 +6458,126 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qdrant-client" -version = "1.12.1" +version = "1.12.2" description = "Client library for the Qdrant vector search engine" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "qdrant_client-1.12.1-py3-none-any.whl", hash = "sha256:b2d17ce18e9e767471368380dd3bbc4a0e3a0e2061fedc9af3542084b48451e0"}, - {file = "qdrant_client-1.12.1.tar.gz", hash = "sha256:35e8e646f75b7b883b3d2d0ee4c69c5301000bba41c82aa546e985db0f1aeb72"}, + {file = "qdrant_client-1.12.2-py3-none-any.whl", hash = "sha256:a0ae500a46a679ff3521ba3f1f1cf3d72b57090a768cec65fc317066bcbac1e6"}, + {file = "qdrant_client-1.12.2.tar.gz", hash = "sha256:2777e09b3e89bb22bb490384d8b1fa8140f3915287884f18984f7031a346aba5"}, ] [package.dependencies] grpcio = ">=1.41.0" grpcio-tools = ">=1.41.0" httpx = {version = ">=0.20.0", extras = ["http2"]} -numpy = {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""} +numpy = [ + {version = ">=1.21", markers = "python_version >= \"3.10\" and python_version < \"3.12\""}, + {version = ">=1.26", markers = "python_version >= \"3.12\" and python_version < \"3.13\""}, +] portalocker = ">=2.7.0,<3.0.0" pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.3.6)"] -fastembed-gpu = ["fastembed-gpu (==0.3.6)"] +fastembed = ["fastembed (==0.5.0)"] +fastembed-gpu = ["fastembed-gpu (==0.5.0)"] [[package]] name = "rapidfuzz" -version = "3.10.1" +version = "3.11.0" description = "rapid fuzzy string matching" optional = true python-versions = ">=3.9" files = [ - {file = "rapidfuzz-3.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f17d9f21bf2f2f785d74f7b0d407805468b4c173fa3e52c86ec94436b338e74a"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b31f358a70efc143909fb3d75ac6cd3c139cd41339aa8f2a3a0ead8315731f2b"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4f43f2204b56a61448ec2dd061e26fd344c404da99fb19f3458200c5874ba2"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d81bf186a453a2757472133b24915768abc7c3964194406ed93e170e16c21cb"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3611c8f45379a12063d70075c75134f2a8bd2e4e9b8a7995112ddae95ca1c982"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c3b537b97ac30da4b73930fa8a4fe2f79c6d1c10ad535c5c09726612cd6bed9"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231ef1ec9cf7b59809ce3301006500b9d564ddb324635f4ea8f16b3e2a1780da"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed4f3adc1294834955b7e74edd3c6bd1aad5831c007f2d91ea839e76461a5879"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7b6015da2e707bf632a71772a2dbf0703cff6525732c005ad24987fe86e8ec32"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1b35a118d61d6f008e8e3fb3a77674d10806a8972c7b8be433d6598df4d60b01"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bc308d79a7e877226f36bdf4e149e3ed398d8277c140be5c1fd892ec41739e6d"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f017dbfecc172e2d0c37cf9e3d519179d71a7f16094b57430dffc496a098aa17"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-win32.whl", hash = "sha256:36c0e1483e21f918d0f2f26799fe5ac91c7b0c34220b73007301c4f831a9c4c7"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:10746c1d4c8cd8881c28a87fd7ba0c9c102346dfe7ff1b0d021cdf093e9adbff"}, - {file = "rapidfuzz-3.10.1-cp310-cp310-win_arm64.whl", hash = "sha256:dfa64b89dcb906835e275187569e51aa9d546a444489e97aaf2cc84011565fbe"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:92958ae075c87fef393f835ed02d4fe8d5ee2059a0934c6c447ea3417dfbf0e8"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba7521e072c53e33c384e78615d0718e645cab3c366ecd3cc8cb732befd94967"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d02cbd75d283c287471b5b3738b3e05c9096150f93f2d2dfa10b3d700f2db9"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efa1582a397da038e2f2576c9cd49b842f56fde37d84a6b0200ffebc08d82350"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12912acee1f506f974f58de9fdc2e62eea5667377a7e9156de53241c05fdba8"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666d5d8b17becc3f53447bcb2b6b33ce6c2df78792495d1fa82b2924cd48701a"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26f71582c0d62445067ee338ddad99b655a8f4e4ed517a90dcbfbb7d19310474"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8a2ef08b27167bcff230ffbfeedd4c4fa6353563d6aaa015d725dd3632fc3de7"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:365e4fc1a2b95082c890f5e98489b894e6bf8c338c6ac89bb6523c2ca6e9f086"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1996feb7a61609fa842e6b5e0c549983222ffdedaf29644cc67e479902846dfe"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:cf654702f144beaa093103841a2ea6910d617d0bb3fccb1d1fd63c54dde2cd49"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec108bf25de674781d0a9a935030ba090c78d49def3d60f8724f3fc1e8e75024"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-win32.whl", hash = "sha256:031f8b367e5d92f7a1e27f7322012f3c321c3110137b43cc3bf678505583ef48"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:f98f36c6a1bb9a6c8bbec99ad87c8c0e364f34761739b5ea9adf7b48129ae8cf"}, - {file = "rapidfuzz-3.10.1-cp311-cp311-win_arm64.whl", hash = "sha256:f1da2028cb4e41be55ee797a82d6c1cf589442504244249dfeb32efc608edee7"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1340b56340896bede246f612b6ecf685f661a56aabef3d2512481bfe23ac5835"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2316515169b7b5a453f0ce3adbc46c42aa332cae9f2edb668e24d1fc92b2f2bb"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e06fe6a12241ec1b72c0566c6b28cda714d61965d86569595ad24793d1ab259"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d99c1cd9443b19164ec185a7d752f4b4db19c066c136f028991a480720472e23"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d9aa156ed52d3446388ba4c2f335e312191d1ca9d1f5762ee983cf23e4ecf6"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54bcf4efaaee8e015822be0c2c28214815f4f6b4f70d8362cfecbd58a71188ac"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0c955e32afdbfdf6e9ee663d24afb25210152d98c26d22d399712d29a9b976b"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:191633722203f5b7717efcb73a14f76f3b124877d0608c070b827c5226d0b972"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:195baad28057ec9609e40385991004e470af9ef87401e24ebe72c064431524ab"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0fff4a6b87c07366662b62ae994ffbeadc472e72f725923f94b72a3db49f4671"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4ffed25f9fdc0b287f30a98467493d1e1ce5b583f6317f70ec0263b3c97dbba6"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d02cf8e5af89a9ac8f53c438ddff6d773f62c25c6619b29db96f4aae248177c0"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-win32.whl", hash = "sha256:f3bb81d4fe6a5d20650f8c0afcc8f6e1941f6fecdb434f11b874c42467baded0"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:aaf83e9170cb1338922ae42d320699dccbbdca8ffed07faeb0b9257822c26e24"}, - {file = "rapidfuzz-3.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:c5da802a0d085ad81b0f62828fb55557996c497b2d0b551bbdfeafd6d447892f"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc22d69a1c9cccd560a5c434c0371b2df0f47c309c635a01a913e03bbf183710"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38b0dac2c8e057562b8f0d8ae5b663d2d6a28c5ab624de5b73cef9abb6129a24"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fde3bbb14e92ce8fcb5c2edfff72e474d0080cadda1c97785bf4822f037a309"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9141fb0592e55f98fe9ac0f3ce883199b9c13e262e0bf40c5b18cdf926109d16"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:237bec5dd1bfc9b40bbd786cd27949ef0c0eb5fab5eb491904c6b5df59d39d3c"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18123168cba156ab5794ea6de66db50f21bb3c66ae748d03316e71b27d907b95"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b75fe506c8e02769cc47f5ab21ce3e09b6211d3edaa8f8f27331cb6988779be"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da82aa4b46973aaf9e03bb4c3d6977004648c8638febfc0f9d237e865761270"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c34c022d5ad564f1a5a57a4a89793bd70d7bad428150fb8ff2760b223407cdcf"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e96c84d6c2a0ca94e15acb5399118fff669f4306beb98a6d8ec6f5dccab4412"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e8e154b84a311263e1aca86818c962e1fa9eefdd643d1d5d197fcd2738f88cb9"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:335fee93188f8cd585552bb8057228ce0111bd227fa81bfd40b7df6b75def8ab"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-win32.whl", hash = "sha256:6729b856166a9e95c278410f73683957ea6100c8a9d0a8dbe434c49663689255"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:0e06d99ad1ad97cb2ef7f51ec6b1fedd74a3a700e4949353871cf331d07b382a"}, - {file = "rapidfuzz-3.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:8d1b7082104d596a3eb012e0549b2634ed15015b569f48879701e9d8db959dbb"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:779027d3307e1a2b1dc0c03c34df87a470a368a1a0840a9d2908baf2d4067956"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:440b5608ab12650d0390128d6858bc839ae77ffe5edf0b33a1551f2fa9860651"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82cac41a411e07a6f3dc80dfbd33f6be70ea0abd72e99c59310819d09f07d945"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:958473c9f0bca250590200fd520b75be0dbdbc4a7327dc87a55b6d7dc8d68552"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ef60dfa73749ef91cb6073be1a3e135f4846ec809cc115f3cbfc6fe283a5584"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7fbac18f2c19fc983838a60611e67e3262e36859994c26f2ee85bb268de2355"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a0d519ff39db887cd73f4e297922786d548f5c05d6b51f4e6754f452a7f4296"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bebb7bc6aeb91cc57e4881b222484c26759ca865794187217c9dcea6c33adae6"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe07f8b9c3bb5c5ad1d2c66884253e03800f4189a60eb6acd6119ebaf3eb9894"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfa48a4a2d45a41457f0840c48e579db157a927f4e97acf6e20df8fc521c79de"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2cf44d01bfe8ee605b7eaeecbc2b9ca64fc55765f17b304b40ed8995f69d7716"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e6bbca9246d9eedaa1c84e04a7f555493ba324d52ae4d9f3d9ddd1b740dcd87"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-win32.whl", hash = "sha256:567f88180f2c1423b4fe3f3ad6e6310fc97b85bdba574801548597287fc07028"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6b2cd7c29d6ecdf0b780deb587198f13213ac01c430ada6913452fd0c40190fc"}, - {file = "rapidfuzz-3.10.1-cp39-cp39-win_arm64.whl", hash = "sha256:9f912d459e46607ce276128f52bea21ebc3e9a5ccf4cccfef30dd5bddcf47be8"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ac4452f182243cfab30ba4668ef2de101effaedc30f9faabb06a095a8c90fd16"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:565c2bd4f7d23c32834652b27b51dd711814ab614b4e12add8476be4e20d1cf5"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d9747149321607be4ccd6f9f366730078bed806178ec3eeb31d05545e9e8f"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:616290fb9a8fa87e48cb0326d26f98d4e29f17c3b762c2d586f2b35c1fd2034b"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:073a5b107e17ebd264198b78614c0206fa438cce749692af5bc5f8f484883f50"}, - {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39c4983e2e2ccb9732f3ac7d81617088822f4a12291d416b09b8a1eadebb3e29"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ac7adee6bcf0c6fee495d877edad1540a7e0f5fc208da03ccb64734b43522d7a"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:425f4ac80b22153d391ee3f94bc854668a0c6c129f05cf2eaf5ee74474ddb69e"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65a2fa13e8a219f9b5dcb9e74abe3ced5838a7327e629f426d333dfc8c5a6e66"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75561f3df9a906aaa23787e9992b228b1ab69007932dc42070f747103e177ba8"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edd062490537e97ca125bc6c7f2b7331c2b73d21dc304615afe61ad1691e15d5"}, - {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfcc8feccf63245a22dfdd16e222f1a39771a44b870beb748117a0e09cbb4a62"}, - {file = "rapidfuzz-3.10.1.tar.gz", hash = "sha256:5a15546d847a915b3f42dc79ef9b0c78b998b4e2c53b252e7166284066585979"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb8a54543d16ab1b69e2c5ed96cabbff16db044a50eddfc028000138ca9ddf33"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:231c8b2efbd7f8d2ecd1ae900363ba168b8870644bb8f2b5aa96e4a7573bde19"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e7f442fb9cca81e9df32333fb075ef729052bcabe05b0afc0441f462299114"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:906f1f2a1b91c06599b3dd1be207449c5d4fc7bd1e1fa2f6aef161ea6223f165"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed59044aea9eb6c663112170f2399b040d5d7b162828b141f2673e822093fa8"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cb1965a28b0fa64abdee130c788a0bc0bb3cf9ef7e3a70bf055c086c14a3d7e"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b488b244931d0291412917e6e46ee9f6a14376625e150056fe7c4426ef28225"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f0ba13557fec9d5ffc0a22826754a7457cc77f1b25145be10b7bb1d143ce84c6"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3871fa7dfcef00bad3c7e8ae8d8fd58089bad6fb21f608d2bf42832267ca9663"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b2669eafee38c5884a6e7cc9769d25c19428549dcdf57de8541cf9e82822e7db"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ffa1bb0e26297b0f22881b219ffc82a33a3c84ce6174a9d69406239b14575bd5"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:45b15b8a118856ac9caac6877f70f38b8a0d310475d50bc814698659eabc1cdb"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-win32.whl", hash = "sha256:22033677982b9c4c49676f215b794b0404073f8974f98739cb7234e4a9ade9ad"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:be15496e7244361ff0efcd86e52559bacda9cd975eccf19426a0025f9547c792"}, + {file = "rapidfuzz-3.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:714a7ba31ba46b64d30fccfe95f8013ea41a2e6237ba11a805a27cdd3bce2573"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8724a978f8af7059c5323d523870bf272a097478e1471295511cf58b2642ff83"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b63cb1f2eb371ef20fb155e95efd96e060147bdd4ab9fc400c97325dfee9fe1"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82497f244aac10b20710448645f347d862364cc4f7d8b9ba14bd66b5ce4dec18"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:339607394941801e6e3f6c1ecd413a36e18454e7136ed1161388de674f47f9d9"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84819390a36d6166cec706b9d8f0941f115f700b7faecab5a7e22fc367408bc3"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eea8d9e20632d68f653455265b18c35f90965e26f30d4d92f831899d6682149b"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b659e1e2ea2784a9a397075a7fc395bfa4fe66424042161c4bcaf6e4f637b38"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1315cd2a351144572e31fe3df68340d4b83ddec0af8b2e207cd32930c6acd037"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a7743cca45b4684c54407e8638f6d07b910d8d811347b9d42ff21262c7c23245"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5bb636b0150daa6d3331b738f7c0f8b25eadc47f04a40e5c23c4bfb4c4e20ae3"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:42f4dd264ada7a9aa0805ea0da776dc063533917773cf2df5217f14eb4429eae"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51f24cb39e64256221e6952f22545b8ce21cacd59c0d3e367225da8fc4b868d8"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-win32.whl", hash = "sha256:aaf391fb6715866bc14681c76dc0308f46877f7c06f61d62cc993b79fc3c4a2a"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebadd5b8624d8ad503e505a99b8eb26fe3ea9f8e9c2234e805a27b269e585842"}, + {file = "rapidfuzz-3.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:d895998fec712544c13cfe833890e0226585cf0391dd3948412441d5d68a2b8c"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f382fec4a7891d66fb7163c90754454030bb9200a13f82ee7860b6359f3f2fa8"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dfaefe08af2a928e72344c800dcbaf6508e86a4ed481e28355e8d4b6a6a5230e"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92ebb7c12f682b5906ed98429f48a3dd80dd0f9721de30c97a01473d1a346576"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a1b3ebc62d4bcdfdeba110944a25ab40916d5383c5e57e7c4a8dc0b6c17211a"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c6d7fea39cb33e71de86397d38bf7ff1a6273e40367f31d05761662ffda49e4"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99aebef8268f2bc0b445b5640fd3312e080bd17efd3fbae4486b20ac00466308"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4469307f464ae3089acf3210b8fc279110d26d10f79e576f385a98f4429f7d97"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:eb97c53112b593f89a90b4f6218635a9d1eea1d7f9521a3b7d24864228bbc0aa"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef8937dae823b889c0273dfa0f0f6c46a3658ac0d851349c464d1b00e7ff4252"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d95f9e9f3777b96241d8a00d6377cc9c716981d828b5091082d0fe3a2924b43e"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:b1d67d67f89e4e013a5295e7523bc34a7a96f2dba5dd812c7c8cb65d113cbf28"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d994cf27e2f874069884d9bddf0864f9b90ad201fcc9cb2f5b82bacc17c8d5f2"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-win32.whl", hash = "sha256:ba26d87fe7fcb56c4a53b549a9e0e9143f6b0df56d35fe6ad800c902447acd5b"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b1f7efdd7b7adb32102c2fa481ad6f11923e2deb191f651274be559d56fc913b"}, + {file = "rapidfuzz-3.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:ed78c8e94f57b44292c1a0350f580e18d3a3c5c0800e253f1583580c1b417ad2"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e60814edd0c9b511b5f377d48b9782b88cfe8be07a98f99973669299c8bb318a"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f28952da055dbfe75828891cd3c9abf0984edc8640573c18b48c14c68ca5e06"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e8f93bc736020351a6f8e71666e1f486bb8bd5ce8112c443a30c77bfde0eb68"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76a4a11ba8f678c9e5876a7d465ab86def047a4fcc043617578368755d63a1bc"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc0e0d41ad8a056a9886bac91ff9d9978e54a244deb61c2972cc76b66752de9c"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8ea35f2419c7d56b3e75fbde2698766daedb374f20eea28ac9b1f668ef4f74"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd340bbd025302276b5aa221dccfe43040c7babfc32f107c36ad783f2ffd8775"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:494eef2c68305ab75139034ea25328a04a548d297712d9cf887bf27c158c388b"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5a167344c1d6db06915fb0225592afdc24d8bafaaf02de07d4788ddd37f4bc2f"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c7af25bda96ac799378ac8aba54a8ece732835c7b74cfc201b688a87ed11152"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d2a0f7e17f33e7890257367a1662b05fecaf56625f7dbb6446227aaa2b86448b"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d0d26c7172bdb64f86ee0765c5b26ea1dc45c52389175888ec073b9b28f4305"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-win32.whl", hash = "sha256:6ad02bab756751c90fa27f3069d7b12146613061341459abf55f8190d899649f"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:b1472986fd9c5d318399a01a0881f4a0bf4950264131bb8e2deba9df6d8c362b"}, + {file = "rapidfuzz-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c408f09649cbff8da76f8d3ad878b64ba7f7abdad1471efb293d2c075e80c822"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1bac4873f6186f5233b0084b266bfb459e997f4c21fc9f029918f44a9eccd304"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f9f12c2d0aa52b86206d2059916153876a9b1cf9dfb3cf2f344913167f1c3d4"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd501de6f7a8f83557d20613b58734d1cb5f0be78d794cde64fe43cfc63f5f2"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4416ca69af933d4a8ad30910149d3db6d084781d5c5fdedb713205389f535385"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0821b9bdf18c5b7d51722b906b233a39b17f602501a966cfbd9b285f8ab83cd"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0edecc3f90c2653298d380f6ea73b536944b767520c2179ec5d40b9145e47aa"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4513dd01cee11e354c31b75f652d4d466c9440b6859f84e600bdebfccb17735a"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9727b85511b912571a76ce53c7640ba2c44c364e71cef6d7359b5412739c570"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ab9eab33ee3213f7751dc07a1a61b8d9a3d748ca4458fffddd9defa6f0493c16"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6b01c1ddbb054283797967ddc5433d5c108d680e8fa2684cf368be05407b07e4"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3857e335f97058c4b46fa39ca831290b70de554a5c5af0323d2f163b19c5f2a6"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d98a46cf07c0c875d27e8a7ed50f304d83063e49b9ab63f21c19c154b4c0d08d"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-win32.whl", hash = "sha256:c36539ed2c0173b053dafb221458812e178cfa3224ade0960599bec194637048"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec8d7d8567e14af34a7911c98f5ac74a3d4a743cd848643341fc92b12b3784ff"}, + {file = "rapidfuzz-3.11.0-cp39-cp39-win_arm64.whl", hash = "sha256:62171b270ecc4071be1c1f99960317db261d4c8c83c169e7f8ad119211fe7397"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f06e3c4c0a8badfc4910b9fd15beb1ad8f3b8fafa8ea82c023e5e607b66a78e4"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fe7aaf5a54821d340d21412f7f6e6272a9b17a0cbafc1d68f77f2fc11009dcd5"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25398d9ac7294e99876a3027ffc52c6bebeb2d702b1895af6ae9c541ee676702"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a52eea839e4bdc72c5e60a444d26004da00bb5bc6301e99b3dde18212e41465"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c87319b0ab9d269ab84f6453601fd49b35d9e4a601bbaef43743f26fabf496c"}, + {file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3048c6ed29d693fba7d2a7caf165f5e0bb2b9743a0989012a98a47b975355cca"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b04f29735bad9f06bb731c214f27253bd8bedb248ef9b8a1b4c5bde65b838454"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7864e80a0d4e23eb6194254a81ee1216abdc53f9dc85b7f4d56668eced022eb8"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3794df87313dfb56fafd679b962e0613c88a293fd9bd5dd5c2793d66bf06a101"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d71da0012face6f45432a11bc59af19e62fac5a41f8ce489e80c0add8153c3d1"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff38378346b7018f42cbc1f6d1d3778e36e16d8595f79a312b31e7c25c50bd08"}, + {file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6668321f90aa02a5a789d4e16058f2e4f2692c5230252425c3532a8a62bc3424"}, + {file = "rapidfuzz-3.11.0.tar.gz", hash = "sha256:a53ca4d3f52f00b393fab9b5913c5bafb9afc27d030c8a1db1283da6917a860f"}, ] [package.extras] @@ -6531,13 +6585,13 @@ all = ["numpy"] [[package]] name = "redis" -version = "5.2.0" +version = "5.2.1" description = "Python client for Redis database and key-value store" optional = true python-versions = ">=3.8" files = [ - {file = "redis-5.2.0-py3-none-any.whl", hash = "sha256:ae174f2bb3b1bf2b09d54bf3e51fbc1469cf6c10aa03e21141f51969801a7897"}, - {file = "redis-5.2.0.tar.gz", hash = "sha256:0b1087665a771b1ff2e003aa5bdd354f15a70c9e25d5a7dbf9c722c16528a7b0"}, + {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, + {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, ] [package.dependencies] @@ -6891,29 +6945,29 @@ files = [ [[package]] name = "ruff" -version = "0.8.2" +version = "0.8.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, - {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, - {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, - {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, - {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, - {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, - {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, + {file = "ruff-0.8.6-py3-none-linux_armv6l.whl", hash = "sha256:defed167955d42c68b407e8f2e6f56ba52520e790aba4ca707a9c88619e580e3"}, + {file = "ruff-0.8.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:54799ca3d67ae5e0b7a7ac234baa657a9c1784b48ec954a094da7c206e0365b1"}, + {file = "ruff-0.8.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e88b8f6d901477c41559ba540beeb5a671e14cd29ebd5683903572f4b40a9807"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0509e8da430228236a18a677fcdb0c1f102dd26d5520f71f79b094963322ed25"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a7ddb221779871cf226100e677b5ea38c2d54e9e2c8ed847450ebbdf99b32d"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:248b1fb3f739d01d528cc50b35ee9c4812aa58cc5935998e776bf8ed5b251e75"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:bc3c083c50390cf69e7e1b5a5a7303898966be973664ec0c4a4acea82c1d4315"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52d587092ab8df308635762386f45f4638badb0866355b2b86760f6d3c076188"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61323159cf21bc3897674e5adb27cd9e7700bab6b84de40d7be28c3d46dc67cf"}, + {file = "ruff-0.8.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ae4478b1471fc0c44ed52a6fb787e641a2ac58b1c1f91763bafbc2faddc5117"}, + {file = "ruff-0.8.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0c000a471d519b3e6cfc9c6680025d923b4ca140ce3e4612d1a2ef58e11f11fe"}, + {file = "ruff-0.8.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9257aa841e9e8d9b727423086f0fa9a86b6b420fbf4bf9e1465d1250ce8e4d8d"}, + {file = "ruff-0.8.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45a56f61b24682f6f6709636949ae8cc82ae229d8d773b4c76c09ec83964a95a"}, + {file = "ruff-0.8.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:496dd38a53aa173481a7d8866bcd6451bd934d06976a2505028a50583e001b76"}, + {file = "ruff-0.8.6-py3-none-win32.whl", hash = "sha256:e169ea1b9eae61c99b257dc83b9ee6c76f89042752cb2d83486a7d6e48e8f764"}, + {file = "ruff-0.8.6-py3-none-win_amd64.whl", hash = "sha256:f1d70bef3d16fdc897ee290d7d20da3cbe4e26349f62e8a0274e7a3f4ce7a905"}, + {file = "ruff-0.8.6-py3-none-win_arm64.whl", hash = "sha256:7d7fc2377a04b6e04ffe588caad613d0c460eb2ecba4c0ccbbfe2bc973cbc162"}, + {file = "ruff-0.8.6.tar.gz", hash = "sha256:dcad24b81b62650b0eb8814f576fc65cfee8674772a6e24c9b747911801eeaa5"}, ] [[package]] @@ -6935,121 +6989,26 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "safetensors" -version = "0.4.5" +version = "0.5.1" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"}, - {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6885016f34bef80ea1085b7e99b3c1f92cb1be78a49839203060f67b40aee761"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133620f443450429322f238fda74d512c4008621227fccf2f8cf4a76206fea7c"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3e0609ec12d2a77e882f07cced530b8262027f64b75d399f1504ffec0ba56"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f1dd769f064adc33831f5e97ad07babbd728427f98e3e1db6902e369122737"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6d156bdb26732feada84f9388a9f135528c1ef5b05fae153da365ad4319c4c5"}, - {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e347d77e2c77eb7624400ccd09bed69d35c0332f417ce8c048d404a096c593b"}, - {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9f556eea3aec1d3d955403159fe2123ddd68e880f83954ee9b4a3f2e15e716b6"}, - {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9483f42be3b6bc8ff77dd67302de8ae411c4db39f7224dec66b0eb95822e4163"}, - {file = "safetensors-0.4.5-cp310-none-win32.whl", hash = "sha256:7389129c03fadd1ccc37fd1ebbc773f2b031483b04700923c3511d2a939252cc"}, - {file = "safetensors-0.4.5-cp310-none-win_amd64.whl", hash = "sha256:e98ef5524f8b6620c8cdef97220c0b6a5c1cef69852fcd2f174bb96c2bb316b1"}, - {file = "safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c"}, - {file = "safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59b77e4b7a708988d84f26de3ebead61ef1659c73dcbc9946c18f3b1786d2688"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d3bc83e14d67adc2e9387e511097f254bd1b43c3020440e708858c684cbac68"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39371fc551c1072976073ab258c3119395294cf49cdc1f8476794627de3130df"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c19feda32b931cae0acd42748a670bdf56bee6476a046af20181ad3fee4090"}, - {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a659467495de201e2f282063808a41170448c78bada1e62707b07a27b05e6943"}, - {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad5e4b2476949bcd638a89f71b6916fa9a5cae5c1ae7eede337aca2100435c0"}, - {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a3a315a6d0054bc6889a17f5668a73f94f7fe55121ff59e0a199e3519c08565f"}, - {file = "safetensors-0.4.5-cp311-none-win32.whl", hash = "sha256:a01e232e6d3d5cf8b1667bc3b657a77bdab73f0743c26c1d3c5dd7ce86bd3a92"}, - {file = "safetensors-0.4.5-cp311-none-win_amd64.whl", hash = "sha256:cbd39cae1ad3e3ef6f63a6f07296b080c951f24cec60188378e43d3713000c04"}, - {file = "safetensors-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:473300314e026bd1043cef391bb16a8689453363381561b8a3e443870937cc1e"}, - {file = "safetensors-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:801183a0f76dc647f51a2d9141ad341f9665602a7899a693207a82fb102cc53e"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1524b54246e422ad6fb6aea1ac71edeeb77666efa67230e1faf6999df9b2e27f"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3139098e3e8b2ad7afbca96d30ad29157b50c90861084e69fcb80dec7430461"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65573dc35be9059770808e276b017256fa30058802c29e1038eb1c00028502ea"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd33da8e9407559f8779c82a0448e2133737f922d71f884da27184549416bfed"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3685ce7ed036f916316b567152482b7e959dc754fcc4a8342333d222e05f407c"}, - {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dde2bf390d25f67908278d6f5d59e46211ef98e44108727084d4637ee70ab4f1"}, - {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7469d70d3de970b1698d47c11ebbf296a308702cbaae7fcb993944751cf985f4"}, - {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a6ba28118636a130ccbb968bc33d4684c48678695dba2590169d5ab03a45646"}, - {file = "safetensors-0.4.5-cp312-none-win32.whl", hash = "sha256:c859c7ed90b0047f58ee27751c8e56951452ed36a67afee1b0a87847d065eec6"}, - {file = "safetensors-0.4.5-cp312-none-win_amd64.whl", hash = "sha256:b5a8810ad6a6f933fff6c276eae92c1da217b39b4d8b1bc1c0b8af2d270dc532"}, - {file = "safetensors-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:25e5f8e2e92a74f05b4ca55686234c32aac19927903792b30ee6d7bd5653d54e"}, - {file = "safetensors-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81efb124b58af39fcd684254c645e35692fea81c51627259cdf6d67ff4458916"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:585f1703a518b437f5103aa9cf70e9bd437cb78eea9c51024329e4fb8a3e3679"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b99fbf72e3faf0b2f5f16e5e3458b93b7d0a83984fe8d5364c60aa169f2da89"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b17b299ca9966ca983ecda1c0791a3f07f9ca6ab5ded8ef3d283fff45f6bcd5f"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76ded72f69209c9780fdb23ea89e56d35c54ae6abcdec67ccb22af8e696e449a"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2783956926303dcfeb1de91a4d1204cd4089ab441e622e7caee0642281109db3"}, - {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35"}, - {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523"}, - {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142"}, - {file = "safetensors-0.4.5-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:77d9b228da8374c7262046a36c1f656ba32a93df6cc51cd4453af932011e77f1"}, - {file = "safetensors-0.4.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:500cac01d50b301ab7bb192353317035011c5ceeef0fca652f9f43c000bb7f8d"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75331c0c746f03158ded32465b7d0b0e24c5a22121743662a2393439c43a45cf"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670e95fe34e0d591d0529e5e59fd9d3d72bc77b1444fcaa14dccda4f36b5a38b"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:098923e2574ff237c517d6e840acada8e5b311cb1fa226019105ed82e9c3b62f"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ca0902d2648775089fa6a0c8fc9e6390c5f8ee576517d33f9261656f851e3f"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0032bedc869c56f8d26259fe39cd21c5199cd57f2228d817a0e23e8370af25"}, - {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4b15f51b4f8f2a512341d9ce3475cacc19c5fdfc5db1f0e19449e75f95c7dc8"}, - {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f6594d130d0ad933d885c6a7b75c5183cb0e8450f799b80a39eae2b8508955eb"}, - {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:60c828a27e852ded2c85fc0f87bf1ec20e464c5cd4d56ff0e0711855cc2e17f8"}, - {file = "safetensors-0.4.5-cp37-none-win32.whl", hash = "sha256:6d3de65718b86c3eeaa8b73a9c3d123f9307a96bbd7be9698e21e76a56443af5"}, - {file = "safetensors-0.4.5-cp37-none-win_amd64.whl", hash = "sha256:5a2d68a523a4cefd791156a4174189a4114cf0bf9c50ceb89f261600f3b2b81a"}, - {file = "safetensors-0.4.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:e7a97058f96340850da0601a3309f3d29d6191b0702b2da201e54c6e3e44ccf0"}, - {file = "safetensors-0.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:63bfd425e25f5c733f572e2246e08a1c38bd6f2e027d3f7c87e2e43f228d1345"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3664ac565d0e809b0b929dae7ccd74e4d3273cd0c6d1220c6430035befb678e"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:313514b0b9b73ff4ddfb4edd71860696dbe3c1c9dc4d5cc13dbd74da283d2cbf"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31fa33ee326f750a2f2134a6174773c281d9a266ccd000bd4686d8021f1f3dac"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09566792588d77b68abe53754c9f1308fadd35c9f87be939e22c623eaacbed6b"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309aaec9b66cbf07ad3a2e5cb8a03205663324fea024ba391594423d0f00d9fe"}, - {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53946c5813b8f9e26103c5efff4a931cc45d874f45229edd68557ffb35ffb9f8"}, - {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:868f9df9e99ad1e7f38c52194063a982bc88fedc7d05096f4f8160403aaf4bd6"}, - {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9cc9449bd0b0bc538bd5e268221f0c5590bc5c14c1934a6ae359d44410dc68c4"}, - {file = "safetensors-0.4.5-cp38-none-win32.whl", hash = "sha256:83c4f13a9e687335c3928f615cd63a37e3f8ef072a3f2a0599fa09f863fb06a2"}, - {file = "safetensors-0.4.5-cp38-none-win_amd64.whl", hash = "sha256:b98d40a2ffa560653f6274e15b27b3544e8e3713a44627ce268f419f35c49478"}, - {file = "safetensors-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf727bb1281d66699bef5683b04d98c894a2803442c490a8d45cd365abfbdeb2"}, - {file = "safetensors-0.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96f1d038c827cdc552d97e71f522e1049fef0542be575421f7684756a748e457"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:139fbee92570ecea774e6344fee908907db79646d00b12c535f66bc78bd5ea2c"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c36302c1c69eebb383775a89645a32b9d266878fab619819ce660309d6176c9b"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d641f5b8149ea98deb5ffcf604d764aad1de38a8285f86771ce1abf8e74c4891"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4db6a61d968de73722b858038c616a1bebd4a86abe2688e46ca0cc2d17558f2"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b75a616e02f21b6f1d5785b20cecbab5e2bd3f6358a90e8925b813d557666ec1"}, - {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:788ee7d04cc0e0e7f944c52ff05f52a4415b312f5efd2ee66389fb7685ee030c"}, - {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87bc42bd04fd9ca31396d3ca0433db0be1411b6b53ac5a32b7845a85d01ffc2e"}, - {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4037676c86365a721a8c9510323a51861d703b399b78a6b4486a54a65a975fca"}, - {file = "safetensors-0.4.5-cp39-none-win32.whl", hash = "sha256:1500418454529d0ed5c1564bda376c4ddff43f30fce9517d9bee7bcce5a8ef50"}, - {file = "safetensors-0.4.5-cp39-none-win_amd64.whl", hash = "sha256:9d1a94b9d793ed8fe35ab6d5cea28d540a46559bafc6aae98f30ee0867000cab"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdadf66b5a22ceb645d5435a0be7a0292ce59648ca1d46b352f13cff3ea80410"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d42ffd4c2259f31832cb17ff866c111684c87bd930892a1ba53fed28370c918c"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd8a1f6d2063a92cd04145c7fd9e31a1c7d85fbec20113a14b487563fdbc0597"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951d2fcf1817f4fb0ef0b48f6696688a4e852a95922a042b3f96aaa67eedc920"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ac85d9a8c1af0e3132371d9f2d134695a06a96993c2e2f0bbe25debb9e3f67a"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e3cec4a29eb7fe8da0b1c7988bc3828183080439dd559f720414450de076fcab"}, - {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:21742b391b859e67b26c0b2ac37f52c9c0944a879a25ad2f9f9f3cd61e7fda8f"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7db3006a4915151ce1913652e907cdede299b974641a83fbc092102ac41b644"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f68bf99ea970960a237f416ea394e266e0361895753df06e3e06e6ea7907d98b"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8158938cf3324172df024da511839d373c40fbfaa83e9abf467174b2910d7b4c"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:540ce6c4bf6b58cb0fd93fa5f143bc0ee341c93bb4f9287ccd92cf898cc1b0dd"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bfeaa1a699c6b9ed514bd15e6a91e74738b71125a9292159e3d6b7f0a53d2cde"}, - {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:01c8f00da537af711979e1b42a69a8ec9e1d7112f208e0e9b8a35d2c381085ef"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0dd565f83b30f2ca79b5d35748d0d99dd4b3454f80e03dfb41f0038e3bdf180"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:023b6e5facda76989f4cba95a861b7e656b87e225f61811065d5c501f78cdb3f"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9633b663393d5796f0b60249549371e392b75a0b955c07e9c6f8708a87fc841f"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78dd8adfb48716233c45f676d6e48534d34b4bceb50162c13d1f0bdf6f78590a"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e8deb16c4321d61ae72533b8451ec4a9af8656d1c61ff81aa49f966406e4b68"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:52452fa5999dc50c4decaf0c53aa28371f7f1e0fe5c2dd9129059fbe1e1599c7"}, - {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d5f23198821e227cfc52d50fa989813513db381255c6d100927b012f0cfec63d"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f4beb84b6073b1247a773141a6331117e35d07134b3bb0383003f39971d414bb"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68814d599d25ed2fdd045ed54d370d1d03cf35e02dce56de44c651f828fb9b7b"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b6453c54c57c1781292c46593f8a37254b8b99004c68d6c3ce229688931a22"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adaa9c6dead67e2dd90d634f89131e43162012479d86e25618e821a03d1eb1dc"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73e7d408e9012cd17511b382b43547850969c7979efc2bc353f317abaf23c84c"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:775409ce0fcc58b10773fdb4221ed1eb007de10fe7adbdf8f5e8a56096b6f0bc"}, - {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:834001bed193e4440c4a3950a31059523ee5090605c907c66808664c932b549c"}, - {file = "safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310"}, + {file = "safetensors-0.5.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:5480b078590dd37ee1c27f153e1ee9a274b62b30871ee16c412d11341215f305"}, + {file = "safetensors-0.5.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:547e9fe8f3c9c50caf07cfcb6d2392f511853f7041821812ba73a05a915e91dd"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e98f5dbce744a87a8d2cb9147558e80af79cfe31aa4321554e1db0e49d9c957"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c40ef845cca82e365b46e192b7b4952082952d5965c602e030a73155336de89c"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cb212b0cded22fa0e46bca248beecf2fd079f2dffd7cc04e116a8b0128ae601"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4abb7bcf2faba63a0b58a2c6fafab0200726727ab6f579a1155239927a792709"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83a384e49b38c3ae3c02a52437548351af83029dff85fe3d1acd5b2cf06867bb"}, + {file = "safetensors-0.5.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44946151b01083fe5863c20d626f6ed9f1544be80e3bb2177a7ec27f911fdbf8"}, + {file = "safetensors-0.5.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:168e7a032c944eb5aefaee0d4bf4e15e84dbbf0f2ef86fbe0dc778a68306fff8"}, + {file = "safetensors-0.5.1-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:430b7eab6b4139bee8587522f264f7eebbac3e41614b52e35caf90affe7e7972"}, + {file = "safetensors-0.5.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:97f548d6e9f86d3326ab8416303f9ae1ded15df126b87db42658c3d89a1040d7"}, + {file = "safetensors-0.5.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b021cad4af26677e0d3fbc5c8e2dfc3087ac44a3e0450576cbe0aa165849578c"}, + {file = "safetensors-0.5.1-cp38-abi3-win32.whl", hash = "sha256:7290f8acdf1e5b5daf6101d6eed506d1f6ad66d08ca9f26235372befba7e2285"}, + {file = "safetensors-0.5.1-cp38-abi3-win_amd64.whl", hash = "sha256:895f33c8ee55310606a407f45de3468ec0ffe259ba53cc0d4024a64fb58a1fc9"}, + {file = "safetensors-0.5.1.tar.gz", hash = "sha256:75927919a73b0f34d6943b531d757f724e65797a900d88d8081fe8b4448eadc3"}, ] [package.extras] @@ -7059,7 +7018,7 @@ jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[num mlx = ["mlx (>=0.0.9)"] numpy = ["numpy (>=1.21.6)"] paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] -pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] +pinned-tf = ["safetensors[numpy]", "tensorflow (==2.18.0)"] quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] @@ -7067,37 +7026,41 @@ torch = ["safetensors[numpy]", "torch (>=1.10)"] [[package]] name = "scikit-learn" -version = "1.5.2" +version = "1.6.0" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" files = [ - {file = "scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6"}, - {file = "scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0"}, - {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540"}, - {file = "scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8"}, - {file = "scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113"}, - {file = "scikit_learn-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03b6158efa3faaf1feea3faa884c840ebd61b6484167c711548fce208ea09445"}, - {file = "scikit_learn-1.5.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1ff45e26928d3b4eb767a8f14a9a6efbf1cbff7c05d1fb0f95f211a89fd4f5de"}, - {file = "scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f763897fe92d0e903aa4847b0aec0e68cadfff77e8a0687cabd946c89d17e675"}, - {file = "scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8b0ccd4a902836493e026c03256e8b206656f91fbcc4fde28c57a5b752561f1"}, - {file = "scikit_learn-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6c16d84a0d45e4894832b3c4d0bf73050939e21b99b01b6fd59cbb0cf39163b6"}, - {file = "scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a"}, - {file = "scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1"}, - {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, - {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, - {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, - {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, - {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, - {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, - {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, - {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca64b3089a6d9b9363cd3546f8978229dcbb737aceb2c12144ee3f70f95684b7"}, - {file = "scikit_learn-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:3bed4909ba187aca80580fe2ef370d9180dcf18e621a27c4cf2ef10d279a7efe"}, - {file = "scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d"}, + {file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"}, + {file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"}, + {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7a579606c73a0b3d210e33ea410ea9e1af7933fe324cb7e6fbafae4ea5948"}, + {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46d3ca0f11a540b8eaddaf5e38172d8cd65a86cb3e3632161ec96c0cffb774c"}, + {file = "scikit_learn-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be4577769c5dde6e1b53de8e6520f9b664ab5861dd57acee47ad119fd7405d6"}, + {file = "scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285"}, + {file = "scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b"}, + {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a"}, + {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c716d13ba0a2f8762d96ff78d3e0cde90bc9c9b5c13d6ab6bb9b2d6ca6705fd"}, + {file = "scikit_learn-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aafd94bafc841b626681e626be27bf1233d5a0f20f0a6fdb4bee1a1963c6643"}, + {file = "scikit_learn-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:04a5ba45c12a5ff81518aa4f1604e826a45d20e53da47b15871526cda4ff5174"}, + {file = "scikit_learn-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:21fadfc2ad7a1ce8bd1d90f23d17875b84ec765eecbbfc924ff11fb73db582ce"}, + {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30f34bb5fde90e020653bb84dcb38b6c83f90c70680dbd8c38bd9becbad7a127"}, + {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dad624cffe3062276a0881d4e441bc9e3b19d02d17757cd6ae79a9d192a0027"}, + {file = "scikit_learn-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fce7950a3fad85e0a61dc403df0f9345b53432ac0e47c50da210d22c60b6d85"}, + {file = "scikit_learn-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5453b2e87ef8accedc5a8a4e6709f887ca01896cd7cc8a174fe39bd4bb00aef"}, + {file = "scikit_learn-1.6.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5fe11794236fb83bead2af26a87ced5d26e3370b8487430818b915dafab1724e"}, + {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61fe3dcec0d82ae280877a818ab652f4988371e32dd5451e75251bece79668b1"}, + {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44e3a51e181933bdf9a4953cc69c6025b40d2b49e238233f149b98849beb4bf"}, + {file = "scikit_learn-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:a17860a562bac54384454d40b3f6155200c1c737c9399e6a97962c63fce503ac"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:98717d3c152f6842d36a70f21e1468fb2f1a2f8f2624d9a3f382211798516426"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:34e20bfac8ff0ebe0ff20fb16a4d6df5dc4cc9ce383e00c2ab67a526a3c67b18"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba06d75815406091419e06dd650b91ebd1c5f836392a0d833ff36447c2b1bfa"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b6916d1cec1ff163c7d281e699d7a6a709da2f2c5ec7b10547e08cc788ddd3ae"}, + {file = "scikit_learn-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66b1cf721a9f07f518eb545098226796c399c64abdcbf91c2b95d625068363da"}, + {file = "scikit_learn-1.6.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b35b60cf4cd6564b636e4a40516b3c61a4fa7a8b1f7a3ce80c38ebe04750bc3"}, + {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a73b1c2038c93bc7f4bf21f6c9828d5116c5d2268f7a20cfbbd41d3074d52083"}, + {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c3fa7d3dd5a0ec2d0baba0d644916fa2ab180ee37850c5d536245df916946bd"}, + {file = "scikit_learn-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:df778486a32518cda33818b7e3ce48c78cef1d5f640a6bc9d97c6d2e71449a51"}, + {file = "scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e"}, ] [package.dependencies] @@ -7109,53 +7072,68 @@ threadpoolctl = ">=3.1.0" [package.extras] benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.16.0)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] maintenance = ["conda-lock (==2.5.6)"] -tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"] +tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.5.1)", "scikit-image (>=0.17.2)"] [[package]] name = "scipy" -version = "1.13.1" +version = "1.15.0" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:aeac60d3562a7bf2f35549bdfdb6b1751c50590f55ce7322b4b2fc821dc27fca"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5abbdc6ede5c5fed7910cf406a948e2c0869231c0db091593a6b2fa78be77e5d"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:eb1533c59f0ec6c55871206f15a5c72d1fae7ad3c0a8ca33ca88f7c309bbbf8c"}, + {file = "scipy-1.15.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:de112c2dae53107cfeaf65101419662ac0a54e9a088c17958b51c95dac5de56d"}, + {file = "scipy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2240e1fd0782e62e1aacdc7234212ee271d810f67e9cd3b8d521003a82603ef8"}, + {file = "scipy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35aef233b098e4de88b1eac29f0df378278e7e250a915766786b773309137c4"}, + {file = "scipy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b29e4fc02e155a5fd1165f1e6a73edfdd110470736b0f48bcbe48083f0eee37"}, + {file = "scipy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:0e5b34f8894f9904cc578008d1a9467829c1817e9f9cb45e6d6eeb61d2ab7731"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:46e91b5b16909ff79224b56e19cbad65ca500b3afda69225820aa3afbf9ec020"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:82bff2eb01ccf7cea8b6ee5274c2dbeadfdac97919da308ee6d8e5bcbe846443"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:9c8254fe21dd2c6c8f7757035ec0c31daecf3bb3cffd93bc1ca661b731d28136"}, + {file = "scipy-1.15.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:c9624eeae79b18cab1a31944b5ef87aa14b125d6ab69b71db22f0dbd962caf1e"}, + {file = "scipy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d13bbc0658c11f3d19df4138336e4bce2c4fbd78c2755be4bf7b8e235481557f"}, + {file = "scipy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdca4c7bb8dc41307e5f39e9e5d19c707d8e20a29845e7533b3bb20a9d4ccba0"}, + {file = "scipy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f376d7c767731477bac25a85d0118efdc94a572c6b60decb1ee48bf2391a73b"}, + {file = "scipy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:61513b989ee8d5218fbeb178b2d51534ecaddba050db949ae99eeb3d12f6825d"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5beb0a2200372b7416ec73fdae94fe81a6e85e44eb49c35a11ac356d2b8eccc6"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fde0f3104dfa1dfbc1f230f65506532d0558d43188789eaf68f97e106249a913"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:35c68f7044b4e7ad73a3e68e513dda946989e523df9b062bd3cf401a1a882192"}, + {file = "scipy-1.15.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:52475011be29dfcbecc3dfe3060e471ac5155d72e9233e8d5616b84e2b542054"}, + {file = "scipy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5972e3f96f7dda4fd3bb85906a17338e65eaddfe47f750e240f22b331c08858e"}, + {file = "scipy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe00169cf875bed0b3c40e4da45b57037dc21d7c7bf0c85ed75f210c281488f1"}, + {file = "scipy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:161f80a98047c219c257bf5ce1777c574bde36b9d962a46b20d0d7e531f86863"}, + {file = "scipy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:327163ad73e54541a675240708244644294cb0a65cca420c9c79baeb9648e479"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0fcb16eb04d84670722ce8d93b05257df471704c913cb0ff9dc5a1c31d1e9422"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:767e8cf6562931f8312f4faa7ddea412cb783d8df49e62c44d00d89f41f9bbe8"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:37ce9394cdcd7c5f437583fc6ef91bd290014993900643fdfc7af9b052d1613b"}, + {file = "scipy-1.15.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6d26f17c64abd6c6c2dfb39920f61518cc9e213d034b45b2380e32ba78fde4c0"}, + {file = "scipy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e2448acd79c6374583581a1ded32ac71a00c2b9c62dfa87a40e1dd2520be111"}, + {file = "scipy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36be480e512d38db67f377add5b759fb117edd987f4791cdf58e59b26962bee4"}, + {file = "scipy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ccb6248a9987193fe74363a2d73b93bc2c546e0728bd786050b7aef6e17db03c"}, + {file = "scipy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:952d2e9eaa787f0a9e95b6e85da3654791b57a156c3e6609e65cc5176ccfe6f2"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b1432102254b6dc7766d081fa92df87832ac25ff0b3d3a940f37276e63eb74ff"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:4e08c6a36f46abaedf765dd2dfcd3698fa4bd7e311a9abb2d80e33d9b2d72c34"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ec915cd26d76f6fc7ae8522f74f5b2accf39546f341c771bb2297f3871934a52"}, + {file = "scipy-1.15.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:351899dd2a801edd3691622172bc8ea01064b1cada794f8641b89a7dc5418db6"}, + {file = "scipy-1.15.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9baff912ea4f78a543d183ed6f5b3bea9784509b948227daaf6f10727a0e2e5"}, + {file = "scipy-1.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cd9d9198a7fd9a77f0eb5105ea9734df26f41faeb2a88a0e62e5245506f7b6df"}, + {file = "scipy-1.15.0-cp313-cp313t-win_amd64.whl", hash = "sha256:129f899ed275c0515d553b8d31696924e2ca87d1972421e46c376b9eb87de3d2"}, + {file = "scipy-1.15.0.tar.gz", hash = "sha256:300742e2cc94e36a2880ebe464a1c8b4352a7b0f3e36ec3d2ac006cdbe0219ac"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.5" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "semver" @@ -7241,23 +7219,23 @@ tornado = ["tornado (>=6)"] [[package]] name = "setuptools" -version = "75.6.0" +version = "75.7.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, - {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, + {file = "setuptools-75.7.0-py3-none-any.whl", hash = "sha256:84fb203f278ebcf5cd08f97d3fb96d3fbed4b629d500b29ad60d11e00769b183"}, + {file = "setuptools-75.7.0.tar.gz", hash = "sha256:886ff7b16cd342f1d1defc16fc98c9ce3fde69e087a4e1983d7ab634e5f41f4f"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "shellingham" @@ -7402,13 +7380,13 @@ files = [ [[package]] name = "smmap" -version = "5.0.1" +version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = false python-versions = ">=3.7" files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, + {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, + {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, ] [[package]] @@ -7435,60 +7413,68 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.35" +version = "2.0.36" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8bea573863762bbf45d1e13f87c2d2fd32cee2dbd50d050f83f87429c9e1ea"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f552023710d4b93d8fb29a91fadf97de89c5926c6bd758897875435f2a939f33"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:016b2e665f778f13d3c438651dd4de244214b527a275e0acf1d44c05bc6026a9"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7befc148de64b6060937231cbff8d01ccf0bfd75aa26383ffdf8d82b12ec04ff"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-win32.whl", hash = "sha256:22b83aed390e3099584b839b93f80a0f4a95ee7f48270c97c90acd40ee646f0b"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-win_amd64.whl", hash = "sha256:a29762cd3d116585278ffb2e5b8cc311fb095ea278b96feef28d0b423154858e"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e21f66748ab725ade40fa7af8ec8b5019c68ab00b929f6643e1b1af461eddb60"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a6219108a15fc6d24de499d0d515c7235c617b2540d97116b663dade1a54d62"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042622a5306c23b972192283f4e22372da3b8ddf5f7aac1cc5d9c9b222ab3ff6"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:627dee0c280eea91aed87b20a1f849e9ae2fe719d52cbf847c0e0ea34464b3f7"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fdcd72a789c1c31ed242fd8c1bcd9ea186a98ee8e5408a50e610edfef980d71"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89b64cd8898a3a6f642db4eb7b26d1b28a497d4022eccd7717ca066823e9fb01"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-win32.whl", hash = "sha256:6a93c5a0dfe8d34951e8a6f499a9479ffb9258123551fa007fc708ae2ac2bc5e"}, - {file = "SQLAlchemy-2.0.35-cp311-cp311-win_amd64.whl", hash = "sha256:c68fe3fcde03920c46697585620135b4ecfdfc1ed23e75cc2c2ae9f8502c10b8"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb60b026d8ad0c97917cb81d3662d0b39b8ff1335e3fabb24984c6acd0c900a2"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6921ee01caf375363be5e9ae70d08ce7ca9d7e0e8983183080211a062d299468"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdf1a0dbe5ced887a9b127da4ffd7354e9c1a3b9bb330dce84df6b70ccb3a8d"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93a71c8601e823236ac0e5d087e4f397874a421017b3318fd92c0b14acf2b6db"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e04b622bb8a88f10e439084486f2f6349bf4d50605ac3e445869c7ea5cf0fa8c"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1b56961e2d31389aaadf4906d453859f35302b4eb818d34a26fab72596076bb8"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-win32.whl", hash = "sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf"}, - {file = "SQLAlchemy-2.0.35-cp312-cp312-win_amd64.whl", hash = "sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f021d334f2ca692523aaf7bbf7592ceff70c8594fad853416a81d66b35e3abf9"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c3f58cf91683102f2f0265c0db3bd3892e9eedabe059720492dbaa4f922da1"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:032d979ce77a6c2432653322ba4cbeabf5a6837f704d16fa38b5a05d8e21fa00"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:2e795c2f7d7249b75bb5f479b432a51b59041580d20599d4e112b5f2046437a3"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:cc32b2990fc34380ec2f6195f33a76b6cdaa9eecf09f0c9404b74fc120aef36f"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-win32.whl", hash = "sha256:9509c4123491d0e63fb5e16199e09f8e262066e58903e84615c301dde8fa2e87"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-win_amd64.whl", hash = "sha256:3655af10ebcc0f1e4e06c5900bb33e080d6a1fa4228f502121f28a3b1753cde5"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4c31943b61ed8fdd63dfd12ccc919f2bf95eefca133767db6fbbd15da62078ec"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a62dd5d7cc8626a3634208df458c5fe4f21200d96a74d122c83bc2015b333bc1"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0630774b0977804fba4b6bbea6852ab56c14965a2b0c7fc7282c5f7d90a1ae72"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d625eddf7efeba2abfd9c014a22c0f6b3796e0ffb48f5d5ab106568ef01ff5a"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ada603db10bb865bbe591939de854faf2c60f43c9b763e90f653224138f910d9"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c41411e192f8d3ea39ea70e0fae48762cd11a2244e03751a98bd3c0ca9a4e936"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-win32.whl", hash = "sha256:d299797d75cd747e7797b1b41817111406b8b10a4f88b6e8fe5b5e59598b43b0"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-win_amd64.whl", hash = "sha256:0375a141e1c0878103eb3d719eb6d5aa444b490c96f3fedab8471c7f6ffe70ee"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccae5de2a0140d8be6838c331604f91d6fafd0735dbdcee1ac78fc8fbaba76b4"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2a275a806f73e849e1c309ac11108ea1a14cd7058577aba962cd7190e27c9e3c"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:732e026240cdd1c1b2e3ac515c7a23820430ed94292ce33806a95869c46bd139"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890da8cd1941fa3dab28c5bac3b9da8502e7e366f895b3b8e500896f12f94d11"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0d8326269dbf944b9201911b0d9f3dc524d64779a07518199a58384c3d37a44"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b76d63495b0508ab9fc23f8152bac63205d2a704cd009a2b0722f4c8e0cba8e0"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-win32.whl", hash = "sha256:69683e02e8a9de37f17985905a5eca18ad651bf592314b4d3d799029797d0eb3"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-win_amd64.whl", hash = "sha256:aee110e4ef3c528f3abbc3c2018c121e708938adeeff9006428dd7c8555e9b3f"}, - {file = "SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1"}, - {file = "sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win32.whl", hash = "sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl", hash = "sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win32.whl", hash = "sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win_amd64.whl", hash = "sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win32.whl", hash = "sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win_amd64.whl", hash = "sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a"}, + {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, + {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, ] [package.dependencies] @@ -7501,7 +7487,7 @@ aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] mssql-pyodbc = ["pyodbc"] @@ -7552,18 +7538,17 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.36.3" +version = "0.41.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, - {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, + {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, + {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, ] [package.dependencies] anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] @@ -7584,13 +7569,13 @@ widechars = ["wcwidth"] [[package]] name = "tenacity" -version = "8.4.2" +version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.4.2-py3-none-any.whl", hash = "sha256:9e6f7cf7da729125c7437222f8a522279751cdfbe6b67bfe64f75d3a348661b2"}, - {file = "tenacity-8.4.2.tar.gz", hash = "sha256:cd80a53a79336edba8489e767f729e4f391c896956b57140b5d7511a64bbd3ef"}, + {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, + {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, ] [package.extras] @@ -7701,123 +7686,26 @@ test = ["pytest", "ruff"] [[package]] name = "tokenizers" -version = "0.20.3" +version = "0.21.0" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, - {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, - {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, - {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, - {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, - {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, - {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, - {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, - {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, - {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, - {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, - {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, - {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, - {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, - {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, - {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, - {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, + {file = "tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2"}, + {file = "tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b177fb54c4702ef611de0c069d9169f0004233890e0c4c5bd5508ae05abf193"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b43779a269f4629bebb114e19c3fca0223296ae9fea8bb9a7a6c6fb0657ff8e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aeb255802be90acfd363626753fda0064a8df06031012fe7d52fd9a905eb00e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8b09dbeb7a8d73ee204a70f94fc06ea0f17dcf0844f16102b9f414f0b7463ba"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:400832c0904f77ce87c40f1a8a27493071282f785724ae62144324f171377273"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84ca973b3a96894d1707e189c14a774b701596d579ffc7e69debfc036a61a04"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb7202d231b273c34ec67767378cd04c767e967fda12d4a9e36208a34e2f137e"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:089d56db6782a73a27fd8abf3ba21779f5b85d4a9f35e3b493c7bbcbbf0d539b"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c87ca3dc48b9b1222d984b6b7490355a6fdb411a2d810f6f05977258400ddb74"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4145505a973116f91bc3ac45988a92e618a6f83eb458f49ea0790df94ee243ff"}, + {file = "tokenizers-0.21.0-cp39-abi3-win32.whl", hash = "sha256:eb1702c2f27d25d9dd5b389cc1f2f51813e99f8ca30d9e25348db6585a97e24a"}, + {file = "tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c"}, + {file = "tokenizers-0.21.0.tar.gz", hash = "sha256:ee0894bf311b75b0c03079f33859ae4b2334d675d4e93f5a4132e1eae2834fe4"}, ] [package.dependencies] @@ -7884,7 +7772,7 @@ files = [ name = "tornado" version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, @@ -7938,39 +7826,39 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.3" +version = "4.47.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, - {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, + {file = "transformers-4.47.1-py3-none-any.whl", hash = "sha256:d2f5d19bb6283cd66c893ec7e6d931d6370bbf1cc93633326ff1f41a40046c9c"}, + {file = "transformers-4.47.1.tar.gz", hash = "sha256:6c29c05a5f595e278481166539202bf8641281536df1c42357ee58a45d0a564a"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.23.2,<1.0" +huggingface-hub = ">=0.24.0,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" requests = "*" safetensors = ">=0.4.1" -tokenizers = ">=0.20,<0.21" +tokenizers = ">=0.21,<0.22" tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.26.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] benchmark = ["optimum-benchmark (>=0.3.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.26.0)", "deepspeed (>=0.9.3)"] deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.20,<0.21)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.21,<0.22)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] @@ -7996,12 +7884,12 @@ tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,< tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] tiktoken = ["blobfile", "tiktoken"] -timm = ["timm (<=0.9.16)"] -tokenizers = ["tokenizers (>=0.20,<0.21)"] +timm = ["timm (<=1.0.11)"] +tokenizers = ["tokenizers (>=0.21,<0.22)"] torch = ["accelerate (>=0.26.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.20,<0.21)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.24.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.21,<0.22)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -8047,24 +7935,24 @@ typing-extensions = ">=3.7.4.3" [[package]] name = "types-python-dateutil" -version = "2.9.0.20241003" +version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = true python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, - {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, ] [[package]] name = "types-setuptools" -version = "75.6.0.20241126" +version = "75.6.0.20241223" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, - {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, + {file = "types_setuptools-75.6.0.20241223-py3-none-any.whl", hash = "sha256:7cbfd3bf2944f88bbcdd321b86ddd878232a277be95d44c78a53585d78ebc2f6"}, + {file = "types_setuptools-75.6.0.20241223.tar.gz", hash = "sha256:d9478a985057ed48a994c707f548e55aababa85fe1c9b212f43ab5a1fffd3211"}, ] [[package]] @@ -8193,13 +8081,13 @@ files = [ [[package]] name = "unstructured" -version = "0.16.10" +version = "0.16.12" description = "A library that prepares raw documents for downstream ML tasks." optional = true python-versions = "<3.13,>=3.9.0" files = [ - {file = "unstructured-0.16.10-py3-none-any.whl", hash = "sha256:738fc020fb4d9dfd1a3e54fee255221f7f916afafa16ff4e1a7a14495ba5b5ce"}, - {file = "unstructured-0.16.10.tar.gz", hash = "sha256:61c4a447514ab5d6f8629fde2da03833cf29e0bee26a1d3b901ac57d3b5d523a"}, + {file = "unstructured-0.16.12-py3-none-any.whl", hash = "sha256:bcac29ac1b38fba4228c5a1a7721d1aa7c48220f7c1dd43b563645c56e978c49"}, + {file = "unstructured-0.16.12.tar.gz", hash = "sha256:c3133731c6edb9c2f474e62cb2b560cd0a8d578c4532ec14d8c0941e401770b0"}, ] [package.dependencies] @@ -8213,6 +8101,7 @@ html5lib = "*" langdetect = "*" lxml = "*" markdown = {version = "*", optional = true, markers = "extra == \"md\""} +ndjson = "*" networkx = {version = "*", optional = true, markers = "extra == \"xlsx\""} nltk = "*" numpy = "<2" @@ -8306,29 +8195,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "1.26.20" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.9" files = [ - {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, - {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, -] - -[package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "urllib3" -version = "2.2.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -8357,18 +8230,38 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "validators" -version = "0.33.0" +version = "0.34.0" description = "Python Data Validation for Humans™" optional = true python-versions = ">=3.8" files = [ - {file = "validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075"}, - {file = "validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf"}, + {file = "validators-0.34.0-py3-none-any.whl", hash = "sha256:c804b476e3e6d3786fa07a30073a4ef694e617805eb1946ceee3fe5a9b8b1321"}, + {file = "validators-0.34.0.tar.gz", hash = "sha256:647fe407b45af9a74d245b943b18e6a816acf4926974278f6dd617778e1e781f"}, ] [package.extras] crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] +[[package]] +name = "virtualenv" +version = "20.28.1" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +files = [ + {file = "virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb"}, + {file = "virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "watchdog" version = "6.0.0" @@ -8424,24 +8317,24 @@ files = [ [[package]] name = "weaviate-client" -version = "4.6.7" +version = "4.9.6" description = "A python native Weaviate client" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "weaviate_client-4.6.7-py3-none-any.whl", hash = "sha256:8793de35264cab33a84fe8cb8c422a257fe4d8334657aaddd8ead853da3fb34a"}, - {file = "weaviate_client-4.6.7.tar.gz", hash = "sha256:202b32e160536f5f44e4a635d30c3d3a0790b1a7ff997f5e243919d1ac5b68a1"}, + {file = "weaviate_client-4.9.6-py3-none-any.whl", hash = "sha256:1d3b551939c0f7314f25e417cbcf4cf34e7adf942627993eef36ae6b4a044673"}, + {file = "weaviate_client-4.9.6.tar.gz", hash = "sha256:56d67c40fc94b0d53e81e0aa4477baaebbf3646fbec26551df66e396a72adcb6"}, ] [package.dependencies] -authlib = ">=1.2.1,<2.0.0" +authlib = ">=1.2.1,<1.3.2" grpcio = ">=1.57.0,<2.0.0" grpcio-health-checking = ">=1.57.0,<2.0.0" grpcio-tools = ">=1.57.0,<2.0.0" httpx = ">=0.25.0,<=0.27.0" pydantic = ">=2.5.0,<3.0.0" requests = ">=2.30.0,<3.0.0" -validators = "0.33.0" +validators = "0.34.0" [[package]] name = "webcolors" @@ -8507,7 +8400,7 @@ files = [ name = "wrapt" version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, @@ -8736,6 +8629,17 @@ files = [ {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, ] +[[package]] +name = "xyzservices" +version = "2024.9.0" +description = "Source of XYZ tiles providers" +optional = false +python-versions = ">=3.8" +files = [ + {file = "xyzservices-2024.9.0-py3-none-any.whl", hash = "sha256:776ae82b78d6e5ca63dd6a94abb054df8130887a4a308473b54a6bd364de8644"}, + {file = "xyzservices-2024.9.0.tar.gz", hash = "sha256:68fb8353c9dbba4f1ff6c0f2e5e4e596bb9e1db7f94f4f7dfbcb26e25aa66fde"}, +] + [[package]] name = "yarl" version = "1.18.3" @@ -8858,7 +8762,6 @@ falkordb = ["falkordb"] filesystem = ["botocore"] groq = ["groq"] langchain = ["langchain_text_splitters", "langsmith"] -langfuse = ["langfuse"] llama-index = ["llama-index-core"] milvus = ["pymilvus"] neo4j = ["neo4j"] @@ -8870,5 +8773,5 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" -python-versions = ">=3.9.0,<3.12" -content-hash = "18d78e556471b4b63c948138233ef4b38bba02f649a469180c2b1c292f0d61df" +python-versions = ">=3.10.0,<3.13" +content-hash = "1ed3780936dd2a6f79fe11072f8d2cefec848fb27092b8bc523c7bbfd936b18e" diff --git a/profiling/graph_pydantic_conversion/benchmark_function.py b/profiling/graph_pydantic_conversion/benchmark_function.py index 58990cc31..a4f5c839b 100644 --- a/profiling/graph_pydantic_conversion/benchmark_function.py +++ b/profiling/graph_pydantic_conversion/benchmark_function.py @@ -27,14 +27,11 @@ def benchmark_function(func: Callable, *args, num_runs: int = 5) -> Dict[str, An for _ in range(num_runs): # Start memory tracking tracemalloc.start() - initial_memory = process.memory_info().rss # Measure execution time and CPU usage start_time = time.perf_counter() start_cpu_time = process.cpu_times() - result = func(*args) - end_cpu_time = process.cpu_times() end_time = time.perf_counter() @@ -44,8 +41,6 @@ def benchmark_function(func: Callable, *args, num_runs: int = 5) -> Dict[str, An start_cpu_time.user + start_cpu_time.system ) current, peak = tracemalloc.get_traced_memory() - final_memory = process.memory_info().rss - memory_used = final_memory - initial_memory # Store results execution_times.append(execution_time) diff --git a/profiling/graph_pydantic_conversion/profile_graph_pydantic_conversion.py b/profiling/graph_pydantic_conversion/profile_graph_pydantic_conversion.py index f9047fc86..c1c0b6756 100644 --- a/profiling/graph_pydantic_conversion/profile_graph_pydantic_conversion.py +++ b/profiling/graph_pydantic_conversion/profile_graph_pydantic_conversion.py @@ -20,9 +20,7 @@ if __name__ == "__main__": default=3, help="Recursive depth for graph generation (default: 3)", ) - parser.add_argument( - "--runs", type=int, default=5, help="Number of benchmark runs (default: 5)" - ) + parser.add_argument("--runs", type=int, default=5, help="Number of benchmark runs (default: 5)") args = parser.parse_args() society = create_organization_recursive( @@ -31,30 +29,32 @@ if __name__ == "__main__": added_nodes = {} added_edges = {} visited_properties = {} - nodes, edges = asyncio.run(get_graph_from_model( - society, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, - )) + nodes, edges = asyncio.run( + get_graph_from_model( + society, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, + ) + ) def get_graph_from_model_sync(model): added_nodes = {} added_edges = {} visited_properties = {} - return asyncio.run(get_graph_from_model( - model, - added_nodes = added_nodes, - added_edges = added_edges, - visited_properties = visited_properties, - )) + return asyncio.run( + get_graph_from_model( + model, + added_nodes=added_nodes, + added_edges=added_edges, + visited_properties=visited_properties, + ) + ) results = benchmark_function(get_graph_from_model_sync, society, num_runs=args.runs) print("\nBenchmark Results:") - print( - f"N nodes: {len(nodes)}, N edges: {len(edges)}, Recursion depth: {args.recursive_depth}" - ) + print(f"N nodes: {len(nodes)}, N edges: {len(edges)}, Recursion depth: {args.recursive_depth}") print(f"Mean Peak Memory: {results['mean_peak_memory_mb']:.2f} MB") print(f"Mean CPU Usage: {results['mean_cpu_percent']:.2f}%") print(f"Mean Execution Time: {results['mean_execution_time']:.4f} seconds") diff --git a/profiling/util/DummyEmbeddingEngine.py b/profiling/util/DummyEmbeddingEngine.py index 7f5b3e847..0ba742182 100644 --- a/profiling/util/DummyEmbeddingEngine.py +++ b/profiling/util/DummyEmbeddingEngine.py @@ -1,9 +1,10 @@ import numpy as np from cognee.infrastructure.databases.vector.embeddings.EmbeddingEngine import EmbeddingEngine + class DummyEmbeddingEngine(EmbeddingEngine): async def embed_text(self, text: list[str]) -> list[list[float]]: - return(list(list(np.random.randn(3072)))) + return list(list(np.random.randn(3072))) def get_vector_size(self) -> int: - return(3072) + return 3072 diff --git a/profiling/util/DummyLLMAdapter.py b/profiling/util/DummyLLMAdapter.py index df81ce123..b28261665 100644 --- a/profiling/util/DummyLLMAdapter.py +++ b/profiling/util/DummyLLMAdapter.py @@ -15,15 +15,9 @@ class DummyLLMAdapter(LLMInterface): async def acreate_structured_output( self, text_input: str, system_prompt: str, response_model: Type[BaseModel] ) -> BaseModel: - - if ( - str(response_model) - == "" - ): + if str(response_model) == "": return dummy_summarize_content(text_input) - elif ( - str(response_model) == "" - ): + elif str(response_model) == "": return dummy_extract_knowledge_graph(text_input, self.nlp) else: raise Exception( diff --git a/pyproject.toml b/pyproject.toml index 6b27f1983..5a0e83057 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "cognee" -version = "0.1.20" +version = "0.1.21" description = "Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning." authors = ["Vasilije Markovic", "Boris Arzentar"] readme = "README.md" @@ -18,11 +18,11 @@ classifiers = [ ] [tool.poetry.dependencies] -python = ">=3.9.0,<3.12" -openai = "1.52.0" +python = ">=3.10.0,<3.13" +openai = "1.59.4" pydantic = "2.8.2" python-dotenv = "1.0.1" -fastapi = "^0.109.2" +fastapi = ">=0.109.2,<0.116.0" uvicorn = "0.22.0" requests = "2.32.3" aiohttp = "3.10.10" @@ -34,19 +34,19 @@ falkordb = {version = "1.0.9", optional = true} boto3 = "^1.26.125" botocore="^1.35.54" gunicorn = "^20.1.0" -sqlalchemy = "2.0.35" -instructor = "1.5.2" +sqlalchemy = "2.0.36" +instructor = "1.7.2" networkx = "^3.2.1" aiosqlite = "^0.20.0" -pandas = "2.0.3" +pandas = "2.2.3" filetype = "^1.2.0" nltk = "^3.8.1" dlt = {extras = ["sqlalchemy"], version = "^1.4.1"} aiofiles = "^23.2.1" qdrant-client = {version = "^1.9.0", optional = true} graphistry = "^0.33.5" -tenacity = "^8.4.1" -weaviate-client = {version = "4.6.7", optional = true} +tenacity = "^9.0.0" +weaviate-client = {version = "4.9.6", optional = true} scikit-learn = "^1.5.0" pypdf = "^4.1.0" neo4j = {version = "^5.20.0", optional = true} @@ -54,13 +54,13 @@ jinja2 = "^3.1.3" matplotlib = "^3.8.3" tiktoken = "0.7.0" langchain_text_splitters = {version = "0.3.2", optional = true} -langsmith = {version = "0.1.139", optional = true} +langsmith = {version = "0.2.3", optional = true} langdetect = "1.0.9" posthog = {version = "^3.5.0", optional = true} -lancedb = "0.15.0" -litellm = "1.49.1" +lancedb = "0.16.0" +litellm = "1.57.2" groq = {version = "0.8.0", optional = true} -langfuse = {version = "^2.32.0", optional = true} +langfuse = "^2.32.0" pydantic-settings = "^2.2.1" anthropic = "^0.26.1" sentry-sdk = {extras = ["fastapi"], version = "^2.9.0"} @@ -69,11 +69,16 @@ alembic = "^1.13.3" asyncpg = {version = "0.30.0", optional = true} pgvector = {version = "^0.3.5", optional = true} psycopg2 = {version = "^2.9.10", optional = true} -llama-index-core = {version = "^0.11.22", optional = true} +llama-index-core = {version = "^0.12.10.post1", optional = true} deepeval = {version = "^2.0.1", optional = true} transformers = "^4.46.3" pymilvus = {version = "^2.5.0", optional = true} unstructured = { extras = ["csv", "doc", "docx", "epub", "md", "odt", "org", "ppt", "pptx", "rst", "rtf", "tsv", "xlsx"], version = "^0.16.10", optional = true } +pre-commit = "^4.0.1" +httpx = "0.27.0" +bokeh="^3.6.2" + + @@ -90,7 +95,6 @@ deepeval = ["deepeval"] posthog = ["posthog"] falkordb = ["falkordb"] groq = ["groq"] -langfuse = ["langfuse"] milvus = ["pymilvus"] docs = ["unstructured"] @@ -101,11 +105,12 @@ coverage = "^7.3.2" mypy = "^1.7.1" notebook = {version = "^7.1.0", optional = true} deptry = "^0.20.0" -debugpy = "1.8.2" +debugpy = "1.8.9" pylint = "^3.0.3" ruff = ">=0.2.2,<0.9.0" tweepy = "4.14.0" gitpython = "^3.1.43" +pylance = "0.19.2" [tool.poetry.group.docs.dependencies] mkdocs-material = "^9.5.42" @@ -114,11 +119,20 @@ mkdocstrings = {extras = ["python"], version = "^0.26.2"} [tool.ruff] # https://beta.ruff.rs/docs/ line-length = 100 +exclude = [ + "migrations/", # Ignore migrations directory + "notebooks/", # Ignore notebook files + "build/", # Ignore build directory + "cognee/pipelines.py", + "cognee/modules/users/models/Group.py", + "cognee/modules/users/models/ACL.py", + "cognee/modules/pipelines/models/Task.py", + "cognee/modules/data/models/Dataset.py" +] + +[tool.ruff.lint] ignore = ["F401"] -ignore-init-module-imports = true [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" - - diff --git a/tests/import_test.py b/tests/import_test.py index 72034f4f0..0b44183cb 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -1,7 +1,7 @@ - def test_import_cognee(): try: import cognee + assert True # Pass the test if no error occurs except ImportError as e: assert False, f"Failed to import cognee: {e}" diff --git a/tools/check-lockfile.py b/tools/check-lockfile.py index 112387794..df60b35ac 100644 --- a/tools/check-lockfile.py +++ b/tools/check-lockfile.py @@ -7,19 +7,22 @@ threshold = 100 try: count = 0 - with open(lockfile_name, 'r', encoding="utf8") as file: + with open(lockfile_name, "r", encoding="utf8") as file: for line in file: if hash_string in line: count += 1 if count >= threshold: - print(f"Success: Found '{hash_string}' more than {threshold} times in {lockfile_name}.") + print( + f"Success: Found '{hash_string}' more than {threshold} times in {lockfile_name}." + ) sys.exit(0) # If the loop completes without early exit, it means the threshold was not reached print( - f"Error: The string '{hash_string}' appears less than {threshold} times in {lockfile_name}, please make sure you are using an up to date poetry version.") + f"Error: The string '{hash_string}' appears less than {threshold} times in {lockfile_name}, please make sure you are using an up to date poetry version." + ) sys.exit(1) except FileNotFoundError: print(f"Error: File {lockfile_name} does not exist.") - sys.exit(1) \ No newline at end of file + sys.exit(1) diff --git a/tools/daily_pypi_downloads.py b/tools/daily_pypi_downloads.py deleted file mode 100644 index 64a0956ed..000000000 --- a/tools/daily_pypi_downloads.py +++ /dev/null @@ -1,81 +0,0 @@ -import uuid - -import requests -import posthog -import os -from datetime import datetime, timedelta - -# Replace with your PostHog Project API Key -POSTHOG_API_KEY = os.getenv('POSTHOG_API_KEY') -POSTHOG_API_HOST = 'https://eu.i.posthog.com' - -# Initialize PostHog client -posthog.project_api_key = POSTHOG_API_KEY -posthog.host = POSTHOG_API_HOST - -# Read last processed date from file -state_file = 'last_processed_date.txt' -if os.path.exists(state_file): - with open(state_file, 'r') as f: - last_processed_date = f.read().strip() - last_processed_date = datetime.strptime(last_processed_date, '%Y-%m-%d') -else: - # If no state file, start from 2 days ago - last_processed_date = datetime.utcnow() - timedelta(days=2) - -# Calculate the next date to process -next_date = last_processed_date + timedelta(days=1) -today = datetime.utcnow().date() - -if next_date.date() >= today: - print("No new data to process.") - exit(0) - -date_str = next_date.strftime('%Y-%m-%d') - -# Fetch download data for the date -package = 'cognee' -url = f'https://pypistats.org/api/packages/{package}/overall' - -response = requests.get(url) -if response.status_code != 200: - print(f"Failed to fetch data: {response.status_code}") - exit(1) - -data = response.json() - -# Find the entry for the date we want -downloads = None -for entry in data['data']: - if entry['date'] == date_str: - downloads = entry['downloads'] - category = entry.get('category') - break - -if downloads is None: - print(f"No data available for date {date_str}") - exit(1) - -# Create a unique message_id -message_id = f"cognee_downloads_{date_str}" - -distinct_id = str(uuid.uuid4()) - -# Send an event to PostHog -event_name = 'cognee_lib_downloads_with_mirrors' if category == 'with_mirrors' else 'cognee_lib_downloads_without_mirrors' - -if event_name == 'cognee_lib_downloads_without_mirrors': - posthog.capture( - distinct_id=str(uuid.uuid4()), - event=event_name, - properties={ - 'category': category, - 'date': date_str, - 'downloads': downloads, - } - ) -print(f"Data for {date_str} updated in PostHog successfully. Downloads is {downloads}") - -# Update the state file -with open(state_file, 'w') as f: - f.write(date_str) diff --git a/tools/push_to_posthog.py b/tools/push_to_posthog.py deleted file mode 100644 index 15cf05df6..000000000 --- a/tools/push_to_posthog.py +++ /dev/null @@ -1,76 +0,0 @@ -# extract_and_push_github_data.py -import uuid - -import requests -import os -from posthog import Posthog - -# Get environment variables -GITHUB_TOKEN = os.getenv('GITHUB_TOKEN') -REPO = os.getenv('GITHUB_REPOSITORY') -POSTHOG_API_KEY = os.getenv('POSTHOG_API_KEY') # Your PostHog Project API Key -POSTHOG_HOST = 'https://eu.i.posthog.com' # Default PostHog Cloud - -headers = { - "Authorization": f"token {GITHUB_TOKEN}", - "Accept": "application/vnd.github.v3+json" -} - -# Initialize PostHog client -posthog = Posthog( - api_key=POSTHOG_API_KEY, - host=POSTHOG_HOST -) - -posthog.debug = True - -def get_repo_info(): - url = f"https://api.github.com/repos/{REPO}" - response = requests.get(url, headers=headers) - if response.status_code == 200: - return response.json() - else: - print(f"Error fetching repo info: {response.status_code}") - return None - -def main(): - repo_info = get_repo_info() - - if repo_info: - # Prepare data to send to PostHog - properties = { - 'repo_name': repo_info.get('full_name'), - 'stars': repo_info.get('stargazers_count'), - 'forks': repo_info.get('forks_count'), - 'open_issues': repo_info.get('open_issues_count'), - 'watchers': repo_info.get('subscribers_count'), - 'created_at': repo_info.get('created_at'), - 'updated_at': repo_info.get('updated_at'), - 'pushed_at': repo_info.get('pushed_at'), - 'language': repo_info.get('language'), - 'license': repo_info.get('license').get('name') if repo_info.get('license') else None, - 'topics': repo_info.get('topics') - } - - print("Repository information: ", properties) - - distinct_id = str(uuid.uuid4()) - - # Send event to PostHog - result = posthog.capture( - distinct_id=distinct_id, # You can customize this identifier - event='cognee_lib_github_repo_stats', - properties=properties - ) - - print("PostHog response: ", result) - - print("Data sent to PostHog successfully.") - else: - print("Failed to retrieve repository information.") - - # Close PostHog client - posthog.shutdown() - -if __name__ == "__main__": - main() From 886e9c7eb3cdbc7ae0445622287b6b3addbde63a Mon Sep 17 00:00:00 2001 From: Boris Arzentar Date: Sun, 12 Jan 2025 18:52:58 +0100 Subject: [PATCH 2/2] fix: update dependencies of the mcp server --- cognee-mcp/pyproject.toml | 18 +- cognee-mcp/uv.lock | 966 ++++++++++++++++++++++++++++++-------- 2 files changed, 790 insertions(+), 194 deletions(-) diff --git a/cognee-mcp/pyproject.toml b/cognee-mcp/pyproject.toml index 81f6c7236..aaef31c41 100644 --- a/cognee-mcp/pyproject.toml +++ b/cognee-mcp/pyproject.toml @@ -3,10 +3,10 @@ name = "cognee-mcp" version = "0.1.0" description = "A MCP server project" readme = "README.md" -requires-python = ">=3.11" +requires-python = ">=3.10" dependencies = [ "mcp>=1.1.1", - "openai==1.52.0", + "openai==1.59.4", "pydantic==2.8.2", "python-dotenv==1.0.1", "fastapi>=0.109.2,<0.110.0", @@ -21,18 +21,18 @@ dependencies = [ "boto3>=1.26.125,<2.0.0", "botocore>=1.35.54,<2.0.0", "gunicorn>=20.1.0,<21.0.0", - "sqlalchemy==2.0.35", - "instructor==1.5.2", + "sqlalchemy==2.0.36", + "instructor==1.7.2", "networkx>=3.2.1,<4.0.0", "aiosqlite>=0.20.0,<0.21.0", - "pandas==2.0.3", + "pandas==2.2.3", "filetype>=1.2.0,<2.0.0", "nltk>=3.8.1,<4.0.0", "dlt[sqlalchemy]>=1.4.1,<2.0.0", "aiofiles>=23.2.1,<24.0.0", "qdrant-client>=1.9.0,<2.0.0", # Optional "graphistry>=0.33.5,<0.34.0", - "tenacity>=8.4.1,<9.0.0", + "tenacity>=9.0.0", "weaviate-client==4.6.7", # Optional "scikit-learn>=1.5.0,<2.0.0", "pypdf>=4.1.0,<5.0.0", @@ -44,8 +44,8 @@ dependencies = [ "langsmith==0.1.139", # Optional "langdetect==1.0.9", "posthog>=3.5.0,<4.0.0", # Optional - "lancedb==0.15.0", - "litellm==1.49.1", + "lancedb==0.16.0", + "litellm==1.57.2", "groq==0.8.0", # Optional "langfuse>=2.32.0,<3.0.0", # Optional "pydantic-settings>=2.2.1,<3.0.0", @@ -56,7 +56,7 @@ dependencies = [ "asyncpg==0.30.0", # Optional "pgvector>=0.3.5,<0.4.0", # Optional "psycopg2>=2.9.10,<3.0.0", # Optional - "llama-index-core>=0.11.22,<0.12.0", # Optional + "llama-index-core>=0.12.0", # Optional "deepeval>=2.0.1,<3.0.0", # Optional "transformers>=4.46.3,<5.0.0", "pymilvus>=2.5.0,<3.0.0", # Optional diff --git a/cognee-mcp/uv.lock b/cognee-mcp/uv.lock index b748667e1..46f6c198b 100644 --- a/cognee-mcp/uv.lock +++ b/cognee-mcp/uv.lock @@ -1,7 +1,8 @@ version = 1 -requires-python = ">=3.11" +requires-python = ">=3.10" resolution-markers = [ - "python_full_version < '3.12'", + "python_full_version < '3.11'", + "python_full_version == '3.11.*'", "python_full_version >= '3.12' and python_full_version < '3.12.4'", "python_full_version >= '3.12.4' and python_full_version < '3.13'", "python_full_version >= '3.13'", @@ -32,6 +33,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, { name = "attrs" }, { name = "frozenlist" }, { name = "multidict" }, @@ -39,6 +41,21 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/17/7e/16e57e6cf20eb62481a2f9ce8674328407187950ccc602ad07c685279141/aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a", size = 7542993 } wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/dd/3d40c0e67e79c5c42671e3e268742f1ff96c6573ca43823563d01abd9475/aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f", size = 586969 }, + { url = "https://files.pythonhosted.org/packages/75/64/8de41b5555e5b43ef6d4ed1261891d33fe45ecc6cb62875bfafb90b9ab93/aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9", size = 399367 }, + { url = "https://files.pythonhosted.org/packages/96/36/27bd62ea7ce43906d1443a73691823fc82ffb8fa03276b0e2f7e1037c286/aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8", size = 390720 }, + { url = "https://files.pythonhosted.org/packages/e8/4d/d516b050d811ce0dd26325c383013c104ffa8b58bd361b82e52833f68e78/aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1", size = 1228820 }, + { url = "https://files.pythonhosted.org/packages/53/94/964d9327a3e336d89aad52260836e4ec87fdfa1207176550fdf384eaffe7/aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a", size = 1264616 }, + { url = "https://files.pythonhosted.org/packages/0c/20/70ce17764b685ca8f5bf4d568881b4e1f1f4ea5e8170f512fdb1a33859d2/aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd", size = 1298402 }, + { url = "https://files.pythonhosted.org/packages/d1/d1/5248225ccc687f498d06c3bca5af2647a361c3687a85eb3aedcc247ee1aa/aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026", size = 1222205 }, + { url = "https://files.pythonhosted.org/packages/f2/a3/9296b27cc5d4feadf970a14d0694902a49a985f3fae71b8322a5f77b0baa/aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b", size = 1193804 }, + { url = "https://files.pythonhosted.org/packages/d9/07/f3760160feb12ac51a6168a6da251a4a8f2a70733d49e6ceb9b3e6ee2f03/aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d", size = 1193544 }, + { url = "https://files.pythonhosted.org/packages/7e/4c/93a70f9a4ba1c30183a6dd68bfa79cddbf9a674f162f9c62e823a74a5515/aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7", size = 1193047 }, + { url = "https://files.pythonhosted.org/packages/ff/a3/36a1e23ff00c7a0cd696c5a28db05db25dc42bfc78c508bd78623ff62a4a/aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a", size = 1247201 }, + { url = "https://files.pythonhosted.org/packages/55/ae/95399848557b98bb2c402d640b2276ce3a542b94dba202de5a5a1fe29abe/aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc", size = 1264102 }, + { url = "https://files.pythonhosted.org/packages/38/f5/02e5c72c1b60d7cceb30b982679a26167e84ac029fd35a93dd4da52c50a3/aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68", size = 1215760 }, + { url = "https://files.pythonhosted.org/packages/30/17/1463840bad10d02d0439068f37ce5af0b383884b0d5838f46fb027e233bf/aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257", size = 362678 }, + { url = "https://files.pythonhosted.org/packages/dd/01/a0ef707d93e867a43abbffee3a2cdf30559910750b9176b891628c7ad074/aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6", size = 381097 }, { url = "https://files.pythonhosted.org/packages/72/31/3c351d17596194e5a38ef169a4da76458952b2497b4b54645b9d483cbbb0/aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f", size = 586501 }, { url = "https://files.pythonhosted.org/packages/a4/a8/a559d09eb08478cdead6b7ce05b0c4a133ba27fcdfa91e05d2e62867300d/aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb", size = 398993 }, { url = "https://files.pythonhosted.org/packages/c5/47/7736d4174613feef61d25332c3bd1a4f8ff5591fbd7331988238a7299485/aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871", size = 390647 }, @@ -157,6 +174,7 @@ name = "anyio" version = "4.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, { name = "sniffio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, @@ -203,6 +221,9 @@ wheels = [ name = "astroid" version = "3.3.6" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] sdist = { url = "https://files.pythonhosted.org/packages/ca/40/e028137cb19ed577001c76b91c5c50fee5a9c85099f45820b69385574ac5/astroid-3.3.6.tar.gz", hash = "sha256:6aaea045f938c735ead292204afdb977a36e989522b7833ef6fea94de743f442", size = 397452 } wheels = [ { url = "https://files.pythonhosted.org/packages/0c/d2/82c8ccef22ea873a2b0da9636e47d45137eeeb2fb9320c5dbbdd3627bab0/astroid-3.3.6-py3-none-any.whl", hash = "sha256:db676dc4f3ae6bfe31cda227dc60e03438378d7a896aec57422c95634e8d722f", size = 274644 }, @@ -210,19 +231,30 @@ wheels = [ [[package]] name = "async-timeout" -version = "5.0.1" +version = "4.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274 } +sdist = { url = "https://files.pythonhosted.org/packages/87/d6/21b30a550dafea84b1b8eee21b5e23fa16d010ae006011221f33dcd8d7f8/async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", size = 8345 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233 }, + { url = "https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028", size = 5721 }, ] [[package]] name = "asyncpg" version = "0.30.0" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout", marker = "python_full_version < '3.11'" }, +] sdist = { url = "https://files.pythonhosted.org/packages/2f/4c/7c991e080e106d854809030d8584e15b2e996e26f16aee6d757e387bc17d/asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851", size = 957746 } wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/07/1650a8c30e3a5c625478fa8aafd89a8dd7d85999bf7169b16f54973ebf2c/asyncpg-0.30.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e", size = 673143 }, + { url = "https://files.pythonhosted.org/packages/a0/9a/568ff9b590d0954553c56806766914c149609b828c426c5118d4869111d3/asyncpg-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0", size = 645035 }, + { url = "https://files.pythonhosted.org/packages/de/11/6f2fa6c902f341ca10403743701ea952bca896fc5b07cc1f4705d2bb0593/asyncpg-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f", size = 2912384 }, + { url = "https://files.pythonhosted.org/packages/83/83/44bd393919c504ffe4a82d0aed8ea0e55eb1571a1dea6a4922b723f0a03b/asyncpg-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af", size = 2947526 }, + { url = "https://files.pythonhosted.org/packages/08/85/e23dd3a2b55536eb0ded80c457b0693352262dc70426ef4d4a6fc994fa51/asyncpg-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75", size = 2895390 }, + { url = "https://files.pythonhosted.org/packages/9b/26/fa96c8f4877d47dc6c1864fef5500b446522365da3d3d0ee89a5cce71a3f/asyncpg-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f", size = 3015630 }, + { url = "https://files.pythonhosted.org/packages/34/00/814514eb9287614188a5179a8b6e588a3611ca47d41937af0f3a844b1b4b/asyncpg-0.30.0-cp310-cp310-win32.whl", hash = "sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf", size = 568760 }, + { url = "https://files.pythonhosted.org/packages/f0/28/869a7a279400f8b06dd237266fdd7220bc5f7c975348fea5d1e6909588e9/asyncpg-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50", size = 625764 }, { url = "https://files.pythonhosted.org/packages/4c/0e/f5d708add0d0b97446c402db7e8dd4c4183c13edaabe8a8500b411e7b495/asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a", size = 674506 }, { url = "https://files.pythonhosted.org/packages/6a/a0/67ec9a75cb24a1d99f97b8437c8d56da40e6f6bd23b04e2f4ea5d5ad82ac/asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed", size = 645922 }, { url = "https://files.pythonhosted.org/packages/5c/d9/a7584f24174bd86ff1053b14bb841f9e714380c672f61c906eb01d8ec433/asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a", size = 3079565 }, @@ -307,6 +339,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/ab/a6c0da5c2cf86600f74402a72b06dfe365e1a1d30783b1bbeec460fd57d1/bcrypt-4.2.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:807261df60a8b1ccd13e6599c779014a362ae4e795f5c59747f60208daddd96d", size = 339836 }, { url = "https://files.pythonhosted.org/packages/b4/b4/e75b6e9a72a030a04362034022ebe317c5b735d04db6ad79237101ae4a5c/bcrypt-4.2.1-cp39-abi3-win32.whl", hash = "sha256:b588af02b89d9fad33e5f98f7838bf590d6d692df7153647724a7f20c186f6bf", size = 160911 }, { url = "https://files.pythonhosted.org/packages/76/b9/d51d34e6cd6d887adddb28a8680a1d34235cc45b9d6e238ce39b98199ca0/bcrypt-4.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:e84e0e6f8e40a242b11bce56c313edc2be121cec3e0ec2d76fce01f6af33c07c", size = 153078 }, + { url = "https://files.pythonhosted.org/packages/4e/6e/7193067042de23af3d71882f898c8c0bd2b18e6ee44a4f76e395dfadb5a8/bcrypt-4.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76132c176a6d9953cdc83c296aeaed65e1a708485fd55abf163e0d9f8f16ce0e", size = 270069 }, + { url = "https://files.pythonhosted.org/packages/3b/05/2546085c6dc07a45627460a39e6291b82382b434fff2bd0167ff3bc31eb1/bcrypt-4.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e158009a54c4c8bc91d5e0da80920d048f918c61a581f0a63e4e93bb556d362f", size = 274652 }, ] [[package]] @@ -369,43 +403,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/1f/a36fc867c6aef0d346e9b6b2bfe33be458c36f770f7ad8e15acc3474999d/botocore-1.35.84-py3-none-any.whl", hash = "sha256:b4dc2ac7f54ba959429e1debbd6c7c2fb2349baa1cd63803f0682f0773dbd077", size = 13287873 }, ] -[[package]] -name = "cachetools" -version = "5.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/38/a0f315319737ecf45b4319a8cd1f3a908e29d9277b46942263292115eee7/cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a", size = 27661 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/07/14f8ad37f2d12a5ce41206c21820d8cb6561b728e51fad4530dff0552a67/cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292", size = 9524 }, -] - -[[package]] -name = "cairocffi" -version = "1.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611 }, -] - -[[package]] -name = "cairosvg" -version = "2.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cairocffi" }, - { name = "cssselect2" }, - { name = "defusedxml" }, - { name = "pillow" }, - { name = "tinycss2" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/e6/ec5900b724e3c44af7f6f51f719919137284e5da4aabe96508baec8a1b40/CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0", size = 8399085 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/a5/1866b42151f50453f1a0d28fc4c39f5be5f412a2e914f33449c42daafdf1/CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b", size = 43235 }, -] - [[package]] name = "certifi" version = "2024.12.14" @@ -424,6 +421,18 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, @@ -484,6 +493,21 @@ version = "3.4.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } wheels = [ + { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, + { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, + { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, + { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, + { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, + { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, + { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, + { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, + { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, + { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, + { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, + { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, + { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, + { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, + { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, @@ -537,7 +561,7 @@ name = "click" version = "8.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "platform_system == 'Windows'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } wheels = [ @@ -546,7 +570,7 @@ wheels = [ [[package]] name = "cognee" -version = "0.1.20" +version = "0.1.21" source = { directory = "../" } dependencies = [ { name = "aiofiles" }, @@ -556,7 +580,6 @@ dependencies = [ { name = "anthropic" }, { name = "bokeh" }, { name = "boto3" }, - { name = "cairosvg" }, { name = "datasets" }, { name = "dlt", extra = ["sqlalchemy"] }, { name = "fastapi" }, @@ -569,6 +592,7 @@ dependencies = [ { name = "jinja2" }, { name = "lancedb" }, { name = "langdetect" }, + { name = "langfuse" }, { name = "litellm" }, { name = "matplotlib" }, { name = "nest-asyncio" }, @@ -604,7 +628,6 @@ requires-dist = [ { name = "bokeh", specifier = ">=3.6.2,<4.0.0" }, { name = "boto3", specifier = ">=1.26.125,<2.0.0" }, { name = "botocore", marker = "extra == 'filesystem'", specifier = ">=1.35.54,<2.0.0" }, - { name = "cairosvg", specifier = ">=2.7.1,<3.0.0" }, { name = "datasets", specifier = "==3.1.0" }, { name = "deepeval", marker = "extra == 'deepeval'", specifier = ">=2.0.1,<3.0.0" }, { name = "dlt", extras = ["sqlalchemy"], specifier = ">=1.4.1,<2.0.0" }, @@ -616,23 +639,23 @@ requires-dist = [ { name = "groq", marker = "extra == 'groq'", specifier = "==0.8.0" }, { name = "gunicorn", specifier = ">=20.1.0,<21.0.0" }, { name = "httpx", specifier = "==0.27.0" }, - { name = "instructor", specifier = "==1.5.2" }, + { name = "instructor", specifier = "==1.7.2" }, { name = "jinja2", specifier = ">=3.1.3,<4.0.0" }, - { name = "lancedb", specifier = "==0.15.0" }, + { name = "lancedb", specifier = "==0.16.0" }, { name = "langchain-text-splitters", marker = "extra == 'langchain'", specifier = "==0.3.2" }, { name = "langdetect", specifier = "==1.0.9" }, - { name = "langfuse", marker = "extra == 'langfuse'", specifier = ">=2.32.0,<3.0.0" }, + { name = "langfuse", specifier = ">=2.32.0,<3.0.0" }, { name = "langsmith", marker = "extra == 'langchain'", specifier = "==0.2.3" }, - { name = "litellm", specifier = "==1.49.1" }, - { name = "llama-index-core", marker = "extra == 'llama-index'", specifier = ">=0.11.22,<0.12.0" }, + { name = "litellm", specifier = "==1.57.2" }, + { name = "llama-index-core", marker = "extra == 'llama-index'", specifier = ">=0.12.10.post1,<0.13.0" }, { name = "matplotlib", specifier = ">=3.8.3,<4.0.0" }, { name = "neo4j", marker = "extra == 'neo4j'", specifier = ">=5.20.0,<6.0.0" }, { name = "nest-asyncio", specifier = "==1.6.0" }, { name = "networkx", specifier = ">=3.2.1,<4.0.0" }, { name = "nltk", specifier = ">=3.8.1,<4.0.0" }, { name = "numpy", specifier = "==1.26.4" }, - { name = "openai", specifier = "==1.52.0" }, - { name = "pandas", specifier = "==2.0.3" }, + { name = "openai", specifier = "==1.59.4" }, + { name = "pandas", specifier = "==2.2.3" }, { name = "pgvector", marker = "extra == 'postgres'", specifier = ">=0.3.5,<0.4.0" }, { name = "posthog", marker = "extra == 'posthog'", specifier = ">=3.5.0,<4.0.0" }, { name = "pre-commit", specifier = ">=4.0.1,<5.0.0" }, @@ -646,8 +669,8 @@ requires-dist = [ { name = "requests", specifier = "==2.32.3" }, { name = "scikit-learn", specifier = ">=1.5.0,<2.0.0" }, { name = "sentry-sdk", extras = ["fastapi"], specifier = ">=2.9.0,<3.0.0" }, - { name = "sqlalchemy", specifier = "==2.0.35" }, - { name = "tenacity", specifier = ">=8.4.1,<9.0.0" }, + { name = "sqlalchemy", specifier = "==2.0.36" }, + { name = "tenacity", specifier = ">=9.0.0,<10.0.0" }, { name = "tiktoken", specifier = "==0.7.0" }, { name = "transformers", specifier = ">=4.46.3,<5.0.0" }, { name = "typing-extensions", specifier = "==4.12.2" }, @@ -760,15 +783,15 @@ requires-dist = [ { name = "graphistry", specifier = ">=0.33.5,<0.34.0" }, { name = "groq", specifier = "==0.8.0" }, { name = "gunicorn", specifier = ">=20.1.0,<21.0.0" }, - { name = "instructor", specifier = "==1.5.2" }, + { name = "instructor", specifier = "==1.7.2" }, { name = "jinja2", specifier = ">=3.1.3,<4.0.0" }, - { name = "lancedb", specifier = "==0.15.0" }, + { name = "lancedb", specifier = "==0.16.0" }, { name = "langchain-text-splitters", specifier = "==0.3.2" }, { name = "langdetect", specifier = "==1.0.9" }, { name = "langfuse", specifier = ">=2.32.0,<3.0.0" }, { name = "langsmith", specifier = "==0.1.139" }, - { name = "litellm", specifier = "==1.49.1" }, - { name = "llama-index-core", specifier = ">=0.11.22,<0.12.0" }, + { name = "litellm", specifier = "==1.57.2" }, + { name = "llama-index-core", specifier = ">=0.12.0" }, { name = "matplotlib", specifier = ">=3.8.3,<4.0.0" }, { name = "mcp", specifier = ">=1.1.1" }, { name = "mypy", specifier = ">=1.7.1,<2.0.0" }, @@ -777,8 +800,8 @@ requires-dist = [ { name = "networkx", specifier = ">=3.2.1,<4.0.0" }, { name = "nltk", specifier = ">=3.8.1,<4.0.0" }, { name = "numpy", specifier = "==1.26.4" }, - { name = "openai", specifier = "==1.52.0" }, - { name = "pandas", specifier = "==2.0.3" }, + { name = "openai", specifier = "==1.59.4" }, + { name = "pandas", specifier = "==2.2.3" }, { name = "pgvector", specifier = ">=0.3.5,<0.4.0" }, { name = "posthog", specifier = ">=3.5.0,<4.0.0" }, { name = "psycopg2", specifier = ">=2.9.10,<3.0.0" }, @@ -795,8 +818,8 @@ requires-dist = [ { name = "ruff", specifier = ">=0.2.2,<0.3.0" }, { name = "scikit-learn", specifier = ">=1.5.0,<2.0.0" }, { name = "sentry-sdk", extras = ["fastapi"], specifier = ">=2.9.0,<3.0.0" }, - { name = "sqlalchemy", specifier = "==2.0.35" }, - { name = "tenacity", specifier = ">=8.4.1,<9.0.0" }, + { name = "sqlalchemy", specifier = "==2.0.36" }, + { name = "tenacity", specifier = ">=9.0.0" }, { name = "tiktoken", specifier = "==0.7.0" }, { name = "transformers", specifier = ">=4.46.3,<5.0.0" }, { name = "tweepy", specifier = "==4.14.0" }, @@ -827,6 +850,16 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/80937fe3efe0edacf67c9a20b955139a1a622730042c1ea991956f2704ad/contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab", size = 268466 }, + { url = "https://files.pythonhosted.org/packages/82/1d/e3eaebb4aa2d7311528c048350ca8e99cdacfafd99da87bc0a5f8d81f2c2/contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124", size = 253314 }, + { url = "https://files.pythonhosted.org/packages/de/f3/d796b22d1a2b587acc8100ba8c07fb7b5e17fde265a7bb05ab967f4c935a/contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1", size = 312003 }, + { url = "https://files.pythonhosted.org/packages/bf/f5/0e67902bc4394daee8daa39c81d4f00b50e063ee1a46cb3938cc65585d36/contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b", size = 351896 }, + { url = "https://files.pythonhosted.org/packages/1f/d6/e766395723f6256d45d6e67c13bb638dd1fa9dc10ef912dc7dd3dcfc19de/contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453", size = 320814 }, + { url = "https://files.pythonhosted.org/packages/a9/57/86c500d63b3e26e5b73a28b8291a67c5608d4aa87ebd17bd15bb33c178bc/contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3", size = 324969 }, + { url = "https://files.pythonhosted.org/packages/b8/62/bb146d1289d6b3450bccc4642e7f4413b92ebffd9bf2e91b0404323704a7/contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277", size = 1265162 }, + { url = "https://files.pythonhosted.org/packages/18/04/9f7d132ce49a212c8e767042cc80ae390f728060d2eea47058f55b9eff1c/contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595", size = 1324328 }, + { url = "https://files.pythonhosted.org/packages/46/23/196813901be3f97c83ababdab1382e13e0edc0bb4e7b49a7bff15fcf754e/contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697", size = 173861 }, + { url = "https://files.pythonhosted.org/packages/e0/82/c372be3fc000a3b2005061ca623a0d1ecd2eaafb10d9e883a2fc8566e951/contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e", size = 218566 }, { url = "https://files.pythonhosted.org/packages/12/bb/11250d2906ee2e8b466b5f93e6b19d525f3e0254ac8b445b56e618527718/contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b", size = 269555 }, { url = "https://files.pythonhosted.org/packages/67/71/1e6e95aee21a500415f5d2dbf037bf4567529b6a4e986594d7026ec5ae90/contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc", size = 254549 }, { url = "https://files.pythonhosted.org/packages/31/2c/b88986e8d79ac45efe9d8801ae341525f38e087449b6c2f2e6050468a42c/contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86", size = 313000 }, @@ -867,6 +900,9 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, + { url = "https://files.pythonhosted.org/packages/3e/4f/e56862e64b52b55b5ddcff4090085521fc228ceb09a88390a2b103dccd1b/contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6", size = 265605 }, + { url = "https://files.pythonhosted.org/packages/b0/2e/52bfeeaa4541889f23d8eadc6386b442ee2470bd3cff9baa67deb2dd5c57/contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750", size = 315040 }, + { url = "https://files.pythonhosted.org/packages/52/94/86bfae441707205634d80392e873295652fc313dfd93c233c52c4dc07874/contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53", size = 218221 }, ] [[package]] @@ -875,6 +911,16 @@ version = "7.6.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5b/d2/c25011f4d036cf7e8acbbee07a8e09e9018390aee25ba085596c4b83d510/coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", size = 801710 } wheels = [ + { url = "https://files.pythonhosted.org/packages/49/f3/f830fb53bf7e4f1d5542756f61d9b740352a188f43854aab9409c8cdeb18/coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb", size = 207024 }, + { url = "https://files.pythonhosted.org/packages/4e/e3/ea5632a3a6efd00ab0a791adc0f3e48512097a757ee7dcbee5505f57bafa/coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710", size = 207463 }, + { url = "https://files.pythonhosted.org/packages/e4/ae/18ff8b5580e27e62ebcc888082aa47694c2772782ea7011ddf58e377e98f/coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa", size = 235902 }, + { url = "https://files.pythonhosted.org/packages/6a/52/57030a8d15ab935624d298360f0a6704885578e39f7b4f68569e59f5902d/coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1", size = 233806 }, + { url = "https://files.pythonhosted.org/packages/d0/c5/4466602195ecaced298d55af1e29abceb812addabefd5bd9116a204f7bab/coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec", size = 234966 }, + { url = "https://files.pythonhosted.org/packages/b0/1c/55552c3009b7bf96732e36548596ade771c87f89cf1f5a8e3975b33539b5/coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3", size = 234029 }, + { url = "https://files.pythonhosted.org/packages/bb/7d/da3dca6878701182ea42c51df47a47c80eaef2a76f5aa3e891dc2a8cce3f/coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5", size = 232494 }, + { url = "https://files.pythonhosted.org/packages/28/cc/39de85ac1d5652bc34ff2bee39ae251b1fdcaae53fab4b44cab75a432bc0/coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073", size = 233611 }, + { url = "https://files.pythonhosted.org/packages/d1/2b/7eb011a9378911088708f121825a71134d0c15fac96972a0ae7a8f5a4049/coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198", size = 209712 }, + { url = "https://files.pythonhosted.org/packages/5b/35/c3f40a2269b416db34ce1dedf682a7132c26f857e33596830fa4deebabf9/coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717", size = 210553 }, { url = "https://files.pythonhosted.org/packages/b1/91/b3dc2f7f38b5cca1236ab6bbb03e84046dd887707b4ec1db2baa47493b3b/coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", size = 207133 }, { url = "https://files.pythonhosted.org/packages/0d/2b/53fd6cb34d443429a92b3ec737f4953627e38b3bee2a67a3c03425ba8573/coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", size = 207577 }, { url = "https://files.pythonhosted.org/packages/74/f2/68edb1e6826f980a124f21ea5be0d324180bf11de6fd1defcf9604f76df0/coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", size = 239524 }, @@ -915,6 +961,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/d0/8e258f6c3a527c1655602f4f576215e055ac704de2d101710a71a2affac2/coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9", size = 247783 }, { url = "https://files.pythonhosted.org/packages/a9/0d/1e4a48d289429d38aae3babdfcadbf35ca36bdcf3efc8f09b550a845bdb5/coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b", size = 210646 }, { url = "https://files.pythonhosted.org/packages/26/74/b0729f196f328ac55e42b1e22ec2f16d8bcafe4b8158a26ec9f1cdd1d93e/coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611", size = 211815 }, + { url = "https://files.pythonhosted.org/packages/15/0e/4ac9035ee2ee08d2b703fdad2d84283ec0bad3b46eb4ad6affb150174cb6/coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b", size = 199270 }, ] [[package]] @@ -946,19 +993,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, -] - -[[package]] -name = "cssselect2" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "tinycss2" }, - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/fc/326cb6f988905998f09bb54a3f5d98d4462ba119363c0dfad29750d48c09/cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a", size = 35888 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/3a/e39436efe51894243ff145a37c4f9a030839b97779ebcc4f13b3ba21c54e/cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969", size = 15586 }, + { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, + { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, + { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, + { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, + { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, + { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, ] [[package]] @@ -1014,6 +1054,10 @@ version = "1.8.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b2/c9/9d585d711cdcae0db7788731b331dab0d1f600d0204e76b2a5c6b30d569e/debugpy-1.8.2.zip", hash = "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00", size = 4614001 } wheels = [ + { url = "https://files.pythonhosted.org/packages/39/8d/8cc1d0a074f81bef909874353843770c68ab164e94b7d49b8182d2a147df/debugpy-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7ee2e1afbf44b138c005e4380097d92532e1001580853a7cb40ed84e0ef1c3d2", size = 1713804 }, + { url = "https://files.pythonhosted.org/packages/17/4c/35395eaf9d600175fc974f4d14f7f81128fe8f65789092539b41056a9b6b/debugpy-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8c3f7c53130a070f0fc845a0f2cee8ed88d220d6b04595897b66605df1edd6", size = 2998800 }, + { url = "https://files.pythonhosted.org/packages/dd/05/9f6f833a48c4e49eb181f6d5264329f40988c8c463c0ecc61fbc0f9e2107/debugpy-1.8.2-cp310-cp310-win32.whl", hash = "sha256:f179af1e1bd4c88b0b9f0fa153569b24f6b6f3de33f94703336363ae62f4bf47", size = 4766562 }, + { url = "https://files.pythonhosted.org/packages/1c/1a/7e86850fe9ed6e7e42241f6fbacaf45ebb049fa3130f10d72b0cb663fd96/debugpy-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:0600faef1d0b8d0e85c816b8bb0cb90ed94fc611f308d5fde28cb8b3d2ff0fe3", size = 4790128 }, { url = "https://files.pythonhosted.org/packages/2b/ba/d06289b7c6194117fcecc88c24dee405b1c14b8e318e7bdf513eb78c3278/debugpy-1.8.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a", size = 1789191 }, { url = "https://files.pythonhosted.org/packages/4f/d6/04ae52227ab7c1d43b729d5ae75ebd592df56c55d4e4dfa30ba173096b0f/debugpy-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634", size = 2643243 }, { url = "https://files.pythonhosted.org/packages/49/cd/207d629509949568603008c8cf90cd0a949d1a9d1900936010854732ab93/debugpy-1.8.2-cp311-cp311-win32.whl", hash = "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad", size = 4703962 }, @@ -1072,15 +1116,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/60/533ce66e28295e2b94267126a851ac091ad29a835a9827d1f9c30574fce4/deepeval-2.0.6-py3-none-any.whl", hash = "sha256:57302830ff9d3d16ad4f1961338c7b4453e48039ff131990f258880728f33b6b", size = 504101 }, ] -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, -] - [[package]] name = "deprecated" version = "1.2.15" @@ -1112,6 +1147,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/18/9e/7a976d923d3ae18d7dc4ace8e0c83e20a847828196e7f4b13a4bf6b03b50/deptry-0.20.0.tar.gz", hash = "sha256:62e9aaf3aea9e2ca66c85da98a0ba0290b4d3daea4e1d0ad937d447bd3c36402", size = 129936 } wheels = [ @@ -1121,6 +1157,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/70/456d976912c6026252034c0cdb37a3cbad34ac0ce815763466720c63aece/deptry-0.20.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ce3920e2bd6d2b4427ab31ab8efb94bbef897001c2d395782bc30002966d12d", size = 1708051 }, { url = "https://files.pythonhosted.org/packages/ff/66/95e04a84120861b0c0ac980999e6172612509d5ff9a84b41e2f71cc3c3c0/deptry-0.20.0-cp38-abi3-win_amd64.whl", hash = "sha256:0c90ce64e637d0e902bc97c5a020adecfee9e9f09ee0bf4c61554994139bebdb", size = 1493281 }, { url = "https://files.pythonhosted.org/packages/53/c9/9d7d86b5fdc452b522ef16df9e27c8404dc6f231fa865a3af31c1dab7563/deptry-0.20.0-cp38-abi3-win_arm64.whl", hash = "sha256:6886ff44aaf26fd83093f14f844ebc84589d90df9bbad9a1625e8a080e6f1be2", size = 1420087 }, + { url = "https://files.pythonhosted.org/packages/2a/06/57ccbad1a66e9a17980f03f6aed9724577a5acd58c761ede76e4b03004a7/deptry-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ace3b39b1d0763f357c79bab003d1b135bea2eb61102be539992621a42d1ac7b", size = 1624520 }, + { url = "https://files.pythonhosted.org/packages/d9/00/c8b214f4a0c52b95cabb35197046efc84f9205eeef1d12026e865eeab373/deptry-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d1a00f8c9e6c0829a4a523edd5e526e3df06d2b50e0a99446f09f9723df2efad", size = 1545283 }, + { url = "https://files.pythonhosted.org/packages/c6/6f/999f8cdb338cceb48e2d05e9638f988cd25d4971d1882e251691ecd41fa0/deptry-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e233859f150df70ffff76e95f9b7326fc25494b9beb26e776edae20f0f515e7d", size = 1677736 }, + { url = "https://files.pythonhosted.org/packages/a0/06/2fffc44168e139619c83de0a2af293c88c08879b93de72b3041a3b4e0eed/deptry-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f92e7e97ef42477717747b190bc6796ab94b35655af126d8c577f7eae0eb3a9", size = 1707537 }, + { url = "https://files.pythonhosted.org/packages/fa/a8/f5465abf491f945175d60f4a52f5c1b8bec7d58bfce41a6dc5d5894fc7b3/deptry-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6cee6005997791bb77155667be055333fb63ae9a24f0f103f25faf1e7affe34", size = 1493191 }, ] [[package]] @@ -1256,6 +1297,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, +] + [[package]] name = "execnet" version = "2.1.1" @@ -1347,6 +1397,14 @@ version = "4.55.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/76/61/a300d1574dc381393424047c0396a0e213db212e28361123af9830d71a8d/fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45", size = 3498155 } wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/f3/9ac8c6705e4a0ff3c29e524df1caeee6f2987b02fb630129f21cc99a8212/fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0", size = 2769857 }, + { url = "https://files.pythonhosted.org/packages/d8/24/e8b8edd280bdb7d0ecc88a5d952b1dec2ee2335be71cc5a33c64871cdfe8/fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f", size = 2299705 }, + { url = "https://files.pythonhosted.org/packages/f8/9e/e1ba20bd3b71870207fd45ca3b90208a7edd8ae3b001081dc31c45adb017/fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841", size = 4576104 }, + { url = "https://files.pythonhosted.org/packages/34/db/d423bc646e6703fe3e6aea0edd22a2df47b9d188c5f7f1b49070be4d2205/fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674", size = 4618282 }, + { url = "https://files.pythonhosted.org/packages/75/a0/e5062ac960a385b984ba74e7b55132e7f2c65e449e8330ab0f595407a3de/fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276", size = 4570539 }, + { url = "https://files.pythonhosted.org/packages/1f/33/0d744ff518ebe50020b63e5018b8b278efd6a930c1d2eedda7defc42153b/fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5", size = 4742411 }, + { url = "https://files.pythonhosted.org/packages/7e/6c/2f768652dba6b801f1567fc5d1829cda369bcd6e95e315a91e628f91c702/fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261", size = 2175132 }, + { url = "https://files.pythonhosted.org/packages/19/d1/4dcd865360fb2c499749a913fe80e41c26e8ae18629d87dfffa3de27e831/fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5", size = 2219430 }, { url = "https://files.pythonhosted.org/packages/4b/18/14be25545600bd100e5b74a3ac39089b7c1cb403dc513b7ca348be3381bf/fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e", size = 2771005 }, { url = "https://files.pythonhosted.org/packages/b2/51/2e1a5d3871cd7c2ae2054b54e92604e7d6abc3fd3656e9583c399648fe1c/fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b", size = 2300654 }, { url = "https://files.pythonhosted.org/packages/73/1a/50109bb2703bc6f774b52ea081db21edf2a9fa4b6d7485faadf9d1b997e9/fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90", size = 4877541 }, @@ -1380,6 +1438,21 @@ version = "1.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8f/ed/0f4cec13a93c02c47ec32d81d11c0c1efbadf4a471e3f3ce7cad366cbbd3/frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", size = 39930 } wheels = [ + { url = "https://files.pythonhosted.org/packages/54/79/29d44c4af36b2b240725dce566b20f63f9b36ef267aaaa64ee7466f4f2f8/frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a", size = 94451 }, + { url = "https://files.pythonhosted.org/packages/47/47/0c999aeace6ead8a44441b4f4173e2261b18219e4ad1fe9a479871ca02fc/frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb", size = 54301 }, + { url = "https://files.pythonhosted.org/packages/8d/60/107a38c1e54176d12e06e9d4b5d755b677d71d1219217cee063911b1384f/frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec", size = 52213 }, + { url = "https://files.pythonhosted.org/packages/17/62/594a6829ac5679c25755362a9dc93486a8a45241394564309641425d3ff6/frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5", size = 240946 }, + { url = "https://files.pythonhosted.org/packages/7e/75/6c8419d8f92c80dd0ee3f63bdde2702ce6398b0ac8410ff459f9b6f2f9cb/frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76", size = 264608 }, + { url = "https://files.pythonhosted.org/packages/88/3e/82a6f0b84bc6fb7e0be240e52863c6d4ab6098cd62e4f5b972cd31e002e8/frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17", size = 261361 }, + { url = "https://files.pythonhosted.org/packages/fd/85/14e5f9ccac1b64ff2f10c927b3ffdf88772aea875882406f9ba0cec8ad84/frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba", size = 231649 }, + { url = "https://files.pythonhosted.org/packages/ee/59/928322800306f6529d1852323014ee9008551e9bb027cc38d276cbc0b0e7/frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d", size = 241853 }, + { url = "https://files.pythonhosted.org/packages/7d/bd/e01fa4f146a6f6c18c5d34cab8abdc4013774a26c4ff851128cd1bd3008e/frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2", size = 243652 }, + { url = "https://files.pythonhosted.org/packages/a5/bd/e4771fd18a8ec6757033f0fa903e447aecc3fbba54e3630397b61596acf0/frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f", size = 241734 }, + { url = "https://files.pythonhosted.org/packages/21/13/c83821fa5544af4f60c5d3a65d054af3213c26b14d3f5f48e43e5fb48556/frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c", size = 260959 }, + { url = "https://files.pythonhosted.org/packages/71/f3/1f91c9a9bf7ed0e8edcf52698d23f3c211d8d00291a53c9f115ceb977ab1/frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab", size = 262706 }, + { url = "https://files.pythonhosted.org/packages/4c/22/4a256fdf5d9bcb3ae32622c796ee5ff9451b3a13a68cfe3f68e2c95588ce/frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5", size = 250401 }, + { url = "https://files.pythonhosted.org/packages/af/89/c48ebe1f7991bd2be6d5f4ed202d94960c01b3017a03d6954dd5fa9ea1e8/frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb", size = 45498 }, + { url = "https://files.pythonhosted.org/packages/28/2f/cc27d5f43e023d21fe5c19538e08894db3d7e081cbf582ad5ed366c24446/frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4", size = 51622 }, { url = "https://files.pythonhosted.org/packages/79/43/0bed28bf5eb1c9e4301003b74453b8e7aa85fb293b31dde352aac528dafc/frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", size = 94987 }, { url = "https://files.pythonhosted.org/packages/bb/bf/b74e38f09a246e8abbe1e90eb65787ed745ccab6eaa58b9c9308e052323d/frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", size = 54584 }, { url = "https://files.pythonhosted.org/packages/2c/31/ab01375682f14f7613a1ade30149f684c84f9b8823a4391ed950c8285656/frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", size = 52499 }, @@ -1513,6 +1586,15 @@ version = "3.1.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2f/ff/df5fede753cc10f6a5be0931204ea30c35fa2f2ea7a35b25bdaf4fe40e46/greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467", size = 186022 } wheels = [ + { url = "https://files.pythonhosted.org/packages/25/90/5234a78dc0ef6496a6eb97b67a42a8e96742a56f7dc808cb954a85390448/greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563", size = 271235 }, + { url = "https://files.pythonhosted.org/packages/7c/16/cd631fa0ab7d06ef06387135b7549fdcc77d8d859ed770a0d28e47b20972/greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83", size = 637168 }, + { url = "https://files.pythonhosted.org/packages/2f/b1/aed39043a6fec33c284a2c9abd63ce191f4f1a07319340ffc04d2ed3256f/greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0", size = 648826 }, + { url = "https://files.pythonhosted.org/packages/76/25/40e0112f7f3ebe54e8e8ed91b2b9f970805143efef16d043dfc15e70f44b/greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120", size = 644443 }, + { url = "https://files.pythonhosted.org/packages/fb/2f/3850b867a9af519794784a7eeed1dd5bc68ffbcc5b28cef703711025fd0a/greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc", size = 643295 }, + { url = "https://files.pythonhosted.org/packages/cf/69/79e4d63b9387b48939096e25115b8af7cd8a90397a304f92436bcb21f5b2/greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617", size = 599544 }, + { url = "https://files.pythonhosted.org/packages/46/1d/44dbcb0e6c323bd6f71b8c2f4233766a5faf4b8948873225d34a0b7efa71/greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7", size = 1125456 }, + { url = "https://files.pythonhosted.org/packages/e0/1d/a305dce121838d0278cee39d5bb268c657f10a5363ae4b726848f833f1bb/greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6", size = 1149111 }, + { url = "https://files.pythonhosted.org/packages/96/28/d62835fb33fb5652f2e98d34c44ad1a0feacc8b1d3f1aecab035f51f267d/greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80", size = 298392 }, { url = "https://files.pythonhosted.org/packages/28/62/1c2665558618553c42922ed47a4e6d6527e2fa3516a8256c2f431c5d0441/greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70", size = 272479 }, { url = "https://files.pythonhosted.org/packages/76/9d/421e2d5f07285b6e4e3a676b016ca781f63cfe4a0cd8eaecf3fd6f7a71ae/greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159", size = 640404 }, { url = "https://files.pythonhosted.org/packages/e5/de/6e05f5c59262a584e502dd3d261bbdd2c97ab5416cc9c0b91ea38932a901/greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e", size = 652813 }, @@ -1572,6 +1654,15 @@ version = "1.60.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7d/6d/919fd5886882c066122e69fbd938c1df2dc0aa22ab8de3e047c6aff5ac58/grpcio-1.60.1.tar.gz", hash = "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", size = 24771788 } wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/3a/e5aa8c16eceb4fbe3603f5e175d738e691f6d3789d0835fb2d5fd2e0bf54/grpcio-1.60.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092", size = 99933155 }, + { url = "https://files.pythonhosted.org/packages/6d/8f/c4c479df7a2db3cd4da9d1423d15a9b5fcae2763cd5c78254f14c6ea3324/grpcio-1.60.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216", size = 9628078 }, + { url = "https://files.pythonhosted.org/packages/02/63/38809fe7ac3c19205258881d020f9c3e70c27c54b70510cbfa0548f3bd63/grpcio-1.60.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525", size = 5115756 }, + { url = "https://files.pythonhosted.org/packages/93/47/07e4aab76f15a946ad66bd7f0df0a05498d68deb312cc5f25a2e4f0d8bb5/grpcio-1.60.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104", size = 5621845 }, + { url = "https://files.pythonhosted.org/packages/db/d4/8643b32c1ca0efa31b0a75b33e5750fe1597724bff684128096670eea13d/grpcio-1.60.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2", size = 5356187 }, + { url = "https://files.pythonhosted.org/packages/cc/ad/e26d069423832e32461f11cdf99040c9a31d2435b047563f9b8705cd2a3b/grpcio-1.60.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0", size = 5904204 }, + { url = "https://files.pythonhosted.org/packages/b4/be/5df9e04743a7c93a6fb64400afd974dfa038f5eb1ada07eac66657ecca19/grpcio-1.60.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb", size = 5605973 }, + { url = "https://files.pythonhosted.org/packages/7b/2c/1b9180ab1085ad08a0541f08972f10393ba7c1aee6090066da8f48e7c8e5/grpcio-1.60.1-cp310-cp310-win32.whl", hash = "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1", size = 3131617 }, + { url = "https://files.pythonhosted.org/packages/80/ae/7fc100880e704b95b151d4259656d8b9fdea1c3e5862506c10f697e5f4de/grpcio-1.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177", size = 3702036 }, { url = "https://files.pythonhosted.org/packages/a0/4f/2d27f7cc911675b717cd5b0e948e38b35a707a9d669b7a5691b9cb4a1311/grpcio-1.60.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", size = 100133807 }, { url = "https://files.pythonhosted.org/packages/ec/d5/c3ddb54b39ce43d21428407eb26cf9a21fd43de5e26d9733b1f173d57475/grpcio-1.60.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", size = 9649624 }, { url = "https://files.pythonhosted.org/packages/f3/2c/ce6dbceff6c6009dedc53da3e5b0dfb6508fed730e9f56facd29d31a907d/grpcio-1.60.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", size = 5120377 }, @@ -1616,6 +1707,15 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/2c/7f/30d9ef28cbe302c622bf289d194689cd571ea4df0b492d46b95e503aabb1/grpcio-tools-1.60.1.tar.gz", hash = "sha256:da08224ab8675c6d464b988bd8ca02cccd2bf0275bceefe8f6219bfd4a4f5e85", size = 4611737 } wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/ef/7c9fca308b1c3d960688f907037a03409acf09aaede7eb1840e04f53ef83/grpcio_tools-1.60.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:184b27333b627a7cc0972fb70d21a8bb7c02ac4a6febc16768d78ea8ff883ddd", size = 63932018 }, + { url = "https://files.pythonhosted.org/packages/ed/cf/531023bd9d18009fa2cd7956d97f22a072a0672259a85fd31f640612ec58/grpcio_tools-1.60.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:18d7737f29ef5bbe3352547d0eccd080807834f00df223867dfc860bf81e9180", size = 5120492 }, + { url = "https://files.pythonhosted.org/packages/ec/5d/59d91a79b49c954dbfa9778a715571f7df4a7492de17e55baf4be8237ea2/grpcio_tools-1.60.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:cc8ba358d2c658c6ecbc58e779bf0fc5a673fecac015a70db27fc5b4d37b76b6", size = 2707836 }, + { url = "https://files.pythonhosted.org/packages/aa/5a/0ef71a85281fed192094902c264a21ff846f0a8f70388f390440e14e70e0/grpcio_tools-1.60.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2973f75e8ba5c551033a1d59cc97654f6f386deaf2559082011d245d7ed87bba", size = 3060237 }, + { url = "https://files.pythonhosted.org/packages/97/4b/a7c3d1f64b2f3728c8ece2b5ebf9ab8ddab2edf2de17f14d2688ff5ce940/grpcio_tools-1.60.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28ae665113affebdd109247386786e5ab4dccfcfad1b5f68e9cce2e326b57ee6", size = 2795163 }, + { url = "https://files.pythonhosted.org/packages/4a/da/79509ea5149cae094797d0580157b14a289244c075074b1a74a870c5b0e6/grpcio_tools-1.60.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5c7ed086fef5ff59f46d53a052b1934b73e0f7d12365d656d6af3a88057d5a3e", size = 3673786 }, + { url = "https://files.pythonhosted.org/packages/e7/97/a01da8f8488df57c6692b133cc2007d6952986c6d9d700df5779fe2c5a5f/grpcio_tools-1.60.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8540f6480428a52614db71dd6394f52cbc0d2565b5ea1136a982f26390a42c7a", size = 3281878 }, + { url = "https://files.pythonhosted.org/packages/51/a5/6dd6b00beae3b880422d80fa17aac904d31ca200320447d36ad46024d706/grpcio_tools-1.60.1-cp310-cp310-win32.whl", hash = "sha256:5b4a939097005531edec331f22d0b82bff26e71ede009354d2f375b5d41e74f0", size = 921928 }, + { url = "https://files.pythonhosted.org/packages/f3/1c/103c72d65ed02f7836c8ecf335540b2d99712c08231847c73678f5c8e71e/grpcio_tools-1.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:075bb67895970f96aabc1761ca674bf4db193f8fcad387f08e50402023b5f953", size = 1068079 }, { url = "https://files.pythonhosted.org/packages/61/77/6414c9fec523fbc13c227b814212f1931db3bcc90d0444e25f20b4083b82/grpcio_tools-1.60.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:284749d20fb22418f17d3d351b9eb838caf4a0393a9cb02c36e5c32fa4bbe9db", size = 63937620 }, { url = "https://files.pythonhosted.org/packages/71/b4/5cdbd524494d0c17adf11ebb17deca82cc358499c2bf70c20044d8fcd099/grpcio_tools-1.60.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:b1041377cf32ee2338284ee26e6b9c10f9ea7728092376b19803dcb9b91d510d", size = 5147734 }, { url = "https://files.pythonhosted.org/packages/4c/bf/360dbe8de7856b36d1960afb6d8906f874c36df32fec76fe0e4d80043fba/grpcio_tools-1.60.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e529cd3d4109a6f4a3f7bdaca68946eb33734e2d7ffe861785a0586abe99ee67", size = 2708356 }, @@ -1821,22 +1921,24 @@ wheels = [ [[package]] name = "instructor" -version = "1.5.2" +version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, { name = "docstring-parser" }, + { name = "jinja2" }, { name = "jiter" }, { name = "openai" }, { name = "pydantic" }, { name = "pydantic-core" }, + { name = "requests" }, { name = "rich" }, { name = "tenacity" }, { name = "typer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/31/f7499f60a513411a1e8c47c530987d1d3f2dbf9da0d621e52a100a80eebb/instructor-1.5.2.tar.gz", hash = "sha256:fdd5ccbca21b4c558a24e9ba12c84afd907e65153a39d035f47c25800011a977", size = 49521 } +sdist = { url = "https://files.pythonhosted.org/packages/63/ba/692739c76959191aa7e5f0fccda871b36548355f4a09c8733687e64e62b0/instructor-1.7.2.tar.gz", hash = "sha256:6c01b2b159766df24865dc81f7bf8457cbda88a3c0bbc810da3467d19b185ed2", size = 66200177 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/94/5f96c1d87ba732ba6b2a9751314ddb69bfcd8d05ed0f7e93ee17fd4df068/instructor-1.5.2-py3-none-any.whl", hash = "sha256:da25abbf1ab792fb094992f1d9ce593e26fe458cb1f9a8e7ebf9d68f3f2c757a", size = 61494 }, + { url = "https://files.pythonhosted.org/packages/c5/82/fd319382c1a33d7021cf151007b4cbd5daddf09d9ca5fb670e476668f9fc/instructor-1.7.2-py3-none-any.whl", hash = "sha256:cb43d27f6d7631c31762b936b2fcb44d2a3f9d8a020430a0f4d3484604ffb95b", size = 71353 }, ] [[package]] @@ -1862,34 +1964,61 @@ wheels = [ [[package]] name = "jiter" -version = "0.5.0" +version = "0.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/1a/aa64be757afc614484b370a4d9fc1747dc9237b37ce464f7f9d9ca2a3d38/jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a", size = 158300 } +sdist = { url = "https://files.pythonhosted.org/packages/f8/70/90bc7bd3932e651486861df5c8ffea4ca7c77d28e8532ddefe2abc561a53/jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d", size = 163007 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5f/3ac960ed598726aae46edea916e6df4df7ff6fe084bc60774b95cf3154e6/jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553", size = 284131 }, - { url = "https://files.pythonhosted.org/packages/03/eb/2308fa5f5c14c97c4c7720fef9465f1fa0771826cddb4eec9866bdd88846/jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3", size = 299310 }, - { url = "https://files.pythonhosted.org/packages/3c/f6/dba34ca10b44715fa5302b8e8d2113f72eb00a9297ddf3fa0ae4fd22d1d1/jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6", size = 332282 }, - { url = "https://files.pythonhosted.org/packages/69/f7/64e0a7439790ec47f7681adb3871c9d9c45fff771102490bbee5e92c00b7/jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4", size = 342370 }, - { url = "https://files.pythonhosted.org/packages/55/31/1efbfff2ae8e4d919144c53db19b828049ad0622a670be3bbea94a86282c/jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9", size = 363591 }, - { url = "https://files.pythonhosted.org/packages/30/c3/7ab2ca2276426a7398c6dfb651e38dbc81954c79a3bfbc36c514d8599499/jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614", size = 378551 }, - { url = "https://files.pythonhosted.org/packages/47/e7/5d88031cd743c62199b125181a591b1671df3ff2f6e102df85c58d8f7d31/jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e", size = 319152 }, - { url = "https://files.pythonhosted.org/packages/4c/2d/09ea58e1adca9f0359f3d41ef44a1a18e59518d7c43a21f4ece9e72e28c0/jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06", size = 357377 }, - { url = "https://files.pythonhosted.org/packages/7d/2f/83ff1058cb56fc3ff73e0d3c6440703ddc9cdb7f759b00cfbde8228fc435/jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403", size = 511091 }, - { url = "https://files.pythonhosted.org/packages/ae/c9/4f85f97c9894382ab457382337aea0012711baaa17f2ed55c0ff25f3668a/jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646", size = 492948 }, - { url = "https://files.pythonhosted.org/packages/4d/f2/2e987e0eb465e064c5f52c2f29c8d955452e3b316746e326269263bfb1b7/jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb", size = 195183 }, - { url = "https://files.pythonhosted.org/packages/ab/59/05d1c3203c349b37c4dd28b02b9b4e5915a7bcbd9319173b4548a67d2e93/jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae", size = 191032 }, - { url = "https://files.pythonhosted.org/packages/aa/bd/c3950e2c478161e131bed8cb67c36aed418190e2a961a1c981e69954e54b/jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a", size = 283511 }, - { url = "https://files.pythonhosted.org/packages/80/1c/8ce58d8c37a589eeaaa5d07d131fd31043886f5e77ab50c00a66d869a361/jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df", size = 296974 }, - { url = "https://files.pythonhosted.org/packages/4d/b8/6faeff9eed8952bed93a77ea1cffae7b946795b88eafd1a60e87a67b09e0/jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248", size = 331897 }, - { url = "https://files.pythonhosted.org/packages/4f/54/1d9a2209b46d39ce6f0cef3ad87c462f9c50312ab84585e6bd5541292b35/jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544", size = 342962 }, - { url = "https://files.pythonhosted.org/packages/2a/de/90360be7fc54b2b4c2dfe79eb4ed1f659fce9c96682e6a0be4bbe71371f7/jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba", size = 363844 }, - { url = "https://files.pythonhosted.org/packages/ba/ad/ef32b173191b7a53ea8a6757b80723cba321f8469834825e8c71c96bde17/jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f", size = 378709 }, - { url = "https://files.pythonhosted.org/packages/07/de/353ce53743c0defbbbd652e89c106a97dbbac4eb42c95920b74b5056b93a/jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e", size = 319038 }, - { url = "https://files.pythonhosted.org/packages/3f/92/42d47310bf9530b9dece9e2d7c6d51cf419af5586ededaf5e66622d160e2/jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a", size = 357763 }, - { url = "https://files.pythonhosted.org/packages/bd/8c/2bb76a9a84474d48fdd133d3445db8a4413da4e87c23879d917e000a9d87/jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e", size = 511031 }, - { url = "https://files.pythonhosted.org/packages/33/4f/9f23d79c0795e0a8e56e7988e8785c2dcda27e0ed37977256d50c77c6a19/jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338", size = 493042 }, - { url = "https://files.pythonhosted.org/packages/df/67/8a4f975aa834b8aecdb6b131422390173928fd47f42f269dcc32034ab432/jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4", size = 195405 }, - { url = "https://files.pythonhosted.org/packages/15/81/296b1e25c43db67848728cdab34ac3eb5c5cbb4955ceb3f51ae60d4a5e3d/jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5", size = 189720 }, + { url = "https://files.pythonhosted.org/packages/f2/f3/8c11e0e87bd5934c414f9b1cfae3cbfd4a938d4669d57cb427e1c4d11a7f/jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b", size = 303381 }, + { url = "https://files.pythonhosted.org/packages/ea/28/4cd3f0bcbf40e946bc6a62a82c951afc386a25673d3d8d5ee461f1559bbe/jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393", size = 311718 }, + { url = "https://files.pythonhosted.org/packages/0d/17/57acab00507e60bd954eaec0837d9d7b119b4117ff49b8a62f2b646f32ed/jiter-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d", size = 335465 }, + { url = "https://files.pythonhosted.org/packages/74/b9/1a3ddd2bc95ae17c815b021521020f40c60b32137730126bada962ef32b4/jiter-0.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66", size = 355570 }, + { url = "https://files.pythonhosted.org/packages/78/69/6d29e2296a934199a7d0dde673ecccf98c9c8db44caf0248b3f2b65483cb/jiter-0.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5", size = 381383 }, + { url = "https://files.pythonhosted.org/packages/22/d7/fbc4c3fb1bf65f9be22a32759b539f88e897aeb13fe84ab0266e4423487a/jiter-0.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3", size = 390454 }, + { url = "https://files.pythonhosted.org/packages/4d/a0/3993cda2e267fe679b45d0bcc2cef0b4504b0aa810659cdae9737d6bace9/jiter-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08", size = 345039 }, + { url = "https://files.pythonhosted.org/packages/b9/ef/69c18562b4c09ce88fab5df1dcaf643f6b1a8b970b65216e7221169b81c4/jiter-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49", size = 376200 }, + { url = "https://files.pythonhosted.org/packages/4d/17/0b5a8de46a6ab4d836f70934036278b49b8530c292b29dde3483326d4555/jiter-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d", size = 511158 }, + { url = "https://files.pythonhosted.org/packages/6c/b2/c401a0a2554b36c9e6d6e4876b43790d75139cf3936f0222e675cbc23451/jiter-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff", size = 503956 }, + { url = "https://files.pythonhosted.org/packages/d4/02/a0291ed7d72c0ac130f172354ee3cf0b2556b69584de391463a8ee534f40/jiter-0.8.2-cp310-cp310-win32.whl", hash = "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43", size = 202846 }, + { url = "https://files.pythonhosted.org/packages/ad/20/8c988831ae4bf437e29f1671e198fc99ba8fe49f2895f23789acad1d1811/jiter-0.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105", size = 204414 }, + { url = "https://files.pythonhosted.org/packages/cb/b0/c1a7caa7f9dc5f1f6cfa08722867790fe2d3645d6e7170ca280e6e52d163/jiter-0.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b", size = 303666 }, + { url = "https://files.pythonhosted.org/packages/f5/97/0468bc9eeae43079aaa5feb9267964e496bf13133d469cfdc135498f8dd0/jiter-0.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15", size = 311934 }, + { url = "https://files.pythonhosted.org/packages/e5/69/64058e18263d9a5f1e10f90c436853616d5f047d997c37c7b2df11b085ec/jiter-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0", size = 335506 }, + { url = "https://files.pythonhosted.org/packages/9d/14/b747f9a77b8c0542141d77ca1e2a7523e854754af2c339ac89a8b66527d6/jiter-0.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f", size = 355849 }, + { url = "https://files.pythonhosted.org/packages/53/e2/98a08161db7cc9d0e39bc385415890928ff09709034982f48eccfca40733/jiter-0.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099", size = 381700 }, + { url = "https://files.pythonhosted.org/packages/7a/38/1674672954d35bce3b1c9af99d5849f9256ac8f5b672e020ac7821581206/jiter-0.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74", size = 389710 }, + { url = "https://files.pythonhosted.org/packages/f8/9b/92f9da9a9e107d019bcf883cd9125fa1690079f323f5a9d5c6986eeec3c0/jiter-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586", size = 345553 }, + { url = "https://files.pythonhosted.org/packages/44/a6/6d030003394e9659cd0d7136bbeabd82e869849ceccddc34d40abbbbb269/jiter-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc", size = 376388 }, + { url = "https://files.pythonhosted.org/packages/ad/8d/87b09e648e4aca5f9af89e3ab3cfb93db2d1e633b2f2931ede8dabd9b19a/jiter-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88", size = 511226 }, + { url = "https://files.pythonhosted.org/packages/77/95/8008ebe4cdc82eac1c97864a8042ca7e383ed67e0ec17bfd03797045c727/jiter-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6", size = 504134 }, + { url = "https://files.pythonhosted.org/packages/26/0d/3056a74de13e8b2562e4d526de6dac2f65d91ace63a8234deb9284a1d24d/jiter-0.8.2-cp311-cp311-win32.whl", hash = "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44", size = 203103 }, + { url = "https://files.pythonhosted.org/packages/4e/1e/7f96b798f356e531ffc0f53dd2f37185fac60fae4d6c612bbbd4639b90aa/jiter-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855", size = 206717 }, + { url = "https://files.pythonhosted.org/packages/a1/17/c8747af8ea4e045f57d6cfd6fc180752cab9bc3de0e8a0c9ca4e8af333b1/jiter-0.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f", size = 302027 }, + { url = "https://files.pythonhosted.org/packages/3c/c1/6da849640cd35a41e91085723b76acc818d4b7d92b0b6e5111736ce1dd10/jiter-0.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44", size = 310326 }, + { url = "https://files.pythonhosted.org/packages/06/99/a2bf660d8ccffee9ad7ed46b4f860d2108a148d0ea36043fd16f4dc37e94/jiter-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f", size = 334242 }, + { url = "https://files.pythonhosted.org/packages/a7/5f/cea1c17864828731f11427b9d1ab7f24764dbd9aaf4648a7f851164d2718/jiter-0.8.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60", size = 356654 }, + { url = "https://files.pythonhosted.org/packages/e9/13/62774b7e5e7f5d5043efe1d0f94ead66e6d0f894ae010adb56b3f788de71/jiter-0.8.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57", size = 379967 }, + { url = "https://files.pythonhosted.org/packages/ec/fb/096b34c553bb0bd3f2289d5013dcad6074948b8d55212aa13a10d44c5326/jiter-0.8.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e", size = 389252 }, + { url = "https://files.pythonhosted.org/packages/17/61/beea645c0bf398ced8b199e377b61eb999d8e46e053bb285c91c3d3eaab0/jiter-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887", size = 345490 }, + { url = "https://files.pythonhosted.org/packages/d5/df/834aa17ad5dcc3cf0118821da0a0cf1589ea7db9832589278553640366bc/jiter-0.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d", size = 376991 }, + { url = "https://files.pythonhosted.org/packages/67/80/87d140399d382fb4ea5b3d56e7ecaa4efdca17cd7411ff904c1517855314/jiter-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152", size = 510822 }, + { url = "https://files.pythonhosted.org/packages/5c/37/3394bb47bac1ad2cb0465601f86828a0518d07828a650722e55268cdb7e6/jiter-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29", size = 503730 }, + { url = "https://files.pythonhosted.org/packages/f9/e2/253fc1fa59103bb4e3aa0665d6ceb1818df1cd7bf3eb492c4dad229b1cd4/jiter-0.8.2-cp312-cp312-win32.whl", hash = "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e", size = 203375 }, + { url = "https://files.pythonhosted.org/packages/41/69/6d4bbe66b3b3b4507e47aa1dd5d075919ad242b4b1115b3f80eecd443687/jiter-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c", size = 204740 }, + { url = "https://files.pythonhosted.org/packages/6c/b0/bfa1f6f2c956b948802ef5a021281978bf53b7a6ca54bb126fd88a5d014e/jiter-0.8.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84", size = 301190 }, + { url = "https://files.pythonhosted.org/packages/a4/8f/396ddb4e292b5ea57e45ade5dc48229556b9044bad29a3b4b2dddeaedd52/jiter-0.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4", size = 309334 }, + { url = "https://files.pythonhosted.org/packages/7f/68/805978f2f446fa6362ba0cc2e4489b945695940656edd844e110a61c98f8/jiter-0.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587", size = 333918 }, + { url = "https://files.pythonhosted.org/packages/b3/99/0f71f7be667c33403fa9706e5b50583ae5106d96fab997fa7e2f38ee8347/jiter-0.8.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c", size = 356057 }, + { url = "https://files.pythonhosted.org/packages/8d/50/a82796e421a22b699ee4d2ce527e5bcb29471a2351cbdc931819d941a167/jiter-0.8.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18", size = 379790 }, + { url = "https://files.pythonhosted.org/packages/3c/31/10fb012b00f6d83342ca9e2c9618869ab449f1aa78c8f1b2193a6b49647c/jiter-0.8.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6", size = 388285 }, + { url = "https://files.pythonhosted.org/packages/c8/81/f15ebf7de57be488aa22944bf4274962aca8092e4f7817f92ffa50d3ee46/jiter-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef", size = 344764 }, + { url = "https://files.pythonhosted.org/packages/b3/e8/0cae550d72b48829ba653eb348cdc25f3f06f8a62363723702ec18e7be9c/jiter-0.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1", size = 376620 }, + { url = "https://files.pythonhosted.org/packages/b8/50/e5478ff9d82534a944c03b63bc217c5f37019d4a34d288db0f079b13c10b/jiter-0.8.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9", size = 510402 }, + { url = "https://files.pythonhosted.org/packages/8e/1e/3de48bbebbc8f7025bd454cedc8c62378c0e32dd483dece5f4a814a5cb55/jiter-0.8.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05", size = 503018 }, + { url = "https://files.pythonhosted.org/packages/d5/cd/d5a5501d72a11fe3e5fd65c78c884e5164eefe80077680533919be22d3a3/jiter-0.8.2-cp313-cp313-win32.whl", hash = "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a", size = 203190 }, + { url = "https://files.pythonhosted.org/packages/51/bf/e5ca301245ba951447e3ad677a02a64a8845b185de2603dabd83e1e4b9c6/jiter-0.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865", size = 203551 }, + { url = "https://files.pythonhosted.org/packages/2f/3c/71a491952c37b87d127790dd7a0b1ebea0514c6b6ad30085b16bbe00aee6/jiter-0.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca", size = 308347 }, + { url = "https://files.pythonhosted.org/packages/a0/4c/c02408042e6a7605ec063daed138e07b982fdb98467deaaf1c90950cf2c6/jiter-0.8.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0", size = 342875 }, + { url = "https://files.pythonhosted.org/packages/91/61/c80ef80ed8a0a21158e289ef70dac01e351d929a1c30cb0f49be60772547/jiter-0.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566", size = 202374 }, ] [[package]] @@ -1985,6 +2114,22 @@ version = "1.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } wheels = [ + { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440 }, + { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758 }, + { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311 }, + { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109 }, + { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814 }, + { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881 }, + { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972 }, + { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787 }, + { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212 }, + { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399 }, + { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688 }, + { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493 }, + { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191 }, + { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644 }, + { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877 }, + { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347 }, { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, @@ -2033,30 +2178,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, + { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491 }, + { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648 }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257 }, + { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906 }, + { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951 }, + { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715 }, ] [[package]] name = "lancedb" -version = "0.15.0" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "cachetools" }, { name = "deprecation" }, + { name = "nest-asyncio" }, { name = "overrides" }, { name = "packaging" }, { name = "pydantic" }, { name = "pylance" }, - { name = "requests" }, { name = "tqdm" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/b3/c0da4a07137781b35f70d8630baf656a30e5b05be6cbe5dacfe686c69229/lancedb-0.15.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:3eacc9c6766594874a7d54e822550c7991d64b14571251f1e4b43985cc4f3cdb", size = 23926022 }, - { url = "https://files.pythonhosted.org/packages/95/cc/8333fd74e82a4a088b522e76dc68f225054b3527d885e01c8ef1806dab3f/lancedb-0.15.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:48c28571f79805e11a3bca09486fd1c8d6c3f7762f7692cca1c5e0cdea6bfa20", size = 22412308 }, - { url = "https://files.pythonhosted.org/packages/85/ae/588f4587f2096e1de27d255c0e5557326e71c8e26bc19e516bb8f592785d/lancedb-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e349a1671943b75a536d2589b5a12f685c129149b0cad266e12555f9501f8ccd", size = 27653096 }, - { url = "https://files.pythonhosted.org/packages/76/8d/fb7148ab42227aff5fc72d5f278dadf1c71bda923a44896aa8c9e2e79b48/lancedb-0.15.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c567866b08222457e1aca51df9abeb871aad8fed0db58c004365629c05f8ecbb", size = 25701158 }, - { url = "https://files.pythonhosted.org/packages/e3/a8/67a8dc6fd7a57bde6b9f75b10368805db46b109adc7d634d7ce45bc655f3/lancedb-0.15.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:223cd77fa84a1317301ad4771de58ac5685d58cee03f0a20ba4bc95517b5c79f", size = 27123388 }, - { url = "https://files.pythonhosted.org/packages/70/cc/beb57ff12a5f8f37f8d469fa2399ac76b2909c76f38e3d61cd07f51c288d/lancedb-0.15.0-cp38-abi3-win_amd64.whl", hash = "sha256:66d251f22709c72f819aace9e665127f1040845d88b25c1f088c4beb36087f7e", size = 24838652 }, + { url = "https://files.pythonhosted.org/packages/73/a6/a9c5077e8f0391b637c5a6e7a2adfc43418e1949a931149bd14f10c87871/lancedb-0.16.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:3521c53a116bfbb054318a35b2297cd01d57e1db500de4ba3cc7fad6c4add98c", size = 24138660 }, + { url = "https://files.pythonhosted.org/packages/b9/25/25f8494e164ec83212002018053271865ae06ca4cc5976e3987515fdeb2a/lancedb-0.16.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e0968e6b7a3611437dc4c4f468aafb4e665aa315ee0b201e589ea1fa433b5b6", size = 22616630 }, + { url = "https://files.pythonhosted.org/packages/ac/8d/e3afab600d9437db4d4f8eb1dac9b493778ec0d37e374313b39fa146917e/lancedb-0.16.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e466b2c734f8dde5d037b082cff1ccd9a913e7b87ecc73efa7d921ed1aa6ded", size = 27874448 }, + { url = "https://files.pythonhosted.org/packages/f6/0d/39692b1e43e02860b0fc827b5cf2d61b377de8096adc44f0ce2b4cd42d97/lancedb-0.16.0-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:84980ccd4a170a5a07f83c85f90841e6995a05dc92cadedcb806401bc60f832b", size = 25920255 }, + { url = "https://files.pythonhosted.org/packages/d7/9e/e027daeec233623fa1a0bee9479f40ef819f9af0dd873ed93062f78b72e0/lancedb-0.16.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7135cd4733c3f7bcff7bc5f017bb79dda8e23dc3530476e0b91a4cb3ffef9e2e", size = 27354357 }, + { url = "https://files.pythonhosted.org/packages/fc/88/65a3540a0e66f5a1636b0fea715c475e733ca4394452c1095dadfcfe7708/lancedb-0.16.0-cp38-abi3-win_amd64.whl", hash = "sha256:357a4cd2d7c5bf9677f84f7aa408d6c98c9d9012b3110979b126d40d30530e12", size = 25073405 }, ] [[package]] @@ -2065,6 +2214,7 @@ version = "0.3.11" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, { name = "langchain-core" }, { name = "langchain-text-splitters" }, { name = "langsmith" }, @@ -2193,29 +2343,29 @@ wheels = [ [[package]] name = "litellm" -version = "1.49.1" +version = "1.57.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, { name = "click" }, + { name = "httpx" }, { name = "importlib-metadata" }, { name = "jinja2" }, { name = "jsonschema" }, { name = "openai" }, { name = "pydantic" }, { name = "python-dotenv" }, - { name = "requests" }, { name = "tiktoken" }, { name = "tokenizers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/84/edd715fd552c72859fe768412685952993b6238592040d5361850108ad4a/litellm-1.49.1.tar.gz", hash = "sha256:f51450ad823c8bdf057017009ae8bcce1a2810690b2f0d9dcdaff04ddc68209a", size = 6068806 } +sdist = { url = "https://files.pythonhosted.org/packages/d4/1c/e5669149f8f1d57103e97c28a8f06fc9e111370d4b6d0b4dfc76f4a11fe4/litellm-1.57.2.tar.gz", hash = "sha256:0a07c4e288f4bd9033335d5606d7da497f1193d51cf262b96812f40b8842a842", size = 6299758 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/69/4fbc6734c7f7fb497b62c27b4ffa747a72dbca6a15b5c18bf570e3808007/litellm-1.49.1-py3-none-any.whl", hash = "sha256:2ba6689fe4ea3b0d69f56f2843caff6422497489e6252943b13ef1463f016728", size = 6282095 }, + { url = "https://files.pythonhosted.org/packages/9a/46/d96a6902c3529f96f8ea1fc2ba08fd48b50652141ddce9bf8faf0acdbbe6/litellm-1.57.2-py3-none-any.whl", hash = "sha256:b572c0d3d3c33ff3a4d18928ac6f051d10ac159814017a817d88ec7af9a8600c", size = 6582805 }, ] [[package]] name = "llama-index-core" -version = "0.11.23" +version = "0.12.10.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -2241,9 +2391,9 @@ dependencies = [ { name = "typing-inspect" }, { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8a/4f/496d43c467ca2497f9c7632ac8ebd15049beb05115e9f0546de3e19ddddd/llama_index_core-0.11.23.tar.gz", hash = "sha256:e150859696a0eae169fe19323f46e9a31af2c12c3182012e4d0353ea8eb06d24", size = 1325843 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/0b/945ed217995e1ab685eba9a35b530d50b9f5853af88446acaff0ce4f89bb/llama_index_core-0.12.10.post1.tar.gz", hash = "sha256:af27bea4d1494ba84983a649976e60e3de677a73946aa45ed12ce27e3a623ddf", size = 1330881 } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/67/96ed984ebf472fe085bd5d2847c4f284cfe416805c1d6e705682a559c9fc/llama_index_core-0.11.23-py3-none-any.whl", hash = "sha256:25a0cb4a055bfb348655ca4acd1b475529bd8537a7b81874ef14ed13f56e06c1", size = 1576555 }, + { url = "https://files.pythonhosted.org/packages/3f/04/e2bad3ebef965dd0650544cdd869befe63fd02b275a0867f04e15964a0a9/llama_index_core-0.12.10.post1-py3-none-any.whl", hash = "sha256:897e8cd4efeff6842580b043bdf4008ac60f693df1de2bfd975307a4845707c2", size = 1583668 }, ] [[package]] @@ -2252,6 +2402,23 @@ version = "5.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, + { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, + { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, + { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, + { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, + { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, + { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, + { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, + { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, + { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, + { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, + { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, + { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, + { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, + { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, + { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, + { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, @@ -2303,6 +2470,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, + { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, + { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, + { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, + { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, + { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, + { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, ] [[package]] @@ -2353,6 +2526,16 @@ version = "3.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, @@ -2424,6 +2607,12 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278", size = 36686418 } wheels = [ + { url = "https://files.pythonhosted.org/packages/09/ec/3cdff7b5239adaaacefcc4f77c316dfbbdf853c4ed2beec467e0fec31b9f/matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6", size = 8160551 }, + { url = "https://files.pythonhosted.org/packages/41/f2/b518f2c7f29895c9b167bf79f8529c63383ae94eaf49a247a4528e9a148d/matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e", size = 8034853 }, + { url = "https://files.pythonhosted.org/packages/ed/8d/45754b4affdb8f0d1a44e4e2bcd932cdf35b256b60d5eda9f455bb293ed0/matplotlib-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5", size = 8446724 }, + { url = "https://files.pythonhosted.org/packages/09/5a/a113495110ae3e3395c72d82d7bc4802902e46dc797f6b041e572f195c56/matplotlib-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6", size = 8583905 }, + { url = "https://files.pythonhosted.org/packages/12/b1/8b1655b4c9ed4600c817c419f7eaaf70082630efd7556a5b2e77a8a3cdaf/matplotlib-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1", size = 9395223 }, + { url = "https://files.pythonhosted.org/packages/5a/85/b9a54d64585a6b8737a78a61897450403c30f39e0bd3214270bb0b96f002/matplotlib-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3", size = 8025355 }, { url = "https://files.pythonhosted.org/packages/0c/f1/e37f6c84d252867d7ddc418fff70fc661cfd363179263b08e52e8b748e30/matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363", size = 8171677 }, { url = "https://files.pythonhosted.org/packages/c7/8b/92e9da1f28310a1f6572b5c55097b0c0ceb5e27486d85fb73b54f5a9b939/matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997", size = 8044945 }, { url = "https://files.pythonhosted.org/packages/c5/cb/49e83f0fd066937a5bd3bc5c5d63093703f3637b2824df8d856e0558beef/matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef", size = 8458269 }, @@ -2448,6 +2637,9 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/2d/b5949fb2b76e9b47ab05e25a5f5f887c70de20d8b0cbc704a4e2ee71c786/matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e", size = 8610334 }, { url = "https://files.pythonhosted.org/packages/d6/9a/6e3c799d5134d9af44b01c787e1360bee38cf51850506ea2e743a787700b/matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede", size = 9406777 }, { url = "https://files.pythonhosted.org/packages/0e/dd/e6ae97151e5ed648ab2ea48885bc33d39202b640eec7a2910e2c843f7ac0/matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c", size = 8109742 }, + { url = "https://files.pythonhosted.org/packages/32/5f/29def7ce4e815ab939b56280976ee35afffb3bbdb43f332caee74cb8c951/matplotlib-3.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03", size = 8155500 }, + { url = "https://files.pythonhosted.org/packages/de/6d/d570383c9f7ca799d0a54161446f9ce7b17d6c50f2994b653514bcaa108f/matplotlib-3.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea", size = 8032398 }, + { url = "https://files.pythonhosted.org/packages/c9/b4/680aa700d99b48e8c4393fa08e9ab8c49c0555ee6f4c9c0a5e8ea8dfde5d/matplotlib-3.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef", size = 8587361 }, ] [[package]] @@ -2512,8 +2704,26 @@ wheels = [ name = "multidict" version = "6.1.0" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] sdist = { url = "https://files.pythonhosted.org/packages/d6/be/504b89a5e9ca731cd47487e91c469064f8ae5af93b7259758dcfc2b9c848/multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", size = 64002 } wheels = [ + { url = "https://files.pythonhosted.org/packages/29/68/259dee7fd14cf56a17c554125e534f6274c2860159692a414d0b402b9a6d/multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", size = 48628 }, + { url = "https://files.pythonhosted.org/packages/50/79/53ba256069fe5386a4a9e80d4e12857ced9de295baf3e20c68cdda746e04/multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", size = 29327 }, + { url = "https://files.pythonhosted.org/packages/ff/10/71f1379b05b196dae749b5ac062e87273e3f11634f447ebac12a571d90ae/multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", size = 29689 }, + { url = "https://files.pythonhosted.org/packages/71/45/70bac4f87438ded36ad4793793c0095de6572d433d98575a5752629ef549/multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", size = 126639 }, + { url = "https://files.pythonhosted.org/packages/80/cf/17f35b3b9509b4959303c05379c4bfb0d7dd05c3306039fc79cf035bbac0/multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", size = 134315 }, + { url = "https://files.pythonhosted.org/packages/ef/1f/652d70ab5effb33c031510a3503d4d6efc5ec93153562f1ee0acdc895a57/multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", size = 129471 }, + { url = "https://files.pythonhosted.org/packages/a6/64/2dd6c4c681688c0165dea3975a6a4eab4944ea30f35000f8b8af1df3148c/multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", size = 124585 }, + { url = "https://files.pythonhosted.org/packages/87/56/e6ee5459894c7e554b57ba88f7257dc3c3d2d379cb15baaa1e265b8c6165/multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", size = 116957 }, + { url = "https://files.pythonhosted.org/packages/36/9e/616ce5e8d375c24b84f14fc263c7ef1d8d5e8ef529dbc0f1df8ce71bb5b8/multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db", size = 128609 }, + { url = "https://files.pythonhosted.org/packages/8c/4f/4783e48a38495d000f2124020dc96bacc806a4340345211b1ab6175a6cb4/multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", size = 123016 }, + { url = "https://files.pythonhosted.org/packages/3e/b3/4950551ab8fc39862ba5e9907dc821f896aa829b4524b4deefd3e12945ab/multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", size = 133542 }, + { url = "https://files.pythonhosted.org/packages/96/4d/f0ce6ac9914168a2a71df117935bb1f1781916acdecbb43285e225b484b8/multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", size = 130163 }, + { url = "https://files.pythonhosted.org/packages/be/72/17c9f67e7542a49dd252c5ae50248607dfb780bcc03035907dafefb067e3/multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", size = 126832 }, + { url = "https://files.pythonhosted.org/packages/71/9f/72d719e248cbd755c8736c6d14780533a1606ffb3fbb0fbd77da9f0372da/multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", size = 26402 }, + { url = "https://files.pythonhosted.org/packages/04/5a/d88cd5d00a184e1ddffc82aa2e6e915164a6d2641ed3606e766b5d2f275a/multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", size = 28800 }, { url = "https://files.pythonhosted.org/packages/93/13/df3505a46d0cd08428e4c8169a196131d1b0c4b515c3649829258843dde6/multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", size = 48570 }, { url = "https://files.pythonhosted.org/packages/f0/e1/a215908bfae1343cdb72f805366592bdd60487b4232d039c437fe8f5013d/multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", size = 29316 }, { url = "https://files.pythonhosted.org/packages/70/0f/6dc70ddf5d442702ed74f298d69977f904960b82368532c88e854b79f72b/multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", size = 29640 }, @@ -2571,6 +2781,8 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603 } wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/76/6e712a2623d146d314f17598df5de7224c85c0060ef63fd95cc15a25b3fa/multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee", size = 134980 }, + { url = "https://files.pythonhosted.org/packages/0f/ab/1e6e8009e380e22254ff539ebe117861e5bdb3bff1fc977920972237c6c7/multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec", size = 134982 }, { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824 }, { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519 }, { url = "https://files.pythonhosted.org/packages/0a/7d/a988f258104dcd2ccf1ed40fdc97e26c4ac351eeaf81d76e266c52d84e2f/multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e", size = 146741 }, @@ -2584,10 +2796,16 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 } wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/8c/206de95a27722b5b5a8c85ba3100467bd86299d92a4f71c6b9aa448bfa2f/mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", size = 11020731 }, + { url = "https://files.pythonhosted.org/packages/ab/bb/b31695a29eea76b1569fd28b4ab141a1adc9842edde080d1e8e1776862c7/mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", size = 10184276 }, + { url = "https://files.pythonhosted.org/packages/a5/2d/4a23849729bb27934a0e079c9c1aad912167d875c7b070382a408d459651/mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", size = 12587706 }, + { url = "https://files.pythonhosted.org/packages/5c/c3/d318e38ada50255e22e23353a469c791379825240e71b0ad03e76ca07ae6/mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", size = 13105586 }, + { url = "https://files.pythonhosted.org/packages/4a/25/3918bc64952370c3dbdbd8c82c363804678127815febd2925b7273d9482c/mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", size = 9632318 }, { url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 }, { url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 }, { url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 }, @@ -2675,6 +2893,14 @@ version = "1.26.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468 }, + { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411 }, + { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016 }, + { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889 }, + { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746 }, + { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620 }, + { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659 }, + { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905 }, { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, @@ -2713,7 +2939,7 @@ wheels = [ [[package]] name = "openai" -version = "1.52.0" +version = "1.59.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2725,9 +2951,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/12/00/0983e56ca4535394a34f3ce25429ce6710878f2f8d7931973d04364ca922/openai-1.52.0.tar.gz", hash = "sha256:95c65a5f77559641ab8f3e4c3a050804f7b51d278870e2ec1f7444080bfe565a", size = 309426 } +sdist = { url = "https://files.pythonhosted.org/packages/38/db/0e1376bdee3de8c16d91647d47dc47a26d2d6036931c76844e7d3e3fb989/openai-1.59.4.tar.gz", hash = "sha256:b946dc5a2308dc1e03efbda80bf1cd64b6053b536851ad519f57ee44401663d2", size = 344405 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/1e/9dc3ccee95d0e16e54e353d3c355bb7cc506d56a2dbb0a07bc739cc48eac/openai-1.52.0-py3-none-any.whl", hash = "sha256:0c249f20920183b0a2ca4f7dba7b0452df3ecd0fa7985eb1d91ad884bc3ced9c", size = 386947 }, + { url = "https://files.pythonhosted.org/packages/99/01/1eefc235bb79174826b2fa0cad05bc2eab90eae97bf78c765887d7430e46/openai-1.59.4-py3-none-any.whl", hash = "sha256:82113498699998e98104f87c19a890e82df9b01251a0395484360575d3a1d98a", size = 454810 }, ] [[package]] @@ -2839,6 +3065,19 @@ version = "3.10.12" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e0/04/bb9f72987e7f62fb591d6c880c0caaa16238e4e530cbc3bdc84a7372d75f/orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff", size = 5438647 } wheels = [ + { url = "https://files.pythonhosted.org/packages/72/d2/78652b67f86d093dca984ce3fa5bf819ee1462627da83e7d0b784a9a7c45/orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d", size = 248688 }, + { url = "https://files.pythonhosted.org/packages/70/cb/f8b6a52f3bc724edf8a62d8d1d8ee17cf19d6ae1cac89f077f0e7c30f396/orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7", size = 136952 }, + { url = "https://files.pythonhosted.org/packages/a6/43/c55700df9814545bc8c35d87395ec4b9ee473a3c1f5ed72f8d3ad0298ee9/orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e", size = 149089 }, + { url = "https://files.pythonhosted.org/packages/07/da/e7e7d73bd971710b736fbd8330b8830c5fa4fc0ac003b31af61f03b26dfc/orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced", size = 140479 }, + { url = "https://files.pythonhosted.org/packages/08/49/c9dfddba56ff24eecfacf2f01a76cae4d249ac2995b1359bf63a74b1b318/orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56", size = 156564 }, + { url = "https://files.pythonhosted.org/packages/96/df/174d2eff227dc23b4540a0c2efa6ec8fe406c442c4b7f0f556242f026d1f/orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2", size = 131282 }, + { url = "https://files.pythonhosted.org/packages/6a/96/8628c53a52e2a0a1ee861d809092df72aabbd312c71de9ad6d49e2c039ab/orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13", size = 139764 }, + { url = "https://files.pythonhosted.org/packages/38/17/08becb49e59e7bb7b29dc1dad19bc0c48635e627ee27e60eb5b64efcf7b1/orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05", size = 131913 }, + { url = "https://files.pythonhosted.org/packages/2a/05/f32acc2500e3fafee9445eb8b2a6ff19c4641035e6059c6c8d7bdb3abc9e/orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85", size = 415782 }, + { url = "https://files.pythonhosted.org/packages/06/03/6cc740d998d8bb60e75d4b7e228d18964475239ac842cc1865d49d092545/orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885", size = 142383 }, + { url = "https://files.pythonhosted.org/packages/f8/30/39cac82547fe021615376245c558b216d3ae8c99bd6b2274f312e49f1c94/orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2", size = 130661 }, + { url = "https://files.pythonhosted.org/packages/95/29/c6837f4fc1eaa742eaf5abcd767ab6805493f44fe1f72b37c1743706c1d8/orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3", size = 143625 }, + { url = "https://files.pythonhosted.org/packages/f6/62/c6b955f2144421108fa441b5471e1d5f8654a7df9840b261106e04d5d15c/orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509", size = 135075 }, { url = "https://files.pythonhosted.org/packages/d3/48/7c3cd094488f5a3bc58488555244609a8c4d105bc02f2b77e509debf0450/orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74", size = 248687 }, { url = "https://files.pythonhosted.org/packages/ff/90/e55f0e25c7fdd1f82551fe787f85df6f378170caca863c04c810cd8f2730/orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23", size = 136953 }, { url = "https://files.pythonhosted.org/packages/2a/b3/109c020cf7fee747d400de53b43b183ca9d3ebda3906ad0b858eb5479718/orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252", size = 149090 }, @@ -2905,7 +3144,7 @@ wheels = [ [[package]] name = "pandas" -version = "2.0.3" +version = "2.2.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2913,14 +3152,42 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c", size = 5284455 } +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8", size = 11645672 }, - { url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26", size = 10693229 }, - { url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d", size = 11581591 }, - { url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df", size = 12219370 }, - { url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd", size = 9482935 }, - { url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b", size = 10607692 }, + { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 }, + { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 }, + { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 }, + { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 }, + { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 }, + { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 }, + { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 }, + { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, + { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, + { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, + { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, + { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, + { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, + { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, ] [[package]] @@ -2943,6 +3210,15 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b8/fe/27c7438c6ac8b8f8bef3c6e571855602ee784b85d072efddfff0ceb1cd77/pendulum-3.0.0.tar.gz", hash = "sha256:5d034998dea404ec31fae27af6b22cff1708f830a1ed7353be4d1019bb9f584e", size = 84524 } wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/2f/2f4719366d16f1e444b4e400d3de5021bc4b09965f97e45c81e08348cbdf/pendulum-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2cf9e53ef11668e07f73190c805dbdf07a1939c3298b78d5a9203a86775d1bfd", size = 362284 }, + { url = "https://files.pythonhosted.org/packages/30/ff/70a8f47e622e641de15b7ed8a8b66c3aa895fabc182a7d520a0c33ec850e/pendulum-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fb551b9b5e6059377889d2d878d940fd0bbb80ae4810543db18e6f77b02c5ef6", size = 352957 }, + { url = "https://files.pythonhosted.org/packages/f4/cd/4e2fb7d071e81a9b07719203fd1d329febaded59981b8709663341f758f4/pendulum-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c58227ac260d5b01fc1025176d7b31858c9f62595737f350d22124a9a3ad82d", size = 335784 }, + { url = "https://files.pythonhosted.org/packages/0f/e5/9fc684c59b6f3425cf597d9489c24c47dc96d391be9eb8c9a3c543cd7646/pendulum-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60fb6f415fea93a11c52578eaa10594568a6716602be8430b167eb0d730f3332", size = 362215 }, + { url = "https://files.pythonhosted.org/packages/5a/ba/4dbb1ae42775010249ba29d01829353a9b59d9c3caf97df14d548a3b7d4c/pendulum-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b69f6b4dbcb86f2c2fe696ba991e67347bcf87fe601362a1aba6431454b46bde", size = 448632 }, + { url = "https://files.pythonhosted.org/packages/10/a9/0932bd7cd677bee8bdc9cb898448e47ada0f74e41f434f4ff687d03a3ea9/pendulum-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:138afa9c373ee450ede206db5a5e9004fd3011b3c6bbe1e57015395cd076a09f", size = 384881 }, + { url = "https://files.pythonhosted.org/packages/31/a9/8c9887ce8bfb8ab0db068ac2f1fe679b713f728c116bd136301c303893cd/pendulum-3.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:83d9031f39c6da9677164241fd0d37fbfc9dc8ade7043b5d6d62f56e81af8ad2", size = 559554 }, + { url = "https://files.pythonhosted.org/packages/f4/7e/70596b098b97799c78e3fc2f89394decca6f5443cac28c54082daf2d48eb/pendulum-3.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0c2308af4033fa534f089595bcd40a95a39988ce4059ccd3dc6acb9ef14ca44a", size = 558246 }, + { url = "https://files.pythonhosted.org/packages/67/5e/e646afbd1632bfbacdae79289d7d5879efdeeb5f5e58327bc5c698731107/pendulum-3.0.0-cp310-none-win_amd64.whl", hash = "sha256:9a59637cdb8462bdf2dbcb9d389518c0263799189d773ad5c11db6b13064fa79", size = 293456 }, { url = "https://files.pythonhosted.org/packages/7b/f0/d60be6058657bf71281eeaa12bee85e87bac18acf6dbb7b5197bb8416537/pendulum-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3725245c0352c95d6ca297193192020d1b0c0f83d5ee6bb09964edc2b5a2d508", size = 362283 }, { url = "https://files.pythonhosted.org/packages/68/e5/0f9d8351242ddb119a40b41c0cf1d0c74cc243829eea6811f753a8ecf15f/pendulum-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c035f03a3e565ed132927e2c1b691de0dbf4eb53b02a5a3c5a97e1a64e17bec", size = 352957 }, { url = "https://files.pythonhosted.org/packages/30/43/70d0a08e5d6ca434ba139d19ec2a4847b0a3e461fbb82e680a9b6a4237ef/pendulum-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597e66e63cbd68dd6d58ac46cb7a92363d2088d37ccde2dae4332ef23e95cd00", size = 335784 }, @@ -2963,6 +3239,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/97/95a44aa5e1763d3a966551ed0e12f56508d8dfcc60e1f0395909b6a08626/pendulum-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17fe4b2c844bbf5f0ece69cfd959fa02957c61317b2161763950d88fed8e13b9", size = 558240 }, { url = "https://files.pythonhosted.org/packages/9a/91/fcd992eb36b77ab43f2cf44307b72c01a6fbb27f55c1bb2d4af30e9a6cb7/pendulum-3.0.0-cp312-none-win_amd64.whl", hash = "sha256:78f8f4e7efe5066aca24a7a57511b9c2119f5c2b5eb81c46ff9222ce11e0a7a5", size = 293456 }, { url = "https://files.pythonhosted.org/packages/3b/60/ba8aa296ca6d76603d58146b4a222cd99e7da33831158b8c00240a896a56/pendulum-3.0.0-cp312-none-win_arm64.whl", hash = "sha256:28f49d8d1e32aae9c284a90b6bb3873eee15ec6e1d9042edd611b22a94ac462f", size = 288054 }, + { url = "https://files.pythonhosted.org/packages/0f/7f/24d8c167937d663a9cf6d5fc5e87a87bfa320c3f002d4fbbc7bd5ff3b6f8/pendulum-3.0.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b1f74d1e6ffe5d01d6023870e2ce5c2191486928823196f8575dcc786e107b1", size = 362388 }, + { url = "https://files.pythonhosted.org/packages/55/e1/33775ee68f8bbb0da967dfd818706ee69e0a054f663ee6111d5c7639f67a/pendulum-3.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:729e9f93756a2cdfa77d0fc82068346e9731c7e884097160603872686e570f07", size = 353062 }, + { url = "https://files.pythonhosted.org/packages/3e/1b/c3e399148c0d69c2c84c2eda45cd3580990b13f36d0c96516591bf4def56/pendulum-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e586acc0b450cd21cbf0db6bae386237011b75260a3adceddc4be15334689a9a", size = 335871 }, + { url = "https://files.pythonhosted.org/packages/32/6b/23dde8bd3fb78f693b81bd8fc67769b2a461918d51ed6ddf486a1a97e199/pendulum-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22e7944ffc1f0099a79ff468ee9630c73f8c7835cd76fdb57ef7320e6a409df4", size = 384859 }, + { url = "https://files.pythonhosted.org/packages/1d/1b/a3e0387f586d6121a15e6d02f7ae8cc3cd1ebb136fd243c1c191136ed518/pendulum-3.0.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fa30af36bd8e50686846bdace37cf6707bdd044e5cb6e1109acbad3277232e04", size = 559441 }, + { url = "https://files.pythonhosted.org/packages/d7/23/91dea81265d5d11af0cd5053ca76730cc2c5ac14085c9a923d448e74c67f/pendulum-3.0.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:440215347b11914ae707981b9a57ab9c7b6983ab0babde07063c6ee75c0dc6e7", size = 558189 }, + { url = "https://files.pythonhosted.org/packages/7a/8a/166625d30f927e800e99f3f6556d8b3f4ad952c62d6a774844d73542b84b/pendulum-3.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:314c4038dc5e6a52991570f50edb2f08c339debdf8cea68ac355b32c4174e820", size = 293657 }, ] [[package]] @@ -2983,6 +3266,17 @@ version = "11.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } wheels = [ + { url = "https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", size = 3154708 }, + { url = "https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", size = 2979223 }, + { url = "https://files.pythonhosted.org/packages/90/83/e2077b0192ca8a9ef794dbb74700c7e48384706467067976c2a95a0f40a1/pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", size = 4183167 }, + { url = "https://files.pythonhosted.org/packages/0e/74/467af0146970a98349cdf39e9b79a6cc8a2e7558f2c01c28a7b6b85c5bda/pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", size = 4283912 }, + { url = "https://files.pythonhosted.org/packages/85/b1/d95d4f7ca3a6c1ae120959605875a31a3c209c4e50f0029dc1a87566cf46/pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", size = 4195815 }, + { url = "https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", size = 4366117 }, + { url = "https://files.pythonhosted.org/packages/ba/3c/443e7ef01f597497268899e1cca95c0de947c9bbf77a8f18b3c126681e5d/pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", size = 4278607 }, + { url = "https://files.pythonhosted.org/packages/26/95/1495304448b0081e60c0c5d63f928ef48bb290acee7385804426fa395a21/pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", size = 4410685 }, + { url = "https://files.pythonhosted.org/packages/45/da/861e1df971ef0de9870720cb309ca4d553b26a9483ec9be3a7bf1de4a095/pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", size = 2249185 }, + { url = "https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", size = 2566726 }, + { url = "https://files.pythonhosted.org/packages/77/e4/6e84eada35cbcc646fc1870f72ccfd4afacb0fae0c37ffbffe7f5dc24bf1/pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", size = 2254585 }, { url = "https://files.pythonhosted.org/packages/f0/eb/f7e21b113dd48a9c97d364e0915b3988c6a0b6207652f5a92372871b7aa4/pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", size = 3154705 }, { url = "https://files.pythonhosted.org/packages/25/b3/2b54a1d541accebe6bd8b1358b34ceb2c509f51cb7dcda8687362490da5b/pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", size = 2979222 }, { url = "https://files.pythonhosted.org/packages/20/12/1a41eddad8265c5c19dda8fb6c269ce15ee25e0b9f8f26286e6202df6693/pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", size = 4190220 }, @@ -3024,6 +3318,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, + { url = "https://files.pythonhosted.org/packages/36/57/42a4dd825eab762ba9e690d696d894ba366e06791936056e26e099398cda/pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", size = 3119239 }, + { url = "https://files.pythonhosted.org/packages/98/f7/25f9f9e368226a1d6cf3507081a1a7944eddd3ca7821023377043f5a83c8/pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", size = 2950803 }, + { url = "https://files.pythonhosted.org/packages/59/01/98ead48a6c2e31e6185d4c16c978a67fe3ccb5da5c2ff2ba8475379bb693/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", size = 3281098 }, + { url = "https://files.pythonhosted.org/packages/51/c0/570255b2866a0e4d500a14f950803a2ec273bac7badc43320120b9262450/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", size = 3323665 }, + { url = "https://files.pythonhosted.org/packages/0e/75/689b4ec0483c42bfc7d1aacd32ade7a226db4f4fac57c6fdcdf90c0731e3/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", size = 3310533 }, + { url = "https://files.pythonhosted.org/packages/3d/30/38bd6149cf53da1db4bad304c543ade775d225961c4310f30425995cb9ec/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", size = 3414886 }, + { url = "https://files.pythonhosted.org/packages/ec/3d/c32a51d848401bd94cabb8767a39621496491ee7cd5199856b77da9b18ad/pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", size = 2567508 }, ] [[package]] @@ -3058,7 +3359,7 @@ name = "portalocker" version = "2.10.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "pywin32", marker = "platform_system == 'Windows'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891 } wheels = [ @@ -3103,6 +3404,22 @@ version = "0.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/c8/2a13f78d82211490855b2fb303b6721348d0787fdd9a12ac46d99d3acde1/propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64", size = 41735 } wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a5/0ea64c9426959ef145a938e38c832fc551843481d356713ececa9a8a64e8/propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6", size = 79296 }, + { url = "https://files.pythonhosted.org/packages/76/5a/916db1aba735f55e5eca4733eea4d1973845cf77dfe67c2381a2ca3ce52d/propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2", size = 45622 }, + { url = "https://files.pythonhosted.org/packages/2d/62/685d3cf268b8401ec12b250b925b21d152b9d193b7bffa5fdc4815c392c2/propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea", size = 45133 }, + { url = "https://files.pythonhosted.org/packages/4d/3d/31c9c29ee7192defc05aa4d01624fd85a41cf98e5922aaed206017329944/propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212", size = 204809 }, + { url = "https://files.pythonhosted.org/packages/10/a1/e4050776f4797fc86140ac9a480d5dc069fbfa9d499fe5c5d2fa1ae71f07/propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3", size = 219109 }, + { url = "https://files.pythonhosted.org/packages/c9/c0/e7ae0df76343d5e107d81e59acc085cea5fd36a48aa53ef09add7503e888/propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d", size = 217368 }, + { url = "https://files.pythonhosted.org/packages/fc/e1/e0a2ed6394b5772508868a977d3238f4afb2eebaf9976f0b44a8d347ad63/propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634", size = 205124 }, + { url = "https://files.pythonhosted.org/packages/50/c1/e388c232d15ca10f233c778bbdc1034ba53ede14c207a72008de45b2db2e/propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2", size = 195463 }, + { url = "https://files.pythonhosted.org/packages/0a/fd/71b349b9def426cc73813dbd0f33e266de77305e337c8c12bfb0a2a82bfb/propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958", size = 198358 }, + { url = "https://files.pythonhosted.org/packages/02/f2/d7c497cd148ebfc5b0ae32808e6c1af5922215fe38c7a06e4e722fe937c8/propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c", size = 195560 }, + { url = "https://files.pythonhosted.org/packages/bb/57/f37041bbe5e0dfed80a3f6be2612a3a75b9cfe2652abf2c99bef3455bbad/propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583", size = 196895 }, + { url = "https://files.pythonhosted.org/packages/83/36/ae3cc3e4f310bff2f064e3d2ed5558935cc7778d6f827dce74dcfa125304/propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf", size = 207124 }, + { url = "https://files.pythonhosted.org/packages/8c/c4/811b9f311f10ce9d31a32ff14ce58500458443627e4df4ae9c264defba7f/propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034", size = 210442 }, + { url = "https://files.pythonhosted.org/packages/18/dd/a1670d483a61ecac0d7fc4305d91caaac7a8fc1b200ea3965a01cf03bced/propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b", size = 203219 }, + { url = "https://files.pythonhosted.org/packages/f9/2d/30ced5afde41b099b2dc0c6573b66b45d16d73090e85655f1a30c5a24e07/propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4", size = 40313 }, + { url = "https://files.pythonhosted.org/packages/23/84/bd9b207ac80da237af77aa6e153b08ffa83264b1c7882495984fcbfcf85c/propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba", size = 44428 }, { url = "https://files.pythonhosted.org/packages/bc/0f/2913b6791ebefb2b25b4efd4bb2299c985e09786b9f5b19184a88e5778dd/propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16", size = 79297 }, { url = "https://files.pythonhosted.org/packages/cf/73/af2053aeccd40b05d6e19058419ac77674daecdd32478088b79375b9ab54/propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717", size = 45611 }, { url = "https://files.pythonhosted.org/packages/3c/09/8386115ba7775ea3b9537730e8cf718d83bbf95bffe30757ccf37ec4e5da/propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3", size = 45146 }, @@ -3189,6 +3506,8 @@ version = "2.9.10" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/62/51/2007ea29e605957a17ac6357115d0c1a1b60c8c984951c19419b3474cdfd/psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11", size = 385672 } wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/a9/146b6bdc0d33539a359f5e134ee6dda9173fb8121c5b96af33fa299e50c4/psycopg2-2.9.10-cp310-cp310-win32.whl", hash = "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716", size = 1024527 }, + { url = "https://files.pythonhosted.org/packages/47/50/c509e56f725fd2572b59b69bd964edaf064deebf1c896b2452f6b46fdfb3/psycopg2-2.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a", size = 1163735 }, { url = "https://files.pythonhosted.org/packages/20/a2/c51ca3e667c34e7852157b665e3d49418e68182081060231d514dd823225/psycopg2-2.9.10-cp311-cp311-win32.whl", hash = "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2", size = 1024538 }, { url = "https://files.pythonhosted.org/packages/33/39/5a9a229bb5414abeb86e33b8fc8143ab0aecce5a7f698a53e31367d30caa/psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4", size = 1163736 }, { url = "https://files.pythonhosted.org/packages/3d/16/4623fad6076448df21c1a870c93a9774ad8a7b4dd1660223b59082dd8fec/psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067", size = 1025113 }, @@ -3219,6 +3538,13 @@ version = "18.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7f/7b/640785a9062bb00314caa8a387abce547d2a420cf09bd6c715fe659ccffb/pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73", size = 1118671 } wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/bb/8d4a1573f66e0684f190dd2b55fd0b97a7214de8882d58a3867e777bf640/pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c", size = 29531620 }, + { url = "https://files.pythonhosted.org/packages/30/90/893acfad917533b624a97b9e498c0e8393908508a0a72d624fe935e632bf/pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4", size = 30836521 }, + { url = "https://files.pythonhosted.org/packages/a3/2a/526545a7464b5fb2fa6e2c4bad16ca90e59e1843025c534fd907b7f73e5a/pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b", size = 39213905 }, + { url = "https://files.pythonhosted.org/packages/8a/77/4b3fab91a30e19e233e738d0c5eca5a8f6dd05758bc349a2ca262c65de79/pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71", size = 40128881 }, + { url = "https://files.pythonhosted.org/packages/aa/e2/a88e16c5e45e562449c52305bd3bc2f9d704295322d3434656e7ccac1444/pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470", size = 38627517 }, + { url = "https://files.pythonhosted.org/packages/6d/84/8037c20005ccc7b869726465be0957bd9c29cfc88612962030f08292ad06/pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56", size = 40060187 }, + { url = "https://files.pythonhosted.org/packages/2a/38/d6435c723ff73df8ae74626ea778262fbcc2b9b0d1a4f3db915b61711b05/pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812", size = 25118314 }, { url = "https://files.pythonhosted.org/packages/9e/4d/a4988e7d82f4fbc797715db4185939a658eeffb07a25bab7262bed1ea076/pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854", size = 29554860 }, { url = "https://files.pythonhosted.org/packages/59/03/3a42c5c1e4bd4c900ab62aa1ff6b472bdb159ba8f1c3e5deadab7222244f/pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c", size = 30867076 }, { url = "https://files.pythonhosted.org/packages/75/7e/332055ac913373e89256dce9d14b7708f55f7bd5be631456c897f0237738/pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21", size = 39212135 }, @@ -3280,6 +3606,18 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/12/e3/0d5ad91211dba310f7ded335f4dad871172b9cc9ce204f5a56d76ccd6247/pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4", size = 388371 } wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/9d/f30f080f745682e762512f3eef1f6e392c7d74a102e6e96de8a013a5db84/pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3", size = 1837257 }, + { url = "https://files.pythonhosted.org/packages/f2/89/77e7aebdd4a235497ac1e07f0a99e9f40e47f6e0f6783fe30500df08fc42/pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6", size = 1776715 }, + { url = "https://files.pythonhosted.org/packages/18/50/5a4e9120b395108c2a0441a425356c0d26a655d7c617288bec1c28b854ac/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a", size = 1789023 }, + { url = "https://files.pythonhosted.org/packages/c7/e5/f19e13ba86b968d024b56aa53f40b24828652ac026e5addd0ae49eeada02/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3", size = 1775598 }, + { url = "https://files.pythonhosted.org/packages/c9/c7/f3c29bed28bd022c783baba5bf9946c4f694cb837a687e62f453c81eb5c6/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1", size = 1977691 }, + { url = "https://files.pythonhosted.org/packages/41/3e/f62c2a05c554fff34570f6788617e9670c83ed7bc07d62a55cccd1bc0be6/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953", size = 2693214 }, + { url = "https://files.pythonhosted.org/packages/ae/49/8a6fe79d35e2f3bea566d8ea0e4e6f436d4f749d7838c8e8c4c5148ae706/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98", size = 2061047 }, + { url = "https://files.pythonhosted.org/packages/51/c6/585355c7c8561e11197dbf6333c57dd32f9f62165d48589b57ced2373d97/pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a", size = 1895106 }, + { url = "https://files.pythonhosted.org/packages/ce/23/829f6b87de0775919e82f8addef8b487ace1c77bb4cb754b217f7b1301b6/pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a", size = 1968506 }, + { url = "https://files.pythonhosted.org/packages/ca/2f/f8ca8f0c40b3ee0a4d8730a51851adb14c5eda986ec09f8d754b2fba784e/pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840", size = 2110217 }, + { url = "https://files.pythonhosted.org/packages/bb/a0/1876656c7b17eb69cc683452cce6bb890dd722222a71b3de57ddb512f561/pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250", size = 1709669 }, + { url = "https://files.pythonhosted.org/packages/be/4a/576524eefa9b301c088c4818dc50ff1c51a88fe29efd87ab75748ae15fd7/pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c", size = 1902386 }, { url = "https://files.pythonhosted.org/packages/61/db/f6a724db226d990a329910727cfac43539ff6969edc217286dd05cda3ef6/pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312", size = 1834507 }, { url = "https://files.pythonhosted.org/packages/9b/83/6f2bfe75209d557ae1c3550c1252684fc1827b8b12fbed84c3b4439e135d/pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88", size = 1773527 }, { url = "https://files.pythonhosted.org/packages/93/ef/513ea76d7ca81f2354bb9c8d7839fc1157673e652613f7e1aff17d8ce05d/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc", size = 1787879 }, @@ -3316,6 +3654,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/1f/f378631574ead46d636b9a04a80ff878b9365d4b361b1905ef1667d4182a/pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0", size = 2118920 }, { url = "https://files.pythonhosted.org/packages/7a/ea/e4943f17df7a3031d709481fe4363d4624ae875a6409aec34c28c9e6cf59/pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e", size = 1717397 }, { url = "https://files.pythonhosted.org/packages/13/63/b95781763e8d84207025071c0cec16d921c0163c7a9033ae4b9a0e020dc7/pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20", size = 1898013 }, + { url = "https://files.pythonhosted.org/packages/73/73/0c7265903f66cce39ed7ca939684fba344210cefc91ccc999cfd5b113fd3/pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906", size = 1828190 }, + { url = "https://files.pythonhosted.org/packages/27/55/60b8b0e58b49ee3ed36a18562dd7c6bc06a551c390e387af5872a238f2ec/pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94", size = 1715252 }, + { url = "https://files.pythonhosted.org/packages/28/3d/d66314bad6bb777a36559195a007b31e916bd9e2c198f7bb8f4ccdceb4fa/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f", size = 1782641 }, + { url = "https://files.pythonhosted.org/packages/9e/f5/f178f4354d0d6c1431a8f9ede71f3c4269ac4dc55d314fdb7555814276dc/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482", size = 1928788 }, + { url = "https://files.pythonhosted.org/packages/9c/51/1f5e27bb194df79e30b593b608c66e881ed481241e2b9ed5bdf86d165480/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6", size = 1886116 }, + { url = "https://files.pythonhosted.org/packages/ac/76/450d9258c58dc7c70b9e3aadf6bebe23ddd99e459c365e2adbde80e238da/pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc", size = 1960125 }, + { url = "https://files.pythonhosted.org/packages/dd/9e/0309a7a4bea51771729515e413b3987be0789837de99087f7415e0db1f9b/pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99", size = 2100407 }, + { url = "https://files.pythonhosted.org/packages/af/93/06d44e08277b3b818b75bd5f25e879d7693e4b7dd3505fde89916fcc9ca2/pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6", size = 1914966 }, ] [[package]] @@ -3356,19 +3702,19 @@ crypto = [ [[package]] name = "pylance" -version = "0.19.1" +version = "0.19.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "pyarrow" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/fb/5e269c0c310646099fea4cc47872e21172d3d917fe68a036bf2f3e42b374/pylance-0.19.1-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:a254d09690a5e09cadc5fecc7b43b2bfc20b477e0f0ba31497e1d6abb36b524a", size = 28569476 }, - { url = "https://files.pythonhosted.org/packages/65/47/390622a3f7b2873966c0e197979afb72eb3cb0352342bdff6581c8600fa4/pylance-0.19.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9859c372b2d7fe443b6218f62e9d77caf94961cac73b274c85b724f20dd6b690", size = 26540391 }, - { url = "https://files.pythonhosted.org/packages/47/8a/2a8a07af0983577b8fc68eeb85fbb3ea0e774d84125a6395d748fde1b580/pylance-0.19.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8315152f57329e7668ff5c82c252591ea0e3d2aed702dd19a42d645945e7a07e", size = 30423804 }, - { url = "https://files.pythonhosted.org/packages/ee/33/eee18d4d8996e0db79c71231b653b5c9ae86a9002e3e3d708e1461717f5c/pylance-0.19.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:7c2e0e00b40214edae576075dbfa432cadaf5ba21354b0c46f307daf4e77403f", size = 28979799 }, - { url = "https://files.pythonhosted.org/packages/3b/af/3bf6d0c9dc52e2ae048c575249527f3c2cc8a4df85c94905900c719b42e0/pylance-0.19.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e26ce273840912c45dd2b8f6f8fb9082c1c788d696e11b78ddad3949e3892d50", size = 30359171 }, - { url = "https://files.pythonhosted.org/packages/d9/73/0641124631a4f5f03d988c4a8000046d4c182340719ba4cf228cb45c5dca/pylance-0.19.1-cp39-abi3-win_amd64.whl", hash = "sha256:b341e547c995b5d6b32eb63e1e015d31b608de49a9ad03f8981453f4c667e8e1", size = 28387696 }, + { url = "https://files.pythonhosted.org/packages/11/47/5eb617889ad15fc07bceb419fdc9e42c67de878f2d081e30637af9e5e735/pylance-0.19.2-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:659b2ba45b7c905a2873bb36e9b4a6ec4634690723d45af0b469a502acacf5eb", size = 28776069 }, + { url = "https://files.pythonhosted.org/packages/8b/f5/6c2f04869747cb382f0f561362d354e132c2adb9b299aa28f28bb1847209/pylance-0.19.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:6a15b8b09e015feb11307ff63ef0742f9e120100e17476b1091d3db543c19bdf", size = 26733988 }, + { url = "https://files.pythonhosted.org/packages/34/35/722388309957c2dbab64a6901152c794dce01978e859a35989f95678af81/pylance-0.19.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1732ff03acceacc6793f6b209357a757ce3cfd5a94369a81b3d15e8e425f9a", size = 30626161 }, + { url = "https://files.pythonhosted.org/packages/e9/d2/38d523007824ef975fca496022e2583df833226f128399d4daf0a046896d/pylance-0.19.2-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c3be7883ae860c39186f41798cd752b93298450cc09488108f2aa738aa352f0e", size = 29172165 }, + { url = "https://files.pythonhosted.org/packages/90/48/f41b76e478651afee95f3a558db1d8ea9b85e1b31511b4340ea6224491fe/pylance-0.19.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:48a618dfc493932b49a8c1f50ad031e39c4d505d30c968d6467da1a03720a523", size = 30527798 }, + { url = "https://files.pythonhosted.org/packages/dd/24/126b0e37b30bf567ed31151f8adf009ee5d8eb68c613bc33e5f523f0d710/pylance-0.19.2-cp39-abi3-win_amd64.whl", hash = "sha256:70d47d94521fc973460c8d765c3960db79a1f676aab658434693ab3e5a7112c1", size = 28575346 }, ] [[package]] @@ -3382,6 +3728,7 @@ dependencies = [ { name = "isort" }, { name = "mccabe" }, { name = "platformdirs" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "tomlkit" }, ] sdist = { url = "https://files.pythonhosted.org/packages/81/d8/4471b2cb4ad18b4af717918c468209bd2bd5a02c52f60be5ee8a71b5af2c/pylint-3.3.2.tar.gz", hash = "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01", size = 1516485 } @@ -3429,6 +3776,9 @@ wheels = [ name = "pypdf" version = "4.3.1" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] sdist = { url = "https://files.pythonhosted.org/packages/f0/65/2ed7c9e1d31d860f096061b3dd2d665f501e09faaa0409a3f0d719d2a16d/pypdf-4.3.1.tar.gz", hash = "sha256:b2f37fe9a3030aa97ca86067a56ba3f9d3565f9a791b305c7355d8392c30d91b", size = 293266 } wheels = [ { url = "https://files.pythonhosted.org/packages/3c/60/eccdd92dd4af3e4bea6d6a342f7588c618a15b9bec4b968af581e498bcc4/pypdf-4.3.1-py3-none-any.whl", hash = "sha256:64b31da97eda0771ef22edb1bfecd5deee4b72c3d1736b7df2689805076d6418", size = 295825 }, @@ -3440,9 +3790,11 @@ version = "7.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116 } wheels = [ @@ -3590,6 +3942,9 @@ name = "pywin32" version = "308" source = { registry = "https://pypi.org/simple" } wheels = [ + { url = "https://files.pythonhosted.org/packages/72/a6/3e9f2c474895c1bb61b11fa9640be00067b5c5b363c501ee9c3fa53aec01/pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e", size = 5927028 }, + { url = "https://files.pythonhosted.org/packages/d9/b4/84e2463422f869b4b718f79eb7530a4c1693e96b8a4e5e968de38be4d2ba/pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e", size = 6558484 }, + { url = "https://files.pythonhosted.org/packages/9f/8f/fb84ab789713f7c6feacaa08dad3ec8105b88ade8d1c4f0f0dfcaaa017d6/pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c", size = 7971454 }, { url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156 }, { url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559 }, { url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495 }, @@ -3607,6 +3962,15 @@ version = "6.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, @@ -3660,6 +4024,21 @@ version = "3.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a4/aa/25e5a20131369d82c7b8288c99c2c3011ec47a3f5953ccc9cb8145720be5/rapidfuzz-3.11.0.tar.gz", hash = "sha256:a53ca4d3f52f00b393fab9b5913c5bafb9afc27d030c8a1db1283da6917a860f", size = 57983000 } wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/70/820ebf9eb22ad97b9e0bb9fd1ad8c6be4c8db5a0974d12ce27b5c9a30db0/rapidfuzz-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb8a54543d16ab1b69e2c5ed96cabbff16db044a50eddfc028000138ca9ddf33", size = 1954240 }, + { url = "https://files.pythonhosted.org/packages/41/bc/e39abdc28160d8147ccab0aa922a29be50529dcf149615a68a324ff6f9b1/rapidfuzz-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:231c8b2efbd7f8d2ecd1ae900363ba168b8870644bb8f2b5aa96e4a7573bde19", size = 1427139 }, + { url = "https://files.pythonhosted.org/packages/b6/2d/19b8e5d80257b13d73ba994552b78a69ac2ed70f1de716f1b02fcb84d09c/rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e7f442fb9cca81e9df32333fb075ef729052bcabe05b0afc0441f462299114", size = 1419602 }, + { url = "https://files.pythonhosted.org/packages/8c/82/1fc80cc531ec712872025c19118d78eb23aff09c7144b380c2c4b544b0d1/rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:906f1f2a1b91c06599b3dd1be207449c5d4fc7bd1e1fa2f6aef161ea6223f165", size = 5635370 }, + { url = "https://files.pythonhosted.org/packages/3c/5c/007b90af25f98e301b5f7a095059b09f602701443d555724c9226a45514c/rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed59044aea9eb6c663112170f2399b040d5d7b162828b141f2673e822093fa8", size = 1680848 }, + { url = "https://files.pythonhosted.org/packages/01/04/e481530eff5d1cf337b86a3095dd4de0b758c37291e51eb0d8c4f7d49719/rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cb1965a28b0fa64abdee130c788a0bc0bb3cf9ef7e3a70bf055c086c14a3d7e", size = 1682131 }, + { url = "https://files.pythonhosted.org/packages/10/15/b0ec18edfe6146d8915679644ab7584cd0165724d6a53bcc43bd59f8edb5/rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b488b244931d0291412917e6e46ee9f6a14376625e150056fe7c4426ef28225", size = 3134097 }, + { url = "https://files.pythonhosted.org/packages/8b/0e/cf0a5d62977381bca981fc171fd6c85dc52ca1239eaacf9c1d38978c5866/rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f0ba13557fec9d5ffc0a22826754a7457cc77f1b25145be10b7bb1d143ce84c6", size = 2332928 }, + { url = "https://files.pythonhosted.org/packages/dc/71/568d383eb36586c9e7e13f1327203e2be0938e5ff070c1fa2a99b418808e/rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3871fa7dfcef00bad3c7e8ae8d8fd58089bad6fb21f608d2bf42832267ca9663", size = 6940409 }, + { url = "https://files.pythonhosted.org/packages/ba/23/02972657d69e6d3aae2cdbd67debad080410ff9ef8849d8eab5e580a48a5/rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b2669eafee38c5884a6e7cc9769d25c19428549dcdf57de8541cf9e82822e7db", size = 2715928 }, + { url = "https://files.pythonhosted.org/packages/17/17/d964d770faa4e25e125618c00e31607cf8ce639d518fc29d200edf06cfda/rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ffa1bb0e26297b0f22881b219ffc82a33a3c84ce6174a9d69406239b14575bd5", size = 3265078 }, + { url = "https://files.pythonhosted.org/packages/bc/13/a117412b1e4ed0bb23b9891a45a59812d96fde8c076b8b8b828aa7ca3710/rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:45b15b8a118856ac9caac6877f70f38b8a0d310475d50bc814698659eabc1cdb", size = 4169215 }, + { url = "https://files.pythonhosted.org/packages/9f/0d/89ef496aedf885db4bfe7f46ac6727666afe0d9d8ca5b4f9c7cc8eef0378/rapidfuzz-3.11.0-cp310-cp310-win32.whl", hash = "sha256:22033677982b9c4c49676f215b794b0404073f8974f98739cb7234e4a9ade9ad", size = 1841736 }, + { url = "https://files.pythonhosted.org/packages/47/9a/69019f4e9c8a42e4aca0169dbae71602aba4e0fa4c5e84515f3ed682e59a/rapidfuzz-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:be15496e7244361ff0efcd86e52559bacda9cd975eccf19426a0025f9547c792", size = 1614955 }, + { url = "https://files.pythonhosted.org/packages/37/65/6fb036e39d175299ce44e5186ee2d08b9ea02d732ed6dbd70280f63b4eba/rapidfuzz-3.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:714a7ba31ba46b64d30fccfe95f8013ea41a2e6237ba11a805a27cdd3bce2573", size = 863543 }, { url = "https://files.pythonhosted.org/packages/40/ac/9ca008834104ad138fbfe2d7ae4443ada55e00c4eb4272d288897e8763b8/rapidfuzz-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8724a978f8af7059c5323d523870bf272a097478e1471295511cf58b2642ff83", size = 1955019 }, { url = "https://files.pythonhosted.org/packages/4c/55/d026c01c9312c9c2a413679052a9bb884743fc5655e59339116d83a2125b/rapidfuzz-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b63cb1f2eb371ef20fb155e95efd96e060147bdd4ab9fc400c97325dfee9fe1", size = 1427753 }, { url = "https://files.pythonhosted.org/packages/d1/a0/5f3fae81dd1efdf47da19641e321ae84b4f49a5a7b2ab3ff78bd04a0ae7f/rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82497f244aac10b20710448645f347d862364cc4f7d8b9ba14bd66b5ce4dec18", size = 1411472 }, @@ -3705,6 +4084,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/d8/4677e36e958b4d95d039d254d597db9c020896c8130911dc36b136373b87/rapidfuzz-3.11.0-cp313-cp313-win32.whl", hash = "sha256:6ad02bab756751c90fa27f3069d7b12146613061341459abf55f8190d899649f", size = 1822624 }, { url = "https://files.pythonhosted.org/packages/e8/97/1c782140e688ea2c3337d94516c635c575aa39fe62782fd53ad5d2119df4/rapidfuzz-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:b1472986fd9c5d318399a01a0881f4a0bf4950264131bb8e2deba9df6d8c362b", size = 1604273 }, { url = "https://files.pythonhosted.org/packages/a6/83/8b713d50bec947e945a79be47f772484307fc876c426fb26c6f369098389/rapidfuzz-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c408f09649cbff8da76f8d3ad878b64ba7f7abdad1471efb293d2c075e80c822", size = 857385 }, + { url = "https://files.pythonhosted.org/packages/30/5a/8ac67667663d24cc4d4b76f63783e58ef03e4d4843d02dab6b2f8470ea5e/rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f06e3c4c0a8badfc4910b9fd15beb1ad8f3b8fafa8ea82c023e5e607b66a78e4", size = 1853100 }, + { url = "https://files.pythonhosted.org/packages/dc/72/b043c26e93fb1bc5dfab1e5dd0f8d2f6135c2aa48e6db0660d4ecc5b157a/rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fe7aaf5a54821d340d21412f7f6e6272a9b17a0cbafc1d68f77f2fc11009dcd5", size = 1361961 }, + { url = "https://files.pythonhosted.org/packages/5c/4a/29916c0dd853d22ef7b988af43f4e34d327581e16f60b4c9b0f229fa306c/rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25398d9ac7294e99876a3027ffc52c6bebeb2d702b1895af6ae9c541ee676702", size = 1354313 }, + { url = "https://files.pythonhosted.org/packages/41/39/f352af4ede7faeeea20bae2537f1fa60c3bbbf2696f0f2f3dda696745239/rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a52eea839e4bdc72c5e60a444d26004da00bb5bc6301e99b3dde18212e41465", size = 5478019 }, + { url = "https://files.pythonhosted.org/packages/99/8e/86f8a11ac0edda63ff5314d992aa1576fff5d8233f4310d46a6bb0551122/rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c87319b0ab9d269ab84f6453601fd49b35d9e4a601bbaef43743f26fabf496c", size = 3056881 }, + { url = "https://files.pythonhosted.org/packages/98/53/222dceb24a83c7d7d76086b6d5bfd3d6aa9988ea73d356d287b5c437c0d5/rapidfuzz-3.11.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3048c6ed29d693fba7d2a7caf165f5e0bb2b9743a0989012a98a47b975355cca", size = 1543944 }, ] [[package]] @@ -3738,6 +4123,22 @@ version = "2024.11.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } wheels = [ + { url = "https://files.pythonhosted.org/packages/95/3c/4651f6b130c6842a8f3df82461a8950f923925db8b6961063e82744bddcc/regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91", size = 482674 }, + { url = "https://files.pythonhosted.org/packages/15/51/9f35d12da8434b489c7b7bffc205c474a0a9432a889457026e9bc06a297a/regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0", size = 287684 }, + { url = "https://files.pythonhosted.org/packages/bd/18/b731f5510d1b8fb63c6b6d3484bfa9a59b84cc578ac8b5172970e05ae07c/regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e", size = 284589 }, + { url = "https://files.pythonhosted.org/packages/78/a2/6dd36e16341ab95e4c6073426561b9bfdeb1a9c9b63ab1b579c2e96cb105/regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde", size = 782511 }, + { url = "https://files.pythonhosted.org/packages/1b/2b/323e72d5d2fd8de0d9baa443e1ed70363ed7e7b2fb526f5950c5cb99c364/regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e", size = 821149 }, + { url = "https://files.pythonhosted.org/packages/90/30/63373b9ea468fbef8a907fd273e5c329b8c9535fee36fc8dba5fecac475d/regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2", size = 809707 }, + { url = "https://files.pythonhosted.org/packages/f2/98/26d3830875b53071f1f0ae6d547f1d98e964dd29ad35cbf94439120bb67a/regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf", size = 781702 }, + { url = "https://files.pythonhosted.org/packages/87/55/eb2a068334274db86208ab9d5599ffa63631b9f0f67ed70ea7c82a69bbc8/regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c", size = 771976 }, + { url = "https://files.pythonhosted.org/packages/74/c0/be707bcfe98254d8f9d2cff55d216e946f4ea48ad2fd8cf1428f8c5332ba/regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86", size = 697397 }, + { url = "https://files.pythonhosted.org/packages/49/dc/bb45572ceb49e0f6509f7596e4ba7031f6819ecb26bc7610979af5a77f45/regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67", size = 768726 }, + { url = "https://files.pythonhosted.org/packages/5a/db/f43fd75dc4c0c2d96d0881967897926942e935d700863666f3c844a72ce6/regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d", size = 775098 }, + { url = "https://files.pythonhosted.org/packages/99/d7/f94154db29ab5a89d69ff893159b19ada89e76b915c1293e98603d39838c/regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2", size = 839325 }, + { url = "https://files.pythonhosted.org/packages/f7/17/3cbfab1f23356fbbf07708220ab438a7efa1e0f34195bf857433f79f1788/regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008", size = 843277 }, + { url = "https://files.pythonhosted.org/packages/7e/f2/48b393b51900456155de3ad001900f94298965e1cad1c772b87f9cfea011/regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62", size = 773197 }, + { url = "https://files.pythonhosted.org/packages/45/3f/ef9589aba93e084cd3f8471fded352826dcae8489b650d0b9b27bc5bba8a/regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e", size = 261714 }, + { url = "https://files.pythonhosted.org/packages/42/7e/5f1b92c8468290c465fd50c5318da64319133231415a8aa6ea5ab995a815/regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519", size = 274042 }, { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669 }, { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684 }, { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589 }, @@ -3845,6 +4246,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 } wheels = [ @@ -3857,6 +4259,19 @@ version = "0.22.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/01/80/cce854d0921ff2f0a9fa831ba3ad3c65cee3a46711addf39a2af52df2cfd/rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", size = 26771 } wheels = [ + { url = "https://files.pythonhosted.org/packages/42/2a/ead1d09e57449b99dcc190d8d2323e3a167421d8f8fdf0f217c6f6befe47/rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967", size = 359514 }, + { url = "https://files.pythonhosted.org/packages/8f/7e/1254f406b7793b586c68e217a6a24ec79040f85e030fff7e9049069284f4/rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37", size = 349031 }, + { url = "https://files.pythonhosted.org/packages/aa/da/17c6a2c73730d426df53675ff9cc6653ac7a60b6438d03c18e1c822a576a/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24", size = 381485 }, + { url = "https://files.pythonhosted.org/packages/aa/13/2dbacd820466aa2a3c4b747afb18d71209523d353cf865bf8f4796c969ea/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff", size = 386794 }, + { url = "https://files.pythonhosted.org/packages/6d/62/96905d0a35ad4e4bc3c098b2f34b2e7266e211d08635baa690643d2227be/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c", size = 423523 }, + { url = "https://files.pythonhosted.org/packages/eb/1b/d12770f2b6a9fc2c3ec0d810d7d440f6d465ccd8b7f16ae5385952c28b89/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e", size = 446695 }, + { url = "https://files.pythonhosted.org/packages/4d/cf/96f1fd75512a017f8e07408b6d5dbeb492d9ed46bfe0555544294f3681b3/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec", size = 381959 }, + { url = "https://files.pythonhosted.org/packages/ab/f0/d1c5b501c8aea85aeb938b555bfdf7612110a2f8cdc21ae0482c93dd0c24/rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c", size = 410420 }, + { url = "https://files.pythonhosted.org/packages/33/3b/45b6c58fb6aad5a569ae40fb890fc494c6b02203505a5008ee6dc68e65f7/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09", size = 557620 }, + { url = "https://files.pythonhosted.org/packages/83/62/3fdd2d3d47bf0bb9b931c4c73036b4ab3ec77b25e016ae26fab0f02be2af/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00", size = 584202 }, + { url = "https://files.pythonhosted.org/packages/04/f2/5dced98b64874b84ca824292f9cee2e3f30f3bcf231d15a903126684f74d/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf", size = 552787 }, + { url = "https://files.pythonhosted.org/packages/67/13/2273dea1204eda0aea0ef55145da96a9aa28b3f88bb5c70e994f69eda7c3/rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652", size = 220088 }, + { url = "https://files.pythonhosted.org/packages/4e/80/8c8176b67ad7f4a894967a7a4014ba039626d96f1d4874d53e409b58d69f/rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8", size = 231737 }, { url = "https://files.pythonhosted.org/packages/15/ad/8d1ddf78f2805a71253fcd388017e7b4a0615c22c762b6d35301fef20106/rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", size = 359773 }, { url = "https://files.pythonhosted.org/packages/c8/75/68c15732293a8485d79fe4ebe9045525502a067865fa4278f178851b2d87/rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", size = 349214 }, { url = "https://files.pythonhosted.org/packages/3c/4c/7ce50f3070083c2e1b2bbd0fb7046f3da55f510d19e283222f8f33d7d5f4/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", size = 380477 }, @@ -3909,6 +4324,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/30/89/35fc7a6cdf3477d441c7aca5e9bbf5a14e0f25152aed7f63f4e0b141045d/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", size = 553855 }, { url = "https://files.pythonhosted.org/packages/8f/e0/830c02b2457c4bd20a8c5bb394d31d81f57fbefce2dbdd2e31feff4f7003/rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", size = 219100 }, { url = "https://files.pythonhosted.org/packages/f8/30/7ac943f69855c2db77407ae363484b915d861702dbba1aa82d68d57f42be/rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", size = 233794 }, + { url = "https://files.pythonhosted.org/packages/8b/63/e29f8ee14fcf383574f73b6bbdcbec0fbc2e5fc36b4de44d1ac389b1de62/rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d", size = 360786 }, + { url = "https://files.pythonhosted.org/packages/d3/e0/771ee28b02a24e81c8c0e645796a371350a2bb6672753144f36ae2d2afc9/rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd", size = 350589 }, + { url = "https://files.pythonhosted.org/packages/cf/49/abad4c4a1e6f3adf04785a99c247bfabe55ed868133e2d1881200aa5d381/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493", size = 381848 }, + { url = "https://files.pythonhosted.org/packages/3a/7d/f4bc6d6fbe6af7a0d2b5f2ee77079efef7c8528712745659ec0026888998/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96", size = 387879 }, + { url = "https://files.pythonhosted.org/packages/13/b0/575c797377fdcd26cedbb00a3324232e4cb2c5d121f6e4b0dbf8468b12ef/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123", size = 423916 }, + { url = "https://files.pythonhosted.org/packages/54/78/87157fa39d58f32a68d3326f8a81ad8fb99f49fe2aa7ad9a1b7d544f9478/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad", size = 448410 }, + { url = "https://files.pythonhosted.org/packages/59/69/860f89996065a88be1b6ff2d60e96a02b920a262d8aadab99e7903986597/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9", size = 382841 }, + { url = "https://files.pythonhosted.org/packages/bd/d7/bc144e10d27e3cb350f98df2492a319edd3caaf52ddfe1293f37a9afbfd7/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e", size = 409662 }, + { url = "https://files.pythonhosted.org/packages/14/2a/6bed0b05233c291a94c7e89bc76ffa1c619d4e1979fbfe5d96024020c1fb/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338", size = 558221 }, + { url = "https://files.pythonhosted.org/packages/11/23/cd8f566de444a137bc1ee5795e47069a947e60810ba4152886fe5308e1b7/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566", size = 583780 }, + { url = "https://files.pythonhosted.org/packages/8d/63/79c3602afd14d501f751e615a74a59040328da5ef29ed5754ae80d236b84/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe", size = 553619 }, + { url = "https://files.pythonhosted.org/packages/9f/2e/c5c1689e80298d4e94c75b70faada4c25445739d91b94c211244a3ed7ed1/rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d", size = 233338 }, ] [[package]] @@ -3953,6 +4380,18 @@ version = "0.4.5" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cb/46/a1c56ed856c6ac3b1a8b37abe5be0cac53219367af1331e721b04d122577/safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310", size = 65702 } wheels = [ + { url = "https://files.pythonhosted.org/packages/38/10/0798ec2c8704c2d172620d8a3725bed92cdd75516357b1a3e64d4229ea4e/safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7", size = 392312 }, + { url = "https://files.pythonhosted.org/packages/2b/9e/9648d8dbb485c40a4a0212b7537626ae440b48156cc74601ca0b7a7615e0/safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27", size = 381858 }, + { url = "https://files.pythonhosted.org/packages/8b/67/49556aeacc00df353767ed31d68b492fecf38c3f664c52692e4d92aa0032/safetensors-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6885016f34bef80ea1085b7e99b3c1f92cb1be78a49839203060f67b40aee761", size = 441382 }, + { url = "https://files.pythonhosted.org/packages/5d/ce/e9f4869a37bb11229e6cdb4e73a6ef23b4f360eee9dca5f7e40982779704/safetensors-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133620f443450429322f238fda74d512c4008621227fccf2f8cf4a76206fea7c", size = 439001 }, + { url = "https://files.pythonhosted.org/packages/a0/27/aee8cf031b89c34caf83194ec6b7f2eed28d053fff8b6da6d00c85c56035/safetensors-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3e0609ec12d2a77e882f07cced530b8262027f64b75d399f1504ffec0ba56", size = 478026 }, + { url = "https://files.pythonhosted.org/packages/da/33/1d9fc4805c623636e7d460f28eec92ebd1856f7a552df8eb78398a1ef4de/safetensors-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f1dd769f064adc33831f5e97ad07babbd728427f98e3e1db6902e369122737", size = 495545 }, + { url = "https://files.pythonhosted.org/packages/b9/df/6f766b56690709d22e83836e4067a1109a7d84ea152a6deb5692743a2805/safetensors-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6d156bdb26732feada84f9388a9f135528c1ef5b05fae153da365ad4319c4c5", size = 435016 }, + { url = "https://files.pythonhosted.org/packages/90/fa/7bc3f18086201b1e55a42c88b822ae197d0158e12c54cd45c887305f1b7e/safetensors-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e347d77e2c77eb7624400ccd09bed69d35c0332f417ce8c048d404a096c593b", size = 456273 }, + { url = "https://files.pythonhosted.org/packages/3e/59/2ae50150d37a65c1c5f01aec74dc737707b8bbecdc76307e5a1a12c8a376/safetensors-0.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9f556eea3aec1d3d955403159fe2123ddd68e880f83954ee9b4a3f2e15e716b6", size = 619669 }, + { url = "https://files.pythonhosted.org/packages/fe/43/10f0bb597aef62c9c154152e265057089f3c729bdd980e6c32c3ec2407a4/safetensors-0.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9483f42be3b6bc8ff77dd67302de8ae411c4db39f7224dec66b0eb95822e4163", size = 605212 }, + { url = "https://files.pythonhosted.org/packages/7c/75/ede6887ea0ceaba55730988bfc7668dc147a8758f907fa6db26fbb681b8e/safetensors-0.4.5-cp310-none-win32.whl", hash = "sha256:7389129c03fadd1ccc37fd1ebbc773f2b031483b04700923c3511d2a939252cc", size = 272652 }, + { url = "https://files.pythonhosted.org/packages/ba/f0/919c72a9eef843781e652d0650f2819039943e69b69d5af2d0451a23edc3/safetensors-0.4.5-cp310-none-win_amd64.whl", hash = "sha256:e98ef5524f8b6620c8cdef97220c0b6a5c1cef69852fcd2f174bb96c2bb316b1", size = 285879 }, { url = "https://files.pythonhosted.org/packages/9a/a5/25bcf75e373412daf1fd88045ab3aa8140a0d804ef0e70712c4f2c5b94d8/safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c", size = 392256 }, { url = "https://files.pythonhosted.org/packages/08/8c/ece3bf8756506a890bd980eca02f47f9d98dfbf5ce16eda1368f53560f67/safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971", size = 381490 }, { url = "https://files.pythonhosted.org/packages/39/83/c4a7ce01d626e46ea2b45887f2e59b16441408031e2ce2f9fe01860c6946/safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42", size = 441093 }, @@ -3987,6 +4426,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/6c/7a3233c08bde558d6c33a41219119866cb596139a4673cc6c24024710ffd/safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35", size = 457382 }, { url = "https://files.pythonhosted.org/packages/a0/58/0b7bcba3788ff503990cf9278d611b56c029400612ba93e772c987b5aa03/safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523", size = 619301 }, { url = "https://files.pythonhosted.org/packages/82/cc/9c2cf58611daf1c83ce5d37f9de66353e23fcda36008b13fd3409a760aa3/safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142", size = 605580 }, + { url = "https://files.pythonhosted.org/packages/cf/ff/037ae4c0ee32db496669365e66079b6329906c6814722b159aa700e67208/safetensors-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdadf66b5a22ceb645d5435a0be7a0292ce59648ca1d46b352f13cff3ea80410", size = 392951 }, + { url = "https://files.pythonhosted.org/packages/f1/d6/6621e16b35bf83ae099eaab07338f04991a26c9aa43879d05f19f35e149c/safetensors-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d42ffd4c2259f31832cb17ff866c111684c87bd930892a1ba53fed28370c918c", size = 383417 }, + { url = "https://files.pythonhosted.org/packages/ae/88/3068e1bb16f5e9f9068901de3cf7b3db270b9bfe6e7d51d4b55c1da0425d/safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd8a1f6d2063a92cd04145c7fd9e31a1c7d85fbec20113a14b487563fdbc0597", size = 442311 }, + { url = "https://files.pythonhosted.org/packages/f7/15/a2bb77ebbaa76b61ec2e9f731fe4db7f9473fd855d881957c51b3a168892/safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951d2fcf1817f4fb0ef0b48f6696688a4e852a95922a042b3f96aaa67eedc920", size = 436678 }, + { url = "https://files.pythonhosted.org/packages/ec/79/9608c4546cdbfe3860dd7aa59e3562c9289113398b1a0bd89b68ce0a9d41/safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ac85d9a8c1af0e3132371d9f2d134695a06a96993c2e2f0bbe25debb9e3f67a", size = 457316 }, + { url = "https://files.pythonhosted.org/packages/0f/23/b17b483f2857835962ad33e38014efd4911791187e177bc23b057d35bee8/safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e3cec4a29eb7fe8da0b1c7988bc3828183080439dd559f720414450de076fcab", size = 620565 }, + { url = "https://files.pythonhosted.org/packages/19/46/5d11dc300feaad285c2f1bd784ff3f689f5e0ab6be49aaf568f3a77019eb/safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:21742b391b859e67b26c0b2ac37f52c9c0944a879a25ad2f9f9f3cd61e7fda8f", size = 606660 }, ] [[package]] @@ -4001,6 +4447,11 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fa/19/5aa2002044afc297ecaf1e3517ed07bba4aece3b5613b5160c1212995fc8/scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e", size = 7074944 } wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/97/55060f91a5e7c4df945e5a69b16148b5f2256e6e1ea3f17da8e27edf9953/scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718", size = 12060299 }, + { url = "https://files.pythonhosted.org/packages/36/7b/8c5dfc64a8344ebf2ae493d59af4b3650588051f654e164ff4f9952877b3/scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460", size = 11105443 }, + { url = "https://files.pythonhosted.org/packages/25/9f/61544f2a5cae1bc27c97f0ec9ffcc9837e469f215817608840a4ccbb277a/scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7a579606c73a0b3d210e33ea410ea9e1af7933fe324cb7e6fbafae4ea5948", size = 12637137 }, + { url = "https://files.pythonhosted.org/packages/50/79/d21599fc44d2d497ced440480670b6314ebc00308e3bae0d0ebca44cd481/scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46d3ca0f11a540b8eaddaf5e38172d8cd65a86cb3e3632161ec96c0cffb774c", size = 13490128 }, + { url = "https://files.pythonhosted.org/packages/ff/87/788da20cfefcd261123d4bb015b2de076e49cdd3b811b55e6811acd3cb21/scikit_learn-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be4577769c5dde6e1b53de8e6520f9b664ab5861dd57acee47ad119fd7405d6", size = 11118524 }, { url = "https://files.pythonhosted.org/packages/07/95/070d6e70f735d13f1c10afebb65ba3526125b7d6c6fc7022651a4a061148/scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285", size = 12095168 }, { url = "https://files.pythonhosted.org/packages/72/3d/0381e3a59ebd4154e6a61b0ceaf299c3c141035033dd3b868776cd9af02d/scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b", size = 11108880 }, { url = "https://files.pythonhosted.org/packages/fe/2d/0999ae3eed2ac67b1b3cd7fc33370bd5ca59a7514ffe43ae2b6f3cd85b9b/scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a", size = 12585449 }, @@ -4031,6 +4482,14 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/62/11/4d44a1f274e002784e4dbdb81e0ea96d2de2d1045b2132d5af62cc31fd28/scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417", size = 58620554 } wheels = [ + { url = "https://files.pythonhosted.org/packages/64/68/3bc0cfaf64ff507d82b1e5d5b64521df4c8bf7e22bc0b897827cbee9872c/scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389", size = 39069598 }, + { url = "https://files.pythonhosted.org/packages/43/a5/8d02f9c372790326ad405d94f04d4339482ec082455b9e6e288f7100513b/scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3", size = 29879676 }, + { url = "https://files.pythonhosted.org/packages/07/42/0e0bea9666fcbf2cb6ea0205db42c81b1f34d7b729ba251010edf9c80ebd/scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0", size = 23088696 }, + { url = "https://files.pythonhosted.org/packages/15/47/298ab6fef5ebf31b426560e978b8b8548421d4ed0bf99263e1eb44532306/scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3", size = 25470699 }, + { url = "https://files.pythonhosted.org/packages/d8/df/cdb6be5274bc694c4c22862ac3438cb04f360ed9df0aecee02ce0b798380/scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d", size = 35606631 }, + { url = "https://files.pythonhosted.org/packages/47/78/b0c2c23880dd1e99e938ad49ccfb011ae353758a2dc5ed7ee59baff684c3/scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69", size = 41178528 }, + { url = "https://files.pythonhosted.org/packages/5d/aa/994b45c34b897637b853ec04334afa55a85650a0d11dacfa67232260fb0a/scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad", size = 42784535 }, + { url = "https://files.pythonhosted.org/packages/e7/1c/8daa6df17a945cb1a2a1e3bae3c49643f7b3b94017ff01a4787064f03f84/scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5", size = 44772117 }, { url = "https://files.pythonhosted.org/packages/b2/ab/070ccfabe870d9f105b04aee1e2860520460ef7ca0213172abfe871463b9/scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675", size = 39076999 }, { url = "https://files.pythonhosted.org/packages/a7/c5/02ac82f9bb8f70818099df7e86c3ad28dae64e1347b421d8e3adf26acab6/scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2", size = 29894570 }, { url = "https://files.pythonhosted.org/packages/ed/05/7f03e680cc5249c4f96c9e4e845acde08eb1aee5bc216eff8a089baa4ddb/scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617", size = 23103567 }, @@ -4108,6 +4567,19 @@ version = "3.19.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/3d/29/085111f19717f865eceaf0d4397bf3e76b08d60428b076b64e2a1903706d/simplejson-3.19.3.tar.gz", hash = "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680", size = 85237 } wheels = [ + { url = "https://files.pythonhosted.org/packages/39/24/260ad03435ce8ef2436031951134659c7161776ec3a78094b35b9375ceea/simplejson-3.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:50d8b742d74c449c4dcac570d08ce0f21f6a149d2d9cf7652dbf2ba9a1bc729a", size = 93660 }, + { url = "https://files.pythonhosted.org/packages/63/a1/dee207f357bcd6b106f2ca5129ee916c24993ba08b7dfbf9a37c22442ea9/simplejson-3.19.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd011fc3c1d88b779645495fdb8189fb318a26981eebcce14109460e062f209b", size = 75546 }, + { url = "https://files.pythonhosted.org/packages/80/7b/45ef1da43f54d209ce2ef59b7356cda13f810186c381f38ae23a4d2b1337/simplejson-3.19.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:637c4d4b81825c1f4d651e56210bd35b5604034b192b02d2d8f17f7ce8c18f42", size = 75602 }, + { url = "https://files.pythonhosted.org/packages/7f/4b/9a132382982f8127bc7ce5212a5585d83c174707c9dd698d0cb6a0d41882/simplejson-3.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f56eb03bc9e432bb81adc8ecff2486d39feb371abb442964ffb44f6db23b332", size = 138632 }, + { url = "https://files.pythonhosted.org/packages/76/37/012f5ad2f38afa28f8a6ad9da01dc0b64492ffbaf2a3f2f8a0e1fddf9c1d/simplejson-3.19.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef59a53be400c1fad2c914b8d74c9d42384fed5174f9321dd021b7017fd40270", size = 146740 }, + { url = "https://files.pythonhosted.org/packages/69/b3/89640bd676e26ea2315b5aaf80712a6fbbb4338e4caf872d91448502a19b/simplejson-3.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72e8abbc86fcac83629a030888b45fed3a404d54161118be52cb491cd6975d3e", size = 134440 }, + { url = "https://files.pythonhosted.org/packages/61/20/0035a288deaff05397d6cc0145b33f3dd2429b99cdc880de4c5eca41ca72/simplejson-3.19.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8efb03ca77bd7725dfacc9254df00d73e6f43013cf39bd37ef1a8ed0ebb5165", size = 137949 }, + { url = "https://files.pythonhosted.org/packages/5d/de/5b03fafe3003e32d179588953d38183af6c3747e95c7dcc668c4f9eb886a/simplejson-3.19.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:add8850db04b98507a8b62d248a326ecc8561e6d24336d1ca5c605bbfaab4cad", size = 139992 }, + { url = "https://files.pythonhosted.org/packages/d1/ce/e493116ff49fd215f7baa25195b8f684c91e65c153e2a57e04dc3f3a466b/simplejson-3.19.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fc3dc9fb413fc34c396f52f4c87de18d0bd5023804afa8ab5cc224deeb6a9900", size = 140320 }, + { url = "https://files.pythonhosted.org/packages/86/f3/a18b98a7a27548829f672754dd3940fb637a27981399838128d3e560087f/simplejson-3.19.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dfa420bb9225dd33b6efdabde7c6a671b51150b9b1d9c4e5cd74d3b420b3fe1", size = 148625 }, + { url = "https://files.pythonhosted.org/packages/0f/55/d3da33ee3e708133da079b9d537693d7fef281e6f0d27921cc7e5b3ec523/simplejson-3.19.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7b5c472099b39b274dcde27f1113db8d818c9aa3ba8f78cbb8ad04a4c1ac2118", size = 141287 }, + { url = "https://files.pythonhosted.org/packages/17/e8/56184ab4d66bb64a6ff569f069b3796dfd943f9b961268fe0d403526fc17/simplejson-3.19.3-cp310-cp310-win32.whl", hash = "sha256:817abad79241ed4a507b3caf4d3f2be5079f39d35d4c550a061988986bffd2ec", size = 74143 }, + { url = "https://files.pythonhosted.org/packages/be/8f/a0089eff060f10a925f08b0a0f50854321484f1ac54b1895bbf4c9213dfe/simplejson-3.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:dd5b9b1783e14803e362a558680d88939e830db2466f3fa22df5c9319f8eea94", size = 75643 }, { url = "https://files.pythonhosted.org/packages/8c/bb/9ee3959e6929d228cf669b3f13f0edd43c5261b6cd69598640748b19ca35/simplejson-3.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e88abff510dcff903a18d11c2a75f9964e768d99c8d147839913886144b2065e", size = 91930 }, { url = "https://files.pythonhosted.org/packages/ac/ae/a06523928af3a6783e2638cd4f6035c3e32de1c1063d563d9060c8d2f1ad/simplejson-3.19.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:934a50a614fb831614db5dbfba35127ee277624dda4d15895c957d2f5d48610c", size = 74787 }, { url = "https://files.pythonhosted.org/packages/c3/58/fea732e48a7540035fe46d39e6fd77679f5810311d31da8661ce7a18210a/simplejson-3.19.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:212fce86a22188b0c7f53533b0f693ea9605c1a0f02c84c475a30616f55a744d", size = 74612 }, @@ -4188,31 +4660,47 @@ wheels = [ [[package]] name = "sqlalchemy" -version = "2.0.35" +version = "2.0.36" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "greenlet", marker = "(python_full_version < '3.13' and platform_machine == 'AMD64') or (python_full_version < '3.13' and platform_machine == 'WIN32') or (python_full_version < '3.13' and platform_machine == 'aarch64') or (python_full_version < '3.13' and platform_machine == 'amd64') or (python_full_version < '3.13' and platform_machine == 'ppc64le') or (python_full_version < '3.13' and platform_machine == 'win32') or (python_full_version < '3.13' and platform_machine == 'x86_64')" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/36/48/4f190a83525f5cefefa44f6adc9e6386c4de5218d686c27eda92eb1f5424/sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f", size = 9562798 } +sdist = { url = "https://files.pythonhosted.org/packages/50/65/9cbc9c4c3287bed2499e05033e207473504dc4df999ce49385fb1f8b058a/sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5", size = 9574485 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/46/9215a35bf98c3a2528e987791e6180eb51624d2c7d5cb8e2d96a6450b657/SQLAlchemy-2.0.35-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e21f66748ab725ade40fa7af8ec8b5019c68ab00b929f6643e1b1af461eddb60", size = 2091274 }, - { url = "https://files.pythonhosted.org/packages/1e/69/919673c5101a0c633658d58b11b454b251ca82300941fba801201434755d/SQLAlchemy-2.0.35-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a6219108a15fc6d24de499d0d515c7235c617b2540d97116b663dade1a54d62", size = 2081672 }, - { url = "https://files.pythonhosted.org/packages/67/ea/a6b0597cbda12796be2302153369dbbe90573fdab3bc4885f8efac499247/SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042622a5306c23b972192283f4e22372da3b8ddf5f7aac1cc5d9c9b222ab3ff6", size = 3200083 }, - { url = "https://files.pythonhosted.org/packages/8c/d6/97bdc8d714fb21762f2092511f380f18cdb2d985d516071fa925bb433a90/SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:627dee0c280eea91aed87b20a1f849e9ae2fe719d52cbf847c0e0ea34464b3f7", size = 3200080 }, - { url = "https://files.pythonhosted.org/packages/87/d2/8c2adaf2ade4f6f1b725acd0b0be9210bb6a2df41024729a8eec6a86fe5a/SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fdcd72a789c1c31ed242fd8c1bcd9ea186a98ee8e5408a50e610edfef980d71", size = 3137108 }, - { url = "https://files.pythonhosted.org/packages/7e/ae/ea05d0bfa8f2b25ae34591895147152854fc950f491c4ce362ae06035db8/SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89b64cd8898a3a6f642db4eb7b26d1b28a497d4022eccd7717ca066823e9fb01", size = 3157437 }, - { url = "https://files.pythonhosted.org/packages/fe/5d/8ad6df01398388a766163d27960b3365f1bbd8bb7b05b5cad321a8b69b25/SQLAlchemy-2.0.35-cp311-cp311-win32.whl", hash = "sha256:6a93c5a0dfe8d34951e8a6f499a9479ffb9258123551fa007fc708ae2ac2bc5e", size = 2061935 }, - { url = "https://files.pythonhosted.org/packages/ff/68/8557efc0c32c8e2c147cb6512237448b8ed594a57cd015fda67f8e56bb3f/SQLAlchemy-2.0.35-cp311-cp311-win_amd64.whl", hash = "sha256:c68fe3fcde03920c46697585620135b4ecfdfc1ed23e75cc2c2ae9f8502c10b8", size = 2087281 }, - { url = "https://files.pythonhosted.org/packages/2f/2b/fff87e6db0da31212c98bbc445f83fb608ea92b96bda3f3f10e373bac76c/SQLAlchemy-2.0.35-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb60b026d8ad0c97917cb81d3662d0b39b8ff1335e3fabb24984c6acd0c900a2", size = 2089790 }, - { url = "https://files.pythonhosted.org/packages/68/92/4bb761bd82764d5827bf6b6095168c40fb5dbbd23670203aef2f96ba6bc6/SQLAlchemy-2.0.35-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6921ee01caf375363be5e9ae70d08ce7ca9d7e0e8983183080211a062d299468", size = 2080266 }, - { url = "https://files.pythonhosted.org/packages/22/46/068a65db6dc253c6f25a7598d99e0a1d60b14f661f9d09ef6c73c718fa4e/SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdf1a0dbe5ced887a9b127da4ffd7354e9c1a3b9bb330dce84df6b70ccb3a8d", size = 3229760 }, - { url = "https://files.pythonhosted.org/packages/6e/36/59830dafe40dda592304debd4cd86e583f63472f3a62c9e2695a5795e786/SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93a71c8601e823236ac0e5d087e4f397874a421017b3318fd92c0b14acf2b6db", size = 3240649 }, - { url = "https://files.pythonhosted.org/packages/00/50/844c50c6996f9c7f000c959dd1a7436a6c94e449ee113046a1d19e470089/SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e04b622bb8a88f10e439084486f2f6349bf4d50605ac3e445869c7ea5cf0fa8c", size = 3176138 }, - { url = "https://files.pythonhosted.org/packages/df/d2/336b18cac68eecb67de474fc15c85f13be4e615c6f5bae87ea38c6734ce0/SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1b56961e2d31389aaadf4906d453859f35302b4eb818d34a26fab72596076bb8", size = 3202753 }, - { url = "https://files.pythonhosted.org/packages/f0/f3/ee1e62fabdc10910b5ef720ae08e59bc785f26652876af3a50b89b97b412/SQLAlchemy-2.0.35-cp312-cp312-win32.whl", hash = "sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf", size = 2060113 }, - { url = "https://files.pythonhosted.org/packages/60/63/a3cef44a52979169d884f3583d0640e64b3c28122c096474a1d7cfcaf1f3/SQLAlchemy-2.0.35-cp312-cp312-win_amd64.whl", hash = "sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc", size = 2085839 }, - { url = "https://files.pythonhosted.org/packages/0e/c6/33c706449cdd92b1b6d756b247761e27d32230fd6b2de5f44c4c3e5632b2/SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1", size = 1881276 }, + { url = "https://files.pythonhosted.org/packages/db/72/14ab694b8b3f0e35ef5beb74a8fea2811aa791ba1611c44dc90cdf46af17/SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72", size = 2092604 }, + { url = "https://files.pythonhosted.org/packages/1e/59/333fcbca58b79f5b8b61853d6137530198823392151fa8fd9425f367519e/SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908", size = 2083796 }, + { url = "https://files.pythonhosted.org/packages/6c/a0/ec3c188d2b0c1bc742262e76408d44104598d7247c23f5b06bb97ee21bfa/SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08", size = 3066165 }, + { url = "https://files.pythonhosted.org/packages/07/15/68ef91de5b8b7f80fb2d2b3b31ed42180c6227fe0a701aed9d01d34f98ec/SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07", size = 3074428 }, + { url = "https://files.pythonhosted.org/packages/e2/4c/9dfea5e63b87325eef6d9cdaac913459aa6a157a05a05ea6ff20004aee8e/SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5", size = 3030477 }, + { url = "https://files.pythonhosted.org/packages/16/a5/fcfde8e74ea5f683b24add22463bfc21e431d4a5531c8a5b55bc6fbea164/SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44", size = 3055942 }, + { url = "https://files.pythonhosted.org/packages/3c/ee/c22c415a771d791ae99146d72ffdb20e43625acd24835ea7fc157436d59f/SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa", size = 2064960 }, + { url = "https://files.pythonhosted.org/packages/aa/af/ad9c25cadc79bd851bdb9d82b68af9bdb91ff05f56d0da2f8a654825974f/SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5", size = 2089078 }, + { url = "https://files.pythonhosted.org/packages/00/4e/5a67963fd7cbc1beb8bd2152e907419f4c940ef04600b10151a751fe9e06/SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c", size = 2093782 }, + { url = "https://files.pythonhosted.org/packages/b3/24/30e33b6389ebb5a17df2a4243b091bc709fb3dfc9a48c8d72f8e037c943d/SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71", size = 2084180 }, + { url = "https://files.pythonhosted.org/packages/10/1e/70e9ed2143a27065246be40f78637ad5160ea0f5fd32f8cab819a31ff54d/SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff", size = 3202469 }, + { url = "https://files.pythonhosted.org/packages/b4/5f/95e0ed74093ac3c0db6acfa944d4d8ac6284ef5e1136b878a327ea1f975a/SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d", size = 3202464 }, + { url = "https://files.pythonhosted.org/packages/91/95/2cf9b85a6bc2ee660e40594dffe04e777e7b8617fd0c6d77a0f782ea96c9/SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb", size = 3139508 }, + { url = "https://files.pythonhosted.org/packages/92/ea/f0c01bc646456e4345c0fb5a3ddef457326285c2dc60435b0eb96b61bf31/SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8", size = 3159837 }, + { url = "https://files.pythonhosted.org/packages/a6/93/c8edbf153ee38fe529773240877bf1332ed95328aceef6254288f446994e/SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f", size = 2064529 }, + { url = "https://files.pythonhosted.org/packages/b1/03/d12b7c1d36fd80150c1d52e121614cf9377dac99e5497af8d8f5b2a8db64/SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959", size = 2089874 }, + { url = "https://files.pythonhosted.org/packages/b8/bf/005dc47f0e57556e14512d5542f3f183b94fde46e15ff1588ec58ca89555/SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4", size = 2092378 }, + { url = "https://files.pythonhosted.org/packages/94/65/f109d5720779a08e6e324ec89a744f5f92c48bd8005edc814bf72fbb24e5/SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855", size = 2082778 }, + { url = "https://files.pythonhosted.org/packages/60/f6/d9aa8c49c44f9b8c9b9dada1f12fa78df3d4c42aa2de437164b83ee1123c/SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53", size = 3232191 }, + { url = "https://files.pythonhosted.org/packages/8a/ab/81d4514527c068670cb1d7ab62a81a185df53a7c379bd2a5636e83d09ede/SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a", size = 3243044 }, + { url = "https://files.pythonhosted.org/packages/35/b4/f87c014ecf5167dc669199cafdb20a7358ff4b1d49ce3622cc48571f811c/SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686", size = 3178511 }, + { url = "https://files.pythonhosted.org/packages/ea/09/badfc9293bc3ccba6ede05e5f2b44a760aa47d84da1fc5a326e963e3d4d9/SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588", size = 3205147 }, + { url = "https://files.pythonhosted.org/packages/c8/60/70e681de02a13c4b27979b7b78da3058c49bacc9858c89ba672e030f03f2/SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e", size = 2062709 }, + { url = "https://files.pythonhosted.org/packages/b7/ed/f6cd9395e41bfe47dd253d74d2dfc3cab34980d4e20c8878cb1117306085/SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5", size = 2088433 }, + { url = "https://files.pythonhosted.org/packages/78/5c/236398ae3678b3237726819b484f15f5c038a9549da01703a771f05a00d6/SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef", size = 2087651 }, + { url = "https://files.pythonhosted.org/packages/a8/14/55c47420c0d23fb67a35af8be4719199b81c59f3084c28d131a7767b0b0b/SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8", size = 2078132 }, + { url = "https://files.pythonhosted.org/packages/3d/97/1e843b36abff8c4a7aa2e37f9bea364f90d021754c2de94d792c2d91405b/SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b", size = 3164559 }, + { url = "https://files.pythonhosted.org/packages/7b/c5/07f18a897b997f6d6b234fab2bf31dccf66d5d16a79fe329aefc95cd7461/SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2", size = 3177897 }, + { url = "https://files.pythonhosted.org/packages/b3/cd/e16f3cbefd82b5c40b33732da634ec67a5f33b587744c7ab41699789d492/SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf", size = 3111289 }, + { url = "https://files.pythonhosted.org/packages/15/85/5b8a3b0bc29c9928aa62b5c91fcc8335f57c1de0a6343873b5f372e3672b/SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c", size = 3139491 }, + { url = "https://files.pythonhosted.org/packages/a1/95/81babb6089938680dfe2cd3f88cd3fd39cccd1543b7cb603b21ad881bff1/SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436", size = 2060439 }, + { url = "https://files.pythonhosted.org/packages/c1/ce/5f7428df55660d6879d0522adc73a3364970b5ef33ec17fa125c5dbcac1d/SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88", size = 2084574 }, + { url = "https://files.pythonhosted.org/packages/b8/49/21633706dd6feb14cd3f7935fc00b60870ea057686035e1a99ae6d9d9d53/SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e", size = 1883787 }, ] [package.optional-dependencies] @@ -4266,11 +4754,11 @@ wheels = [ [[package]] name = "tenacity" -version = "8.5.0" +version = "9.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/4d/6a19536c50b849338fcbe9290d562b52cbdcf30d8963d3588a68a4107df1/tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78", size = 47309 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/3f/8ba87d9e287b9d385a02a7114ddcef61b26f86411e121c9003eb509a1773/tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687", size = 28165 }, + { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169 }, ] [[package]] @@ -4292,6 +4780,13 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/c4/4a/abaec53e93e3ef37224a4dd9e2fc6bb871e7a538c2b6b9d2a6397271daf4/tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6", size = 33437 } wheels = [ + { url = "https://files.pythonhosted.org/packages/96/10/28d59d43d72a0ebd4211371d0bf10c935cdecbb62b812ae04c58bfc37d96/tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f", size = 961465 }, + { url = "https://files.pythonhosted.org/packages/f8/0c/d4125348dedd1f8f38e3f85245e7fc38858ffc77c9b7edfb762a8191ba0b/tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225", size = 906849 }, + { url = "https://files.pythonhosted.org/packages/b9/ab/f9c7675747f259d133d66065106cf732a7c2bef6043062fbca8e011f7f4d/tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590", size = 1048795 }, + { url = "https://files.pythonhosted.org/packages/e7/8c/7d1007557b343d5cf18349802e94d3a14397121e9105b4661f8cd753f9bf/tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c", size = 1080866 }, + { url = "https://files.pythonhosted.org/packages/72/40/61d6354cb64a563fce475a2907039be9fe809ca5f801213856353b01a35b/tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311", size = 1092776 }, + { url = "https://files.pythonhosted.org/packages/f2/6c/83ca40527d072739f0704b9f59b325786c444ca63672a77cb69adc8181f7/tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5", size = 1142591 }, + { url = "https://files.pythonhosted.org/packages/ec/1f/a5d72755118e9e1b62cdf3ef9138eb83d49088f3cb37a9540025c81c0e75/tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702", size = 798864 }, { url = "https://files.pythonhosted.org/packages/22/eb/57492b2568eea1d546da5cc1ae7559d924275280db80ba07e6f9b89a914b/tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f", size = 961468 }, { url = "https://files.pythonhosted.org/packages/30/ef/e07dbfcb2f85c84abaa1b035a9279575a8da0236305491dc22ae099327f7/tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f", size = 907005 }, { url = "https://files.pythonhosted.org/packages/ea/9b/f36db825b1e9904c3a2646439cb9923fc1e09208e2e071c6d9dd64ead131/tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b", size = 1049183 }, @@ -4317,6 +4812,17 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fb/dd/5022939b9cadefe3af04f4012186c29b8afbe858b1ec2cfa38baeec94dab/time_machine-2.16.0.tar.gz", hash = "sha256:4a99acc273d2f98add23a89b94d4dd9e14969c01214c8514bfa78e4e9364c7e2", size = 24626 } wheels = [ + { url = "https://files.pythonhosted.org/packages/79/47/32fdb8e70122edbc8be9db1f032d22b38e3d9ef0bf52c64470d0815cdb62/time_machine-2.16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:09531af59fdfb39bfd24d28bd1e837eff5a5d98318509a31b6cfd57d27801e52", size = 20493 }, + { url = "https://files.pythonhosted.org/packages/b1/e6/f3bc391d5642e69299f2d1f0a46e7f98d1669e82b1e16c8cf3c6e4615059/time_machine-2.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:92d0b0f3c49f34dd76eb462f0afdc61ed1cb318c06c46d03e99b44ebb489bdad", size = 16757 }, + { url = "https://files.pythonhosted.org/packages/d4/7f/3a78d50fec64edd9964bf42b66a2e659a9846669ac8f705acc363ee79d3a/time_machine-2.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c29616e18e2349a8766d5b6817920fc74e39c00fa375d202231e9d525a1b882", size = 34527 }, + { url = "https://files.pythonhosted.org/packages/61/00/7cf1324d8f8db8f5dab71c44ed1e9c11c4f1cecca9d4363abf44154aa13b/time_machine-2.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1ceb6035a64cb00650e3ab203cf3faffac18576a3f3125c24df468b784077c7", size = 32537 }, + { url = "https://files.pythonhosted.org/packages/8e/c2/edf5ccb2fa529251eb7f1cfb34098c0ef236dbb88f0a6564d06f6f8378f5/time_machine-2.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64c205ea37b8c4ba232645335fc3b75bc2d03ce30f0a34649e36cae85652ee96", size = 34353 }, + { url = "https://files.pythonhosted.org/packages/a9/1e/178b9e3d0054300a4dd0485747c89359e5f719f090ae5165c88618793700/time_machine-2.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dfe92412bd11104c4f0fb2da68653e6c45b41f7217319a83a8b66ed4f20148b3", size = 34045 }, + { url = "https://files.pythonhosted.org/packages/e5/4d/068ad9660f00f88a54f3ff7e9d423ed5c08a5f8147518f6c66fd0393dde7/time_machine-2.16.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d5fe7a6284e3dce87ae13a25029c53542dd27a28d151f3ef362ec4dd9c3e45fd", size = 32356 }, + { url = "https://files.pythonhosted.org/packages/a5/25/c0f26294808946ec5b665f17a0072049a3f9e2468abc18aa8fe22580b4cf/time_machine-2.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0fca3025266d88d1b48be162a43b7c2d91c81cc5b3bee9f01194678ffb9969a", size = 33737 }, + { url = "https://files.pythonhosted.org/packages/8b/d4/ae909a269828eaa7672e1201403976e794ea679ae7ba04fe0c0c0c65c2b6/time_machine-2.16.0-cp310-cp310-win32.whl", hash = "sha256:4149e17018af07a5756a1df84aea71e6e178598c358c860c6bfec42170fa7970", size = 19133 }, + { url = "https://files.pythonhosted.org/packages/7e/e7/5946d62d49e79b97c6772fe2918eccbd069d74effa8d50bdca4056502aeb/time_machine-2.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:01bc257e9418980a4922de94775be42a966e1a082fb01a1635917f9afc7b84ca", size = 19995 }, + { url = "https://files.pythonhosted.org/packages/54/cb/6507c6594f086bc955ff200cc4fd415d2ab229371ca3ba8fc3d27429a9cc/time_machine-2.16.0-cp310-cp310-win_arm64.whl", hash = "sha256:6895e3e84119594ab12847c928f619d40ae9cedd0755515dc154a5b5dc6edd9f", size = 18109 }, { url = "https://files.pythonhosted.org/packages/38/7b/34aad93f75f86503dd1fa53bc120d8129fe4de83aef58ffa78c62b044ef9/time_machine-2.16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8f936566ef9f09136a3d5db305961ef6d897b76b240c9ff4199144aed6dd4fe5", size = 20169 }, { url = "https://files.pythonhosted.org/packages/68/cb/7d020d5c05d0460a4a96232b0777882ef989c1e6144d11ba984c4b0b4d1a/time_machine-2.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5886e23ede3478ca2a3e0a641f5d09dd784dfa9e48c96e8e5e31fc4fe77b6dc0", size = 16614 }, { url = "https://files.pythonhosted.org/packages/0d/24/ce1ff76c9a4f3be88c2b947f2411a5a8019390734597d3106a151f8a9416/time_machine-2.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76caf539fa4941e1817b7c482c87c65c52a1903fea761e84525955c6106fafb", size = 32507 }, @@ -4352,18 +4858,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/75/c4d8b2f0fe7dac22854d88a9c509d428e78ac4bf284bc54cfe83f75cc13b/time_machine-2.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:4d3843143c46dddca6491a954bbd0abfd435681512ac343169560e9bab504129", size = 18047 }, ] -[[package]] -name = "tinycss2" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, -] - [[package]] name = "tokenizers" version = "0.21.0" @@ -4389,6 +4883,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/69/d21eb253fa91622da25585d362a874fa4710be600f0ea9446d8d0217cec1/tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c", size = 2389192 }, ] +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +] + [[package]] name = "tomlkit" version = "0.13.2" @@ -4421,7 +4954,7 @@ name = "tqdm" version = "4.67.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "platform_system == 'Windows'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } wheels = [ @@ -4524,6 +5057,16 @@ version = "5.10.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f0/00/3110fd566786bfa542adb7932d62035e0c0ef662a8ff6544b6643b3d6fd7/ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1", size = 7154885 } wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/91/91678e49a9194f527e60115db84368c237ac7824992224fac47dcb23a5c6/ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd", size = 55354 }, + { url = "https://files.pythonhosted.org/packages/de/2f/1ed8c9b782fa4f44c26c1c4ec686d728a4865479da5712955daeef0b2e7b/ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf", size = 51808 }, + { url = "https://files.pythonhosted.org/packages/51/bf/a3a38b2912288143e8e613c6c4c3f798b5e4e98c542deabf94c60237235f/ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6", size = 51995 }, + { url = "https://files.pythonhosted.org/packages/b4/6d/0df8f7a6f1944ba619d93025ce468c9252aa10799d7140e07014dfc1a16c/ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569", size = 53566 }, + { url = "https://files.pythonhosted.org/packages/d5/ec/370741e5e30d5f7dc7f31a478d5bec7537ce6bfb7f85e72acefbe09aa2b2/ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770", size = 58499 }, + { url = "https://files.pythonhosted.org/packages/fe/29/72b33a88f7fae3c398f9ba3e74dc2e5875989b25f1c1f75489c048a2cf4e/ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1", size = 997881 }, + { url = "https://files.pythonhosted.org/packages/70/5c/808fbf21470e7045d56a282cf5e85a0450eacdb347d871d4eb404270ee17/ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5", size = 1140631 }, + { url = "https://files.pythonhosted.org/packages/8f/6a/e1e8281408e6270d6ecf2375af14d9e2f41c402ab6b161ecfa87a9727777/ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51", size = 1043511 }, + { url = "https://files.pythonhosted.org/packages/cb/ca/e319acbe4863919ec62498bc1325309f5c14a3280318dca10fe1db3cb393/ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518", size = 38626 }, + { url = "https://files.pythonhosted.org/packages/78/ec/dc96ca379de33f73b758d72e821ee4f129ccc32221f4eb3f089ff78d8370/ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f", size = 42076 }, { url = "https://files.pythonhosted.org/packages/23/ec/3c551ecfe048bcb3948725251fb0214b5844a12aa60bee08d78315bb1c39/ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00", size = 55353 }, { url = "https://files.pythonhosted.org/packages/8d/9f/4731ef0671a0653e9f5ba18db7c4596d8ecbf80c7922dd5fe4150f1aea76/ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126", size = 51813 }, { url = "https://files.pythonhosted.org/packages/1f/2b/44d6b9c1688330bf011f9abfdb08911a9dc74f76926dde74e718d87600da/ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8", size = 51988 }, @@ -4554,6 +5097,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/45/ed/582c4daba0f3e1688d923b5cb914ada1f9defa702df38a1916c899f7c4d1/ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f", size = 1043580 }, { url = "https://files.pythonhosted.org/packages/d7/0c/9837fece153051e19c7bade9f88f9b409e026b9525927824cdf16293b43b/ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165", size = 38766 }, { url = "https://files.pythonhosted.org/packages/d7/72/6cb6728e2738c05bbe9bd522d6fc79f86b9a28402f38663e85a28fddd4a0/ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539", size = 42212 }, + { url = "https://files.pythonhosted.org/packages/95/53/e5f5e733fc3525e65f36f533b0dbece5e5e2730b760e9beacf7e3d9d8b26/ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64", size = 51846 }, + { url = "https://files.pythonhosted.org/packages/59/1f/f7bc02a54ea7b47f3dc2d125a106408f18b0f47b14fc737f0913483ae82b/ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3", size = 48103 }, + { url = "https://files.pythonhosted.org/packages/1a/3a/d3921b6f29bc744d8d6c56db5f8bbcbe55115fd0f2b79c3c43ff292cc7c9/ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a", size = 47257 }, + { url = "https://files.pythonhosted.org/packages/f1/04/f4e3883204b786717038064afd537389ba7d31a72b437c1372297cb651ea/ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746", size = 48468 }, + { url = "https://files.pythonhosted.org/packages/17/cd/9c6547169eb01a22b04cbb638804ccaeb3c2ec2afc12303464e0f9b2ee5a/ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88", size = 54266 }, + { url = "https://files.pythonhosted.org/packages/70/bf/ecd14d3cf6127f8a990b01f0ad20e257f5619a555f47d707c57d39934894/ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b", size = 42224 }, ] [[package]] @@ -4743,6 +5292,8 @@ version = "1.4.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9e/b0/21547e16a47206ccdd15769bf65e143ade1ffae67f0881c855f76e44e9fa/win-precise-time-1.4.2.tar.gz", hash = "sha256:89274785cbc5f2997e01675206da3203835a442c60fd97798415c6b3c179c0b9", size = 7982 } wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/8b/ba6bdef9284fd75f816205bf9a198a2cf7b22459ff401174143ade5afe08/win_precise_time-1.4.2-cp310-cp310-win32.whl", hash = "sha256:7fa13a2247c2ef41cd5e9b930f40716eacc7fc1f079ea72853bd5613fe087a1a", size = 14700 }, + { url = "https://files.pythonhosted.org/packages/25/7f/5087d16a720b6833cb631b4b6f912b0ff433377227ecbbc494453951cbb5/win_precise_time-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:bb8e44b0fc35fde268e8a781cdcd9f47d47abcd8089465d2d1d1063976411c8e", size = 14913 }, { url = "https://files.pythonhosted.org/packages/bb/d6/a48717649fea2d7a6679db86dae9ae4b12078c7a48aa89a8f14a360f29d0/win_precise_time-1.4.2-cp311-cp311-win32.whl", hash = "sha256:59272655ad6f36910d0b585969402386fa627fca3be24acc9a21be1d550e5db8", size = 14703 }, { url = "https://files.pythonhosted.org/packages/f9/9c/46d69220d468c82ca2044284c5a8089705c5eb66be416abcbba156365a14/win_precise_time-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:0897bb055f19f3b4336e2ba6bee0115ac20fd7ec615a6d736632e2df77f8851a", size = 14912 }, { url = "https://files.pythonhosted.org/packages/2e/96/55a14b5c0e90439951f4a72672223bba81a5f882033c5850f8a6c7f4308b/win_precise_time-1.4.2-cp312-cp312-win32.whl", hash = "sha256:0210dcea88a520c91de1708ae4c881e3c0ddc956daa08b9eabf2b7c35f3109f5", size = 14694 }, @@ -4755,6 +5306,15 @@ version = "1.17.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/a1/fc03dca9b0432725c2e8cdbf91a349d2194cf03d8523c124faebe581de09/wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", size = 55542 } wheels = [ + { url = "https://files.pythonhosted.org/packages/99/f9/85220321e9bb1a5f72ccce6604395ae75fcb463d87dad0014dc1010bd1f1/wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", size = 38766 }, + { url = "https://files.pythonhosted.org/packages/ff/71/ff624ff3bde91ceb65db6952cdf8947bc0111d91bd2359343bc2fa7c57fd/wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", size = 83262 }, + { url = "https://files.pythonhosted.org/packages/9f/0a/814d4a121a643af99cfe55a43e9e6dd08f4a47cdac8e8f0912c018794715/wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", size = 74990 }, + { url = "https://files.pythonhosted.org/packages/cd/c7/b8c89bf5ca5c4e6a2d0565d149d549cdb4cffb8916d1d1b546b62fb79281/wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", size = 82712 }, + { url = "https://files.pythonhosted.org/packages/19/7c/5977aefa8460906c1ff914fd42b11cf6c09ded5388e46e1cc6cea4ab15e9/wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", size = 81705 }, + { url = "https://files.pythonhosted.org/packages/ae/e7/233402d7bd805096bb4a8ec471f5a141421a01de3c8c957cce569772c056/wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", size = 74636 }, + { url = "https://files.pythonhosted.org/packages/93/81/b6c32d8387d9cfbc0134f01585dee7583315c3b46dfd3ae64d47693cd078/wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", size = 81299 }, + { url = "https://files.pythonhosted.org/packages/d1/c3/1fae15d453468c98f09519076f8d401b476d18d8d94379e839eed14c4c8b/wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", size = 36425 }, + { url = "https://files.pythonhosted.org/packages/c6/f4/77e0886c95556f2b4caa8908ea8eb85f713fc68296a2113f8c63d50fe0fb/wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", size = 38748 }, { url = "https://files.pythonhosted.org/packages/0e/40/def56538acddc2f764c157d565b9f989072a1d2f2a8e384324e2e104fc7d/wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", size = 38766 }, { url = "https://files.pythonhosted.org/packages/89/e2/8c299f384ae4364193724e2adad99f9504599d02a73ec9199bf3f406549d/wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", size = 83730 }, { url = "https://files.pythonhosted.org/packages/29/ef/fcdb776b12df5ea7180d065b28fa6bb27ac785dddcd7202a0b6962bbdb47/wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", size = 75470 }, @@ -4818,6 +5378,21 @@ version = "3.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241 } wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/8a/0e9feca390d512d293afd844d31670e25608c4a901e10202aa98785eab09/xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212", size = 31970 }, + { url = "https://files.pythonhosted.org/packages/16/e6/be5aa49580cd064a18200ab78e29b88b1127e1a8c7955eb8ecf81f2626eb/xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520", size = 30801 }, + { url = "https://files.pythonhosted.org/packages/20/ee/b8a99ebbc6d1113b3a3f09e747fa318c3cde5b04bd9c197688fadf0eeae8/xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680", size = 220927 }, + { url = "https://files.pythonhosted.org/packages/58/62/15d10582ef159283a5c2b47f6d799fc3303fe3911d5bb0bcc820e1ef7ff4/xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da", size = 200360 }, + { url = "https://files.pythonhosted.org/packages/23/41/61202663ea9b1bd8e53673b8ec9e2619989353dba8cfb68e59a9cbd9ffe3/xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23", size = 428528 }, + { url = "https://files.pythonhosted.org/packages/f2/07/d9a3059f702dec5b3b703737afb6dda32f304f6e9da181a229dafd052c29/xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196", size = 194149 }, + { url = "https://files.pythonhosted.org/packages/eb/58/27caadf78226ecf1d62dbd0c01d152ed381c14c1ee4ad01f0d460fc40eac/xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c", size = 207703 }, + { url = "https://files.pythonhosted.org/packages/b1/08/32d558ce23e1e068453c39aed7b3c1cdc690c177873ec0ca3a90d5808765/xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482", size = 216255 }, + { url = "https://files.pythonhosted.org/packages/3f/d4/2b971e2d2b0a61045f842b622ef11e94096cf1f12cd448b6fd426e80e0e2/xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296", size = 202744 }, + { url = "https://files.pythonhosted.org/packages/19/ae/6a6438864a8c4c39915d7b65effd85392ebe22710412902487e51769146d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415", size = 210115 }, + { url = "https://files.pythonhosted.org/packages/48/7d/b3c27c27d1fc868094d02fe4498ccce8cec9fcc591825c01d6bcb0b4fc49/xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198", size = 414247 }, + { url = "https://files.pythonhosted.org/packages/a1/05/918f9e7d2fbbd334b829997045d341d6239b563c44e683b9a7ef8fe50f5d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442", size = 191419 }, + { url = "https://files.pythonhosted.org/packages/08/29/dfe393805b2f86bfc47c290b275f0b7c189dc2f4e136fd4754f32eb18a8d/xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da", size = 30114 }, + { url = "https://files.pythonhosted.org/packages/7b/d7/aa0b22c4ebb7c3ccb993d4c565132abc641cd11164f8952d89eb6a501909/xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9", size = 30003 }, + { url = "https://files.pythonhosted.org/packages/69/12/f969b81541ee91b55f1ce469d7ab55079593c80d04fd01691b550e535000/xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6", size = 26773 }, { url = "https://files.pythonhosted.org/packages/b8/c7/afed0f131fbda960ff15eee7f304fa0eeb2d58770fade99897984852ef23/xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1", size = 31969 }, { url = "https://files.pythonhosted.org/packages/8c/0c/7c3bc6d87e5235672fcc2fb42fd5ad79fe1033925f71bf549ee068c7d1ca/xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8", size = 30800 }, { url = "https://files.pythonhosted.org/packages/04/9e/01067981d98069eec1c20201f8c145367698e9056f8bc295346e4ea32dd1/xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166", size = 221566 }, @@ -4863,6 +5438,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/6d/c61e0668943a034abc3a569cdc5aeae37d686d9da7e39cf2ed621d533e36/xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637", size = 30172 }, { url = "https://files.pythonhosted.org/packages/96/14/8416dce965f35e3d24722cdf79361ae154fa23e2ab730e5323aa98d7919e/xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43", size = 30041 }, { url = "https://files.pythonhosted.org/packages/27/ee/518b72faa2073f5aa8e3262408d284892cb79cf2754ba0c3a5870645ef73/xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b", size = 26801 }, + { url = "https://files.pythonhosted.org/packages/ab/9a/233606bada5bd6f50b2b72c45de3d9868ad551e83893d2ac86dc7bb8553a/xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c", size = 29732 }, + { url = "https://files.pythonhosted.org/packages/0c/67/f75276ca39e2c6604e3bee6c84e9db8a56a4973fde9bf35989787cf6e8aa/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986", size = 36214 }, + { url = "https://files.pythonhosted.org/packages/0f/f8/f6c61fd794229cc3848d144f73754a0c107854372d7261419dcbbd286299/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6", size = 32020 }, + { url = "https://files.pythonhosted.org/packages/79/d3/c029c99801526f859e6b38d34ab87c08993bf3dcea34b11275775001638a/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b", size = 40515 }, + { url = "https://files.pythonhosted.org/packages/62/e3/bef7b82c1997579c94de9ac5ea7626d01ae5858aa22bf4fcb38bf220cb3e/xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da", size = 30064 }, ] [[package]] @@ -4885,6 +5465,22 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b7/9d/4b94a8e6d2b51b599516a5cb88e5bc99b4d8d4583e468057eaa29d5f0918/yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", size = 181062 } wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/98/e005bc608765a8a5569f58e650961314873c8469c333616eb40bff19ae97/yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34", size = 141458 }, + { url = "https://files.pythonhosted.org/packages/df/5d/f8106b263b8ae8a866b46d9be869ac01f9b3fb7f2325f3ecb3df8003f796/yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7", size = 94365 }, + { url = "https://files.pythonhosted.org/packages/56/3e/d8637ddb9ba69bf851f765a3ee288676f7cf64fb3be13760c18cbc9d10bd/yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed", size = 92181 }, + { url = "https://files.pythonhosted.org/packages/76/f9/d616a5c2daae281171de10fba41e1c0e2d8207166fc3547252f7d469b4e1/yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde", size = 315349 }, + { url = "https://files.pythonhosted.org/packages/bb/b4/3ea5e7b6f08f698b3769a06054783e434f6d59857181b5c4e145de83f59b/yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b", size = 330494 }, + { url = "https://files.pythonhosted.org/packages/55/f1/e0fc810554877b1b67420568afff51b967baed5b53bcc983ab164eebf9c9/yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5", size = 326927 }, + { url = "https://files.pythonhosted.org/packages/a9/42/b1753949b327b36f210899f2dd0a0947c0c74e42a32de3f8eb5c7d93edca/yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc", size = 319703 }, + { url = "https://files.pythonhosted.org/packages/f0/6d/e87c62dc9635daefb064b56f5c97df55a2e9cc947a2b3afd4fd2f3b841c7/yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd", size = 310246 }, + { url = "https://files.pythonhosted.org/packages/e3/ef/e2e8d1785cdcbd986f7622d7f0098205f3644546da7919c24b95790ec65a/yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990", size = 319730 }, + { url = "https://files.pythonhosted.org/packages/fc/15/8723e22345bc160dfde68c4b3ae8b236e868f9963c74015f1bc8a614101c/yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db", size = 321681 }, + { url = "https://files.pythonhosted.org/packages/86/09/bf764e974f1516efa0ae2801494a5951e959f1610dd41edbfc07e5e0f978/yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62", size = 324812 }, + { url = "https://files.pythonhosted.org/packages/f6/4c/20a0187e3b903c97d857cf0272d687c1b08b03438968ae8ffc50fe78b0d6/yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760", size = 337011 }, + { url = "https://files.pythonhosted.org/packages/c9/71/6244599a6e1cc4c9f73254a627234e0dad3883ece40cc33dce6265977461/yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b", size = 338132 }, + { url = "https://files.pythonhosted.org/packages/af/f5/e0c3efaf74566c4b4a41cb76d27097df424052a064216beccae8d303c90f/yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690", size = 331849 }, + { url = "https://files.pythonhosted.org/packages/8a/b8/3d16209c2014c2f98a8f658850a57b716efb97930aebf1ca0d9325933731/yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6", size = 84309 }, + { url = "https://files.pythonhosted.org/packages/fd/b7/2e9a5b18eb0fe24c3a0e8bae994e812ed9852ab4fd067c0107fadde0d5f0/yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8", size = 90484 }, { url = "https://files.pythonhosted.org/packages/40/93/282b5f4898d8e8efaf0790ba6d10e2245d2c9f30e199d1a85cae9356098c/yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", size = 141555 }, { url = "https://files.pythonhosted.org/packages/6d/9c/0a49af78df099c283ca3444560f10718fadb8a18dc8b3edf8c7bd9fd7d89/yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", size = 94351 }, { url = "https://files.pythonhosted.org/packages/5a/a1/205ab51e148fdcedad189ca8dd587794c6f119882437d04c33c01a75dece/yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", size = 92286 },

HZlo2B;Y#-R!+jemgmdR>V4~Ca%etu*q$6x5g%! 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%0Dqnl_UXI$$if#2!jT5fsEhT?jEAEOkCeMw$W5)Q4 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 diff --git a/assets/architecture.png b/assets/architecture.png deleted file mode 100644 index 3911fdc21b97fe0ecf60715b9d6ef947cc364611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78435 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 p2XU^-#N#gAUI>N3eo}XZ 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 C)a0iC diff --git a/assets/cognee-logo.png b/assets/cognee-logo.png deleted file mode 100644 index d02a831fbf0433a187bed2cb0ea04de51d5fb9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3487 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�WC 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� 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�a19J8g*PZRRiTg2PXI_&pN2f!e(aH8fA84HRIusKJP0$Jkak@`a2 zpG#Kd6GHAgBvIFHB($e|W!O(|Z%vxg%$Ku9RXEN~D_%~Lk=F+^4!`%gNl#9gGqB^n zymz(pa@1dJ1Xt$D!9-b}W9=qrtc4)_86*fW&BGyBuX7X`o7y@R#i^(@i!@+p=u>TvkcW=&1Z@`b^g&3T`vCxnLf2p2C7S}DtIaYnL9CHLp~Wi%!bT8_&=h) zJRa)r|GrX0mQdMEWi88u?8_vwmPtgiOob$5N!f;}gk+hllPpst$ug1bX6$1NS+X09 zv1S?TjM;v#-keJSWH&E*aA<#$@8b$MY64Kfsw^3rv#s z;sj6bXxRu7iPBf<)HE{LXiBN%8K!GvbqhJ-|2@J!zA2*n zT+!O;oA+N~C`|YSlso)L=-%IDF^6V~A)eSC7b~qpP?U@3KO@wmsr`Ess z`<##h33;nwD1VIsxz>DM0`2q5%>*@H+ck^H`12qw14JPQ`$G)x(i ziq#%70)zCOPMsM52Qgh$C@XXzFgm3oQ^V(#bC5kxpyt$&#Aa^-f}w7yeG$FSS7R!m zofxVyD`@`B4k7sm2U)}1$krLYizpS2*_E4Xa-<2GKgyU4vj!L@V}lc{01WHJqB7V= zN)0aMXL=Wba*#2B14C*N(+0%TKgfxhdYxUKSnj?v4Ye0rwh8%bDaRI9E+^N z&c%t#TBQryo&p{^gW7%76y4zfXpGG#0w`TI%g z?~r>zS-P)M%sPydL$-JGecr$8Y0BroA4=f^J3R`f%zh^(?$q~_l(}F5CI%3dq}GL`*9!zMOhadYvAoP{K-kl( z&B5zC+E46ve_PsMMe4XKIF9x~7tL{Ycp)rm_&3+?)&c2X*ky+c7qP`ymCh8{t8{0T z%OQ066~wlZX3D`V>P@J_FiA)aDGltbhd?b<`NxwK@O7c5*J?Po zek+BZVn8O3%5f^4m1eKh#ZL3a(>}~F@D(X?pFFrN3ONyoMwJ&GE*_MY$`v#thYn0mmK}y`PufNJ5Vut>=_lquhl^Q{Hk_LY zMWaxgfoqL&j|*91zV(K^%L|#lvYsd~(8exE%hR!$Mr{AmG{>4sh8Qah&I8W8>w)F3 z+kJ<=@?UTTSZu!`Yg30+d<(DE%%P>>A9CUg34Obl7u+tVA)gr;LeIl5D9U69GQbT- zX}44;v<+MXnVQ(8Jv*Qg%%K1r?-EyGI77AoD|rv}Qw`1&MUck?yrdKz6hUb+GnGva zPC|#jWrXPxSao|nfMw*^-Ek1BPNQkd{{$=Sb8yG4)by~`lA%nQjQ96zSgIfdVeA>o zIllZAkRvd@3Tg*wJ`vZp|BG;UPuLuk?vm4#|4vJvWTMaMdEGmYU(B45{&ehh>lJy# zab?Zs$znlbwD-_Ez%?WI>fonb!)wz8>;j>RQ0XSj!S9)?rxSE9XJNrieOxq zv+a+Se$0^j_)^OR*DB zsNC<{5RtmH3Pf!M4^K)T2vuqLS|`bP2(etR+6oVQ6GI;7 z9Oz+pZ)Up0?jNj#pHa>~PYGrC`hMW^)vFX)*L~K|jAL=%H6gbPPa+NuZW@Fh9=A0n zIP(2$4rmP_KP}w+uy1~#TJnv+tI=x* zHiJH$741r&OR`-g49KG=jkF=ZElLr>=nYqf|A4$u)|8Q_uUO6%DpQI|;00M@Y z$I>>paINSERn3g6SrC^=4`nA!On!&gXn=1Pk^M<`co#)r@z=AW*B?9Eb|e zQk>+MqFy2YJsM_l(NkcyyVPmor{H>D-kgHxz)ghAjbw`aPMk$e{SqZWySn}`0`o+1 z{E<2M@@crW%gPF(k;(Bc|Nf?f!DeHmzyk5s14`6Gz%@R9C$Jk;3HX%!g%7y`AV@_u z02?P)1G)sUy{RBrWZy0jg)F`NL@m9tP%7flLW;ZMGri45w%C|_AUAZBb?904*7t*_ z*_UIL6SnUVu6wyqmsZCtf##%%stior3Z zbcM~Qz51wBpCU*^T5pu1PhR!}8~nn{;+W)xtxbD;)2q6SqwU=(!I+V0H| z*-m4NN2|VM-Dw=qSoTFQ?TD}tQW|rcu9optOo=cw-n~J9L^|O$d?vm`f$R{|tgBQY zZboX6=2*g9%np*&#_$dKbE`nLJXkM!cXiDBlZJdPGK0lqZIe$RpkU;z(`Is0`KR2U( z8b-3eLqQQ2AjhQW#JBD?pMqS?ibGhh2;FI>uF*L>jz zfWM(3t!Z^yU)objpDjys23(I<@`@D_aHu9ne-Uz@LDf{Fy|Ja8a|nit^VT7`WZQOA zwmXL%rx#L$3hxuzajWysz9(VFV_){Rvkq(?PlmBP%M>GfLBkClxH33U3nS>~L3zXZ z5&}gK9JAWF;S~Oy${kfPRLG@OQ{LVd2pU<`b!B-`Q1f!+J264UVb*~$|{eW zxoB!Goy&`XpuBQHmjxACTKi>dBs2f0`(_tKbmmiTX;tzl+NQtvFKbWj@eFMDr+xccP3(I1z6ew7=j@zU`Lm)u1J70%9xWAT?fGSw|}8&1SB^$W1Iv@zug#KP@=ZN zVt9up_^Ucsv1?_tMzA=ZD{fAsRqp8h$WkOcD8eN`duOZRs)cOeOQGL?V{k4kxzY=- zw*o?We$(DgGrw@>jhtj*kCI8W>9v!0M=afe|L-=<>#yTTyRzDNXmu71OLq&ZMf68tgfbGuykkduY5uCBZXhS7I?lD$&2YH zVy8b^bFcRpN=O|2^P4>~`Hu?6bFC!fFCrn_HZkVs7Dx3`6pAp(7n12MZ^t4 z<(A)SoJj)t?F8RmZ3G;wuRZBp{4oS3C(%}d4|Xl~*Qb8f3xFCT{XG3T&Y3WVW2G;` zl%b0grK~J4_K@CePDAM3)eRKsLTwpo?FRJ69jqg21v4-{+|DyHyB8n z36_H5d23AtbV2Gstl(<3{TOf}jg@)(N}USF6<@4?Xe(Ps0C=()P&2{W{CFW&-aYh4HD=fwp;c&=E(MsH_BghT<0K1EF>kw#=6(uFnm1E{ z2pjG~R_(J@I;nDgM=m=!*%#iNU-OCr=X{T2(ogj2^2w!aR_nNhv{^$FU(J=YU0R#+ zl$Nk^`Ll{qmbuamtzeeVeHNO2dtmTK=s6uHkw!7$5ep3;f!%M%t9|_>1c>J{ey{ZW zFw?@SQEug{vX=6Y(Ll+R#VLB&6$=*#*Ajty9`{VRbZ*+I#aE=r%C5g{q+T9hAP zrbP44!T~K~)Er4Bg~2!av`?SgAXKG|9=v^NO_DWjRLH_L7;GG07=C1Acv$?|P?8A) z9TAN+^7F*%EZrEo#p1Ppeu!DM{U!6s4was@Drq}{uxEUC2`}>6DN~Y#W0s70x zMF^sSQYV|e0R#;k5Ba+>e!>-YX)Diw@@{Y6%&vsFm7K00Iw{LgmKi66?-MxkW%B2% zPVKxu?M^ejhP*_dE1`PaNTX6{F&9G%ti);mn=a#! zH{p3`+yoBjOqZ~cGLsw&km6MT+F$=(l1Cv}vHPP{l(ZFmRw4L6!vQYYHz*y+Qg<9* zc-ColsvU7~=76`Yh%pzQ$<55hFADY@c|V6Foo=0ZOhm4k;}pT*geEbh&r30BjEpm% z^NBt}L#(hE)t-7_ET9K^awyvn+o8EC0cDT?K5^48L$6-ARvfT?m>&FNG`(?pzT5lq zt6c7@8=3+e zV2U81Z}AnLwR7uwwrbNN2GyL9(0@mnqA8KXfo{0kEq@`A-}g-A0pa&$0{ZOMe&6ZM z9)xC-^RJO6pBq~ZjD$-gy0~&xCrS6XjkFkLpS(Z7K>?IuCLm}z(J_Ks{S>l^7YOCE zW8L8m%I=V>dUKE`Cxo5+Gosd2JOaY>*&W=C2@$Nk8dPs^mk|?mL3%?bRg-27z7tys z$#QF9jW1d$y`1Q0du!)QuZv6(_P@&hr7b_&du>BxZ@*ZcuU>CQ?-?_^;K}A{RQJl{ z(7S8^;%V3znmTTEW_I5h%d7?ikRuG?$biVK$+J6ZwB2jWzh*+ik(S`^HIqUGjgYF% zKTr(jQ=r;AYp~)hceC%W)4JEWdg|ypqW=ul`1}fM8P9Z4A`(s8$4>N1na5j6HM@%1A$YCJ9Qj?&w}iGO{gImZ$9FQJ&BG1&g0imzay&infA_YBk2iE z=YTCpAqFaK*e83t1Tr$sH#2{7r#jgP74^H@^{uk!j~_qALSkd3J6Qh?BAs>*#0d;S zU7VJscAOCS{Kyo5>wIIC)@{W~yPFu;1`fZ4Jr(F(PZhLfwZ)xbd*y98v9!Fq>ie1V z_gRD3AD=acno($kRKu6T88OeR6<@ZO?XfE56$v@00;miO+P4dsfo=P418_=Da~`pK z+2%IO&f}*W>`r>~g@P>adD61G0rQc5$d+_~^K_VRZAJu#N|IY&!yXq2G%+un{G^TR znP;Y*hc(7}3G2AnP4$1p*L&t#(|%2aq|m1NQ0%H#N?&(drOhRz|2>e4gk^kri-ZYobL;@}AkA$R z9^%H&MM-IhlH5-QBL)H( z-6i6qU8L{sicm9N=HxVdnvzRr5i_4sMdhZ)!pU60z(3}S?rLgC=fDw zV+FRt@L~3cjqq%0<-Ob154bpE-|Tr^Yf>uqh7TOln>^kBxB_A;hDMYjPXqR=PviAM z58SpHT9%%L zO-HP4frTMCdo`C>S=vv}Dkz*d@YsvFVDqK%gZfSp*h%(_jI#6T#(zv?v9sl1slzs3 z$c6#ARdC+974=JL^yYCTE8qJiknos((2ZqXHyzp?bJFhL5KY_EL2x~ex*!((Cv0(6 z_k=#fXWAH1&zOyo@mu<|up#`l;Adm3^iY^Zc`0J>%Z*sM^Llb{k5Z?aBVTTW3AM)q zscj3tqH>$hH@8k~$7yP4b)iQ+w_srj5%kFL{mDru43t@Bk1{&V#65qA7?Dp>)K!Cz z`Uz|N<(&J(MJNzf^Pe-`*!WP-eNrD*&*a<8_sOZaE?p+iOt-bON=WTaSKgjp>`U(K zBf`Y^AdDSBPB3{L^kr~+oU$`ojBtNk$E>~vh1LHvLh3d#&<+;{;yNNz?+fB+?KudW z`NW(GFh^$HKvK!|bBW-M(Sa}N$aYQoK)UGl_l7N+!5_)S8qeQ^k2PN9xik6E7>Ocn z=CeOw-V)Q0fh~V|0gYFUFi3GcjlDDe&}Nc8LVI$aT_<%IlFFtmaw*(aMe)6zMLM#v zF4A(~BUvLJ5+Z-seYwGDKj;{I-&2J8K@6pIh5DCN(z+SD)iwbvIVF&YB;-||!rMha z-3AN4Gqi@l**1D$(i_8|X^qW%mY<3%j{ITpp|tKShG_{K%PPf|*NNAs&l@(Gs}dsY zu9osxaZ|%RkBM~8GaP!;ufGGZ)D2dokH!@TP6_o>rN^3$T2wKRfQJnh6H->yO_&AF z#e9JUhht}1NG_xi{=t&@*_?x?0E;dZ^7n4`Y9EyX|8$R0kT7F;%NP$0Vx%;ICi&&W z%7Si-QpkT0TQ}i}%QRLdbaYGP!i^IiKXqIOhn+TiHfAQc}6Sh&DeaJ%Fg2z#`&*I$`kq;2Rvq!#hj%bLGjU& zl+x6T)ts*ueFGFT1XoG(Cxk~%h)Eo+6;9dJ9rsn-c7bWVGm= zVZ`6t;TD{JyW0E?z01E7{aVn%@78GXh{e6OtLszeO=Jz<#fCB)t`{?AUz;$4a(lx1 z=IYdgEMo1Sh&Y7u5Mp;i+h^+fEN5jarTM-&u`)$VqY!ovnuRa$HGG>KHV@ccH_uEGw1dn)m#Th7` zTN64aM_TGeA0zwh^3Ay(`0vMY>MCHHa5lHYnEggs7jGHyJz_b1c3w8)8E!+m?-NqT zn~=9{8|wjO&D>AYKW;uYc$8q zyK^i37>f7>vuR zJ&v(p)XW*D{mNVhQ4GQl-e|1>t;ZV_qQ)M!tfA2T&r5As&p96Q#zXa=m@y;GeAaie6my@d-Ssmjw%aim9*mcn?2q54%i_6^(g6}dW6$gX zcQDy@4Z4mRFe8bIsEH?azZSQ*J;$~bw|Z&rZ59eJEE7nMIe&ozrvdp@&3h3N;)Rp0 zrE4i-?gb4^^kk@Y!@lr0eE9g$RG=XdxSP9otbZN==i@dZ*zq_a8?c>I|M6H$>mdvb z{W;@Fu(UN5IP`!;jF#MIK4TesQyhDHr$}hTA7KE?00UlbcRK6$KPkePDa|Lvna7kH zqAAZ>i-;~VIgNW$G5-BhoZU7K423$@^PjD^$p`4EQl28@ew79UdLvH_cpJBq{=-}# zVSD0B8@rimsbmS@$Rvh^MOh zgPR&#qyRli7_XN>rAE;PhiSnZ{0c3DgMfXM(>J?JMdx3u$Z2|eyaXGBS)E$1>)xc+ zs&W`G6(a?fEVff1f8`0)sd;?z3>Tn8lLNu-4zb_>Kgtdv`1OXf9u}$S#qKm@?m@_;5R9aFgm}w?N+|e90^#z-U(OjtRmYh_)L7G zCK7v*aY#YU^u=_eWjmnN*WtFIp5VQM#f^_CG;DC3h-Ll(QHa`MYV`Q_Dp&!-dZQe* zxhg<*F)frwHX)yO&#ViM2<}yRpYLqs6*H5}M#3h9w)kotXn4+xkFGSVjl!$fgf*I^ zpo$Z@FjjG?*!{J~{*o+5>-&=|O`6ZE^UeHgXg}H1#*!OfQEc(@U8Y9&;Je60rd$!@ z7&)r77; z%)SA!;WjFr6J*=E=c$o>NcFGI8N0T9g8jztP9I=f#xb3IbkKCD4-s%O=&5r7RlMKd>sCk6e87WQ?GU3J!d3LSX0GT@I( zKNyC;cO9x@IPe@`sy^9?)f*UPB%>?Y(g+iE8`>$BorEK3;%zR}M~6$#6n38c(trMb z1O!MFI70je-Z*!dlAS_B-`h#mK9JdjIOe)7_Itj^h|oy77epa zkT_Rw85OG^6^!-H-G>;zPL2GD>uSw8A5Q1;J%mz2gMDnQ^pj_L1YovTo#xQW6XZU0 zTtv@N9^3YN+#Jsh@dGnAUlU)vi}~H;oT<_LQ(Bq7X$sm!TH*fT)a{=IcTQ;oh{qg& zy)%VM!G6f_E-Wgag&bdn)5}D~#HMprOY3@P$N>=#VR7@leYc&mTx$<@`J!vawvPkN zdO9b4`>!yPIaV=XpS%(48z4VLXBJ*EEI!r#?p^jp=PM%*(^mo0mc``i7|GD%8fOMF zhybb<_bfFk?#u-j+h851Dsj17H#PgJjq5k{fhoz7pppNs*M(gmJJAfT_B|tCZA$7R zakXb?21$n4$v%=a_ufTOD`}W7mR7VAfKs!Qk22}u_V7-Z<$tW+88i^o;A})!nVkRo zE+FEjI0QRCVA&CFLS3sGPTJ1<#>xr%JBvs_<`_qFOLB97;NP1~i4P_;eC~bPzfPnH zA}aK0-XWbw(tx)l*eYZ>0T6b2YX#_Vleu;z2pVxceH96z@Ji^!*PAZ%2}yp@LZc!} zF*V|d`l(&@#o3y8nOw>%ju?o&^lZhJwGjdGS$m$*=j?=723YQI z5k3M9EMj}1q&e_C)F~J4oHqjtTl>k}H6^BgP>zTgQFit`XPB)KXZw?dzZSd4cd=7C zmbjYYw)JC4|& z3W@~a!4|-xhYv3vewqAN1Ppox+2YlHRd3Y1f+UiGBWKg;>AIt+r(-@NQ}ItNE10#> zWS_VGb!(Lh8Q%kbsgE?)EM^&{uUn)d1%>?0dyM!r5KnLJ1*I}eom*L@v7FL{Ul9$p z&t`#yC23sQ%&lKbW!*E&ct9q^ouzeEIvSRge$nNQ0I494Wm@U^7m-{-RB(h|{5IMs^ZX+5FL;D@x%FMgU0>CcGjhCiNJa1V$~l-E2B4-`bg=((Sw3oPY8xMDo! zJG$0WN-xyq@FcwY5>}=exBOji>FFMOH6xh(GfWR|{cvlQb)|dv-EjVK_Gj|1GZR0P z`kn86b|*tEr)k$WqqD%B-H5qUDC`K&S*|inlW|X2SagzjNHZQS~T4 z(;v_N9N4$BHms@r8}uVvE?qmNHn#}~!x7lR{-dibUj5anxR>@%UerOIP<{;m8mXOA zQTr8t*X0?AP>2nX82Uqa6-sU2l$hXn(@GIsQlSb>q--Asb8I zq3=n;S!Lj(tsmq026kSaJ%QqQ{>&Jz>z*($ldrMU^jl6(QSeCA-CqMmPu zje_Btnl{&}2=9tsL^lG=F$cSW!O5J61rbCtCqTeX&2Vgri3iC0|9o5ivsxH?u%hr@ z%TvIiKzVDVuVYlh zdcB2J;KKg824Q~`1)?Q=pYIKvKK(m`$kjc_wnqRhs6a1LsZ_Vz4k@Go7Y3`-3lm*x z*e66PjMjENcoh@Mstek%8pu_2tmOUz%{2L=wm^PV-zM|?JChnhoemGq6xJqphg|Lu z>gwnC^Rj`^=R=M z5RbSC_#wLC@M{YIp0i{jdQ3lNe%`DUqcj4VO2;wTYa72Hes*_v)gP3;&OrA{!vdKH zs~BnVV=RrCx_&!Esf2Ezw2ac7?~QkX_MbG`2H0o&eYmGsY2jSVFzk=p76}&x6khHm zPm&jaL3eb$lBXeR zHnC;(rcUMMnSwfIB3d$H-4+`UYJ_f&ZF$|EUlq8<0vEp?Z^pd2eP!=Rmf0&wb3dSm z1K_j@4*?yH@)L{htNhVNP3H#ARlan-Bg|>f9_xMRV$>%&0cD>F)u0~cy+PHJ-1o+s z&4Oj%Qi*N$F-YJ^Noxg*5J|*aTtE!;4yrB5eZ9WMZ#rbr!69^XHb%ng&$RRIDkdT# z(Dd#71ms5-i->~^E9s<$u+67LN%L_*K>1mO6R_I)^Af1uo6wJ((mn`VeQ0vm@(T~U zZewdaWiVa}iTJ7ZWKt{HRM`#aTWd|DSh1?4sCPN9xs03Om<<~nJlDjck|ahn7W}Ja zvh49qXPWt6InB=q+1tDP&Ut-7+;YkXUjB2E4OGw6k?5IGOtSx)era@6Uwqpx9a`5y@vO!oSJbe6vEBtFYO5ZY|Q;rJRUf>U6ZV?CsdloOs z#RTUq(I%IC5-I(V0i3iza|fcjY)<`oQN77jB`dGPg0j~)b$D_G@l>zvt+QUnXT(EN zH|=C>NkI=J&CkGVfO)NtQ;L5bGl@W)2NstHe;|Jk#KbLyIr(ObM0pTw%41FQ#Xov) z&CwZJl&6cm`B4-E*Dy8{o*K_YU%aJ*9|?+=${CY{iGquu!Fl2360ZIdM@@z9 zGbYVN|7M^B0Z5Vsrbji=5f=OVaUxxj>X?4%L5So6|LcD`C@3q?h}qFBa~ZxifW^U`he_A#!QP?=7__EQhM zoAidRqVJfYv<`TQ6cslB`0Rd{ykU+1G*fJY=bCHp2zQK#l7q<%%Z5u4F z4YN+9kGCKJR>(;w>2tN>7pU}aE8B6+sP^ar{@j9vG{j0_LC@ij5yd>GN+NZYka|gO ziB)|qq+bYF-OVCATV=4L-c_Q?;3@ z_rw$vANp*SKL{HTq0O-B(9Q|?Ac5Bk4c{edQB8zxys}B*`j`muW>Y>v z{F4u#qtEDF{r9@B2xQubclUYKZJ`gTS8M|K*VVD9#3q1z5KA`wns(v85sBVJz#*3b zo!|AW$J50b`@Q_7@7I6<1B1%3hg1%MoDo&tV*<(ze^n1!3X*{TTV8&`$}Po+i4R=) z<(eu(36|j9-vV;2M0>S}++PVF4?CMqb+~%m{rAa~GXpD>tKS_#_y=O96-Jn7+cFKwDck6nQAZq=2rU=%-46E zEav+rUvuGCwpRtjQPSc6-k|*e^ZyU_Ib3Fvyc_H&`N{4}fkbS9(K(hj33AvyKN`Rz zd^hNFKTHnxBdA-XbN~C1Zp0NA#wa;$(`_42$lJ5D#r53YlSrCr&jV0(|j~ax|iLb%Uag2DBpU&y?8XAQwx{z}6M~W52Ob>r9Vl zRLVKEUaTcw)v?-vqiN!^HFv*5cGqX-TNOKiX&oP!chI4g260YaGvc&1<{C8yBpyPp`*9V zSP|Y7Id+g<-LV|Nsgb+p+aZ^~HJlFB{0mOeG7w&;gOyD8X1+MgHtKkK29VvIb-8E^U!l&fP(t4me=vOBf$K=^i)Db7 zpUH<{s+0*g)RNT~@ksh|D|tB2p>^Bk@i<`+s!vM!Q|f%e6ck>O5%cIVg~c zmtcT#|KIgR+kFQs6Ije^%Tt+F^SPe80SY4#86pu5%S)_fGg2dYImg;Nl+x<>#`or| zdaI%$(nF3nj)|@`C@6JS) zs)4qZD?=SuW$wx5o?l@amhQZ!kxckgTkrSX&hM#GlQVBIF;?y#;b6VT`ug=;B3cXP(p+|NpJ4lY0SN5kICkto z_`tCfXBvBTw>V!fd$Ba4OSth>i=6g&xe4iQ|1C6qiMI?}_3Ysm#bOM&H*T3%BLJ(2 zdu?w|H^LTx0G7D@(vqUj<}#3f7nXocRH1HXQh0c^PuXEy)^L$1WroTn-+H)mC_?EQ z6C|WRN+$XIn(dAjxPSB0#rX4HAJtT;L$wT?hREelZrKb$i8p# zApP3qV}Ps#5w^HrTYy5a;;Ot~M)K-(+&%OA)aIZw0za}n(S3e}l76{XwzuF(jVCLv znl$YS%~QaWM+abrQ^yb2XoCW;tD0EWN{pHnb1eQ%3`PU_zfi^tm zLF}hU;VWCO4}Ug@u&#?1F$rYjZYPIM1o`BX?_X1?`1}IOV??*S zm#|1#DI=!nsV5=NLsB^*1AVHFJP3 z-T0r9>Xe%;eRqW?%Wg&|%V=NX)8z7ZwfshD{w^i<=HJrD0b_DWqCXjC_tT66fr&~W zuh9>$Y06{BGEXV0?!W(=qyH|Q67z&iz{#i76IZqh+{vm&txFU6Uw}p}ljIL=V9eJS zS(D~1A1H$nFXS0Qw7}?XN@ILvsoiCUfEBD^<^sjV8YP)|Is>j6a z_Vw6Os<}Btqy;3E2p(ND^SOz+f1{EDp=GES+G8CI<83!1SG--dBK(|GDb96)*3&FL zJ<7e$^pD~CJ!cjvi7-bhkcM|c@ovQ%?287|jYTw~TvcEeLtRAFYr*K@d4saY%z#q! z-!KAL-O9P#>c%IA*u)8t1^7yubQuk8MhgQ(fTx&|dr55mk%TrCo z!%y{~Ap}GKV90$$E+_DT8(d#`%T4jRwy3Ii5T6S9S~&i zFX)pRUhr_+k#Z+9Q78Rd_v1^mz`1+{(T`q+9vV9xA^}VP&L{;aJyb{`-obU>gryp6txJ=Z*+wbT@oFDaEgXz3FQGjZ*HBkJ0&2)^bs`;%Rb>oAzzeil&{e57#pLC zEBY_=S#*SYq1IfOi8U5j3IRav8d5sHy5ffR-**jXITrkp(xL3@+ed>EByQ~Zt(MtI zct)o1Imcf!4g*|hc@M|XD#6(t(9w+&L`u((UqOYM*2-+>b!wsn0 zx5PzYN@@oOMeYCrSd~AUvh&FC@SU>nN7f;(*{RAu;p#sBObviR$sr-z`6U)CuM3VJ zFtzZ5p0`X?McK}n@s)d`%AwV}?>YWNL>vp1J_i6Z#sYIm(lMdZNvfT>pGqDyiR2C$ z@wnHiEd41F8^tQlz_{Lkk1TzJa*ID}GtAFG>=lo_T8zy=qA;GxKx{NI^L`?@a(TXc zl`GHq*MDnpFYCd&Q1P|adzR!gTFakP&XY1leHb^M!SPk|NFxOzpMj7l)vbY|h=)5h-$P1;l|! z8m#yYK_nt+iO@m2UK}w|w^glKGBqr8w|xH72XAaLg!dU-P4O{vXL)c;EKMT=Ac?M~ z$l^`fM_O`$)|~~)gH=j3S{O$q|C-J8#ogAiw)t|sY~C^pnPTS606XWdvzF&5bcj^y znrM=7?o6J4q?pf=P*rpF)yhZS_f3SDq>>MI8vS2MCrkR`a|A#Mq)6Ssw*$48r(?19_Rx1D}|6} zZUEoDklA6HBmW|ekZRPIG9nX&vG}#b`t2;0Yo#rJ5aASkG~_ z*7GWKk1tNuexD#_gB)nLLj|v61L0RZxfOq^zA-&^svWHsmMG%`RLWV&)8vEz(oP~K z=2~}w<@j;WiOOtitBe0V`K$NOJGZomHKP&CPFTrzU`GKc<(Jkb-zfhMF}lDo?=nkR z4Yxx$Jlx%HXCkMsbN{Y;cu)p@_*&#a(hDXU9GV*OH%{b!^c^?d89|J+|0Lo^$d0XggR4%}s$cPy8eXJHzE)&_ukFY)MupUx zxyw2<8Zlqr7(RcZ;jM&uF;FfHRFCYo=Z~H>Z&W-D`~0Z3D1R}=Esj+-=rL=u?9wC5Pnwq%Gj}5R5Yj{=*4;qwYuFLtopAIOd*M#gkzjRcx{x&#wKJ7S=BM!w6Y$kx%rp zS^W$B5Z{Bq3qHeCHILp?QGbA2O6#@`Qb%z=ETwt2HqdFfz+gtP41k~p4 zTDfHYq|Ks1<~1F>y;g(^-oBYQLkJ#B*aRA=6#7^rFmUvjUx_w@1#bZ8L>KE4{Xx?u z0#moXMJRCcE6fBe0L}^gxAi?93y{R420zeKpxVb|p${y_%ov!7(4CXZMV)x&X`u#I zp11`ZVgGhd=1bJ=AFM^nR^`KO)MBa)TbvtZ$pSl&7O#}-e>6dM=kWOKrzC>ZK@D4P^1WNtUQV0m{tpQkXMSD3 z_WfDP0TY()%no(35$62w*5ff3SvjovmcJtw3Ct0WJilbG0E*3z$}4wRaUAmZ`S)1C zSA1si07~wJt>DQpOC}zhUs=BV#=pIjKR?$N%RKOMy|Tzh`TP=H-e)V}l>3^wDS}ifQBkUZQbdYIq)8JI5P^`0 zfGAZ%mlBmGAcBZAHK9jp1Vp4sAan#0Y62m-!~1^s{$G2)@|Szpb!Fi?$vJc8%$eD< z_p_h9w*p*y{4OD016gzYx0Sl!blL)v+H2Ro8mK+J3{rIvziazGVQvrQ-VF;VANU!{ z@4+=yjrsH$TA(;LPxteqK9DdSI@y33Kf4L_klDMKcuQyz1JGcXJ1;xRotkcdh!tb4 zF?lW4l| zJz{hE_2b<{uv5h}3M74ARl3w0^T~!_>mWW$kBT9bI2iXfq@_K7#&(*#uBh>e+{)#4 z=^1ytbV#~Dv;n^d3w!)>sLa{aWQ{=>yt8B8QUiA!N6HVwx(`p1qVMDO2yCUy>>(p9 zqGV@&^Mt@?&NJQ*#?n$_Tbn0KHcelS1(R=E?2-Y3V5cs|`@=F2{<%8oG;8JNP88dC z%eFctIH{r9gl&P|X4yyK{%O`!D-j^h;xOcvgRV52l42Dbmo_^5KHK+_-|?UkzmLkt zQb3_j``(r76$_2^zQW6hQP7dQbML*(fD>!X-zYcGV3d=tp?LY zd|Mw_)z-UxVg?%8_2H6z%sy4pBhiyL9#{e^khH$S&`&CzTQ3z@Cc8P#lXt!LFv?UK zZJT!r@PVTNHOsc$A&_PZ4V!}G7GDijuozGj)yOU0QV2P zVI{56)$~4dZMI!v($4uCAZBH4ahTWqG-Wb*rE5)Wp8S1n>q>kOO!syoVwnX{ve<%^ zO1kuz1T}6)0;XTO_cuw>uEAlUivbldPx>{U|5*-`RZ@yRyN|gk!#(SEGU_5))7)YQ zxWO|05)!cr4pot2`j7Z_M3XhfU|b10D_`CFKGix1A&ktkTFGxJ)Z0#*>74s+(G%IlRc@n8K z5ooRoEcwO6#H91(qXUsM7R?Jn*s@aK%r1+e#OR1flnDu_I zwBEb@G2b(M$MgL=Zrq4wGoG^GKfA4!vW|(odJ~Kt@&}#kw~iTeVHf~$<~*{OFF7>@ zq)@By2dOzsIbO=#G%br!NRwA?i8#14JvG$;Lj6sdyuVGk2s`5o<%IEbo;4-k+Fyw9 zTEh+KG)n+z_gCt~e<6^;{)5(g!YG=!%a9L_lulEM&d;UYO()27LqJ(pCxAa&F6C|_5LODCjt$C|+NcD%VCSCLNL95rp zFHU~^aktG<4GwZ9S~~JXlujxC5DPkcc#<94sFIx6)^O!sKVE}7^vN3C2DKDM=eeMD#_FudK+Im8;KhRFkc;8Z0&i){%gKqG z%A17+$?0tWdQY5nPHZ&OxEBpfyJIgmP)jp7k}w@m4jyFIjWLFa27mMF$aR|kCQF=p zxW61!5c)j0U2&fzKKtXHvq=snE)ITLQOwwuo)}Ar&3@i)NMKfe{LS#1e$}^pZMF0x z`&e6znRv&hK6+b^dlWD32cv}V@rU8UtU9A-sv_PJH_GJ2e+n=K5)+i)?z7Pmxi1AN z@c5!<5#fNW-XoIMn-nIWIq4j1q-6;QP=+Q&zf3k#Imq`BON4q;XId3fDjNhd3myC( zLyP=L)1b1Qq=`AUN>gy6w8gI%W>`6PvR=>waS7b)As&_#ptKOR&fe5{?*SYJdlQs|1vDk< z@v&7-RS=9YhuW}t;Lw=a=*K3IVew^UGJ?bHTlW!(3!L*x&4+qgjK;wW5;b8qg_AjQ z?%zC6d8?;!h{hIArkwgls%D{qe2VP8n04u+JU-1lvH~v6i>M`myGY|l;{s-{ z&nELjYm{3x&|mM17_zB;WoB1}xrWW{2FL;%3U0lJ9mLOf;H*e;hCX$DWF=svx$F`9H1H zyUpG$r~Q&zrZ^brlxDz87Z2^8PfP7(Q?~qe5*{4fi86Y4-FWsqazuzr232$+ZY}1x z8pln>*!#IUiI}bGF`!3oDl-Mr@aA-q!R6sS9Ly0Rr(d?aaF){eureuR*GI`V+~_iS zGuJucu|r(*WE1;>PdcZAT~f!;Q!~CBS%Y7z%rcW#^wl12MHdscgByFX9ftcl);#*& zEYoZKXBxrlK7duzHJ>z7L8aN)?JBA$8Trouo;cS;37r2H4hqCa-oL(0*o4HxTu*zBO@QTjnHiO=G#5pP9KqtVW(X$-V1yZ8FT@5^L8=^vMgxJjrKGOK@Eu#fBZ$XkYw&KZ1@k>u^K$dp-q-*s zQzyM*axm@ftNo-M9j7@jPSLc=U_fNO0n!iO@R*%<;vB*}yUwvM@Aup8g5A>TG~i&5 z>cQ!;@?O9HlH{E?K}mvCDR9G*gw76qsMpc5Q1i{_~FO54+v-+{#FhI z8g~QB8yYfHzM?S4t$b$QNr0UB9ed3ECW}s=vqS*I@gjq9|Eh)>>$XBjcBN0`y6xfW zz3|`*T6jNA1&3zn7oNAV9EGT~5TnRQJMqaEU<@1tzVdE+5G^brJ%P?R-T?>jbh!<$eP;fX`XfFKH9hXDw z)?TicMpwq=)05QhN_uRz;rle7FMqS5=iYfpzWcP4?#v}&&U$j9fz;QK_BpP|M@DTC z)oRziu}0=Hf556#bEGb4`Ea7{7GIo*uE0;Qdv!v~_w2?mvhpfKg1DE1JYgT63L)0} z#Ra+(cojIep-!5K&f}6fkxDm7(09(V>`EQ%bd%&M@~|5HJq{8d(+mdr5g$b~ehUKjaycRtv#@elQ;FrWZ5DZq@A$EqJCWUgKT_P~q!O;dEG& zq%EX79!vGo`gXtuOUO+_7jeln^x<^a*mXykLEJynOm?V%XwGJ%GYPr%Ww@(YN59)|~C^k(qML^YgO&pQqsJ>^{Vcm_&7*u;iwiZ70A=sgh8 zZI7}@lahTUVruZ!)h9J{CK|f)>ZM2;%UNe#Ew^z=k*2%t#yX<|jaO+?Ka~?#`$8yb zZfT8oyT258klztvsRIhx^}Ota&t6=gPTgSb zyzg{EKK=SZNS9Ky%~)DfyKg(b+830Y(|i>F|T?vJqUvbaM~6eZInA70un$@mZtkvEl{dY;9EdB7_?^X1%;qwpk)S z`o?4%>H>-1fmA^CDcs!LF5)ca;xD<3r)TPQ5FiUnv1MMRs8I919lDPPgZszX@ip=@ zL($7jFxms4{u#+I5A5gILSYEDr~-&iQ%R$-cS1BlyO#mh(!fkeMI z@uQeqva8spCeh>SPwo>xl&2eNY<}^ruH0>Y2mDP5qU;a|1n1p*JayCetkd34Tl1Q? zdh?!8grvqP!ypE_2~bEZoOtxObshD-6Mmi5IoX4OSg+l|RxdL%w>05q2b4;e5uY#a z{5Xy!rD$RYR+y#;<6w(SVBh`Yn_48gFy-=eY_Ec_tm!44ow9&Uy3iQU<5$szs6>Oi zs;}-yTpXwi?wqYK*s93kS6q12fJD4I(R(CD4oj?&+Q4qa#gi5X`j&p$UpvJKV_T5@(Ca~1zMG1>X5>xjNl z>jTaDsG+e0pMYv0ow8@SEBb+EFobgMT)etm7iZ)o3+2C0V5cxLoeBJ6re z)V2w72>&oMz|jyP&|VvaVnSKkvkqJ!=^O~ zLvGXH+l$O*iCzZ*ktCv^D^uU!H+FlnM)tOci%nAuMG zw0J_~cxuV51LekAW#sqAtAt50`N7`HkCzJAhrf1G5+YJ>6-AmViWHLTwbSpZ~ z@Q}bGg$cMV{$NLR4>E#IUA530kK~GLxcL=t$zF){{(9^3vmCaogL}9(+w4mKGh$$6 ze~Jv?3*>ZP1TP#D0p^tG64@;T@HSWg$WqpWD85ZEk^3!Uw}pnNOr`Y4ox#RjZ+g`o zY@zGIT<02?CEA*3!uEKAZvg<^pqD^e`K~E~p=O;7^7s~XZi%ji7EzQurg>ZWj=`Cm z)FQi<#vhGwYPTGF*tB#;G`^GP(tBDpetcD}qTa$cXsT`nxXMeF5lpA%Nx#oPz^%|m zTN>zM%MOBUUTo#^g%=luGj0Y{$31A?f+qKK@ZjQcWjm9g9cc1>G|Cy#$i#(UkxKw2>{DQm+${#0WT(=HtY zLi~Z(MC)dGf(*pnq1AM%v(MQqotEk|u zjO0zsL+4{i8uZQ~O}HAFpP&ExMvBok*YlhWrEet4cTzssO$+@2c|B#Bys>i!lz0w= z$$ny52~?7tn@3P4$Yhkryy=}o-Wo8ffUWwMFRgsVw?YOiNRy*+N#P5;;!5S%xo|`A%-OWMxk!@x3hckQn>A>Q#voWveuDl>Ml>@S$ zVRy@GT*O%<6>KaQ`oUyB+ZSL0VRgPvL{)J4Z#xyp%?MJW^sDUnu#H#y3>XB2#3dj_ zj$Wg8h)j}AUP$StEXFFO)&W1R+v~H=>}p#?&3Wk@zWejJ&kXqjUy}^-7Jubmuw9u* zPm2aVMdzEpo*g=S@jq0DF;Y?sHs3pSCRuPt)aunDBBNq))z2gI*N8V@&}wU>nM<U=4c=3nZ+lj2u?0h?Du zwwvVfiLelSJ_OkB5?N_eWVf1^!%XzGJ`0d5n0j`B->*j>ISevy$Mxt7jr}MIr*y#xZi4C90OQt`+HCaGdNEZTS!VMo8bV~G%5bh^;AOU_@jd8u__;ji73f8bS}xu z>zIelq!zlmvh&(gpCp`2@)3e*SV8lVrg*jKs#5}i=^V^`NebEp1}}6frdmZjFWq$g zhE@Hh*-ZHJVF=7Y$45i*toD-7tx~V)O}qWF?4wWIY@HSRfP!AWeE5%2^<1_XNv-mv zf~bc^7MZLYhxmLvVROfXnGf54SQEdN{dI4NnJ|>qAI9Ns4Dd{CGy-gzzQ$ay63U|b z@4|syWBggn0cB!TyaoNv$m0hK#->(HlTN8@MO9$}su6(4#&Q`u&?p3Lw(Av~2MZU7 zVS+<%bpP{NKt(rJ9h8@w04*_N0MnL8ulCv;W4+%y@-4BQbg_AW_;WvL=j@R+} zl7{|vqv_CTbOUp|M#VeBUmZ*$o@XYQq;e4PCr{edBv|zSX+O!YOjyQhqua4<@1Cq7 z)-GM6UafF8J&`7{=nylOLwUE$_JlB-wBIZTfsDw>=`%|Yy;J3`dK={inB8>A7Op5P zc-noU=3Ma)t90u2^2fx(D(ekJ2uDMK2fbmZ%U#D;(3lTJQg09Mgfxxf~*kWn&2^b&JsmIZrpM^~Y{I)e3fk=C& zgApnQxD|-s2!sL8k@yIyU-fj8t*Im1bTz2+_LSIt(Pj%$aDJGsvdfH?8$N}Y|8g^3 z|9y{pTWeTeMiQ4r@lOrex3&Z9B0z*WFQ8n@&Eo% z+sS|;QNbd4u2bZ&$sIbg6sSj>?2`e#%n^}Afq7)!1;xYNQ^~J5CphT=g9!+l>p8X~QMiqNYRA-Yn1N#Y7XOBB_jeci3o8$p%*-cu%8~DiX?bHvF z!mjP0(@9#dxCNqEI{NwDYEzxD)scnKW82}(FFwW9ZTD?M=9UmzXwepiN@p`qK~b6H z7X|NkV()<70(MA_DdvYO`x<#}?Dw^)J`09gf-0c;U=32Jw~^ z`|?+>jaHQ|#2kDn`^haL;1ZPk@|mNTE_sOeI&iivNn7vdmJQ!ya_*M#gQry=S26C> z85yT$vStQdjnx-7x9_90K(Q~%&zV6%*wSZzT(a{yYH)QBccIGqTCDTdtK-vAT1{!^ z@cQc03S1_T72w!g^9 z{U|NzCEq+JR>`{N61kh(n%g?S;Fj2T`i-3 ztA0S+$=4$`Fr(u4i^7zZ$Wzpbz39hX613Zu_a(20X5cmR4T6D?Fr}(RVouP zl+!nY(Vp2dL_1_aHX*EAG%vr2&9#l11XAVGNIB%!@9G5dIZpMnDy7CJw7V6wlLfRh zrrGI*kew$EL8F0#nP!CeTO@-ITGNDI~JnZ7guL!C5h(J#1FNz#9_lnCQ@*xHXZm*2lfViJBgiG z%MQ!dJ>Qds zml34${WdH(c_QyM+Fa>&eBVaa(lVryX_%Z6KRUorHplu1gWxi+N*t?HcvHyuQg@8r7Z`;Y3(ps&hU&oP!y<;o!W|yY$DLF<7*{GDEf4!Vga|;{n@dj5y zRjsD0$YC4U{lmes3qA~H9wgyOV#AbG6i1!=WA-8YwC3C zqur)t>^PQ2magu~4}+e7POa2@X~Ps8ul;?&W8oQTGYq2CmK6HbjaM489vehi#70snvC-__MY}wK{H$A=>Qf zZ4FB6m2{uT3lSso3-*uQvw6iy&X;)>wGUqYtr9={*2J0tvnE+_r=C6aIS*{u=7|YD zE$2MXVRD0I-$UPza+g`Cy-8mh_d>3E+7o?jrR2h)A)I!acxF>GR`g==c`2f)g*dCb z$ZBXv$jA>rCojQ}@=~AqoYead9o2+YvfPn|Z};Os1XA6{sZ@s%kZo`pz0zM+Q(FDA zwX~wWy`NWatD|sj|Kf!tU%!vIYf2)lc6 zbsua@(SRDSK2pC3Xa!3|3G|fWC*rwHP{}NBJ8|W<3vn4?!VdG0?GN~JlKg2u3R?l5 zpO~L--6z(BU*&;`bbtr0PfN8li#`;Ab07xGvr>EaLG4XIZx8ADHq5+}Cz}3I1FI1h ztj2Y96X!Ug&+_^L1EOLiTaLI^I4k>iJn3*e`fSVP;t6)!OKysqv~M1LqY~`&kAdTL zBMQ|&r)hT=1D9|Ew80$;Zmp(uhw|L(VVGImwT>zC@K>I~v9|uf&cWnmU4KH)H$J>@ZQsJToFrrvMv$$+W z{6abp*{0-WCnH3dmjQ0!o2Ya~CG>W6rf%Wzk0EIj-Mu2OpUOoy=On1FoSHM0+Yh@v zV6hL~`VeIeDNi=piyB_O3*01QpLY9QYx%D3TBjPfC-i23yw!VN1vMK^GUbbe`0;&s z8BtiqL3HIeYh(P3MB?KYhaR9{L{~X-uceh#I4V&`{GrMo_)0@s5#H3)EQJxSxAOQv z`yO%|Gqm8L(to+3dd~L37|Cna&s+}s`1CD43W!?{aCW}HsdenTj+hnyIhEU669Mh5 zeEZ-kDPod@0(L!r7w5RWkc{>tNIyVy)v8c#eSo^?dZ4XlE&?Ys$md*dQJ@m(GP2g- zp5Ps)jFK=A#$7bqo;A1dgRV$@ybk87de3Hnu)@u zfl2(|bvxNOkz%8X>Z+Gfl4x;b_t!>^Onxktvil0Hvkdu5FZR#vhY#8_Kpiac*oc@b z1@mjWf;PNNL6%53d*OstU`RN$Dz$zf^(dM2;#Eq~>CZs$n&Q1o4^r=6>S?#mzK%~T zl_GwS+7H)xeap4jTnWf=PVx|v0U}~usbW*eOLp~Qf%zDRi?YkvXB79b0=dqJuF9)V zWaj>(+bcYQ*&9uqKz1(ror;Z;biA9qmJ|@3z&D>yS957soRgV5EUe6^M>fl-Fx@h) z(>FW>^cAauUr0D|=_`jmK4L6c_G2C@PdlLb2pO;8`v33}1tw}v&h>$w{&BDpYP9@A zJ;aQobEDIkPximDG`>07aFo)st{_}o2yN;Ag^z%e<#Lab8v&(^{08WuKn(b)X_N81 z==S6L(I*>}81=kMkyAJD-qsmlF!j&!(S;KMmK#qt~g>2tPu*1ho;w>3>Dn3nti>#LOO#23S%@^?l_YIaF zfC-@z4khr{?&Bf5b};_Wo_O7LV{L<+?cI0|>FJgE?ygrR+P!Pcr??)1@fV>Kzs#zgyN<{1TkYT@t5`y=J?-&|`~;@bG}wGy^Wb&Iat96sgQ?c3 zk^Y-s-DEeg)2#{_wDEZZ19DZdjAHTe;?Ff zzK~TVB>pKcnN&|zVM51!v-qFsz=z0{(AVND3X&Op3)7v8haH9k0;ZxQTaU(DG`B0c z#!t*E$i4o-@9Mz&9vm=;!j?Sj-iz8?ol(@aikOU2EqHMtJvq zFh!#OKD4k>++G%{_XFI1`0e^?LX`5ca1wMqcEryx!L+aQ?c*d5?m@9qM;`cM-}iJ>Rb_AiNf!;A6%21| z-@QH)V(F%DpWKo?v>it@PMM0YXT&$7H1x~#SN}1&zp8YZ?+qn=* zde2_H_YE2Z%VKt_^Z;04$M^q>$G&^0fS5URKfhtpFdXMi?5atg--l^i2dmiR?;hX( zWSeN&*XfS_+w&YccR>ZX7>j~982{G5x_2I8PqIFwBL~-C@?A7M5v^Nmsd5YVFJHlhRRjcVkSqiqWkyhX|Fuy1c-`Kt}(ttt6s^GSSmssd}f%ui!|_?F+jWD zO_H#21yPbdx7TJbA9c!}I|-$9mWXujADiEc5)MAUt7NA2ND`-n@VtuTE9~T7UnETM zIDb6_Nq*&u>Nqjoq!Z)*#C=zyojb`R?AhT1cUv4IU$ZoHnbROO5W! zHAqzE-1;s!g*8$UY;^!4kEmd18W@2R$J<6fBBlOSqdHG`!m78UB+o{4rTz7}dAs}V zcy-lWpuc^hnDDjigsSSciBskL9nw$61Kq8ab}YID?RC#jhvS-5L}5HB*_ZJVWz%e> zBI2v{Gfo-oda>=@$B7NLtB?tT00EK#TcWZ-3lD5F(|43(@1h6^OHS$9_%qbf7be+H>gwu!+bCc-DV(wSr6Ji z2qX4?dfBhY>)-=+bewyC z@9`&8$1S3$m@G3^~%0255{laRkF3axfE0~jN zfe)b{x;#?raaRaG3e1TmRa#v@@_Pyme`A67s~6faKpf(oGfy{^4Na?>;@wO9ysc!& zHp5wNV2@Et@R?`CcxLv=hoeec-dFZR~GR zpV8Q;?$+_GC$ixd%=~7>%YFbVffMc!ovl#4nrHPB_kp=D7#$&+xs}|?A`l`37WtT_ z5cS8mLRIsxUkUZ1dr&-24|zDV8Z%{-G3p7ss1~8IyEspLQ$wOzmA9S)2dLt=CYga9W*|VW`cEG#gupOQn_nBLT!ncIi4kL8JQD?moPY;@IKd?OpB=x9 zieBbL#@$j1c|Q%o+)Am(8A`ChhA%%+VT5z2u0-q}`zYi4zN-VFSu1XAXlr}b$kMc5 z4por4^z7L$8CDp_YhE(tmhtA71LSrFDC7KoxSoBlt_lOXqMkQA1Uy}8Kw{j3GI`>K z7uWGKxl*GN68IClmkmsO*>o7bbOCu~IBl94aTWz3t6WkduJ$08o^cRU_M;DcW2M3> z^Fm!1VXomy3}BxURhSdu-wU-XOWN(VciOeJ<$E8^!GW>h#2h2z*x@KQ$}qP(3$h_!Ky z`gs4Q_Wh7*yv%UA2ux9;;Rt!8{B8qIf!wBEfJ&n}K65#0%BKV8K`~QZ1p6Xzu9AEV zD8Va=AmIhAB2mtVM3T^XuEc?w54lz?IMkzS{3W#J|9`XgO;0!x|@AS~Hp>@tLw&y773mpvD zb^iR889jY{3#YLyr9O4~7dY+hkk*`ApupV;30?Z}Io7r$)mQNh7|#Z!A;~$`a9^#k zLpT53LtZC%u@MqjTh2%NKHBj z2(2{kkiFcrJ_$ZrZE4485-ZWk)SLOI2xw=kDjuLLl66ExJQ_xrTL z2m1_VKI-d-t}XTMx;q@?DDZA%Ux5|!T$yNRfnbC?0rNWM7FZ;1ZzkA11Sbpp5y-_bW53)0B_yjNVu}r&n>DS?`B&qic<|44+??{kr;4k2KL29EJ!&uda$+#}$ zAfER&C%LLr%H2D)lL>Pt2>|E{TF&oX)X7nqjA$RPHvUYh_YF!Tc~U8&)m1Fq#t)y* zr0%w83jg--H2pZy$HBDwhkOPbd|W!*ci8@Jt6Q5lkyV4`kM3-5O%5pg3I3%wsg+Se z{?X~%@hhPrbvt#>GWItMI+hNSV-5{$BrZf;dj-EL7U_Va1jNJH#pgxZ|+}EOPL1kiKx{**6_H#@}Yz?<=;fw75^CH{%0Whh$wBgCl_ES#o}!@R$Uok{{pz~7*M8n_x#60 zp>0%3!)Ec^Qzv3Dt6rija3%npwWvV<5w9Vz1?J{sSdC#9kmdtD+;YgH`pInxEu9K7 zivE|+&nGFD>NuXwV1b{0hy!pOe#Tsp7x1NxwT}>Fb(b zA|;At6Y640ecA&&`1Woz&t5HXQ?mCgmL#q|GdzEZsonyp)Z8$Sq9P;^-69-k`S(C5 z_zr9EdJ9Z|bPqny=(>kG8KGp=ke2#fj)e-FU49iV+wt7#2@5mDu{vL+epzH|L$aGF5*5!fB(C{}_RXER%Ju zpEdjX=>N75x-UJ8WSii;WyNG(q?xGluVUK&3{sEX2dt9IA!1Jib$&Cp{&nPh^|`1V zGVW-Y$_cOQtF?azs`vCGfGruUq}z#^cJh+r$lTwt@k>fOWnxzMj3LHBvyTB5;oF{k zt=FPg`1H*KFk+^PYufLqJ5VJGE)GiVNRGagcm!|~*?)eC{Q*iYwmC-9c}?>72EX8W zk^lL&Zz<#dq~LuiPbpSoC!hU?nEzKD{N~zPUBcVL8YLgGT^Ylspa89q?kAlGMQ$l3 zoC}8wz9hc&ox7yFBlp$~pyrLX{Q32~(&VUmcZFS&3Ou1?uz?vvv@wt+MzO%fh<2=S zE=1?7GF+_f_487ni(UHgLr0YX`uYc$yuul{ppVa~SGtsluFadH_}D!`4P}S%5h#M^ zJ>quPaz0Q)C%&u0#f;rge3e>dJg-X#&Yd`K`d>ob`;e_TZes)9YqAX|$I5wLt)?+x zT2I|&mM3qeUBr6Unk51c$1^<|{Ek-fkl<7)qdvMX#iHa3JrAOGBg z$Ta`0hfe@N@^jZml_c%XP$mDFzX6EFXh73Bht&Ff8vtSDAIuDGuN&RG*h4=5 zhHCl!_}iba9>!!}t_u8bMdQ83@qG*cA?Zq2R%vkg4e5UyMWDX_PrCrv;zW6oS1I|^ z>|_7XC7^Z^Km<<#FXTE{P6KRn0%LP^Kp~Lp(qPhwk_R;d3uWE^DLT*Ue1-uc2$cW- z?FtCoMR}u2eGK9cXB$T}LBG!I>I#1d_{Z{Kd>%Lqcb=e~+5Z>r03Ker((sU*`N+^C z5zG0xgXPy-UNOuW7uCi+PHqSI*OJ_C7#HOAzxTx_ML1~D9@(CbgUO}hSOG`fi$*UL{xob2FU{OV4DbUxN zN%Gv?JDz$(Q>f7tujPy0{ZN6B|DGeXR2)R^iewQF@{l^Tiy1!0T0}i}(7Fz9s*n5k zj(R?CeR;O1;%FRh5+p*jfs5^zyGG1^IkOM57G?dnN29^@%S&_jDl^$^Bwn^i>fhpc z^2VsKaMqPe-K=zLa#ik{lIW?^yLOzLqse;s*klNB+vWf5@dj*iOxZJ8dp+4|6eM$; zH-{{$YJ_fhicenfeQcfm~$L|ou zolf))>gcMjDYAl^)ZUesT|wQSUVV{3M^WiGzQ4UDkJ%Nbb>E z3^{6hqZ&Q60m@?rP0({@X~b;^@D?{NJZZ+7r=Jvq%*<1;7zl*!S2~b3**6yQE8BV0 z0=~kvxn3rU2MHCfZek&{9^Lh|KK>&~83ksjrQ4rK20<%rG9SY>M+bKB%#b?+V|OAl z)dTG_X4_vPp)&n448>zp3rfJ^PCG*5yYkHC?C*y4KYk&*FHBML^1teEApl~ImX|Ux zs`ZuAfeR({ZoZ2UZ1^oZFfsiq?*gx^$=~{Ip36^L39dvDdkjUpEZb$)hdMKIL{S~6GK&927rTa^ z9@uQ1-Lyj%qh+5r?D3U3!&A17-4z|HC>_e++K6u*rC{XQQDh>u``KKr{KsDvOD$>F zFNQ^htg4MrM>A)RK?Is6DM?kLRbe-KgYz(~y7mKZ@4M6k*&)0+g4$P2bt@2Zb9H-XgNxI~2wiL_%g?Y93Ea^o;7(+&NTDUFpcA#%uii zaxFLtW~LQHVAD9NLqAD&&u)Q2KQGmO_wua17G#Rhr`_+X@V(2sGcAtdttfF`K!DmZ zWy7!69bXIi2{@3{f85v?G%y+@V<5ZKp{MOaN{PcDp8n>xdU+uQ5^}NjgV|R+DdJxn zcGH8XrT$^VO5S%b8pa2r{@O1Fe&#`5;^3@$n%5K<5LkXxpq?rC6huq+L&9-NxLR03 z-Q-{RlOlk7K{{M%W)J30Lv;vGFwGAul7_xisPqG}UZi{cU5NEfs!#RsTQVmt?$lf? zJd?hPqL1Ker=NRKMgj-yuz^8A??>eAzaBy3*;x;KAG>i)V`pmarBxRFu=dg{rShqy z!Rk4r*iy`iw+9F{#o&zwSBRPhYm5f?FS!joDu%uJ+-*Kn@F2^^l6^s!UhQ| zyfB#QYtCxCrnXT`4iu-AF9Kdh=CEhUW^HaF|IZMiMf7^9@5gIFw5Ja6s43Xk(8AjV z5jd!Mdb_oApttd{1!C*eQhILm_I_<<(Yxh>>fY%NZgcrNH40-N^FwL1Gkni@#ySI* z$EJ7Yd~3HnOKLxF40Q-uTaGCbmN#eQ(q-}mY*F&rK5D}p5ZhV*5Q7(!N@ zf+kpGYQi=~v89#0CTQQ;ulXZth`Itzdgkp<$~&d(T9ZeDCZ8GBjT;J2C9EV$j9zY< z^Gg;~^9pZEN2n45r*t;S3dImL)qaU0V*Z-P%U2zDG$N_86%l zEp_>Zyk8!3NirLGSBl}C`t^BpV8niH$eT4bYDtzSsr>yLvH^Q+Dn~w?x|3n6n+`mW z@2`^dFCf)50CP2_ygMMh3^r}UKK;;l{Q)jP=hZF>&~dAGVSMb~_TtjFK64WH@X}K{ zwBeWI)UxX4ay0E)2O_YwWGUIooK$O_pE#Ya7Ftl&YUmu+qB)VxDfflq>Bo)w)n~5T zk{z}&*zYanyjAJ31oDRkjh&uwSULfvRbVte|JqEe9enS`9ZaPv)y--+(Rk<@l_#%e zVRVL>X|(EMXNz!IF`BSL%*EjiW1lDE(i$9VlOz#G@pwzso${zDl!m{ahv`wr4933ld;}#o@{Sk?`XtM(WW%>SmIg4j_5SU`>?NoK+Tjz3Qv7I2r9kfuF7N!P9rf>}K&)+GS^Zmr ztr!S~7C3|0uydDcB%sB`S}godUC(?;CS~P>%+Cev6q;rJoT2!Kc4uiVwSNz7aCTVs z!)&FL)#chREANs?HKuB1^*VgoYpI!wJ}?T$3Nx7*8Z~36 ziHHD@ed`S9u9yW`EoSy_q3~Wa zIPalHoZFc^0DX2oK}}VZ>{=Ojd>8jodCrK=+DC0vBLju!;M2~GVPRfm03}7Lr4Na# z5tVzirhGjxR;Gk&iw788zFPLhg4CmXF{f4Is&{9RLqh626XXI@l4!9W0fJM2d9GRnHvoM*>*kw#~vFi-Q^Ka!-c zJZqkLv{z&7Zpkv#eKC;AJn6DrPB^S(I}0}LO>WhnpDEL2+gq#k8%>Sk+4^&zE;K^u z>lW410$y9RGWdFlEN$qb{TY25_1Byo+%bq9wt?;aA^|>#tv*zN-?y;l>I9?MAaj9W zI(7@KXhxA6EePruZz8A$%4|aT% zwOV1W(Exldr*W)5P8aG(cj4iEeBYL$+@VmN6`HJ2K$M%r%sUD^fJ<)#GPYstZ7e>peiRZB$n!>_hGgaGNO8=8b(%l{lRa}VUU=)aCx zhRtZp`ewMM`6;2V+RT@bD=#=Z;zv-cP^T8|-Vsucx=!)P{hz<6xYG-7*48Gr%T#3i zuUreX!2}ZC3{Eu)nyQYCZjK~P*DQV?c8M8y)PK`E1n7%;jDzc_;ZedByI}4y3vbTP zxW_Z1yz>@e9`;+?9VU_USwoH6t*>c6=~jVNnzXhj76qhKGKxB#dE0NH^kYu&j;*8L z1&x)wB*!2N3#}S~9nXcaF8KD+%%du{u9+qp4a~g!?V#e`^cIT7&pSyDLD_+3G`W&D z6Xv>$sx1hg>9~m@O3S9&P|-R(d1V7~gML(E;~ourU}HTI7GlARTDVBx7q>M4g~3*= zP#3dKlU9|475cm0B6j%^0^WMp3h%x9&~;-a|F5YLMTLa}f#g!3kkPE~&PIl|g}IA9 z734$Strf;M?~n5Lo6?j1IkVv}*#~0>AXoax%`$r9KLKO>rye1$@51#j>;0zoJE(0S zC*3k{&o6>h9etA^V;W(usYoX0eq-2NEOcc9jENv;uRjZ}-S(<LTlMd(z(y3lB}V z#xJzj+PrTv_x8$^qYinI^lP?aB+r|$8V>p3cJ8L$Ztc6J=1UCwe2*%Z>{MtL{*wXOV_Rl%Ud41Lx{KXebbEW9>ybnIg76D zK&idFR^GjN?jv9GA8jqvSZrmUpE7=n-jc&8aKvNqRMwcEUFyScPA@BrfF!-=E)k)y zIVt*Hm8oq1B`sMv!3;3yCoD27ub9Znw9R1X@a^qjy)6j6Y0KHSEELdNM#Y##C(x8G z-?}s?Tx;ETr0%+E0^BJrrHr0pdwr_p)z|0_S7_x4j5ksorD5`U4Wi|HYyC(DvmSc~ zwIvD?(#c0Z&Bkr~iYf8W_#=PL8Tnt#y?0ns+qOQu6%{*D1QjJp6%Y{VQlb>;MFBxt zwjd%UM5IF?Dk20#q^p#ufFLdOPJ$GX8Ug7g5K5#IS`yNJi+##H=bpXq_uS|EJM0_cvG7SlflPgi3u5l%4O63Wn zt-%CE?3)*kK9B{;=IplHo@kksqzz1H<37vn>df&tU4gmRK*d-`n>=2=Cr;V5vAaiu zRac9{AO)*y3>z|;h$0*MGQDp4!qYBDUjAk7BU7;|lVZPPtOI0(1qaT_SGg3~x~x=$ z^t^X3oJKXvAiO+fQD9i!OFqe&3W4C2?QD7SzQRq7CzN#yb)d>}EczR{mVZQ(s}{92 z^f18E8SNYMx}ZqN@)8m##fa#gnHqe%Cy%v)Xbkm?ma5bvPizhQjX@cNj2jZCsaYAT z0#!hOMw7KT`$nu6k7#m=4Oekp9h})3R4+-}6Qws92MQn$aLljCNn@{hSe|tdnqEUY z2rbymZGxpSx9nJJtObY5JxU}b@{>{|3aqfFv=tE3TRrIRkqWK!0*W)fQl0&wHEx?v z-rph+y7d@*gUP^SR}_&oqi*@TSQe-5`Dw)vs{ouKnq_&{p~g3T75UvKYu+DAvmcfy zC-mc2hn-&gvR{C|8G9Udf(s=f{RD%btXRzSV{8xQPg>2@IF*@KJj$?|6NX~#t@Sjc zyB8f0Tkm72awD{P)0Gn4@2Am-AiKw34{o>$w{I#9bmGd7TI?Z`I%=Gm&k6ks?l2hS zclzb^dlr7To^fE_E0qUDcCn!%oSE?*06yW>l8+o?P;tWZ`>@vqjVbP}0tW!S!KIUo8R~wgTBQfT?nzqZm(PK!tV?(S!Ykm*Gv8l@KgtMR(8Ch!0<)9oY6!a1 zWnx|X7=D!zC!~9qnoUp`Z-POc@>h3>H<$_|z=r-!wc+wiha_4LB;79~rcdwOFEQh> zP`s$cD6AZnIAD{&m}P}7IzgdO&r$iEeHA3lF(`Q=WYx27HQo_H8^ibEmt=+*B4Yft zluyy)Bs`;t^>iR#iS8)#IyU?B5=HoEf8Y;lKUy9VICuKpo&0V*!xKmSr3*f1U_EHZ z!cbt^d+;Wi1^Vp)G;G1D`cBx_y?oZ60;_%tMNq`j*40@oP9H=)P*yg87F_sN1T!II znQzEN*G~}34lYUcd|?V_95%s>N-4X*8^3EG&p8fve zI^WCB%zunv&dreM&AhP|_f{L2H84youWw2#V}lR7PR7<4L^r&7@y%R8dlBNl;yZrN zh4Eudb@@ipp;R<$`1Na_3t~pO;I(3Vr+||Z|olVUopuCDHU*JCS&Y}$xFXc~dclA|+EI;GYgb|1Gq>{74TADfBAZZjp^ zfE-1?!W5b_kjZFZkx%Ob!I`p`Y zI8^2DQRvJBlk4rQ}|3g;k8|BNB(ehctCMA7hwUPA-ct0OW0e2?Xz2+uJN=>bb%{MVy@IJ;zLzE-=|9gLeG z|I8L)ELveVh&4t_>RrG(wpl0d9+mpRVLNDMIHui`p|0u|9I}ys+6u8~zZ%8M)=D(H zV!&m9j;o}fE9t>v$*k!N@T_r~@@)nq8x#0TDP;AiWZ^F+lZ>UkZH+x9i>VgN@1t~O zS?E82+{=z*(6Eb(`HcPWpa!bJ1tSZj=mscY>X~xZovD64v+{N1MlRQ*M0`}<^&vUj z_0Fm-INcpWCyS}E6dT@T?UEl4PgB*iX1z(R54SLNcaMEVurz_OaSbH_I}F2G?;4iE zIQ^IC%gtz0+p!;`oHp770Q`1Atg7lA$hD-YA9$)}Cv(ia+u;R9O47dE2@;VTgbk%Mc3SH_!8eezIa+G3=W{%@-TkGjL2#O8>)4<}f~8Wnv-?`I;s#hb zKb~_jzbb@8-oiP9Z^sE=W3W3a5Fs9W$GQ@sKXbsF3-t5(n`^&g^_Crvc@UJD`Awht zr(BYVrW>IBl_lZA%e!F4R=?*=jN(R`OsFiJa<+({Rr)mK)bL`Onro@*#u!QKm!iM8 zZDUzy5$LG*N{vgi`Ej@ng&T($EiVo?rjHc>iLJS}xf(tAl**zEa-HJDPsG9$Xzj>K zunmVqn6wyW1Q$A=Z0|R+HGORawEH81j=sEbPDD18JYM684m{VM6Oz3Yc!EW3nM zBrbUHr)h?*uf@Lq2U;}xBAC9L3}CqTI@IS)Z`Q5=I}lF)y=UhRc->?RK{7m+GZOOQ57t1kFMo{;6T7?_I0vOXao z{R<%`%~%$o7vJseH{m4rXHIS=;D0?U!F-a9~#iry-Fe!Oymd@|UcPx8U zyrW2PcmAR+rx#ir?z1^qcbodY&n*7l$4sEtQ${NEEp=h$e*khl%_u$-ZhY~__hbJ9 ztm}!K@~1@!r+b>%>GjEKctB^IUrB0FkMI=U`IT!dxxee*aIXKvy%yL2hjMSIHUL^R z?hs}rSNrUK?BR3Nn|q%t->fqPBP;C=QQN?~C9E|H;2x!EjAtJeF2|{~qHA|0K(?@n z^-Hs7U49ipUvhv}4KMb~hy>HS0~#5-L)aaVbuV)uA>&=wtwdloD=KH*D|=Yit$2)f z2SI5DnbfGRRGTwT6<+6P_|T-mYEM8JgVH8^HoJA!j>*(dCEp7=i$_d{^W6>UL9wMr zv!1RNYf(?(-yhR=qv-2gR3;5Q*!pmg8%!HfS=9yaex!|R(5fr)8z!voIXh#`#L|^$ zr}@<+s?TcBs*^HTUR=%R-D^ZvO=rc6v^ZuXD5s#+&2ALW9!+V(7la!(cI=7 z^-iNpx#bma`7$x(zLureLjxp0`Gu9WvXw*X8|y-=-`CDBfbEFX^4u4ptp=c9Hgwh1 z>gJF+Nl2lAd6furFQ(Z$_er}fOx5}EouiMgsq<7t;`Yl%ndi4ce|&1=uw?k?#D66i z_MdzPIS@m?2;hMA*zkT9pN{|W`9o_g;=7VoMfm+O4#Tg|%E@nS7*Y%jDDnh1H6|nS zq7KX$g;oNS^KFoejae@*?~(N$gL2;}oa;nCg9v81sH*0(wZ)Aam% zRKS}%dzk~ASocr2*M+NfRb!s2WFWN4@jmPwUjLn;W$F6(opbVuq(inBn)3~U*8*I; zEinO;TLH@@x>`S!WifANsl*XKDQ6qb$Te(VFniJ&O^cf6^AldWHg@(010~BBKCf+2 z%d>@%eFE?|5+;?@a4Jxj(F-!{jeDG~`&w`25vPe-1b~&$J=ckc*y|5K-6*cT#+Gqe zqJ`BgL{aTs2SKl{w~tM=W0Blq^9P&=fJl(?oP*yzYk64K*=JKN5;5gTUsk0WG9#=k z&!yOEY(HjZr@SN=qa$!=Sw?WWGD*K`{K-cNqPRs;!rW@L7BIW9jQjvII7c95dOE}n z0>=cjVqtfY*DL}nxOKx{kIK)`vt1*21vKo-_9!*5K{}DI5MUKQ%6bM<{l}=C+WRbZ z2%dLkuy-I%a!*+#JY2ZKqHx324S;F4hyDowJYI$`{+IZJ2a_Awe}W2k-?tvC`Z|PrT3FL`ezS?gHX_b6d^_i!1-Vsd%Xq)iRn`$DtlpsRSy(Z+5waH{ zrZP7GxrY@X(LfLFC52tHxyY%56ApOo0bDtntASjujU=79{872dlw{sivaKw3h`JSb#hiG8sHK5K1l@D1p5gM^4mOQHXxoYXExmVOT4{%G1Z&cWo-L3EojsgiRk!}L!p6f z9?5#ocO{xKd|+>}!WgyfxmO?b69|OGJVE4FF;XE^U^_|0$B};i(e_|)_?>H2Lo)J5 zHY;ktEGkZ1$sNTtTX+$Wwi<_|axAYulj!4@@GPGn4yl@GK=h~(0}y~x22z~K zIN$mxPI0KqTK0*a^{iQ&OeOgJoBXQpcA+fnMhDCb7HGIsVz5-=HgK0|AX)Sa&0)_f zek1&y&=y|3MQH=GEVtV2R(0J|I93Sgv-s7|CfLF}`8&)l*ZapTdRRcb!zHvkPXisa zU^&dVGqU1@7*rXtyeFSm>^X+Pt$JRU+Vcv@QG-jd0@EQOA6}BXry01H{2pgEl+fQi z1SGUPF|ENHO(h0{+eCm&@d*b$du`xHQ)7<%phl^^U*LlHgV~tPR4(8Dq*l0d&XBi! z>RyuoZ$Rma@JAhCp3D7?ogQo!*J2K6&2d-#gT%m&>eRb>0N@~u58-n7-D*puGb`uW zv0DWyW&grkP^Z}4dj2sS3DWp}p5Qkw9@@At&PS#{j}2jNqBixnrX{Hs2L)f-`ZKoa z5y37z0CuSsn2zcpZwI%AfvVq8n`BUsRS1@`BI2qMbl&I3O$`i?&aeGqo>ObDQJ&9g zTzLu{9}}+y_js@*tDn^KhMdt?Neo_+ve;39Gdy%ozBOj*abltsj z2m0>jIOWnsl51QukVIO=FjinSdufnW7@`jEiz}3fDqe7D;n;6WH#bokQQ!D3RM^(M z3Y;yP2Vu%rj`5uU12x;>cwqOQ&Gqs7@+)Eqi_@S{#E4%p-9RuHQVY| zwlcm4Adf^VqA+$JHi-2H{4Rj4gwM8ed1y?))&}4ETikBY-jo_3l~L3b!FlJQe?lJN z)nP)406%ujC}5eCNF9E0WPvFo!+XSulEQ+I9c?F%soy2{-1n-OH@Ee$y(7i-hKSgb zwal)ST9g==lP!DLV?bU`VK7U7f<0&}@Z}fW7-AWC^BpdL)m&#~c_i4?9ZcQafClByz<9)`bO9zVOeC=y@sL%Zp3JZG|xCE{GOr&-pP^4)LrTlOt z@Arbfpn~_jT?GW@HoEv%xYeoMLUhN-(!=ie3yKrvc^&NztgX=W4a!c@&#(D5gX*EX zWvJ{xhv359x*abDh~CE5O4TJT!9>sG)iLkE1!%jv-R>Fyi^l_WJFpvGYa%op(qNFw zgJ)|o2r~xsY)#c6Z@bFoyZ(a-1c0evrm_60Mg83wW4o*cPkt7|`-n&yIL@l=OOO*~CrFpkOZm3gY5uZQGG1!wVog?vcQNqGDYFt&aDm%kY=I@9M zGWg>0okichvzKFI6|)@Sb5zze2Vy<#BUEc*Q>Ok*-FSkj#`LI73FYJHd-tL_l)vYU zH;Aw^?u}D!0C~Wm=G#DzW*SGVRDtG+;^3b>rOc*gnjxd{%z1FcGb-CQ)38~NnXhlnB{yuBliltn!Lq1JLjaN@iZ0her4&3 zH(6#HU_j?b$^utCvojXr+W-_68nPOyV_||P8p!z6{AJ4_Forei7+rmMVsIb(`Kirc z>Ly<{c6D!yv}UK=8;z}@&ZpYLmL~nPs|pAV08pevQYxriu4nAn+WY&*+PVU1XWw0@ zWz4m_0?PONu|#@_>Nu24i(V1dj>6%5@Q<;XzXA7B6D|cyxnTf!^u*G&4qTqS&h{hyyA>u zeh&reHuO`migH&M)Oyr53(U^Of2&|ZgX)6JDl!SXB6FK%TR}w#NU7Ys6drF|)f&8X zC;r9|N`rhdzTu|OtrxgfS1$tu#kf>%gL*HhfruCWS6*JpuRZlBdt!BUg|UCGo~EQ> zyn!Y*F~ie2iwF`4xfB?GtNiwVBe)q}M`;M>@XsG?-OGOe2Zs$~5^8tgX7-cJ+>O?k zOX#(k^2cGLWLVh={?kBU?B!y4TK`edZZXjRO%X|L7yRLIAgUZtXH3TIW7?Vk%3ISp zX8qay$x%`8f+V`SiQEuaqf`fEN?ONgWe}&^^Xt>ij0jZ=sX4%j8m(7^b)en2O zkAw8?+U{Ou&TxxnK^z6Vw@O;8S64mBl~tGla_?PjQ=_!Es`)Clb;MfJ&}$yg`K3M=CzQ?yQb3F$qo^bO4g`1f0=<#{1baOP^}^#A4x@fJoIl(Fh$| z?%jh@g_~;gZ=If~`Be!3!r;e-J}D5v`F(@jqG}lwKyp1qCAV)O2bED2hL~|B(agFM zi74Taj~X~E2cRQ$OdK&A8OKymEPZI|YXC4a`UVx>gCtp`qheVY$~TMfc`}u(aGH|b z-*!=SJ)f8U$v7T!>W`0~sqHxjOFLz%(pYO6=<}ym-3fesB!|WDtECD)Jsx>|d{rx* z5F~Iy)%F-Y)QY2{qTwK{orZY&5cg9k#}#(u*9>4AwGw;V6n=v>uJ#a^AtO zvg)datbG-R`uh{Ug)o*NWYSvI6Cf}8Mr$all7~QF*KpDcLR~s7w^lFb$)|lv6kpgy`QE)3etV% zn2PFaNaafWQKRj-`erEc|mO$y9?l0e^?l%l?uc001>6A4HLSBaI!!kys+WSw0>s0)DA5*Z}EEVdo zKEbS|90P>ut!|ZMDb|zyT&a#_L8y z0I<}T=U}&=m$5fq?BchJ{A+;2aiV9_Ol(!rh`hh$5=?(ckjcP$&)&ZO0R$R#$uS~X zx;#<~DMoCFi`50MVmcAO8x*V|STxTOC8;Ia!e~D~`aAaHsA)zK5jbADP?UsqkYjuj ztbOREBH)ELh5QnfPK!)zDtu~cp7`G>=IZI;>V%v)C zW9HX@6CmccdhPbw&bI5cGV8%VX}8DWgZ&_>QMzGhuzod1{%XqLmL+p=10vBcG|B1> z8O7mL#A1Y?RE$&zC`8|+l!9fcTP|cC{Hir^Oa}9T(p%@foE~^nr@Kb*QAx*A> zU*#Gz53j+(g{*pOz&8C;lIWHBycVd(1f;lMSIM*h4WY3k>pxalwYyX@IO<-p%JJpg z0ZZY)pD1v*KVQDyHBvj$m3BU;;O4-=A?tp8)k_0pZQlnqR>=j6IAJ>kR{7KX8mMaQ zWBrr5TQs^piNS|{c$vz7a$4WZce!lRAr_sP*E)ETUx73C}$5T8ghjK zP>a_>=$Rl!t}38y&tSAAuLYxK;C-+1Y!0R4Pp51~31?roLC3w#$se5EB$8QAdQX56 zknC<2V|2U)X=-s~n}}^@Z_)l`SmWXF-3x_xc52k!J@pVU+Rbn051iW9-03^%; zl|7Q&=w+MRd~aJX8YJZU>=eU3KU|n@ml`?i#E=`ue4Vzs02=g#K+% zd;aljz5BUqKbNluUxdHAPol}J9|L5Z%(Vdt0f4$q`wS3ld|&NJti-(l82D{`@x@2t zU5#xjCaGl%pb}GpR~UG7mXT!kySl2ry2i7>3-7zK13^d zUP;Q1Jw zix8ZlJ-ofubx9D>@bZNW4`mY%!-w=~p5Y<_6}l%pfxNs_59BqlY^%0KhHC(T`{&1n zE!$C`mNwnXFo8%QUp@OWWQy$zfEY{mg9VR?dIHY0DScqbdIE6?H!w0XH+WBs{wXOy zvU~%NX;;-;Sc}3A+_j~)%CwGb&+K*%LH?#`J5OlN;mBSvd`a1-z}Mi((2S$(7S3mK zR4gbM95b_49!4kNtL6bcRH?s{$q#|s&T+=18yy3&oItc(0CQ5j64Cyu1>cZYuC&Z{ zNlfDIf-M3_J}4sYl%F9Bfu=2Y<-zBi)_&U7TN6R~3O_=ofMOzi&k1x>@X9M6mhRY# z2fe(p1Df$`07>TZ&U!Nk?TpkN6?&vleTdJ}xF9P|7i38GpBd4N?>EUd2!j>|k2_D4 zyUwXUN<_;m3*Qxji~C!6#}@MHQZ_vsWJ-&`3ZZq$i=m}lv{(z0 zOt(d+0eLG&u6v{gqmImVeP)wtw^>Rqr5z&rK zY^c^h#&OD>8xSgc*YMl_AVIA5XY~IaLJL{4c&V7zw|XabfId- z#94>y4*kXhfR|tpa(l_jb}TJ${+$LZJH^3ZK#WOlVI?g%#F@^83|R|Vlu~w??3Bx_ z8J| zc284pN|oue$OsmZm}wwD;(O9|cgRdSYAUu{aiXi9dHxjm1_vNiAdI!3?n7I~z0l4s zTnMT-abc0UQ)MSEy5V}MdlE7>CROJ_p|yIS1u*Y*%Vex6)n`)Se>7=%3 zdM*%J*5H7AU17b#*|P2P_(~+8d>A&7FXv!fV~k+k*^n8%@=l7yy!{V(R(=L0$m$Ouv6jOAn-H*wwQOQG}` zP?^A;j9wVG`2@#a9!@+nKfelkZr;A`@^p@ zSLswBWiiGTc=kzq?!yHgvd z^+%fo9W}@%sw;^U9}O0zElk5iB^C&Oa${FnnLtVl7kbO;+^ZoJZ+BY>P;2Sgbp&E^ zKy$85^j9mVEJ`B2h1Q#cdT6-=4{x$_jh$q*cmbQMWh#L4<{LkT!%m3;iyFPEN3P-b zERS2uIeMl%H!D#s^NtU`p+n++es6^>xsAE@Ed!y(A~&psFzG-=W?z)|F(|CX+itj0 z9%Hfr1QCcF?A_^e!(*UuAuKB;+LHqJk>Q!oB-?V|z3usQDCim_b_S@Ax0>T347lG%T+lP z!zgId;!>~NNI*Myy^)Qfs3_-+9Kd$3}%8EaUyJ`^qGG{9(23gY(!V+!wfSnDC zUTXLFL!ZMBLA@XSzVfc^WLUp%Cg!c_v1V~zKDgnDM2O6v>395d^)hY&T5=Pi6W_aP z)ICj#fW+9<%ZZxOpN$_*g3jrc4|1MumBlH_9PH4LT5*J{K&0nf%u+8-g zvhON5r9C6Jm-xyxaAFF>6TnqWrEGh};A*Q$N7j#nRc6w@azp zxZ!#1#)jnTYTcTftk_(@9fn5&Dt&nsvm|XPk{$Y@n{Q9ELmt)xIrC2~kIe}Dq{gS+ zr?nHbX~TrdEyHi?`xHa0)g3YG&L)gVsyFk`1VR85B5PI*`~~w1FbA8c9PfxJ)AZ|7 zQU`!|OLzSMOK10}B(Ox>g3}c9Fr0iRB8J<=P>vg6P1Kx@^M#~X^>bB~CAt&dxCu|j zi9yrN{IBg?o4 zhoMmKs#q3dU!MFKN{YSTy(CoIIuXOzDe0SvxN}7!4WOtBOTRufgyI3Dmc1*NxlJez z=YjzSS&9<@pL?Azr~qJotxoF-NLlk@Eg})jO^6;mZ?cW%Xn0yrklYP(=#e=mK9CA% zc11t{`~w=|(>$=`X%Ou>+Na62WJDm?bQs!>y>X)mk4m@z>50ol)F0Wo29EXLw8nv4 z;`AOK=kyH02q@!N5-gYB_lqU4Tw%DmT89hu+__?7CwrA?i?8)6$&JuHrtH|WHXJJ+ z$$7Z}IPo;FNGj{T-THqUQ~bb#?*a(Ph5JYn0}%9n#OjkuIlzmO z041TQDB%!r`xUCiQONZqP-n>loFw-{o%NxHutbQCn_W`wfzSp02h&eMR}`cumH$v(Nz-|Qo$wo@vP>xe zb@97gJmov??f{qK$n45%-tCQ^y0vp_nEIiViEpqF_iblcsLKW~nPi%1xm)kn1HQs_ z7;+`25E}JrgN_0Y4bVHfNzwtQt78;{@>OTHv)j=bGX%bSF6*E)H|p(Mg78v(CdEQ&GC(US z1zQ};5z55VCXud2!@Ol(_HMuKcml9rf7R9UFf^B(v%x)uu>6JH1g#Vv5kr2MorSD4j0x%1Zsa>#MWTo&s}2c~#ZSPBlO^oS7WY-Q} zjF2kM?P$88zTo+=UQPRiUMph0UZ7=RdQVc$e*fOjHG4BL1 z7rc4m@BgF0I(Akp9uXFks;K!>I`JkGgkT=Q7eYAZPM^M6WdE%)D*;VLQR?`xd3i?% z5#$RNcN42pK}hZC6i8(gnLqUDZjcJ8{qk&*=j6RIZVZhXoQuwPSHizm*}HF^2(2KR z@~~rWrfheFn07%e6BW!GJ2o~s49$sN`_Bb{^=9dHc9nZvCj}Ic=^=L48gh z-p$kcuOv(?RQaXaxSza_)@o53n>VoZ|6r3y`TCCXKGKvvzH#i<%(V%7wSwh!?+FBf z8{)huh;jGUfpgZHNg2?mjNryVC`_{aT!cM@7%4TKUM|CNavQV=EZv(W*0NgoJ{}wR z)WXrzGNcXv&;PDZ-Nb1urTyNTZ0gnIpG!4W!w{ur=F+ua*i9&ls&aW;wxu)E@1>XU@s}s$&_bJlJB2Hor1(Jbr*}& zlHW+iKS05v{_UFxB`r9gA^pbmX=4?gNOW6s>LpCHNa%<4sLyGFEkiTY-B~?tN&;*u zI@fSYf7+EwBdY2aR!^{ufR^oz#uy33@Mzq)aYmCJD|l>kh-oG)Ia74 z<$fj|o*(slxLsUJ(ZwOPuesbM55^i?^Hm>CebJ&{T-3fY;s<+Av1vM~<{JspPLC8B zTQy#LPk;V=|F1r0j{Zj}oflEX&%9AQyTnJb^1&+MVX;?Xt zDvC)iW;4A&V81Qq_`kpTf_((26-XoxDk{glDAc>tVkO)wu~7QMA@K3*SD|n3a{69- z7YTc*!HJI<5yYse{PRML^qKCRXd?@W1iBrt@;$qFNptNbQMn22+Hkoo-&sUEc;wkYOV<2X=ZUHmY4ng6R>o}BwSra7H)XHbSFhp>Ua=FU(d+K z3E#YJ?>aA58SvkK&|+%Q*Hha6Z2b5Tfs=$p0B{S@z)oPKilVKr|oU~sfWR<5XC_}=|kN`MnZK^lzS^Sk~gb=pQvP=mys^p{Wc z*Eh_xe+r8E_My1?)O*3(k6dG>wc|A#!;t&r!@KSr$#UMzwR8}@7b!*}g-^JqQ(Bbz zOpXBiz^4|aM3K;&SL1}0;HO0}mk92cNJvvSL9(v@ItdBOO6LNMstytsNwLub>>7&F zv082dC-A%GybveY-X`!1VtBbw0ACJMs#*wqeQQ+wzMIl~+hg}s$C`>0sd{&Klz7JG zu0(Dk`-L(yKSzS%HxiBSwJ2#Bw{YkOc6=_de*rNwJ5`|9C!LK%l>+nW{eS%C3L*8Q zC?O(C&Dorn)NRI1(z=sTDh_N4xk$<-anq4RVBhf zuD}Tvo)b^~e{6OT@)iUbUlT>RAaZ#0VR%D@@tBmPY~8UwCq=N!&^!88@GT zPL?LH2B-&}W(O5DsBR03%HR@sg%2>NgF2F8=gO#a`PtEwmLc;Z_!U&Q3`EKvm@64i z=A5V=p}^09*}k193F>s&?6flEBO%c_c2sMPR0zhVHqsQXKG)H<@n?7BhM3lDl)x3S z|BGAgx^D`|D19-r=Z`DB(|Mj;XCT&T5IsG@LCHA>==$gw}ED>$g~O z5|#|o!JjYKjy-se7vO{dJ7_dT;vxp`seOlwWch+p8;Raepsm~z7Wsem<@KgmR{#X~ zy%4%yJO{Tsw%p_Bb^L3@lhF-p4;7KUPFR>a&qhMxOiXMAqNQ@Q_cMPzmo07+7}buy zvKjbO_7sY;JX=0jGW^5<_%o>QtI8o@p{A!*s`1*I907b0)9cD@H{gV_g#P3<$4>E^ zz~Je#6VCum`~Brz4gfQ0wG(BQE^w>i?m&mMS67 z;1;F+r5W`d6pI^{jQ?faQhtbAVP$p%)oFB1HdQQ)Vv|O3sFMJ^RW(Y){V@$Lc1 zM@iNeA<9**Lxf1nnVm4(1nWI9RA7cQ|W$!syExrb|_)R#lY!Yf9~iv?;vX&BXw)#3prW zKKa9Qqw{<`ujYYp@ZFuW^AQjK<(o)!>dHpTP=ViP9ujh`{I8q%zxG4$3cRwSyF>8N z1KTm}51mm-;a!bKs|&A%zfDNK4WW5-T0QCg~23@*)Q&F$GiRtJ21 z^dU!OMGWL*kF3uteDe7}tQ55FPNa&f${&_)%rEVq4TjhZoaF@27k$-rNQNAVRT^On4 z1V(z>Y#52o-t)nLc>@eyJIN4%)b!3|2oG1LwHdelU=ndV-@mH7+}Wf8F5aW4DIm(N zFy`a|f)z~PohKaW)&xh5FB_NNbb!;H9c%OyR z2@IE?f!N z090Ez-nLkIz0=)W6M30ubOpSG(*OYe)yGpe&Zs;QHhM3A#369oQjt?+0*7)C=@^fp z8du0tc4i)0Un}FBKbapIMB5(eT*6nh6fdx0##GuPLo=X*wq7 z+N4ciqR2!Ys3& z#2=+b!p^AA)kLCuG8}Ne$&QW>aj3Nmn5!1#-V0Jr6fyVA?m>Ixp|kJ%^NQXD;fxUd_G4F31!6w=UXSmM98Bhsn)wpK2a4ULTv!Wqe-{O=GtlOROP6 zR2P-RHGuLL)^@pfg~hK(&vWZ*ektmTUFhg8k&?L35(zuoqyzWeX$L;G_&c^#9iJ|x z?r3vW9T|&vz(^^zRi45lIq}zCL{k=*6H=XQBiCB|IGLjr?)O{1$30&5YI_cE=3)P> z>+7MUp5~heWg{Cq+{1X_rvy>qK>&L0=^QzJdj;+hO*x4(0iLvls78o3%lgBdVC6Pt zFuxqnD21verlhdrKCC8ufwlvJe|yiC9)|U`Kj2W0-uDt^(|(A3J;s7J>gGX>!?(X_ zs^~Sc^IUak>X>PKelFL{d3dZa;Ctz%`{46GPpR$o#~-r?=$bVfdIZhlYbrPY$In+B z)sb$TwA%xjKI*JOUj0pK*z~f>bMNq~~=oj}M9n(cy z0$5I~)+c>f%yr0^dX-85#W=@e}$cpDB`%fzVCp_ zhl@)ox%&>e|Niy-gUk0}wHrHtTW}8r+UpBv0l;6MX(3Wuh;ytCx~ggJQ~wOt=eusu zr1%@}5KK!>$jB_Ee5z@ZV}8YPW*RZqq0;hz(^yG5cqg`o1X4t zv_Aa}5zNEkvq~%pS*1?haJXvy26u>U-PpXcK2YG~mEUXNP_vsYVP+@K{bHZL7smIG zA>12Hmz@bDV(^_y(=hGFE?J>{lGRj2SXFSj&g=^DJ%ENSZg-C`sefj+O87^Ro$ll9wbyQPeDO^ zsfOiiR4Zp6I#u;t%*|c{K)&w;r@3ovUuQjoJTaUiRqOO{QI1YFB78QP;Q<1 zZelBlk?Fl9VqB++D7TIiw)!K+$BrmoEe zDnEMTa-A`^K@4{FQyiY+7jArZFy!$K8UEw9e)$1GQn}V2E4xLh1F$P<5+%S-l+*1*?E|SViTE9H1`fZ{``NPaY6-%4 zir)5Yzt7HC4_w8pk^OW42JU_uYR%qB=7YT}{mKUYecuda{!6cPrxhF5zc<^1U8|R% z%(gz%BW}VzXJ9i+E(7KODO@dh#1mR}2c`E(;gohrOjNbUSkL3ctLEIKiOWFp7YK47 zBV2-958Vu6z_q`>@^|OY?%LQ((c7MV4O|t(@QYxi3GSrx>te>CFIAU%zoNw04{wb8 z_H25X<279N>cwQjz_&(?rTwse-^nG zTUTmpbfr$76!YLBfi_dL%*)*=J>kHtgpN(^E}{8)LVSLBvtxahGr3W%;ocB%v6_t7 zq{Qik-@kaP{Psqy1L^Zak^i`vA7S&4I3`~)5(h*>fqPyI(bvy~39UMzfP#*Z=t~`; zp8#69k0`aUTlTF|sfqG0YHAkzx2J8{n~-nWS|D~dYn8a0SGPDirW&6= z(gK|a%+X#C=PUnhzC#8osIhi7Cz24m8J^iqC`3r9q5sz2iZ2cniYdJP=(c1$k612` zx5kU8mjg%3G9P5z6Rkf4m{6_m2fA0nM{Wb@LWlt$X^g<9EE)fzD)|T||Eg*f<>4>G zy#!KV?z`p4?0;P7P-mt45w>j#@EGq(5rcJJ2U z*Jr=ECK$foEI;q@W^RN($2#MmcFG;P=UbS*+@p2h5bo>9aPQ6;zdFaH)~VAk@H?$r zugc%N%+Wm?=Rpm?66v?jF2DnZCE9b&KC58Xs`dSDb1}p$jVgQQJ6QO0EaaFz4 z_e6zPr1J(`l}qA3&IBJI_X8zQ4Efkyg|B^2`O^c#iyE;i-F}`-TUbN3%EES)cDJ%W z#l0ukXE$1{QcZ>b!1suHwXUIbhVq9GqlXvgmi&BA;X!-uU@VXd#)^@Upjn_huCoAe zMpz8L(kMs$-M&CGzr+~gnszA_T!?I3@6UV7ouR^DYpXwh;Br`~$NypN&Eui`|Gn{~ zC|Qa`S*9W?6;foK`cx#cBqYlup|Xs99Y$1=Wr~npDJnbJnXwNBL)o`sEMqrg!i-t2 z`_kugzUQ3#ch0#VkNbE3Q;#kam+O7KU+>rJ^;}-NuKJR*uESn^63?!~yQ^7-2QjiUmqfx}`? zcA65VM7az;_^MfvD9J9_*em}fGMQ}6o^g~pfJLOwhM-2t`9JGFLMliR*LF1(qm(NrFL3-MMPrFXcZ4<=|>MUV|F7MIVfI*rJa{zoI5;jkcw(EuJ@84Z((C z_J3DjuCgQCDh;rIwkuP;-1H--`7fb!jL?jF9~3-7Nzgv!d-D>T#5;rns?;f^USFJ%KA+SpBZ459ym+FPE$CqJBu~dRl3M04WR0JF8m5C#y9>Y zzUPn&*{G%F5o0J@W8HuBgGejh4DbwMMc^&K#4SR;0}P5a3YdHX#tL8y5@vE348vJ= zAY-LsMdu-2%40JflazWgn7w4E?4eWVHjvenras|~MXzR>hwc73EKhy!iP7ifp9~4{ zVp4tVHMKI2FRq+rP9EeuA=>(DIeKjM)X6^LeK<@?C8t_?DfqPQvDP$}MtZ{JhFo_f3;71)Qk#6$O~HU|*mm+7>P>+7%}DD$k`AHv8*EY zuOp`sUye?sjO>#ihY1L56!5UvO71{V-H)5WC3%~$Gp%4{+A6I30L19_d7ZH`-6J>i zM%rg@)!csVzj15JamD`uH4Ye@5jlMLYT|{!585@L?TY^Y8E95hL@r;qf*|#$S z9dm>Lc9r-06F;Kf{~KQZt;hS3f7xFXB&2rEYzXnUIk;Cue}xI_=s+)e}i)K7ky7h2I;5ci^}7J z?mHLonL|6>B))eIf-1Tg0Nxt7j)fhEV0eNx&CsS!NGk|^^lY#>#x#k>Qre*q{EhJI zro)7Rf<#Q;ZbO(QC%8Y`AxU*W@TmA@Xb7vS7W^SQ_*@a#kvh5G^4;gxg||ML{~L;l%VaA05?knh$Le>$`)84$ zWBKkmD-s;>{khbUPo)wPRQkmX_4zN;HmfdpiQj&iCNR(S1CFehB3Anj9J%n~4G&%I zFVX^(lBR#Z#^=0-LV(u@8tHrR7T>*&YfbtS$iI&nCdid(dwYUBr2{D@oZK4JJ!67F zezjt=KfT7A8XNB~tX=0x-6}*DGvtJ}U~3a~e9GTTf5Y(OB{DoJOg?Vc&vDkiJ=Drh zyKpeN3fZX5c!#4`eCyx+gt#gRw%WxO&39T9PqiKDq0sinHeja=im+N9S|Igrm32n68CCm<`Zg!=gTGgZp^Q-=jVffwzr@Vn}>Kq_Lrec5HkMl-NMt1jSL zVNgJ^pM2ETh-~oh$K^ryQ^Pea(ytWNrYGpsMyE4=^DZXYZ%y&mtzKw`5?@PAj(K*! zlq;+jT&<>F@B=C9wyR@RMRaUe>sFT265evETYdEwo#7kfC+1JD6xS?tOt=HENaFt_ z7ly-QREG7i0NRT6Wt*cU7!}NL;XZf2=wN!ii;;Fr$Td#x20AH202COV`#nD_6wr~C zcw{ifMl;|ql#M2Bt;nQY1UIuV%HV{3Dr;6*qd;{q9Y-O|8WpNC1Lh}uDo}(S23Vs8b77_H=Uy`fbIR*@#(_A zoT!G!Q(chl^w&EjvhHf}O&siYTqRL+H5tTd41e&)^^!tfTT79B2tW{#PZr_PFbPcJOl zAMI4ne4p4vzWUC0mjGDIo!3cdssr*u_nQyYds3E|i_?7M-c*^PZSNZhq0Q*sJw-}f zg<1odDq+UNn`#Y0nOh%Kd7>I zlAAd!0@(bAOPwXP_**kQB_x){zI6+TUtN?<+`ZQQ>n8`~3ZaGy-oEBo7&xJ!$^_`w z5zG8&5Vk+qQ>uQ^_rb$~6>m4{q1mI;r5s$nl8$X0a`thYykM7WC?cNBYzv^xO&?i7 z8*k|i!;Afbty^hTtI)rL8dQZjm1EYpzPGDkEt<_Rsg~k_;9WxZvz}dS#d`x0@O7-U z1t&ynaNj9QO`-Z}+g_rKsK0^z2pz8P+-EdEEomj?#6XdHE&q|Xvk&{tM&X?Bgb%~s ztMBmthjddGNj|{C6ADT^zFeaGH^dxaxYJbQ%dz4MX=}tD?!)Aju6oJ^Zh^dYKZTsS zE0PHEwI@#|1?bfY=PY&yZU0u}K6$a86n<>al>di0mqRcoToV*z7uqfl6&snDG{Fyl z^YdzXBkcCGou=(J_viNqk@TBi`%j>aZ4`fp(HtZxK}=Wcnx@7?k?#aiwo=oJ-1li7 z+ux4P?vOO$DX828M9H!ciC*#T+kQ#VD)I-_{ebqDPEDlPM;QVYIYo4strg+-W?dy! zyC_k6&fvMlem@U6TG4lXnBNocFU|fT10K<(Lfc!D-aV9z{lP$iy+Po1$Zm99$8{ou zRvFvAY`bCfU4XdHg>djCc6*(pPM>;OBB%3guZ6r&IH z0Li(Ak3;dxs>{$)A?OQZ9)VPIzMGN#(o)uX=`Od`k@UZyxp&H_bW0TRO~e)77lzV@ zEJyQ-D$1YM*q?Iny;j||<=>S2KeCQ|yxAW@dqLowpQbHCS=mRC(DU=OO1DBqfaHPC zU+#!eT>kCCH%>(Pm#$*$#hf~?MygTm@HdG-#T<3tPTa+x`!nRH&(+Cx2D1IbUKNAJ zUAqe^*E=%B#ooWAWOn@~`v-Q&aG&aI*iV#gf=-5T(!{C0DYgFJ?3MZ(!UT-@!$stTEPIDW!tsbzn$M`0GeIt$^oyN1j1KF zD=fuPYGkIw1(k||lU!2W_2*qaH>Il&_U^|M#ts{76)^Knnq)eXyZt56S`8A1x2dFk zqqlD+nCgqaz9mm6$Ca;KJ4BSlf}}HUbvd%-r8SId(^6^U&NlhGm|Y-EmpeI4!1o86 z&!BMIhRL?h8H-WWot7i0%9y-)nY{7Sj6~l`5wM(k)kN#?S(p@1E#bY56pnkM^qc9D z@(FBd8c08lxTfdy0<>AVpC=RRmwbzM4KaHMWIVk&D)*J9_rdnVe?f*~!_q*+!_{Rv z4rE-#P=)?SP86~6yi3p1^u!$T1%EoC=&D-3d;6M(_|>)waf)`^lDPlOyCMYLBaAXV zcgGF%lw1!Wc9{jY`EAp-8@Rc93KSy>?H9dA6Q>5lE;kVa5Rl95NY|B%ZTf_k&ND#muFD7#!te*$`inp^?xn|`$-=NnqC z4Ka7^3fZN5BhU|j!dPb zzJZwwhtciC!YD3O7W`E*@3CXbXJC|}nbD)l9B(q$V zCku~l*IAgt&_d9%Sp~l}kV_}do|K8bRNk6-MlkF`OYWP@5BaxFzA3Kf6wueYxBfFl z5dL<_zeRR8#;<7t3w3S2unGoiEgx$FJKvk(GOs)5&ou*+V=>RDZ z&DK7Pv^>1Dzz+bReulhMh&h(G_khS(pJs5V5!ur~jb596HmkDPP!@v(av#c$u4*p~ zCn=Tw3E_YLjuO)-amAnh>?+X8_wVZj_u$}Qt=f`#;pqz_)f*y}XD7f&=|o#kW(5JJ5Ib9@eX9red`((Y~6hqVi>$RUjm1`>W&iH89yZ zA{wCo@`+9^Doh|Rc$+5r$Un+X9dYpa;0f?wTR_b*ALmOIH5M$J16IhZ7Jon8KU)W5 z$IK}l-QQKVF7g6;8KKaW>Xxj#^ENSmlL<*IqmQL;j&Nb{eR0=6C~@1L_OEs?2(CmoP^KXA&5B2=A1{h zB$$MPOvAVxUdV%B-GvOdv0|(Tw#uz&DQq|Mypeqqrv!c3<<3+p9%r(#El~NOv62YR zKtrB$>lk&Jn%w0(krR&R-qU<_mtN=!EWuNTB#4s%%A5jJSo5~loX zgXvN}lW4P>uzk}}HPF)JN)IFAIfqvsm4jmnk=RYEr*~8BC%$^-X0980dNkz7U*@KJ zC|oUU8Zi{gkQk>w3~BEZAm&6Oo37axIq2q6f`IMoa$_DZ9z2-P{E7W1f?2MBx2L;K znlQm5Fa028_)9I8v|^Yn^AFQF$|L09uD7aE%{{XbuITn6vvc zZr!z-A^rwT$Za4cZ$2W{&WvvG-;?ZSF0{(KnMu1}b-37tF#kVN_F@e+>F?cA!B%aO z_S+ai_p-ZG2)xB#Q;#1C8%Zm31I?Mfyu<`_9rJJET5O|M1OvGrtP^quMC)WX&vIDjwF6g^>f0SwChM<}M6JDcTV1{D<7Ul7I!TCLSG zF8m&<(HZy?l$CIRA#=Di??)8DiozWW$5?Y~25v4ZfSr5ScXwWOv>)(i55#v;fxZ;l zGwFGwHEb%i<7t8VPq3Bb*-UNN9gioFt*BaR!|^iX_r-Y6Dsai=3Y>m_jGq;=zVUpo zML6wK{y8!!`koNm7}D+9arV#C1_8Q(6X++Aw8n0FlfkzaizW9bkz?g2czn|y#9u}` z%bJ5r0+%&mjsnIUDTCUf;p44oyQJ`~j9fcrab3$y&LvG`IGsRwshfH$H0~DdMr{1e zqLUwPJ*s$i>03+Fou8tqLH0ic96QQ|2oM1ku#4Y1Z2pQ?ezUDy7ONurw^Zj}m;U|? z#*^x($vEd3qvVL0yGMGu`eZO|5v{S%h9s@{MwQDm2=>Pb%e>-S9#@}(`y@M3o}1&b zIQ2D1+99??mem|@EkDyH18eo{|0h5NUjb-BG2yYXcPT=L!q(6L|K_+a;qNWs7*5zK zK@-os$RGqz^M8;NUrO-asn|S>-A`_FW|~h{b8TU*0TE*zle=j@PwDIs*|Lmlf91tNkj4UWuD< zETGvDw1@)Ci~uxW@ENYZv~9pU->ob7ezqMGHFqgzmOiSV;{RXJR4>u)r)OJ7N|`B2 z3n<`r2&Azzv^depaU5i(9-YmNkUkN`OLh5=gj64Ewkj!IN}NI;JCuQ!SbENvMye## zxz$o<>w7=Ogzb40ay(tdzT2d{!Da@SPG0oe@>`xdf#X=N4ZnzbGOb=dM z;HMU%10Fs|#{}^NvNM8wIen9T&Aa_qe~T=v&TEKt`^-Halvw*P*BvPSq?ZoShdJbo_fN9UR>2bY~HJf<2_L zu$^WxEBgzus2IHF62Ecd2(r~;!{NXf;$BrEl-A>MA5&`@FY=u!#bapQ#Sm>p!k-EK zC{Gs4bS8+utTFr+@>1Y((QgT?XTdTOq**3t5_WH~a*qYmv-|z_L^VTOb5R4b%Rrv` z(ns{&jYIg#!0A|vJ8mm%`;UXj0c&p~Y(cb<#<9rehwY_z+`2eE8A{Z$&q*}G@mnao zWA9u4QVD zVT$XRCnq;Q7*N4k3>QcGz))K8K5oUIEzdgDI#Frb?YqGx=lcOy@uYV+2L6agHc-WD z#FG?+Sv{pdj5^D=$2m~U#!PL}-(of|F$Otdrb90Y?nyYU!yKb<|2`X*fo@Rgt|I48 zE(y%7IEMZEUbhBg!$vD7k3npk3^a*tSo{6hCrXC=*fINVGFRowhufk)4^Ev+@7Z_$ z&aP3F=7;2lSuW&5{6*TwBH`ream#Hhp{TmgZ}O$riJW{zE2H}^U2e^sg!bF8^|F?R z%V^tKW*^ilkGx{miOX1y@M%h#vy52qrx6W_Yd@~K*z-;#jqS5z zTk@$uZ1_>kLayNLWPpu!gN0Q9LfidCS_MF!aQ66v0~L}M9H^G1DIc$WqqS#wSX(}z zeOE4VAp!ZZ$U$>W0KNUSQbuA@K4q{I z{ty-G&sIKA`9|B$sI9yltOJ?zckf&6sjQ2Rod_NHbac;8vTOD|UZ8Yz_M>IX1s%k= zbD}KTp-kxu2$1JkOIDjMd$>>!@Mwd&)n)x}ywvOe@hi=PT|WLqCo^@E?{Va{>ZJ=) zqIjWh_aLa>)Yrsr+y6Fyy^H~6+9J_^_+p~_pXe6v8#jmdZjuU_#aWh?eQPi`$+De z3jvn44ppvR^{P+YM?&aMA~4@;-1_uL$of@L*htv5z3sB_*vV{}vT8tVK zF+O$D7QLvmyNb^2zK#v&+8`hM?88#pV95s=7%*R7YwEtwRByn?sUbU}%RXriJg&*Wn2sUJ z6RW@}aPgqyKKNo>O%#?pkn~*G&C;GnQTBWmdUN>wwbbiZ|BdS&0UwS3t5X-Zqv!$R z>6K+&lFm+I7?AKjFN!(;zj59FMU#KI;pF5r)h30S(es`b%X$ui(j7_HH3ia^eqIpY zq%&O%y{e~es1@TrDZQKfWz*|BN=p)?U?ZH4LCpEn1Xl?6p4S9_+OO<82UerIQdAt% z;2`~&)@=TiXs1eaj08rAEe%vXcX#)JKc|W(769ilH>|4r1AG!{Kdv*u>h`bRyNnr) zRduc{IslTb_vff1M+MVXoeTXJq8zz>+w8>Cmdd4&&TGe_cafVz(mth%UV7`2d40m8 znOldO_EVDAY|rd#_>bQ6DhTn{vA#N&=J;ROCqs5FumnctwLt;K5_nTJ2Y?L<;uFXB zY~IQ0AY4huR(}N@()r}EkhCs2otAf4o_evM z{u2di*|R&EZ&!tcu zL34HW*SLf%O{NJRH&iWq_s(j#?mQgJM0_X62l>lnkL(V(_a;-+T$&P}5F0q(EGR}np*Db^rCUZ4{6zcUs z!d+<>bmr~#%wk~A=d8^pT6lZC zx|Q<|PrNA4&2j{p{>)UcI8G8AL#80Nd%tHX-Kgec8(Nm{@%6fR8}us1`C6XCs{58_ zWq}XW+p#t&0UjDmb=T`z9@MkkT@y5K;1}1cs1;fIe7DtN?F(AkTVToe*^k*c|1JxX z92aWmjjW))UYk2aaL%zqjH!LG80Fhj;n^+&9cII=grB=WC(lZ@Qz1){x$m1N7sQ_B ztI0sjr5o}=$8vds_Cs9qzR2(mB4~RgJC9!5!jQ@)N7e$3b_1?qFhMRva0ET&7I28Ph1jN6U)UKbb>~5C9I=2nUB(e1O>X zD-zQWku#70cfjxYcZY!&LIxq>kf{}3iHp)t+29B)l}b{2;KPADiy~Toi-Ik4Po+c8 zv(koQoi=!s>EfUBNwddWpLJ@|C?K9uTCI+yEorSMfB2>gZjY^7i-ID zmp^DaDMyK`3i4~w-Wmn3X$9TSSOaJ2d@ev{_|bKUvupM1n~ptb0Jm*(1dx<`e!}nk zO#lF`p(ECw<e^s?wmWpt8{J&uY-Mqk>=Xd)c~5I)|{ahUsyRXL4un^WB{b-uR`6Pt5*}deKflz zerI2|f$;hTOd4cSxB<(ojyLwLNuDtHbubvaxQ81(YYrB^s$19*>(3N2`l$3KX=a>TBPI@9@%7Y2&wcJjSxJ*GdoH* zQ~D6TgTg=u?+C-ns5qTgDIu@;kNmjD2tDH#r*%l*^O)e?nA1Hjd@hC5S94Ifq zNW$?O6-(jP$Qhv8z`!}W1sUh&^reqZg&5&k*`Pv3scZ^~dY$j`VCF__qbX?1B4eoe z>$6tKAvNOBk1f1m32r2eZnd-$W$j#|hZG@US1Br=2y zu8rP6G|ivE@90Ag<2WFRbbj%<`AK|Yx999R9a4=)52^G^vwgJ=KHbRLTKE!e^18qo zY@PQ^q;he=!f(Sgd{eDoAbl?6nvsn}GyXhCVXSG$K(ddHAyHbJ_jhVQU=Jy@9#}iuZG*Do_cdj#idIidc zUJa^4WVJ0LpIRK{6~FR!qkR<^DI9oxcbAf5C+`XnXQ@V%X%IEcsUJG;mNDIed7K^hb* zv)Mox<&1*n<;sr!YE_rUIbbHM`S+i-Jh>brlkF+RoYfRkl$j@Fy zgqW&reBrdAsI`*3i)x>R(bD2DAMfYizAMdzE@@BP@aPA|qoK>6&kmIsxJo@_vm#o$ zUPh+alHUn`WV$B~UTuNgzi%4{wzo+!edwVxjo#>ZnDzi&+G88 z9K4wcOt9G~Oo`f)qq6aB%5GOLx9xjRTU#@PMIyxlI4o|ys4Tl#G6+<2;vUW}2ftYRZ1r>B>S20h#(bT*TTyy1^&BIqB{x%PcY$uekF1YCC=x()G}S-|M*P zq6@)hrt-Uy?9L^kkD}iL5yEcrkiEyc+4>+f57@MY0Yz*EEzb3lY*Yzb79gMzGkAlLi|sB@Gqd6lDRS$oUx8mPJY>UB^GZNG0vmnQq~ z5-i-@sF3cMjI&+XC#p zC-c+ir{I0>6Wtwq$u;4!Gf;r3(W`vb#6;+vWjQZs9DU|~t)F6_iW}D8(h*@H(UDbf zn)52Rdhloi+i#%1zX6;x@UXA#9mviswZ$1eQ|Gj@ZAPO7oMqfFXp4QEUaT=_fL_yj6RUha2bWTi z&4ih^Zx!k|s`@r278|LxS6!EwJ{1CY`($UWx=2@C7gwCJd_wz%2)SNo`@J!EzE4DB zQ#l4r-DgShV$lGuFZaa(6Ly4sBpoL+;XEx}0hm z&5H)|VRQ$%lqgF6*sBx4BNpA}hCN`a<$Q9#h(QnSp*AN%q4bd1dDrKJ;Cq8{`60)L zk07t21izlSc{@tc$W!M@?zj6}1fgR>m@EN@OC?#f=p(0Drgw_2rAz=B=s6Z+#$W4N zvoB!xT1dA@+CZ8@0ja1sa+fSwiL^?<@PciK+3;hbNZ%B*?=Ds)Es3>{w|8)0`H6;z z;&v+RSXaf{qwd*OEp2$<<5yue&A8xJBfTts7px9nk@U`Glm(*(A8>+#89dqY!J|hv z1uF=m2Iy-ba?3z|=C|EV)>pmhefis|B8LS7t%M#)n**f|~875~o@ zi0W_G5mvU@ns|bNF{lX{?aUPu?=a@IZ+o(=x>N5J@>KA2@i&e2bLbY+-wM{iX@gr8ME zh3fWPn86ygz$||Az|T!EXU@dEjFX_Q-wditU+^15-J@5BL2yDKG~li$q*@uHwv<;| z(jlPkW3N?^ZG6A7(bgfh&`dg_0rVyP)IWsmdbYVMdB`dcxF zf!c!fJ1n)BnFvF)uOn&chLdku(9NOg%<>qF#g8CtjNkT$keAqrz%@R2ErlyL^4LYM zuMOCU6Q|1?_mzxPvhn&vAw%UB+$aI_y+YRV-JTZN*splIEhK$?Hc#B(w{A16Mq6Ln z-!-NeIo1&_$CZH)1TF+@T=Jt?Gr{5{?}mwqQmV(|H!hfg(YO3r_{pFOwq<$U+b-my zuGYK9qlKe?ts(0G+wgIu!&*H{o=#hH6;HVpD+abe;Zz*1<R=D|*&gQuVYx1&_6ig?=YI za>MTT$lYf%mmGwfjI5w33w*WkB?cYt#>QWFW{*vkAJt15dIDu(3b- z*-haF`O3^=$G+1sO)Fwly_1}i!SHZn?=SlEb@cYQN#4*kx6DeWsr3Z4hp%15Xi)53+{JvKKI zDPChhEHEI%)Ve*#!0*8*F=n-!-R^z65o$mqSP|0vVR{$1guRpNt?@T*}RNnfXWsjXIu<#Xr-NTLye_ zmbMISDgk*Cy^Q&ulI2Z#%L_<@CrsHn^4~GWU(3@m z@zK<ozzB1N!5YwZoLDbW92Y0d`=M7`WpTi6pWmeG=n8#nqgstoUN9(B3E$KBqede zkH@$`(nmXp#2h`@#JV}m&G2j9UAU@^SMSY}c#jDZwL*nb@3TInMIBQm7;8Z;^`OQm z6c^T;H@AmMW@VL)QhAZvokxuxJm9Gd+*(k8&CX^6?dt?25acflk{h9)7wsd!{<~ue zp~ev6QzknZ;*&rFUkO0nv+ZNJ8Vjq-5zV)e*Q~iUHa#o<;K$p3Bxo2v_2ZYJ&=zk! z1)DKBi;LJVrp(;6GYW$t&MeJcLe3CSkLBVsB?H{_Q&_M{vb~wla1QPUp_82v+$kOvA5w^eyjmHVf?;P&vj4KMI4Y+!cWnj!a*~?wva8&M(LWi!0kzzM zwqj8btd?Z~SZHIqFu!BHhT<_yur{LeZb75Sx#-!e=?ZCY(YE!Z_C zeIa_iPIEI^&Yd!F5w(p=6#fvS|gy8L1jSZQb4e2sv{@XdduRc>&8 z|HeOwMovxU;IO7Qf^BfJ*Y7bU?ZaNhqByHKfC4wRPN`}Rnrmq0aC@TMo5@Xi0-{sa zj~wCQ0AM2{zy~fM8w+L)7(0_o3u`cgH}$4h)jU{m&4N@Hu@}T#E*d?qEMLOyQ3O+b zXXLMCOtY?p42aJBe0cMNh<3j!Vi`G=%d9>Lq?gh*p)~8UF0(ujMqy#7hmu_~3-ZJ8 z%%~){m~Gsv8$d;elX9X!NBB4(X0Ck{LpD7}THlb809S^92!*du+W?<{LS!~Q08r;d zwh`R*4sS5sN$r)w_cm!OD?p0j<=t9lngb#g4iu_;S&|N8U=P!2E1Hl)u@sbjz&pQ6 zGOSJjY69K8>Kc$sPuZwvi}~Ao#J~yIg~pZ!fX9t@|g*|ngk%9mw%k9 ziIa5t>k#Zkvr6MtpAkVyP=xZ?rz7L^td=*RU(g@d&=Ztsg|}(tHxRH-(YKRd%Qqfm zzYCXW5T6X3J>z)Avpg_$rn9)4_)`}nYc-HqC>pX2QZVwB*Tb&uwvy2h;O4u;Px1&y zd}n4lD~Ns^EyZCYq)bOXCtnLI(0zk>$N^i#z?lzxUKCcOM6#Dw%3HAc=ROd(roWr! zmUJiT6l}|*oY&=7gA^HC@)g5vmq0mH;XXE796|m#!G=#%Ce7kMXpKJw=S!s*l_sdW zyD`qq0AO9SoPAWqHMI%KST5bm_wXvfez*lA!9b&P=k*R#bDNf*5!><=j^DoLg|ars zMPe6_Tdw0nnbMmO*~DRl|KtX?-S;l&9_`+fJ@Wlk;jNzo8-wNwAfYL?u<%ywJOeAN z`&QmudjIs2<>)QOuwz<_^L-4GS#zro0MnP$`251caGSb-y$ENKCBt-$qpN6!>%e`x z>ztsuJ@zP~s;mptL+5GHz$C!`tMld->6$KX=Y3yr8+c5K ziWvBe7vop#dklx%lgKBoJp6XKt>WpVK|tMj=AGVzC?#w#H;vYMhW~JzM{U;_+5KQO zTJ4C{Wcy&hOiRY8iPu5CJg`G2OwrGjR9J8UU`nsA{-RB(Gu3o>>^D>dF*d=qp*HFu zMP(Kyl7)|x&#&EJVWunJ(CP^FtH22z^P-X~#vB#?SEpw3ZZIcp-YmTXa(!r(b$Tb+ zJy~Zb>BeQ0EPhwbH&n&7x~GUoS6myEh|6bRN4z|oJr)WS2!n`9m$0rh5Ty8SrlJdR zGfV*;%nIwj4Ek4a7XZxOjXVkFC}O$+aq|!avf>#&SjvXFNoL#%RSvq#y_5bUM>~O@ zAO(|x@0qm0RT$TuG7X6AVcYSaFnVXg;9slIl!YZA<__ZRW)mqnlnp;56rq)bmHqs3 z9H=bgTcn!zedpWUFyFXc$9!A}eFeWWLx37w+E>F)ni*xS@iK>-XnK-g&pXj>YYxxg z%I^&~Gc8eh4@cwgv5!V#=`YTv0gXZ4%Y>m%I(^bcGxEWyg+rzD?*hV6LRZNu0>Fha zzqibacDhRQFLh<@kE(3E@A9cn&!xqQs@*02!&d$Jl zyf_23VzE+!n0;#)k2*16J3DNdT{SIm?8;l~a7DXTP!!Jt0m=J!5g`A`yl4&B_IV8^ z9~I%?xKkbOExtvvR7~3r*9tETk$sohYN${#(zXX2=FI6fe}X$@rIorh3MV{_%xX{> zpCK1wRs#|SfBxLffVl0NHcU~D9}Z^w=Qcrn2CYN6+LlK8j*=u0-}aK*-p!xE7Zb_ zBQL*u?A^#lg7U{hLb`(F!944xjxKPvU?$+pXF_N(rmUSb1{fPlB20GL7SMg5BmbQx z*pcM3uJI0oC_6uVnGm%7tpU0IP1d5y1p_*DM64kpVDsr(keOC3fL?)6@lomK!0R zJw0%WIqZA95`V~>R@xvaIW+Y^JCJV6)P1z^d#6b|9#wd`CzkK`NJ;VohHnT)B3TWy z4b90(*P9pjAA`uEjzcOASFaw|DgqrWGCr7;#KQzqpdX=t`s)o>tys)T;TEtMbo--4 zUg$+xc8wGR+{_L6aKUjPrTK=S)rl5t1qPWyNMAz5l@~$a2F=2l5hP2!gS1iwusyqA zERKvl&mU+!H#~@wfqs?mkZpqan+f*~whj@5tTwo0HSQd>I^Z-h8z+F?E{ZSIa-cwA zeY<=8de@2E+pvrkk6|FUIpc*f-n(E znV%pyDzf?cjVXP{ZXd7rf#Q@-j>6Q{d2(VoY>0=$%DmWg7tzP7DDqt6>ZDzhiDdE_>{`q!M{*Vj2-8A|g^8@lyxl{o^5} zWC)0qUp*h$xR8^!`ooc0!7ho9&rq~;s8=x;eaZlJB%L_;$PYzZfYcQ)q&vWcfC26| z1rHlY>o$`tdvo>SRp5ul>~YAwk)W$IcYcb?7TiD zGT_%8mA%ZI^clHW=2`G~0Doorxzz=Xjj}PY!oV12Oe}AS$iABi1s_H@WuyNXxx#&| zF7QVR5}ZO@vIZ1mCH3B5$RKD>7c$Ujc!Gi?tpQt5=ZApS@@7fPRuBNDbpr317Q5Ab z2U>wTilcHGK|L5SyJuF^-_Ni4+bHbvlb+)~niP28cZBy$HlW46JlJvm=`LlUa`;Tf zIf(g}>!+y9u6P9#lXF8I91^Qzy4`8h7rP`@zBuFd(dWK+^}zb;UhsXoRkwW_9Ur-} z-%-o6+)hHV?UOn&iPJ`vWiq?8LXq+X^O*9IFB6omSqP8i2|;7HqAU>)9*0EOQP?|a zZ!M_DAXwjMQwdxRKpS0O^0aG^UeEq;}VCc)E8qrD1 z3qL?LpU~GYrL@Pp(*WkzZ6B&)v|Q{%p(_*)dYHiZ@R8f-ldbECZa+ojoeZRng{TuL zt%XVjhe2zmp<-PLjLVy%_{(1GfkGPL*Y*`h?3}2xh_~BD=!%#>0_3jd0E?4@umW`P zwuIG}ED#}U&ZR9LA2Lt9brQ^4nhbJzN3c#&xkkeXdJTEp5h2X^7`2jR7UNGQ9t+2t zOHaW@&g+n`d9c`)8qZ;d=M)#ujTwXuCgxU7dbh4bEINInNVRfd#E2(G6fR82?~{og zLev2gb%1fDOX?aSL*rt*BW0D11gePBH!^SK1}Gm5N>BdqmM>Um8!%!9k4smOg=CqQ zMUx-7ieIMTFlw&AY4)0!`D{k7T*3N#CVbvk+@VHjBz9iMvZ5tTxiG0g3!ihn=F4$5a`3cIQoocz6QR|mly z1}Z;1az60=vL10GMtJnTH+kD}n*niuWwnt+$WUQ-u^4gZFyAiFNpO{C1M%NP4W!S2 z=6T1a2@#jyHRmOW;yr~DjZ5@!DTE{czwDA&$xz_bTrG*;k7D-a7PnrsUU)$IY1yBm zYXkWyy^^3^g>q$>wc2JeecbK5zN>;^7%*YLrR? z6LI7ADuta?+mg~>=&jDx6+V2YmeRxwb`TW~mUFRzuUx-8q9k6h_^ZS5@n>8{Z(Geq z`RH*dlyIac@@C~W;WtPI!I_^6@9flH7=8e%_4T3{A{pUUKu&r<$GKnGE@GAdwZ0J4 z=`n5%qqMf$X7nU=8|Q%*2Rd&G`y}l5Ey2bA#nfNNHTA!5;J6ql0-_*|@DdPIx|>OZ z2nYrs$|RI->A{o`kr<6qLmClDX_$035)vafLSl^AVB7f}-k;z1`}qFJVT|pZ`+3)O z-PcWFVoeBJ#$V#u<(vxLLUq)!6af{{bezyXDC3o`4njx>HryWlaA1?UbN9O(8>N_PrAw4PPuTZG7jNWxfQHRsIr4)3GQE(9Cpz7NO!Fd{x4of zkA2SM;VJ`%@~1q=XrWODOyc6oQ~|}1RA7+4XOXB}%OU4{Qvy{!l4eG)GcnpQPJnC~ z!SG{}L>DQ%L-kfO2tEr(^^VaM$rdB)_L^)P+*DRQ> zEBm!~_dd_ySE@j`=Hf<$=WrxQJ!>ow|o39=Vky=Y}gU$io9{QJ(5#5hZhIhrBz0_Hl!!StY2ZEA`s>N5L zkPXEl!m@X*X|L(d$>(6t{e(cTc;bu>vek&TqpVK;0yEk=uXNRGKR#GE%AcgG9LKY+ z{XTlA2XDFCCOXNK>D>I-0Gv$YtYLbeS+b$dYz+K)@;S2QJ4N1M@Dw`twqVRJ>6Nm6 zZOa3(3ol93%grPx;RWO5mBx_ zgaUjNQnUr@DxNj@kU1<)ln%{{(2$lm&9$gw9tCYbfJgsOE#SUrHVuVbVh}8khKmt~ z0iM~CzPL7L_e>sIvX1w_2h-i*2(0VC9pchn1jlfW!|`hSR`Y&uNVGk{4726i*HcP* zH2bfd&}3P6g4oWWEjtu`&$`Q)S(waYk zOEqja){+D9d>Fv%v#2cH5$T53BhMb$PB&#|k9l45WS;vX2!4m#_h%qs%=FKN%oMK< zC-z?~`$kMNLZ~Nj81tJce#Z3c6iOLOqZEU42Kn^%CLKfFQeSV}O%vnE9MT+x4HoL$ z){D8zD11u`zm_}x_3kJR+;+_(^jz_IMl;k#ilTwlSXQD`{z6_$~7$ECBA z^G&(1TU2fPiif1sRn-(ew+w6l4F0`11g*~F0z?1!z1dn++M`&?(d_MSO;Ygf7m5le zgq3DKOkgRTA6#HB`1N=hwC6CzoxSEsv{UfIhmz)xO)N-)$ZD1ZGhRq)*3NM?AAElm zJ1Ci{==CgWxe!sK|`%_|?_%5T|X{4y4*C-=PH|_WtG23HBJApFa;B8adOPZT| zsS|vcJeu2=>AL{#A4gs5Hp-BmC9NhJJt6~mWTQbBUo*GFEaNFMuhS;*kp9&=XD}^h zSdIw0tw$}&Pm>FoChWaM3Hr0~G*I=e6}Q&wp8WEa&Fu9J}9y217Munpvw zFAv7<3zhU(oP0Y#ZHX?JQu+O>&@oVj>W0i3?(Mt$Y`9ukRi$^*;O#^MZw(=?an>=j_i2$y{R!Uv8IzmKFef(MJC6HXzr_Q+_@)ZIWH$K!}?-vW2ZZn_ky zVLHJz0fP+Nnme2594%Tuu-NOZqE>NUbn}rXy&X)8-zS{Pyk7jTj&d?2s~RjzQo)Wj z`nvHc8`gaE*aR%xnwhnu{ip>D(sWxcOjtxop{j7o9Y=fY5ht}yQ!LubQs=>qf4DgE z@FCO*=H`y$6eZD50)$5=l+)c9yAkU)xA6iItKc4%Z_W52r7oh)-j{Do#kuR~ALdW? zN!=}-B7F_-HmvtE58$iuI*Tb5t^zJH_K$hMt$4wb1r5ueCuPZHAcD8de(7|xHG*5f zBCnYA_(TcBr_;Lyjm~THK;0&diO&OvjsYY*JGEuA8||~?@5!#Lloo9IiY=P>X#Z`2!@Au0mhHjW;GaT)oY4F2TiLg>3YQl4S)@2rW1=3p5#%=_ z_i;jZ9BIySJhoxA9}Ob=%)7Q>jSd05@$X@cSPlvxiaj^E+@ zRFQ~bgCw{i(aJr_`OA2B1EP0QHri=JdBidyRh@ik>?O%i8iW_n(mp70SB%3 z_oe4+^Fvlw!rr#25aV<=F={y;v57N(4uLZC_^==fKmPr5)uE4na z)~bHe;sWh0aQY>GSnB3Kgxz1;_PvtI=(r1wsyWt3s$GYnG&g(B0I(KOC z?;m!nYUo))FWD&BwSU?2>amqKbY4*~Tv)+PP$?Q`G^xF;#=w9jiG)+6*hppHMS${$ z8X7w#LK)Ec5w31GfNc&uv(QvX2n-d9htF<=O6hD&4-Q3V?f#-z;t;#vqIUN@s$M@( z>mcPeYL$t$cB6-uNhDgrg}4U6OZS7oHW^Mgf!Cj(<|xjG@i12xyGf&j-Dws!W|W4; zTx1?h9e$ekE{7=n*6BGu)5zr#s1208<@QoHhc`d*#VTHk`Cg{IYRpX99~kzDg<86O z3#@=QpJ@=J%T)d9M}oRZ*N^8qu5dGWc-Y@$joFs}X3ajRr(g{$+yJMN%Vt(_E8SmP zGpQvE>395Wy8;)6*6hC^GRmmMh?g0-`Dg#WTOaw5!RL0oGoR3yeZd9#c9j41~;5f$0 z)ilniG535qR5<1L+W(-`LaEEceuan3R=*CI_1PY%4hu8oI_0@w35d$QyA7&=19M(X zkH9WYH8S>AcR2qLOhWiI)4#fTv!X3jtjNpRS~$GtbQf$*|Fxnu%B zz27)Z|MFrLxud*8A!2#fXOHi3f{5>6hFagdf79{8zgL+zLc{{0MN@E)|D{I+8{(?} zC?MaqYz5DH30chRb+A5at1qN~eo?M173%r{bbRs)aOULX@_@q#TPnS*^6XrvshK@px^(8+x@2p|7F?njH+w{D63i5?w2%CWLt<=q6f^27{PY(rgjynJ{_(X5xHWpXw z-!`NX1HdT_2^{^S|Lv?7Sitn3#^$!d_L5oi-=Ih~dKf2oL-c zV3}VABj&3`yF9{w7n%hp&I6?0bM=6Sv4*&6*;JVXGB4Naoz9jy%9VOPM340(XHcZ=oq17822~5Ptn;L67Ij23LE;|+#Co;Kq zgx^jws_Bv#8%AE4CVZ!C%8E3qW?M?}ZUbP>wQKJ14F`PH27O4dK!X$+4ul(K=g6@x zd|Z#e*v#~(MTAv=ovJxBdl9H&3AOmC-<2j=es6qZhu=7D!gS?BP&%X5HZksg58;;#yPVkC1PG`g~nX?y;b z;@~k8V~?~b8QFr{v%acc6+kF=ZaN^X(= zEDG=-6<$7P8h#p&dm=Yd8u3_N1y}`Lhu+AwjHU=zmrym3p7Yb5T>F5?5OP;da>BOc z&S4pt8zCK9II8sG=w!_Cow=AOhZM~rQNrg1ZQ_6I zj+LpfjNck7axHK45EBm!(Umu2Rx6j3V>7zje}A|zaJ0AWtw?+jx{;Rgs}sGNL{BorjJjR4?!sq|WxRH8qv7|i8cX82uNM(A=oh-@M`8^sd3jWxW*=X<`SL;DCb}4Z*g@#Mqofq& z_igdE5a%na+>5XKYf1%Bf0#>qIwbm<#X@#b>9B+8cGMp+6iKo-DhYA?($G*=+CJJMZkkvp^ZeN} zW>CTL&+2$X-P$D6BA)nPZ(YPk2%gSgcFD_qt&iDO^OxPO>Vqmh@xUX_RZF8`-H6Fji^R&Qck8+=j!7vg@phB++FZjHQ2+cH*IexwD_>8^ zq?DxJ`^-X%OA$O_hM9`3NyTDqOYIRc4f*Z}9B1(+WJRVS&bIyIq5H(^_Rr za#QpZz>Dl5L3h>FJbdQhe>l<0vl(c4A091hB0EYZY(F04U{!)OOr9fN|$M+e$zOgIGtwp(cw;&(I1r8 zzv6+5)ec_FbR5cTKK}?Qd8or93yj^hd{lla4A_24i{0by+=gqCJ1Ipw6m*4+j@gPE zE`z%hl`~S?D8i>8_t{PzYVBS~?db?BYz^>A!Zf?nzRC!7VYOYdEq>#!W1|Wglb+0C zUyTgaC6F>EnP)vy0n&Cg&)5@pr3+CgPu}?jOo^}in4mllYr-NKww~AnL>*%b)BhOb!DLYOVqmVw_C8>;pz-dCOt-QY1LC5r8H+EmP*yaS5H>< zV6ar@MEGYH(@?a~TpvFhuyS#e>O$=ccCS~ld~n+=*i)Xm&x#IlPRtSDo|nE*H+Q(_ z-&m(crdA_5O_?D0<^36H{%0W2z`9c6!tsCi`v2)^y+W_^8}Y2j8sH~}XSJPIgLETWRL zOsBvSx5_{#NMymsbaaLDn~|p_4vwA%0npI~8N&DV5S9Ru?I|E$hx-nZ;DFpYeb;l! zz?uL;K(}c+Aw9|wKLU1xHcnPF%TL5{gL zZ44A$FZI>Fd%@uEufz#KZav;Q;8}C$^&v9kcu*k>5mnK&c=?p_M}`6>c6OFqR_!0P zJCXb6T@ynsY!1CvjlN1=T2~p`Q7QmHu@Uu}cy%|W^{={X!ZqvyG%2OE^H;UB zwBq99uNh1)(;CA`qD#$nd)rzGlnot3!s&D|0HLhgv~ehS<{hw$FNWNF>Fm3tF7PsN z+dF|$HkeJT7t5t^-qg}NIhT^L`;J@@b4#h^Hp35%2nNn6>o4WxB(4bxkF?+Q;$vH+ zYF-fT1ns$1+O_Li}Z*ONz9+yc{H`5n5MR`q6R6SUt5NJW=W z`wjFn(rpr01P9aaI2(9kt^{o%TWB2F|M+u`DJ}s{VjNV7K=YZ6Wr$enHn(-LxK+6n^0Cl-N?C9 zpr2UL3>5hEOLfH_>}O45Lt914GX{A6D$-I2F#$>P^+;6>d7xSE&Vk2Abj%yrvN>ir zKpH6=_CSFkf-mnN)>@DfFNffJQ>dx=us@J~_m@azDJe|g+Lqi+Ncn~qVe85*R-T7B zOsMIei%k*cGiB52NnV1sZc2_o)D+TB_WXgax}YTAHk<@A$F5`BJ2?|63@8g9%2fZ? zh#R@sP=b1`r zA9-G#`4>!eQKlsNvQax$AKx*ZcnBN<8~yvYUyru}bsBS7`sc0UqJ4Hi5U1em(ynFS zll42UM)Gc3cZJRmBa_VO&-N{B3=7ei*@`r`hkKtZ|962ky)|fS>s6OZLfvqx7Jl1o zQ0|VOmbtT*G&K6Mn>Ki1m+)@syi_&Qh59!)Q`MCVXg~T{XCMS!|N7g=Z}i3-+dmd` z3$spF77taDX?l|4@DCB^#<6SOXt}qtH5K879ZKk36#Ds_#^o!}i4oIfu!3G*NvG8d z7?+e;0&{n1*c^*yld*-g+tPhxDmGg8pj&R{iAh4F9eu`t@A>%azVSBcRany=7PNl(8I(+&&;=fo(OA8HK0Q#5HJ?((1LcY3 zR(Y7cvB5r)ZFQjvkdlC)yuQhaCST?W zxI!V}84?gos2mFJa3wO8SCl8XoFjm9_`_R+^tM~IXez1b;eBR?*zge zUoVcSTklpzhRfe-c4?=vFfJUI%GFO~V7pdn01GVNiTXCXJ>P@#V8$s+ z5!|xk=+cPz?=n7!= zRgerWtkU(CsA7pFyl@v-)~eHDZ`QyLBL#7PK#}+;GU`gLBCQRnRMTvtg4g-gfS_H~ z7Y{D_<+(jW`ja_7L;B5$^`Ul2%y(`JNYj&P0UgN^i^TJD(?fXSm0(-gKzq$bN2vX@ zF9MS7Az+JSc<@Z?y)c(C@l2L zcjxY>KY$rebNrs&00Ymn-|0rIagmd$JG~L~QXZAea`G4Mie3Hf^@?B(;=47!V9qz9 zTVyY5`}7E8J$C;<3vMT<(_OaU)`P{K2&%>*q+nww!lI{*w9#5$rB%H9qW5;q8W92#PWa1DYrluizgjz#1rY zt=y?)C>$--upR}L_KDZf;)iF!q;4T1)L|7wf=)aGIgWB3SP%b8?H%%n+b;Y(50 zpA(7%>|6YQ5*>{PO>Jrl9z|w=t?_fIe@d|I&>tnl9DA^smU;6TV*&5HdB@mb1cq-C z-QQTIcBQM0?a(!h-kmTrq}#(uBiSY-T*K}}rGAMSvJgkI&lX!PNKTH|%2oXQ(;{QV zNDo<%-W-<}BQ#G>{%29^;bWP>7n}v?l-=X;+J?u%wZIN8 z_YcYr!TnBMF4<^gEYjSmG9_!}qA2npSE^AQ@9wN%OjIC9!W5 zZ@i~CQmW841$hb_`=4h`7%7=8aIvreAVhw$>uVYq(=GgN-O9CukCN6MRkw+kJ@lD# zC0(EJ?RzMF8lYv(!}3tDmN3dU)+n$wAMQ<7^08;Q98Br`0bMHzfeevo-sDdZq7yRH zHL@;klBa51IHwzZ%MM7La?d*oB}8HVgrx`+dYEhiAYk%4*3I`y z`1!}ihUm#vZ$rR?0~{f%A}WM#fK_3m9?^hPPW}iq1sHAG@r*j7F#wRTt^|-dudxYi zeM9%CvnCJM4wyG$m~>P{l@$)Q+}b%&=%}?e`^680Xr_G zw@1tYxX2oy)@7bLd5!s<68i@@C~$qft5IknnZS1RPcPIq7oq+NcviB&cW6#X*&)nr?WAg+g%YyE=>l=aTbD3w~@#^x6--yvAA z`2Fy=XEgWq)@12pGflyWzP>)IrJV2tN(KVSx)v#TI(>jnOwm4|??g&F@D{^oOKZQZ ziDwF5l~fJ=4#|>pn7eYn!^6FXy>WiqIOVP7n(6&+sjqB&${Lb~1U-u~m%AG-QdB?1>IRcoXw3xQ)9|w$=w*<1Wk!-6G;o#%uo_!;G1e zP@Y^tq260#l^poyNyrNdav%oM=Y+sC4k4Zc=FPNWk>-k4QB2kH^-&(d{7j9u`%^mm zdNa~U8MWv)7o)llLguxA&RP3gHur%2+Lb-Q>X^YF8UwuzmuM{ z2eN8yQUg%t_r8KRm5zY**co?gF)yLE`xmDd?vaS5Nug1X_ZA|f5mCP}40o$>wPLwh z0-}`2ER&2w0HgBaseSwr z+;Ufd3}p&-Q3hlHbUReCZ@>CrcBtHi`K+MaXHb!a^8B38!#L6s|B+kozK0Vh z&xHO=`qkb!zQ`9JPL*4WL~=f*?fCsH;^X1kv~OYmrFGMI{MN7xRNk23nzuAM`Y-S2 zqK#NAU>Iy|%{x)z`!%B|r9?~hhRi(fB|e<#aPhGYe(?W!7h+pvfO}Cc@$CeQv8I6? zHk6t^N89~f#1P#UMqNbiNY?Hu2w1gEJVe9d?LKhY$f z!3?=ewQlHzCLVo#eY2K8m;{;@EPX-OX1U7yW%gTnP0rf!M!RwX+f?nVSs&q7n8N)0 zcoGUwHBxpKwtUp=zIdGfrk~|DkwjdP%L>m_@=fVmY!0^=UB!4Jt0siH7$Br`Wy1lt zIOJS;tDgk{a;_6!{6+{MtDj1RW)JK3{5i`%!jXlfzsqT~u(aben`PP&V}_#l=iuu{ z{_asR$wH=W-cvrFt2WS!K{Zko5aV?rBZk3QUQC=Ep})Uh@0Ij=VPRoAsO!=5Q|s^; zjcA1Pn;qy{j~mocAQj>KyQOX6{0|lQUe5niF@N`^y(!WC)kx@-fHw}4d0+W>R1{tt zgVc>^_|z+3wPXZGCZHHftM`wzxdXgDi3kK%Qe^L{1TL!c=4a5t4o_y)Z!LK-$oUzM zR%um}g2^ZGn5=YhwdLU~mGnF`CNqjJSVRdh@p0pSvITh6=u?_v zG~V7wS^woQlKr8)|8)+fF2;yioOP4Sxb#F|kzYlkmKjPW3)NK4Y&oeqB%;L1Ob zAgbecDpVRXhx~b!`YsbFDm4tsv;|a9@!wC{>s7KFcjZpZ5@QPCUE7>R@mW}}3rdiL znlHG8;_bA3k1;jJ*$ct@0g8If?&9cWHBh~s>C%j9B}k?c+E^|6dvvuX&USWr?Ejor zu$nAh*ScpF=$F`P>`a|~2Zh%g>=N##WB)9WYu)W{%&SxXz#5rboeTbJNt5W7o241D z0V#K2fh9aX&l=3i?MZc@ets_#N5_f2BPgtTtlMf)?|%Or_cRoni`tLN!etRmcDK+j=PPce32Tnn}@#lS2_eO zW-q!sac&(?MDlE&veKjPV`1RogLgL`P=258M)^B)@)i&NT?5Nk%#;h|??os5w7g$K z!=KyaSXsDVKLaIu_~`nP?_6Ihh&#~gebPyIx*4xo#Q!-=eMh~gX~2_cfKY%#2FOz)UD4?lth3ZMC@5QnBq*q0v|CCV&Trk!jAp? zImG=@J!v%eisah?wiBQH*B5I;-rU7%d!2OUzmexrbY^q7Y(WXe9t$Hm*6WwDc14V4 z+uv&kePFtT4ejKLCjaOtv6Z#NON4^=7ae1wrJJnU2}ex$uz26MN|uSs4jT*MAO zy$9d{*$}aluwWI@v3F&>qGY`-&pl{;Z;3f>n?OI7gbE29ibEmzxiE3aC5l+Re% z{G~T(+Jh5Fb5cwrffIh2AIDMc_ms18u!a67yM>EjAMUod5(nBViHOJOliUv=pK0}i zyTF-EN_Pd7sBU|yulfcm;L!03fjrVPlDq}Ez?#4|mhUv>NQ}1xik}o-?*g$@;X_n? zT%Hk+9uWJ(4LevEbTb-(hL5HG;KG_Fnf|7(jMJRtX|Lkbj#IpQ@Haz1$8(-=s5DqM z?_j^s7wg-EFUc0NJX z%F5uvuULY+ z#|$Kw>VMXY;|g9Hfn*A3I!O#W?h@zj#3pvet+)m!KXTfN%R|&1vmJvM%81_Sz#pZQ z%f(^~IhJX>OS!B??p=EMXoc;%E%+`9EH}{WYA>T zpu%qY36~~b2J%!-=KuNa^+CWCS14#`N2{lPlle{;Y2@Cu9AX;J_q??HtaR()@mKt-Xy=IY~+WrD;rQviWWhrYoTpSWX-<^yJAe8zAt)8F% z&~X1?C@7j2v6?86d%GRUF6sd$OFKl}ZD8kL8l#wi%s+Ut+oabBV1HulMIw)cGAJbd zLcjVkb=l&~gGH25iWq;zLJ0jCpfI{G z`0fpDd^F|Wy>b@b`p!a+-Gee(*p5M~5C~>CwP3nGBP_bJ<2w1dLAn@9kAc7{S0odJMwXG;~ktq_AUFs_>L`i=8GXEJ7zJ%^3x`+iQ8 zUyq7T^U8y`|4N=dx>4!y^xm*h?+u_FF+Ao{3jQm7YzsG z!BkCrcrN%D^SePkA_1x3+)*`rNrOj}w`fb@}@sy~d@dLZquK2M7Mt_N)sB zsv_N<`u9;(ZW>JgOj0*NpG$vsltkdmVKf*r*kK%gg$3ix6l|`K`V{@Y+oLL0NUT`Q z_2o%=`tr*f)&EQkB^@K0^}xLGt;-|ATnV%5x6h<-T2@8|?kP*J(ilWj9#2Bg`N*_Q zloM7|-hVSG1|%JVO+?!*!C$~`w}>SjyDA;)(~H;@pU0eX<(F8ZZCqTuY<|I>0YWdJ zRAuZdEviNb#m@nk*_!y$3Jw`(+kKExB?$7JDk+T#J~!ONzY(55GahdG)_;rYC@T^! zRS+W|mYt=AWr#+0Z4WP*(CFtWC|;6Woxsfi^B9uNR` zlVsZ~g@H}9T|TYyvD#jaPYbEG4rTgG_vbn3&al15*J5_wl?7Nb9Oo5k`#VkuQd8~{ zo9M80y?_gArk@$%(T(W!FZ6t~cI`#i4&*B}Sfc-Zc~gLWLw!yzcQW2FmqCiHcnlz;6tH#XZ{e|z(QkF8=I!EPyvMrC656A3+t~@}h@>kTQJ51L? z)Lzjg-KOrp!gCMVvEpz`68C$n?ss?TJ(wyF$$LkvQcKI5WDcTZs%cVou`#Hj1Klwt z=N9&3UAPqYB_Kv_L3}rJt>5(hEKFfIh`grkOSHWac^i~MKM4Cj9MIF!nLr3qZ{1C0 zg(d8KqwuR-Ia{oT!E>`(b$v$0$5TN7&$tO92w5+JiNE{m3a+$v;XDf07&PlLAF}V( zyvAZbnOEF_lyl==d@kJ_a9D}kzmexRHq0sKNCyI1<>1OMlfb&T zi#jl{DD3Gjg^!ft+f}%IR#%RcLH!Zh)zww;tYlM=NDk@+m8&8=$sioaP-ukw$RhIM z;x?evh}QG|t_|m~4PNOo7zkw2YNlAvzlKr1!j%rvC!TBOL<7UOs+4U%QG3Gz6FCmvznKG6RHWjH{g zv%8W?7xo{-nsQvyZ?5!N(+YlknPe--*$@}z;*$8o)#XW0e@fgtCEZ6}Crzzsxyx}| zahjTVBG1xGLy#tO$It62m*=g7Pxh(+Uq-(J;6pj+xaf2{@-pn+6a1e~m|2q$Ii1ei zQ@0~OVepW)`iugi6yZddFR}YL6U`R zzdIjH8IkCDCDo)j8h-@DwSX&RIt1X9}@<3L8Q z01|6+CBkUfrVuVnI0JC~^#v9=*M4MJz!qBknr;%j&>0#hT!M|wi)V?wQ?ScEdKF!! z;H7c~>xfe>97BF*9Z}VNNxtKe3vLW5CWNqwx;|i62}t7OIdnsRyO5!D%9=sk60@KB znHhty7)(k^Zu|MFkzX}M#c876eTm0@s;0C1~9EEiYT!&(&3w z0;7Cf6v~pUGRSnd?CI|h1*Pv=nN44+jnz{?_6#V?$_B{**~GQz7Y{a9a?+^jIZXa3@@&;(16zG!Awj(FJTON$f_X<8e+Ky>ap#{MJzJ=+hl(9Sddh;~HF>>Sb zwHa4J&7H%DAl1581vU_YQY{8lu-pS)@BkG^^k~A)6@bLAlP}k@s zX0V)-hb6AXQ@|M4LR!$XG^#!HNEEBt4hLDM9uiDfMR{={|MNzk(vTFAc{9HEm=qeQe+4$nn_cJ>`PKV+ zbzicC`HSfuyh%p5x+EsN72)@==Us(g%;@W1eyX4JepRirJ`6^ef)O_Sb;h`79sal6 z;rY;urSL_LJq1vNcqpR(cIjm}Mlz~Es^$MMYT;#|%2iQJ{r3jV!K+|OE0#6W8M&5( z;Rj_^79>Aa$q6|u;^aR?RncvDtPYy@7sZOAAg@qa)!{$DEu-U}P09){y#2Df{2#G? zxv{@ep6Tb$+d&_!9iTXRTH{(9F=%9v52X4nwqCxYD$3u=y-KUsc4pPpB+OtM=W)&9 z$A8z@`r;H%vi)EZhV(Vq@Fi@$o4b&(9?N%K`*t4<#ls0xdpbhUN95~m;jiwa# zL+9Z+6nYNnD}khKWk*&mZosHP#7OdcZoiwgy;~mJay}o&bnz1Gg2#%%+Q_l0ROZE_ zxA*9kvuJ{7B7RMM;@IL_vmnZ|f6JTV1)QmG*%>w_9zo?vHV*QUH{Y|X(DJLI|GqtC z%$R0CfTyKm5vhWa+Z}ns7xfaG7{I-`dkHvPAg-PQcaAl|`o-!0|Co72V3S@5h%5fA z$bU_Wo_Od*!r}Dq{KU_X!0oq$dr)le_pMRCv_Ahv9-2|z#9qwihn(Xp8%!qT{>8?j zJGT4R&;QXSylnvI`^5IqL9wx|j}3WpqJsF=uoNc8YVNP(`EHhkq-X5M$ztaY$Bqir zIdHmdpW{Q@7txPA)x*WCr9Ac1+-^yu6<&ST1bZVObf45i9Cs@JW#F>s#QVPsHwSC4 zrR`>jYVk6P5kxG0NyltY{0^=^#Jp9O%aIBV%(#x|zJ6IFf?lQql-|ju_8DNJ+o|TJ zZuJ}PkF!~YDZg+F8>`iFN{4sf^1U8};8J z7MLemTp^eg_P-=C1YKn(HiovHrDynGjhnVB0J)@7v=HMB3fx!et{`aJX+%(K$#zuUJ# z6yDW#9HqC?Rqnd2So!JvTGgc|5D)vNb9u63fEyb;S9L88_s+qbB?mxmChfG;AUud zL-o!!E}qXI;#tj*28vx8;iJc#vaUalP7v%;Y0iTh;rmfnuUd`fbdKcdt&|^{5(N!2 z#82Vtao^O4tviqfAFN@fnUD-C?xdg3Kj3KcT*mrqZJhQ1Vc`n8shSSc@f+bkU>}Q} zTRWam+L)bs`SI1)&dnzmROEi!oUQYk_+<38IrN(EOzWRViR2Tc5o3C@4FK;l5HGXet?ks`+M6-{Nf7OHk%nKjF1p$idpB07L#n-00<|C z-@tbKNUjb8IQq2Jz6r0oby*e4_Q*{iA}x2qcN0n;$e|pg;qaI)^m1M1XO-~&ldt(5 zY(w-rbA;F~&;1$!sqEu7AN{4%o`fn(WpOUeNnkFCzR$XIHNU3lLng;czVtoKZb9uJ zul*00DFI-MnOSqjNDm!8tTRPPUOSf`PQ^C%xz_i_^H`zVrk}vYinqW!XVZ!nAK$md zZyl>n5k1|Z;Nakd{&~NyS}*?**kJ7tU;x|sdXY78y8hR&V5f{qlX+s4!??|^^hdq0diaVw4i6zIN=QGRxA z*fP^)g~2|9rtGjU;u({EG)_Z;Up0=$1PBY*;BEq7G>^7px&PRLOyj+f z;PCPQ$9n@?&?`1S`zvr7U`R4OOx18cMHP@J29?=4a}9z}i4#ea;N=Vc*K%C~&rCOj z%-M;h1qTU6glJyrCZss>>_h=i+^<{s>*WD@X4d*O`!3rKEwG=TN}Kp)<6z&3jvWhG zn11Z%={|ky3%!Max&yJr>^QBn2fcX5q`}}%X#fi#fQ}=gQk2(U?HPw z+VR|ykv+_g7Bf5VRJ+AC4mo${`wMUZ&+=1=bTW_}rDMBf%=&Q*WYQm`l zN(SwTjw7UoVX)yPvHLYkCE$!N53eQGeY)5w)WR$c#f#li4d7F2-9@s(0{2o7mP)W^ z?`E$gDeX3mKRa_9!SgG_l3hPwW~9L>r7+Lufp5u<1aKwzL(qf@rW3YTKn2n7{2zVh zwldjfzb<8P4mvzo2^RQDdK|OIRwMFjLDKM)uGwWI^4tQq%pU&eiQYN-y4_rai7`m1#D5gp= zQ!SYGR&^_@IWU?JqcxxsnE%2l3pd+}!t8##?{#uhmlOtI+R=qSL^6nVJBapY;zX8) zXR%=W5KhECWsY`68q}<ekL(lRCSzOK zdbeHG7dqmViM8tC0n<;Z1r5DU!J<6oXN)iB_&o2pe*ZX}bSb|*k- z+#LY1ZVtFo2BQZDfX%?uQj?<+)KFp)u@=-`qj9d25^Vz@IP9ZOdtUtDvvZ0Y`;PxD z*9k$o=K?QOk;3KsM9!aSP*$SYoB%3WwM9R+1U8luaT3^yRz`8DB8OicH4bCFrIEk# ziNfSDaK^`^Oy3gcpV{ymT{+?jl!GHPQ^dT|7ZdO`zfCJT)<4%AU4Py9jPMpDK}GrJ zbl{xFZY5z@*S^q5xwW=9mTG$8P*k%2SE@R{NrrSxQd^R%|K1oJZ-oz$yxVj2cR2cj zc+RU>13*Jhwaz~JFm@N$+Ui#FdP7P}d;{~6Z8YWhkJgvjvU9L!RPt$0FZFA)w)Vs- z*e)&k?j~PI3pd(1{;K$K4827uy9Y#gzguGHi+%RS80QOrxV!D%jdnBIKr#7-YKE|514gMkRL}wJwZb#|>|4^>Gz}OKVq*Lr zNU^B@&$THS)^Cr0uq=@D{rkhZoI~c0>{x9N=~yNkCAlwND@sxaQQF>FzT05(dz}p= zB|C%(QqdpVw!NQ}5WH5WhOFjMfDT9r(n+I+_8CYAiT*$k38(Y(>`;Lb7B2&stRXld z3oyzl?AZt|E%xXB*>AS4!4KAr$EJUQ)%Fd%#V_Ye$;<;Iw=jfRfj`ke;oRq)!AtE* z5?{vs0BZAr^(+UDC5h|p{uiXD$34xlIC}FwbVE_bFSV`Z)pIJW(R)|BQTJHKQw>(c=0gJb)$|q~ zQyIzC;62nHn#c3R3Yb_xVz3Yuk$r;bo^N0oWX4Pr|t-;#0M!Bro=yLbe6x zbzCjJJ|hD3>@<<(ar~D|#)|Y`-#1e$(#*lYX}QvB3a7)K(j{E}l3(+UI97~NTC;E2 zGksJMiJ7_&4k0my8TZ3vIt9S-fV8rLv>c)%C#b)&s22JtS6-&0`-uijS>|85gS~h+ z8S`}s*}$j67ogl!1*_MS_gKEz5nuDAB9m=VtG%(UwKw!GQC{JJz!kI8G^iY?`5%+) zisEcsSigUE+y3|X#Jqz~Msp7?|7Mf^@uGgr`~MvGB2qrMjSDUYtx&#C87B)HImxiY zr)){U&@^xFUhL1VdXEf_`5Avc=`1N5h(x8uM}VQ=g=q6A^NH6KC{jIf9eIiTNez<7 zcI3bz1#Xiw-rrEbW`9HXjguPMk)wP@4FC(>??}%7!?Vu5D!dra;0zLE+({nN?6p%~ zsnFRIFc9l0f4s>$hHj|jeScy0zEx)(FPqPu75P1#S247D=gWf}>SG}A*SC9Dq7*U+ z>6npAJdwwhovn}H2f88q>a{O*$S8AjLzW`tS=m`*AQ-d=qvae_W?ES#p?Ng^>TdJ`NQcrI`><(lsO5*XM!;V?JnWqCe(RVVNMpNZNx zLOhd}*#Te|VhUEs)Hq!!gMJhl22t@)G}m2b=F$3YVi06egGs-aHcSaC+T{nop!Zi) zg3+qDjdDxmLlWbd{1+L>#%Z_aN+ze1pTBB$nb zZGLOkRU{dJjD>ZQf7@eV{$t6{1aG81Su&wq+@ExNe(b-eZL5-jGG6&@1n?$%nTY6! z*!gE7g|0-2*Af7k__oC(pj>e3x?c45IQQ4l$63PX2pHYFcD8P>Gy)wPzzKRHV)uN5 zjGl}aJgue7O0ImfH-+X`MMya%aPP|@wlFaKfc*>%0X1Lzy#fCsNu)kF}7mF9=th64;);?=mn*5cg8OUB~u}5rgKLL~$^e^1+Bfd|y z0305d&EcHJ*JgUy4%^CxCB{O>iz!OYVC)3vv*8+P**9I%^EEa6Dzc+q^I++5>|@Sx z`~EB!`SheD8lVTQB54+&L0epXHd+utSiyN>W7|Z4vsVqTVWmQKtwx#U|JeQ4KNXcxU*+1uJk6`CRQTS#r zGY`pkfWYd`9N#mdCk99*zS;5ix_<+^eu`WYOf!6Ru-5jCJ5mR5uZ{)n_+M{VM?S5?vOMt;_I~nPMnAgki~NSymHqC0Qz17(ybL$FIy32Q5FaS? z#B$E^+g{ce)9WSSm%72WSFmJ^@>;CV$M+(M_XQKrsPR=xh`lUDPthyFMld$5L8FtA zZ14gg!{b9PhD<#KiUS6ww)M^{(bpJjAO(0mg2-f}1FZ2WbG z9{{(akfL+k8Y8^_&SO~Uix8og67m@mHvoI3TP>vJ`NO*HC+k%*EHySkGbOIXC8Hyv zLil!9sh;ySa{y&-N^{kIyYS`skAOfFuO^?+W;XXb0=mczjHhv(`3~*{5uVofVsFhW z>D$v1{0^%`xTZZy35R>@ZFuZ*e--d1y_>xW<*zTm3(`9S1aJ2lPj;Q8>@VdeetuMU z(-Hu~sGoMe;rwGMHvu(|Pjkz(awK*I9wc{4g&wlF|JlR5{EgY!sH2xQ4|(b}+W1xc z-nxstl&YF-l4wyQStVSb&dUkrjoy6bEfUzz2;9PZb;v?MP2&h+pY*Xd2bHb%6gdUI_mbnLfQP#=AbjVda>UO*qtXxjG8zfByNm zHb%qi)ik+6KcyS2T}Bo*nG;#8B!T*9OB;XJwkzegm{(aX8nSn!GWHWXSjI4e@cVsF zTY!W>_feNwn7|sCxs*DA5k^7u;-VJ=3bz&Sv}mOt`Q6ZhUONn&CKr2%Y0S=~2hbrI zF3FIbR2jcjIk&l(hXer%%1{Ofho~0SfKrC4D(&#AyIONbX^hBQBB$%#C73K`K19&7 zUN*%3l=hYu8G?v$l)HYs+i&0Xy(44cK5G7Ee88ThVM1h03yW}?TgT0Drldmr#yQ~9 zXHD#krV2*+OBFUN)_MXv6VSQ=*H;vF$w+cnfTacQp=!*?R);A}y(UEPdlN{*76txyi^OUt?AJ5w>{q zDrXuslBlGle07aS)NgI929Gts;|~07-f&3(Ey+Fx(TH2)4`g6u?F=Bl?0YrQT*H6p zoD>|Za6|eVQ~+M7g}0K(aT|Yq<7#W)n-%5D*W`N~)5Q!@cXzN=8MTt?NCwPp;@9z73Q-kI|eRm#5r4b>D8DO!Q$t zYddTG7DXiW%VZa^o?p%J6y*iQFC6Kv7ah*ey^0T^5OVwI{s5-jmPvvWjDoL{j(n49 zqVL%fw`U3tJaXsVw0SnR0V0Z1YGH3FC|*!#-@ak=nYTq<$o7Kv4xbP3lB8Tu^mynp zMgJ+&X;O>x2Ru$w7XYuAf&JtJ?OrQe90?Z+(PT}*%L6u)#q<#tf59*AEmK%GuuF1? z0Oiv&WRvQ}i>-3QrZ?S8mf)x{meFw`by|vuItX?A@O4oThGiwxJNZ zWUiTl2Y|<~uC((_+~*tpEeVicS?=DZu>LNkR)b?t)pRDWe|tDj%=Xd3RvKjtkLoE2 zv#;*azkeS|GG-=LXCBB*SF87LKYo+$LHs5hkEs@(jV6OmU3zx(-J-{}maOlt2s48K53_h508ABJ|u4yS_ZmIB+z);C1!yH<{>U1<-X^UQzT zEyY_{Ipm!Q$nK&0+KbpXVDvTstq(h8j}oOP7Edhd*UP3P`n$0bfd03pw?gkon$VA76lN@O)bDB?_oBPN zO82awT|G$3G7P};?%z^zVq5RlfOWp1gr_L1Gu*&V1AUds#x-s3D(Kh65V@KX1Q%e2 zj~!R!-26>L!#9*YRhyHK7P0aUst16D`eo;W1$-$6Q`1zUylm&km)WM+B?GL-6i*bU zTJ^>?0|pZDL7u}(mmt?5LE*Zfva(30@6UI7r#8Rc)9)K8|B)<8Yd>Jx zbu1B8opoDihv^@yaC{2C=OEpCt9cZ$MWX!urz;eQ&7yeRpfAwq`CTxw7k+eYZ-4)1 zdU=XM9C^CPbNHpyOt^Wa3Go&fw=yn&W0&k{Ky!jfVOTdJVVSWDAC>?`e6GH1o0~TjE_9>NH(Naf z^mX~8=y)yX2t@co&9kPx3GEF<$Ja}f)@h|eCqPN1l0sz)+4=3srLR>rb%!A4cd&Qqzt$)%`K|7oea<&W~(#0njm=QzJDBu-ob=;sKw}0wI}2}`?Rcaq+Exj6z=f; z9us1o{uKa!mTb(=nV6O}`SCIF_f0JCjR7_$9Bj9H4tto>08q;OF@wOb%DV%6u&cQS zYlg>YCIh+C%SeWql~VjZ)?~-L(vgOandgdTy?TebGk4w!08e~9KW`^F^ae48UF#%Q z1b|N4s3^o6hAMT+1~=T8dcn1zHT!{HEbNd9a8oGrA=jPEn7{nCR@FGSIbXpL)J-D=eAy^$-Fi*Y zc70A}&gJ&vyg;fde1wLHzfnu|r8|^tXNr<7k0Ex0-kAW(RkC$9^8u=u>fKP=4qq3Z zk(MJ~-cSM4k;Van1$tc2zH&5Ftg)pCwou`IAshGe2R*zH4FfTExFmj^1(8tE4AFEzO#*RK$fSMy;6|?{P*n;D6_7Nz z*xi9Mc%}TpHvbkST^zW^(6qlgCe5vrH*Er9z{3EP^F^I0D3@Cn(F1|vuT?r|yPy|k z3*;q+AkuS253waVOX(gjm*lL@zNBKl4+35l+t__->Dzl(F5-~iK=g*+*}0Hl-abP? z!s3<3&DXP^zR1yxy$LzU~T%4Q_bgsAuw}Jk4!sf&(_@wcCoVUvJ%}JU14nCs5n6+#+@)2dDiL zQn};!?~0bwGIk<%6EB~G1;scKO;*9gBIj#3UG|}c-3$B>`GT`ETqg8=8XT=vKt0yr zws-KRf>`g9>o&?{G)oey_*AoTU+-i5iuF00UCL#fN&8rQ_NQ(Z(e%rYhrZnOvo|`k zfi$CGe@Y>;kAGFo_JDk=-u*(P6^`h8RNy-pKHN%S3*T#**iLMjYNENa97% zc4a@|Wm>|77-V+z3o87IqQrj8R=qIGp6&BuIG**~wP)ws;4*aXAEt8~^mtc2$&Q2y4*h9R*$gzK~h;gg4^u6~|h2z%zO z8LAW%$OhQ(+I6?90|!sHIzh~N=IO79a;0Z0_DxjzKsP_(+8Y&9Pjm}Bb+>*|cXNXH zYtAjG{&rnk(PgT)xYLiWFVOx+{zMM31hG(Qi8y(?d;tGsJO}?7S?nDaL#hdIEF1r&E1!d{xL{j{ zr>kjSGm%RL$9-Op;keZ$W)JAj`>+575t^#;s9sh>+nXlVPzw%eFc`FFapr;c%h9(V z@EafT!$W6*|Mx#vD$I{RPu75b>A0X5->ecJ)~0{wPI={ed+Giy#{1ld#^&0m`|UOR zQ)2QzE(0y%BieFFCx#%tpD1Bl>27Hn{ykc;5k9QT2`7jd+&@dMkIYBLL5Fj-<<(sM zBNl52m_rZ8=^q$vWm*wt5vCK&i;illMLwpg7c6-JwJ`8DIoWPnD}wlipt z%kvyUBd>P$j79dc*aN{tqDz)ZAwk}-dgqxfh-tn3aV#6PIPY}gJU9HB!FjIPo~&Iv z{M~m*#OXUbpZ2BqH!rV2Gw+Ij@oZ32jpem+OsIUCG)6SR5EN?Z1Dig+b^QYH(p|ui zAjY_d>BqL|kC7O{fCEEanFM=#Pj-C9*p!gJit&S{7K$cF+b6C z+5budz61ch!I>=_s)h3|dlqp((Tv{Q0pUWlzmVvySRqk|!WU86HQ(1f1@EVA8a@=+ zdBIB#bG!lcmBu)vNiBp4rb%^N1&c%Hc31C}&OEi9Ok2ZUdt$O({y0j{7J8sumk=&g z^S)hs?KSBJpqRT)YF@Q^4WyRSMSVRIkj3`;Jt&|i>3)t9*N`-y{+k28_LEfBk44=4 zhrN5gxU~m@_b=Jn*`=u@0!(CYHVp?)?R)s;Y6J|u<7ZTB^1ocEvr}^NWPfZ7*ne0E z2b6-W9zucM%)j5_Hf?ZMBElfaAG>_3!cO-QP)CDU(i}h>#Z1m(rPNZkGQTmBn*p?) zOBOnq)u>fpDM#{+e>_hX7G#W^ZQu{=OE@=3)27tflU^;~R{!*^=Daf3+R%?!$ssba zBOs7%@!4w@JFvmy@maSLYt>I|I!#7;&qDPsKZAZHs<*vH#kTncl?1L%WF}qNS#vhV zsq_Qp;Ew_V%R_izIFBr-GBRj{ED!<1w6Q|BhN`3sCqJr9oD;9doN@C zYI#gQZt||p0RpJjOl$;dCV@RTE+5z)E_9RHZnV&VW7(ycQ~qSCC{VALlP2|giP59K zdibWmO*;mF_WtgBOAYt!Ck7b+xLva%^y4P$S+gsvFNJE}eDyDgAI#eV#IEYq=3Q*~ z*SD|UriMIgQZ2%NXpe`-rwMQl<8M=(^ti*NToBPSXkTk_cFm_mu}bfOeZ4n zU?Y6ptwt@Mn0R(-r(wSn>3gO()qqRUtDWwa`G|r+WEmgR#<$0VBJ^4E(w@Q1}EdNs|xO;?{hOt*oW_bzw z$og5d@iP)(wZ&lN983Eg2n1?%|5$MoG#h{SO9bq|9C6wC&CcQnhI76&Ri^b2m4HGZ zoBAd;%dqL4G4liVan;cHAbASeXpcMMc<|?vx97@lgGmnusQ{*}Xh|W_Vup{5+6#`^ zn5zojoI0b!LQD5dv6=I}2Ii+E93A>o^Z;LZx#rO*$E_%{Ls&5UMV7|eSSaw0OvXZs zPaK&3aulET$H$5mi6Ma3&ka=Ky>z}|6n!(w%nX}nXb9BgxPmG>zJEv_hpdjC?SCFK zsqP~E^<$nQ|D)&Ww0qa&4Vnk=xs-pUCEl{*%rJTEg2DqCCtZ%^2M->!Hq?4$t4DF< zep+>G;J{fo?|kJ6EKbUFYI-mciL5Y|0(KjJ?)t0vgiLCHBKh<0JinUTUjou!$xB@k zu$LHe>n&zR_E`8eWjkG7((YgGw;Y^Pu*iO!)WIy&@|j(Fkk*?(t2ozzO(ZaL!tXr2iH zjg8V@Jfmx1Nip7FMg>@LN&Z;NwNm^n2AuYg${&=7`HWFet!3zZ1ZOiOeaH^KDDtk| z8ZZRNZNYVo-Xh{X2Y(@LMg!5ugwqeNnv?((zAE~XYz+~B&!ftq?RY!xKS+IRz45kv zX#sn$y5jB;Z>MXr20CeLgD>&v6)hWL^kA0(&A)p|sPK$>NL~(5aqg|erjB(=kCkjF z%+Az1=We6Sx2`Z>>$YuVDZIn;3DE`2roM!bt9g5FijWYrEZdWwnx8#=wa#89r=F{T z*3XQN38Nyxm_MDsLa6?jC4P^}-8q(jd{8{NuzESJ3SdRn<)UXh^-0CU!ulRh|ATv$&iwsZ%6u=L=6Hyu|Jd<>c+GyjQ-PI;bS3uZP{Jtg zALL%o1KtLFflvFsP^{2HJWAKg0Q}nfbJiEHE#_`k;Tza7t$RR+;9d1QB5C?IRd#Yn ze4>UshK|<4=mUdPFDT=q7ABX#JDolAG^OS9qc!e*wSFQytT*^~K zdx&LBSf*3nddVD2$M1ICSr z+;DQHV36&K>(n(FgA^ZW*_ES%7CQdx1$vp*oxfWu00Qd0t4PONSkoy%=n?J^;MsG& zBqo&vh1D26eAv3bIr(H~q33%k3|6z86^Kf6`W$??H*eDlbh7Eh0o=o~GE0Fg*)Jde z`2OUI*V5e|u1bNwdxPHBiJ{oIepKOD;VH#yk#5paKH*X2$8A z$G8VSrRUT4c&5MhDNRI>eB!_#9?9Qb&7uS9Fq&U`bf7njJiCb_{JSKAL!hwGOkefI z*I81u$Ck!E|BuwC5XYnvuMa3%bg!t86zl34#xHWT%{@`Sl4E~CWkQaHw(|XaxCy#M z#cdZciaSbw+7kA;7QNO+^95+Qg%Izb@-eAEa+f+nW^K#O#Z}Ml& z!6<+bNS2;JAPI9Wti&aRsV|Y`(j9=z@~5Nrkr+S-Zl6}#>C7s0OLrWC`G~hp6COB* zjLKb@0(i?#7Jmp3GMJo6O1xe5wKga4xva57PW~wSu}87_H1$N!y#$~-&9Uj7U1T*; z0hu9qZqy^5f@xzE#iw~{>)UnxxvTF!x0v$55{%^0BPaR31wQFLd(BsTI<7ST{kXqB z{+M4(b2zqjC}-7{YW7m($XjSwmxHB}4!AYuszhdn4WD8@{{NQ z5Q}m4WF_jP2T4!%5QEDvr4Uo6p3nFg-~9|$9ggHaOs+7|%c?1gCg}gpu>l~y8p5T% z>I($V&^<8Vi7T=GU~6kxb8mASD7r+XxnTgBq&L!*eDwkQn3r5_JBIms(%W&rYREtr z*4ae2-;ADP@rTBVYkSM(%UA}-Q3Vmkl?6(00UJYk3$F+pE-rsa>EYXTaZUsJ0;uP^ z^Q`LKm&A@MEP~L+b^HV8C}Xdl=*Iudxq9Rr5i72tXp?LH^vd_ThrB9XGHTZnZj5O0 zMUJ>{y?VeG+l^De$dXT8_jm9+ij8loXPDVAKb^4drhA8TuRDxI40xiWOGgENaoEY+ zL|wPUo8z2ooB;K(Cl~qb!u3i7%#uuUZ2BhEegE^Pfb7)AGLn)v-5f&AZO48cRnN*T zr!bAiE_#y-pN=Npn|C{F0hDe1YyQ8K+8?jp73BZyC~^&DFz8nxJ2ssM>_uf?m%2dB zY1@D~Z%wH6O{zy));0!!_q{EI*Vfi{q!bv#I2hrI(N5;Deq-QHj;|pzL&=m!g*W&_ zqUPq_J;`cXb>KuvOIg0V_ge6&wuQ`w4c8LqGNyc}$-LSX{mZGeWu`Gu_&1DC;pyr5 z7~pfi;`jahv+)y+t?i`4;tMgOZ72DE>A4_bj(<>t31VH(_FlIjdZ0WHO(+EP^1d@G29klu;}`)Yk!iuRO^_czoev4uuL=9;h&hO5koiV? zb_fD+)LD0c1Aow&b0oDDvw+4AkE(5N$3?qMRPOHrJvHr=+UiLxmoEn~n@_rz1yM)` zUvPPPFD%w3)&!obRK^bEy7(G6`>So_kclYvr)BJby+7%^&ZV+*w=A`NHL~3)GO=sN z14BQ)sn-zq{cGCJ=E)iIwFjj>bn~a7tuW5t$Bn#N|yysRuTfPjQItzETtaw8(b@rqe$*q|Mvqe<)Tr~eB6m*}N4pAH;i#R-g@Zs>r^a#=tD8cSJAW(Xe z_S;rN)sB;98^kX>Gko{ysnfrlR89GekfXdkza$j*N0S4e&2Wg9T!R)MW~{ZgXn1gBJt4SO!+Atii3JRG#uUGa$gtB$;MAVr_8 zvAG`W0hhj{qpK6{35SOT6b26G0)6Roj_nt2;2z_QB^@&{?@B}gkNZ$8|5Bu5$Wr=p zS}6xmI%((BoA@1KaVjKAJwKsCNQS=}aU)h(4`OjW#Q)?7n?L3}YnoKlH_&>~?{k4l zdD3gqJ0H^Ca7bo9zH7@pG%bjI$H`!9dQmj-`WfT5Z{qe|sk1+&t25tS z9RZ0&(u968>SYyTrT!F12Mwi- z#(-@Cl-Sj#{+z5uDDgBDv3wP)5NK^FHQt5b+Xtc7J4gX7Y7=X^l;odxK;-%U5AM{> zvWDcvW$@rp^E427)sWe@NQ5mfpyC%%Pi8-WFCL_*blSrS+l-i?)p@K*sm-p}G|ckM zIHS#$zxt<_K0!Qw)gZDabXRja%5wKZAsK6RKqdiR3IyFk2jd_yHm%oB!AQd?dPii~ zI*E)xd69H1J*(>>_#IvHHrbAZ4_r4#_5w-tlJx_H=V7964w{x$-Q%XMY7RiZu<8I6 z5ZrRA6tprNK^BisB z&aZSlzCTNRHC+)W6c;K@M`SI!u61a~tfsy2_!}i6?DxQf1F(K4OG7Et2qSv7wGs1k z>NV&HtA6-B1#2>>K+)?rKF@E%KQZ97l7v z6-Mra1R)SMYTV?Y(!gK%t{_6x7G40_(9AD2+|@8{qF?7{wLGd{`-057$ycX_1BQTZ zQp3kv=)g;;6h3siQ|KTbOlU3mhD6*LR={=~k@yHA@nOc3xM-o-NFhy3q>wFZ()Dy1 z_d6Sb?h4^W=T4~cO9Yn+ilVVMYDJAY&ZE~?;97HVN#IQ&I_6XR1HMz@0u&?%p(og$ zt$~|3iIO!!^@*mK+~z^L#r%8hq0P%V!e}2MITkYSwx4Fhi*2cW0wdPmh8XqTFIdg0 z25AdgIqI?+6#?O~{Zu||?`JM`D=_UeK;|iq1@^bp0w16bav}VXd#~#=hA`oji9j^k zEfSuObTRH?<^qX*v%A`$^`r1Z$WWH$_X5x+wqXjS0R}(X9fbM!2Cgzu{oPP42!E0? zl$gF_?>3|ag%N(Qyujvpri)N^e1)xLF5@rhs~GaCcW?Z+DDNA}5zTan2~iyxsbQMU zb5!J;J4X?3zeo!;%;a1mcrd{kjr5_{zp+mzt;JM z2bK?2EKmrZc|Yp&N8tedq5^00veS#f3F_lVJJE;=9b689*<;Bs5l0gH%GGzsSH@$q zX^12~fHU+8PYriYnX+OgARg4q;2V_JM}OqqzuhZ+_DGQ_2b?>i-(&_zr|D;D*!zELwPW@0P_y_U0@`b% zA?m`sURX2(JK-iAv4TiFoC_!Sf3N0Lo3(p^Xt^$l1B(!oF4z8~_$|?Y`S3#X2kw>; zy;6!Xgz7@}Ba&+`3bqeZ^>8DR$mb+imbobw=g5n=&xh{_QTQHmjGqD60wn?>&MR;A zbU-~@5TDb>ci_9mc};YGFKNrODlHMsH2=@~1y>*?>@)WS_X%Q!~z;!^NR=_vwr6F;!u zh#8^$PN-0+iQgk*24=~bh(o#Oo6q%!rG85=Szj3?a@N3WAZO|#^gtg zKQlDZ8Vo8S$2|=+#=e9AyFcEG1+w}zB}%3!g8c+k?QKS2H8)JqnYHlv3H`LIg>gl0 z_mno9UWGd_A>k*9kn@TM%_(|;wU=@nO>Ur;se5Yan!JDYsdJ9Wt`Cwn`nGi40u1XO z^Gj_J(kaXpnf)71UT=gLzCiMv_o(}B=Au6Ymx5#VUTV#CeM^e5p!YPRh0ZTa|1a1JTQ6WC#?o`j} zrKVqYS3YrTzY(qzvEK7Ct@wCx7>U=gQ$yCZ)`@~N`+mSJpQYtw- z?U6TU6D!V#0=aK`C8fEP5@)nL@8&$(FHpZQCaimruxP z8_6S*^2|oJw@><4_G?2cqsdx@BkYeGqtrPUb4Sf01oM=d>EQVc1*gz0EOeF0vs#7B zEy$VA+!|HSecL)&rS`AJ3-3%E9kqx^E0&)oy5Do+j7eOh;D@AL&X9T7dH~zRA4!pl zUHh!i`k?(b^&oOe-fI2}#FKlDv$QuFIPXajv49dNy@%(430@#pI@Se$sWn~h;ATaI z!Vmvg+vmrdzit{YMIwRfSxCQ1OBN2?UiHL%!Pz?sb($T^znpX!n5vv>{;c&Z@Q96@~OCtf11|6<<1i?a^k*DYts9KpKrc&H!-*TVH7MXU|Qea-_ zIv7FRS>*rYLsZZK3tFypuzFPbjqcbR*w!a2?*ddw;)wgH$-4w&onXH@J5mcdUOo|` z*@)ZbSGSbJS*b7WB7$dzN1@dz(d0NlkTJNejD53#V~RhH{IZ#!YOO3CXairm%`-cEMQ&& zOBl8Q8tOl?^60l8hqy!}Z{OaEG7u1-i zk+;zbqQgwDz1gf~KP9=!hozs|?F>cX(m{o^$F}s3h9q^M!02A%x`T#;#;uV+I5R@b z{^+Q73yA}1k| zL|UYq5QgQvq9X5Nv{2iZim=RNm3hu~fRL}Wch1(Q&HGruAAZQ|MS<-3nqaJvNG;FB zwXtW%-z)SSSR3YlGk%JWqJ}DYFPT#TQxnpm(4LW#D`8!|>I!<3(6D@aBf{Cam*}~kcj1rQ+xp7o9(^-{p zYpSa62kX21WKr{YD$Pht#SN-p-vrJ@mezss31AO6VQP8mvHLqUYK3b&VHotv#zEcS z$nq6jL&2ygWMzJoP0b!NgmTVoyGq{hs&Xw%Is>Vd2c%Q~9IBWPZOBBN3uS3quu|r$ z8w8VT2y-CBN)}|T5KVB)M1U*0Y|w?7#RY?UQ`JrK9{Ny+4H8l+qmE3d5IpG8EZB;D ziNV71q}%OD2>z_o+wDh~vTa2Vvf7{`-x$|spZ^*m$4RitH)Ajmi0>e*zxTw5PYWG6 zgD3@cU1%bzFK0nLS>-t=kfFuoqtr@Cs9$A2Ca#{((nZ!Yg*le4g`O#3?0tl4#Se(5 z>zGy-?Z+pB;^BsX^3g#Q{pAppxo!36dwi?t{1RSOG(!e>aEA|=0`2}kKa}JH1Gc?} zTM!W^)bMMmo9T#6`_tAZB6FrTqW}J8wJ+lI-fL7r8Pe_~k;`X!|NoE2Rd^s-(kKXJ z)Bd65>6eT)o)il2*&Lf>2SrV<9=0boAJDCGREjYJdS_dY4$QKdyhWAy`dCTVkF*Tl zs?V#xUNCnY&2M?5vEN-+CBGM515^}3nU|>Y)x3_;`||(f(i-Iu@SV~s#U5^L+KIVh zmykF9Q$-@p8hIwqs-#1OiVVz9vLh?8R0zIkdGzLOxjT#yJFX)G)I`n@ZByn)4Ts>t zyE$M6V!+j3&DCsUmn6`s4!fGcR}#-_$bU6?H5dsb;I8nDio~Ca zXse0K)gGHGD9jTZF7%IV25FcBHz)ikjv05E%Icg8a4X5)>Po0$ddQQnz{F<5?5i(I z1<>I`9KbZ%#<|o@um4}VXj>uv%@isPND=}bC?;L2p=EMM%bL19RU`BQbnc-P&gTT8 zy>ka;$jKDZTo63Q2<2^&Dl1dL838At9Ukw6SZShloW)txl7=4BL%2*DQ4?o~tlWK} z`cJQ(qk_}^uZM_Q6qzqmR#EdD%+i~Rjzen6sCc$Hg^rFThZ_|$>b3^@-fUOy_OC>o zPMM}u8aa6H76m-k0&vL$(593?HgPIV|LOA=gPM|nCv^t*35bK_ zT>A^km7A9ZK{!+aJ>($;Kas0?$?zvHklFz9kA^4I#9pvKqs_5}8!^f$#~OUd16tXC zNiD8@TU>N5EY(O)fo73dVJj(w$es12fpWFj+r)hfZ?29PO?cI;FNkv%kFPzAdnogi z^$gD81Uy<@21JFtlYdu$3LK59DAQWHi8Aj=)V_@>I0KRA=&_)Oh^5Lz(i5+S40Z~n zG6uT|8(usU4A(&aG!gQ;fG)A^6%s&?(5rDr*-D;hO1hhR`@}y_I?vk z!Ev@%R6L=w+7B}ZKu@xi`W%XmE~Isj)dG?`LJc>vJA)Ia;wR2M1EejVPOb18@Tg9x z;W~zZeWS|)xt|I=O?n7ADhCk2G(KFeOjNV|85|0v$p~y5RkZd~j^IH7bcq{2VQJ2hSf?(4_Mul}#|hCQ z0v_G2);iI|+)_XVIPk`$Q7asg%@Y@JMyP~y#5JEY(*kF3N(~iw0wK`V-hSD6Duq{U zwy%~07HDr=bl?T;u2=ydnC>o_(n$Xh?!JxbzmfuvtVJH?}VDucma< zCAGT=ad!R=&pibruNkm9bvPml?)X+Wso;D+2^(+d_=XM+3!pbmbUyz`*`S5zsiP*# zk}b-leln@)L^W62NYq+em2*RqIfC7~%se}qY!z_g5>&{T%7xcKJ+5d|GjB0W^>g2; zJe`yQHSQ3b|bvKaHyRN)J&Uj~Ck)u5Yn- zIP-sV7j>727{9ao(H3Cd`h>&V@lWiBZ)e_SGOsXeGX9Lo+6SWTSiv&e^P@YBK(;!` zAeaTp6DdrcoxDw>#$WP=0fL^_66d6^gh-+B&z>3q8G23Yp6eeM1A_-O#d4@%yb$tP zR>Y0@wK1_Lg4#S%wVBhIN$BE3BpKBVgces6YJZrCBOmr1P{Cs#Y5)$6hfwmVFta8Q z4)Rsz^1qxs^h0LmH2Q2yRdQdfBc4R8n!bT6Y2qW*A;35kcBuCwu*GBAU*hxdJWbsJ-|Iz4(UNWiCbI;K~05!1BTqp?#uOA#N zFDul4;Tns_uaih9L-4g|Be~1}c-L_bDtz^A^EjXr|3Yb%LuT@|8$}v7e)$Od=K?p3 z>eDJTcq@GSfWn@FaEi(?4Aa76P==)pkgQ-S!93t()W{jg+JoT13gra2LX`8i z^UEo#_xtI0_77OBgA~Ap3q_S$Z@&(ZW*QXq&ME&g{i zMJ*GeIY|omzBVA{y4;J4<8DgnNQswUbjvN^>g7{(GKE0@)2)J{0Mm2orN5xIpFmF> z_o;cnw>ZllFKCVz@0qkXJ2a77@Ss5K(#aMnO?2e3>tL2kWff?KDloXEO%GKJ(Fb%D zYC?b=_iF^ur(Abh7k7>{;vket&b?aL9X2rY@O*h=BjWjK`4n8g(5&@HEgcS_t(cV1PE4d)fkYcR^}EA znVugblSmNXkrC$l`%Y33$kgt4XB+s0oJ)qTxZx+C#| zZY8EMqxaQO6M{ZrqD(+4zsZ@#O2e^G0KFck)S5_(6Q;AO3Xu}5G&+OZ)8c({hng54 zDrMf15@%LKPYlS7xsvD6g2$Krz|VbN;LjCFN@N_$V_igc@GWnD>nJTk1}nFo)o3!= z8g%0&o*S=483MBZZw8};_Ozsw^vx4=k+X8r_6WqP1*tuDW!ZRU0oh$O(6#&|v(MZq zS#Uj4$e?((IPW!JH`nM5xlk!Qke>`qZ-BJ`G7Q&}+0_?P1gsoqtxl+u=GGN(+-<$? zK^06kLs+ic(%d@wZ+I#lT*&jv(hIAb?DX2mZ!IE`JZ}_HDfeh@4l8(}wFUkw81`RX z*0)HA`p(V0Cv|QwL)%}VhmR1Y@fmk+lc~DC!d&;KJsN~L>SHt9XZE{MqTb(ui308g zm2jK6lLxKyk?O*~M{Yy)SryNDHB0?jg2Lb+cfr`w*63*k$Bm*&->UftOiiQ>v}vse zfRFWu6`k2iEB0Cc4HEokykEpJn1HrlWi(QY6>w0_!nJN*G&uQHl)9k3iSD`K$JaLi zCC`deil+keC#K(ga0;*-$;}gSXL0!VQ)i2;PXm_YUx2JMP_;{c#cccA4q!vwB&9Dc z2i#i3`HDUb)>}}!neVgwIWF2ek;j9k?H~1N#JfXFJ}+V#9ZRPF{_=l-eDTjtLU^@< z;Viwn*_UYntEcmv0f}hs1c!$;hRBS08p+4ghvOGkgU9-3y`ehGc+&b3w=2T~X?lp7 z8I_ghebjQO=U-Metb~L9R&=XB9@%qie_Rm%gJkLwVM>|hLRf)+2cQB@nq`4_PlFcd zs}10g1^yo|P;&Y;GtFFDBCXER!!5`BEm|mJDe$vJV=wvs@GunusEcTttods2uK!^X z%}(BbbI`xPi)YMDNXV>$H+G`6yK|=4=EKf5UQ7xhp!2}f^!LJQTJbL183e-QF?yUf z4n5UwLeq?6o5jEn2vGDg4=N&ihiwZ2BdriuS7~&sZ6|pJ- zGOgmqycVda(~yhk9{S^CnpIGx5)M^i;o}}GbrYT1EHdA*u)WQ{()G-~gOS~DW@-U9E3(0W^2&kaD$a2srCaTe|a{M*Oa0 z`YpU;`l^^QjaBGJ`%E{d{|r$+Xk!4js@8xiI&Z{MviBp`Lm;<)-E%8gDs%teAfhOp zf<}u(0FgY8#s)7;QClf(E`E4Z^n^wt)k@xRV{<|V@P<_ToM7AMiR}3^E9G3jJ;25P zi;+)4r$3hQL77~jYKXspwF5mVSrY#Yy8iQu7@Yo>;O5^0o&U4r2XNSFOP7k-eU|7`W=Dy(xcj^) zWE_#`m>$}AREaKpg6YHaZo~=jru4D=3+xdHM|l1zk^u9woO4Tc+m6R0p}A)G6F zu4kHHdC>@*7#x@V8y{RoRVNa#8mv$#L;DELj?4dgc<)F+qrTfr?2+rJIRQK^ zKQzSt>~SQYFO}zrIv76I8;n5W*zNFs5iL}T2~a{c|M_d=EU~e%acAvZPNmiuM>~A~ z2&)mV3g|R;Oob5>(UJ?O&u|acw?^w)-5G1%&O5HY00B7(kco&GY3`!AOfF3GKP6q<+t@0o^?w+WZh@ zS974^DCQvxZdf~B4d**m1t8wMC4A_-1fd}GW{nH5^_0z2Q92^php0)9$+~IWlbp^7 zK;lIlvz?!nL6koyLj`&q@n)!soH6Pq@A!Yl^Zqu+AS>QKr?U>XklvNEf=M5KUR7Od zDg?4n0Y8gIg6WUJzrQ<~3h+xJVe}_|YRR~V&c67HJ865Le!XWkuQKQCMR~`8lm#wS z#aT!(m73!Hf55~TnjTQXc?xrmqcELndPr?&NgEQ`$F03T(Hi?ixMv{rNVPmJx5Y#N z>6v((=U?RrmYSe|=b_Bm(LHfWcTl0Qm*_q=?T-(;71VJggw963NPOZB13tMq1*p`z zk1k=rEokxPO}+)%4QjEtBajrb=&Ok4GIvM{Iqz)v3Kbx-P!M;9Bq|BqPIZJnh5 zhq*J4hq_I-h3qrPE@a=$ zFc|yHn3x%}{XV+ybMCEkpZh-F^Zh=4e;MYpdvDkEe7&wuwGuyV=IaZ$HI!GpQ^A}Y zqmDo#^*!Iiw?{rss6%G53Mhjmg*$-JmLDdRe9Rs#3uLcIU9XgZkPa8(CS{eg4dzj0 z9NGpo1g=(&^jR0NFtP|OVs4eE!j9>%C@AdY%4{SroB%BGh6Cz{_*M-AVY(ko>nt ze0^!b=hUwp-YP@566t;S{@#@@rfcIX`djY*=wl(B!NW7rbChB*7S}NqczpgPsW#4# z9d?-U@$wt@=I2Oo_^!2KTZxqeV4%P9F&uwQ)BxBJ`1zWmwj^lw^hyhaO69@+h75s~ z{tsb|^8|x$@3$~e+L5@94T5WVH0tJ-Iq4(-0z8tOL zolxtMdw{HmB?HrHck0k@KJSHcoJ28xwQdKuh#K%mPv*KHY9>}@7oLXKEqVvtJdb09 zc!v+}UQ>PeWrZL^eGUDBFV?LQ;gJ~};nhf|%}XcbZd&AY zjdtf?W`bvitKwX$i8p~kPDT+>i| zq`a@6en*jd^FC97q`@|x5}tJ~9a8 z{xg_vV=l|Hdj`ri(TVw&WdKRvHH#~?i5j$n&+;DsX6v%uG(5SHFP|=hxG=sp2iA&K zC`3!Do=S04*)uNV`k%rfV`l#l!CoBk#j0SoVhtuSj-+7Mro$}JZ3;;!W#?Aezl5HM ztz^7zrKw14z(nB^`>%>aWz(y_F4Q0+8Wu^kMyH^Yrn1jI%nJ;fV%MKqRAf>zx(53i_ z<^ByP`g1sChy%tYK;UZHGGQDGU%m)E*u=I1Y`jdi?O$S5uZF@vz@%Dvw#6*bN)j2R zBUzmG{Ns7F)Q=ceAwSz+)A#eYbBH9!!sM`IR= z0%+^hUlFg@o5&5ZA4IJwq6SPs17@yE)Qs-VkEgce>6oSTCHw~%ig*`|J#_}SRws0d z9Nj~r>G2SDNM?8TBssiK$2IyA~9fnoBRDZ!l7U?5M2N#SndiN)<1YLuGZ?q;2L$xQv$?c&P}@+ z|8oE};>7%Da<+0%ca4{&#bd9$TQmwfXwdzU#!8d@%g}7&KQ5s9AT2w8A?a=G+Z)aRf@(fK+LZ>xe*Ydp{cHY( ziUk1)OIsIw(HV9j5q`JQ0?%fn<#)Q?>YE2G^MRX z)O}aD^8A*S_1&b!l56+v6Bur4#0*Mn#@wn((?7-7Z!LYeJ=!jNCpYcb9f0%v z4Xm}3rWvcBa33U5Bv13r*&BbQI@(w=8};dx)h3J#)}-Cd_<-d{N$pligcPnpUx62$ znxiX43XqPGUk}!GvLr41fl#e+HM%A+<6DX%-)I^HXo6Rrl6$`2Q5MX7?;psTL>JKI zLmS9Fs_e72E?p-SJRV$*d{8)deo23mc6(J~jA{CQ7t+jT?d6;*f(Y%Hsnf1EeA@e} zvut5mcHnVuVwK=QX5r6Wr!$^z5|$KxIfhY;bseKN3j zY3&(wGSl~Y@!A;M_4bwIMvPds%m&WIiD(%-X&u7BSZ{G4Hiqn!Ebp_STVKBiuX9n4 zXZb>=!H)>jdWc=Ml9Ta-sRFL6q;eZ=FE7j_@L;0TdSv~AeO2F8Quv@?>1AG;imOt= zRqY_3Z3>?fE#m=ZWc7?tx_u5)4ZSQ z7dDc*fKbcmwcUnM{xJr#baq z3BB|$xXbTpQbN-j7s|D32DnfQjv({$0)xHWbCQuiVoqO>$?f;bB3CAmSp`4)_x=qV z8ad1agw}V=nF+_hz$!Vk>~JALG0CmuUtH=O?r*y8{x0|VHKLgoV^)~ptA_Po_kE3e zB|?KyntO6B3|*bafyDAieFk30~8e{nVCn)L;=EUPWVbBHl zN0gyaOVOVbO@9Pcsep#dBV?=!pu;0gGi%}-bt5F@#ve3|dNtkdxQBHh6}Hqf z3uMbYd#X2~H&+9kBI3Jjy2m0HP>Qyg^9a)pZbWW@9<#l`X0z7^jE8>RNl&9ftV=!X z^OMiTNe862=-#_|J{i6|8~0-tW384;Q+V5|G9XHW9> z%05SmQptQoASEW$mt(0^{xe2y-Y?=T1|DWT`-*r{w1$xKaE#(VaHYR@x}D526T2d2 z#fw_Zr^malPBcJad6N}Dz56aAE7j?f^b;cFY_gKpwSVdO`}wwa_xh)({(W2A-=jsp zw$%NQ94)26t&1_67nH6#w6|b7>+i85v6>$}rWoO!<}0%Wq?!JuyMRp($VcC{5^DL& zpM_fbj3qzZHc^N|s<~2WS5lWy70k&A1If~mXoWQ%<>Z0I{uoQ?I(`p9%8#C4VCFtM z>$&bp(?<-}T(1hZe|1~f<}qsH&px-`(;&be_bcx66J;s@Ml(PG46Gflv}B>-$Bke{ zt<}}A_pD70E9Z9VDc&LY)d`MlgKYeTMXg!ret+oipy@dFZFSLIG~DUssJ!W$0|J*Qq+_*8<<>FGV3sdiWYW})88~Nr# zG8umrHH8?PeHX2VhWt#c{3L;N?9_EPxB}G4za1eY_;v3mgxSKpcY)> zGnW)g_MkhTVlX>@OVrXfk^YwN3jhcs z2T7BEm2q*?NDQIn3(NJ>|5GOTN87t zIRU1IwPSx1ngCXQ?Ddi|S?NFqdyj9z`!0loW=MbBVT!qB$~)KRfGnK{d%p0p2y^^C zl0Ow-V1J!y;j+#;0Ab%h4`A&L^KWh#J?)3Kf(1iUFVnN4X)-Z1i@|px$Tc$;57T@4 zOEJLh{C2`M(@IVQac^yEN{}MoW1wA+WTcPog&h-h{&&kh_68E%m>~EWbiL__oRD20=gX6o`v5kd`2y zG<>RlLpr|8=(Gk${snK7l4FU@-!tm`8o+d%pc!k^;~42m(CVOBGo&ww6$$Yp!a0nQ z^3i2+YQ7(4?k==AkXqhE_(H`8KH%ild8W9^L9p>uBG?O8x+NstcCZ z?5<@%AsG9`L@fOx^#zvm1-M-l0}BRRCTHC~N&OXH6Yp5Gj2+Mq0Ii7(0;qi>))gsv zD|n|>c&0i^f%p7(AJRtTRzP(GsZ@M@P4ahi<#&{Z`Ob|+FCKPd^}3a+RnEAT3RmDZ z-QYSkunp(d%MfMO4L$X_XNQ4)>a4#HEdU32N}TFncS&vEEn9Mx@wKxnD|bi>sAm%3BOG=xYD0Xmam5cW!u=?-`Z|tVkITWzw~jX!f6Y)B?A>sDe! zI82}v98i#9WDx_!t*0u3Dawl=G#*rM5!cw4RKc(r+bv06mO9#oQVv6%IDquaKr?d? zK<-?3EQs7AGkIK=Xu$F`A`uUDYPb`x zwvu^#JY^NA0YX`#aL0cdY7FLWUTb8q*H$q zz?M8Csf7-JV)5^|vp`Jsorc_J6tIBY*h-{lmWEkz=A<)5iL6o24@xlARQUMka0rvN z=mMv@EJ8TR@CEb=2%~%3(ur>Cg3jv+f?vZyyxDyiwhtA>?je>IS4=86aG;#5F-K|g z8UM0VFjaPyq3yW#QcU#w028%#f)$HO_%~iJS7SErh^zQv^iF1p*eF{|A>E zs*WUs4?B56yd*XTUStG#itcO0+*&ob(qwj{^nz&`sKHcf8_E9buHV70D#D9%A2%}h zWZPF4oAtcisNMc!>@~1V0kg@`<$=UXHQQl1xYVZ^7%ddu&uT_7p8{`vN=n&Pc<48z z%mGiD?$=_H^2-U}av7Vi`NDZ9=5##iyi93XMgZL!2*0g=yDgG5b#1-QXixS?9bEAOZE>a*vE~e& zjQ#D;`!6@yE$(RN29v9(cK-L;&cXzDafrxezW~Z+q-=|S!|Qrdo8XjWthM4fLb#6-j2u1^ zs?B_L%rM`g`;dNl1Ih|m6#>>VKW+{eh<2ZmMx=|cv}1t!g~go8KWz15s~dVBoxOZ~ zvS|P5mmDeMYLFja@P|?}0~efa@oE0!xrPK3gAwwBv&?BSKUY_2(Pl%N`Ic$BLR(8b zCfqNnM#sJ2oeGt>)}`FM;mpqf^3Ek#jscCB!$#6u6+XV2h{>SX0e5E9zV0`cH!CLj zmYDddrTG~^5OeI9txIgi#ru1=WZ$c3oSA-^)}-lmT@Hn#e#a**wWN zzV5%&Bx4Ec8>dD7!`}w%>VSt&%0WE9910l3S@lpxe`cixE_(E7Gb{lGP3(_ABp15= z0i-)^&6Y-0>!wWYfS=U@aQU2~n)-OMo{I0$HS63jS4Bp`Ig&f+?HITM|3X)P-49%M zxnt4wc77_Fo@%;yQmMDM<}K8xv4vwtwt3!UH?H}@{;jnPXs!z88(~_ede1x8VJ2`b zS4j465@gGiX~2y!9A<8MvvczmsKM}6W5b4z^j|ySAiFq0(b_`n5mI#b==tRH+AANT zvq$$TCba+17x$Bu?fdz<2@IJi8WxxykCTr>qvQJm<&o_=+rHcFZ1_1HdgEONH5gu? zx_|P472`R}O-PXg@4Nu}^{=dW^+_~9igT884k5^KN{%U4De;})rwAHMJY;?m1bwgc zsfgwW{m0(59|A;ZB@@eRjZVbe`G$wAwqYi;$zfP$RONNp@vg?-I^%*{>9huLn(JU~ zG>5m*7&or{ApF6SXJ{c{jl&TY(fuKtHq`foIn5MAO6{K=68%E(8f-sSA$kx(Yz6@<--tm zK4zXh%?o+vVu%mSqcGNN+=hPwPv<5WMv^zU3|3iV4WwN=U)cli!=kg+tl}9bUl7$| z?`DD{p1}8i5Yf#3$5+2`>U~*Db_g0=Y*;)oq<==r;V1jropDarOq|qD<~JZZK$#`{ zRC*LhM^#?5Las}a0m8zy0O-B9HSb5n)(;rV{K9jvFF)f} z$2umEkn|ZK?PI5EyrcS9R9nbR?P7WZCKkX@r?eeD4n)RZP@e!Xaa3Ext9ilgKK0={ z7_Y7WX>0q1YW^kv+9qZ(hP5z*Dq_|ZDNvQzbq!7)o0$2(*xv{^_=E(=BbmLS2wuw^ zz!(aEnMdZH8xnBW#*F^lWOtkf$e6DOe0;zW6W`Z6zLhp;wLt9?qFwRtD&wQGv8f+t z81oonlIZ)7302_4U(N|s2D!5r{(p}`ixt`ABImIOR_H^l%>l#zu;T4QM_ggC>^H*9 zfA;42ZHEU2hTd%+^o9dV(-KoOP`~&$2D^U)LV+@YzAK_5oKH_MM;ql%SP2S!iTYK#)$q+`3|ie zxk#YO=kXiHmp+`N{b&5~H@p%e#PNYse8yfEVqUJS_F+Z`Mq2QCzoVLM4e$kLmh=f?>y^*BMqo7jQqi>2I~9+_$9+-5M>Jz3iyl?q z7j8Mzs#vxSvgIFm5!bg4kbcgsLoXCuR}6-50p(0kT(nQ^4@x(}_^PtXD!&)fZ7F}v zqG34IoE=Pa^0n{&JDY9n>+XBlR{nCV@?{_&a=|6_v|3AIL7Uv~40dZsH55BL))SDt zY#=E&(RV`&i{Zx&Y4c8Xrq%!z)W34rC)Fbac(3lp{DYa6EYk&npdgkB)T4+o&62CS zCmepP*&zF0`04%tIe%x#^Qfj#G2?7clU3o-r39-MKC?F`+L}=KduaH+YKxyrePaB< zi~{hSsu~``&zUf0Pc+jH{JD*(IJ6mSg1pTM^?_DZqT7rDsgx-^% z^Gc%UC{R;mj={z?`~$+`V!c(8;s9QgEeVKaN&5Kd7kdGGIiGy_aCvXff5m|JPo}8& zf-{Fjl=Yvc!A)@YX-M4;crK$oJzDFdDJjI^5qH+KQrW;T=6R=r=N)$J6^4x-)2lSV!xCEx{6TbXwyy~|X z3y!=ccbAEtlZV}!gdYBxk`5}=fVOduMazzx8L0Y%CzV`HWy+>s5LmjgCm4*WVCxL4{k?u4>Pbftu?Z z{X{CW0YN$>TFA5%X)~Ii9y=#!{q;{yNS&Jqew#oNHZYA^Tup4wl(N~1i z(tyg_7teIrF=fBq5^NK=2dQRct_E`!-u=orqDbYzMM|3zN~tuy&I zPH#I>%QynNd>k!wRC~ZI`WcX&gD$q(Lq|i&={e-0C*-EIdk-Vrpm;C0{I&@Qe8gwQ zsK7~mx{B-UO&KyIqO+ybX#d3pDM1`bg55h?G;s@}e zSlV!M3#~!`uV;>T-hq$RTHYK_^590~S_nZG&LPb+Pp&E&tSlwP|6E1mNXBawj-$i?%6&TE?pxZ{F(&iI%|CM%4U z&7ts)7hf}cm)bS)+o%iqcw=>Ks*cfBMxCM1XWtlVDS-Ft2=0>}>iK@y|rgn}1rP1o>_6s^CAxuN1@@|$GuJBtZ z$m3iwCHu8>UZL;}JV6|vRgPFmTKl&+?>@Xk6}D(OK=WteZmZ^!TU@=>zFw$BJBj@Dox!L}*Q{hO5feUTpECQHXNv7#S5jfL zeIfYU9^ul>w%p3*BoMJL@#B_uWo;h{6fdYGa2t3WIv8}Ek$)OFJDDJg^ba@^OO8}p zJ*ktgvu@q}bq427UtZ3*TSJL39?`_oYFk2H0GHf>QnD9JD;_6#h$PS77I7^YeI764 zBMt8mhE(-lb6eO0hs__2`Ruc(K`1-D39P5fJK8GmdK+lf~CENK$@jBiMcJvh=Q0meY5FK&goa*pKRmY>=1rGmtS5} zFY2-_vP%?@^>??!M=Ju}vsQ+xr;^>cQ58#`Q<*yX$6)zeW#TDzCl`Ny3}$jn%Yxgd zvB&!!`t(}zOtrC|Px@$qh1%!D*tHW5d=4x!*ja*d|8D1TW|}q}Pk{v;P9|yM&D7c< zmULIgBY>*MFCvF4! z;Ygam!2uw*?}e$_qQ{^cYmy)0w+%XNm$xo?7V4$N8TR^`>*v;gCp~hQZ?vdIt_-Tv)N4{z^$x%8J8%Awp{5tFg%He=I+l!le%<>f`fJ7Ioi ze$I`Ke1hKY-##u(B^3PZjd+3z{?yLmLL)Af@d!yP-^{ywspkWdGM}L$VFzS+_ktB# zx>Q8KS2J8%9@HDREU6gP3tVv=`uLLE^-lX8R{3nGU?K08? zo{TdaZvB{(Wp1H(^a@Xmx`ND4o16@bh6_7@ zz0}`Jnp!rb)+)JN6H09Lj`D_KbUiUxNeg2l))=ZD?LW3ILDaRR zT5H|g?0k=g_Z^Q#Kl`C6`~2yX7FT_74lGSl6_-2iG|w3hn>7*=S%je*^*f`q#(=l| zG+%o~N{$qjY=|*xiV_tUb_JhgIA~`-Q0~w~R-i>of`v@ePI%Q{P#>(M&e6~aD%=c8 zY={mG@FG_d9A=hBCMqFHV`FM}9op0Q8us~#eVglRPgNFgc$F^jh(RpJyw$ivQ0lIy zauTk&HbFu;^hM6Y>yDH*d@eAv7$%E?<(`_IKY1wZKCmcZc23p%DN9~9&*(Gpe*92A zqc8-qd9yaZ?5I2Ll%LBgm4Fmj@5@$y=GUT7{Lt243wyu4_UYle9owOYQ$g8+?GUHQ zaiC9EWMbVgclR4mmon}>20L}X{YH$Cb?{RIAL84Ck^FvCV92y-bGw-M$+4Lm(G8wV z{N!OeSeNg<&gAd}*CWT6kjv)|`iX!&0f$n(K%i7B?VgULXChf53qiDJzPIR%Kw12i z4dN-(ememUUqh1Y+uU5a^K+Nkp9L5%4!f@lNj`CsuVSfL&UIvAJ&W;KOuJvgg)<(m zRC8i3e_;?GSy|Ag$$L?Ia#z1&R_bu;verufK5fo8@4%76{32R|d~3#T0e#Kb_Rm2? z+sf;S)gd~xr*bIoVa6gxcx5!uZ90B}PxQpLD6K{H=c+DyjieBS=rYD)xeX+UvGVAH zT|>=)19EcpU4C|O9yi~E;!&9B<82}vxVX1P3~`A!Oy)1x_>I)vxcDM>db3tncnS!IX9|ws@hd&!gV>`8poZ zvAwIy*SfT(OWc_>O;MgZVt(@;??>;=mG*&##!m4M4|fkZj&>P?7Y5TjmztIecQ%A8 z-!3^mP>@{akm_><5x8}JdX(YR??TnO-tk(gyAST|dG~oph`H*hzug{n_x)nPtHs?{ zXR^xCBn}vj#9%1YH@i(Hp4e_X5NQm7Gr8SVpWWiHsL@Mt#ReYoAV?zlv#o(L+IC0S zusyRedm>N-JRh%upW7YNXj31Zavt56hy*(>O)y`nDtg4yOHYKu38{W%&a*c@KL%Fy z_5soh6M9*!Mw@~T5$*`z(oqGA&Zcuo{WMi=x2(K=F&gs19H zf(&st8v=}+-&R#-<1P<2LXLm~h#oJC z5yagT9jo!@)Fzo3Z1@5}*e}I^(ATF%Lzd?3-D7^O<@JZ`@`PxloaY{hvd^#D=ZWBG zWa)C`@(o?YYP~Kn+dY%r4a$s*a5sKSNFcvRzY4T!qhmE%^}>Jsw<|Iv58v$-CXdyC zN?;4-JI6{>TN*5-o*5=~iD)>zNxo4dpomMoGTds$T(QHVS;H@dn;XELS=Ptu_#V*O z#`I2QNV!HAb)*Y;u-XG47aJ}Vc$})nRhMrU$k||F?eXa3l)|Sy6Wlncy3D@$8Ugbi zS{xCjw);TDkonY^IpA8pp#Sh`;E8CIfo@3yt>&1v*RB@YjX(aD zMWCzu*V^P-^w5GON2~!qHOCoV-T3mus~t}F#;OQ;Te%(Xi)y-$(g~k+McwA} zF{D-3N}t{k5EIAaiu0Fl!?0K9`riev&cSIrLO-w0J+h=8V~wvuN>Xo zTOay8PPR8TJ!V6vht0naa@!Zb=wdK zbruMCn>~e~j<&xx+ccM7tSH6_!KYKjb;{k9!O|5nY5p}VOd06`?+8}HU!Jx~ENDl& z57;L@!jQMpE^B9~o9I?#X$NRA=bp9cBlMme5asoWL-j0|l826IA1}1Vhj!9R^Ss@l zvQnpG$l0$Z_k!c<+g&mO@n(m&JdH5sQ}C;su#i=t8y%AuR=leJ`m{|olG>!%@BTS> zu^u-+;PwU!d-u2_T`zRvvSo7R%5cj*ImL#Za`*Yc!%96~9Xf&=IbYwnRlK5CGX^3g zo7bOFeJ1%uAEARP5#vEzu6}tsgt=~OOvfr6|1I;HTV-VVt4J=nb7x-rjRx?j_Fw1n z6IXvG8GS-x-&fPvHvOF&97X22oLHw20bYa*ZBWp+4sbcoI^d1)_cJr4JEb?fjgQaW zFLrzJpmDDaxJQjuRsH=bmaz-trh+6!Yv(Jr0YkL=p-tw*r=2;cFV^IFCVwPZ`!Hz7s zu)`!Jt?$V=rG24vtAHRDN4P|CqTfatrEor?g%mgY0!}W|VgM{DXsd zv$HM7VTUkfOanoW{b86ZNEMCL7|G^oC>xND@BmFCE!lB#ck%G6cAJmhVaX=IE9%LP z(HR3rK@P8~=JYCDMKy07N%5V{c0E=1WCyH@#x42|$$#h>^X^wwTl|!XLv5*l`;}PD_SG9 z6}8oO#HVkkOF&LUf*z<=C7S4 z%|VW@1S3=7yP}Lt!z-<6YT=?+V=LJAT>F+NZe=?pL)W2rp7OU^@o6`hB@sZf zEGvPW4lEEs^RHJf-+N3hSYlB}{S32lTr11HHhqERG4OWKq6ZTnbyCQ;9~MY;DFXfj zC!@PofKW&NvUy*L=qr0D^Y%el2)_g4YVWXEoo=*t_sElF!=dQ~GIM0z)9Ugk6hGx) z$%eqe?5qGixz1y@feYq-vEIWa>Hdv}16lBZ&q^IEdp!CyiAcd9e4E|$$LcBi)} zxtQ@$rdp*&w*pfV)))18$ju&gJPbkQOcNQFc5EVtEkrif96Q&5QBK~Gaf->zx>zR_ znKOK9m&md*;a-a3E#G>^=tD1w=w2Hr;9G z+mFDk>yN>X!YAHZ`BmQUJHyB4qmq+zzpDA_Ud~i99RFNGcU45>$Pvd*oyB`w9SXZ1 z_Ca_+o=?i_tAp1ULb~zM#$H@U-7hU`S}#e4X9if2c{dupCsDD+xVGvyoRRE1bJE@*R@ylQW6b+xKK0s{TE z)VVJ&)RS%WV?)w?*t^8^P4PVFTV(n4{Cx4%Z;M=KLl?FZD;O8O+3Ir*Fb0t@%A1lA zvQ;@PXvMMtboAyqPeqzea2031pnZ5Qx_}2A*Czfvl~c2cGBSq&dZ7Kx*b_4t2Iic> zWpHyW5U#&8ik|~vsBh0Nje-}sKisWc?rkE6o?cY6B6Cf8xPP$)W^7=R3S6RwLz0x| z>{mn!ZZtl#8P?zckSnuQq7LOQ&021+#lm-a0*g&H>&4@bHrd}IRw!LgZ$-gF@&9<% zePoZ!?#D9&ovN)c-JN2V2s!CO1NvB|?l;Rhv3G5?#-`+iW}2fT^X-?qxeN7uvUw^8 zkHM_=f@QtPCt}G(=j9@wL?9FDqnoWO+HOJfI?qcS#AjuY(~k+Gltm!9g`H0}D|-yu zr(~Aqlx_Wlh4H+&^tug~&JTvZ!&{h-#dY11-rT#p?N~6E?Z@N{d*&EWxkIUK|qIfbx!yiqSluFI`?tn;Kj^VkR_6kH-2+h+?;&2@%$7tAaj&S9qy3^WyjEK~T{Y!kNxIIkVLv@ib?0LN}meE}Ez{#g43`0u#pZij^D) z+5lgyqE~8b3k#(fO_xt4 zy`RZUuE|0|bC%jqQmy?`^mg+-zxc^HzqH4|WSXEg7|6SR5_)Xkl29sQOe!KPBOXqQnYfnL&nG23p(vr% zlVc`=4~>NYBUVV08W6Pj6G!|il^>=~Ny6KK7coh{@3ms#@`^_f?zq2YrpW8L)>k=a z?AIgv>cusL(!SglxKQNIKGWw~i=H{PQ~EBlT^|98P-`<94TNe%oj4CCnpi*rBj?~4 zmTt+3AQqV@Y7NUWMryleUodKa!*vVI7$I(jU8{v~UQK5gm%`HT8Xdq|?j8-4$A?zVDr<)o>eNTe1JHu1 z4+KxK%iv8Q?XBAFR!`=_ zrxBs);?u|MnIJKEMN8nf7`>&d(rw_mEQeCJ=#hZFRL2L=`#h)bsJ*Xg*Ef|?$oP)oft``TaH7y-dm(BVbQWuN1 zK-HdY#4Y-mQpqsT*5i@^0v4s``Olk!2 z!@qf&<;Mb_M@pIdksL4@Lkfo<^v$T-iHd&?5m*&Dp$>QKGQA29VY||Is%?LHKN?FH z|G;7Aqh2U~l)3?xEU)+J^O&JK*JNxZ?>(O8)7~!rq%Q(|VxjO1?86y$ee&H6$!?!C z)o5lx zYV4e@b9sJD$)6BTg-ieH*}S_rUVPc=CHt_L{sUzMu2Z!O=n9>uU7b=heS6geHpg>^ zMJO5J%|wv>^#W+qbB@m%X`L$C@#HWUCQeQ#?hjwzshd=?`Pi-XrHxxi-m37)?VaTp z_7U)l_)?IDYCdD1+#>#K2iCXYsam0(0UHHp$@LMG@-f=Y>fYb(s8P1?OE%Gx?k&&q zh42t-M%?S-ElTVf9X5C%prc3gf(R#J3*-SebW_)J*~M#5xVUGP5!XR%^{4a_m?p4N zP)2C7zA3kba=8pA%}uZbL>0@&-BNBcr-?yIZpbY>vBU14`Hpxu;=U@*xMijKK9Ezy zY)g>0L=bL=E|Wf+jm$-J85H($W-#{HQBA3>FvcZo#9Q3}q6wLfzuf2VwYvJPvi+F* z{w?`lY&HY7KdfGF?5@h^$738Fskb?_?8JZ$TaR zBAaQosxVUg!Sf;K>Ju}`*=Sj)UtWSOYLgF$1F*0bx~ueNK%CbCN%Pj=0eK&3-_8tI zdNJ=w|0q9j{XzL+uY+WhH*P(Q`-Iw@xCY!W(pt(vV1jwmeArXnA8i+{{(vV;_I}90 zUfV#I1`04*MtQia@Ow9LBX*G~!ID(`Da3ZMqn-~%HB|yvk`HJg+5^WP35$WRB^(t@ z)pGBB*T+k@<`w$l*AP-rw`&Uz(E3=u)h5+cw$kD%0~f*yM3#jZ(S(iB{gvp%r&Mu= z^y~)^)~rPgk~eYgbZ^b0l3N1XFF|kWFh5eVPJ;z6MV{I+8H1l@RVA3eK52hITb1i?`GjM1st{L?Fc({?U`;0|3Ma1u;M1TY@D$Ryy=R3$9O8yUC&f2r!K4?}ry~J7^XuzTnW& z$St_5Nx?c9iubBK8u*D(KS9NCf~H4` zQGt;jN9vh$a@@FC7Q3UaK3eHTOzns_6LQGp$6bZcOXo2vQL5ABdBDqqk(~K_5gEz8xI>Z1(v@LnW55ry^V*XU!tFA{jkxgQ*rrVDdxx!6AAJ#ja?Mnaqa&!~xqvAmq`fjDVIMRM zaD5O+arBt)|IoznD!;lR6p)WSTJ#xl!vuMOz;HE*Cf^}Ff>&-JF?VE1)s#%<9Hj?V z@qN@d3?ourfCf$lv;o?v)i`;0dgZ6nbtp`x{K;#kIeBonP_7;GZN7@??;2C7l~vM6 zNlaaf)yu`0_w*U!&>=age z{*-wL-;i-79mu~28CVZrmt9Ja03}*QHq+{(* z@$d*PgPrXBa{h4U2U+*UQbLJc1$z~;9hHC7j^9gJTa#RiuYMsJt#LPE4qr*FvBIB5 z7wd!zl}p)k3y=+mzCPz9+=@JLU*ZZdPVGFRu3WDK53qZpQCG>r*TL0=@}tFXqAO-| za;@k6{Dxx)4NJ^Q(v+_`)1~zhudq71Ues-85srEFC^9gcwEpvHo-uFyaZ&*?#%D5i zA{4-1ww!RqPHx2I&gBW`*BLIC2q_e0zb}0dxXnZ#&90tCrIBUQHYOcieb#X)_8Y63 zhZs7cuPyA54h%jUi&)Icr&zd3rct0g>qYM4vCpBDjXJ3B zw^|iEbh%y)trQk6dO-))ofraOhDK)DD>VAm8=XGVhv5K%jTne$i*Qj1kmDa- z#=5}+4c&!E9@mxAy81tm-+^3LFifkHr0n;;RqJ`m@YTWXDh~{Ya6UMjfn#x-nEPii zD}!^^SWM+|akk!)^4Pne=gF=5<955jEw+67$HGmvzu69Y5s*9rger}v zcB0x?oV5gdY0Kr|*IslT0%W-6cTGq(72=qE>hrgIcbw`oT!tegmpdXP^FX(@gX7+| z$vJ8zM@c==h-i;IBLdF%xOMp`y7*jieP8ZDlSZ0Hq(u5ta-~$+akTC3uru}1&SE0w z5k!TKJo0jm{w|<};v3)Igt~>fo{R>cuusr7stzmqL4_RKx1oIcp!|D50jfV5S|(okS&G0*(Wck$Dx zKOhYNDWRuV!D9~vPvIR_M;3}pPwxj3$h%M+iD+iivIn^?w({(ll4Zr7UTZI-L_Gjc zMg*-4G|;hdPURVN?t6;BP5yfLln4geCLTB+llAg@90a!>te4Z~ye~9bU1(LI_1n=# z`y`1$pK7Dp+^jwok}4a3C#3;D<&YkOfA{-Ktpe5Xr=7VM-iYt^cA;yEOz#B)>#iqi^>}@Ep%JJ z+#cFsd#ixy>QF>qIk)u13#bBv2n&x>?mkB5C!R^_%ex5baA8~ZP3saq8L(Xt*6ml! zd#V~htv&@@x0Sgcd%8Y1A;p%Gnq-i-QgiRwt=v_!+tw!DU+f0*y9-;XqIXm))MmKk z044Bzgr8mR{Y?`$QYMYht0cLLiNlN}wQv%FTo z7|!?%DiekKpC!)b0=;3R4mo#QGW+q3yN;r5klu=IpTr8|lND|a7COqy<&J%kB9w~4 z8jw%8j^7+JvP#*@tN<|RtBNe;HucXVD#P~gkueX`N;wGHSp&`tYc%IR@4WH zXw99n3JNby?(8MsW|}u~!Zz_T)!1K)?{pkg|MvClNF*gwnkg;ef)A`-FKd3h=g93Z zey?fi(b_;Vx1e2GIsQ#e!VSmd*rpfjRMga}UrsE)&7aX3WytUKj!G`#2AvmEYLfwE zB3aih)8(-M#5g`q=>s2HDV$_ARMiPXQZQ;j>hRvwl;fLuYqa#DswB+?b6cS7%>CJ>T$@P2wZ z&pGcoU;G(%nc1^v*37JR{nyq=u3%kSt2v0n?$>@~86CpS9@h#X;>sWn7k$y379tE+934gj5BgKfF z;xo!(h=yakduwVI+><^#OXXK=Q3pGo>|Y{eH?B^M!-60;V52-H#L@J(`LJrpN0vB*(}8ezQjhp5Ys6>=8P5fcH0w8Z=PHa;*^WREkN4?Y zvLC`f6SccU2A+51???{6C*tDQUFOd`E?9SF+P>+#+mK8@BEXJUufdRrmg8><*3q*7 zd^^3AS1d%sA;Nv)VI{N5R}ey&xrwOx87}#teALbG@pZ)QQ%C3$A5$nH)}9YI17%T+ zx`ax6S=5kue8Z|-l9W|i_3g=bA}lP6&uX{(gPyf4y~Kb46#S%znmAE`HCi^ZW8bG1 zYH+S*Eh%mjs;=+Oz`cy(3YR+e_3PKkZZ+YUIb_Xs5bAkVeHLybUFzvZ@(^W9P;eZ) zG(#r$Xp%cd17>Y9Kh1lSN&9Od{XmQbamrsPNL6??`7LlO)_wnH5Zj{tJYvFvyTSP# z{9GOv)ONmL;LDrM9%|8+4^6~q1=8%6gF{QEdRG7jZS*!SXpPyE@;*9V{u*${1u*pB z31j%XU>$%{i2V9KqF5GhvkfqxpI!JLDey-Uk<-OpMAvLItl;U~;S2lRX$TTZ$jSTz~EAjFwc?(ZeExB=%)B;8YXRN)pUkzzdnyLG|!|e_`Alz5H zLDXB3cv`5UK4qL8Eax5Xw9{+YNBg*Z@FTbP3@-bPbKWo-vPj)r1ABPoXPdqUeXmv= z??sOUizWytlhBK&4Q(sUH^wB*?PH<#BT|w}DhkK-M=u8(JKgLgex^Cbc}HHzCcxhv zxDKQpNrh0?GZ4CgR^M62w&IQ1W2)^lb4)FGt81xEV!m~f@>*T%PQf?WWQxQHDHSDO z^!10X#7G@kRF2}LRHRd4nN&82QNAHx8d80uu89Sz=hXO^vl;(OXcdiTupt^X)0zgK z!)jMouwvD6aL(r?LwO#CYOYM#hYA;>yL3jb$0=K-0C%=S6>A=T0s?75Y)vXz0hbfN zXbQ1&qR}NUNQk{2+9u(L#|DN72d_LRLCUq+=qDn!HmOl{cA8bi>m z^C*&`FzSI%DKbu!P0MP?FK`byPQ13aibIhPJO`|^bD!4NAN@(NOcb}dU|ThqxhmIa z?$-%|6!^hG%SQQqnjm?fz52tjwd)+trz7(qb5y|2fVy-+a<7b~gon6}AT#;Kvo)H> zKcS$kbhxJ5P(S_n&>!A_xy^pCzZ*2>ui62 z*|6nkVKQl#pD6wG5@KvjI z`>S6xIXqCMdku7E_o4+(#&pjJ(Qu?pwQ&pm+$u>bh4rmJ+r?GvuLo@cKXrt#L2}#IdEGBU^I4HuEJ(w&Y$E`9 zEI!j%z3%%&QeIPBzWlCUWhi9lS7Y+XGh&TB{DU>zJ~;1%k2rpO$hnJ1;VKbw_xppY z)>0xdLY_1*>eAG3hWny^O*YV?eIHGBJ^mD=8<&-OGhJ{asG&W+hqbcitkcBM+^2hC z0SrjNkJJs!mcR&f)uM7vR^i{M|GMoxCC|i z{`CC~)7NUO0moG+Xd;a>ytZTGC)W#2pVim3UMJ#4ykrGyj|T~a8mQ!RT~9*a zr{?0mfR*IGejofysJgla`db;rl+hk$?nfb|n?h2N=@b_tGwj4juexTd2baCJS5HP% z&zv$n^l;F!Ug^&TF>H=@WlP+5|1WMFuZmZ78k-1eAzj<0Z#V0S+avI<9fo010+1*Eto228kXKJr*8N1YR{IS@x>Az% zKi3U9s1Mi&v8VOZ+a;Sj#izKt*=5O*q=G$aH+N*NJ5C&V4E0$f9C|m`-xuG$RX0g;##dgWxv~mA2E=>*$yK{hWYV{% zQ@*A4@Q0KCe+S35i6KsIG`nF{)>0eFC=QP|?sBM_yiG%f&gH@4Nx&U6YHP~Hb}qlf zm2D=)3HkRw@#zo@oNC%s#RvM7`$v$PLoPIqlS%F#Q^CAXpLmJN_UQVTy*_$;FUU+^ z>QnUfaStr*`w&U^aEp?lLCGnL_V-i~2ZS4kj=jN$H}y?ZP%bSGJ#fuTlVGRiQruP& z8<9^KcBsV;%}sd*5~tyoylV&87H?=u&92Zdi8{vJY}YVYw>v*kq5G&{g|Sbs_~n-j zK3bM@>s(GK14;QW>vyb7i6iGI4$s8KPz%44KzFG>yZ%oHx8JW>C@E8FVr{94)cZHw z$E++dWPzlpyCqcNfGr#rRD4rh!|vRE!?8zQvcax=l)^IE>9t{IfqTCE>YiK)?G@|3 zC5QUVB>SnnSO7p=O!k~jST8O{P&5Xu9k1Qr^1CLrGa|D(I*mLGlxYspmjDHp)NRBGGc6~>o(C9ES<2I39k##nJ(OE$g3+-ONsFsp zi>=vJ;$QQ5A=|^@Eo+^)ozg}0;H4YrqI>(Y=NRxc^a~)Pnodq_M$m#Dyy!t9dDXVo zx-DOSCy~-d-+9q!pd9D_552p+exJ|Rij_@y%7WW!T{JrK-Xoe^)dniXxwGEd+9y(g z8!$0cSWpOSDKn|Ae%9sC4JcAqQW1(=36K<5{LupZh%NZ;DG}c?#<5@LZu0^^;uWk~ zNE?1o!{hJ@5WHIZb!un5T- z99nMdJ-T!h=CiHC!w&$TM{-W2N9gzq@wnoY^~}su(!lK|&I~g!LU*}+OG@ONHv?|B zUt02=>G8C8bMv!9{J&I1qc%HbZk8DiWzx<;O=oEi12nt4C(GLM5U*+2k7;LV@C-h@ z=s7c^H}Qrm+_5;`jDD+p*j}bQ=kkVApB%9|P-y?vN?yeV_2;jul+jlKbq{qU9~6KH zcC_Eg-qrWO&B?)p@#B_qG{2JY%zuYSn1fXu8_rWhgjW`%6-%JQ_^~1=g-8pv0 zk%D%OPsr0o`E`5N112FI&hkPT{>MceJzJQbcwDwuYTX_8rl(UGJKmnrkCgg6lNNHN z!lBh>4}?%Af_ON5g^Oj+3hd z8!(4uF&JWgqR~a6v2j4|9|&m?V#vhv zv-75|0n%EB|1u)m#fmkHV?s%U^a8}i@eJfkX|IK5(lb?EkBzHQq$@=MazCy`q2|MX z{X?tOp?=1$n{xP*wUcMknTV!8o!dR z@C~Ky-Kmtwy&z}#`(yj}4vqPK*?x4hi)n55wz>>5fBj;R9p zI%Ov``fpp{r{2r)Xd+#@)F<0jOdVn+Ln#tul!E&9KMT8 zwLsONWo*_YA}<;SX~Cz90TqM;apLd){v`+>4|DR|6D+sB_ydJ9oU4){v?s*zOCqv! zDH>k-9e9VXxy!keU_A0dsLc-FgAE6%Dai-bG02dBur9U|Yod!K0JBi@qj+@0A}1Fh zhX>_-jTLGkp^3Iq)e7#Lifd^1I$Nux`0w2kU#s3g{y0g$-MyIn>rrKb1qeyf&Mn@l z8{ZxwfEuIMWaa7DY@fHsl{p<(VPR0>>M}j!)RgjR{;nxA>SN}#+hcTu8Yh!g zNm?JiBH&^;JMOqjcZS^}zFQ)9mu;HJaMx!DcfoZo$R7+f*?7mPgCS<}h=iRvS# zo6OMRD6eHv`Q3Bw|Em+0s7QjS%A3emCWp6mhu-8vu`0O;2Y}8abIIQJ)BJG^Iz}3H z)0huat2OUFPrWc`!3(2^FTAu_P%1`;Dw(`9+@8kGOfP(~nC$^e`0BOQPPJe@Azmzk10Tp{_+syDcSCcTC$zqphX?@PT{uB7tugQ@zVY z!|gXkVO+2G>1|sJelYx(>3CBx<0i_#xWPbi)bpBF^UN;_FnOSGm01-s!aQFqlEJ*B zEVtuxo**d21!D46UvKpkS)fYPeM~PZr@3f(T{7?$$UU#alXzRP>rERcQYiO42;ykk zJY-SZTaC<%4!Qf^?KcEL?~Sg zzTrBcCKR5*M#%Jt^Ghe zb`iPQ)`h~MlSb+V;Pcus#QQ+3V#=LwXTTvZ`ll<=^no~6gqe#nn*KHJi|!No&O6bx z_`JNYulM$<1lo9`)A;d~T*6hmL}#TZTLR>88DGl71aOo7Hz9X@EnJlCCNXERJ+I2G z)wkAQ$zkc$1hBmYw+e;46^5ej!~rEwTvZf@ie0g+LI^S>pPqZ(To9u;@d)U6QF+3S+tcXo1f zUQ=vj1TzGO(rq~L?md(>;slb+EFC|_aE%$w{Y}#cI@&Q~@A6(dVM)9Zu9Oh=U;U$V zKy=26eDwFl67$6nzdmcNRvn}K(ii?Umf5&{j)D2G>rf{1!n^f#y>hA33D_@QJ zK7V999++bEuFTK)smb4`eUXsV16@OkKNtcq+DlGb%IAZL%0ClMP`SSeA%Or!!d+kP zqi?g(bFY`X@J=Zz(@G2Sfva;u zqmMM}V4W3qEQuAJ+<(0a9kF!(UmeuJ1Nxt^eUeT$Mas#9qvzKk{3lEjiJJfG(^WC7 zFDh^w!10l8nu%?RdgF} zbHnd33@HY>JnjSHckJ72jn1qSp_;bXY+s?XqQ3gQ!2Sru0eT1|!RIkS3ul9s=x{TD zLc;R*D(|-A&2@myt9}dY>YuM3Z6pFHutDB?ZG~eM zK*;rAyif|GwisI08Ae?gP+47I2J9yqaas_Iz5=^%EP!Pk#(zbs0eykIQ0;BY2k*r^ zAC_;3ZvP@!{;6;en)o;0W_SFG9QIzEq6k ztBjX{dHPfvX9{0cX+D6lljL?sj#p@ib>4rdqjOS;!<8FOBFyQ3dQ{WciB($k+l(;# zeI~yoIYx7~;V_So%S~43siny;^g$;|lRB}xTZgm#KinAIzhct=wi9!EOuWUl3aOGx zy|}cr`95;W;EAtO3dSWK@ZKw>$wIT(u1H9z&J4vnF)=f!g8ti~GiE{T|Cm3)ogS=g zC%C!IE~&`)3 z8MR#0HlpCfcK?;X>T6nd3Q>#Bc?sXB(5}NQ3M)rR#a(iz0ohz^NcXjhf->q?y?FnV z>>ue$pN|tit18QCZ=U+ot^UYMzyb@oh+O`n^f`s7Rm#=VkS)Ht_oJ&SBazms=7!JDfRN{>Q#+^I0{Q^6$O_9= z4lcksN8oylRlLcMTyX9LtZ^91P_VMYV+^2U3J!S+_4r!6zTq7R7o zlVzi_ZU(Q)1S2J_GHMT#BwU1!#+HETV|AvyC({gg&RUI z&eqUae4T)f{Z1!f316Hgpn0Egw41@PA%9iVOUmOm{*&$>L+;JDSGBxCwNwc6=@7qs zQ?Gwr!K5o0g$qN**0h+%8z*Y=Bkjt^ylgI~6%(9zpJROfLk0wp^v~d!MQzf$OysQZWIRSnU68^5z z_PlIHf&R)PuHMp-X5CGA%exZ+pRmL-<$p+XK-}2?!9=ge-2gZm>6W1V@kTWI`Cvkk zxCoiD_#HhVtt;1gAG;}`x_+JSGtS?#!dijEW5_{Gf447-Pw=;m4` zrFu%Wq_*RXBJ!&hl6p@6M(`enJl}jRgZ=G>LI;!zD}xElst!;dNl&lcaIAAtk@lYMJZ*d$q@XnuH`4BUy=Yj7ntM8Z2X3#%<(3N5dgWU#An|d( z2BFjo&S8OT2>}~-$A2mvZ_pW zg#6Zn3LF~t4Q%5LyPYz3HY>kWcN;vzBplv(NcB4c_zNeQP!&h%r14Kb=Y4h3M(;Op zEtLDjtZX5Z=^*V1F}u;F=S%6}#K zS#zA>Hz1LsGL2w64V7QPIJUgI=D3tw{;hU*^z@{V|AQE$ zP0S6+zoynI#_JHX;{=(Fe2-H=@?Sg54d53dTzNuc|EHB>(*V~~kTyI(uxvnfk8Ehn zP7(14utYa7Y{x|{+s&Y7nipG<(5SzWY5ucT*2a8RGg<5!`-t(3#e=0lf0JzNQJ$jH zs|!+)-k7-v5#Iru=(DT(g?OpsR6^nju;LgpS*jpF&8&}$KIF|gfz6)q*nADsKrBs2QsRe49jetfE!uRZ@LD^gYE!M_zL zh9QSlchOl78O|{ySq$=UT8M)sZO4X_bB#Yz6%N#8_5=$Ouh*6tUT6{wj*&~Ir(YTUOPv!uU@5Kyb>Ceh4eKzAdmMz5r>2B9}7?*%*<$Z zQoj4X1o4Rjz}}Q-%&!u8|3ejOKmPOHp7cd=YcuJWcb|~44>es|1-QMCx9w*3qX$%X zooxPIzqSUDm==9OoJ#_iKWk{e3|MSbka?}9iEL3Fj-(m zN3=Z#cE*|+N)0kCGzeL1{(F62uRbvz=F6N%By>G%dUJLTR|^j*J4q+YZjg#%40nCNB_#RC0~U zWG%0IyF_B@77Z3-eyCI_4TYQp=RIXA&FU5fj_$%L|A^!FTJsR=x8WUtp=!G*6~=)dUn)4yOC3K ztm9sSWyOpmoy@X~{gr{v^R_!5d`6-n)wi zke8CV&=X6MI$f)bvp-uqky3+Qw_dev=}dkcwB32_(iVqWP$b$HPXLg1g6F-K za0aW8P>4S0%d1hqYGlh}W0Vceh~M|#ZaS4wusxcJJK;o+Z#?d~TVF@rW}8`t_k(sm zpMoszGfxq7oZhcdo~nRLwk7Q<9Y1Yd0PV{M3*+0Q&j!h<>3y^uR$XKSNO47o`LlS+ zT51mcG{5^& z6fVOG_>mZ^DGBF+0C=7{8jewL&A=VZ4@j{Qs2-<9}96M{jrcGCEA)N#8MbkX-{Eeeb-}nFaxC zfQg$IN@Z09{(DUP9S-|2`_SuH$1P-k{X9Vnc(-%!fo;`(bVWtOqyNmA|8H(^noscj z^Y>5a)jKLm!ay)iJ~1kN+n;7Ch@sb$C)cv4@WhQET%{J!28f4;@}YO*=KJtoI^5L% z8#MdBVv{e98>Sgzmvo}8g0LPsN~;+^#xTkP%YS?K@;_D~x1AUlcj0r=DhPXq3D{}7 zJYGKXh5FbCyVsOA-+u&kfe&6(zB~Y&ZwEJELGHc!pR>OI<`#U1diM9U+)kp=Vz)q6 z&nRwd&ih3XUK)IZ*O_iNUEEa(1Q^^uBAM@SJrC~$TM^+7aL&VQRF{>_;S0b57^q&o z5r$j~(*(O)R_KW@p~5~7f$gN?$;55e;(`woSp{8+#bsy$%Yz1{eN7nOXusXc3MnKqCR@| zLV0fY_1YT-LsvBBUQb=3e7!Fv{!2v7B^E60HRak{*!fSAE6sw2!xr3JihRZ$Vs)as z9b#SD7G2timr40K)3|n0|C`GaSS12l@5P&Od;;(dwqV;DHKDAN@e@#CL;@bSDXQY` zt!|D)HMOvhZV)v8o_+!gy)QvGE3s;A2${i5p5cxbH?1is&ovCs%w?6EB7+68Z{AT> z6iwNpJY|CQ=-Pe6`t4#Xavfrt6%w{t_rR(P;NVzyNd&?Kl3>frgA1ugSja~Wti93> zl1KO>4FHFg8Zqz>%+;StZNz)liW2f0+tx42o+#JN^H<}uY)puS)E8c-KWG2$*t*j;V}%`&B_A-wZitdk>MGPPc#Sp}1Qpye~^_Mpn;p3)U0DoT*W z^+dUIxxi`eky>)Y*Phxxc)zy_rxM7dnzXYHRd=JmGOQVGM|qV*%tDF6 z2WwG?=d3UmWLXq0l5u~^=x`v_jU^CMTiooUH|NrgqVczwcC)whh(rgqQGEKh(-~nn z=Req=FipOi2SXR3l7S6P2i6B|Z3s$>hSAvZ`Ut-9Aay>Q+paUnRQEQ%ye7NelI78j z(h;TdF~RKHs8&S!Hd%SIs47BFuZRQ>zG=ganuCw)vkqnbZs`09A{QUmgxC9HU3w&g zJpwDMe(k1A?H~4t(>C4CJxb!_+2V#qA;L>vVrX z>3TQ?w169g4K`ti!mob>HZniV^z#&I`ys|Q)yYI&!`nGF2y$fZB@2*hLlVn`dFM-g z(f*Iy+nHl`Rmx7stSEk59PB~>@893E7>7uK74gDj3hhaHNBGP-G1UsXGjXnM`5AxQ zMObN(b>b2vInRKK{`n0`$VZEViMUcsP_{lw-`C@e4KQ-!c$hJXB&aYU8EZ44;30f) zV)b`1hseT~`3%V926S^p7ap_Ga;Hw^ddS7oC`Y7GllWVvFF)zxIo|#0J02z?&wgto z|C0UUx>sBle&~fZ)&8cZ7vvRYiN`Li%cs=>r2pHx>{0WiyAMB-Wy=R;fADGwGW93O z08g}>`pdo0!fk)O@gG0jy)F`qXi~Nbki9b~2anqHTwJB*AlOGl%b$qoR~uqM?!U{` z#`E$Fi`HlOK5}+#or9|Wmnef4{bmw>+k{)iS+{&!M!Ds!GO~ov=Y7fo{L^=P#PWki z|DNRrKA#6_o1(00%WJSBkk;4C#}AD^E5dvdM#og2Y`dT;M7rGh2hFg(z6Jq@JPCq= z=Rg1VPyqzbG*;yFB!z|x*Z0x-pY}WJtghBx_Ybc5-Q4>BVu+taozZ@KbN;r55~ul#Z5fH8$$* z-8u)!G4b7baDLc)ydA@qV@dzi=L2GX@t~qT;E!=OLNw&-zl-cQJ|G~IxRVb98UQuW zrQhJMC{Z^pD^cf3iApbwn!E8vYN}JqC9UueS|EpGX8hFTy$DpHg5)+jvP}nWH#VSt z`7pDFXCBVeurE^~3HNC)J`Q0j2`4Gct1a~4Pm1%DH~xJXpEHH*JpZAK{DE{}3de4i z<){aN3CIIFG> z9#9y0udu9VDd~0$yHSkq52|0Cxu=azyN_+F>F&S-U!EF5Z^Nmj@KMSh0XC8ne~1zQ zYAc;%A4HX!|A^k35p9(g3%l?m+9N4U5uF-FO1CZHB;hAD)L`eI-5^*_;=P|xBu$)G zvZ+4{iuDP~r!Yn5&}DrnlD?lhb~%ys)A+xv!tXlTO=t#To;^0_-=4f`|7#86F;zrgH)b=mXuq^y z>~O2&CYio(z*T47xpOhN)}V-|5P86qb8}^UbH}EHn7xz_Q`{Lp>syw)!cnzHS*TAp zgg^7X=#RmwI8Em8<&m#;z9y6<0VnNlfpPj5sv|d@cp*9J1ZA|C&POZ#V%Sh-UEyWT z2US<)&Im%|`rdwJ==hjs*<>Dd802rokG5el7^jkM#8MYdE(vgC<~F~WZO?C*i6`^Y zjJxaLhx$oWy87m^W^Jt=`@E~d z4r84m@}bD)=Ny6|Qi?z}BVTxueC3DylK3GDp>sH<|A|qk_@D|md`Y&=MD~;j>?QA# zm|#SDkWNGVDRMIV8i%L zHxiZFI5naUE3th31Hz-I_W13#eL_At@8@sa;crA1n-GHHt3TrPsza@OyqAq9CE_ zQ8PE^8|8I#a~6lXDGMhj1<-d`Sq^<>4#e}pQ0C4V$mF7B?Qc9|acCUs^=D#3*BJyW za7EMtRvIK~`+vhv;Q2O?nq_MWzM`276dMmOo z4^_OhTQ)+@lXl;h*es^Z_N}CJFs-)T^d&#Nu(@9$-*|j{{bir?v3?MPsKe>8ku>=* z-#GD{2j|xCbEwQ!;=!li2#U@={yfm3XqT1H+8a$dGCvMCIU7#=co+6INX_gb;^f>W ztB|=N{=$zG_dE(2kd4!_+CgoW=?6}de<83Gb*dlbxnR0AH9WUcIcI%c9P)qxPta{( z)tnqwjeSdWyV8-7@us|r8CG)R&}G_Rjf`lEI$28IM5=mK+`Y%M1M-NNK@!mJe`PNY z5e)%evgR2CsqA2roS02My+@CC_Z&5Ragby;X&C9m>U(f7PCjtG2=%2ce?&Lu-m!)( z1F#bIVUyu#sPGVQgRV?D#J&^eF;{|;Gd_7E$jU)D6`kLqufLQ8OU0vJWp4zf4K}Ln zy%hDv585Qc@-l1t$ET`lr%Ahr6fEVt=kUFWSb3KWOsIsApkMLHX?jaTQcROx7{~II zCsyF7-A%AmLt?-x<-;twK!h&wsmfNu7?`jg?6j{TAF#lFGcK=jTrg*69*FX*;%Jab zGK`i%DdJJo_lR>TDv^#s6@LR+46P8?6e=3-s21UpZh+)2!q+|Gby@<8NAS&?{iqMb zZ~FU71*2|ciecMgmaV1TZ8(7y;TO&{Pz0%>h19XM`)WhcMcCM+jg<_yWK^7XqOb(^ zG!jgSwrNnFEHRiZnyK#m2eR7tUtqzYyRtJ5&G{GDibKY1zdwm!xZ#;%>pp^`ogXKU zciZUOy?o<)un+bXv=lT%Y2q#d(Xrp1oJOqa;?~vK7O$9kE8bM-0^UY6ypS1&2h*k* zA7u8DI z9ch6jgC@LFvkvc^_AxZ?4s{pm?0V)~H*7P3Zwnn#?ohM9>U-o(#YYl(*_blfSh07! z++laS+`+qrA@ahzD`yffok>hR^~&YM(Wsqkm(=fGQ>8q4PI2M$ncI<^$I{-tOy{gs z6IS6a`El%W%PL_N(V60%HCpZvZ!7V=-JxsDJL_Psy>_j$Qq;0DIQEWXfMFsMX`HGA z>F7yvU}jX(s&(B$vw9}_B7!yK#5GwRY~RzqX-D>qjTrAp6M1vFH)d@58jVN z3TjJ?f71D*#Oh?#dYZ^eg{fa_Mu|2_m$ztlusryJ(1Rf{TWo}Jg#Nuqj9#8xU93=> z2k~k|wopX=EQFdQAMmtx_FAYjcjz)6i<7H+v5HH}6f+l_G z#P0Ssl_JB{r~=NGUo9@MbY+viuR33nd6ine&!hMwx~1ga<2c5BKCqRVO~O=X1H$E7 zOnOp-BnI!4iae{u-Q!7}#!Uw0d9lUZrXxy@=X~PNw@oYUdnoqpJWViwGP`@jjDw8b zSMY8(W6sfp$ojh2_hNA~l^FLK9NsNCf5!&}_H*zOUrCa)R3 zfk#pxZr`eYxDCE$OG0eNirJN(*Hkrp;jApP@+d8dWbiRUzV+VBvKQm^J5|_lwiOh# zZMM*mEv3)s)2*I0&0u1qBq?+YKZpC|oXrs-+$C4X-!*rhOw)Y_d^If;HiC^{Uc-&f zwP=B6vLPFL%GNP6Qizg@1IY|>*@CuTPbW%Yrg+}nX(w20v)J3;8y#g6v~E4A?iqek zQy^!`Na&U79fLL%#ni`XeS+sy?om}eKoMj zYDB8qS_Vy>_Vf^GDcZ{}{s!m@MCk~J zXCB1Q9Q++u`8NZb@>*YU&p?9$Zdlw!LwG#k5o@@PfvX0uYu{tMo zE0!Rx0(@{LvWOshS(bMZ z$rcp+o{!N;sSX<5B20vdtS>%a)l+XB&q3~))J$)vK_I>J?y7}#p7QK1xm&czcQVlh zmUG0eJI#X(-G1a(Ho#!dX$Nl_b_L!o=7WI%`_hu)WLF)HNwr6`-VcFT!)C z8=IbR@u7B<*_4_M_X`unl!~8JI7*I-HD9%>UQ0Z$-F~q(|7qbfT_>`zHCxK!K%|aE z9x2&fyBlYfA#Czu>_Qa+&ZgN;&s&#Z(boVbglc#)hV!uhN@dqzBzxMWrBF@KH=scf zTmm~d%qdV~!|jcqLMF4DcAA~B>yykwL~L==@nzSiEj&Dfqu1^me(}VJX!S|*MHdjYq)qb zqRhO-+&v*bhVDZ0`AHm;V4ZxFiF(;njE2Vn7GkPrDtlBgaMYjv^?8Qr z$x(TW6#rCfyupV{EB?DnR=cBv+?T3*pPgh%M!J8nE~<88p{Zj=RS+bxzwMvJ$izH? ziTv;@&*R3h^Jht#7oY#7B)K|fNKn9hqW?)tMGs<^Bq>(x{qEWY!>c0BpFL;^Tgfmn znO6F_eWca508a6A^=xieF^l`*79DK9M8EG?{{G*+&;3L5EApdT=>a^?h&V9ZLn9RK zxO6nUD&_=DAc@6Bo-uYVn8F|fbf`pKK=E|!;~&46?qnC;VD87@uF{8Gjs3`;XqXatfwHdVb@r*pG;i9x;K_fqxGmA)$CcS^ zROVA!N!_L_Rs;q0@8&yvC`vss{^#kg14}7|{w!O1egAQb4Lf8iqcix47~Z zCZg+WT<)KrYyyWZ{%W4hquYQ;_z-b{VS?xGICi$CT z*eG6&5M#MVjdR5BhDy!Bvg7s-+oas)u8-iYYg9u*5TKK*+k$^6{Sk}@EfirVW&IHETXlh*6$T1kPe}7(9o|I6irL2*9 z7ERCl}O`N5%GQd?}|cJ4j?_vOnRXz)^SVZjd)%D{3gdUrR3u^GD*KpYv$m0#Dmz^aSt`tt3T9hs1 ziT2k?s9nhlyb7!N!Mv6?Czg!qfBfT7S8uaM40qj#XT+X4LCZZ}Jn+Jx{If!{8x#KA zoyzO^Q@`g1InvX0)F3KjhvfdcS&Ag(52j?D5QG;oFx4iB@G#1(Tg=Ul>(!@Zj`NbY zWDNWm8H%mWwg$%j4BfyRq;o-oqQ1H7b7}D!e>0Xj(3d9nPtx5}{A_I3d#rZfUbW3e zbKnH-MRXRrg@Z}Ha~!NHNWR{QPrSa2X~DQ^@g`iZE*4^`GUrc?_8WDyaw9K{w>wNN znaAQ4n^3?&XZLf!gtMDK!}})5L-7_Dzu=T8A|PaUvrYW!Y5q^lGq_S^C0{xYC~56` zrsDFg(mF)>u#oVyrVfYPbflSkNXXs+%JCVy+_qUTY4d)RJpPjTw59aHmPp3A1P;b| z{`}~kMK(U)a}HrpdxKv@C9nXF8ov^e4*@TA?!}xo+dVH}TJp5r-(mVW*$Fp2h5 zA%#2T>U=|=f83)~&DRK_AU}KPFDLT;Mx!{%u|T{1VuVAAC!CA(ceC*iT(bzp%&ngS z)~9yQdZGJDX5I%Hu+!oTsT%9*{h|y15u<7GJc#{mNn^Nq;>{k7_^nu4YT4VlSKlSO zB|a19NpG0Im{Y`bidkwTKJnGB%6PO%7fPOG_0&yv>VvWRGW5Q3h-bd<j-S1E&g)gn?x=EHrKL$!(V(<}_lm6Cwu@_ENSH*c z;Y#gtcX!sea^9TxJ0qWN85<|OWKp2*l5uKZFO*RrSM`UXp5A6(K_M7*_;Nn?3@4=) zchL!ce$;@m2g%n3e@fd}TCEx>Aq1wt3`5Bs;Sg&Wy}o-2IouC(f2Z@jV%>%(!l7TA zQKuPt^%CaD_s( zeT+PQ9uX<_f4xT{PaJsdEoipA>+0?KiFr3adUM;!m}1l^D0l0jP}Ua|VjeF-Hgt%y z3SvL~i~T!G%F$Y4wBc>V?(=%@o@c}sX~_)9h?JNuv}YSrXM5Y&rLul_n#rIRL55 zG0wNUu%2~NssC}I6b7RABmx4F^L1JMJci9~h-x@1Tjw>^x-+4E7^_IUYu2wE6SsY zg3L`_e79Dc)$%R=V4Tn`EC&Lgc6wHRmai9f_(A4_q_k{1s& z)2#6yHG9Y$i0O61#2@A!ECH%^5YVD z>ax)?mBykaWi-a@+*-htbLlc)_UzS^ye!wg7RpDbB0LRbWK|R8N5c>kM|oPs`g)F1 z#?9v=1b_4yGBu|)&Y*;Ko545qESw-DPs;X4dIxg#diFNz$yj>~+Z-;|S-k7|ghQ#0 z3h{%bqD(B4a2aVAPxrBU)5S53R`*iUb$TGkuRk5Kf!*HDE&|PPmNw zcp6w=`*5k#ta}Pi-2B>IJeKL)IVn*h*54!PF4R34r1w0@uJz6}ZuTE*hi}6c3L>DS zsDKF44T9tVrMugK2uhcf#BNG%ax~H{UD7$p5dzZ9fYCihY^>hhzu$Wt?{hrwpW9!H z&vkvz&vnN2y7y)59;$CwZF_cod;@V=#7yjqR1-4YX=jU2=;a7*b)=Au{zb#bMCzFA ziZ|3lkkmZ&!C}co^1Fqv+S=FB2pq| z)XlWczvagl|C8i!l{8*JvS!OD5+r6HgQ?yqjEHyHqCsZ=jCTK>C8Jg7^22-5Bxn3T4ngXad(jy)Ufzk+?`?`fFSk-?7wC@oQ>qGX$*sF6VGqk`;Xm;%S>nS!H*%8ya}@Sp$&4Sq;=m9 znZhEdS3&pCgw741{AU&09@SWY;~8pW67B@$`Z2Hk^kFa%$f8BYpA`5ghCTVGCI?sY z(C>ju^~SfAsdppZLf#%qIL(Ja!31e|nrWa{VLyjv>-*$Q#ouYkoAphPT=XOTBB@T9 zAHr{rzd600i6h$?uTeI4ZQ~pB(<(R76(L5_=NO~_t+h(x1-kvLkqbOg?U=YI-iWn~ zzLPJ5aeeVR{S@&841Sht1Q^sLX9F5yr5hp6x@h=rJw+jRW@D_vZH2p(ze>HyOHn zt|21F2U};%6uJ#di(vs3qX~f-OY-rg3@Y5V`+`bh3ED7%vRvwY7b$wi%@jx;o6C5LdeGF}2a`?o?jRY?nf)7a+T{jk3HmCz2d34^sW|yn^_;ppBOST*Wsc7@R1dz2bt;~@ zp0l736XXM!V&{PqQn|G~8 z&GL0BCT-BYi;J!bfb?*SwP-?_)(Xv)kdc8Ia zrykaWMS7VnYJ8xgXORJkF$7Xkuv|ExYMDRlDh3Us++EUW>7l41cGCjKLTZ`rpaUYj zCE^P(3)CpW{q+ZhosQW{e5y!+dcf(}dEcfVK_@4(&{9CDvMRf%G;dh<90RL?rzG?8 z9jegGdVgJQ`Vw%A%1;ja)=dD}WnQbv;GNq@MjLh6g%P!#NxtD91g-Xect7wcb1I)? zEU=dSti3cM>Qj9u=(4i?b#g?|ALtX61sq|iQqs{?jhvi|Bh9Qudiqi?i;8Qv^E$XM{{)asK1%oBH=BJtZ_5)2Jl9(IpFw58-yEdO%4sL)np zyQq*Y+J`M>8@6>QEf#moa=hErne@q48|ErYgPvdodKYj|26r}%W&B3qLF#3n;5)S>7x8B41eSg306fV5t_jVWoWup z&xk0PB&Uw7*9#O*oREs>tiSE@oD_0gB;wtf+q~qoiS&0tHJ!oE?K9Id!+aJ*L z!$np!yYjnKFKKtjOBoL#FHYhA*e)L-rz++@D>2NlY`#e~?cblC(b>he`{}RzDb16h z=5VP)xo9txp(~$oD1cCXg}(_sRGIznf0?D5%Jy;|F6)HL zT1x^M=XaV}y-X*Oks5~N11``A_qV)Ym(f?30;%;QtG;eg2Zsh1$#C0Io>`P{;&6H~ z1Y4rkI?YXc&<44~>NG$ndQk~X`*O14Zc@=h5DaVlseX6W&7VYc$lHmQt{A?G!dmkq#9irQOZwKm z+Wl#-#${JKM<=JpIHE_%2hV=6KmL~k?x(kE?0h1d=$nL|9%GT@V)g^hd&zH5|B?$eFW0E*$k73S zzvO=WRRIw(y;_WdN3f|_udK|G`?BKSyHqpNJ_>-A#`A`kje~c)!7>$5_TBdLF*nS9 zLTop<{^Ztf4FQKI9m$ACMaPvjNk#7{xnuB8%Lpt%Vp;)59|{%E9^GNNCXfS%CJ~%s zlNiPF*FRyvC+C4jzaa#tTDW+-pHJeV_WbF@9}^1LxYuJN@|`dBd(gator1^YV0lqJ2bb#b?zOGn2cfwmy2n#%q)9P2@t5sO$O~`7MEgIg7MG#A_kZ;ecR97SD%u)vy4@XO zsgw6RW2MVPHd`52pB~G1OP>9HSl#KV5XgCp1ttSqtmT`U!PZXH(1uVKboND4jh;3cyBwn6>ed=E`CoXFnQzoNRO zy4i~LU3kDmRYx8_S17D$erK1H49M>^Yj8IM{ghxY(zp2>)cF59Fzf$cuVDsu#41*! z9$cKhqNm+H@!?b7T-g@*i7DO@0(Lqv&uc`+q!}wByhpj46Y~qgv z_Ikz821^qepLaZ_J53Y>up|-;Yg!K57Rv?GjqVXVPg;aga)%4e?^ks`vB}UtaGlY=k6XJkr0ng=kJs0;oF&r;?ZJH` z`T}^Z5t3_D^QHYZo`j7SKK&p8B{XFhLE-iKi|O|n+9%Q;u(VM%l|K?E`uHBljy4_N>;EI40>G?_+_$O1(MtFi) zQE^Sj^ntd3dnO{50_B7bmSH`ps{)9@YzK-H3}ju$gp2U=rkH=kj`O0>Zqh#MFc8$+ zAK`3B39hDUJCg*RV{``65j)7!UKJ}M30h$r{*3+-Wjk*w`=gC`r(+}`szD^)0bz;- z66c6exl9%d_6+?JUC8XeD6w)weVI_rX(W648A?M=&S!2&joN!k2|zdn!F$3Z=4f$8 zpPhTtIn7sS#1{}=*Q;hyM|C2rAV}j}Vytbh?d~*;@S&h2ZG^N%n1BYagm4k3$6&a^ z17k(jmr7>=i+>Yh&2THRwt-xH`M{YdM>;?u4>k;HWIX&=L(mI5QyxbNuq+IYV z(FM%J-{BlTXUe97+#MxzFnRtUk~l(*=R}7EJG#0Sy9E}p(<*jfR!5u4KLGuZ*-{J6 zA&5?VqS=|px2b8~*$JbH*AnOcTM+qX`f8b>?6GChS{S9X&!+9h)`D%8nJ&dWw;!AU zJnCT_QJLhNMpB-KeV=pTOgnO`P8T^KX!B}vjKBd$!5=Fw5TgdsgbiW3#7Hgu!{a4e z9X|Qu{{GXQtlfPK3>wbIab=*;q5pNwe{38NbL15tM*Z#6eW_+3V4?H;0j~b~!`R0M zRZ+=bDU;7_q4Wdcg24elhG4E8GE83|-y|Y$6IOkZ7XyO!BzZrCpzqOgn0vjS$_(#B zq;#B&OQO?V1_bnISQ??sozv9hw@mlYYu67ISnAH=0=!QAZ?x@>s0YJEIbgejLiA*h zurAFT7*U6$56~#i=7+)4A-6iwJ9hQS#O3tl3cxe3x8J^McP6tFejQyntO#gYviO*W z=wDv;oZcH@qw^3{xy%RaH;zl0eFK`J>oG4b+}&Y9!{E<8(^?veA;;1%?tkT!aa~%H~!iDkKl1e>ZCTAh6z5$_@5Qs~&eQtegYIt6t>)`AaK4!>+;H{LjHTj81u86V^ zu=xez_S*ITLS^@i!N(2CD};asa)ipx|EDb{AsX>)sgm~$?%*1f%DG=yZ;sOkc=%L z2Eh<%j^ApI>5QM@?>z2b<^{MW()0Zx_4l8U9W~6;o)pzV{@_P`aKAlzJa0Z{oHRc6 z_BqSf%_urn$V{o3tIVqe7D~BdO{Z!y(UEfb;NiC?E^Jy^b6hvrAGYQL5;RMlgU?9P zfLC1iJRgjD9ab4Uo@25^>D~#&=xkXyihUZ8rvx-crO|nCo7?Zd=sF7>hnhQWhhF{c z6<<6K)p$AcAeXqk;S%4EYFRa=KHt6lpx?8-lfYob&LFGbX#bn)lV~94%skR}`$Ir# ze@kq16kLpTqGXS#moUxMs8{^s+F^8OG3zvA7@|%M9BNfqjAR)x2(VB#J?Oa}UJH4B?Ue^w ziRVA6SYSY|FyD~ztauOshkenv1kOC2ogeA(eSJ!g@BL-AzAX?4UC(+9lZW@7@~l93BS`3d2@_=98fRKDot0IYG%!#k(-L2b zgS((;hS;iKSUd!8vT(j{3s#d{GV*21@uufJ$nhiw-5%m>&m~*E)Y20k4YLip#{t-6 z@&17(RZPTz>TVIWUG7s>Zss21Tzo$D*$OJ_5=<8pwZJ&hvF6YE3+b8*GPL_({3pTx z6JwKQZf0p}88XGb{xLs;v|aE~YdSg9^iOyyIbVEq#H4lAsZ>+yRGU~6iHN~-`eV$t zYk+sbLfk~O;5jA~Ty$cbdb}{SC+lx!|!_B zRvQ#AGhR-xH+TNUdqzL3wC9$NPQ7J_&+-*8c*m_}C799|VPErE2CDLGy;=BbXP z_?MgKzKC1E-}Ek!+vFMi%Co~T(DZ;C%uiavcmez=t3`bJk#0Y3B1rEVmbFq(fZnMU z*v(Tn1$W42Xm`8msycL$&j~u?Bb1U}>R=uPH;?T?ysyu?#qM7N5^ANpO-OJ4fjn?` zGoPq_kA6+qzHA%+snVunXT=dbZ-yP;mmz^H{~$EeSfFHQ{s|V;TYf_4DBb$_g2b(N zD1Q9=TugDHQfwY&x8BI%z3YRed%pDV0NU3 z2sRctOy>iGbqmvQ4-3I0!Dm@VSe;lH(nn!^=PXAE&`i2{gKPSZgmsb)O6>le9g zm(D1?@W+!Cw?SoB|J-5q^5Mr8lUN1=YCP!k?BusY`m(l?5aIyYxZucojz#Z|9BGC8{xsDlGnRfP@@a}7hY80lY}v=(W$tYrQSx^|(KE)icWR#jm(E9f}YUX$gl zE!CxhCZRwgf^7FG;h(z?6??W2(75Iw$2E!qfqZLsy$-9RN5Vzs zF^JA@ORmzShTO!-M8NK=O`YP;=GniW&0BVpbl?sZ|{5rLmEGJ|N7m!7BOa? zL6Lz&c+8*k-Kaoh6!hkw&*kzx;drGScShTDs)+kXoqa*_xuXJJ7H(!imsPr^|N2aP zzswGNsPpKwLnmS_NU&&?pu$2PetmUcm{E%OM5AO+6|J*A%Q;QyTdntK9|lb!)2U9p zES&D9WFOjCh{XaY-LgTG9^{y+5z1`$rEAK~frLn%P9~$zE6& zU1FqhUz>$OeVi_@BFU+^gDHje;+eV~bBWnqF*#LVmQOk=$(e=a_!_Kx?nkp;ud!)? zMTvvwE>l(2+4;#SjnCl&jAjq2((^xH@mj&J70^m&ok`u#rT6jB`B@lX+|x)Egr|Jz zH8d&k-5a~XOQYX$h6=PdIz+6d8!HpFhPaXN837r&JSBv50$PslQzxh(kjqX>O`r1V z7c8__%4a7pKwI1NW7#DRjMzVL`lZP2KU1bz=IpS`M9QMV#rB?FO}|`z(0ah5L4Xbx z?Um3-Ny-~2LWu&)4#Lle6%}$;-7L{iKBgNS#}fXz*4MKh{)>5t@rx5m??A4+zRWuZ z=D}#oR_k$Nq@fH~sN&k1myUzN$H`cT@7jPT>sI;$7O@rW`(JPNSHy?@717>o*nH0i zkwN{_i0?t2LV%=O3~3%du+=n>`-=T?c7m|=>O?<&w$@MoYr55?PY%ie-yQZwl7V15 zFYxe?109%owYHo_P>5t230%cWST$!n4aCS(0&%1M-(DLoB}}laOb1?8@^$0}f8$!_ zMNO9?x}JB5o!EZ=sqN6@&L*;4oxlx-2PkW$;{+iz2;BYa1dpz`iy^kL=uRgdpL;O* zjV*LIVA0s`3>WDZD;OD+kH@e16~&7${7Ywl=3EvigJHqrs=Krc4v-JFDYwF^1mS1W zA+MGD341E3d&|%71qO=t96Us2h#2V&k|HKQqi}Fc0OZv0%ZB0^9USKWS((cMZWgc^ z^^FMmF%cw6>wT}HzjCr6PTMPAu6gL{g5pCE zdBahR;44o2{_VIK6k8Zk7-P;@y^gs2zYj+&Ej}=llb-I9>CF4%g8-;n!K*06qLcB6 z8irqn`!T8Nej&*WT+$QO|DyBbS&Yk^Lb^3RyrwhY>(&;~w<+PX3z$kl3#PnoJz02j zmtMIZwLf^;nYC+RbnrIH3jAY10Q)u$t5LC;k^c^ z9%kx(+Rm?u-J_v_IPi80R;d=k!BQER7Jt~ortYwAFbK2?E?zu{-3wEWBgDrjZf6%2 zeENvwn<(Il@KxD2x?r7;gFQary9Waov8;ca-Gv~qw|k`WY>M2D&X?D zP2(?RE&1g7Cnt?LQuv1O#&|9CU}k0jaG8pJa{H zxX4F4Wfj{qQW(Bd3}s}R|AaRQgU;8=X`s@RWeYw6VeV|?bbNKcM1}!)8=a&00vm4S#Q| z8U=2f$N6rI4mfDiZZ7=Q)fp8akJ~Us?<5eM3aJ2(M%m8@e?SL&*-GIwpr|oA+(}x>TG!Z~}FZ$@4Qn%%)Md))2a{ zKG>fk=;xagKYCoAwUFt=Yjj$;MToqM7N^`~_~Q!$aZ%X3@|rc$;-&o&ZWrvc@MNN+ z8f$Z2n`TtIF?fICz#r1+>#r_#WxBHg1?~iX~o$ZIZJ@+5)4-HAQ-z=Nw=+1<)&*LPJ3ll64ygHxa5h_&njZhOXGmyCDlK7X) zbo<*!gx?cgii41tof<$fzPma8y(%LhcT6G{Z#4QViKMDG$YEP%)%!DR^sWriFJy{d zaK(fs07`YJRv*t@;M2XKyU*SJB=_l`09}mIY%4aP-t1t2F1tcbl`3`VFoI@|*ShOW z1Gwq5r8V1^bhpJejAAjUFsgDBbgrh{`VPBRpcP^{qj|knDTuu$fl(jUQjxQmjUB@Z zpMnZh@5C^=KY(wtG@h&L2TvYmK8#^!%}cPeM4fg4^G{s4A$ymbm^vMkjD6PVM6QlX?C-uh@p;+$BB_8fey&(q(gM_+#4U-^VWF5QH329 zX0FmK*OIL#HPSZQ+Nr*;hu!ikIr=BwjBGr=tFB;m8(iC6!Bg6ga<2>zct{@ZT+TTd zG0HlFxtJEw-eqx#2qjMuk;A{;VWf8o_7UMj?vGsa;NQ%jT~B9xJ_|C*YpCvX`@t_R z_;9`jSDSI7mDNZ(IGn1%=Y%lx+@jYYgpXI z@~zf7Q-`_Zc4F}~5H5dRHAU%sg0*r$;N>1-w)JhG&l#+s zrC+h|Yh3=xr%3AWDP2GGKO&wue0-AP*CKQ331)aLy+-<}M!vhJ(0{^3_eVlZ;mw`$ z_TQ4SO zll*+0Jniue`m~wAtH1l8DnBtCCL*nrlb%}cLJ;xBbt`L!=cQcfh<6zP;XfCixb&XKBVfH_p%7@af*fdO=+g}ro;9Ugv$mqnF zVZj!=6OdVE2koq@D7XSa7cFZJTk2mw8wNr1OgB0)-|07gmj1G})ZX;%8r;q*IAa^} z{5HX#5Mf~WXfvI%yTo#Wg_ilu%GlJXNwEhtrKn+_u`VIZ>0|S8GwT`_h+iMPe-5zR z{((wb>P4T#QZ;`{E1_pMPU4@<+;{V7#CQDqVlGKl)#|6JN#0Te@T%DgNn+mUTv> z`!qse+04?CI|>~QY(>1}L!Fe^j?)U=cWjmcw0xs?^l)!BVYm5pCQl5Dbv>uG+A2^y z1T}Vq?^?-AzNgktZsI}od&&MXHl&~}3Cp}V%f6%fj+3AELa4g)km14F;HIZqTXQ3z zuWN3o5|(>%q#cIB4ve#mJCbaTs;_)_jeAa+QcET^cxei3)^Jx8oHn)k9I{L(4q2QS zxvi;;@L|8Ufee5p_%}`b*)V=s1}E8mK}{bV9Ng^s!9UBz^v5@}UBGUEdY$8K?63hX zFD=e_mSnrOd+>}^ZU{fIJzbbvoHMXs_b*AQU3%C6ZG(W_D>1(h->mJ}mh-h9vbh~C z-Jfudg;0c#t=lS^26$MC}lhDX-euFfXt(83ZQvD+6+fv}+?MF^RpT3eh&09t8^t3;WQ^fNnO>dPa(yNP*$Tweu9M(>B9BwJ1GMyCGG`|r>-Uh?oDV*QY+@hUUL{B%K?es=c-?mH; zD?Z%Az`_*Itk(!qa;l~a>H{_Yb-Gp*unL-e#}A2VCH&1>!se|edS^CmkAKlx-s$0A zV@MmGyquSqK3a_HO`9r z)$;)?;93U21|+n91&(~3TeL%9`!YYh33P~f^-G=l=P>@C%{pU&Vsi{|1U_%+!eunn ziAz8uEP2jd6$z*H4*+2azD9u?OB|@?Yc-r9>J%Y2g12+2=4``i^0%9)Ap!mN)|jMVu~=ORL#|f555-k*96}gI3M>MWH_3liohaa7xz@mTw`eH^aD%qby%uEYNbK{2pB=?_^(K+$-v>cZ1gRnn!C%$Y9 z4h%w(WD@Vu+r`_l;TVWetD9eZ!~S~iK1!GUN$2=_0QYoeANsT={Zn=v7$ax}``w!m z4Qpord0pU{wwbVme>|k|mg-x8eSFIi6!x+jT>qNp60P&uf4tyO(m2-R5|Hxqeb&2} z*VK^DJQmweTw^QNeaEXmJFy>}3Zh*3_~PVh$g2+)CP4m|p>@H1L9%B!o!)e@85rU6 zLWTJWJrY$kzfW{4Y(h^DPigL}%9+(A$YntOZY(L^ue|N}p44GmK{wMjub-ch%hZf0 zo6fZyQ(XrtAKX(DLrm4`WLpNkp^~XLN|JI)XGspYLre1^9r)qr*Yok3y3&QzbAJ>*Bx^esQ;i} z1xsgXDSYv_teMNDj4Xy_S@YLR6H9sC_~HAwBuXs_QNqIh;?&ejzUY?|lD#)1ReRwb z@B7+)zQ4{eWRgW{R{05?!lj7P_gUsaL}ql&@oZE&zeQ-jS)r z8IW-_gg~x8=u7gV@oo@V^1KN+TJKwDjFd8p3oT(1Bv&F(;#K4TWA=LPU_$V*6Sh13o(bphDUjn52e4Jn^jRzCT2Zm|bdc27 z_R$Aa{X^%FVdr^~dWpQ~r-?^s43ymlExXWVNIvCFXLcDC5vP#B%i|g7)gB$ve9jx7 zaf%3(t(I+m+_n+JRpz@9+G-VWYDHX4t4<}GU8MQ0tM2iapZxI%U)PtAs;2u{yWP7V ztm@6o*B4w&9=JX1t`lO|>Ok9z0@?T*#4tjUm!b}4?@Ed>M0xlM!GPoNoNP)X5rwX}Z6$P4h_Z zAV4D@stQ7m1|#+L#SK)t^mlx1B0QYcbbM3EHr?_K%T%f1qi)QLL?D!KwCo0NGoG>u zDmBz5-~PfCp0(ZGMq@#Xy@tHg@T0^V=_3mE;&&elxED4GS@F0im;nbfycPCIrA45M zYTEt6-HocP+w;`j^-SKxTT^fN`NE^eC6RX4WcTO%thWcgGD?}^wJLDe6VdGB)^YqX z->{4?|KDnggSObn2Gb^yAM}iDB4&|Wj^9~8;$x2(X#FS6sOecdbUyl9<-i9&veUD| zNz~g&tNH8; z^?7-j`uT2%+T30lWDz0o;Jrv3AMHZ40?Xe{UM{CqptPPNcS3U|87WwdO@CX+`3Zc> zwXvfm2NV#Hw!c!yx}PlX3}E{nDsv=&t@Yl|JTX^1X_GBQ2=Wczo6y;v&iEJ9Dxxm& zKXn$&K$HtyE4z9rV*kEUJEU_z7P-Ld>>h+u>r=~FaztH$V(4NjRtY=DsB5dh4?Jo@ zKK@R@g8`rWQ8`{n!#pBmS*S?eeROxF!*%k3a4_f2PM9Cpg(()4RG?|{{n_$%kQegw z0L0~yGQTD6tHY;+<3vZkdcen?fvrSoz=m;iK88mR$-PbDKTq7XDpgOH5$_&`d*22~{wNXlfNaIxHGC;F#`= z2ns#m(8(!mYo2V#;*2LPu|d^-j;r0uFfyW*3C05BgkO#Q`}z)nHHn66l091CU&yK4 zhgQ3fmCQ68do&J?{&MNbQkn}TUw`|O_ZExNJJyqHj|q-W0DmWEo^{1WU4Y-g#yxPJ zNve5#72iQuf`;=le17kQdn4SEVhLiXe8}pb&@|*2 z3VCGT?x+~G=4aK^pAWZ4`3DRa)tM*X&dS5KYIYp!QLD>NC6WIJ&$lPu#=J2jd`-2{ zU;YhqHlXKN%PHcG;X4W&eW4vz4rlTmieU;A>|!5l;JhXzs?fe)w)Qcfd+@rz@UOPR zFLVY$?B9Uky#kM166E1PO`9;U{Tn|;XQXDOxyIDcF^LD- zOiZ{w`eS??EEDm0{4aW*tAJoMvU}iw79P2ilK+Fit4NYvlN~$Lb2rgY{_4p zwO!e2eSdCQaXaoY@MJDqSQIbYeen@1T|Nk?X<5k5iz@<8u9A0Q^|ezXNtlvrZR2-f zy_fSEUT9Z*!HOr6Un!(vqFbwRQn?P>7tD=#Q4!6~1qk8+Jq^14{kKHB7YP~}<~!@f zc142+xcgx~mEDzwvY8WknWqEmVT?3~XZ~)REZ*$4L_6-y$EfJqISJZ8oJI6;s73I;M)6Ow_GzLC8D{PF#D8kD)tODdAWYpQbGj27*HhaI#gdKjS~Voz6S7F z_KYp_RMLIXe0le`*1z%3;SkJ+@8V0X@0pGnjisKrzI=ehw;))N>bcG>yNJJOm4nY@_4#GpHKAATS)2ryw42^mL>skkU*8N-_=KyKMAkFx@pRJPUo$?fRxNFukqv22AS%iuJcy(j*NfsAK~_2LMwH5Y%5{<{=uPqvhdg#+)N0hM@2LY=0g8mw1`=8U*#5Pt{v=^>IG`#;gK#Yl2 zR&Wug8-RS@f!-qbfa{3&p5!oTgsk{JcS(dn(kauBuPqoP=H z7AyzCZPPbsMZQgsapS}L7Uj(ypuio@jq8;^BCl4aWi1<65=qz#BheP%#U43}Hw9>Ye#%s+JML zM)*ED&HuT&gs@z0y60O0g|Dy+j7xWyj_%pz$4d~%`T{duAt&W$v;>*#5-`o<=ZXI<<*jQtC&EII4_^Q^F|%X`O%Qf*u{ zlOJYCa@$?`9Z>uQN=Zp|Nj)fyuHXJjc}5#R>j)%l3@WCCh3E3GGGOh~#z+~&Tu!}U zs`!Y*{Ig&~ILiqCanI@fw_2E#@=m>wskX0Tgt+TuG)7~$ZNhRQum2RsFoAAis)4th z3>-fTA_rL9?E<}jPKVX&kqELnlhs`zy*xl!sd%ogf+jJLXN0f;6AY~11Pw{8VM;`( z#1PBB2`bS*$s)&>q#2@=gm!mnNI2lo%F?`6i($9F?SQ;jIv4fikKb-nPkgX@3Ia7* z?)~we=$gN*C5nnBE5L{&@@D%}RJQx@RE*#t%}A1U^IMNz<+gYZ>zhTvZ*FeNrUAcQ zrEH#=_M9G8mLAqn+zZt+OH@HAN{mhNT+T-eYHd`|9@|%h5OiX|Y$=>VYLxiP&RJsT z<X@cnOM+;S~=GsVtDEHVnxqC&Rbh@ z)L>3J%%Zl-iZ+>k>gy4=SeNA8NcGJB8Xdf*#)ZqMU~kd8ZQ}C;R*K3v1iZb{lm1GG ztga}u8=>@WF>o|pLHbQj0rX79mOUGD+*L6Qz?EZ-LKsflBl)LB|Z=OB|3M3je-pGy@LHGTsIQWUNB6abAPf%%MypX32^9ws-z>;Im)1Fx0 z4*`MOy)th{u!3+*`3~i`Ev;aJZPi<%8YaXN`irJxYW>Ctn}=)E zBznp|_At?R+`q>A!fmVcp)f1oCM$hoIDm{eHY*eSRmHFg(sc)R9sQLH>{`fJys)AZ+odDbvZoNsrmu5dba3@@+OjVjgam1 z9Q5Mj=sIP<0n`mEA#2Yb3!?%%~*lvz$=TkTid@bH<=Zcrw+&w zyW;ld1^-iMS~Qn8L)gKk&%H6U+kYzv11-|yzT`q1mrri4Ya2(nx_1(MXQy+PO)gV`9`ex%K%-&CS!lg ztr0h=@#Zg2+d8vtF1qvqsM^}vQbF>8!ne4pzq8ycn?E3+80s~E`*eg(OY#_zN{(FTf+LCy4*N;%JCRFpUWT0>Jq||D zBL2!c^u6)&!_WX`?R2zvAY-ZiD}1eg_VL@s#VEJ) z+Ia`~b*I&1b!zui1DfC;Ytj(alG-h<<>Z3#7X4>(DJs7~Qd!X}`Mr7m!JtlFYQHs zLIo01-LWU&p8xw5rf3IGg_y-q`Km?Gxt|2%O+%oo-RuW9)oXJjeq5TwrGKe3{ik1_ z!E}c6%pMG76I>VHG^engg64;@T7QGu4!VDSxM0|nX8t3IK5cKx7|A;G{Z$2+PWyR& z-^@|^XVg;nFbv{C6H-pVw@z$gjt)Tnrv)=VHzgvGFsq3T2^LshG2R!4=Y_Yfx=eWG z3{5xX=XzQl(W{$V>m5p8Ou)NrgNW6dw33Oqj{lix{nC`!33^ft>6IK)p z1#8D8%bBu2sd33yeMM~H_A%`0tZ$zF9bf;aA#^a3`FXB+)T{qAi4WPp1R=9z_WL%k z?$5pd6LL}4*Bb#3CwnFtLZh|yIIE-^P5vwTdH*371Vuu1 zQ`dg`bqpu7;NOLMl8yA6KB`reFyehi=J#Rq3mspfbzA+fQ^g`d_W&2FRQ@RfN{#I| z?+EMO(XXQPTcYdt?N@euch9zpJ6xRaKRa=~!Ww5hdxpNdF$x@4!8aS33qj&}Qtz7^ z@yWZd@KkPnY1_V(le^(s8yI$VezwmE*iZ{-jnq5DOo(<$d#rksU+h?P8eEP^9H93K zB@Xs**WRK>lk7)T?99h_-zOXeCZ>AYHOu`mf}QfA;)SxmayI|HibS|YwK|t2(7;t( zav0}hjCsy|#L>{?4@wb^gK81F)-oq!KExuAy=SnJbAOdNtU(UOpzMrkL zgTzM*AZV=t_306A=x~TkjFOwrC^eGGzpSW;H9=6c7x%)FRPFk8Y2K5OCuC1UV;cb< zhSizlDzN8iCnLxqwpM)9^&TPtc$O_6oaiBdCFXT7hSAx?U2$!{guwhwLbPujXoB`* zWE3crLPrI*2mFz1&K)i^v!$l?{g>C>6X&lj<3?manCG_duKF*T2%jM9Lj#h~?*hv;sWMEeJ1S%NlRAYvY~=AUVz7t5g|E%)Q$Pw}edi&}N5lnpNj~#* zMaLgv`0ct&>RE?4EURg7XRmNQSoX?Pys@zl%SJT?jhn_Wv3HZ}7o2M;vV@&=t}koG zg>7rj1Z=9&9WvTh;PJ%R2@#9y=PeF=#GP=IZfT~r6iRJ!1ui?Mz|s&z(>K1@7_Nsg zL0I8eGQoj0M9(OT716HsnaEY1=h6L7QS+6fq%Yi<`7P;h;3Ol>QG6hEr$;aOW}+kh zc7Ok(pl|ipkb%D*-i3k0_2#JZJWb9zwee-)id32?32PkDwzDa)p1G{1mpixCOYt2S z9UjnU=>D3+N_MPlS^PFX1)AtfOg1ECAn?dlCCYEyoujZW?}<3w1a5L{q#N6|1(i!4 zNwJXu=i*xDrcG-?HC|AFqER7n1IuwVc=wSlRo%q)gf z5XvSajbfRL_#%={U(*T?eK^mGp`Z`X7u))V z|3mT0YS8co0nMo}LlDZ37ruPiYuk*mZ@h6E~fPfG> zQbP|t2?3Ijlbm1P&%Jl8@BOX&XHM2Rd(N5JGqYzu^Xztba^{o7Ac=!oO>xf;#KZU) z+GUq}zjQA3nkbvUEjWiED|bw4A59zC+rSA<*%`-POH%*>Z6b-jA3|NtB5WtT+}(4e z;^i~|h;QhGnM-@`9)>q)q0p*DJ8M!>lkK+P^pKOgE1hy8zJtx-WD3Evoz>m!?f2*H zYicexdjFE3)wZ&f?(xVNasu6@81pFc@}-g6sgBLze)F3x&&)p(VncQ>p3cWHT8mYe zOZtUVoP^L%B+Ag<&dno@t})UVmH#OmSzm-~b;>V46_%ff_^}HaR=PtjPP?y6eN(SA zQ#?xy5%k~zcSp3};HGvDe(IIRz~00kc|>`QQyowA1Jh8aEO zdfU(p{m|nx1O2}ZXyN3qH_~5>y%`T&i)UznbUY$Y(pJ5R23FpgvL5?7f0x=FXr*jB zD>w++JqYC2KQSnDe^R9rMbVwJ-7GbekI_Xlq_0k0%J_vh zDu}Mr#@4@`JgP$%m#;^w)C+oz)ezN4wJ+EeV&8Eie1IB56fOxCt zp}@IC|C4J6wAzlRyryD}%v3t+(9J7Xu7O+-C=E>roDaX&taRBXDZUwdIkzp^#Y{A)`mjegj~i%zp`_l zJV(qH@#a0xqW*j%xGLpt-zw8sCuetmUYKDd?rh!e#o`~CM4f>is-slxG|hU#?|zY; znbRH+s2RNIo?#;aAMT@iUsousk@&NIhgxS=@>;E0=ajw5QcwyBeAK0&x(P}XWKY{X zTG+43^;%BL#f8Lq%qiLF&M1fR9}M9j?*8CZjr$yA5HONT=Kk1`>gwS{tMY|`c8zqt z6yEW;!l#TZ?tUbRsd#`Bvr4)!FmXX)xsY+^=-&9zOV+V>nCA81Y^I{#FZNy8-Q0YR z`81})QRi|0zwbgr@PVtY$>z+9Z%Asf@Z<{BLN8}%% z+s{v^XOZ;ow=BYh9_EW$&W_rw+EB;oGnzTKAI<79Z|&Sa0qW2=K;^-7+;m^6we3Ft1P4s@DT5y4N>8Eo<_TBgBWfVcEhvp~#4VCJFh zUu7=Mmkz4xU*BnZM|!z{%ahi}EvjEZUx%GElsSI;z}}q51B%HPE_5K>=TlQ>U!$F9 zErCTZ;z5zN0P~Me+g}Q3eiUA{n(^=d;%%Xo{_t+sPnl;|`8V_)Qa@FxO38?Pdi;DO z>)?umoZc!r@0z)eh}qIb#%E6NpW>;-6~>5zaQa7q@z^(}ANQrYcr0*N)x-LtN@>-v z+{W&cz^?`Ouii^m`p%%KrfUmqEt46rE?mL+vJcd2n}Y zYh%h*)mgBM5{tiW9wdxUH>2s3AAVOfZ}$JGu$$UISD@xaFiK89@;3JX!`NQ;_q_07 zE{JdzqA(@qzeQ=e|4H21&HY%?YI(8UMqVmYy>>KzX8y+}7Y5i>(x_!c{waI!&td99 zb4yrrmFZUV2#*ZT>vg2ozPC z7T()?{&58e=T8pW0nN_OE__Kk$t(5`XGiN~RGsOCf?}QO+d7jXE0$w&RP>fqN<}G< zJHGw)jaNQz>%*<~u&DH1;;+<^{@Pp8bDET>da?Pi8shyn3 zECdnmA*Q+!LH}!dV&cb9db0bZ6B{{o8zTGcOw(~Oq25}$7QQ}c@>2!pHeeejy6Hue zvHi24Z$2d=sLs1x|4}UExDkISH7-cuPXL4q0l3(B6??-0^EgsJqB+&~o}Hp`gL#{$ zmkDqtTKJjnZROuQ2(-Gh_Gd%6qdID!oxeHDSWn>X5!?4K=8QQ` z4hK5FM5%tM;#1c>soUE&>y!443kJCx_F#`X)O(IsAEVm+XMzheFXQF0| zNycSz^Eh))qcyOy9Mi^VM*W0HAIkWQ`p z)&=9dbDM|V9?_-4PY)l_&#qp7yAOZqhpS@UWxNbZBNLR|cCTOZ+TnJHKxZTSedSgJ z@2it)xV7C>pvC3*2Kt0F!lRCzf|S-ABi34el|$(Uri?Ah(uh?s(7IMq?g+0Ef8Lek;S?h&u7~~4 ztn1*G%p0UMIj^Uw?=0i7QBJ?eT=vO}{Z*#urwNZcPpV+{KB@}rJMiwVP9P8|Z!q;w zwEkQ4vHL<7PpkIB^n}`04$$rz7}@Z*MRG|ww>{Q+6jBE&9nV%?bK7ThNJ2uS%pY=UGQjjyV1F{HMy`3!y4La(zQPCjoh|NeAt1uag{&P_%=H@knq@Anl7g!vf5?UUkbI@fW=sk`N! zAZMmX!j=?eedPfghQ2N#;o}{}VHkuI$lFURpETT8t2B|d+b!W_26HO#eTiPY?=thm za3|~yx35wA4LCQK{(~4nw(ZJ~U^HY_(BjzXM}x>=0qf)s92oQQ zqA9V@UUo_g&bVP_%U`RnQ2Cc}c8fo|3C=X!+w^y9E5inQ5l_r}LSg?rw5X z)ah)mJ5n2Dy9S?WSnoPmRg9o@|os)=o??-kCFwC7(r`_{! zg_m#pbh$*GlQ|hMv-o7oBIpycq|-724Xz%r39~(rvL5wJ=|!=VMDZ<-gUc6x4QuH> z+Uv4%fwz!FTakEl&6GvX?nC4&v35I(SKYe>!L773VZY_PwVll{9zXdgEoAOZ9i6h~ z3hPT@=-*IpxBcgXgbY%GmOcfR-KZ(d?}R?F_eWYCw|*Cmq_;vBmRE|B7BFN~D(mmO z%?X9~u_Bhoj*kB33F`XAO%vO|kp{&_$M^boUa0~h=yQt271yXEe&&V!#C<=H9Tomw z{;AFU-2=Ath0lZD+--T)80i<9x9yz6{&>~KTQFhrjA3RgL0*9@$Ji9RU0a>7#o*#6 z)bk@Z@2Gmjzkk=q!#J%rAk9%5zxKR1dkPKJ^C(FcI;wr=vL(%kg9e;aw5UMLm3A`3 z=;Bjae*S{Q+f#;5j&PffNw8{e^98v|7~FWcz&$hlYk_E_YM%3B$q3!uLNnVd6W%SK zz1b07+MniiezOQc632`6aAy+{4mEnVR@^`M|54U7Rj5=vC|X<_hq~8%jY024 zjP1*PFmW>G-Q1UFr{!H^YsF$_sGq;o9(x)4kpc)?OL zHGc=5+8T~Jfils|4&nz2vu0|dDw{uDD%=d0hqz>P@7OW$PtLy_)^l3;M+8DjM1Os` zKUKkyvCb+(4xXr1IS%`^s#z`lU}Ve8hmIbvG2&u4q8?7_=l_E%s|vFVaE-NN!dD;@ zs2{fz7;@Q92^!Sh=ni~k<0r0Do#BmB9jkl?%wU`lG&-*Dl~hw%y5+G>#>i&tL8P+^31!sgZ`a z2OIj0M1q&~ozE#1(tpg^Dv60bkl(5%zMt2S(KcSV(rq&_4*;ZM zYHWvlgJT_Ng|sz&=@OHd+R+<3@~qecEC2Qg%yz4ht-jhUE$1z3@?Cc49?%`-hQE_= zvnf?5y&&_O`GtKD-V3aac6OK{+6IhJn<~6kRGfHxSVQT}ax_%Xq)7uw8NYla#8J zZwH;qIa*Dje-4J127xZR;_V2FW8}yX@;h>scJr*6fz7Mhy8BWgpR0}yoVlcZfsl|3 z-cOL$SAQeXpvjqwFY^%9UWMX*9lat)0P8DmM%`$*6P~dRuOmo@!6#Bf>4ymX)mjAy zI98XL>I9E-JfJv~+M@JmE=?KHm9rKNaSg^hg@7Brux>g4zSOv$B@&ppI-Fj&U#7 z`8FFF=P_%n|5wcO%Bc>^&)O6F!vloCK7*rS&yr4i8YOLjZ)7Qv%$@Pnrx)jarwQ4U z7Xl}CR*NHn5&YQO!-<#bKDv}}LG`yWe=JL;lyy(qeGl71gaqP-$}J1ZGwBZc*e4@dYiy1{-iI{b*zxuRI3hSUemM6}q!P$jSIck#L} zSLL{FSf@xnuc#e#B|Gd<(E1ik-U#v|Z26fJq*RjL@0pT6L=D^A41e3W@a}p-!LgGY z3-9hS?p@m}G)>z)^z+>Dd!MyS89(GGdkv+fo0gXiWzr(AJ$k8Rcs4R}Pnh;%Lbk4J zXo%JNSe1K8RRCsrxm}xsE_ARevK}I@B~7t1M~lp?Y#l0gaqPH&U+9eb9e>UNJ~L$K zcY-D6@^Nc}{&nnbgQ;Kt8)|B)6R)g4m;k=&1KD{HuujiR+VG7HZ}9Z~A~aEuDlJlX zs{5U~N&i>aagc>tR7t_u)~6ri`Otqei!cnzNM4ngWt+>eIqg0p5l=}iZOR9`S+oLU zvm)oC`(P3`8!E%Fit8=<8YOWT4+DP3w)+p^sw)MB7b@ijO8hK^BDH^FBHkx8tkjK0 zQE3>MtHtaQQAckJ9!2NIq#B3UVLghV_Vpqe>;A=p*uJ-Y$yb=al({t2;_u_wI=b<) z2sdQ6S9O(0Cu~hy*`)V1FyFPT`_D_!{bkFl)zl!>#Ihut=smhT!{dzI?dK2E;O&3E z=K6JJi~D&o(Bd|09|I|NW4kT2@h#>gbpK8nB@MqEKYNoW9={z*)wvp^d1$hQg_AE; zC|}nJD(^f?A{5C`R)nSK5}!gs*cI! z-M~{HZZ^JMvk)*F;%~vmWo~Iqz4#3S`Qz=xI6Fb|=R(vT%EHia8*l;`M)IDVUWv>b*_eU6B2?#!Cn2^Z>wc5=h zcEBH62G5E0>zT7-D(asV)6c%8aS2NK@Vj$@b3Cv>1?@X?Z}uaQS)aW`37hb(S^m~v z!dyJz4WtAjQ!OM-8Z1_ChjxiaqE_7IwieY9IRhA&h$K*v1p#Q#{!aQYpVC_Q^Y7w{ zzoa%4v%*Hf5_%bWr$VOrSArmWJ71|UTI0D7VSb7ra&vH_U8{EkQU=(#4`J z__GdG>9Su<`dd~Prqat+Xo7;wSJ6Xy_qqh-6Zu--NGB5HzdoDzAqULH)~E#!+!tHU z^le+(8jx+)d&2QzM9LQD)@>-*w7n;TT2rUsumUtkmgDt|88E3To^sU{14lg`*_>(u~8JgVU&qNkp86nVsl7dj#2|@vvFQ z@L7n?txygTSTq`Yfen