Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14.0-rc.3']
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14.0']

steps:
- uses: actions/checkout@v2
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
- name: Install fabio
run: pip install .
- name: Install documentation dependencies
run: pip install -r requirements.txt
run: pip install -r requirements.txt ci/requirements_rtd.txt
- name: Build doc
env:
READTHEDOCS: "True" # To skip checking that fabio is installed locally
Expand All @@ -85,13 +85,13 @@ jobs:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-24.04
cibw_archs: "auto64"
- os: ubuntu-20.04
- os: ubuntu-24.04
cibw_archs: "aarch64"
- os: ubuntu-20.04
- os: ubuntu-24.04
cibw_archs: "ppc64le"
- os: windows-2019
- os: windows-2022
cibw_archs: "auto64"
- os: macos-13
cibw_archs: "x86_64"
Expand All @@ -111,7 +111,7 @@ jobs:
# Use silx wheelhouse: needed for ppc64le
CIBW_ENVIRONMENT_LINUX: "PIP_FIND_LINKS=https://www.silx.org/pub/wheelhouse/ PIP_TRUSTED_HOST=www.silx.org"
CIBW_BUILD_VERBOSITY: 1
CIBW_BUILD: cp38-* cp39-* cp310-* cp311-* cp312-* cp313-*
CIBW_BUILD: cp310-* cp311-* cp312-* cp313-* cp314-*
# Do not build for pypy and muslinux
CIBW_SKIP: pp* *-musllinux_*
CIBW_ARCHS: ${{ matrix.cibw_archs }}
Expand Down
16 changes: 15 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,25 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-toml
- id: check-added-large-files

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.14.1
hooks:
# Run the linter.
- id: ruff-check
types_or: [ python, pyi ]
args: [ --fix ]
files: ^src/
# Run the formatter.
#- id: ruff-format
# types_or: [ python, pyi ]
15 changes: 11 additions & 4 deletions ci/appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,28 @@ environment:
# PYTHON_ARCH: "64"

# Python 3.9
- PYTHON_DIR: "C:\\Python39-x64"
PYTHON_ARCH: "64"
#- PYTHON_DIR: "C:\\Python39-x64"
# PYTHON_ARCH: "64"

# Python 3.10
- PYTHON_DIR: "C:\\Python310-x64"
PYTHON_ARCH: "64"

# Python 3.11
- PYTHON_DIR: "C:\\Python311-x64"
PYTHON_ARCH: "64"
#- PYTHON_DIR: "C:\\Python311-x64"
# PYTHON_ARCH: "64"

# Python 3.12
- PYTHON_DIR: "C:\\Python312-x64"
PYTHON_ARCH: "64"

# Python 3.13
- PYTHON_DIR: "C:\\Python313-x64"
PYTHON_ARCH: "64"

# Python 3.14
#- PYTHON_DIR: "C:\\Python314-x64"
# PYTHON_ARCH: "64"

install:
# Add Python to PATH
Expand Down
3 changes: 2 additions & 1 deletion ci/requirements_rtd.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
numpy; python_version>= '3.6'
numpy
h5py
sphinx
cython
sphinxcontrib-programoutput
nbsphinx
lxml>=4.6.3
pillow
pydata-sphinx-theme
3 changes: 2 additions & 1 deletion doc/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import sys
import os

on_rtd = os.environ.get('READTHEDOCS') == 'True'
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
Expand Down Expand Up @@ -125,7 +126,7 @@

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'sphinx_rtd_theme'
html_theme = "pydata_sphinx_theme"

# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
Expand Down
116 changes: 67 additions & 49 deletions doc/source/coverage.rst
Original file line number Diff line number Diff line change
@@ -1,69 +1,87 @@
Test coverage report for fabio
==============================

Measured on *fabio* version 2024.4.0, 11/04/2024
Measured on *fabio* version 2025.10.0b1, 28/10/2025

.. csv-table:: Test suite coverage
:header: "Name", "Stmts", "Exec", "Cover"
:widths: 35, 8, 8, 8

