Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
037ac75
Update documentation and dependencies in various files
MitchellAcoustics Sep 17, 2025
9155f85
docs: small updates to tutorials
MitchellAcoustics Sep 24, 2025
be98cac
Update SPI module docstring
MitchellAcoustics Sep 24, 2025
b91de96
Add CircE package support to R wrapper module
MitchellAcoustics Sep 24, 2025
63383e6
wip: Add CircE wrapper for circumplex model fitting
MitchellAcoustics Sep 24, 2025
9efa767
Add function to extract fit statistics from BFGS model objects
MitchellAcoustics Sep 25, 2025
625abab
Expose CircE model fitting functionality in SPI module
MitchellAcoustics Sep 26, 2025
fd04548
Refactor CircE model handling: move classes to new circe.py module an…
MitchellAcoustics Sep 29, 2025
aa02bbd
Type hint update
MitchellAcoustics Sep 30, 2025
88a5bd9
feat: Add SATP module and refactor r wrappers
MitchellAcoustics Oct 1, 2025
feaea24
fix: update tests
MitchellAcoustics Oct 1, 2025
1a41b35
chore: fix linting errors and update tests
MitchellAcoustics Oct 1, 2025
cd19025
feat: add RTHORR package support and update R session handling
MitchellAcoustics Oct 2, 2025
d9d71f2
fix: update doctest syntax from xdoctest to doctest
MitchellAcoustics Oct 2, 2025
e620fee
feat: add warnings for experimental SATP and SPI analysis modules
MitchellAcoustics Oct 2, 2025
74e7226
fix: update factor list in test matrix to include 'r'
MitchellAcoustics Oct 2, 2025
b1a2422
fix: run pre-commit linting
MitchellAcoustics Oct 2, 2025
c9948f2
Merge pull request #122 from MitchellAcoustics/MitchellAcoustics/issu…
MitchellAcoustics Oct 2, 2025
fad1644
refactor: remove RTHORR package integration and related checks
MitchellAcoustics Feb 22, 2026
2ae3271
Resolve tox docs build issue
MitchellAcoustics Feb 22, 2026
e05c4d8
Merge pull request #125 from MitchellAcoustics/remove-r-rthorr-dep
MitchellAcoustics Feb 22, 2026
f919d8c
fix: update R package checks and improve auto-installation handling
MitchellAcoustics Feb 22, 2026
e8ac959
fix: update CircE package installation to use value from PKG_SRC enum
MitchellAcoustics Feb 22, 2026
2facc85
fix: update CircE package installation commands to use remotes instea…
MitchellAcoustics Feb 28, 2026
d6f5e34
fix: R wrapper cleanup, DataFrame mutation bug, test coverage and doc…
MitchellAcoustics Mar 1, 2026
6fa45e6
feat: SATP circumplex SEM module — functional API and architecture re…
MitchellAcoustics Mar 1, 2026
a718bd6
feat: schema validation, ipsatize unification, and CircEResults conta…
MitchellAcoustics Mar 2, 2026
9d563d1
fix: address code review findings in api-improvements
MitchellAcoustics Mar 2, 2026
f164d3b
linting fixes
MitchellAcoustics Mar 3, 2026
f190a0f
update gitignore
MitchellAcoustics Mar 3, 2026
5741dcf
formatting
MitchellAcoustics Mar 3, 2026
1d97ec9
fix: pass errors=\"warn\" in listwise deletion test to allow NaN rows
MitchellAcoustics Mar 3, 2026
31ede50
style: apply ruff format to test_circe.py
MitchellAcoustics Mar 3, 2026
0a3872f
chore: bump toml-sort to v0.24.3
MitchellAcoustics Mar 3, 2026
ef9ad40
chore: remove toml-sort-fix pre-commit hook
MitchellAcoustics Mar 3, 2026
1027b02
fix: address code review findings
MitchellAcoustics Mar 7, 2026
782edff
feat: schema validation, ipsatize unification, and CircEResults conta…
MitchellAcoustics Mar 7, 2026
7a4c539
feat: implement SATPVersion enum for dataset version management and u…
MitchellAcoustics Mar 8, 2026
41e42ab
feat: enhance SATPVersion enum with comparison methods and validate p…
MitchellAcoustics Mar 8, 2026
ddb8d2d
feat: add packaging dependency for improved version handling
MitchellAcoustics Mar 8, 2026
3f24585
feat: implement R output capture in CircE model for improved debugging
MitchellAcoustics Mar 8, 2026
6a33916
feat: update BFGS function to suppress R console output during model …
MitchellAcoustics Mar 8, 2026
aa63415
chore: Ignore local editor settings
MitchellAcoustics May 1, 2026
ae2dc06
Created using Colab
MitchellAcoustics May 8, 2026
13fa0d4
Switch to pixi (#134)
MitchellAcoustics May 9, 2026
0402ece
feat: add PREFIX_API_KEY to .envrc and update pixi.toml publish command
MitchellAcoustics May 9, 2026
68e1550
Start with condacolab in v2 notebook
MitchellAcoustics May 9, 2026
5edbaa9
feat: add environment.yml and update version in pyproject.toml; creat…
MitchellAcoustics May 9, 2026
7a90770
feat: replace bash script with Python script for updating environment…
MitchellAcoustics May 9, 2026
7fbdc47
feat: update numpy dependency version in pyproject.toml and remove ho…
MitchellAcoustics May 10, 2026
fd4f012
feat: improve handling of optional imports and streamline dependency …
MitchellAcoustics May 10, 2026
ad20e6a
feat: update devcontainer and tutorial notebook for konda installatio…
MitchellAcoustics May 10, 2026
f008585
bug: pytest exception isn't working
MitchellAcoustics May 10, 2026
6009cd0
bug: audio environment was pointing to r feature
MitchellAcoustics May 10, 2026
45ff32e
Revert "bug: pytest exception isn't working"
MitchellAcoustics May 10, 2026
ec32956
Revert "feat: improve handling of optional imports and streamline dep…
MitchellAcoustics May 10, 2026
f55babf
lock pixi
MitchellAcoustics May 10, 2026
a555f4a
feat: upgrade pixi test tasks
MitchellAcoustics May 10, 2026
155bea4
feat: enhance test tasks to clean up output
MitchellAcoustics May 10, 2026
7404bab
Reworks optional import handling
MitchellAcoustics May 10, 2026
cdc1a0f
Updates tests for optional dependency gates
MitchellAcoustics May 10, 2026
dd52406
Documents optional dependency architecture
MitchellAcoustics May 10, 2026
30fa986
Adjusts release and environment workflows
MitchellAcoustics May 10, 2026
cb9d340
Cleans lint and compatibility follow-ups
MitchellAcoustics May 10, 2026
256177f
Aligns editor defaults with project tooling
MitchellAcoustics May 10, 2026
adf770b
chore: lock uv file
MitchellAcoustics May 10, 2026
c108a3b
chore: merge dev and resolve pixi.toml conflict
MitchellAcoustics May 10, 2026
ec68538
refactor: standardize optional dependency handling with SPEC 1 lazy l…
MitchellAcoustics May 10, 2026
1ba4ecb
chore: update environment and pyproject files for dependency management
MitchellAcoustics May 10, 2026
90cc7c0
chore(release): prepare v0.8.2 — changelog, migration guide, version …
MitchellAcoustics May 10, 2026
1aeaf8a
Check for all required optional deps in xdoctest ignore
MitchellAcoustics May 10, 2026
642c5fc
Fix deterministic simulation data for plotting tests
Copilot May 10, 2026
ad7924c
Use repo-relative baseline output path
Copilot May 10, 2026
a525447
fix: skip network req'd doctests
MitchellAcoustics May 10, 2026
f7a3923
update environment.yml
MitchellAcoustics May 10, 2026
666d401
chore: remove tox and optional_deps marker
MitchellAcoustics May 10, 2026
4f53546
chore(ci): fix duplicate workflow runs and stale triggers
MitchellAcoustics May 10, 2026
53ab609
chore(ci): replace tag-triggered release with merge-triggered release
MitchellAcoustics May 10, 2026
b2a00aa
chore(ci): add workflow_dispatch to release workflow
MitchellAcoustics May 10, 2026
38640d3
chore(ci): scope PyPI publish to pypi environment
MitchellAcoustics May 10, 2026
15d71b2
chore(ci): split update-environment into standalone workflow
MitchellAcoustics May 10, 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
13 changes: 13 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu

ARG PIXI_VERSION=v0.68.0

RUN curl -L -o /usr/local/bin/pixi -fsSL --compressed "https://github.com/prefix-dev/pixi/releases/download/${PIXI_VERSION}/pixi-$(uname -m)-unknown-linux-musl" \
&& chmod +x /usr/local/bin/pixi \
&& pixi info

# set some user and workdir settings to work nicely with vscode
USER vscode
WORKDIR /home/vscode

RUN echo 'eval "$(pixi completion -s bash)"' >> /home/vscode/.bashrc
14 changes: 14 additions & 0 deletions .devcontainer/devcontainer-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"features": {
"ghcr.io/devcontainers-community/features/direnv": {
"version": "1.0.0",
"resolved": "ghcr.io/devcontainers-community/features/direnv@sha256:e0266877bb3935f243eaf70b3192182170f4f8c5cd86108e2509de2eff082ef5",
"integrity": "sha256:e0266877bb3935f243eaf70b3192182170f4f8c5cd86108e2509de2eff082ef5"
},
"ghcr.io/devcontainers-extra/features/prek:1": {
"version": "1.0.0",
"resolved": "ghcr.io/devcontainers-extra/features/prek@sha256:eb55e266252d8560cf726f27c5675e397bb833067a21428c50b273a59842f649",
"integrity": "sha256:eb55e266252d8560cf726f27c5675e397bb833067a21428c50b273a59842f649"
}
}
}
39 changes: 39 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/universal
{
"name": "Soundscapy",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:jammy"
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"customizations": {
"vscode": {
"settings": {
"ruff.importStrategy": "useBundled",
"git.requireGitUserConfig": false
},
"extensions": [
"ms-python.python",
"charliermarsh.ruff",
"GitHub.copilot",
"renan-r-santos.pixi-code",
"tamasfe.even-better-toml",
"ms-toolsai.jupyter",
"yzhang.markdown-all-in-one",
"meta.pyrefly",
"eamodio.gitlens"
]
}
},
"mounts": [
"source=${localWorkspaceFolderBasename}-pixi,target=${containerWorkspaceFolder}/.pixi,type=volume"
],
"postCreateCommand": "sudo chown vscode .pixi && direnv allow . && pixi install",
"features": {
// "ghcr.io/devcontainers-community/features/direnv": {},
"ghcr.io/devcontainers-community/features/direnv:1": {},
"ghcr.io/devcontainers-extra/features/prek:1": {}
}
}
5 changes: 5 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export UV_PUBLISH_TOKEN=$(cat .secrets/pypi-token)
export PREFIX_API_KEY=$(cat .secrets/prefix-api-key)

