Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
5a1773a
Add CurveAlign Python API: complete implementation with organized typ…
Phil-Dua Sep 22, 2025
4207241
Update README to document CurveAlign Python API integration and usage…
Phil-Dua Sep 22, 2025
99eab6c
Add setup notes and clean up moved Python API: remove broken virtual …
Phil-Dua Sep 22, 2025
53cdf7e
gitignore: add Python API ignores in tme-quant; streamline Curvelets_…
Phil-Dua Sep 22, 2025
3dec5a3
docs(curvealign): add API_OUTLINE.md (MATLAB mapping) alongside Pytho…
Phil-Dua Sep 22, 2025
0ebccf0
Refactor CurveAlign Python API to granular architecture
Phil-Dua Sep 24, 2025
f2ed12b
Clean up old monolithic files after granular refactoring
Phil-Dua Sep 24, 2025
25bb5d3
Test and align granular CurveAlign API: fix imports, update CI workflow
Phil-Dua Sep 24, 2025
e5079d0
Remove redundant test_new_architecture.py - superseded by comprehensi…
Phil-Dua Sep 24, 2025
76699da
Update .gitignore: add .test_env, enhance Python ignores, add output …
Phil-Dua Sep 24, 2025
c74b834
Integrate CT-FIRE: parallel granular API, unified interface
Phil-Dua Sep 24, 2025
e4d036b
Organize tests: move to proper API directories, fix imports, update CI
Phil-Dua Sep 24, 2025
21fd3aa
CI: install pytest-cov to satisfy coverage addopts; run subpackage tests
Phil-Dua Sep 24, 2025
7d3e777
Fix CI tests: validate mode, alias std_angle, add map_std_window, exp…
Phil-Dua Sep 24, 2025
0bbc9ab
CI: add total_curvelets alias in stats for legacy tests
Phil-Dua Sep 24, 2025
e59b12e
Refactor to src/test layout: src/curvealign & src/ctfire; move tests;…
Phil-Dua Sep 29, 2025
a49328b
Clean up structure: rename packages to src/curvealign_py & src/ctfire…
Phil-Dua Sep 29, 2025
7fff4d9
Final cleanup: remove old curvealign_py/ and pycurvelets/; update nap…
Phil-Dua Sep 29, 2025
72ea5cd
Fix import typos: curvealign_py_py -> curvealign_py; update .gitignore
Phil-Dua Sep 29, 2025
50a14e9
Remove obsolete tests: pycurvelets-based test_new_curv.py, test_relat…
Phil-Dua Sep 29, 2025
ae46940
Update README.md and simple_usage.py: highlight modern Python API, co…
Phil-Dua Sep 29, 2025
b7ad038
Consolidate virtual environments: remove .api_env .test_env, use sing…
Phil-Dua Sep 29, 2025
51ef255
Integrate Curvelops for authentic FDCT transforms
Phil-Dua Oct 1, 2025
c5d7356
Complete Curvelops integration with CurveLab and FFTW
Phil-Dua Oct 1, 2025
0b492d2
Implemented MATLAB compatible curvelet extraction and boundary angle…
Phil-Dua Oct 20, 2025
285618f
fix: Improve relative angles accuracy - 4/6 tests now passing
Phil-Dua Oct 20, 2025
b230aa4
fix: Complete relative angles debugging - ALL TESTS NOW PASSING
Phil-Dua Oct 20, 2025
6cf340d
fix: Improve CI compatibility and robustness
Phil-Dua Oct 20, 2025
38e67af
fix: Make tests more flexible for placeholder FDCT
Phil-Dua Oct 20, 2025
ca47a24
fix: Final CI compatibility fixes - ALL TESTS NOW PASSING
Phil-Dua Oct 20, 2025
f2e2e2c
Update CurveLab CI integration and reorganize tests
Phil-Dua Oct 22, 2025
51d653f
Fix CI test failures and CurveLab download
Phil-Dua Oct 22, 2025
ef010d6
Make tests environment-aware for placeholder vs real CurveLab
Phil-Dua Oct 22, 2025
7afa16e
Fix CI: updated curvelab download with correct usage of secrets
Phil-Dua Oct 22, 2025
17d2634
updated CI: skips the secure-download job on forked PRs, and adds saf…
Phil-Dua Oct 22, 2025
f768f94
CI update: shows the effective URL after redirects and the status chain
Phil-Dua Oct 22, 2025
a274c8b
simplify build up process. docs: simplify README; move Docker files t…
Phil-Dua Oct 29, 2025
76f8843
chore(setup): add bin setup scripts to repo
Phil-Dua Oct 29, 2025
c2b542c
setup: auto-detect FFTW and CurveLab under ../utils to avoid manual e…
Phil-Dua Oct 29, 2025
b6dd367
setup: fix PROJECT_ROOT to parent of bin; correct install path
Phil-Dua Oct 29, 2025
963a08f
Add Napari plugin with segmentation, ROI Manager, and multi-environme…
Phil-Dua Nov 5, 2025
9969497
Separate napari-curvealign plugin functionality to dedicated branch
Phil-Dua Nov 10, 2025
fa76a73
docs: Update README to reflect api-curation branch focus
Phil-Dua Nov 10, 2025
b097371
docs: Clean up napari plugin references, clarify napari as optional v…
Phil-Dua Nov 12, 2025
e864d00
Add automated one-click installation script and update documentation
Phil-Dua Nov 12, 2025
a55a1fb
Remove bin/ from gitignore to track setup scripts
Phil-Dua Nov 12, 2025
69718a8
refactor: Focus api-curation on Python API conversion, remove MATLAB …
Phil-Dua Nov 17, 2025
d3f275e
refactor: Remove MATLAB reference files from napari plugin
Phil-Dua Nov 17, 2025
57e845f
feat: Merge napari-curvealign plugin into api-curation
Phil-Dua Nov 17, 2025
0d1d20b
feat: Restore complete napari plugin files after merge
Phil-Dua Nov 17, 2025
3c8855f
docs: Reorganize markdown files for better structure
Phil-Dua Nov 17, 2025
13e97e5
Enhance napari plugin to match MATLAB CurveAlign functionality
Phil-Dua Nov 19, 2025
6e4933e
Enhance ROI manager annotations with segmentation-driven workflow.
Phil-Dua Nov 27, 2025
25a72b4
Extend CurveAlign napari ROI manager with MATLAB-parity features: add…
Phil-Dua Dec 3, 2025
e44f370
ci: build CurveLab from secure tarball
Phil-Dua Dec 8, 2025
6c8c52b
ci: read CurveLab secrets via env
Phil-Dua Dec 8, 2025
dd68024
ci: fetch CurveLab via single secret
Phil-Dua Dec 8, 2025
e4da589
ci: handle non-gzip CurveLab archives
Phil-Dua Dec 8, 2025
063cb63
ci: detect HTML CurveLab downloads
Phil-Dua Dec 8, 2025
d7aea6b
ci: run jobs in secret-test env
Phil-Dua Dec 8, 2025
97a9a87
Rerun jobs in secrets env
Phil-Dua Dec 9, 2025
e3fbdf4
Fix CI workflow: remove environment requirement to use repository sec…
Phil-Dua Dec 9, 2025
2507825
Add back environment: secret-test to access environment secrets
Phil-Dua Dec 9, 2025
8aafc1e
Fix test-basic job: remove unnecessary CurveLab setup for placeholder…
Phil-Dua Dec 9, 2025
99a4cd1
Add FFTW/CurveLab setup to test-basic job (curvelops is mandatory)
Phil-Dua Dec 9, 2025
d97ee81
CI: split basic vs curvelab; gate secrets; validate CurveLab download
Phil-Dua Jan 12, 2026
45e3d44
Make curvelops optional; install only in CurveLab CI job
Phil-Dua Jan 12, 2026
7e41f82
CI: fail fast on HTML CurveLab downloads; harden curl
Phil-Dua Jan 12, 2026
fd981a9
CI: use repo secrets for CurveLab job (no environment binding)
Phil-Dua Jan 12, 2026
3de0ca5
Improve napari segmentation scoping and grouping; ensure segmentation…
Phil-Dua Jan 14, 2026
36de334
Add batch pipeline and post-processing plots; refactor segmentation r…
Phil-Dua Jan 15, 2026
946e06d
Add extended ROI format support and fix workflow bugs
Phil-Dua Jan 22, 2026
19324cd
Fix ROI format bugs and implement summary statistics
Phil-Dua Jan 22, 2026
7669a91
Update Save All ROIs (Quick) to support all formats
Phil-Dua Jan 22, 2026
b6e48e8
Refactor Advanced Analysis workflow to use existing ROIs
Phil-Dua Jan 22, 2026
467a770
Center button text and fix indentation
Phil-Dua Jan 22, 2026
61e5908
Implement structured ROI_management directory for ROI persistence
Phil-Dua Jan 26, 2026
548788b
Add fallback ROI save location for read-only image directories
Phil-Dua Jan 26, 2026
feb2030
feat(napari): add Fiji integration, TACS analysis, and fix ROI update…
Phil-Dua Jan 28, 2026
db05ba5
Fix skimage deprecation warnings and prevent ROIs outside image bounds
Phil-Dua Jan 28, 2026
d0dfe81
Fix ROI drawing, ellipse visualization, and QuPath loading issues
Phil-Dua Jan 28, 2026
d4f1f82
CI: fail manual stub on HTML downloads
Phil-Dua Feb 2, 2026
9eb4fc6
CI: align CurveLab fetch with secret usage
Phil-Dua Feb 2, 2026
c31b42c
CI: wire FFTW/CurveLab paths for build
Phil-Dua Feb 2, 2026
f2615cc
CI: build FFTW with PIC for shared linking
Phil-Dua Feb 2, 2026
5fb9d36
Allow placeholder FDCT when curvelets disabled
Phil-Dua Feb 2, 2026
ccabca8
Fix apply_fdct usage in tests
Phil-Dua Feb 2, 2026
1f3c03d
CI: fail fast if CurveLab binaries missing
Phil-Dua Feb 2, 2026
9b066ff
CI: reset CurveLab env before setup
Phil-Dua Feb 2, 2026
875a877
Fix QuPath ROI load reliability
Phil-Dua Feb 2, 2026
33c7369
Unify ROI selection across panels.
Phil-Dua Feb 2, 2026
81a88e4
CI: validate CurveLab libraries
Phil-Dua Feb 3, 2026
7fef6f3
CI: export FFTW library path
Phil-Dua Feb 3, 2026
e21be04
Restore minimal local setup scripts and docs
Phil-Dua Feb 3, 2026
5a966d2
Clamp ROI drawing to active image bounds.
Phil-Dua Feb 9, 2026
f690506
Stabilize ROI shape switching after freehand mode.
Phil-Dua Feb 9, 2026
e7a6322
Replace StarDist with cellcast for nuclei segmentation
Phil-Dua Feb 16, 2026
32d7836
Merge branch 'main' into napari-curvealign
ctrueden Feb 19, 2026
b1b72ff
Merge branch '22-consistent-test-struct' into napari-curvealign
ctrueden Feb 19, 2026
77e9316
Restart napari-curvealign: migrate to pycurvelets API
Phil-Dua Feb 23, 2026
a2b7dc1
Merge branch 'main' into napari-curvealign
ctrueden Feb 24, 2026
ff5e7df
Restart napari-curvealign: migrate to pycurvelets API
Phil-Dua Feb 24, 2026
2704591
Merge temp: pycurvelets migration, clean doc/bin
Phil-Dua Feb 24, 2026
5cd0f23
Remove obsolete code: curvealign_matlab, curvealign_py, ctfire_py
Phil-Dua Feb 24, 2026
c8435fa
Add roifile dependency for Fiji/StarDist ROI format support, all test…
Phil-Dua Feb 24, 2026
c4af114
Clean up bin/ and doc/ to match main (installation-automation merge)
Phil-Dua Feb 24, 2026
580fbe6
Remove docker related files, align CI with the current curvelet workf…
Phil-Dua Feb 24, 2026
11a0bad
Stabilize napari plugin setup and clarify curvelet parity testing.
Phil-Dua Feb 25, 2026
db64309
Fix ROI shape-layer desync when switching drawing modes.
Phil-Dua Feb 25, 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
168 changes: 168 additions & 0 deletions .github/ci_setup_curvelab.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
#!/usr/bin/env bash

