Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
ff08eee
updated to uv
Jun 11, 2025
a7c3f95
Update .gitignore
Jun 12, 2025
b377b7d
numpy2.0 compatability
Jun 11, 2025
e9c0eb5
update formating and dependencies
Jun 12, 2025
582e5ba
Refactor [UV-RUFF]
Jun 12, 2025
8f8f610
Ruff
rossant Mar 10, 2026
3c4756a
Fix failing util test by fixing NumPy compat issue
rossant Mar 10, 2026
8641fa4
Update pyproject to fallback to Qt5 for now
rossant Mar 10, 2026
eb49fc2
WIP: fixes
rossant Mar 10, 2026
9a51b10
Fixes in phy.plot
rossant Mar 10, 2026
7f36f19
WIP: fixes in cluster, gui, plot subpackages
rossant Mar 10, 2026
f1f8ea7
Trying to hide some deprecation warnings in dependencies
rossant Mar 10, 2026
fa76107
Fix supervisor test
rossant Mar 10, 2026
c777f84
Headless Qt tests by default
rossant Mar 10, 2026
a34a64b
Fixing warnings with qtbot
rossant Mar 10, 2026
d7ddd21
Fix hanging probe view by forcing positions to float64 (work-around b…
rossant Mar 10, 2026
48ef6a9
Warning fixes in apps
rossant Mar 10, 2026
0d7b1a4
Fix template GUI tests
rossant Mar 10, 2026
dbd63b4
Fixing IPython warnings by ugprading the IPython packages dependencies
rossant Mar 10, 2026
e80b14a
WIP: klusta dependency
rossant Mar 10, 2026
abca357
WIP: IPython fixes
rossant Mar 10, 2026
9fa464c
Work-around phylib hang bug in geometry util
rossant Mar 10, 2026
48f20e4
Fixes in Kwik GUI
rossant Mar 10, 2026
a18a72c
Fixing segfault with offscreen plot tests on Linux
rossant Mar 10, 2026
257c473
Run apps integration tests after the unit tests
rossant Mar 11, 2026
05da8b3
WIP: fixing IPython-related tests
rossant Mar 11, 2026
97c1ec1
Disable CI for now
rossant Mar 11, 2026
a3d2222
WIP: upgrading dependencies
rossant Mar 11, 2026
b372558
WIP: upgrading dependencies
rossant Mar 11, 2026
91460fb
Remove unused dask dependency
rossant Mar 11, 2026
604e4ec
Fixing headless tests in gui and plot packages
rossant Mar 11, 2026
42cb4b5
Fixing bug in plot.interact
rossant Mar 11, 2026
c4accd4
WIP: updating dependencies
rossant Mar 11, 2026
96af094
Upgrading scikit-learn dependency
rossant Mar 11, 2026
3b9d022
WIP: updating numpy and scipy dependencies
rossant Mar 11, 2026
08b7eef
Removing unused dependencies
rossant Mar 11, 2026
32ee96f
Updating matplotlib dependency
rossant Mar 11, 2026
6981115
Raise Python floor dependency
rossant Mar 11, 2026
99e7d0a
Upgrade pyopengl dependency
rossant Mar 11, 2026
af9e5f3
Upgrade pip
rossant Mar 11, 2026
3dada13
Update README
rossant Mar 11, 2026
e9f2453
Add more table filter tests
rossant Mar 11, 2026
3336a0c
WIP: table filter tests
rossant Mar 11, 2026
c13d552
More table filter tests
rossant Mar 11, 2026
b5dcea1
WIP: Qt-based version of the table, underlying the cluster and simila…
rossant Mar 11, 2026
43e781a
WIP: Qt table fixes
rossant Mar 11, 2026
e3e7fee
WIP: removing legacy web view
rossant Mar 11, 2026
e664f85
Update lock file
rossant Mar 11, 2026
2c6446c
Fixes in Qt table
rossant Mar 11, 2026
56c92b5
Preparing v2.1rc1 release
rossant Mar 11, 2026
42de14d
WIP: test fixes
rossant Mar 11, 2026
53e9565
Preparing for RC
rossant Mar 11, 2026
e1bf895
WIP: macOS test fixes
rossant Mar 11, 2026
b9b1047
Add docs
rossant Mar 12, 2026
423a53d
Release make commands
rossant Mar 18, 2026
c3e446f
PyQt5 is now a mandatory dependency
rossant Mar 18, 2026
f532cea
WIP: updating README and docs
rossant Mar 18, 2026
07a09ae
Add release smoke test script
rossant Mar 19, 2026
b0bfb67
WIP: releasing commands
rossant Mar 19, 2026
d40791d
WIP: macOS fixes
rossant Mar 19, 2026
df15a83
Fixing releasing commands
rossant Mar 19, 2026
131a798
WIP: simplification of releasing commands
rossant Mar 19, 2026
4a714d2
Remove announcement file
rossant Mar 21, 2026
bb1bbcb
Add RC install instructions in release.md
rossant Mar 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: CI

on:
workflow_dispatch:

jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ["3.9", "3.10", "3.11", "3.12"]
qt-version: ["qt5"]

steps:
- uses: actions/checkout@v4

# Set up display for GUI testing on Linux
- name: Set up display (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y xvfb herbstluftwm
export DISPLAY=:99.0
Xvfb :99 -screen 0 1400x900x24 -ac +extension GLX +render &
sleep 3
herbstluftwm &
sleep 1
env:
DISPLAY: :99.0

- name: Install uv
uses: astral-sh/setup-uv@v3
with:
version: "latest"

- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

- name: Install dependencies
run: uv sync --dev --extra ${{ matrix.qt-version }}

- name: Install phylib from branch
run: |
if [ "${{ github.ref_name }}" = "master" ]; then
uv add "git+https://github.com/cortex-lab/phylib.git@master"
elif [ "${{ github.ref_name }}" = "dev" ]; then
uv add "git+https://github.com/cortex-lab/phylib.git@dev"
else
uv add "git+https://github.com/cortex-lab/phylib.git@${{ github.ref_name }}"
fi
shell: bash

- name: Install additional test dependencies
run: |
uv add "git+https://github.com/kwikteam/klusta.git"
uv add "git+https://github.com/kwikteam/klustakwik2.git"

- name: Lint with ruff
run: uv run ruff check phy

- name: Check formatting with ruff
run: uv run ruff format --check phy

- name: Test with pytest (Linux)
if: runner.os == 'Linux'
run: uv run make test-full
env:
DISPLAY: :99.0
QT_QPA_PLATFORM: offscreen

- name: Test with pytest (Windows/macOS)
if: runner.os != 'Linux'
run: uv run pytest --cov=phy --cov-report=xml phy
env:
QT_QPA_PLATFORM: offscreen

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.xml
fail_ci_if_error: false
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

build:
runs-on: ubuntu-latest
needs: test

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v3
with:
version: "latest"

- name: Set up Python
run: uv python install 3.9

- name: Build package
run: uv build

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
5 changes: 1 addition & 4 deletions .github/workflows/codespell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
name: Codespell

on:
push:
branches: [master]
pull_request:
branches: [master]
workflow_dispatch:

permissions:
contents: read
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/python-test.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: Install and Test with Pip

on:
pull_request:
push:
branches: [ "main", "master" ]
workflow_dispatch:


Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
local_tests
contrib
data
doc
Expand Down
1 change: 1 addition & 0 deletions .release-smoke/latest-testpypi-version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2.1.0rc1.dev3
10 changes: 2 additions & 8 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
include LICENSE
include LICENSE.md
include README.md
include requirements.txt
include requirements-dev.txt

recursive-include tests *
recursive-include phy/electrode/probes *.prb
recursive-include phy/plot/glsl *.vert *.frag *.glsl
recursive-include phy/plot/static *.npy *.gz *.txt
recursive-include phy/cluster/static *.html *.css
recursive-include phy/plot/static *.gz
recursive-include phy/gui/static *.html *.css *.js *.ttf *.png
recursive-include phy/gui/static/icons *.html *.css *.js *.ttf *.png
recursive-include phy/apps/*/static *.json
recursive-exclude * __pycache__
recursive-exclude * *.py[co]
112 changes: 99 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,122 @@ clean-build:
rm -fr build/
rm -fr dist/
rm -fr *.egg-info
rm -fr .eggs/

clean-pyc:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +

clean: clean-build clean-pyc
clean-test:
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
rm -fr .pytest_cache/
rm -fr .ruff_cache/
rm -fr .release-smoke/

clean: clean-build clean-pyc clean-test

install:
uv sync --dev

lint:
flake8 phy
uv run ruff check phy

format:
uv run ruff format phy

# Test everything except apps.
test: lint
py.test -xvv --cov-report= --cov=phy phy --ignore=phy/apps/ --cov-append
coverage report --omit */phy/apps/*,*/phy/plot/gloo/*
format-check:
uv run ruff format --check phy

# Test just the apps.
lint-fix:
uv run ruff check --fix phy

# Test everything except apps
test: lint format-check
uv run pytest -xvv --cov-report= --cov=phy phy --ignore=phy/apps/ --cov-append
uv run coverage report --omit "*/phy/apps/*,*/phy/plot/gloo/*"

# Test just the apps
test-apps: lint
py.test --cov-report term-missing --cov=phy.apps phy/apps/ --cov-append
uv run pytest --cov-report term-missing --cov=phy.apps phy/apps/ --cov-append

# Test everything.
# Test everything
test-full: test test-apps
coverage report --omit */phy/plot/gloo/*
uv run coverage report --omit "*/phy/plot/gloo/*"

test-fast:
uv run pytest phy

doc:
python3 tools/api.py && python tools/extract_shortcuts.py && python tools/plugins_doc.py
uv run python tools/api.py && uv run python tools/extract_shortcuts.py && uv run python tools/plugins_doc.py

build:
python3 setup.py sdist --formats=zip
uv build

upload:
twine upload dist/*
uv publish

upload-test:
uv publish --publish-url https://test.pypi.org/legacy/

publish-test:
python3 scripts/release_publish.py publish-testpypi-dev

version-test:
python3 scripts/release_publish.py print-latest-testpypi-version

publish-pypi:
python3 scripts/release_publish.py publish-pypi

coverage:
uv run coverage html

dev: install lint format test

ci: lint format-check test-full build

RELEASE_SMOKE_DATASET ?= $(CURDIR)/../phy-data/template
PYPROJECT_VERSION := $(shell python3 scripts/release_publish.py print-current-version)
SMOKE_VERSION ?=
PYPI_SMOKE_VERSION = $(or $(SMOKE_VERSION),$(PYPROJECT_VERSION))
TEST_SMOKE_VERSION = $(or $(SMOKE_VERSION),$(shell python3 scripts/release_publish.py print-latest-testpypi-version))
RELEASE_SMOKE_INDEX_URL ?=
RELEASE_SMOKE_EXTRA_INDEX_URL ?=

define run_smoke
RELEASE_SMOKE_DATASET="$(RELEASE_SMOKE_DATASET)" \
RELEASE_SMOKE_ENV="$(1)" \
RELEASE_SMOKE_VERSION="$(2)" \
RELEASE_SMOKE_INDEX_URL="$(3)" \
RELEASE_SMOKE_EXTRA_INDEX_URL="$(4)" \
bash scripts/release_smoke_test.sh $(5)
endef

define run_open
RELEASE_SMOKE_DATASET="$(RELEASE_SMOKE_DATASET)" \
RELEASE_SMOKE_ENV="$(1)" \
bash scripts/release_smoke_test.sh open
endef

smoke-local: build
$(call run_smoke,$(CURDIR)/.release-smoke/local,,,,local)

open-local:
$(call run_open,$(CURDIR)/.release-smoke/local)

smoke-pypi:
$(call run_smoke,$(CURDIR)/.release-smoke/pypi-$(PYPI_SMOKE_VERSION),$(PYPI_SMOKE_VERSION),$(RELEASE_SMOKE_INDEX_URL),$(RELEASE_SMOKE_EXTRA_INDEX_URL),pypi)

open-pypi:
$(call run_open,$(CURDIR)/.release-smoke/pypi-$(PYPI_SMOKE_VERSION))

smoke-test:
$(call run_smoke,$(CURDIR)/.release-smoke/testpypi-$(TEST_SMOKE_VERSION),$(TEST_SMOKE_VERSION),https://test.pypi.org/simple/,https://pypi.org/simple/,pypi)

open-test:
$(call run_open,$(CURDIR)/.release-smoke/testpypi-$(TEST_SMOKE_VERSION))

.PHONY: clean-build clean-pyc clean-test clean install lint format format-check lint-fix test test-apps test-full test-fast doc build upload upload-test publish-test version-test publish-pypi coverage dev ci smoke-local open-local smoke-pypi open-pypi smoke-test open-test
Loading