# watch_file pixi.lock
eval "$(pixi shell-hook)"
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff
50 changes: 32 additions & 18 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,50 @@ name: Documentation

on:
workflow_call:
outputs:
docs-pass:
description: "Indicates if documentation build passed"
value: ${{ github.event.inputs.docs-pass }}
push:
branches:
- main
pull_request:

jobs:
docs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0

- name: Cache tox
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
- name: Set up pixi
uses: prefix-dev/setup-pixi@v0.9.4
with:
path: .tox
key: tox-${{ hashFiles('pyproject.toml') }}
pixi-version: v0.68.0
cache: true
# auth-host: prefix.dev
# auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
frozen: true
environments: "docs"

- name: Build Zensical documentation with pixi
run: pixi run docs-build

- name: Set up Python
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
- name: Upload built docs as artifact
id: deployment
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
with:
python-version: "3.x"
cache: "pip"
cache-dependency-path: "pyproject.toml"
path: site

- name: Install tox
run: python -m pip install tox
- name: Build HTML documentation with tox
run: tox -e docs
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
permissions:
pages: write
id-token: write
runs-on: ubuntu-latest
needs: build
if: github.event_name != 'pull_request'
steps:
- name: Deploy to Github Pages
id: deployment
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
35 changes: 15 additions & 20 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
@@ -1,33 +1,28 @@
name: Linting