# CI helper: build FFTW 2.1.5 and CurveLab 2.1.3 from source and export env vars.
# Requires three secrets: RESTRICTED_USER, RESTRICTED_PASSWORD, RESTRICTED_URL.

set -euo pipefail

FFTW_VERSION="${FFTW_VERSION:-2.1.5}"
CURVELAB_VERSION="${CURVELAB_VERSION:-2.1.3}"
CURVELAB_ARCHIVE="${CURVELAB_ARCHIVE:-CurveLab-${CURVELAB_VERSION}.tar.gz}"
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
UTILS_DIR="${ROOT_DIR}/utils"

mkdir -p "${UTILS_DIR}"
cd "${UTILS_DIR}"

echo "== Preparing FFTW ${FFTW_VERSION} =="
if [ -n "${FFTW:-}" ]; then
if [ ! -d "${FFTW}" ]; then
echo "::error title=Invalid FFTW path::FFTW is set to '${FFTW}' but the directory does not exist."
exit 1
fi
FFTW_PATH="${FFTW}"
echo "Using pre-installed FFTW at ${FFTW_PATH}"
else
if [ ! -d "fftw-${FFTW_VERSION}" ]; then
if [ ! -f "fftw-${FFTW_VERSION}.tar.gz" ]; then
curl -fsSL "http://www.fftw.org/fftw-${FFTW_VERSION}.tar.gz" -o "fftw-${FFTW_VERSION}.tar.gz"
fi
tar xzf "fftw-${FFTW_VERSION}.tar.gz"
pushd "fftw-${FFTW_VERSION}" >/dev/null
CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure --prefix="$(pwd)" --disable-fortran --enable-shared --disable-static
make -j"$(nproc)"
make install
popd >/dev/null
ln -sf "fftw-${FFTW_VERSION}" fftw
else
echo "FFTW already present, skipping rebuild."
fi
FFTW_PATH="${UTILS_DIR}/fftw-${FFTW_VERSION}"
fi

