Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
5a06ba5
Support Python 3.13 (#475)
yguclu Apr 2, 2025
4203343
Fix PSYDAC_BACKEND_GPYCCEL flags on latest Apple silicon (#480)
max-models Apr 7, 2025
1b34019
Resolve warnings in sequential unit tests (#481)
yguclu Apr 8, 2025
adb453a
Pass `out` parameter to `petsc_to_psydac` (#483)
e-moral-sanchez Apr 11, 2025
24646ef
Rename `dot` as `inner` in `Vector`, `VectorSpace`, and subclasses (#…
yguclu May 5, 2025
f96e888
Update docstring for inner product in polar/dense.py (#488)
campospinto May 9, 2025
54ea3ce
Add a `dot_inner` concrete method to the base class `LinearOperator` …
yguclu May 26, 2025
5e3d769
Install PETSc-3.23.2 (latest version) (#499)
yguclu May 30, 2025
2f242b1
Update authors (#500)
yguclu May 30, 2025
b5230b4
Fix the code generation of unnecessary derivatives (#490)
FrederikSchnack Jun 13, 2025
f387410
Fix bug in `allocate_matrices` in `DiscreteBilinearForm` (#507)
FrederikSchnack Jun 18, 2025
bccddfc
Enable Pyccel 2.0 (#503)
max-models Jun 28, 2025
42b214e
New installation procedure and README (#510)
yguclu Jul 14, 2025
776ac29
Fast Matrix Assembly (#448)
jowezarek Sep 10, 2025
fe56bcd
Improve multipatch FEM API (#509)
FrederikSchnack Sep 22, 2025
ccbd6e3
Allow `mpi_dims_mask` with geometry file (#526)
yguclu Oct 1, 2025
c531d98
Fix the parallel low-level 2D Poisson example (#528)
yguclu Oct 13, 2025
c97f265
Fix method `plot_2d_decomposition` of `TensorFemSpace` (#529)
yguclu Oct 21, 2025
b6d4d5d
Describe library name in README.md (#535)
yguclu Oct 30, 2025
c7ca428
Fix parallelization bug in polar splines (#539)
yguclu Nov 6, 2025
1e6a114
Add Dirichlet Boundary Projectors (#536)
jowezarek Nov 21, 2025
45c7653
Make `psydac-accelerate` a real command (#542)
FrederikSchnack Nov 24, 2025
b459cb9
Remove old files (#541)
FrederikSchnack Nov 24, 2025
dc93a31
Add diagonal() to KroneckerStencilMatrix (#537)
jowezarek Nov 25, 2025
b68b7eb
Add license header to every Python file (#544)
yguclu Nov 27, 2025
a89a6ee
Add Logo (#540)
FrederikSchnack Nov 28, 2025
1febd12
Add LST preconditioner (#538)
jowezarek Dec 13, 2025
bb76bb1
Refactor CG AND BiCGSTAB, have pc baked in the same class (#512)
anushkasinghh Dec 17, 2025
96b4312
Fix some bugs in multi-patch domains (#546)
yguclu Dec 18, 2025
689127d
Prepare release (#553)
yguclu Dec 23, 2025
a24643a
Fix sum factorization (#558)
yguclu Dec 23, 2025
d2d673a
Reorganize psydac examples (#543)
FrederikSchnack Dec 25, 2025
7eacf0a
Version 1.0.0 (#563)
yguclu Jan 19, 2026
05e6d0c
Remove obsolete files left behind after bad merge (#564)
yguclu Jan 20, 2026
8f87fc5
Expand editable install info in README.md (#565)
yguclu Jan 22, 2026
6f2842b
Fix command `psydac test --mpi` on Ubuntu machines (#566)
yguclu Jan 26, 2026
8841126
Improve `psydac test` command (#567)
yguclu Jan 28, 2026
6322365
Optimize PSYDAC logo (#570)
FrederikSchnack Jan 30, 2026
812cf14
Update CI installation of `h5py` and `petsc4py` after release of `set…
campospinto Feb 13, 2026
4f78a33
Reactivate sum factorization algorithm (#571)
jowezarek Feb 13, 2026
bc87faa
Fix CPU flags in `psydac/api/settings.py` (#569)
campospinto Feb 19, 2026
16fb9d3
Allow installation with parametrisable backend language (#577)
EmilyBourne Mar 9, 2026
554017e
Apply some important fixes (#579)
yguclu Mar 25, 2026
1bd4101
Rework some tests for shorter CI runs (#575)
campospinto Mar 25, 2026
746d0c9
Use PETSc version 3.25.0 (#580)
yguclu Apr 13, 2026
316b080
Update petsc4py install
max-models Jul 23, 2026
8e3ab66
Merge upstream/devel: resolve conflicts, keep our versions for modifi…
max-models Jul 23, 2026
e7cecca
Added oversubscribe flag
max-models Jul 23, 2026
420d008
Only run PR - test Struphy in container with fortran
max-models Jul 23, 2026
d77c16d
Merge branch '69-error-failed-building-wheel-for-petsc4py' into updat…
max-models Jul 23, 2026
1f3b33e
Fix mpi_tester.py path
max-models Jul 23, 2026
86ac35b
Merge branch 'devel-tiny' into update-from-upstream-20260723
max-models Jul 24, 2026
add3db8
parallel --> mpi
max-models Jul 24, 2026
be23b26
Fixed custom pytest markers
max-models Jul 24, 2026
ccf4524
Skip sympde tests
max-models Jul 24, 2026
fd95ddc
Register marks in conftest
max-models Jul 24, 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
35 changes: 35 additions & 0 deletions .github/actions/install_h5py/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: 'Parallel h5py installation'
description: 'Install h5py in parallel mode using the system MPI and HDF5 libraries'

runs:
using: "composite"
steps:

- name: Determine directory of parallel HDF5 library
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
HDF5_DIR=$(dpkg -L libhdf5-openmpi-dev | grep libhdf5.so | xargs dirname)
elif [[ "$RUNNER_OS" == "macOS" ]]; then
HDF5_DIR=$(brew list hdf5-mpi | grep "libhdf5.dylib" | xargs dirname | xargs dirname)
fi
echo $HDF5_DIR
echo "HDF5_DIR=$HDF5_DIR" >> $GITHUB_ENV

- name: Install h5py in parallel mode
shell: bash
run: |
export CC="mpicc"
export HDF5_MPI="ON"
pip install h5py --no-cache-dir --no-binary h5py
pip list

- name: Check parallel h5py installation
shell: bash
run: |
python -c "
from mpi4py import MPI
import h5py
# This particular instantiation of h5py.File will fail if parallel h5py isn't installed
f = h5py.File('parallel_test.hdf5', 'w', driver='mpio', comm=MPI.COMM_WORLD)
print(f)"
54 changes: 54 additions & 0 deletions .github/actions/install_petsc4py/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: 'Install PETSc and petsc4py'
description: 'Install PETSc and petsc4py with complex support'

runs:
using: "composite"
steps:

- name: Cache PETSc
uses: actions/cache@v4
id: cache-petsc
env:
cache-name: cache-PETSc
with:
path: "./petsc"
key: petsc-${{ matrix.os }}-${{ matrix.python-version }}

- if: steps.cache-petsc.outputs.cache-hit != 'true'
name: Download a specific release of PETSc
shell: bash
run: |
git clone --depth 1 --branch v3.25.0 https://gitlab.com/petsc/petsc.git
# The branch "release" contains work towards the next version of PETSc,
# and it may not be stable. If necessary, it can be cloned as follows:
# git clone --depth 1 --branch release https://gitlab.com/petsc/petsc.git

- if: steps.cache-petsc.outputs.cache-hit != 'true'
name: Install PETSc with complex support
shell: bash
working-directory: ./petsc
run: |
export PETSC_DIR=$(pwd)
export PETSC_ARCH=petsc-cmplx
./configure --with-scalar-type=complex --with-fortran-bindings=0 --have-numpy=1
make all
echo "PETSC_DIR=$PETSC_DIR" > petsc.env
echo "PETSC_ARCH=$PETSC_ARCH" >> petsc.env

# This step is not really necessary and could be combined with PETSc install
# step; however it's good to verify if the cached PETSc installation really works!
- name: Test PETSc installation
shell: bash
working-directory: ./petsc
run: |
source petsc.env
make check
echo "PETSC_DIR=$PETSC_DIR" >> $GITHUB_ENV
echo "PETSC_ARCH=$PETSC_ARCH" >> $GITHUB_ENV

- name: Install petsc4py
shell: bash
working-directory: ./petsc
run: |
pip install wheel Cython numpy
pip install src/binding/petsc4py
24 changes: 24 additions & 0 deletions .github/actions/macos_installations/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: 'MacOS installation commands'
description: 'Install non-Python dependencies on macOS'

runs:
using: "composite"
steps:

- name: Install non-Python dependencies on macOS
run: |
brew install make
brew install open-mpi
brew install hdf5-mpi
brew install libomp
GFORTRAN_HOME=$(which gfortran || true)
echo "GFORTRAN_HOME : $GFORTRAN_HOME"
if [[ ! -f "$GFORTRAN_HOME" ]]; then
gfort=$(find ${PATH//:/\/ } -name 'gfortran-*' -exec basename {} \; | sort | tail -n 1 || true)
echo "Found $gfort"
gfort_path=$(which ${gfort})
folder=$(dirname ${gfort_path})
ln -s ${gfort_path} ${folder}/gfortran
fi
echo "/opt/homebrew/opt/make/libexec/gnubin" >> $GITHUB_PATH
shell: bash
23 changes: 23 additions & 0 deletions .github/actions/ubuntu_installations/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: 'Ubuntu installation commands'
description: 'Install non-Python dependencies on Ubuntu'

runs:
using: "composite"
steps:

- name: Install non-Python dependencies on Ubuntu
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: gfortran openmpi-bin libopenmpi-dev libhdf5-openmpi-dev
version: 1.0
execute_install_scripts: true

# When loading cached apt packages, the default MPI compiler isn't set.
# Workaround is to 'reinstall' openmpi-bin, which doesn't actually perform
# installation (since openmpi-bin already exists), but instead reruns
# `update-alternatives` which fixes the symlinks to mpicc/mpif90.
- name: Reconfigure non-Python dependencies on Ubuntu
run: |
sudo apt-get update
sudo apt-get install --reinstall openmpi-bin libhdf5-openmpi-dev liblapack-dev libblas-dev
shell: bash
131 changes: 131 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: Deploy new version to PyPI

on:
workflow_run:
workflows: ["Unit tests"]
branches: [main]
types:
- completed

jobs:
deployVersion:
runs-on: ubuntu-latest
if: ${{ github.repository == 'pyccel/psydac' && github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Checkout repository
uses: actions/checkout@v6
with:
ref: main
submodules: true

- name: Install dependencies
uses: ./.github/actions/ubuntu_installations

- name: Update build tools
run: |
pip install --upgrade pip
pip install --upgrade build
pip install --upgrade twine

- name: Build and deploy to PyPI
run: |
echo ${{ github.event.workflow_run.head_branch }}
python -m build --sdist
ls dist/*
twine upload --repository pypi dist/* --non-interactive
shell: bash
env:
TWINE_USERNAME: '__token__'
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}

- name: Install psydac package without extra components
run: |
pip install .

- name: "Get tag name"
id: tag_name
run: |
version=$(python -c "from psydac import __version__; print(__version__)")
echo "VERSION=${version}" >> $GITHUB_OUTPUT
echo "TAG_NAME=v${version}" >> $GITHUB_OUTPUT

- name: "Get release notes"
id: release_notes
run: |
echo "## What's Changed" > release_notes.md
START_LINE=$(grep "^## " CHANGELOG.md -n | head -1 | cut -d: -f -1)
END_LINE=$(grep "^## " CHANGELOG.md -n | head -2 | tail -1 | cut -d: -f -1)
START_LINE=$((${START_LINE}+1))
END_LINE=$((${END_LINE}-1))
echo "## What's Changed" > release_notes.md
sed -n ${START_LINE},${END_LINE}p CHANGELOG.md >> release_notes.md

- name: "Get contributors"
run: |
# Get relevant commits
LAST_RELEASE_COMMIT=$(git log -2 --pretty=%H | tail -1)
CURRENT_RELEASE_COMMIT=$(git log -1 --pretty=%H)

# Find any new lines in the AUTHORS file
NEW_CONTRIBUTORS=$(git diff --no-indent-heuristic --unified=0 --no-color ${LAST_RELEASE_COMMIT}..${CURRENT_RELEASE_COMMIT} AUTHORS | { grep "^\+[^+]" || true; } | cut -d ' ' -f 2-)
if [ -n "${NEW_CONTRIBUTORS}" ]
then
# If there are new contributors then add a section with their names
echo "## New Contributors" >> release_notes.md
while IFS= read -r c
do
echo "- ${c}" >> release_notes.md
done <<< "${NEW_CONTRIBUTORS}"
echo "" >> release_notes.md
fi

# Find the PR which created the release
PR_ID=$(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /search/issues?q="${CURRENT_RELEASE_COMMIT}" | jq '.["items"][0]["number"]')
# Extract authors from all commits in the PR
CONTRIBUTORS=$(gh pr view ${PR_ID} --json commits | jq '.["commits"][]["authors"][]["login"]' | tr -d '"' | sort -u)

# Add a hidden section listing the user names of all authors on commits in this release
echo "<details>" >> release_notes.md
echo "" >> release_notes.md
echo "## Contributors" >> release_notes.md
for c in ${CONTRIBUTORS}
do
echo "- @$c" >> release_notes.md
done
echo "" >> release_notes.md
echo "</details>" >> release_notes.md

# Get the full changelog link
PREVIOUS_TAG=$(gh release list --limit 1 --json tagName | jq '.[]["tagName"]' | tr -d '"')

echo "" >> release_notes.md
echo "**Full list of changes**: [${PREVIOUS_TAG}..${tag_name}](https://github.com/pyccel/psydac/compare/${PREVIOUS_TAG}..${tag_name})" >> release_notes.md

shell: bash
env:
GH_TOKEN: ${{ github.token }}
tag_name: ${{ steps.tag_name.outputs.TAG_NAME }}

- name: "Update repo tags"
uses: EndBug/latest-tag@latest
with:
ref: ${{ steps.tag_name.outputs.TAG_NAME }}

- name: "Update releases"
run: |
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/pyccel/psydac/releases \
-f "tag_name=${tag_name}" -f "name=Version ${version}" -F "body=@release_notes.md" -F "draft=false" -F "prerelease=false" -F "generate_release_notes=false"
shell: bash
env:
tag_name: ${{ steps.tag_name.outputs.TAG_NAME }}
version: ${{ steps.tag_name.outputs.VERSION }}
GH_TOKEN: ${{ github.token }}
110 changes: 110 additions & 0 deletions .github/workflows/deploy_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Check deployment of new version to TestPyPI

on:
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
branches: [main]

jobs:
deployTest:
runs-on: ubuntu-latest
if: github.repository == 'pyccel/psydac'
steps:
- id: duplicate_check
uses: fkirc/skip-duplicate-actions@v5
with:
skip_after_successful_duplicate: 'true'
paths: '["psydac/**", "pyproject.toml", ".github/workflows/deploy_check.yml", ".github/actions/**"]'

- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Checkout repository
if: steps.duplicate_check.outputs.should_skip != 'true'
uses: actions/checkout@v4
with:
submodules: true

- name: Install dependencies
if: steps.duplicate_check.outputs.should_skip != 'true'
uses: ./.github/actions/ubuntu_installations

- name: Update build tools
if: steps.duplicate_check.outputs.should_skip != 'true'
run: |
pip install --upgrade pip
pip install --upgrade build
pip install --upgrade twine

- name: Build and deploy to TestPyPI
if: steps.duplicate_check.outputs.should_skip != 'true'
run: |
CURRENT_VERSION=$(grep 'version *= *"\([0-9\.]*\)"' pyproject.toml | grep '[0-9\.]*' -o)
TEST_VERSION=${CURRENT_VERSION}.dev$(date +%Y%m%d%H%M%S)
sed -i.bak "s/\"${CURRENT_VERSION}\"/\"${TEST_VERSION}\"/g" pyproject.toml && rm pyproject.toml.bak
echo "TEST_VERSION=${TEST_VERSION}" >> $GITHUB_ENV
# Setup dummy user to save temp version for meson
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git commit -m "Save temp version" pyproject.toml
python -m build --sdist
ls dist/*
twine check --strict dist/*
twine upload --repository testpypi dist/* --non-interactive --verbose
sleep 60
shell: bash
env:
TWINE_USERNAME: '__token__'
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}

- name: Install h5py in parallel mode
if: steps.duplicate_check.outputs.should_skip != 'true'
uses: ./.github/actions/parallel_h5py

- name: Download psydac package from TestPyPI and install it
if: steps.duplicate_check.outputs.should_skip != 'true'
timeout-minutes: 60
run: |
WAIT=20
SUCCESS=0
for i in {1..5}; do
echo "Attempt $i: Installing psydac==${TEST_VERSION}..."""
if pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ psydac[test]=="${TEST_VERSION}"
then
SUCCESS=1
break
else
echo "Install failed. Retrying in $WAIT seconds..."
sleep $WAIT
fi
done

# Final check
if [ "$SUCCESS" -ne 1 ]; then
echo "ERROR: Failed to install psydac==${TEST_VERSION}."
exit 1
fi
shell: bash

- name: Initialize test directory
if: steps.duplicate_check.outputs.should_skip != 'true'
run: |
mkdir pytest

- name: Run single-process tests with Pytest
if: steps.duplicate_check.outputs.should_skip != 'true'
working-directory: ./pytest
run: |
psydac test -x

- name: Run MPI tests with Pytest
if: steps.duplicate_check.outputs.should_skip != 'true'
working-directory: ./pytest
run: |
psydac test --mpi -x
2 changes: 1 addition & 1 deletion .github/workflows/test-PR-psydac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
- name: Initialize test directory
run: |
mkdir pytest
cp mpi_tester.py pytest
cp scripts/mpi_tester.py pytest

- name: Run single-process tests with Pytest on Ubuntu
run: |
Expand Down
Loading
Loading