diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 067cefcb..cf65fe33 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: changes: runs-on: ubuntu-latest outputs: - backend: ${{ steps.filter.outputs.backend }} + skore: ${{ steps.filter.outputs.skore }} skore-ui: ${{ steps.filter.outputs.skore-ui }} permissions: pull-requests: read @@ -15,12 +15,12 @@ jobs: id: filter with: filters: | - backend: - - 'src/**' - - 'tests/**' - - 'pyproject.toml' - - 'requirements*.txt' - - '.github/workflows/backend.yml' + skore: + - 'skore/src/**' + - 'skore/tests/**' + - 'skore/pyproject.toml' + - 'skore/requirements*.txt' + - '.github/workflows/skore.yml' skore-ui: - 'skore-ui/**' - '.github/workflows/skore-ui.yml' @@ -30,10 +30,10 @@ jobs: permissions: contents: read - lint-and-test-backend: + lint-and-test-skore: needs: [lint-all-files, changes] - if: ${{ needs.changes.outputs.backend == 'true' }} - uses: ./.github/workflows/backend.yml + if: ${{ needs.changes.outputs.skore == 'true' }} + uses: ./.github/workflows/skore.yml permissions: contents: read @@ -48,7 +48,7 @@ jobs: ci-all-green: needs: - lint-all-files - - lint-and-test-backend + - lint-and-test-skore - lint-and-test-skore-ui if: ${{ always() }} runs-on: Ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b00e36e5..19faa927 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: run: make build-skore-ui - name: Override VERSION.txt with tag - run: echo "${GITHUB_REF_NAME}" > VERSION.txt + run: echo "${GITHUB_REF_NAME}" > skore/VERSION.txt - name: Set up Python 3.12 uses: actions/setup-python@v5 @@ -46,19 +46,21 @@ jobs: - name: Build package distributions run: | python -m pip install build + + cd skore python -m build - name: Checks whether distribution’s long description will render correctly on PyPI continue-on-error: true run: | python -m pip install twine - python -m twine check dist/* + python -m twine check skore/dist/* - name: Upload package distributions uses: actions/upload-artifact@v4 with: name: python-package-distributions - path: dist/ + path: skore/dist/ publish: name: Publish package distributions to TestPyPI using trusted publisher diff --git a/.github/workflows/skore-ui.yml b/.github/workflows/skore-ui.yml index a6b0f081..7e859b6a 100644 --- a/.github/workflows/skore-ui.yml +++ b/.github/workflows/skore-ui.yml @@ -2,6 +2,11 @@ name: Reusable skore-ui workflow on: [workflow_call] +defaults: + run: + shell: 'bash' + working-directory: './skore-ui' + jobs: lint-skore-ui: runs-on: ubuntu-latest @@ -14,8 +19,6 @@ jobs: cache-dependency-path: skore-ui/package-lock.json - name: Lint skore-ui run: | - cd skore-ui - npm install npm run type-check npm run lint @@ -34,8 +37,6 @@ jobs: cache-dependency-path: skore-ui/package-lock.json - name: Test skore-ui run: | - cd skore-ui - npm install npm run test:unit:coverage - name: Report coverage @@ -56,10 +57,7 @@ jobs: cache: 'npm' cache-dependency-path: skore-ui/package-lock.json - name: Build skore-ui - shell: bash run: | - cd skore-ui - npm install npm run build npm run build:lib -- --emptyOutDir false diff --git a/.github/workflows/backend.yml b/.github/workflows/skore.yml similarity index 78% rename from .github/workflows/backend.yml rename to .github/workflows/skore.yml index cc3a5728..7c7b02cd 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/skore.yml @@ -1,10 +1,14 @@ -name: Reusable backend workflow +name: Reusable skore workflow on: [workflow_call] jobs: build-skore-ui: runs-on: ubuntu-latest + defaults: + run: + shell: 'bash' + working-directory: './skore-ui' steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -14,8 +18,6 @@ jobs: cache-dependency-path: skore-ui/package-lock.json - shell: bash run: | - cd skore-ui - npm install npm run build npm run build:lib -- --emptyOutDir false @@ -24,51 +26,52 @@ jobs: name: skore-ui-package-distributions path: skore-ui/dist - test-backend: + test-skore: runs-on: ubuntu-latest needs: build-skore-ui + defaults: + run: + shell: 'bash' + working-directory: './skore' strategy: fail-fast: true matrix: python-version: ['3.11', '3.12'] - steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' - - - name: Lint - run: | - python -m pip install --upgrade pip - python -m pip install --upgrade pre-commit - pre-commit run --all-files ruff - - name: Download package distributions uses: actions/download-artifact@v4 with: name: skore-ui-package-distributions - path: src/skore/ui/static - - - name: Build + path: skore/src/skore/ui/static + - name: + timeout-minutes: 10 run: | + python -m pip install --upgrade pip + python -m pip install --upgrade pre-commit python -m pip install --upgrade build + + # Lint + pre-commit run --all-files ruff + + # Build python -m build - - name: Install - run: | + # Install python -m pip install dist/*.whl --no-dependencies python -m pip install -r requirements.txt -r requirements-test.txt - - name: Test - timeout-minutes: 5 - run: python -m pytest + # Test + python -m pytest cleanup: runs-on: ubuntu-latest if: always() - needs: test-backend + needs: test-skore steps: - uses: geekyeggo/delete-artifact@v5 with: diff --git a/LICENSE b/LICENSE deleted file mode 100644 index cac38aea..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Probabl - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/LICENSE b/LICENSE new file mode 120000 index 00000000..bbcef39a --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +skore/LICENSE \ No newline at end of file diff --git a/Makefile b/Makefile index 3774e50d..d71f17f1 100644 --- a/Makefile +++ b/Makefile @@ -1,48 +1,37 @@ SKORE_ROOT ?= ".datamander" pip-compile: - pip-compile --output-file=requirements.txt pyproject.toml - pip-compile --extra=test --output-file=requirements-test.txt pyproject.toml - pip-compile --extra=tools --output-file=requirements-tools.txt pyproject.toml + python -m piptools compile --output-file=skore/requirements.txt skore/pyproject.toml + python -m piptools compile --extra=test --output-file=skore/requirements-test.txt skore/pyproject.toml + python -m piptools compile --extra=tools --output-file=skore/requirements-tools.txt skore/pyproject.toml -install: +install-skore: python -m pip install \ - -e . \ - -r requirements.txt \ - -r requirements-test.txt \ - -r requirements-tools.txt - pre-commit install - -check-wip: - pre-commit run --all-files - python -m pytest tests - -serve-api: - SKORE_ROOT=$(SKORE_ROOT) python -m uvicorn \ - --factory skore.ui.app:create_app \ - --reload --reload-dir ./src \ - --host 0.0.0.0 \ - --port 22140 \ - --timeout-graceful-shutdown 0 + -e skore/ \ + -r skore/requirements.txt \ + -r skore/requirements-test.txt \ + -r skore/requirements-tools.txt -serve-ui: - SKORE_ROOT=$(SKORE_ROOT) python -m uvicorn \ - --factory skore.ui.app:create_app \ - --reload --reload-dir ./src \ - --host 0.0.0.0 \ - --port 22140 \ - --timeout-graceful-shutdown 0 + pre-commit install build-skore-ui: # cleanup rm -rf skore-ui/dist - rm -rf src/skore/ui/static + rm -rf skore/src/skore/ui/static # build - (\ - cd skore-ui;\ - npm install;\ - npm run build;\ - npm run build:lib -- --emptyOutDir false;\ + ( \ + cd skore-ui; \ + npm install; \ + npm run build; \ + npm run build:lib -- --emptyOutDir false; \ ) # move - mv skore-ui/dist/ src/skore/ui/static + mv skore-ui/dist/ skore/src/skore/ui/static + +serve-skore-ui: + SKORE_ROOT=$(SKORE_ROOT) python -m uvicorn \ + --factory skore.ui.app:create_app \ + --reload --reload-dir skore/src \ + --host 0.0.0.0 \ + --port 22140 \ + --timeout-graceful-shutdown 0 diff --git a/README.md b/README.md deleted file mode 100644 index 8e12397a..00000000 --- a/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# skore - -![lint](https://github.com/probabl-ai/skore/actions/workflows/lint.yml/badge.svg) -![tests](https://github.com/probabl-ai/skore/actions/workflows/backend.yml/badge.svg) -![UI tests](https://github.com/probabl-ai/skore/actions/workflows/skore-ui.yml/badge.svg) - -## Installation - -For now, the only supported method to use skore is from source. -Follow the instructions in [CONTRIBUTING.md](/CONTRIBUTING.md#quick-start) to install dependencies and start the UI. - -## Quick start - -For a complete introductory example, see our [basic usage notebook](/examples/basic_usage.ipynb). The resulting skore report has been exported to [this HTML file](https://gist.github.com/augustebaum/6b21dbd7f7d5a584fbf2c1956692574e): download it and open it in your browser to visualize it. - -In your shell, run the following to create a project file `project.skore` (the default) in your current working directory: -```sh -python -m skore create -``` - -Run the following in your Python code to load the project: -```python -from skore import load - -project = load("project.skore") -``` - -You can save items you need to track in your project: -```python -project.put("my int", 3) -``` - -You can also get them back: -```python -project.get("my int") -``` - -By default, strings are assumed to be Markdown: -```python -project.put("my string", "Hello world!") -``` - -Note that `put` overwrites previous data -```python -project.put("my string", "Hello again!") -``` - -You can list all the keys in a project with: -```python -project.list_keys() -``` - -You can delete items with: -```python -project.delete_item("my int") -``` - -Then, in the directory containing your project, run the following command to start the UI locally: -```sh -python -m skore launch project.skore -``` - -This will automatically open a browser at the UI's location. - - -## Roadmap - -With Skore, you can: -- Store data -- Visualize data - -In the future, you will be able to: -- Share visualizations of your data -- Extract insights from your data -- Get tips on how to improve your data science code - -## Contributing - -See [CONTRIBUTING.md](/CONTRIBUTING.md) for more information and to contribute to the evolution of this library. diff --git a/README.md b/README.md new file mode 120000 index 00000000..de33ad91 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +skore/README.md \ No newline at end of file diff --git a/VERSION.txt b/VERSION.txt deleted file mode 100644 index 77d6f4ca..00000000 --- a/VERSION.txt +++ /dev/null @@ -1 +0,0 @@ -0.0.0 diff --git a/skore/LICENSE b/skore/LICENSE new file mode 100644 index 00000000..cac38aea --- /dev/null +++ b/skore/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Probabl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/skore/README.md b/skore/README.md new file mode 100644 index 00000000..8e12397a --- /dev/null +++ b/skore/README.md @@ -0,0 +1,79 @@ +# skore + +![lint](https://github.com/probabl-ai/skore/actions/workflows/lint.yml/badge.svg) +![tests](https://github.com/probabl-ai/skore/actions/workflows/backend.yml/badge.svg) +![UI tests](https://github.com/probabl-ai/skore/actions/workflows/skore-ui.yml/badge.svg) + +## Installation + +For now, the only supported method to use skore is from source. +Follow the instructions in [CONTRIBUTING.md](/CONTRIBUTING.md#quick-start) to install dependencies and start the UI. + +## Quick start + +For a complete introductory example, see our [basic usage notebook](/examples/basic_usage.ipynb). The resulting skore report has been exported to [this HTML file](https://gist.github.com/augustebaum/6b21dbd7f7d5a584fbf2c1956692574e): download it and open it in your browser to visualize it. + +In your shell, run the following to create a project file `project.skore` (the default) in your current working directory: +```sh +python -m skore create +``` + +Run the following in your Python code to load the project: +```python +from skore import load + +project = load("project.skore") +``` + +You can save items you need to track in your project: +```python +project.put("my int", 3) +``` + +You can also get them back: +```python +project.get("my int") +``` + +By default, strings are assumed to be Markdown: +```python +project.put("my string", "Hello world!") +``` + +Note that `put` overwrites previous data +```python +project.put("my string", "Hello again!") +``` + +You can list all the keys in a project with: +```python +project.list_keys() +``` + +You can delete items with: +```python +project.delete_item("my int") +``` + +Then, in the directory containing your project, run the following command to start the UI locally: +```sh +python -m skore launch project.skore +``` + +This will automatically open a browser at the UI's location. + + +## Roadmap + +With Skore, you can: +- Store data +- Visualize data + +In the future, you will be able to: +- Share visualizations of your data +- Extract insights from your data +- Get tips on how to improve your data science code + +## Contributing + +See [CONTRIBUTING.md](/CONTRIBUTING.md) for more information and to contribute to the evolution of this library. diff --git a/skore/VERSION.txt b/skore/VERSION.txt new file mode 100644 index 00000000..9039b6f9 --- /dev/null +++ b/skore/VERSION.txt @@ -0,0 +1 @@ +0.0.0+unknown diff --git a/pyproject.toml b/skore/pyproject.toml similarity index 99% rename from pyproject.toml rename to skore/pyproject.toml index 1f73826c..97671891 100644 --- a/pyproject.toml +++ b/skore/pyproject.toml @@ -45,7 +45,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.version] -path = "./VERSION.txt" +path = "VERSION.txt" pattern = "(?P[^']+)" [tool.hatch.build.targets.sdist] diff --git a/requirements-test.txt b/skore/requirements-test.txt similarity index 100% rename from requirements-test.txt rename to skore/requirements-test.txt diff --git a/requirements-tools.txt b/skore/requirements-tools.txt similarity index 100% rename from requirements-tools.txt rename to skore/requirements-tools.txt diff --git a/requirements.txt b/skore/requirements.txt similarity index 100% rename from requirements.txt rename to skore/requirements.txt diff --git a/src/skore/__init__.py b/skore/src/skore/__init__.py similarity index 100% rename from src/skore/__init__.py rename to skore/src/skore/__init__.py diff --git a/src/skore/__main__.py b/skore/src/skore/__main__.py similarity index 100% rename from src/skore/__main__.py rename to skore/src/skore/__main__.py diff --git a/src/skore/cli/__init__.py b/skore/src/skore/cli/__init__.py similarity index 100% rename from src/skore/cli/__init__.py rename to skore/src/skore/cli/__init__.py diff --git a/src/skore/cli/cli.py b/skore/src/skore/cli/cli.py similarity index 100% rename from src/skore/cli/cli.py rename to skore/src/skore/cli/cli.py diff --git a/src/skore/cli/create_project.py b/skore/src/skore/cli/create_project.py similarity index 100% rename from src/skore/cli/create_project.py rename to skore/src/skore/cli/create_project.py diff --git a/src/skore/cli/launch_dashboard.py b/skore/src/skore/cli/launch_dashboard.py similarity index 100% rename from src/skore/cli/launch_dashboard.py rename to skore/src/skore/cli/launch_dashboard.py diff --git a/src/skore/cli/quickstart_command.py b/skore/src/skore/cli/quickstart_command.py similarity index 100% rename from src/skore/cli/quickstart_command.py rename to skore/src/skore/cli/quickstart_command.py diff --git a/src/skore/item/__init__.py b/skore/src/skore/item/__init__.py similarity index 100% rename from src/skore/item/__init__.py rename to skore/src/skore/item/__init__.py diff --git a/src/skore/item/item.py b/skore/src/skore/item/item.py similarity index 100% rename from src/skore/item/item.py rename to skore/src/skore/item/item.py diff --git a/src/skore/item/item_repository.py b/skore/src/skore/item/item_repository.py similarity index 100% rename from src/skore/item/item_repository.py rename to skore/src/skore/item/item_repository.py diff --git a/src/skore/item/media_item.py b/skore/src/skore/item/media_item.py similarity index 100% rename from src/skore/item/media_item.py rename to skore/src/skore/item/media_item.py diff --git a/src/skore/item/numpy_array_item.py b/skore/src/skore/item/numpy_array_item.py similarity index 100% rename from src/skore/item/numpy_array_item.py rename to skore/src/skore/item/numpy_array_item.py diff --git a/src/skore/item/pandas_dataframe_item.py b/skore/src/skore/item/pandas_dataframe_item.py similarity index 100% rename from src/skore/item/pandas_dataframe_item.py rename to skore/src/skore/item/pandas_dataframe_item.py diff --git a/src/skore/item/pandas_series_item.py b/skore/src/skore/item/pandas_series_item.py similarity index 100% rename from src/skore/item/pandas_series_item.py rename to skore/src/skore/item/pandas_series_item.py diff --git a/src/skore/item/primitive_item.py b/skore/src/skore/item/primitive_item.py similarity index 100% rename from src/skore/item/primitive_item.py rename to skore/src/skore/item/primitive_item.py diff --git a/src/skore/item/sklearn_base_estimator_item.py b/skore/src/skore/item/sklearn_base_estimator_item.py similarity index 100% rename from src/skore/item/sklearn_base_estimator_item.py rename to skore/src/skore/item/sklearn_base_estimator_item.py diff --git a/src/skore/persistence/__init__.py b/skore/src/skore/persistence/__init__.py similarity index 100% rename from src/skore/persistence/__init__.py rename to skore/src/skore/persistence/__init__.py diff --git a/src/skore/persistence/abstract_storage.py b/skore/src/skore/persistence/abstract_storage.py similarity index 100% rename from src/skore/persistence/abstract_storage.py rename to skore/src/skore/persistence/abstract_storage.py diff --git a/src/skore/persistence/disk_cache_storage.py b/skore/src/skore/persistence/disk_cache_storage.py similarity index 100% rename from src/skore/persistence/disk_cache_storage.py rename to skore/src/skore/persistence/disk_cache_storage.py diff --git a/src/skore/persistence/in_memory_storage.py b/skore/src/skore/persistence/in_memory_storage.py similarity index 100% rename from src/skore/persistence/in_memory_storage.py rename to skore/src/skore/persistence/in_memory_storage.py diff --git a/src/skore/project.py b/skore/src/skore/project.py similarity index 100% rename from src/skore/project.py rename to skore/src/skore/project.py diff --git a/src/skore/ui/__init__.py b/skore/src/skore/ui/__init__.py similarity index 100% rename from src/skore/ui/__init__.py rename to skore/src/skore/ui/__init__.py diff --git a/src/skore/ui/app.py b/skore/src/skore/ui/app.py similarity index 100% rename from src/skore/ui/app.py rename to skore/src/skore/ui/app.py diff --git a/src/skore/ui/dependencies.py b/skore/src/skore/ui/dependencies.py similarity index 100% rename from src/skore/ui/dependencies.py rename to skore/src/skore/ui/dependencies.py diff --git a/src/skore/ui/project_routes.py b/skore/src/skore/ui/project_routes.py similarity index 100% rename from src/skore/ui/project_routes.py rename to skore/src/skore/ui/project_routes.py diff --git a/src/skore/ui/templates/share.html.jinja b/skore/src/skore/ui/templates/share.html.jinja similarity index 100% rename from src/skore/ui/templates/share.html.jinja rename to skore/src/skore/ui/templates/share.html.jinja diff --git a/src/skore/utils/__init__.py b/skore/src/skore/utils/__init__.py similarity index 100% rename from src/skore/utils/__init__.py rename to skore/src/skore/utils/__init__.py diff --git a/src/skore/utils/_show_versions.py b/skore/src/skore/utils/_show_versions.py similarity index 100% rename from src/skore/utils/_show_versions.py rename to skore/src/skore/utils/_show_versions.py diff --git a/src/skore/view/__init__.py b/skore/src/skore/view/__init__.py similarity index 100% rename from src/skore/view/__init__.py rename to skore/src/skore/view/__init__.py diff --git a/src/skore/view/view.py b/skore/src/skore/view/view.py similarity index 100% rename from src/skore/view/view.py rename to skore/src/skore/view/view.py diff --git a/src/skore/view/view_repository.py b/skore/src/skore/view/view_repository.py similarity index 100% rename from src/skore/view/view_repository.py rename to skore/src/skore/view/view_repository.py diff --git a/tests/conftest.py b/skore/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to skore/tests/conftest.py diff --git a/tests/functional/.gitkeep b/skore/tests/functional/.gitkeep similarity index 100% rename from tests/functional/.gitkeep rename to skore/tests/functional/.gitkeep diff --git a/tests/integration/cli/test_cli.py b/skore/tests/integration/cli/test_cli.py similarity index 100% rename from tests/integration/cli/test_cli.py rename to skore/tests/integration/cli/test_cli.py diff --git a/tests/integration/cli/test_create.py b/skore/tests/integration/cli/test_create.py similarity index 100% rename from tests/integration/cli/test_create.py rename to skore/tests/integration/cli/test_create.py diff --git a/tests/integration/ui/test_ui.py b/skore/tests/integration/ui/test_ui.py similarity index 100% rename from tests/integration/ui/test_ui.py rename to skore/tests/integration/ui/test_ui.py diff --git a/tests/unit/cli/test_cli.py b/skore/tests/unit/cli/test_cli.py similarity index 100% rename from tests/unit/cli/test_cli.py rename to skore/tests/unit/cli/test_cli.py diff --git a/tests/unit/item/test_item_repository.py b/skore/tests/unit/item/test_item_repository.py similarity index 100% rename from tests/unit/item/test_item_repository.py rename to skore/tests/unit/item/test_item_repository.py diff --git a/tests/unit/item/test_media_item.py b/skore/tests/unit/item/test_media_item.py similarity index 100% rename from tests/unit/item/test_media_item.py rename to skore/tests/unit/item/test_media_item.py diff --git a/tests/unit/item/test_numpy_array_item.py b/skore/tests/unit/item/test_numpy_array_item.py similarity index 100% rename from tests/unit/item/test_numpy_array_item.py rename to skore/tests/unit/item/test_numpy_array_item.py diff --git a/tests/unit/item/test_pandas_dataframe_item.py b/skore/tests/unit/item/test_pandas_dataframe_item.py similarity index 100% rename from tests/unit/item/test_pandas_dataframe_item.py rename to skore/tests/unit/item/test_pandas_dataframe_item.py diff --git a/tests/unit/item/test_pandas_series_item.py b/skore/tests/unit/item/test_pandas_series_item.py similarity index 100% rename from tests/unit/item/test_pandas_series_item.py rename to skore/tests/unit/item/test_pandas_series_item.py diff --git a/tests/unit/item/test_primitive_item.py b/skore/tests/unit/item/test_primitive_item.py similarity index 100% rename from tests/unit/item/test_primitive_item.py rename to skore/tests/unit/item/test_primitive_item.py diff --git a/tests/unit/item/test_sklearn_base_estimator_item.py b/skore/tests/unit/item/test_sklearn_base_estimator_item.py similarity index 100% rename from tests/unit/item/test_sklearn_base_estimator_item.py rename to skore/tests/unit/item/test_sklearn_base_estimator_item.py diff --git a/tests/unit/persistence/test_disk.py b/skore/tests/unit/persistence/test_disk.py similarity index 100% rename from tests/unit/persistence/test_disk.py rename to skore/tests/unit/persistence/test_disk.py diff --git a/tests/unit/persistence/test_memory.py b/skore/tests/unit/persistence/test_memory.py similarity index 100% rename from tests/unit/persistence/test_memory.py rename to skore/tests/unit/persistence/test_memory.py diff --git a/tests/unit/test_project.py b/skore/tests/unit/test_project.py similarity index 100% rename from tests/unit/test_project.py rename to skore/tests/unit/test_project.py diff --git a/tests/unit/utils/test_show_versions.py b/skore/tests/unit/utils/test_show_versions.py similarity index 100% rename from tests/unit/utils/test_show_versions.py rename to skore/tests/unit/utils/test_show_versions.py diff --git a/tests/unit/view/test_view_repository.py b/skore/tests/unit/view/test_view_repository.py similarity index 100% rename from tests/unit/view/test_view_repository.py rename to skore/tests/unit/view/test_view_repository.py