# Some CurveLab makefiles expect headers/libs under FFTW_DIR/fftw
mkdir -p "${FFTW_PATH}/fftw"
if [ -f "${FFTW_PATH}/include/fftw.h" ]; then
ln -sf "${FFTW_PATH}/include/fftw.h" "${FFTW_PATH}/fftw/fftw.h"
fi
if [ -d "${FFTW_PATH}/lib" ]; then
ln -sf "${FFTW_PATH}/lib/"* "${FFTW_PATH}/fftw/" || true
fi

ARCHIVE_NAME="$(basename "${RESTRICTED_URL:-CurveLab-${CURVELAB_VERSION}.tar.gz}")"
DEFAULT_ARCHIVE="CurveLab-${CURVELAB_VERSION}.tar.gz"

if [ -n "${FDCT:-}" ]; then
if [ ! -d "${FDCT}" ]; then
echo "::error title=Invalid CurveLab path::FDCT is set to '${FDCT}' but the directory does not exist."
exit 1
fi
FDCT_PATH="${FDCT}"
echo "Using pre-installed CurveLab at ${FDCT_PATH}"
else
echo "== Preparing CurveLab ${CURVELAB_VERSION} archive =="
if [ -f "${DEFAULT_ARCHIVE}" ]; then
ARCHIVE_NAME="${DEFAULT_ARCHIVE}"
elif [ ! -f "${ARCHIVE_NAME}" ]; then
if [ -n "${RESTRICTED_USER:-}" ] && [ -n "${RESTRICTED_PASSWORD:-}" ] && [ -n "${RESTRICTED_URL:-}" ]; then
curl --fail-with-body -fL --retry 3 --retry-all-errors --connect-timeout 20 --max-time 600 \
-A "Mozilla/5.0 (GitHub Actions)" \
-u "${RESTRICTED_USER}:${RESTRICTED_PASSWORD}" \
-O "${RESTRICTED_URL}"
else
echo "::error title=CurveLab archive missing::Provide FETCH_FDCT secret (preferred) or define RESTRICTED_USER/RESTRICTED_PASSWORD/RESTRICTED_URL."
exit 1
fi
fi