"GEimage.py", "116", "90", "77.6 %"
"HiPiCimage.py", "61", "54", "88.5 %"
"OXDimage.py", "352", "325", "92.3 %"
"GEimage.py", "115", "89", "77.4 %"
"HiPiCimage.py", "60", "53", "88.3 %"
"OXDimage.py", "351", "324", "92.3 %"
"TiffIO.py", "781", "643", "82.3 %"
"__init__.py", "34", "28", "82.4 %"
"adscimage.py", "4", "4", "100.0 %"
"binaryimage.py", "60", "44", "73.3 %"
"bruker100image.py", "286", "243", "85.0 %"
"__init__.py", "33", "27", "81.8 %"
"adscimage.py", "3", "3", "100.0 %"
"binaryimage.py", "61", "43", "70.5 %"
"bruker100image.py", "285", "242", "84.9 %"
"brukerimage.py", "203", "169", "83.3 %"
"cbfimage.py", "641", "422", "65.8 %"
"converters.py", "17", "14", "82.4 %"
"cbfimage.py", "644", "423", "65.7 %"
"converters.py", "16", "13", "81.2 %"
"datIO.py", "30", "7", "23.3 %"
"directories.py", "22", "17", "77.3 %"
"dm3image.py", "153", "144", "94.1 %"
"dtrekimage.py", "170", "141", "82.9 %"
"edfimage.py", "916", "703", "76.7 %"
"eigerimage.py", "194", "139", "71.6 %"
"dtrekimage.py", "169", "140", "82.8 %"
"edfimage.py", "920", "725", "78.8 %"
"eigerimage.py", "195", "139", "71.3 %"
"esperantoimage.py", "158", "137", "86.7 %"
"fabioformats.py", "90", "65", "72.2 %"
"fabioimage.py", "468", "387", "82.7 %"
"fabioutils.py", "392", "312", "79.6 %"
"file_series.py", "370", "280", "75.7 %"
"fit2dimage.py", "91", "76", "83.5 %"
"fit2dmaskimage.py", "79", "75", "94.9 %"
"fit2dspreadsheetimage.py", "47", "40", "85.1 %"
"hdf5image.py", "98", "67", "68.4 %"
"jpeg2kimage.py", "82", "74", "90.2 %"
"jpegimage.py", "47", "45", "95.7 %"
"kcdimage.py", "107", "76", "71.0 %"
"limaimage.py", "180", "151", "83.9 %"
"mar345image.py", "271", "251", "92.6 %"
"marccdimage.py", "66", "58", "87.9 %"
"mpaimage.py", "56", "51", "91.1 %"
"mrcimage.py", "85", "65", "76.5 %"
"nexus.py", "233", "130", "55.8 %"
"numpyimage.py", "77", "53", "68.8 %"
"openimage.py", "130", "112", "86.2 %"
"fabioformats.py", "88", "65", "73.9 %"
"fabioimage.py", "469", "387", "82.5 %"
"fabioutils.py", "391", "311", "79.5 %"
"file_series.py", "369", "279", "75.6 %"
"fit2dimage.py", "90", "75", "83.3 %"
"fit2dmaskimage.py", "78", "73", "93.6 %"
"fit2dspreadsheetimage.py", "46", "39", "84.8 %"
"hdf5image.py", "97", "66", "68.0 %"
"jpeg2kimage.py", "83", "71", "85.5 %"
"jpegimage.py", "46", "44", "95.7 %"
"kcdimage.py", "106", "75", "70.8 %"
"lambdaimage.py", "146", "115", "78.8 %"
"limaimage.py", "179", "150", "83.8 %"
"mar345image.py", "270", "250", "92.6 %"
"marccdimage.py", "65", "57", "87.7 %"
"mpaimage.py", "55", "50", "90.9 %"
"mrcimage.py", "84", "64", "76.2 %"
"nexus.py", "231", "128", "55.4 %"
"numpyimage.py", "76", "52", "68.4 %"
"openimage.py", "132", "113", "85.6 %"
"pilatusimage.py", "43", "38", "88.4 %"
"pixiimage.py", "107", "91", "85.0 %"
"pnmimage.py", "137", "86", "62.8 %"
"raxisimage.py", "103", "91", "88.3 %"
"sparseimage.py", "146", "97", "66.4 %"
"speimage.py", "162", "157", "96.9 %"
"tifimage.py", "128", "121", "94.5 %"
"version.py", "40", "35", "87.5 %"
"xcaliburimage.py", "586", "462", "78.8 %"
"xsdimage.py", "94", "70", "74.5 %"
"pixiimage.py", "106", "90", "84.9 %"
"pnmimage.py", "136", "85", "62.5 %"
"raxisimage.py", "102", "90", "88.2 %"
"sparseimage.py", "155", "105", "67.7 %"
"speimage.py", "161", "156", "96.9 %"
"templateimage.py", "24", "16", "66.7 %"
"tifimage.py", "127", "120", "94.5 %"
"version.py", "39", "38", "97.4 %"
"xcaliburimage.py", "584", "460", "78.8 %"
"xsdimage.py", "93", "69", "74.2 %"
"app/__init__.py", "0", "0", "0.0 %"
"app/convert.py", "204", "28", "13.7 %"
"app/convert.py", "203", "27", "13.3 %"
"app/densify.py", "178", "36", "20.2 %"
"app/eiger2cbf.py", "303", "36", "11.9 %"
"app/eiger2crysalis.py", "370", "41", "11.1 %"
"app/hdf2neggia.py", "201", "32", "15.9 %"
"app/viewer.py", "1099", "71", "6.5 %"
"benchmark/__init__.py", "30", "15", "50.0 %"
"compression/__init__.py", "1", "1", "100.0 %"
"compression/agi_bitfield.py", "171", "148", "86.5 %"
"compression/compression.py", "245", "188", "76.7 %"
"compression/compression.py", "244", "187", "76.6 %"
"ext/__init__.py", "0", "0", "0.0 %"
"test/__init__.py", "22", "15", "68.2 %"
"test/codecs/__init__.py", "87", "81", "93.1 %"
"qt/__init__.py", "4", "3", "75.0 %"
"qt/_pyqt6.py", "30", "9", "30.0 %"
"qt/_pyside_dynamic.py", "75", "5", "6.7 %"
"qt/_qt.py", "144", "54", "37.5 %"
"qt/_utils.py", "21", "9", "42.9 %"
"qt/inspect.py", "25", "11", "44.0 %"
"qt/matplotlib.py", "65", "24", "36.9 %"
"test/__init__.py", "19", "12", "63.2 %"
"test/profile_all.py", "41", "23", "56.1 %"
"test/codecs/__init__.py", "86", "80", "93.0 %"
"utils/ExternalResources.py", "181", "134", "74.0 %"
"utils/__init__.py", "0", "0", "0.0 %"
"utils/cli.py", "60", "48", "80.0 %"
"utils/deprecation.py", "67", "63", "94.0 %"
"utils/pilutils.py", "49", "39", "79.6 %"
"utils/cli.py", "59", "47", "79.7 %"
"utils/deprecation.py", "66", "62", "93.9 %"
"utils/pilutils.py", "48", "38", "79.2 %"

"fabio total", "9748", "7661", "78.6 %"
"fabio total", "12534", "8174", "65.2 %"
8 changes: 7 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,19 @@ if meson.backend() != 'ninja'
error('Ninja backend required')
endif

# C-compiler
cc = meson.get_compiler('c')
cy = meson.get_compiler('cython')
m_dep = cc.find_library('m', required : false)
if m_dep.found()
add_project_link_arguments('-lm', language : 'c')
endif

# Cython compiler
cy = meson.get_compiler('cython')
if cy.version().version_compare('>=3.1.0')
add_project_arguments('-Xfreethreading_compatible=true', language : 'cython')
endif

# https://mesonbuild.com/Python-module.html
py_mod = import('python')
py = py_mod.find_installation()
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ requires = [
"tomli>=1.0.0; python_version < '3.11'"
]
[project.optional-dependencies]
gui = [ "pyqt5", "matplotlib" ]
all = ["pyqt5", "matplotlib"]
gui = [ "pyside6", "matplotlib", "packaging" ]
all = [ "pyside6", "matplotlib", "packaging" ]

[project.urls]
homepage = 'http://www.silx.org'
Expand Down
Loading
Loading