name: Prek checks
on:
push:
branches:
- main
branches: [main]
pull_request:
branches: [main, dev]

jobs:
linting:
prek:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

- name: Cache pre-commit
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
fetch-depth: 0

- name: Set up python
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
- name: Set up pixi
uses: prefix-dev/setup-pixi@v0.9.4
with:
python-version: "3.x"
cache: pip
cache-dependency-path: pyproject.toml

- name: Install dependencies
run: python -m pip install pre-commit
pixi-version: v0.68.0
cache: true
# auth-host: prefix.dev
# auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
frozen: true
environments: "default"

- name: Run pre-commit
run: pre-commit run --all-files --color always --verbose
- name: Run Prek checks
uses: j178/prek-action@v2
155 changes: 155 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: Release

# Triggered by merges to main. Publishes to PyPI and prefix.dev/sonic-forge
# and creates a GitHub release + git tag when pyproject.toml contains a clean
# version number (no .dev / rc / a / b suffix) and that tag doesn't exist yet.
#
# If the version was published to PyPI manually without a tag, the publish
# step will fail and print instructions for creating the tag manually.

on:
push:
branches: [main]
paths-ignore:
- "**.md"
workflow_dispatch:

jobs:
check:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.ver.outputs.version }}
release: ${{ steps.ver.outputs.release }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Read version and check release status
id: ver
run: |
VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "//;s/"//')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

# Pre-release version (has .dev, rc, a, b suffix) — skip
if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
echo "Pre-release version ${VERSION} — skipping release."
echo "release=false" >> "$GITHUB_OUTPUT"
exit 0
fi

# Tag already exists — already released (possibly manually)
git fetch --tags
if git ls-remote --tags origin "refs/tags/v${VERSION}" | grep -q .; then
echo "Tag v${VERSION} already exists — skipping release."
echo "release=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "Clean version ${VERSION} with no existing tag — will release."
echo "release=true" >> "$GITHUB_OUTPUT"

tests-pass:
needs: check
if: needs.check.outputs.release == 'true'
uses: ./.github/workflows/test.yml

docs-pass:
needs: check
if: needs.check.outputs.release == 'true'
uses: ./.github/workflows/docs.yml

build:
name: Build PyPI wheel and sdist
needs: check
if: needs.check.outputs.release == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: astral-sh/setup-uv@v5
with:
version: "0.7.2"
enable-cache: true
cache-dependency-glob: "uv.lock"

- run: uv build

- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

publish-conda:
name: Publish to prefix.dev/sonic-forge
needs: check
if: needs.check.outputs.release == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.9.5
with:
pixi-version: v0.68.0
environments: default
cache: true
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}

- name: Build and publish conda package
run: pixi run publish-conda

publish-pypi:
name: Publish to PyPI
needs: [check, build, tests-pass, docs-pass]
if: needs.check.outputs.release == 'true'
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

- name: Publish failed — manual tag needed
if: failure()
run: |
echo "::error::PyPI publish failed for soundscapy ${{ needs.check.outputs.version }}."
echo "::error::If already published manually, create the tag: git tag v${{ needs.check.outputs.version }} && git push origin v${{ needs.check.outputs.version }}"

tag-and-release:
name: Tag and create GitHub release
needs: [check, publish-pypi, publish-conda]
if: needs.check.outputs.release == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main

- name: Pull latest main
run: git pull origin main

- uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Create git tag and GitHub release
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ needs.check.outputs.version }}
run: |
git tag "v${VERSION}"
git push origin "v${VERSION}"
gh release create "v${VERSION}" dist/* \
--title "v${VERSION}" \
--generate-notes
Loading
Loading