if [ ! -d "CurveLab-${CURVELAB_VERSION}" ]; then
echo "== Extracting ${ARCHIVE_NAME} =="
if command -v file >/dev/null 2>&1; then
MIME_TYPE=$(file -b --mime-type "${ARCHIVE_NAME}")
else
MIME_TYPE=""
fi
if [[ "${MIME_TYPE}" == text/html* ]]; then
echo "::error title=CurveLab download failed::${ARCHIVE_NAME} is HTML (likely an auth error or redirect)."
if command -v head >/dev/null 2>&1; then
echo "First 40 lines of response:"
head -n 40 "${ARCHIVE_NAME}"
fi
echo "Ensure FETCH_FDCT runs a curl command that downloads the actual CurveLab-${CURVELAB_VERSION} archive."
exit 1
fi
case "${MIME_TYPE}" in
application/gzip|application/x-gzip)
tar xzf "${ARCHIVE_NAME}"
;;
application/x-tar|"")
# Fallback to plain tar if mime type unknown
tar xf "${ARCHIVE_NAME}"
;;
application/zip)
unzip -q "${ARCHIVE_NAME}"
;;
*)
echo "::error title=Unknown archive format::Don't know how to extract ${ARCHIVE_NAME} (${MIME_TYPE})."
exit 1
;;
esac
fi

