diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 5383fe846..3e64772db 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -16,6 +16,7 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run ruff format --check + working-directory: ./python lint: runs-on: ubuntu-latest @@ -24,6 +25,7 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run ruff check + working-directory: ./python mypy: runs-on: ubuntu-latest @@ -32,6 +34,7 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run mypy + working-directory: ./python pyright: runs-on: ubuntu-latest @@ -40,6 +43,7 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run pyright + working-directory: ./python test: runs-on: ubuntu-latest @@ -51,6 +55,7 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run +python=${{ matrix.python-version }} test-matrix:pytest -n auto + working-directory: ./python docs: runs-on: ubuntu-latest @@ -59,3 +64,4 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run docs:check + working-directory: ./python diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 333b144c0..b20c63ab5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -33,10 +33,11 @@ jobs: - name: Install Hatch uses: pypa/hatch@install - run: hatch run docs:build + working-directory: ./python - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: 'docs/build' + path: 'python/docs/build' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9b388533a..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "python.testing.pytestArgs": [ - "tests" - ], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true -} \ No newline at end of file diff --git a/README.md b/README.md index b818e28fe..be9e04c30 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,6 @@ -# AutoGenNext +# AGNext -- [Documentation](http://microsoft.github.io/agnext) -- [Examples](https://github.com/microsoft/agnext/tree/main/examples) +See corresponding subdirectories for more information. - -## Package layering - -- `core` are the the foundational generic interfaces upon which all else is built. This module must not depend on any other module. -- `components` are the building blocks for creating single agents -- `application` are implementations of core components that are used to compose an application -- `chat` is the concrete implementation of multi-agent interactions. Most users will deal with this module. - - -## Development - -**TL;DR**, run all checks with: - -```sh -hatch run check -``` - -### Setup - -- [Install `hatch`](https://hatch.pypa.io/1.12/install/). - -### Virtual environment - -To get a shell with the package available (virtual environment) run: -```sh -hatch shell -``` - -### Common tasks - -- Format: `hatch run check` -- Lint: `hatch run lint` -- Test: `hatch run pytest -n auto` -- Mypy: `hatch run mypy` -- Pyright: `hatch run pyright` -- Build docs: `hatch run docs:build` -- Auto rebuild+serve docs: `hatch run docs:serve` - -> [!NOTE] -> These don't need to be run in a virtual environment, `hatch` will automatically manage it for you. +- [Python Documentation](http://microsoft.github.io/agnext) +- [Python Examples](https://github.com/microsoft/agnext/tree/main/python/examples) diff --git a/.gitignore b/python/.gitignore similarity index 100% rename from .gitignore rename to python/.gitignore diff --git a/python/README.md b/python/README.md new file mode 100644 index 000000000..db4573ee7 --- /dev/null +++ b/python/README.md @@ -0,0 +1,45 @@ +# AGNext + +- [Documentation](http://microsoft.github.io/agnext) +- [Examples](https://github.com/microsoft/agnext/tree/main/python/examples) + + +## Package layering + +- `core` are the the foundational generic interfaces upon which all else is built. This module must not depend on any other module. +- `components` are the building blocks for creating single agents +- `application` are implementations of core components that are used to compose an application +- `chat` is the concrete implementation of multi-agent interactions. Most users will deal with this module. + + +## Development + +**TL;DR**, run all checks with: + +```sh +hatch run check +``` + +### Setup + +- [Install `hatch`](https://hatch.pypa.io/1.12/install/). + +### Virtual environment + +To get a shell with the package available (virtual environment) run: +```sh +hatch shell +``` + +### Common tasks + +- Format: `hatch run check` +- Lint: `hatch run lint` +- Test: `hatch run pytest -n auto` +- Mypy: `hatch run mypy` +- Pyright: `hatch run pyright` +- Build docs: `hatch run docs:build` +- Auto rebuild+serve docs: `hatch run docs:serve` + +> [!NOTE] +> These don't need to be run in a virtual environment, `hatch` will automatically manage it for you. diff --git a/docs/src/_apidoc_templates/module.rst_t b/python/docs/src/_apidoc_templates/module.rst_t similarity index 100% rename from docs/src/_apidoc_templates/module.rst_t rename to python/docs/src/_apidoc_templates/module.rst_t diff --git a/docs/src/_apidoc_templates/package.rst_t b/python/docs/src/_apidoc_templates/package.rst_t similarity index 100% rename from docs/src/_apidoc_templates/package.rst_t rename to python/docs/src/_apidoc_templates/package.rst_t diff --git a/docs/src/conf.py b/python/docs/src/conf.py similarity index 100% rename from docs/src/conf.py rename to python/docs/src/conf.py diff --git a/docs/src/contributing.md b/python/docs/src/contributing.md similarity index 100% rename from docs/src/contributing.md rename to python/docs/src/contributing.md diff --git a/docs/src/core-concepts/agent.md b/python/docs/src/core-concepts/agent.md similarity index 100% rename from docs/src/core-concepts/agent.md rename to python/docs/src/core-concepts/agent.md diff --git a/docs/src/core-concepts/cancellation.md b/python/docs/src/core-concepts/cancellation.md similarity index 100% rename from docs/src/core-concepts/cancellation.md rename to python/docs/src/core-concepts/cancellation.md diff --git a/docs/src/core-concepts/logging.md b/python/docs/src/core-concepts/logging.md similarity index 100% rename from docs/src/core-concepts/logging.md rename to python/docs/src/core-concepts/logging.md diff --git a/docs/src/core-concepts/memory.md b/python/docs/src/core-concepts/memory.md similarity index 100% rename from docs/src/core-concepts/memory.md rename to python/docs/src/core-concepts/memory.md diff --git a/docs/src/core-concepts/namespace.md b/python/docs/src/core-concepts/namespace.md similarity index 100% rename from docs/src/core-concepts/namespace.md rename to python/docs/src/core-concepts/namespace.md diff --git a/docs/src/core-concepts/patterns.md b/python/docs/src/core-concepts/patterns.md similarity index 100% rename from docs/src/core-concepts/patterns.md rename to python/docs/src/core-concepts/patterns.md diff --git a/docs/src/core-concepts/runtime.md b/python/docs/src/core-concepts/runtime.md similarity index 100% rename from docs/src/core-concepts/runtime.md rename to python/docs/src/core-concepts/runtime.md diff --git a/docs/src/core-concepts/tools.md b/python/docs/src/core-concepts/tools.md similarity index 100% rename from docs/src/core-concepts/tools.md rename to python/docs/src/core-concepts/tools.md diff --git a/docs/src/getting-started/installation.md b/python/docs/src/getting-started/installation.md similarity index 100% rename from docs/src/getting-started/installation.md rename to python/docs/src/getting-started/installation.md diff --git a/docs/src/getting-started/tutorial.md b/python/docs/src/getting-started/tutorial.md similarity index 100% rename from docs/src/getting-started/tutorial.md rename to python/docs/src/getting-started/tutorial.md diff --git a/docs/src/guides/azure-openai-with-aad-auth.md b/python/docs/src/guides/azure-openai-with-aad-auth.md similarity index 100% rename from docs/src/guides/azure-openai-with-aad-auth.md rename to python/docs/src/guides/azure-openai-with-aad-auth.md diff --git a/docs/src/guides/group-chat-coder-reviewer.md b/python/docs/src/guides/group-chat-coder-reviewer.md similarity index 100% rename from docs/src/guides/group-chat-coder-reviewer.md rename to python/docs/src/guides/group-chat-coder-reviewer.md diff --git a/docs/src/guides/type-routed-agent.md b/python/docs/src/guides/type-routed-agent.md similarity index 100% rename from docs/src/guides/type-routed-agent.md rename to python/docs/src/guides/type-routed-agent.md diff --git a/docs/src/index.rst b/python/docs/src/index.rst similarity index 100% rename from docs/src/index.rst rename to python/docs/src/index.rst diff --git a/examples/README.md b/python/examples/README.md similarity index 100% rename from examples/README.md rename to python/examples/README.md diff --git a/examples/assistant.py b/python/examples/assistant.py similarity index 100% rename from examples/assistant.py rename to python/examples/assistant.py diff --git a/examples/chat_room.py b/python/examples/chat_room.py similarity index 100% rename from examples/chat_room.py rename to python/examples/chat_room.py diff --git a/examples/chess_game.py b/python/examples/chess_game.py similarity index 100% rename from examples/chess_game.py rename to python/examples/chess_game.py diff --git a/examples/coder_reviewer.py b/python/examples/coder_reviewer.py similarity index 100% rename from examples/coder_reviewer.py rename to python/examples/coder_reviewer.py diff --git a/examples/illustrator_critics.py b/python/examples/illustrator_critics.py similarity index 100% rename from examples/illustrator_critics.py rename to python/examples/illustrator_critics.py diff --git a/examples/inner_outer.py b/python/examples/inner_outer.py similarity index 100% rename from examples/inner_outer.py rename to python/examples/inner_outer.py diff --git a/examples/orchestrator.py b/python/examples/orchestrator.py similarity index 100% rename from examples/orchestrator.py rename to python/examples/orchestrator.py diff --git a/examples/software_consultancy.py b/python/examples/software_consultancy.py similarity index 100% rename from examples/software_consultancy.py rename to python/examples/software_consultancy.py diff --git a/examples/utils.py b/python/examples/utils.py similarity index 100% rename from examples/utils.py rename to python/examples/utils.py diff --git a/pyproject.toml b/python/pyproject.toml similarity index 100% rename from pyproject.toml rename to python/pyproject.toml diff --git a/src/agnext/__init__.py b/python/src/agnext/__init__.py similarity index 100% rename from src/agnext/__init__.py rename to python/src/agnext/__init__.py diff --git a/src/agnext/application/__init__.py b/python/src/agnext/application/__init__.py similarity index 100% rename from src/agnext/application/__init__.py rename to python/src/agnext/application/__init__.py diff --git a/src/agnext/application/_single_threaded_agent_runtime.py b/python/src/agnext/application/_single_threaded_agent_runtime.py similarity index 100% rename from src/agnext/application/_single_threaded_agent_runtime.py rename to python/src/agnext/application/_single_threaded_agent_runtime.py diff --git a/src/agnext/application/logging/__init__.py b/python/src/agnext/application/logging/__init__.py similarity index 100% rename from src/agnext/application/logging/__init__.py rename to python/src/agnext/application/logging/__init__.py diff --git a/src/agnext/application/logging/_events.py b/python/src/agnext/application/logging/_events.py similarity index 100% rename from src/agnext/application/logging/_events.py rename to python/src/agnext/application/logging/_events.py diff --git a/src/agnext/application/logging/_llm_usage.py b/python/src/agnext/application/logging/_llm_usage.py similarity index 100% rename from src/agnext/application/logging/_llm_usage.py rename to python/src/agnext/application/logging/_llm_usage.py diff --git a/src/agnext/chat/__init__.py b/python/src/agnext/chat/__init__.py similarity index 100% rename from src/agnext/chat/__init__.py rename to python/src/agnext/chat/__init__.py diff --git a/src/agnext/chat/agents/__init__.py b/python/src/agnext/chat/agents/__init__.py similarity index 100% rename from src/agnext/chat/agents/__init__.py rename to python/src/agnext/chat/agents/__init__.py diff --git a/src/agnext/chat/agents/chat_completion_agent.py b/python/src/agnext/chat/agents/chat_completion_agent.py similarity index 100% rename from src/agnext/chat/agents/chat_completion_agent.py rename to python/src/agnext/chat/agents/chat_completion_agent.py diff --git a/src/agnext/chat/agents/image_generation_agent.py b/python/src/agnext/chat/agents/image_generation_agent.py similarity index 100% rename from src/agnext/chat/agents/image_generation_agent.py rename to python/src/agnext/chat/agents/image_generation_agent.py diff --git a/src/agnext/chat/agents/oai_assistant.py b/python/src/agnext/chat/agents/oai_assistant.py similarity index 100% rename from src/agnext/chat/agents/oai_assistant.py rename to python/src/agnext/chat/agents/oai_assistant.py diff --git a/src/agnext/chat/agents/user_proxy.py b/python/src/agnext/chat/agents/user_proxy.py similarity index 100% rename from src/agnext/chat/agents/user_proxy.py rename to python/src/agnext/chat/agents/user_proxy.py diff --git a/src/agnext/chat/memory/__init__.py b/python/src/agnext/chat/memory/__init__.py similarity index 100% rename from src/agnext/chat/memory/__init__.py rename to python/src/agnext/chat/memory/__init__.py diff --git a/src/agnext/chat/memory/_base.py b/python/src/agnext/chat/memory/_base.py similarity index 100% rename from src/agnext/chat/memory/_base.py rename to python/src/agnext/chat/memory/_base.py diff --git a/src/agnext/chat/memory/_buffered.py b/python/src/agnext/chat/memory/_buffered.py similarity index 100% rename from src/agnext/chat/memory/_buffered.py rename to python/src/agnext/chat/memory/_buffered.py diff --git a/src/agnext/chat/memory/_head_and_tail.py b/python/src/agnext/chat/memory/_head_and_tail.py similarity index 100% rename from src/agnext/chat/memory/_head_and_tail.py rename to python/src/agnext/chat/memory/_head_and_tail.py diff --git a/src/agnext/chat/patterns/__init__.py b/python/src/agnext/chat/patterns/__init__.py similarity index 100% rename from src/agnext/chat/patterns/__init__.py rename to python/src/agnext/chat/patterns/__init__.py diff --git a/src/agnext/chat/patterns/group_chat_manager.py b/python/src/agnext/chat/patterns/group_chat_manager.py similarity index 100% rename from src/agnext/chat/patterns/group_chat_manager.py rename to python/src/agnext/chat/patterns/group_chat_manager.py diff --git a/src/agnext/chat/patterns/group_chat_utils.py b/python/src/agnext/chat/patterns/group_chat_utils.py similarity index 100% rename from src/agnext/chat/patterns/group_chat_utils.py rename to python/src/agnext/chat/patterns/group_chat_utils.py diff --git a/src/agnext/chat/patterns/orchestrator_chat.py b/python/src/agnext/chat/patterns/orchestrator_chat.py similarity index 100% rename from src/agnext/chat/patterns/orchestrator_chat.py rename to python/src/agnext/chat/patterns/orchestrator_chat.py diff --git a/src/agnext/chat/types.py b/python/src/agnext/chat/types.py similarity index 100% rename from src/agnext/chat/types.py rename to python/src/agnext/chat/types.py diff --git a/src/agnext/chat/utils.py b/python/src/agnext/chat/utils.py similarity index 100% rename from src/agnext/chat/utils.py rename to python/src/agnext/chat/utils.py diff --git a/src/agnext/components/__init__.py b/python/src/agnext/components/__init__.py similarity index 100% rename from src/agnext/components/__init__.py rename to python/src/agnext/components/__init__.py diff --git a/src/agnext/components/_function_utils.py b/python/src/agnext/components/_function_utils.py similarity index 100% rename from src/agnext/components/_function_utils.py rename to python/src/agnext/components/_function_utils.py diff --git a/src/agnext/components/_image.py b/python/src/agnext/components/_image.py similarity index 100% rename from src/agnext/components/_image.py rename to python/src/agnext/components/_image.py diff --git a/src/agnext/components/_pydantic_compat.py b/python/src/agnext/components/_pydantic_compat.py similarity index 100% rename from src/agnext/components/_pydantic_compat.py rename to python/src/agnext/components/_pydantic_compat.py diff --git a/src/agnext/components/_type_routed_agent.py b/python/src/agnext/components/_type_routed_agent.py similarity index 100% rename from src/agnext/components/_type_routed_agent.py rename to python/src/agnext/components/_type_routed_agent.py diff --git a/src/agnext/components/_types.py b/python/src/agnext/components/_types.py similarity index 100% rename from src/agnext/components/_types.py rename to python/src/agnext/components/_types.py diff --git a/src/agnext/components/code_executor/__init__.py b/python/src/agnext/components/code_executor/__init__.py similarity index 100% rename from src/agnext/components/code_executor/__init__.py rename to python/src/agnext/components/code_executor/__init__.py diff --git a/src/agnext/components/code_executor/_base.py b/python/src/agnext/components/code_executor/_base.py similarity index 100% rename from src/agnext/components/code_executor/_base.py rename to python/src/agnext/components/code_executor/_base.py diff --git a/src/agnext/components/code_executor/_func_with_reqs.py b/python/src/agnext/components/code_executor/_func_with_reqs.py similarity index 100% rename from src/agnext/components/code_executor/_func_with_reqs.py rename to python/src/agnext/components/code_executor/_func_with_reqs.py diff --git a/src/agnext/components/code_executor/_impl/__init__.py b/python/src/agnext/components/code_executor/_impl/__init__.py similarity index 100% rename from src/agnext/components/code_executor/_impl/__init__.py rename to python/src/agnext/components/code_executor/_impl/__init__.py diff --git a/src/agnext/components/code_executor/_impl/command_line_code_result.py b/python/src/agnext/components/code_executor/_impl/command_line_code_result.py similarity index 100% rename from src/agnext/components/code_executor/_impl/command_line_code_result.py rename to python/src/agnext/components/code_executor/_impl/command_line_code_result.py diff --git a/src/agnext/components/code_executor/_impl/local_commandline_code_executor.py b/python/src/agnext/components/code_executor/_impl/local_commandline_code_executor.py similarity index 100% rename from src/agnext/components/code_executor/_impl/local_commandline_code_executor.py rename to python/src/agnext/components/code_executor/_impl/local_commandline_code_executor.py diff --git a/src/agnext/components/code_executor/_impl/utils.py b/python/src/agnext/components/code_executor/_impl/utils.py similarity index 100% rename from src/agnext/components/code_executor/_impl/utils.py rename to python/src/agnext/components/code_executor/_impl/utils.py diff --git a/src/agnext/components/models/__init__.py b/python/src/agnext/components/models/__init__.py similarity index 100% rename from src/agnext/components/models/__init__.py rename to python/src/agnext/components/models/__init__.py diff --git a/src/agnext/components/models/_model_client.py b/python/src/agnext/components/models/_model_client.py similarity index 100% rename from src/agnext/components/models/_model_client.py rename to python/src/agnext/components/models/_model_client.py diff --git a/src/agnext/components/models/_model_info.py b/python/src/agnext/components/models/_model_info.py similarity index 100% rename from src/agnext/components/models/_model_info.py rename to python/src/agnext/components/models/_model_info.py diff --git a/src/agnext/components/models/_openai_client.py b/python/src/agnext/components/models/_openai_client.py similarity index 100% rename from src/agnext/components/models/_openai_client.py rename to python/src/agnext/components/models/_openai_client.py diff --git a/src/agnext/components/models/_types.py b/python/src/agnext/components/models/_types.py similarity index 100% rename from src/agnext/components/models/_types.py rename to python/src/agnext/components/models/_types.py diff --git a/src/agnext/components/models/config/__init__.py b/python/src/agnext/components/models/config/__init__.py similarity index 100% rename from src/agnext/components/models/config/__init__.py rename to python/src/agnext/components/models/config/__init__.py diff --git a/src/agnext/components/tools/__init__.py b/python/src/agnext/components/tools/__init__.py similarity index 100% rename from src/agnext/components/tools/__init__.py rename to python/src/agnext/components/tools/__init__.py diff --git a/src/agnext/components/tools/_base.py b/python/src/agnext/components/tools/_base.py similarity index 100% rename from src/agnext/components/tools/_base.py rename to python/src/agnext/components/tools/_base.py diff --git a/src/agnext/components/tools/_code_execution.py b/python/src/agnext/components/tools/_code_execution.py similarity index 100% rename from src/agnext/components/tools/_code_execution.py rename to python/src/agnext/components/tools/_code_execution.py diff --git a/src/agnext/components/tools/_function_tool.py b/python/src/agnext/components/tools/_function_tool.py similarity index 100% rename from src/agnext/components/tools/_function_tool.py rename to python/src/agnext/components/tools/_function_tool.py diff --git a/src/agnext/core/__init__.py b/python/src/agnext/core/__init__.py similarity index 100% rename from src/agnext/core/__init__.py rename to python/src/agnext/core/__init__.py diff --git a/src/agnext/core/_agent.py b/python/src/agnext/core/_agent.py similarity index 100% rename from src/agnext/core/_agent.py rename to python/src/agnext/core/_agent.py diff --git a/src/agnext/core/_agent_id.py b/python/src/agnext/core/_agent_id.py similarity index 100% rename from src/agnext/core/_agent_id.py rename to python/src/agnext/core/_agent_id.py diff --git a/src/agnext/core/_agent_metadata.py b/python/src/agnext/core/_agent_metadata.py similarity index 100% rename from src/agnext/core/_agent_metadata.py rename to python/src/agnext/core/_agent_metadata.py diff --git a/src/agnext/core/_agent_props.py b/python/src/agnext/core/_agent_props.py similarity index 100% rename from src/agnext/core/_agent_props.py rename to python/src/agnext/core/_agent_props.py diff --git a/src/agnext/core/_agent_proxy.py b/python/src/agnext/core/_agent_proxy.py similarity index 100% rename from src/agnext/core/_agent_proxy.py rename to python/src/agnext/core/_agent_proxy.py diff --git a/src/agnext/core/_agent_runtime.py b/python/src/agnext/core/_agent_runtime.py similarity index 100% rename from src/agnext/core/_agent_runtime.py rename to python/src/agnext/core/_agent_runtime.py diff --git a/src/agnext/core/_base_agent.py b/python/src/agnext/core/_base_agent.py similarity index 100% rename from src/agnext/core/_base_agent.py rename to python/src/agnext/core/_base_agent.py diff --git a/src/agnext/core/_cancellation_token.py b/python/src/agnext/core/_cancellation_token.py similarity index 100% rename from src/agnext/core/_cancellation_token.py rename to python/src/agnext/core/_cancellation_token.py diff --git a/src/agnext/core/exceptions.py b/python/src/agnext/core/exceptions.py similarity index 100% rename from src/agnext/core/exceptions.py rename to python/src/agnext/core/exceptions.py diff --git a/src/agnext/core/intervention.py b/python/src/agnext/core/intervention.py similarity index 100% rename from src/agnext/core/intervention.py rename to python/src/agnext/core/intervention.py diff --git a/src/agnext/py.typed b/python/src/agnext/py.typed similarity index 100% rename from src/agnext/py.typed rename to python/src/agnext/py.typed diff --git a/tests/execution/test_commandline_code_executor.py b/python/tests/execution/test_commandline_code_executor.py similarity index 100% rename from tests/execution/test_commandline_code_executor.py rename to python/tests/execution/test_commandline_code_executor.py diff --git a/tests/execution/test_user_defined_functions.py b/python/tests/execution/test_user_defined_functions.py similarity index 100% rename from tests/execution/test_user_defined_functions.py rename to python/tests/execution/test_user_defined_functions.py diff --git a/tests/test_cancellation.py b/python/tests/test_cancellation.py similarity index 100% rename from tests/test_cancellation.py rename to python/tests/test_cancellation.py diff --git a/tests/test_intervention.py b/python/tests/test_intervention.py similarity index 100% rename from tests/test_intervention.py rename to python/tests/test_intervention.py diff --git a/tests/test_llm_usage.py b/python/tests/test_llm_usage.py similarity index 100% rename from tests/test_llm_usage.py rename to python/tests/test_llm_usage.py diff --git a/tests/test_runtime.py b/python/tests/test_runtime.py similarity index 100% rename from tests/test_runtime.py rename to python/tests/test_runtime.py diff --git a/tests/test_state.py b/python/tests/test_state.py similarity index 100% rename from tests/test_state.py rename to python/tests/test_state.py diff --git a/tests/test_tools.py b/python/tests/test_tools.py similarity index 100% rename from tests/test_tools.py rename to python/tests/test_tools.py diff --git a/tests/test_types.py b/python/tests/test_types.py similarity index 100% rename from tests/test_types.py rename to python/tests/test_types.py diff --git a/tests/test_utils/__init__.py b/python/tests/test_utils/__init__.py similarity index 100% rename from tests/test_utils/__init__.py rename to python/tests/test_utils/__init__.py