echo "== Building CurveLab binaries =="
export FFTW_DIR="${FFTW_PATH}"
export FFTW="${FFTW_PATH}"
export CPPFLAGS="-I${FFTW_PATH}/include"
export LDFLAGS="-L${FFTW_PATH}/lib"
pushd "CurveLab-${CURVELAB_VERSION}" >/dev/null
pushd fdct_wrapping_cpp/src >/dev/null
make FFTW_DIR="${FFTW_PATH}" FFTW="${FFTW_PATH}" FFTW_INC="${FFTW_PATH}/include" FFTW_INCLUDE="${FFTW_PATH}/include" FFTW_LIB="${FFTW_PATH}/lib" FFTW_LIBDIR="${FFTW_PATH}/lib"
popd >/dev/null
pushd fdct3d/src >/dev/null
make FFTW_DIR="${FFTW_PATH}" FFTW="${FFTW_PATH}" FFTW_INC="${FFTW_PATH}/include" FFTW_INCLUDE="${FFTW_PATH}/include" FFTW_LIB="${FFTW_PATH}/lib" FFTW_LIBDIR="${FFTW_PATH}/lib"
popd >/dev/null
popd >/dev/null

FDCT_WRAPPING_LIB="CurveLab-${CURVELAB_VERSION}/fdct_wrapping_cpp/src/libfdct_wrapping.a"
FDCT3D_LIB="CurveLab-${CURVELAB_VERSION}/fdct3d/src/libfdct3d.a"
if [ ! -f "${FDCT_WRAPPING_LIB}" ]; then
echo "::error title=CurveLab build missing::libfdct_wrapping.a not found after build."
echo "Contents of fdct_wrapping_cpp/src:"
ls -la "CurveLab-${CURVELAB_VERSION}/fdct_wrapping_cpp/src" || true
exit 1
fi
if [ ! -f "${FDCT3D_LIB}" ]; then
echo "::error title=CurveLab build missing::libfdct3d.a not found after build."
echo "Contents of fdct3d/src:"
ls -la "CurveLab-${CURVELAB_VERSION}/fdct3d/src" || true
exit 1
fi

FDCT_PATH="${UTILS_DIR}/CurveLab-${CURVELAB_VERSION}"
fi

echo "FFTW path: ${FFTW_PATH}"
echo "CurveLab path: ${FDCT_PATH}"

LD_LIBRARY_PATH_VAL="${FFTW_PATH}/lib"
if [ -n "${LD_LIBRARY_PATH:-}" ]; then
LD_LIBRARY_PATH_VAL="${FFTW_PATH}/lib:${LD_LIBRARY_PATH}"
fi

if [ -n "${GITHUB_ENV:-}" ]; then
{
echo "FFTW=${FFTW_PATH}"
echo "FDCT=${FDCT_PATH}"
echo "CPPFLAGS=-I${FFTW_PATH}/include"
echo "LDFLAGS=-L${FFTW_PATH}/lib"
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH_VAL}"
} >> "${GITHUB_ENV}"
else
export FFTW="${FFTW_PATH}"
export FDCT="${FDCT_PATH}"
export CPPFLAGS="-I${FFTW_PATH}/include"
export LDFLAGS="-L${FFTW_PATH}/lib"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH_VAL}"
fi

echo "CurveLab setup complete."
114 changes: 101 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,124 @@ on:
branches: [main]

jobs:
test:
test-basic:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4

# Install system dependencies (like in your Docker container)
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libgl1 libglib2.0-0 python3-venv
run: |
sudo apt-get update
sudo apt-get install -y libgl1 libglib2.0-0 python3-venv

# Set up Python
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

# Create virtual environment
- name: Create virtual environment
- name: Install dependencies
run: |
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install --upgrade pip
python -m pip install -e .
python -m pip install pytest ruff

# Run tests in the venv
- name: Run tests
- name: Run basic tests
env:
TMEQ_RUN_CURVELETS: "0"
QT_QPA_PLATFORM: "offscreen"
run: |
pytest -q -rs

# Secure build with CurveLab; skip on forked PRs (no secrets on forks).
test-curvelab:
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12"]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential gcc g++ make wget curl unzip libgl1 libglib2.0-0

- name: Fetch CurveLab archive
shell: bash
env:
FETCH_FDCT: ${{ secrets.FETCH_FDCT }}
run: |
set -euo pipefail
if [ -z "${FETCH_FDCT}" ]; then
echo "::error title=Missing secret::FETCH_FDCT is empty. It must download utils/CurveLab-2.1.3.tar.gz."
exit 1
fi
mkdir -p utils
cd utils
echo "-- Pre eval --"
ls -la
echo "Downloading CurveLab archive via FETCH_FDCT..."
eval "${FETCH_FDCT}"
echo "-- Post eval --"
ls -la
if [ ! -f "CurveLab-2.1.3.tar.gz" ]; then
echo "::error title=CurveLab archive missing after FETCH_FDCT::Expected utils/CurveLab-2.1.3.tar.gz to exist after running FETCH_FDCT."
echo "Files in utils/:"
ls -la
exit 1
fi
if command -v file >/dev/null 2>&1; then
echo "Downloaded archive mime-type:"
MIME="$(file -b --mime-type "CurveLab-2.1.3.tar.gz" || true)"
echo "${MIME}"
if [[ "${MIME}" == text/html* ]]; then
echo "::error title=CurveLab download returned HTML::Likely a 403/redirect. Showing first 40 lines:"
head -n 40 "CurveLab-2.1.3.tar.gz" || true
echo "Fix: update FETCH_FDCT to use 'curl --fail-with-body -fL ... -o CurveLab-2.1.3.tar.gz <URL>' so it fails on 403 instead of saving HTML."
exit 1
fi
fi

- name: Prepare FFTW + CurveLab toolchain
env:
FDCT: ""
FFTW: ""
CPPFLAGS: ""
LDFLAGS: ""
run: |
unset FDCT FFTW CPPFLAGS LDFLAGS
bash .github/ci_setup_curvelab.sh

- name: Validate CurveLab libraries
run: |
echo "Testing CurveLab compilation..."
if [ -z "${FDCT:-}" ]; then
echo "❌ FDCT environment variable not set by ci_setup_curvelab.sh"
exit 1
fi
echo "FDCT=${FDCT}"
ls -la "${FDCT}" || true
ls -la "${FDCT}/fdct_wrapping_cpp/src" || true
ls -la "${FDCT}/fdct3d/src" || true
test -f "${FDCT}/fdct_wrapping_cpp/src/libfdct_wrapping.a" && echo "✅ libfdct_wrapping.a built" || (echo "❌ libfdct_wrapping.a missing"; exit 1)
test -f "${FDCT}/fdct3d/src/libfdct3d.a" && echo "✅ libfdct3d.a built" || (echo "❌ libfdct3d.a missing"; exit 1)

- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[curvelops]"
python -m pip install pytest ruff

- name: Run tests with CurveLab
env:
TMEQ_RUN_CURVELETS: "1"
QT_QPA_PLATFORM: "offscreen"
run: |
source venv/bin/activate
pytest -rs
pytest -q -rs
14 changes: 0 additions & 14 deletions .github/workflows/manual-test.yml

This file was deleted.

Loading