From 95cdb654ffb02bc20c68674b5d2cfcd774074d28 Mon Sep 17 00:00:00 2001 From: Olivier Hoenen Date: Wed, 19 Nov 2025 22:22:40 +0100 Subject: [PATCH 01/44] Add contributing guidelines --- CODE_OF_CONDUCT.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 40 ++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..df8ba3bd --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,72 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..69e18b1e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,40 @@ +# Contributing guidelines + +We welcome any kind of contribution to `IMAS-Core`, +from a simple comment, a question or even a full fledged pull +request. +Please first make sure you read and follow the +[Code of Conduct](CODE_OF_CONDUCT.md). + +## You think you found a bug in the code, or have a question in its use +1. use the [issue search](https://github.com/iterorganization/IMAS-Core/issues) +to check if someone already created a similar issue; +2. if not, make a **new issue** to describe your problem or question. +In the case of a bug suspiscion, please try to give all the relevant +information to allow reproducing the error or identifying +its root cause (version of the IMAS-Core, OS and relevant +dependencies, snippet of code); +3. apply relevant labels to the issue. + +## You want to make or ask some change to the code +1. use the [issue search](https://github.com/iterorganization/IMAS-Core/issues) +to check if someone already proposed a similar idea/change; +2. if not, create a **new issue** to describe what change you would like to see +implemented and specify it if you intend to work on it yourself or if some help +will be needed; +3. wait until some kind of consensus is reached about your idea being relevant, +at which time the issue will be assigned (to you or someone else who can work on +this topic); +4. if you do the development yourself, fork the repository to your own Github +profile and create your own feature branch off of the latest develop commit. +Make sure to regularly sync your branch with the latest commits from `develop` +(find instructions +[here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork)); +5. when your development is ready, create a pull request (find instructions +[here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)). + + +While we will try to answer questions quickly and to address issues in a timely +manner, it can may sometimes take longer than expected. A friendly ping in the +discussion or the issue thread can help draw attention if you find that it was +stalled. From dcdfb6c4bf24c1c73925527911c325f982a66bfc Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 11:27:07 +0100 Subject: [PATCH 02/44] better discovery for IDSDef.xml/data-dictionary.xml based on IMAS_PREFIX, remove unused IMAS_VERSION check --- common/cmake/ALBuildDataDictionary.cmake | 45 +++++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/common/cmake/ALBuildDataDictionary.cmake b/common/cmake/ALBuildDataDictionary.cmake index 79778a60..68ee2679 100644 --- a/common/cmake/ALBuildDataDictionary.cmake +++ b/common/cmake/ALBuildDataDictionary.cmake @@ -20,21 +20,56 @@ endif() if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) # The DD easybuild module should be loaded, use that module: - if( "$ENV{IMAS_PREFIX}" STREQUAL "" OR "$ENV{IMAS_VERSION}" STREQUAL "" ) + if( "$ENV{IMAS_PREFIX}" STREQUAL "" ) message( FATAL_ERROR - "Environment variables IMAS_PREFIX ('$ENV{IMAS_PREFIX}') or " - "IMAS_VERSION ('$ENV{IMAS_VERSION}') not set." + "Environment variable IMAS_PREFIX ('$ENV{IMAS_PREFIX}') not set." ) endif() # Populate IDSDEF filename + # Try 1: Direct include/ set( IDSDEF "$ENV{IMAS_PREFIX}/include/IDSDef.xml" ) + + # Try 2: Subdirectory dd_*/ + if( NOT EXISTS "${IDSDEF}" ) + file( GLOB _DD_DIR "$ENV{IMAS_PREFIX}/dd_*" ) + if( _DD_DIR ) + set( IDSDEF "${_DD_DIR}/include/IDSDef.xml" ) + endif() + unset( _DD_DIR ) + endif() + + # Try 3: Python package location if( NOT EXISTS "${IDSDEF}" ) - message( FATAL_ERROR "Could not find IDSDef.xml at '${IDSDEF}'." ) + file( GLOB _DD_SEARCH_PATHS "$ENV{IMAS_PREFIX}/lib/python*/site-packages/imas_data_dictionary/resources/schemas/data_dictionary.xml" ) + if( _DD_SEARCH_PATHS ) + list( GET _DD_SEARCH_PATHS 0 IDSDEF ) + endif() + unset( _DD_SEARCH_PATHS ) endif() - # Populate identifier source xmls + # Check if we found anything + if( NOT EXISTS "${IDSDEF}" ) + message( FATAL_ERROR "Could not find IDSDef.xml or data_dictionary.xml at '$ENV{IMAS_PREFIX}'." ) + endif() + + # Populate identifier source xmls - try multiple locations + # Try 1: Direct include/ directory file( GLOB DD_IDENTIFIER_FILES "$ENV{IMAS_PREFIX}/include/*/*_identifier.xml" ) + + # Try 2: Subdirectory dd_*/ + if( NOT DD_IDENTIFIER_FILES ) + file( GLOB _DD_DIR "$ENV{IMAS_PREFIX}/dd_*" ) + if( _DD_DIR ) + file( GLOB DD_IDENTIFIER_FILES "${_DD_DIR}/include/*/*_identifier.xml" ) + endif() + unset( _DD_DIR ) + endif() + + # Try 3: Python package location + if( NOT DD_IDENTIFIER_FILES ) + file( GLOB DD_IDENTIFIER_FILES "$ENV{IMAS_PREFIX}/lib/python*/site-packages/imas_data_dictionary/resources/schemas/*_identifier.xml" ) + endif() else() # Build the DD from source: include(FetchContent) From 8bee91bbe3f50c921bdbfd9e47a46bf194ae09de Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 13:32:08 +0100 Subject: [PATCH 03/44] filter pattern based on the platform --- python/CMakeLists.txt | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 5c922a10..0f213273 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -17,6 +17,27 @@ if(DEFINED ENV{LD_LIBRARY_PATH}) else() set(LIBRARY_DIRS) endif() + +# Build POST_EXCLUDE_REGEXES list based on platform +set(POST_EXCLUDE_PATTERNS + ".*system32/.*\\.dll" # Windows system DLLs + "^/(lib|usr/lib|usr/local/lib)" # Unix system libraries + "iccifort/.*/lib/intel64/lib" # Redundant iccifort +) + +# Add Linux-specific exclusions +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + list(APPEND POST_EXCLUDE_PATTERNS + ".*/imkl/.*/compiler/.*/linux/compiler/lib" # Intel MKL compiler libraries + ".*/intel-compilers/.*/compiler/.*/linux/compiler/lib" # Intel compilers libraries + "^libomp\\.so" # OpenMP libraries + "^libsvml\\.so" # Intel SVML math library + "^libirng\\.so" # Intel RNG library + "^libintlc\\.so" # Intel intlc library + "^libimf\\.so" # Intel IMF library (math functions) + ) +endif() + install( TARGETS al DESTINATION imas_core.libs @@ -25,16 +46,6 @@ install( PRE_EXCLUDE_REGEXES "api-ms-" # VC Redistibutable DLLs "ext-ms-" # Windows extension DLLs - POST_EXCLUDE_REGEXES - ".*system32/.*\\.dll" # Windows system DLLs - "^/(lib|usr/lib|usr/local/lib)" # Unix system libraries - "iccifort/.*/lib/intel64/lib" # Redundant iccifort - ".*/imkl/.*/compiler/.*/linux/compiler/lib" # Intel MKL compiler libraries - ".*/intel-compilers/.*/compiler/.*/linux/compiler/lib" # Intel compilers libraries - "^libomp\\.so" # OpenMP libraries - "^libsvml\\.so" # Intel SVML math library - "^libirng\\.so" # Intel RNG library - "^libintlc\\.so" # Intel intlc library - "^libimf\\.so" # Intel IMF library (math functions) + POST_EXCLUDE_REGEXES ${POST_EXCLUDE_PATTERNS} ) install(TARGETS _al_lowlevel al_defs DESTINATION imas_core) \ No newline at end of file From 0d68b8c83fb64104eec9481ce092570f33c43fc0 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 13:46:35 +0100 Subject: [PATCH 04/44] do not link stdc++fs on windows --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b8aff2b..8bee58df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,7 +133,10 @@ add_subdirectory(src) set( EXE_FLAG ) set( EXE_EXT ) add_executable( imas_print_version ${EXE_FLAG} tests/imas_print_version.cpp ) -target_link_libraries( imas_print_version PRIVATE al stdc++fs ) +target_link_libraries( imas_print_version PRIVATE al ) +if(NOT WIN32) + target_link_libraries( imas_print_version PRIVATE stdc++fs ) +endif() add_dependencies( imas_print_version al ) # Install From 174c4a341f978bfd7826e5c2b4ff466d835e8e3f Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 14:04:03 +0100 Subject: [PATCH 05/44] Add APPLE to not to link stdc++fs --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bee58df..35d3197e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,7 +134,10 @@ set( EXE_FLAG ) set( EXE_EXT ) add_executable( imas_print_version ${EXE_FLAG} tests/imas_print_version.cpp ) target_link_libraries( imas_print_version PRIVATE al ) -if(NOT WIN32) +if(NOT WIN32 AND NOT APPLE) + # stdc++fs is only needed on Linux with older GCC + # On macOS, filesystem is part of libc++ + # On Windows, filesystem is part of the standard library target_link_libraries( imas_print_version PRIVATE stdc++fs ) endif() add_dependencies( imas_print_version al ) From 43613fd6b5c3701e62b8cddc317fee1e8d3e6bf5 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 15:39:47 +0100 Subject: [PATCH 06/44] use idsinfo command from data-dictionary module --- common/cmake/ALBuildDataDictionary.cmake | 72 ++++++++++-------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/common/cmake/ALBuildDataDictionary.cmake b/common/cmake/ALBuildDataDictionary.cmake index 68ee2679..ffc6bdac 100644 --- a/common/cmake/ALBuildDataDictionary.cmake +++ b/common/cmake/ALBuildDataDictionary.cmake @@ -20,56 +20,42 @@ endif() if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) # The DD easybuild module should be loaded, use that module: - if( "$ENV{IMAS_PREFIX}" STREQUAL "" ) - message( FATAL_ERROR - "Environment variable IMAS_PREFIX ('$ENV{IMAS_PREFIX}') not set." - ) - endif() - - # Populate IDSDEF filename - # Try 1: Direct include/ - set( IDSDEF "$ENV{IMAS_PREFIX}/include/IDSDef.xml" ) + # Use idsinfo idspath command to get the path to IDSDef.xml or data_dictionary.xml + execute_process( + COMMAND idsinfo idspath + OUTPUT_VARIABLE IDSDEF + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _IDSINFO_EXITCODE + ) - # Try 2: Subdirectory dd_*/ - if( NOT EXISTS "${IDSDEF}" ) - file( GLOB _DD_DIR "$ENV{IMAS_PREFIX}/dd_*" ) - if( _DD_DIR ) - set( IDSDEF "${_DD_DIR}/include/IDSDef.xml" ) - endif() - unset( _DD_DIR ) + if( _IDSINFO_EXITCODE ) + message( FATAL_ERROR + "Failed to run 'idsinfo idspath' command. " + "Please ensure IMAS-Data-Dictionary module is loaded." + ) endif() - # Try 3: Python package location if( NOT EXISTS "${IDSDEF}" ) - file( GLOB _DD_SEARCH_PATHS "$ENV{IMAS_PREFIX}/lib/python*/site-packages/imas_data_dictionary/resources/schemas/data_dictionary.xml" ) - if( _DD_SEARCH_PATHS ) - list( GET _DD_SEARCH_PATHS 0 IDSDEF ) - endif() - unset( _DD_SEARCH_PATHS ) - endif() - - # Check if we found anything - if( NOT EXISTS "${IDSDEF}" ) - message( FATAL_ERROR "Could not find IDSDef.xml or data_dictionary.xml at '$ENV{IMAS_PREFIX}'." ) + message( FATAL_ERROR + "idsinfo idspath returned '${IDSDEF}' but file does not exist. " + "Please ensure IMAS-Data-Dictionary module is properly loaded." + ) endif() - - # Populate identifier source xmls - try multiple locations - # Try 1: Direct include/ directory - file( GLOB DD_IDENTIFIER_FILES "$ENV{IMAS_PREFIX}/include/*/*_identifier.xml" ) - # Try 2: Subdirectory dd_*/ - if( NOT DD_IDENTIFIER_FILES ) - file( GLOB _DD_DIR "$ENV{IMAS_PREFIX}/dd_*" ) - if( _DD_DIR ) - file( GLOB DD_IDENTIFIER_FILES "${_DD_DIR}/include/*/*_identifier.xml" ) - endif() - unset( _DD_DIR ) - endif() + message( STATUS "Found Data Dictionary: ${IDSDEF}" ) + + # Populate identifier source xmls based on the IDSDEF location + get_filename_component( DD_BASE_DIR "${IDSDEF}" DIRECTORY ) + # For dd_x.y.z layout: identifiers are in ../identifiers/*_identifier.xml + get_filename_component( DD_PARENT_DIR "${DD_BASE_DIR}" DIRECTORY ) + file( GLOB DD_IDENTIFIER_FILES + "${DD_PARENT_DIR}/identifiers/*_identifier.xml" + "${DD_PARENT_DIR}/include/*/*_identifier.xml" + "${DD_BASE_DIR}/*_identifier.xml" + ) - # Try 3: Python package location - if( NOT DD_IDENTIFIER_FILES ) - file( GLOB DD_IDENTIFIER_FILES "$ENV{IMAS_PREFIX}/lib/python*/site-packages/imas_data_dictionary/resources/schemas/*_identifier.xml" ) - endif() + unset( DD_BASE_DIR ) + unset( DD_PARENT_DIR ) else() # Build the DD from source: include(FetchContent) From 092eaf3ddc791525047009a789f9218e31422f3e Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Thu, 27 Nov 2025 23:15:53 +0100 Subject: [PATCH 07/44] corrected logic to find identifiers across different dd versions --- common/cmake/ALBuildDataDictionary.cmake | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/common/cmake/ALBuildDataDictionary.cmake b/common/cmake/ALBuildDataDictionary.cmake index ffc6bdac..6aff7f7a 100644 --- a/common/cmake/ALBuildDataDictionary.cmake +++ b/common/cmake/ALBuildDataDictionary.cmake @@ -44,18 +44,20 @@ if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) message( STATUS "Found Data Dictionary: ${IDSDEF}" ) - # Populate identifier source xmls based on the IDSDEF location + # Populate identifier source xmls based on the IDSDEF location get_filename_component( DD_BASE_DIR "${IDSDEF}" DIRECTORY ) - # For dd_x.y.z layout: identifiers are in ../identifiers/*_identifier.xml - get_filename_component( DD_PARENT_DIR "${DD_BASE_DIR}" DIRECTORY ) - file( GLOB DD_IDENTIFIER_FILES - "${DD_PARENT_DIR}/identifiers/*_identifier.xml" - "${DD_PARENT_DIR}/include/*/*_identifier.xml" - "${DD_BASE_DIR}/*_identifier.xml" - ) - unset( DD_BASE_DIR ) - unset( DD_PARENT_DIR ) + if( DD_BASE_DIR MATCHES "schemas$" ) + # DD 4.1.0+ layout: resources/schemas//*_identifier.xml + file( GLOB DD_IDENTIFIER_FILES "${DD_BASE_DIR}/*/*_identifier.xml" ) + else() + # DD 3.x/4.0.0 layout: dd_x.y.z/include//*_identifier.xml + file( GLOB DD_IDENTIFIER_FILES "${DD_BASE_DIR}/*/*_identifier.xml" ) + endif() + + if( NOT DD_IDENTIFIER_FILES ) + message( WARNING "No identifier XML files found in Data Dictionary at: ${IDSDEF}" ) + endif() else() # Build the DD from source: include(FetchContent) From 955cf0f308c8b40e6444b255610a7ea18a1e6f10 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Wed, 3 Dec 2025 14:19:21 +0100 Subject: [PATCH 08/44] fix mdsplus models building by setting al-core_SOURCE_DIR to point to the root of the repository --- models/mdsplus/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/models/mdsplus/CMakeLists.txt b/models/mdsplus/CMakeLists.txt index 2509d05f..fd24c117 100644 --- a/models/mdsplus/CMakeLists.txt +++ b/models/mdsplus/CMakeLists.txt @@ -9,6 +9,10 @@ set( DD_VERSION "main" CACHE STRING "Data dictionary version (tag or branch name # Load common assets ################################################################################ +# Set al-core_SOURCE_DIR to the root of the repository if not already set +if( NOT DEFINED al-core_SOURCE_DIR ) + set( al-core_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) +endif() add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/../../common" _common ) project( al-models-mdsplus ) From 76e95613270be854acdaae28ce9020412d2fbc71 Mon Sep 17 00:00:00 2001 From: Prasad Date: Fri, 5 Dec 2025 15:33:24 +0100 Subject: [PATCH 09/44] Imas core docs (#5) --- .github/workflows/docs.yml | 91 ++++ .readthedocs.yml | 20 + README.md | 173 ++++++- common/doc_common/plugins.rst | 5 +- docs/Makefile | 130 ++++++ docs/requirements.txt | 5 + docs/source/_static/.gitkeep | 0 docs/source/_static/images/image1.png | Bin 0 -> 131122 bytes docs/source/_static/images/image2.png | Bin 0 -> 123994 bytes docs/source/_static/images/image3.png | Bin 0 -> 88768 bytes docs/source/_static/images/image4.png | Bin 0 -> 37057 bytes docs/source/_static/images/image5.png | Bin 0 -> 66593 bytes docs/source/_static/images/image6.png | Bin 0 -> 67131 bytes docs/source/_static/images/image7.png | Bin 0 -> 98313 bytes docs/source/conf.py | 114 +++++ docs/source/developers/development.rst | 132 ++++++ docs/source/developers/extending/index.rst | 9 + docs/source/developers/index.rst | 10 + .../developers/plugins_architecture.rst | 304 +++++++++++++ docs/source/developers/plugins_framework.rst | 75 ++++ docs/source/faq.rst | 74 +++ docs/source/index.rst | 118 +++++ docs/source/troubleshooting.rst | 53 +++ docs/source/user_guide/backends_guide.rst | 222 +++++++++ docs/source/user_guide/configuration.rst | 138 ++++++ docs/source/user_guide/index.rst | 14 + docs/source/user_guide/installation.rst | 421 ++++++++++++++++++ docs/source/user_guide/uris_guide.rst | 41 ++ 28 files changed, 2138 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .readthedocs.yml create mode 100644 docs/Makefile create mode 100644 docs/requirements.txt create mode 100644 docs/source/_static/.gitkeep create mode 100644 docs/source/_static/images/image1.png create mode 100644 docs/source/_static/images/image2.png create mode 100644 docs/source/_static/images/image3.png create mode 100644 docs/source/_static/images/image4.png create mode 100644 docs/source/_static/images/image5.png create mode 100644 docs/source/_static/images/image6.png create mode 100644 docs/source/_static/images/image7.png create mode 100644 docs/source/conf.py create mode 100644 docs/source/developers/development.rst create mode 100644 docs/source/developers/extending/index.rst create mode 100644 docs/source/developers/index.rst create mode 100644 docs/source/developers/plugins_architecture.rst create mode 100644 docs/source/developers/plugins_framework.rst create mode 100644 docs/source/faq.rst create mode 100644 docs/source/index.rst create mode 100644 docs/source/troubleshooting.rst create mode 100644 docs/source/user_guide/backends_guide.rst create mode 100644 docs/source/user_guide/configuration.rst create mode 100644 docs/source/user_guide/index.rst create mode 100644 docs/source/user_guide/installation.rst create mode 100644 docs/source/user_guide/uris_guide.rst diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..715b12f0 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,91 @@ +name: Build Documentation + +on: + push: + pull_request: + +jobs: + build-docs: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch full history for git describe to work + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + cache: 'pip' + cache-dependency-path: 'docs/requirements.txt' + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y doxygen + continue-on-error: false + + - name: Create virtual environment + run: | + python -m venv docs_venv + . docs_venv/bin/activate + pip install --upgrade pip + + - name: Install documentation dependencies + run: | + . docs_venv/bin/activate + pip install -r docs/requirements.txt + + - name: Display installed packages + run: | + . docs_venv/bin/activate + pip list -v + + - name: Determine version + id: version + run: | + if [ "$(git describe)" = "$(git describe --abbrev=0)" ]; then + # Strip patch version from the release tag, e.g. 5.0.1 -> 5.0 + VERSION=$(git describe | cut -d. -f1-2) + else + VERSION=dev + fi + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + + - name: Build documentation + env: + SPHINXOPTS: '-n --keep-going' + SPHINX_APIDOC_OPTIONS: '--no-warnings' + DOC_VERSION: ${{ steps.version.outputs.VERSION }} + run: | + . docs_venv/bin/activate + make -C docs clean + make -C docs html + continue-on-error: false + + - name: Check documentation warnings + if: success() + run: | + . docs_venv/bin/activate + echo "Documentation built successfully!" + echo "Build location: docs/build/html/" + + - name: Report build failure + if: failure() + run: | + echo "::error::Documentation build failed. Check the logs above for details." + echo "Common issues:" + echo " - Missing dependencies in docs/requirements.txt" + echo " - Sphinx syntax errors in .rst files" + echo " - Doxygen configuration issues" + exit 1 + + - name: Upload documentation artifact + if: always() + uses: actions/upload-artifact@v4 + with: + name: documentation + path: docs/build/html/ + retention-days: 30 diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 00000000..50c7ffd0 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,20 @@ +version: 2 + +build: + os: "ubuntu-22.04" + tools: + python: "3.11" + jobs: + post_checkout: + - git fetch --unshallow || true + +python: + install: + - method: pip + path: . + - requirements: docs/requirements.txt + +sphinx: + builder: html + configuration: docs/source/conf.py + fail_on_warning: false \ No newline at end of file diff --git a/README.md b/README.md index 08a9b28d..4d9d8883 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,168 @@ -# IMAS Access Layer: Lowlevel library +# IMAS-Core -This repository contains the Lowlevel components of the Access Layer: +[![Build Status](https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml)](https://github.com/iterorganization/IMAS-Core/actions) +[![License](https://github.com/iterorganization/IMAS-Core/blob/develop/LICENSE.txt)](LICENSE) -- C lowlevel interface used by the various High Level Interfaces -- Python bindings to the lowlevel interface -- Backends for reading and writing IMAS data -- Logic for creating the models required by the MDS+ backend +**IMAS-Core** is a lowlevel library with Python bindings for reading and writing fusion experiment data in standard IMAS format. + +It provides easy access to data stored in HDF5, MDSplus, and other formats, making it simple to work with fusion physics data across platforms (Linux, macOS, Windows). + +This repository contains the **Lowlevel components of the Access Layer**: + +- **C lowlevel interface** used by the various High Level Interfaces +- **Python bindings** to the lowlevel interface +- **Backends** for reading and writing IMAS data +- **MDS+ model logic** for creating the models required by the MDS+ backend + + + + +## Quick Installation + +Install IMAS-Core with a single command: + +```bash +pip install imas-core +python -c "import imas_core" +``` + +That's it! No need to compile or configure anything. + +## Features + +- ✅ **Easy to Install** - Single `pip install` command +- ✅ **Multiple Formats** - HDF5, MDSplus, UDA, in-memory, and more +- ✅ **Cross-Platform** - Works on Linux, macOS, and Windows +- ✅ **IMAS Standard** - Access standardized fusion data structures +- ✅ **Read & Write** - Both data access and creation supported + +## Installation Options + +### For Python Users (Recommended) + +```bash +# Simple install from PyPI for Python applications +pip install imas-core + +# Verify installation +python -c "import imas; print(imas.__version__)" +``` + + +### For Developers + +See [Building from Source](docs2/source/developers/building_from_source.rst) for detailed build instructions. + +## Using IMAS-Core with High-Level Languages + +When IMAS-Core is built and installed via CMake, it creates a complete runtime environment with: + +- **C/C++ Libraries** (`libal.so`) with full headers +- **Python Bindings** (`imas_core` Python package) +- **Fortran Support** via pkg-config configuration +- **Java Support** via `imas.jar` +- **MATLAB Support** via MEX bindings +- **Models** for MDSplus backend access + +After installation, configure your environment: + +```bash +export PATH="/path/to/install/bin:$PATH" +export LD_LIBRARY_PATH="/path/to/install/lib:$LD_LIBRARY_PATH" +export PKG_CONFIG_PATH="/path/to/install/lib/pkgconfig:$PKG_CONFIG_PATH" +export HDF5_USE_FILE_LOCKING=FALSE +export PYTHONPATH="/path/to/install/lib/pythonX.X/site-packages:$PYTHONPATH" +``` + +Then use IMAS-Core from your preferred language: +- **Python**: `import imas` (see examples above) +- **C/C++**: Link against `libal.so` with provided headers +- **Fortran**: Use pkg-config to get compiler flags +- **Java**: Use `imas.jar` in your classpath +- **MATLAB**: Add MEX directory to MATLAB path + + +## Documentation + +- **[Getting Started](docs2/source/user_guide/quick_start.rst)** - 5-minute quick start +- **[User Guide](docs2/source/user_guide/index.rst)** - Complete user documentation +- **[API Reference](docs2/source/reference/python_api.rst)** - Python API details +- **[Backends](docs2/source/backends/index.rst)** - Available data backends +- **[Tutorials](docs2/source/tutorials/index.rst)** - Practical examples +- **[FAQ](docs2/source/faq.rst)** - Frequently asked questions +- **[Troubleshooting](docs2/source/troubleshooting.rst)** - Common issues & solutions + +## System Requirements + +- **Python**: 3.9 or newer +- **OS**: Linux, macOS, or Windows +- **pip**: 19.0 or newer + +## Available Backends + +IMAS-Core supports multiple data storage formats: + +| Backend | Use Case | Remote | File-based | +|---------|----------|--------|-----------| +| **HDF5** | Default, local storage | No | Yes | +| **MDSplus** | ITER experiments | Yes | No | +| **UDA** | Distributed access | Yes | No | +| **Memory** | Testing, IPC | No | No | +| **FlexBuffers** | Message passing | No | Yes | +| **ASCII** | Debugging | No | Yes | + +## Troubleshooting + +**Can't find file?** +```python +# Check file path +import os +print(os.path.exists('/path/to/file.h5')) +``` + +**Need help?** +- See [Troubleshooting Guide](docs2/source/troubleshooting.rst) +- Check [FAQ](docs2/source/faq.rst) +- Open an [Issue on GitHub](https://github.com/iterorganization/IMAS-Core/issues) + +## What's Included? + +IMAS-Core provides: + +- **Python API** - Full Python bindings with NumPy support +- **Multiple Backends** - HDF5, MDSplus, UDA, and more +- **Data Creation** - Create and populate IMAS IDS structures +- **Data Access** - Read from multiple sources transparently +- **Standard Format** - IMAS standardized data structures + +## For Developers + +To build IMAS-Core from source: + +```bash +git clone https://github.com/iterorganization/IMAS-Core.git +cd IMAS-Core +cmake -Bbuild -GNinja -DAL_PYTHON_BINDINGS=ON -DCMAKE_INSTALL_PREFIX="$(pwd)/test-install +cmake --build build --target install +``` + +See [Developer Guide](docs2/source/developers/index.rst) for detailed instructions. + +## Links + +- **Homepage**: +- **GitHub**: https://github.com/iterorganization/IMAS-Core +- **PyPI**: https://pypi.org/project/imas-core/ +- **Data Dictionary**: https://imas-data-dictionary.readthedocs.io/ +- **Issue Tracker**: https://github.com/iterorganization/IMAS-Core/issues + +## License + +IMAS-Core is released under the [LGPL-3.0 License](LICENSE.txt) + +## Support + +- **Email**: imas-support@iter.org +- **Documentation**: https://imas-core.readthedocs.io/ +- **Issues**: https://github.com/iterorganization/IMAS-Core/issues -Developer guides are included with the [High Level Interface -documentation](https://sharepoint.iter.org/departments/POP/CM/IMDesign/Code%20Documentation/ACCESS-LAYER-doc/cpp/dev/index.html). diff --git a/common/doc_common/plugins.rst b/common/doc_common/plugins.rst index a7f17a24..f7b1acb2 100644 --- a/common/doc_common/plugins.rst +++ b/common/doc_common/plugins.rst @@ -2,15 +2,14 @@ Plugins framework for the IMAS access layer =========================================== - Making a flexible access layer using plugins - -In this document, plugins are C++ software components compiled in separate +Plugins are C++ software components compiled in separate libraries from the Access Layer (AL) library, which make use of them. Using a modified Low Level architecture, we demonstrate that plugins satisfy many use-cases requirements, providing new features available from all existing HLIs. We describe the Access Layer plugins architecture and some plugins examples. + Plugins offer the following advantages: - Developers write plugins in C++ and compile plugins separately from diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..eb4477e1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,130 @@ +# Makefile for Sphinx documentation +# +# You can set these variables from the command line. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +PAPER ?= +BUILDDIR ?= build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a Qt help project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an EPUB file" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfpdf to make LaTeX files and run them through xelatex" + @echo " text to make text files" + @echo " man to make man pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them make info" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to make a link check of the documentation" + @echo " doctest to make doctest files" + @echo " coverage to make a coverage check of the documentation" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo "Build finished. The HTML files are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo "Build finished. The HTML files are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo "Build finished. The HTML files are in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo "Build finished. The pickle files are in $(BUILDDIR)/pickle." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo "Build finished. The HTML files are in $(BUILDDIR)/json." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo "Build finished. The HTML help files are in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo "Build finished. The HTML files are in $(BUILDDIR)/qthelp." + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo "Build finished. The HTML files are in $(BUILDDIR)/devhelp." + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo "Build finished. The HTML files. are in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Build finished. The LaTeX files are in $(BUILDDIR)/latex." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Build finished. The LaTeX files are in $(BUILDDIR)/latex." + @echo "Running LaTeX files through pdflatex..." + cd $(BUILDDIR)/latex && make all-pdf + @echo "pdflatex finished; see $(BUILDDIR)/latex/all-pdf.pdf." + +latexpdfpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Build finished. The LaTeX files are in $(BUILDDIR)/latex." + @echo "Running LaTeX files through xelatex..." + cd $(BUILDDIR)/latex && make all-pdf + @echo "xelatex finished; see $(BUILDDIR)/latex/all-pdf.pdf." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo "Build finished. The HTML files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo "Build finished. The HTML files are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Build finished. The HTML files are in $(BUILDDIR)/texinfo." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + make -C $(BUILDDIR)/texinfo info + @echo "The Texinfo files are in $(BUILDDIR)/texinfo." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo "Link check complete; see $(BUILDDIR)/linkcheck." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Test snippets finished; see $(BUILDDIR)/doctest/_comparison.txt." + +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "The coverage report is in $(BUILDDIR)/coverage/python.txt." + +.PHONY: all $(SPHINXBUILD) diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..e512142f --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,5 @@ +sphinx-immaterial>=0.12.0 +sphinx-tabs>=3.4.0 +sphinx-design>=0.5.0 +sphinx>=5.0 +numpy>=1.20.0 diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/_static/images/image1.png b/docs/source/_static/images/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..d76f03e0b26090f684dc530c274199b27d82fecd GIT binary patch literal 131122 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

wkRjhy`k<+xK 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

%!V(YberqR1*c>_*% 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ℑ-o=-oD~Zfm zm7kmct{Bv1a?}wFV~$ne3$mUqe_Qh2Rlq~eaZ0p{@d{F_%QYS?Kn9K`LI)()8vtQg zC(h^Rk24)AEka6L`{)hV`#5`?=y#cg9hPa}1`*72A)}hPy8YJdGXG3(qwlh0N0T$m zBW>igKAJBq=&7|<-YO^!Dj#*`!T7*^VI^2;E;&gMK7O;%U;2UjQ3K-E{K{3sA+>Aw zNKU@9%FKmVQ zvYCG(Ta#8Qe$*b4m34f4Vpjz_Ff3=kNz4K8aZ~x)Me#U@dQtxNUSH?`kg4Z8Iv!On z-=8RplL3sATarm(9m4?i0a4xrKPoP|u8iT^y*<*0`{Qg!| z7bu^4FyhgSy+Il)?m49Y9xPz1bSpwJFft42ozk#|9R9Mr6jfPHOdZ?gkFP0M7CbG( zWNfd>=>NESF4Nz6$rc~0&qUJ5jVp!rag=}7$Meaeg7I+rTQ^2yDmpil@u+^8_M|B2 z)C@y<#$0JNNNT|Qq-(oT0iQK3$JorN4t@Nz+u7`~kR5Q|yR-XP-}`gRMBESHXE8cD6xnqv$db)X%(NNo@eUtKe2Tq74iBp87wQPx9;(DBa-PVRs&y> z6Al>+%UxM<=oBM+6)%6TEb|;FumN|N+McKr?YA3J?i8APU*VN3A3;P-5a>XihHO`} zqGs7){a%hY`oXX*G)dkl>68^zY+})*S6dL#buEsVfDVp|XbBmB7scyKMg^#7B7~g$ zt+#YI;}{#EKr@WWX-HgAfwy9JlRI?XPl)tS;fPyI)X{ocCu>$E-@-V3Vn?sN(`hn% zp)td+rqaMi zvrkcx4x%wR3{mB?IFUyRQS+K@17sQhFZxmBika`

    -Z(Yc=<7EGoxE)L^WsW%Q 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

    s`&XV| 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 TfcBz{%z1OGGo`1l{q;WpLz*~i literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/image3.png b/docs/source/_static/images/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..51035eddd81e7416c8f3334fda5d89b02e622b18 GIT binary patch literal 88768 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ν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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/image4.png b/docs/source/_static/images/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa3a7faff7053b8e1e91f03885b73c035ff2943 GIT binary patch literal 37057 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 jss9Y+{*SlG1oqslIoFD!2N;M^DsXA3>#F6c+ literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/image5.png b/docs/source/_static/images/image5.png new file mode 100644 index 0000000000000000000000000000000000000000..278f00ab26624871f2112d7e812960585fbe717e GIT binary patch literal 66593 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 o3p>zd;sRNv@g9H*>2X_b(2DcEL!6C>12@F0E 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 PfIk^2`RDo141NC(bU<5Q literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/image7.png b/docs/source/_static/images/image7.png new file mode 100644 index 0000000000000000000000000000000000000000..534b89abf4bdeb123b80684d7faa751f6bc4d1f7 GIT binary patch literal 98313 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�l`XF`=uICiAw<6mA(~SzaOE!r=4J0{MXn({SJ2c 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

    (W*!0(b#un=TI%uM(uMj^(5`Sns- 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 literal 0 HcmV?d00001 diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..adc63c0b --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,114 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +import datetime +import subprocess + +# -- Project information ----------------------------------------------------- +project = 'IMAS-Core' +copyright = f"{datetime.datetime.now().year}, ITER Organization" +author = 'ITER Organization' +release = '1.0.0' + +# Try to get version from git +try: + version = subprocess.check_output(["git", "describe"], stderr=subprocess.DEVNULL).decode().strip() + last_tag = subprocess.check_output(["git", "describe", "--abbrev=0"], stderr=subprocess.DEVNULL).decode().strip() + is_develop = version != last_tag +except (subprocess.CalledProcessError, FileNotFoundError): + version = "dev" + last_tag = "dev" + is_develop = True + +html_context = { + "is_develop": is_develop +} + +language = "en" + +# -- General configuration --------------------------------------------------- +templates_path = ['_templates'] +exclude_patterns = [] + +# Static files and assets +html_static_path = ["_static"] + +# -- RST snippets to include in every page ----------------------------------- +rst_epilog = """\ +.. |DD| replace:: `IMAS Data Dictionary`_ +.. _`IMAS Data Dictionary`: https://imas-data-dictionary.readthedocs.io/en/latest/ +""" + +# -- Options for HTML output ------------------------------------------------- +extensions = [ + "sphinx_immaterial", + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + "sphinx_tabs.tabs", + "sphinx_design", +] + +html_theme = "sphinx_immaterial" + +# HTML static files path (already defined above in Static files and assets section) +# html_static_path = ["_static"] # Moved to General configuration section + +html_theme_options = { + "repo_url": "https://github.com/iterorganization/IMAS-Core", + "repo_name": "IMAS-Core", + "icon": { + "repo": "fontawesome/brands/github", + }, + "features": [ + "navigation.sections", + "navigation.instant", + "navigation.top", + "toc.follow", + "toc.sticky", + "announce.dismiss", + 'globaltoc_collapse', + ], + "palette": [ + { + "media": "(prefers-color-scheme: light)", + "scheme": "default", + "primary": "indigo", + "accent": "green", + "toggle": { + "icon": "material/lightbulb-outline", + "name": "Switch to dark mode", + }, + }, + { + "media": "(prefers-color-scheme: dark)", + "scheme": "slate", + "primary": "light-blue", + "accent": "lime", + "toggle": { + "icon": "material/lightbulb", + "name": "Switch to light mode", + }, + }, + ], +} + +object_description_options = [ + (".*", dict(include_fields_in_toc=False)), + (".*parameter", dict(include_in_toc=False)), +] + +sphinx_immaterial_generate_extra_admonitions = True +sphinx_immaterial_custom_admonitions = [ + { + "name": "output", + "color": (245, 98, 245), + "icon": "fontawesome/solid/terminal", + }, + { + "name": "installation", + "color": (51, 153, 255), + "icon": "fontawesome/solid/download", + }, +] diff --git a/docs/source/developers/development.rst b/docs/source/developers/development.rst new file mode 100644 index 00000000..f49d42f0 --- /dev/null +++ b/docs/source/developers/development.rst @@ -0,0 +1,132 @@ +Development guide +================= + + +IMAS access layer repositories +------------------------------ + +The IMAS access layer consists of a number of components which are developed in separate +repositories: + +- `IMAS-Core `__: the + IMAS core repository, MDSplus model generator and Python lowlevel + bindings. + +Dependencies: + +- `data-dictionary + `__: the IMAS Data + Dictionary definitions, used for generating MDSplus models and end-user APIs in + Fortran, C++, Java and Matlab. + +The documentation on this page covers IMAS-Core build and installation. + + +Development environment +----------------------- +See the :ref:`user build prerequisites` section in the :doc:`../user_guide/installation` guide for an overview of modules you need to load +when on SDCC or packages to install when using Ubuntu 22.04. + + +Architecture +------------ + +`Figure 1`_ depicts the layered AL architecture model. It comprises +the upper end-user APIs in Fortran, C++, Java and Matlab and the so-called Low Level (LL), +which receiveens-user APIs requests. The LL includes a C layer with C functions +(wrappers) for calling the functions of the (C++) LL API located in the +C++ layer of the LL. + +.. figure:: ../_static/images/image1.png + :name: Figure 1 + + **Figure 1:** Layered AL architecture model + +When calling an AL API function (``get()``/``get_slice()``, ``put()``/``put_slice()``), +theens-user API iterates over all nodes of the IDS where each visited node is +either a scalar, or an array (with dimensions from 1 to 6) or an array +of structures. + +Distinguishing Read and Write operations, we have two use-cases: + +- When calling ``get()``/``get_slice()``, theens-user API calls the LL for each visited + node, passing the data contained in the node (scalar or array), the + parameters which define the dimension(s), the shape(s) of the data + and the identifier (path) of the node. Then the LL calls the backend, + which returns the data to the LL, which in turn returns the data + (allocated pointers) to theens-user API. + +- When calling ``put()``/``put_slice()``, theens-user API calls the LL for each node, + passing a pointer to the data to be written, the parameters which + define the dimension(s), the shape(s) of the data and the identifier + (path) of the node. Then the LL calls the backend, which writes the + data to some storage. + + +Tests +----- + +You will find tests in the `tests` directory. The tests are written to test diiferent backends like MDSPLUS, HDF5, ASCII, Memory and UDA. +It writes and reads data from the backends and checks if the data is written and read correctly. + + +CMake +----- + +We're using CMake for the build configuration. See `the CMake documentation +`__ for more details about CMake. + +The ``FetchContent`` CMake module for making dependencies from other repositories +available. For more information on this module we refer to the +`FetchContent CMake documentation +`__ + + +Documentation overview +---------------------- + +The documentation is generated with Sphinx which you can find in `docs` directory. +Code documentation is generated using doxygen and configured in Makefile of Sphinx. +For more information on Sphinx, see the `Sphinx docs +`__ and the `documentation of the theme +(sphinx-immaterial) that we're using +`__. + +``docs`` folder contains the configuration (``conf.py``), and documentation pages (``*.rst``). + + +Building the documentation +'''''''''''''''''''''''''' + +For building documentation, you need to have the following dependencies installed: +- Python +- Doxygen + +.. code-block:: console + :caption: Example: building the documentation for the Pythonens-user API + + $cd IMAS-Core + # Create and activate a venv + rm -rf docs_venv + python -m venv docs_venv + . docs_venv/bin/activate + + # Install dependencies + pip install --upgrade pip + pip install -r docs/requirements.txt + + export SPHINXOPTS='-n --keep-going' + + make -C docs html + + +Publish IMAS-Core on pypi +------------------------- + +We are using Github Actions to publish the IMAS-Core package on pypi. The configuration is in ``.github/workflows/pypi.yml``. + + +Documentation Github Actions: + +Documentation is built using Github Actions. The configuration is in ``.github/workflows/docs.yml``. +We are using readthedocs for the documentation. The documentation is built on every push to the main branch. diff --git a/docs/source/developers/extending/index.rst b/docs/source/developers/extending/index.rst new file mode 100644 index 00000000..08e5bdf6 --- /dev/null +++ b/docs/source/developers/extending/index.rst @@ -0,0 +1,9 @@ +Extending IMAS-Core +=================== + +.. toctree:: + :maxdepth: 2 + + ../development.rst + ../plugins_framework.rst + ../plugins_architecture.rst diff --git a/docs/source/developers/index.rst b/docs/source/developers/index.rst new file mode 100644 index 00000000..b66705cc --- /dev/null +++ b/docs/source/developers/index.rst @@ -0,0 +1,10 @@ +Developer Guide +=============== + +This guide is for developers who want to build IMAS-Core from source, contribute code, +or extend its functionality. + +.. toctree:: + :maxdepth: 2 + + extending/index diff --git a/docs/source/developers/plugins_architecture.rst b/docs/source/developers/plugins_architecture.rst new file mode 100644 index 00000000..f3405bb8 --- /dev/null +++ b/docs/source/developers/plugins_architecture.rst @@ -0,0 +1,304 @@ +===================== +Plugin implementation +===================== + + +Modified AL architecture for plugins management and execution +============================================================= + +`Figure 2`_ depicts the modified AL architecture for enabling the use of +plugins. It introduces new components: + +- The C wrappers for plugins management + +- The plugins API + +- The plugin interface + +- The C++ plugins + +From now on, the Low Level C wrappers call the Plugins API functions. +The LL API is remained unchanged. + +.. figure:: ../_static/images/image2.png + :name: Figure 2 + + **Figure 2:** Modified layered AL architecture model for plugins + orchestration + + +The C wrappers for plugins management +------------------------------------- + +`Figure 3`_ displays the list of new C wrappers for plugins management and +the new plugins API. The latter includes: + +- functions for plugins management (registering and binding to a node) + +- functions which allow plugins to override the behavior of the LL data + access functions + +In the new AL plugin architecture,ens-user APIs call the current C wrappers, which call +the new plugins API, which in turn call the plugins if they are registered and +bound to at least one node of the DD. For example, the +``al_begin_global_action(...)`` function calls the new plugins API +``beginGlobalActionPlugin(...)`` function of the plugins API. The functions +``al_read_data(...) and :code:``al_write_data(...)` delegate to the +``readDataSPlugin(...)`` and ``writeDataPlugin(...)`` plugins API +functions. + +.. figure:: ../_static/images/image3.png + :name: Figure 3 + + **Figure 3:** The new C wrappers for plugins management and the new plugins API + +Since the plugins API functions located in the LL C++ layer are not +accessible from theens-user APIs, the new C wrappers depicted in `Figure 3`_ allow +for accessing some plugins API functions fromens-user APIs. These functions are +mainly devoted to plugin registering and activation, features supported +by the plugins API described in the next section: + +- The ``al_register_plugin(...)`` wrapper (resp. + ``al_unregister_plugin(...)``) delegates to the dedicated C++ + ``registerPlugin(...)`` (resp. ``unregisterPlugin(...)``) function + from the plugins API. + +- The ``al_bind_plugin(...)`` wrapper (``al_unbind_plugin(...)``) + delegates to the dedicated C++ :code:`bindPlugin(...) (resp. + ``unbindPlugin(...)``) function from the plugins API. + + +The Plugins API and the low level holder plugin class +----------------------------------------------------- + +`Figure 4`_ depicts the ``LLplugin`` plugin holder class. + +.. figure:: ../_static/images/image4.png + :name: Figure 4 + + **Figure 4:** The plugin holder class (``LLplugin``) + + +Plugin registration +~~~~~~~~~~~~~~~~~~~ + +Among the plugins API functions (`Figure 3`_), we find +``registerPlugin(plugin_name)`` (``unregisterPlugin(plugin_name)``) +which creates (resp. destroys) a plugin instance from a C++ class located in a +shared library (.so). The ``registerPlugin(...)`` function creates a +``LLplugin`` object for holding the plugin instance using the +``al_plugin`` pointer attribute defined in the ``LLplugin`` class (see +`Figure 4`_). The ``LLplugin`` object is then stored in a static map (named +````LLplugin``sStore``) of the ``LLplugin`` class. This map allows the +plugin framework to retrieve the plugin later using the name of the plugin as a +key (``plugin_name`` function argument). + +.. _`Plugin activation`: + +Plugin activation +~~~~~~~~~~~~~~~~~ + +Once a plugin is registered, it is available from the plugins framework as long +as the AL process is running and as long as users have not called the +``unregister_plugin(...)`` C wrapper. However, during put/get operations, +the AL plugin framework will ignore a registered plugin not bound to any DD +node. To activate a plugin, anens-user API code bounds the plugin to at least one +particular IDS node using the ``al_bind_plugin(...)`` wrapper. This function +updates the ``boundPlugins`` static map of the ``LLplugin`` class, adding the name +of the plugin to a list which is mapped to the identifier of the DD node (the +identifier is the path to the node). To disable a plugin,ens-user APIs use the +``al_unbind_plugin(...)`` function which removes the plugin name from the +list hold by the ``boundPlugins`` map. + +Unregistering a plugin using ``al_unregister_plugin(plugin_name)`` will +remove the ``LLplugin`` object from the LL store ``LLpluginsStore`` and +destroy the underlying plugin instance. + + +Calling plugins from the Low Level +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All plugins API functions in `Figure 3`_ (except functions for plugins +registering/activation) call plugins operations from the plugin +interface described in the next section during LL operations. For +example, the ``beginGlobalActionPlugin(...)`` function calls the +``begin_global_action(...)`` function of the plugin interface. More details +are provided in sequence diagrams presented in section :ref:`get() sequence +diagram` and :ref:`put() sequence diagram`. + + +The Access Layer plugin interface +--------------------------------- + +When creating a plugin, the plugin class has to inherit from the +``access_layer_plugin`` interface and implement each (pure virtual) +operation declared in this interface (see ``access_layer_plugin.h``). + +The ``begin_global_action(...)`` (resp. ``begin_slice_action(...)``) functions are +plugins operations called when theens-user API calls ``al_begin_global_action(...)`` +(resp. ``al_begin_slice_action(...)``). These functions allow developers to +initialize the plugin before iteration of the IDS nodes performed by the +HLI. For example, during a slice operation using ``get_slice(...)`` or +``put_slice(...)``, the ``begin_slice_action(...)`` allows to store in the plugin +object the time of the slice and the interpolation method to perform the +slice. + +The node_operation(``const std::string &path``) function returns the type of +operation applied to the data node (located at the value given by the +``path`` argument) by the plugin. This function must return one of the +following value: ``plugin::OPERATION::GET_ONLY``, +``plugin::OPERATION::PUT_ONLY`` or ``plugin::OPERATION::PUT_AND_GET``. The +``node_operation(...)`` function, called by the plugins framework, has several +purposes: + +- It allows the plugins framework to sort the plugins that are contributing to + the ``get``/``get_slice`` operation, ``put``/``put_slice`` operation, or + both. Only plugins returning ``plugin::OPERATION::GET_ONLY`` or + ``plugin::OPERATION::PUT_AND_GET`` are added to the + ``ids_properties/plugins/get_operation`` data structure during a + ``get``/``get_slice`` operation. Moreover, only plugins returning + ``plugin::OPERATION::PUT_ONLY`` or ``plugin::OPERATION::PUT_AND_GET`` are + added to the ``ids_properties/plugins/put_operation`` data structure during a + ``put``/``put_slice`` operation. + +- The plugins framework will call the plugin operation ``read_data(...)`` for + a given IDS node path only if the ``node_operation(...)`` function returns + ``plugin::OPERATION::GET_ONLY`` or ``plugin::OPERATION::PUT_AND_GET`` for + this path. + +- The plugins framework will call the plugin operation ``write_data(...)`` + for a given IDS node path only if the ``node_operation(...)`` function + returns ``plugin::OPERATION::PUT_ONLY`` or ``plugin::OPERATION::PUT_AND_GET`` + for this path. + +The ``read_data(...)`` and (resp. ``write_data(...)``) allows a plugin to +intercept a data pointer coming from/going to the backend to read or modify it +on the fly. This documentation provides some plugins examples to illustrate the +use of these functions. + + +Calling low level data access API functions from plugin code +------------------------------------------------------------ + +New C wrappers allow plugins to call LL data access operations (the +latter should not be called by plugins code to avoid infinite +recursion). These functions have the same name that the existing +counterpart AL wrappers with prefix ``al`` replaced by ``al_plugin`` +(`Figure 6`_). + +.. code-block:: C++ + :caption: **Figure 6:** new C wrappers for calling LL data access operations from plugins + :name: Figure 6 + + void al_plugin_begin_global_action(const std::string &plugin_name, int pulseCtx, const char* dataobjectname, int mode, int opCtx); + void al_plugin_slice_action(const std::string &plugin_name, int pulseCtx, const char* dataobjectname, int mode, double time, int interp, int opCtx); + void al_plugin_arraystruct_action(const std::string &plugin_name, int ctx, int *actxID, const char* fieldPath, const char* timeBasePath, int *arraySize); + void al_plugin_read_data(const std::string &plugin_name, int ctx, const char* fieldPath, const char* timeBasePath, void **data, int datatype, int dim, int *size); + void al_plugin_write_data(const std::string &plugin_name, int ctxID, const char *field, const char *timebase, void *data, int datatype, int dim, int *size); + + +Plugins orchestration +===================== + +A registered and activated plugin (see :ref:`Plugin activation`) will be called +by the LL whenever a ``get()``/``get_slice()`` or ``put()``/``put_slice()`` +operation is performed by anens-user API. The next sections describe the dynamic of +plugins calls during a ``get()``/``get_slice()`` or a ``put()``/``put_slice()`` +operation through sequence diagrams. + +.. _`get() sequence diagram`: + +``get()`` sequence diagram +-------------------------- + +.. figure:: ../_static/images/image5.png + :name: Figure 7 + + **Figure 7:** ``get()`` operation sequence diagram + +`Figure 7`_ depicts an example of the ``get()`` operations sequence of a +``camera_ir`` IDS using the ``camera_ir`` plugin developed at WEST. The +client code usesens-user API operations to read data of a ``camera_ir`` IDS. In +the first two calls, the client registers the plugin and binds it to the +node identified by the path ``camera_ir/frame/surface_temperature``, then +the AL API ``get()`` operation is called on the ``camera_ir`` IDS object (the +preliminary operation for creating the IDS object is not shown in the +figure). The ``al_begin_global_action(...)`` function calls first the +``beginGlobalActionPlugin(...)`` function of the plugins API (whatever the +node to which the plugin is bound) which in turn calls the +``begin_arraystruct_action(...)`` of the plugin interface. Similarly, each +call to ``al_begin_arraystruct_action(...)`` generates first a call to +``beginArraystructActionPlugin(...)``, followed by a call to the +``begin_arraystruct_action(...)`` function of the plugin interface. + +If several plugins are bound to the same IDS node, the plugin +framework will iterate over each plugin and call the appropriate plugin +interface function for each plugin sequentially. The iteration order +follows the order in which plugins bindings have been performed by the +HLI client using ``al_bind_plugin(...)``. + +.. _`put() sequence diagram`: + +``put()`` sequence diagram +-------------------------- + +The ``put()`` sequence diagram (`Figure 8`_) is quite similar to the ``get()`` +sequence diagram. The example uses the ``camera_ir_write`` plugin +described later in this document. + +.. figure:: ../_static/images/image6.png + :name: Figure 8 + + **Figure 8:** ``put()`` operation sequence diagram + +Note that the wrapper ``al_begin_arraystruct_action(...)`` is called in this +modified AL plugin architecture even if the corresponding array of +structure (AOS) has a 0-shape (this is not true for the previous AL +architecture whereens-user APIs were not calling ``al_begin_arraystruct_action(...)`` +if the AOS was found to be empty). The reason is to make plugins able to +write/update the size of AOSs. + + +Access Layer plugin provenance +============================== + +Recent versions of the Data Dictionary store information concerning plugin +provenance. + +To take into account these change, we have defined new plugins requirements with +the ``provenance_plugin_feature`` and the ``readback_plugin_feature`` interfaces +(`Figure 8`_). Moreover, in order to extend the ability of the LL to accept any +type of plugins, we have introduced a new access_layer_base_plugin interface. +The latter is more general and does not hold the read/write data access and +*readback* requirements. + +It may be necessary to define *readback* plugins that can read data +written by other plugins. For instance, the ``camera_ir_write`` plugin +(used currently on WEST) writes compressed data of the ``camera_ir`` IDS +to the backend. In order to read these data during a ``get()`` or +``get_slice()`` operation, the ``camera_ir_write`` plugin implements the +``readback_plugin_feature`` interface, which provides information to the +Access Layer about a *readback* plugin capable of reading and +uncompressing the data. For this example, the ``camera_ir`` readback +plugin is able to read and decompress data stored by the +``camera_ir_write`` plugin, providing uncompressed data to theens-user API. The +name of the *readback* plugin is obtained using the +``getReadbackName(const std::string &path, int *index)`` function of the +``readback_plugin_feature`` interface for a given IDS node path. It is worth +noting that several plugins can be applied to the same IDS node path, +and the ``index`` parameter indicates which *readback* plugin should be +used. For instance, if two *readback* plugins are defined for the same +node path, a value of 1 for the ``index`` parameter indicates that the +plugin should be applied after the plugin defined at ``index=0``. + +During a ``put()``/``put_slice()`` operation, the **readback** +informations specified by the **readback_plugin_feature** interface are +stored in the backend. These data are read during a ``get()``/``get_slice()`` +operation and used to bind and execute the *readback* plugins. + +.. figure:: ../_static/images/image7.png + :name: Figure 9 + + **Figure 9:** The ``provenance_plugin_feature``, ``readback_plugin_feature`` + and ``access_layer_base_plugin`` interfaces + diff --git a/docs/source/developers/plugins_framework.rst b/docs/source/developers/plugins_framework.rst new file mode 100644 index 00000000..7cf58365 --- /dev/null +++ b/docs/source/developers/plugins_framework.rst @@ -0,0 +1,75 @@ +================= +Plugins framework +================= + +Plugins enable a flexible access layer architecture by extending the Access Layer (AL) +functionality through C++ software components compiled in separate libraries. In this +document, we describe how plugins are integrated into the AL library and demonstrate +that plugins satisfy many use-case requirements, providing new features available from +all existing High Level Interfaces (HLIs). We describe the Access Layer plugins +architecture and provide some plugins examples. + + +Plugins offer the following advantages: + +- Developers write plugins in C++ and compile plugins separately from + the AL library, which discovers them at runtime, according to some + Data Dictionary-defined or user-defined plugins activation + directives. More precisely, the AL Low Level layer loads plugins and + calls them according to the previous directives. **Plugins provide + new features with common behavior between end-user APIs in Fortran, C++, Java and Matlab**. + There is no need for developing specific end-user APIs in Fortran, C++, Java and Matlab + implementation of plugins features, **decreasing + therefore drastically development time**, **simplifying maintenance** + and **reducing the risk of potential bugs**. + +- Contributing also to **reduced time development**, code **plugin + compilation is fast** since plugins have no dependency onens-user API + classes. The compilation time must be compared to the one required + for specificens-user API code whose change may (depending on which source + file has been modified) trigger the full recompilation of theens-user API + layer. + +- Features provided by a plugin behave the same in allens-user APIs with same + exceptions, same outputs, same bugs... **Users experience remains + unchanged** from oneens-user API to another. + +- Plugins source files are stored in separate repositories with + separate development lifecycles. Developers group plugins into + separate projects, improving **code management, lowering code + coupling** (plugins are not coupled, they only implement the plugin + interface described later) between AL components and **making clear + separation of features** provided by each plugin. + +- Plugins depend on the AL library, not the other way around. + Therefore, at development time, plugins developers do not need to + recompile the AL, which lowers time development. Moreover, in + production, upon new plugins release, no change are required to the + AL sources or to the AL installed binaries, **preventing AL updates + procedures and reducing AL deployment maintenance.** + +AL plugins provide many features available for allens-user APIs as for example: + +- **Creating fast C++ post processing** using low-level R/W data access + functions. Plugins have flexibility to run on-the-fly data + transformations such as decompression/compression, calibration, + filtering, ... + +- **Patching values from/to DD leaves** by overriding ``get()``/``put()`` + operations. An example is the unified NBC plugin (which overrides + the ``get()`` operation) which provides data format backward + compatibility. + +- **Displaying specific values** of DD leaves to users. Building + reports for some specific Interface Data Structure (IDS) nodes. + **Debugging**: developers check expected DD leaves values according + to some logic implemented in the plugin (for some specific + data/context). Plugins can display important warnings/infos to users + if necessary. + +- **Selecting partial data to speed up IDS writing/reading.** Let us + consider a partial read operation. Since a plugin has the control to + read data from any DD node, plugin logic allows reading few specific + nodes of an IDS and skip/ignore (large) nodes not required by the use + case. We will show later an example, which shows how to read only + some part of the data from an IDS, reducing IDS loading time. diff --git a/docs/source/faq.rst b/docs/source/faq.rst new file mode 100644 index 00000000..8572ae2e --- /dev/null +++ b/docs/source/faq.rst @@ -0,0 +1,74 @@ +FAQ +=== + +Frequently Asked Questions about IMAS-Core. + +Installation +------------ + +**Q: How do I install IMAS-Core?** + +A: Use pip: + +.. code-block:: bash + + pip install imas-core + +**Q: What Python versions are supported?** + +A: We recommend Python 3.8+. + +**Q: Can I build from source?** + +A: Yes, see :doc:`user_guide/installation`. + +Usage +----- + +**Q: What is an IDS?** + +A: An Integrated Data Structure (IDS) is a standardized data container defined +by the IMAS Data Dictionary. Examples include 'equilibrium', 'magnetics', etc. + +**Q: What is a backend?** + +A: A backend is a storage format (HDF5, MDSplus, etc.). The same code works +with different backends by changing the URI. + +Backends +-------- + +**Q: What is the difference between backends?** + +A: See comparison in :doc:`user_guide/backends_guide`. + +Development +----------- + +**Q: How do I contribute to IMAS-Core?** + +A: See the GitHub repository for guidelines: https://github.com/iterorganization/IMAS-Core + +**Q: How do I build from source?** + +A: See :doc:`user_guide/installation`. + +**Q: How do I report bugs?** + +A: Open an issue on GitHub: https://github.com/iterorganization/IMAS-Core/issues + + +Miscellaneous +------------- + + +**Q: What is the IMAS Data Dictionary?** + +A: Defines the structure of all IDS. See https://imas-data-dictionary.readthedocs.io/ + +Still Have Questions? +--------------------- + +- :doc:`troubleshooting` - Common issues and solutions +- Email: imas-support@iter.org +- GitHub Issues: https://github.com/iterorganization/IMAS-Core/issues diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..678df278 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,118 @@ +IMAS-Core Documentation +======================= +.. image:: https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml/badge.svg + :target: https://github.com/iterorganization/IMAS-Core/actions + +What is IMAS? +------------- + +**IMAS** (Integrated Modeling and Analysis Suite) is ITER's comprehensive suite for storing and analyzing fusion experiment data. + +IMAS consists of: + +1. **Standardized Data Structures** - Defined in the `IMAS Data Dictionary `_, these structures store experimental and simulation data +2. **Infrastructure Components** - Tools and libraries for reading, writing, and accessing data +3. **Physics Components** - Domain-specific tools and models + + +What is IMAS-Core? +------------------ + +IMAS-Core is the **lowlevel infrastructure library** for reading and writing IMAS data structures. It consists of: + +- **Core Library** - C++ access layer with Python bindings +- **Multiple Backends** - Support for HDF5, MDSplus, UDA, and other storage formats +- **MDSplus Models** - Data model definitions for MDSplus backend +- **Python Bindings** - Easy-to-use Python interface via Cython + +Key capabilities: + +- Provide support for loading and store IMAS data structures (IDSs) to/from disk +- Work with multiple data backends transparently +- Access data from any supported programming language with bindings +- Cross-platform support (Linux, macOS, Windows) + + + +Overview +-------- + +IMAS-Core provides: + +- **High Performance** - Efficient C++ backend for fast data access +- **Multiple Backends** - HDF5, MDSplus, UDA, FlexBuffers, and in-memory storage +- **Language Support** - Python, C++, Fortran, Java, MATLAB bindings in end-user languages +- **Standardized Format** - IMAS data structure ensures interoperability +- **Easy Installation** - pip install for Python users + +The library is built using modern C++ and provides a unified interface across all supported backends. + +.. grid:: 1 1 2 2 + :gutter: 3 + + .. grid-item-card:: 👤 **For End Users** + :text-align: center + + Install and use IMAS-Core as a Python package + + +++ + + .. button-ref:: user_guide/index + :ref-type: doc + :color: primary + :outline: + + User Guide + + .. grid-item-card:: 🔧 **For Developers** + :text-align: center + + Build from source, contribute, and extend IMAS-Core + + +++ + + .. button-ref:: developers/index + :ref-type: doc + :color: primary + :outline: + + Developer Guide + + +Getting Started +--------------- + + +**Quick Start with pip:** + +.. code-block:: bash + + pip install imas-core + python -c "import imas_core" + + +Documentation Structure +----------------------- + +.. toctree:: + :maxdepth: 2 + + user_guide/index + developers/index + troubleshooting + faq + + +Important Links +--------------- + +- **Homepage**: Coming soon +- **GitHub Repository**: https://github.com/iterorganization/IMAS-Core +- **IMAS Data Dictionary**: https://imas-data-dictionary.readthedocs.io/ +- **Issue Tracker**: https://github.com/iterorganization/IMAS-Core/issues + + +.. note:: + This documentation covers IMAS-Core as an independent, installable library. + For information on other IMAS components (like language bindings for C++, Fortran), + refer to their respective repositories. diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst new file mode 100644 index 00000000..a23e4a28 --- /dev/null +++ b/docs/source/troubleshooting.rst @@ -0,0 +1,53 @@ +Troubleshooting +=============== + +Common issues and solutions when using IMAS-Core. + +Installation Issues +------------------- + +**Could not import 'imas_core': No module named 'imas_core'. Some functionality is not available.** + +*Problem:* IMAS-Core not installed correctly + +*Solutions:* + +1. Verify installation: + + .. code-block:: bash + + pip list | grep imas-core + +2. Reinstall: + + .. code-block:: bash + + pip install --force-reinstall imas-core + +3. Check Python version: + + .. code-block:: bash + + python --version + + +Getting Help +------------ + +If you can't find the solution: + +1. **Check Documentation:** + - :doc:`user_guide/index` - User guide + - :doc:`developers/index` - Developer guide + - :doc:`user_guide/backends_guide` - Backend documentation + +2. **Search Issues:** + - https://github.com/iterorganization/IMAS-Core/issues + +3. **Report Bug:** + - Include: OS, Python version, IMAS-Core version + - Include: Full error message and stack trace + - Include: Minimal code to reproduce + +4. **Contact Support:** + - Email: imas-support@iter.org diff --git a/docs/source/user_guide/backends_guide.rst b/docs/source/user_guide/backends_guide.rst new file mode 100644 index 00000000..f20840a4 --- /dev/null +++ b/docs/source/user_guide/backends_guide.rst @@ -0,0 +1,222 @@ +.. _Backends: + +Backends +======== + + +Several backends exist for storing and loading IMAS data. Each backend uses a +different format for storing the data. + + +Backend comparison +'''''''''''''''''' + +.. csv-table:: Comparison of backend functionality + :header-rows: 1 + :stub-columns: 1 + + , :ref:`HDF5 `, :ref:`MDSplus `, :ref:`UDA `, :ref:`Memory `, :ref:`ASCII `, :ref:`Flexbuffers ` + ``get``, Yes, Yes, Yes, Yes, Yes, Yes [#fb_get]_ + ``get_slice``, Yes, Yes, Yes, Yes, \-, \- + ``put``, Yes, Yes, \-, Yes, Yes, Yes [#fb_put]_ + ``put_slice``, Yes, Yes, \-, Yes, \-, \- + Persistent storage, Yes, Yes, Yes [#uda]_, \-, Yes [#ascii]_, \- + +.. [#uda] The UDA backend is read-only. +.. [#ascii] Suitable for tests and small data, but not recommended for large + datasets or long-term storage. +.. [#fb_get] Only when using ``OPEN_PULSE`` mode +.. [#fb_put] Only when not using ``OPEN_PULSE`` mode + + +.. _hdf5 backend: + +HDF5 backend +'''''''''''' + +The HDF5 backend is identified by ``hdf5`` in the IMAS URI, and stores data in +the `hdf5 data format `_ + + +.. _mdsplus backend: + +MDSplus backend +''''''''''''''' + +The MDSplus backend is identified by ``mdsplus`` in the IMAS URI. The data is +stored in the `MDSplus format `_. + +This backend imposes some limitations on the data that can be stored, see +`maxoccur` in the |DD| documentation. + + This backend has been around and stable for a longer time, so most older IMAS + data is stored in this format. + + +.. _uda backend: + +UDA backend +''''''''''' + +The UDA backend is used when a host is provided. `UDA (Universal Data Access) +`_ is the mechanism for contacting the server that +stores the data. + +A number of UDA plugins already exist for these, but their availability depends +on how UDA has been installed on the local cluster. Therefore it's recommended +that you contact the IMAS support team when you want to use this functionality. + +simple URI example: imas://uda.iter.org:56565/uda?path=/work/imas/shared/imasdb/ITER/3/131062/4;backend=hdf5;verbose=1 + + +.. _memory backend: + +Memory backend +'''''''''''''' + +The memory backend is identified by ``memory`` in the IMAS URI. When storing or +loading IMAS data with this backend, the data is stored in-memory. This is +therefore not persistent. + +The memory backend can still be useful to transfer data between languages in the +same program (for example, storing an IDS in C++ and then loading it with the +Fortranens-user API) or to store a number of time slices and then loading all time slices. + +simple URI example: imas:memory?path=/path/to/data + +.. _ascii backend: + +ASCII backend +''''''''''''' + +The ASCII backend is identified by ``ascii`` in the IMAS URI. The ASCII backend +can be used to store IDS data in a plain-text human readable format. The +performance and size of the stored data is worse than the other backends, so +this is typically only used for debugging. + + +.. _flexbuffers backend: + +Flexbuffers backend +''''''''''''''''''' + +The Flexbuffers backend is identified by ``flexbuffers`` in the IMAS URI. The +Flexbuffers backend is used when (de)serializing IDSs with the +``FLEXBUFFERS_SERIALIZER_PROTOCOL``. It is optimized for (de)serialization speed and +therefore has very limited functionality. It is not intended to be used outside of IDS +serialization. + + +.. _Query keys: + +Query keys +---------- + +You can use query keys to indicate to the backend where the data is stored and +(optionally) set backend-specific configuration options. The following query +keys are currently recognized. + +.. note:: + + Query keys are case-sensitive and unknown query keys are silently ignored. + +``path`` [#mandatory]_ + Provide the path to the folder where the IMAS data is (or will be) stored. + Paths can be absolute (starting with a ``/`` on UNIX, or with a drive letter + on Windows) or relative to the current working directory. + + The backend manages how your IMAS data is stored within the folder. + + .. code-block:: text + :caption: URI examples using path + + imas:hdf5?path=/absolute/path/to/data + imas:hdf5?path=relative_path + +``user``, ``database``, ``version``, ``pulse``, ``run`` [#mandatory]_ + Use `legacy` (Access Layer version 4 and earlier) way to indicate where the + IMAS data is (or will be) stored. + + .. code-block:: text + :caption: URI example using legacy data identifiers + + imas:mdsplus?user=public;pulse=131024;run=41;database=ITER;version=3 + + In Access Layer version 5.0.0 and earlier use key ``shot`` instead of ``pulse``. + + .. code-block:: text + :caption: URI example using legacy data identifiers in Access Layer 5.0.0 and earlier. + + imas:mdsplus?user=public;shot=131024;run=41;database=ITER;version=3 + + + +.. [#mandatory] Either ``path`` or all of the legacy query keys must be + provided. + + +Query keys specific for the HDF5 backend +'''''''''''''''''''''''''''''''''''''''' + +The :ref:`HDF5 backend` also recognizes these backend-specific query keys. + +``hdf5_compression`` + Data compression is enabled by default. Set ``hdf5_compression=no`` or + ``hdf5_compression=n`` to disable data compression. + +``hdf5_write_buffering`` + During a `put` operation, 0D and 1D buffers are first + stored in memory. Buffers are flushed at the end of the put. + + This feature is enabled by default. Set ``hdf5_write_buffering=no`` or + ``hdf5_write_buffering=n`` to disable write buffering. + +``write_cache_option`` + Set the size of the HDF5 chunk cache used during chunked datasets write + operations. Default to 100x1024x1024 bytes (100 MiB). + +``read_cache_option`` + Set the size of the HDF5 chunk cache used during chunked datasets read + operations. Default to 5x1024x1024 bytes (5 MiB). + +``open_read_only`` + Open master file and IDSs files in read only if ``open_read_only=yes`` or + ``open_read_only=y``, overwriting the files access modes default behavior (see IMAS-5274 for an example use-case). + +``hdf5_debug`` + HDF5 debug output is disabled by default. Set ``hdf5_debug=yes`` or + ``hdf5_debug=y`` to enable HDF5 debug output. + + +Query keys specific for the ASCII backend +''''''''''''''''''''''''''''''''''''''''' + +The :ref:`ASCII backend` also recognizes these backend-specific query keys. + +``filename`` + Specify the exact filename in which the IDS data will be stored, instead + of the default `.ids`. + + +Query keys specific for the UDA backend +''''''''''''''''''''''''''''''''''''''' + +The :ref:`UDA backend` also recognizes these backend-specific query keys. + +``verbose`` + UDA verbosity is disabled by default. Set ``verbose=1`` to obtain + more information and ease debugging. + +``cache_mode`` + UDA cache_mode is ``ids`` by default. Set ``cache_mode=none`` or ``cache_mode=ids`` to specify the mode of caching. + - ``none``: No caching is performed. + - ``ids``: Caches the entire IDS (Interface Data Structure). + +``fetch`` + UDA ``fetch`` is disabled by default. Set ``fetch=1`` to enable fetching + and downloading IDS files to the local ``local_cache`` directory. + +``local_cache`` + UDA ``local_cache`` is set to ``tmp/path_in_uri`` by default. This is used along with ``fetch=1`` in the query. + Set ``local_cache=/path/to/local/cache/directory`` and the download directory will be ``local_cache/path_in_uri``. + ``local_cache`` specifies the path to the local cache directory where IDSs will be downloaded. diff --git a/docs/source/user_guide/configuration.rst b/docs/source/user_guide/configuration.rst new file mode 100644 index 00000000..185a5243 --- /dev/null +++ b/docs/source/user_guide/configuration.rst @@ -0,0 +1,138 @@ +.. _configuration options: + +Configuration +============= + +Some functionality of the Access Layer can be configured through enironment +variables. This page provides an overview of the available options. + + +Environment variables controlling IMAS-Core behaviour +----------------------------------------------------- + +``IMAS_AL_DEFAULT_BACKEND`` [#backend_env]_ + Specify which backend to use by default with open/create methods that do not + pass this information as an argument. Values for this environment + variable correspond to the targeted backend ID, see below table. If not + specified, the MDS+ backend is the default. + + .. csv-table:: Backend IDs + :header-rows: 1 + + Backend, Backend ID + :ref:`ASCII `, 11 + :ref:`MDSplus `, 12 + :ref:`HDF5 `, 13 + :ref:`Memory `, 14 + :ref:`UDA `, 15 + + +``IMAS_AL_FALLBACK_BACKEND`` [#backend_env]_ + Specify a fallback backend to be tried if opening the given data-entry was + not successful with the primary/default backend. Values for this environment + variable correspond to the targeted backend ID, see above table. If not + specified, no secondary attempt will be made. This does not have any effect + on calls to create new dataentries. + + +``IMAS_AL_DISABLE_OBSOLESCENT_WARNING`` + Since version 4.10.0, all interfaces print warnings when putting an IDS that + contains data in fields marked as `obsolescent` in the DD. Setting this + variable to ``1`` disables these printouts. + + +.. [#backend_env] These environment variables are not applicable when using + Data entry URIs (see :doc:`../user_guide/uris_guide`), which explicitly specify the backend. Also not applicable + in the Pythonens-user API. + + +Environment variables controlling access layer plugins +------------------------------------------------------ + +``IMAS_AL_ENABLE_PLUGINS`` + Execution of C++ plugins in AL5 is a new feature which can be tested by + users who are interested in. It's currently an experimental feature which is + disabled by default. + + When the plugins framework is disabled: + + - Low level plugins registering/search functions are disabled. + - The behavior of writing data for nodes with default values is the same + that AL4.ens-user API write requests for these `empty` nodes are not sent to the + LL. + + When the plugins framework is enabled: + + - Low level plugins registering/search functions are enabled. + - The behavior of writing data for nodes with default values differs from + AL4.ens-user API write requests for these `empty` nodes are sent to the LL + allowing eventually to execute low level C++ plugins bound to these nodes + whose content can be handled by these plugins. + + To enable the plugins framework, set the global environment variable + ``IMAS_AL_ENABLE_PLUGINS`` before executing the access layer: + + .. code-block:: bash + + export IMAS_AL_ENABLE_PLUGINS=TRUE + + +Backend specific environment variables +-------------------------------------- + + +``HDF5_BACKEND_READ_CACHE`` [#uri_precedence]_ + Specify the size of the read cache in MB (default is 5). It may improve + reading performance at the cost of increased memory consumption. Obtained + performance and best size of cache is heavily depending on the data. + + +``HDF5_BACKEND_WRITE_CACHE`` [#uri_precedence]_ + Specify the size of the write cache in MB (default is 5). It may improve + writing performance at the cost of increased memory consumption. Obtained + performance and best size of cache is heavily depending on the data. + + +.. [#uri_precedence] These settings can also be configured in the IMAS URI, see + :doc:`../user_guide/backends_guide`. The URI provided settings + will be used if both are present. + + +``IMAS_AL_SERIALIZER_TMP_DIR`` + Specify the path to storing temporary data. If it is not set, the default + location `/dev/shm/` or the current working directory will be chosen. + + + +UDA client configuration to reach the server at ITER +---------------------------------------------------- + +``UDA_HOST=uda.iter.org`` [#uda_uri]_ + If set, all queries with the UDA backend will be directed at the ITER UDA + server `uda.iter.org`, unless directly specified in the Access Layer's URI. + +``UDA_PORT=56565`` [#uda_uri]_ + If set, all queries will be directed to the port `56565` of the selected UDA + server, unless directly specified in the Access Layer's URI. + + + The ITER UDA server uses SSL authentication through a Personal Key Infrastructure + (PKI). You can download your PKI certificate at `pkiuda.iter.org`. Extract the + obtained `bundle.zip` in a folder in which only you have read permission (e.g. + `$HOME/.uda`). Then set the following environment variables: + + .. code-block:: bash + + export UDA_CLIENT_SSL_KEY=$HOME/.uda/private.key + export UDA_CLIENT_CA_SSL_CERT=$HOME/.uda/ca-server-certificate.pem + export UDA_CLIENT_SSL_CERT=$HOME/.uda/certificate.pem + export UDA_CLIENT_SSL_AUTHENTICATE=1 + + Do the same on all the systems from which you want to access ITER's UDA server. + + +.. [#uda_uri] An Access Layer URI of the form + `imas:uda?path=;backend=` will only work if + `UDA_HOST` and `UDA_PORT` environment variables are set. If not, the information + needs to be directly passed in the URI, as + `imas://:/uda?path=;backend=`. diff --git a/docs/source/user_guide/index.rst b/docs/source/user_guide/index.rst new file mode 100644 index 00000000..1b8beebc --- /dev/null +++ b/docs/source/user_guide/index.rst @@ -0,0 +1,14 @@ +User Guide +========== + +This guide provides information for users who want to install, configure, and use +IMAS-Core to work with IMAS data. It covers installation methods, data entry URIs, +backend options, and configuration settings to help you get started with IMAS-Core. + +.. toctree:: + :maxdepth: 2 + + installation + uris_guide + backends_guide + configuration diff --git a/docs/source/user_guide/installation.rst b/docs/source/user_guide/installation.rst new file mode 100644 index 00000000..3b72bdd0 --- /dev/null +++ b/docs/source/user_guide/installation.rst @@ -0,0 +1,421 @@ +Installation +============= + +Quick Install for Python users +------------------------------ + +To install IMAS-Core via pip for Python users: + +.. code-block:: bash + + pip install imas-core + python -c "import imas_core" + + +Requirements +~~~~~~~~~~~~ + +- **Python 3.8+** +- **Linux** (fully supported) +- **macOS and Windows** (experimental - in testing) + +.. note:: + macOS and Windows support is still being tested. Linux is the primary supported platform. + Please report any issues on `GitHub `_. + +Binary wheels are provided for all platforms, so you don't need to compile anything. + + + +**Still not working?** + +See :doc:`../troubleshooting` for common issues. + + +Build and Install from Source +------------------------------ + +This page describes how to build and install the IMAS-Core from source code. + +.. _`user build prerequisites`: + +IMAS-Core +--------- + +To build the IMAS-Core you need: + +- Git +- A C++11 compiler (tested with GCC and Intel compilers) +- CMake (3.16 or newer) +- Saxon-HE XSLT processor +- Boost C++ libraries (1.66 or newer) +- PkgConfig + +The following dependencies are only required for some of the components: + +- Backends + + - **HDF5 backend**: HDF5 C/C++ libraries (1.8.12 or newer) + - **MDSplus backend**: MDSplus libraries (7.84.8 or newer) + - **UDA backend**: `UDA `__ libraries + (2.7.5 or newer) [#uda_install]_ + +.. [#uda_install] When installing UDA, make sure you have + `Cap'n'Proto `__ installed in your system + and add its support by adding the CMake switch `-DENABLE_CAPNP=ON` when configuring UDA. + + +Standard environments: + +.. md-tab-set:: + + .. md-tab-item:: Ubuntu 22.04 + + The following packages provide most requirements when using Ubuntu 22.04: + + .. code-block:: bash + + apt install git build-essential cmake libsaxonhe-java libboost-all-dev \ + pkg-config libhdf5-dev xsltproc libblitz0-dev gfortran \ + default-jdk-headless python3-dev python3-venv python3-pip + + The following dependencies are not available from the package repository, + you will need to install them yourself: + + - MDSplus: see their `GitHub repository + `__ or `home page + `__ for installation instructions. + - UDA: see their `GitHub repository `__ for more + details. + - MATLAB, which is not freely available. + + +Building and installing IMAS-Core +--------------------------------- + +Please make sure you have the :ref:`user build prerequisites` installed. + + +Clone the repository +~~~~~~~~~~~~~~~~~~~~ + +First you need to clone the repository of the IMAS-Core you want to build: + +.. code-block:: bash + + # For the IMAS-Core use: + git clone git@github.com:iterorganization/IMAS-Core.git + + +cmake configuration +~~~~~~~~~~~~~~~~~~~ + +Once you have cloned the repository, navigate your shell to the folder and run cmake. +You can pass configuration options with ``-D OPTION=VALUE``. See below list for an +overview of configuration options. + +.. code-block:: bash + + cd IMAS-Core + cmake -B build -D CMAKE_INSTALL_PREFIX=$HOME/install -D OPTION1=VALUE1 -D OPTION2=VALUE2 [...] + +.. note:: + + CMake will automatically fetch dependencies from required repositories + for you. + + - `data-dictionary (git@github.com:iterorganization/IMAS-Data-Dictionary.git) + `__ + + If you need to change the git repositories, for example to point to a mirror of the + repository or to use a HTTPS URL instead of the default SSH URLs, you can update the + :ref:`configuration options`. For example, add the following options to your + ``cmake`` command to download the repositories over HTTPS instead of SSH: + + .. code-block:: text + :caption: Use explicit options to download dependent repositories over HTTPS + + cmake -B build \ + -D AL_CORE_GIT_REPOSITORY=https://github.com/iterorganization/IMAS-Core.git \ + -D DD_GIT_REPOSITORY=https://github.com/iterorganization/IMAS-Data-Dictionary.git + + If you use CMake 3.21 or newer, you can also use the ``https`` preset: + + .. code-block:: text + :caption: Use CMake preset to set to download dependent repositories over HTTPS + + cmake -B build --preset=https + + +Choosing the compilers +'''''''''''''''''''''' + +You can instruct CMake to use compilers with the following environment variables: + +- ``CC``: C compiler, for example ``gcc`` or ``icc``. +- ``CXX``: C++ compiler, for example ``g++`` or ``icpc``. +- ``FC``: Fortran compiler, for example ``gfortran``, ``ifort`` or ``nagfor``. + +If you don't specify a compiler, CMake will take a default (usually from the Gnu +Compiler Collection). + +.. important:: + + These environment variables must be set before the first time you configure + ``cmake``! + + If you have an existing ``build`` folder and want to use a different compiler, you + should delete the ``build`` folder first, or use a differently named folder for the + build tree. + + +.. _installation configuration options: + +Configuration options +''''''''''''''''''''' + +- **Backend configuration options** + + - ``AL_BACKEND_HDF5``, allowed values ``ON`` *(default)* or ``OFF``. + Enable/disable the HDF5 backend. + - ``AL_BACKEND_MDSPLUS``, allowed values ``ON`` or ``OFF`` *(default)*. + Enable/disable the MDSplus backend. + + - ``AL_BUILD_MDSPLUS_MODELS``, allowed values ``ON`` *(default)* or ``OFF``, + only available when the MDSplus backend is enabled. Enable building MDSplus + models for the selected Data Dictionary version. + + - ``AL_BACKEND_UDA``, allowed values ``ON`` or ``OFF`` *(default)*. Enable/disable + the UDA backend. + - ``AL_BACKEND_UDAFAT``, allowed values ``ON`` or ``OFF`` *(default)*. + Enable/disable the UDA backend and use FAT UDA instead of the client/server + model. See the `UDA documentation `__ for more + information. + +- **Control what to build** + + - ``AL_TESTS``, allowed values ``ON`` or ``OFF`` *(default)*. Enable/disable + building the test programs in the ``tests`` folder. + - ``AL_PLUGINS``, allowed values ``ON`` *(default)* or ``OFF``. Enable/disable + building the plugins from the ``al-plugins`` repository. + - ``AL_DOCS_ONLY``, allowed values ``ON`` or ``OFF`` *(default)*. When enabled, + ONLY the documentation will be built (needs ``AL_HLI_DOCS=ON``). Regardless of + other configuration options, nothing else will be built. + - ``AL_PYTHON_BINDINGS``, allowed values ``ON`` *(default when building the Python + API)* or ``OFF`` *(default when not building the Python API)*. When enabled, this + builds the Access Layer Python lowlevel bindings. + +- **Dependency configuration options** + + - ``AL_DOWNLOAD_DEPENDENCIES``, allowed values ``ON`` *(default)* or ``OFF``. + Enable or disable the automatic downloading of dependencies. Should be disabled + when using a development environment + + .. important:: + + The following environment variables must be set before the first time you + configure ``cmake``! + + If you have an existing ``build`` folder and want to use a different compiler, + you should delete the ``build`` folder first, or use a differently named folder + for the build tree. + + When ``AL_DOWNLOAD_DEPENDENCIES`` is enabled, the following settings can be used to + configure the location and/or version of the dependencies that should be used. + + - ``AL_CORE_GIT_REPOSITORY``, + , ``DD_GIT_REPOSITORY``. Configure the git URLs + where the ``IMAS-Core`` c.q. + ``data-dictionary`` repositories should be fetched from. + - ``AL_CORE_VERSION``, ``AL_PLUGINS_VERSION``, + ``DD_VERSION``. Configure the version of the repository that should be used. + This can point to any valid branch name, tag or commit hash. + + This setting can be used to control which version of the Data Dictionary you + want to use. For example: ``-D DD_VERSION=3.38.1`` will use DD version 3.38.1 + instead of the default. + + .. code-block:: text + :caption: Default values for ``*_GIT_REPOSITORY`` and ``*_VERSION`` options + + AL_CORE_GIT_REPOSITORY: git@github.com:iterorganization/IMAS-Core.git + AL_CORE_VERSION: main + + + DD_GIT_REPOSITORY: git@github.com:iterorganization/IMAS-Data-Dictionary.git + DD_VERSION: main + +- **Useful CMake options** + + - ``CMAKE_INSTALL_PREFIX``. Configure the path where the Access Layer will be + installed, for example ``-D CMAKE_INSTALL_PREFIX=$HOME/install`` will install + the IMAS-Core inside the ``install`` folder in your home directory. + - ``CMAKE_BUILD_TYPE``. Configure the build type for compiled languages. + Supported values (case sensitive): + + - ``Debug``: build with debug symbols and minimal optimizations. + - ``Release``: build with optimizations enabled, without debug symbols. + - ``RelWithDebInfo`` *(default)*: build with optimizations and debug symbols + enabled. + - ``MinSizeRel``: build optimized for minimizing the size of the resulting + binaries. + +More advanced options are available as well, these can be used to configure where CMake +searches for the prerequisite dependencies (such as the Boost libraries). To show all +available configuration options, use the command-line tool ``ccmake`` or the gui tool +``cmake-gui``: + +.. code-block:: bash + + # for the CLI tool + ccmake -B build -S . + # for the GUI tool + cmake-gui -B build -S . + + +Build the IMAS-Core +~~~~~~~~~~~~~~~~~~~ + +Use ``cmake`` to build as shown below. + +.. code-block:: bash + + # Instruct make to build "all" in the "build" folder, using at most "8" parallel + # processes: + CMAKE_ARGS=(${CMAKE_ARGS[@]} + -D"CMAKE_INSTALL_PREFIX=$(pwd)/test-install/" + # Enable all backends + -DAL_BACKEND_HDF5=ON + -DAL_BACKEND_MDSPLUS=ON + -DAL_BACKEND_UDA=ON + # Build MDSplus models + -DAL_BUILD_MDSPLUS_MODELS=ON + # Build Python bindings + -DAL_PYTHON_BINDINGS=no-build-isolation + # Download dependencies from HTTPS (using an access token): + -DAL_DOWNLOAD_DEPENDENCIES=ON + -DDD_GIT_REPOSITORY=https://github.com/iterorganization/IMAS-Data-Dictionary.git + # DD version: + -DDD_VERSION=$DD_VERSION + # Work around Boost linker issues on 2020b toolchain + -DBoost_NO_BOOST_CMAKE=ON + ) + echo "CMake args:" + echo ${CMAKE_ARGS[@]} | tr ' ' '\n' + + # Note: we don't set CC or CXX compiler, so CMake will pick the default (GCC) compilers + cmake -Bbuild -GNinja "${CMAKE_ARGS[@]}" + + # Build and install + cmake --build build --target install + +.. note:: + + By default CMake on Linux will create ``Unix Makefiles`` for actually building + everything, as assumed in this section. + + You can select different generators (such as Ninja) if you prefer, but these are not + tested. See the `CMake documentation + `__ for more + details. + + +Install from source using pip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Alternatively, you can install IMAS-Core from source using pip. This method is useful when +you want to install directly from the source code without using CMake directly. + +First, clone the repository: + +.. code-block:: bash + + git clone git@github.com:iterorganization/IMAS-Core.git + cd IMAS-Core + +Then install using pip: + +.. code-block:: bash + + pip install . + +You can pass CMake configuration options to pip using the ``-C skbuild.cmake.define.OPTION=VALUE`` +syntax. For example: + +.. code-block:: bash + + # Install with UDA backend disabled + pip install . -C skbuild.cmake.define.AL_BACKEND_UDA=OFF + + # Install with specific backend configurations + pip install . \ + -C skbuild.cmake.define.AL_BACKEND_HDF5=ON \ + -C skbuild.cmake.define.AL_BACKEND_MDSPLUS=ON \ + -C skbuild.cmake.define.AL_BACKEND_UDA=OFF \ + -C skbuild.cmake.define.AL_PYTHON_BINDINGS=ON + +All CMake configuration options described in the :ref:`Configuration options` section +can be passed using this method. The option names remain the same, but are prefixed with +``-C skbuild.cmake.define.``. + + +Optional: Test the IMAS-Core +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Following snippet shows how to run the test with pytest. Just ensure that you have +AL_PYTHON_BINDINGS-ON in cmake configuration. +If you set either of the options ``AL_EXAMPLES`` or ``AL_TESTS`` to ``ON``, you can run +the corresponding test programs as follows: + +.. code-block:: bash + + python3 -m venv build/pip_install + source build/pip_install/bin/activate + pip install --upgrade pip wheel + pip install numpy + set -x + pip install --find-links=build/dist imas-core[test,cov] + pytest --junitxml results.xml --cov imas_core --cov-report xml --cov-report html + coverage2clover -i coverage.xml -o clover.xml + + +Use the IMAS-Core +~~~~~~~~~~~~~~~~~ + +After installing the IMAS-Core, you need to ensure that your code can find the installed +Access Layer. To help you with this, a file ``al_env.sh`` is installed. You can +``source`` this file to set all required environment variables: + +.. code-block:: bash + :caption: Set environment variables (replace ```` with your install folder) + + source /bin/al_env.sh + +You may want to add this to your ``$HOME/.bashrc`` file to automatically make the IMAS-Core + installation available for you. + +.. note:: + + To use a ``public`` dataset, you also need to set the ``IMAS_HOME`` environment + variable. For example, on SDCC, this would be ``export IMAS_HOME=/work/imas``. + + Some programs may rely on an environment variable ``IMAS_VERSION`` to detect which + version of the data dictionary is used in the current IMAS environment. You may set + it manually with the DD version you've build theens-user API with, for example: ``export + IMAS_VERSION=3.41.0``. + +Once you have set the required environment variables, you may continue Using the +IMAS-Core. + +If IMAS-Core is built with Python bindings, you can also use the Python bindings with imas-python. +`imas_python `_. Just install with `pip install imas-python` +and you can use the Python bindings. more information is here `imas-python `_. + + +Next Steps +---------- + +For comprehensive examples and advanced usage patterns, see: + +- `IMAS-Python Documentation `_ - High-level interface with detailed examples +- :doc:`backends_guide` - Learn about different data backends +- :doc:`index` - Start using IMAS-Core with Python diff --git a/docs/source/user_guide/uris_guide.rst b/docs/source/user_guide/uris_guide.rst new file mode 100644 index 00000000..d6f8553b --- /dev/null +++ b/docs/source/user_guide/uris_guide.rst @@ -0,0 +1,41 @@ +Data entry URIs +=============== + +Data entry URIs specify where and how IMAS data is stored (or should be stored +to). When you load or store IMAS data, you +need to provide a data entry URI. + +This page documents the URI structure and the options that are supported. +For the complete official IMAS URI scheme specification, see the +`IMAS Access-Layer URI Scheme Documentation `_. + + +Data entry URI structure +------------------------ + +The general structure of an IMAS URI is the following, with optional elements +indicated with square brackets: + + +.. code-block:: text + + imas:[//host/]backend?query + +Let's break down each of the components: + +1. ``imas:`` this part indicates that this is an IMAS URI +2. ``host`` when the data is located at another machine, you use this + section to indicate the address of that machine. See the UDA backend section + in :doc:`backends_guide` for further details. +3. ``backend`` select the Access Layer backend. See :doc:`backends_guide` for the + options. +4. ``query`` the query consists of ``key=value`` pairs, separated by a + semicolon ``;``. See :doc:`backends_guide` for further details. + +.. + Commenting this out, as no backend currently supports URI fragments + + 5. ``fragment`` In order to identify a subset from a given data-entry a + ``fragment`` can be added to the URI. Such ``fragment``, which starts with a + hash ``#``, is optional and allows to identify a specific IDS, or a part of + an IDS. See :ref:`URI fragment` for further details. From 63bb0415390238b775da0c5bbd99b57adb980488 Mon Sep 17 00:00:00 2001 From: Prasad Date: Mon, 8 Dec 2025 10:24:17 +0100 Subject: [PATCH 10/44] fix badges, links and readthedocs (#9) --- .github/workflows/wheels.yml | 108 ++++++++++++++++++++++++++++++++++- .readthedocs.yml | 2 - README.md | 28 ++++----- pyproject.toml | 5 +- 4 files changed, 123 insertions(+), 20 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index d47bc269..c66938a4 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -13,6 +13,32 @@ jobs: # Github Actions doesn't support pairing matrix values together include: + - os: ubuntu-24.04 + triplet: x64-linux + python: 39 + cibw_platform: linux + cibw_archs: x86_64 + platform_id: manylinux_x86_64 + manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: ubuntu-24.04 + triplet: x64-linux + python: 310 + cibw_platform: linux + cibw_archs: x86_64 + platform_id: manylinux_x86_64 + manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + - os: ubuntu-24.04 triplet: x64-linux python: 311 @@ -23,13 +49,65 @@ jobs: AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF AL_BACKEND_UDA: AL_BACKEND_UDA=ON - UDA_REF: "2.8.1" + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: ubuntu-24.04 + triplet: x64-linux + python: 312 + cibw_platform: linux + cibw_archs: x86_64 + platform_id: manylinux_x86_64 + manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: ubuntu-24.04 + triplet: x64-linux + python: 313 + cibw_platform: linux + cibw_archs: x86_64 + platform_id: manylinux_x86_64 + manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" FMT_REF: "11.1.4" # # - os: macos-13 # # python: 311 # # platform_id: macosx_x86_64 + - os: windows-2022 + triplet: x64-windows + python: 39 + platform_id: win_amd64 + cibw_platform: windows + cibw_archs: AMD64 + manylinux_image: windows + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: windows-2022 + triplet: x64-windows + python: 310 + platform_id: win_amd64 + cibw_platform: windows + cibw_archs: AMD64 + manylinux_image: windows + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + - os: windows-2022 triplet: x64-windows python: 311 @@ -40,7 +118,33 @@ jobs: AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF AL_BACKEND_UDA: AL_BACKEND_UDA=OFF - UDA_REF: "2.8.1" + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: windows-2022 + triplet: x64-windows + python: 312 + platform_id: win_amd64 + cibw_platform: windows + cibw_archs: AMD64 + manylinux_image: windows + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + + - os: windows-2022 + triplet: x64-windows + python: 313 + platform_id: win_amd64 + cibw_platform: windows + cibw_archs: AMD64 + manylinux_image: windows + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" FMT_REF: "11.1.4" steps: diff --git a/.readthedocs.yml b/.readthedocs.yml index 50c7ffd0..640bc795 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -10,8 +10,6 @@ build: python: install: - - method: pip - path: . - requirements: docs/requirements.txt sphinx: diff --git a/README.md b/README.md index 4d9d8883..18080c27 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # IMAS-Core -[![Build Status](https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml)](https://github.com/iterorganization/IMAS-Core/actions) -[![License](https://github.com/iterorganization/IMAS-Core/blob/develop/LICENSE.txt)](LICENSE) +[![Build Status](https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml/badge.svg)](https://github.com/iterorganization/IMAS-Core/actions) +[![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](LICENSE.txt) **IMAS-Core** is a lowlevel library with Python bindings for reading and writing fusion experiment data in standard IMAS format. @@ -51,7 +51,7 @@ python -c "import imas; print(imas.__version__)" ### For Developers -See [Building from Source](docs2/source/developers/building_from_source.rst) for detailed build instructions. +See [Building from Source](docs/source/user_guide/installation.rst) for detailed build instructions. ## Using IMAS-Core with High-Level Languages @@ -84,13 +84,13 @@ Then use IMAS-Core from your preferred language: ## Documentation -- **[Getting Started](docs2/source/user_guide/quick_start.rst)** - 5-minute quick start -- **[User Guide](docs2/source/user_guide/index.rst)** - Complete user documentation -- **[API Reference](docs2/source/reference/python_api.rst)** - Python API details -- **[Backends](docs2/source/backends/index.rst)** - Available data backends -- **[Tutorials](docs2/source/tutorials/index.rst)** - Practical examples -- **[FAQ](docs2/source/faq.rst)** - Frequently asked questions -- **[Troubleshooting](docs2/source/troubleshooting.rst)** - Common issues & solutions +- **[User Guide](docs/source/user_guide/index.rst)** - Complete user documentation +- **[Installation Guide](docs/source/user_guide/installation.rst)** - Installation instructions +- **[Backends Guide](docs/source/user_guide/backends_guide.rst)** - Available data backends +- **[URIs Guide](docs/source/user_guide/uris_guide.rst)** - Data entry URI documentation +- **[Configuration](docs/source/user_guide/configuration.rst)** - Configuration options +- **[FAQ](docs/source/faq.rst)** - Frequently asked questions +- **[Troubleshooting](docs/source/troubleshooting.rst)** - Common issues & solutions ## System Requirements @@ -121,8 +121,8 @@ print(os.path.exists('/path/to/file.h5')) ``` **Need help?** -- See [Troubleshooting Guide](docs2/source/troubleshooting.rst) -- Check [FAQ](docs2/source/faq.rst) +- See [Troubleshooting Guide](docs/source/troubleshooting.rst) +- Check [FAQ](docs/source/faq.rst) - Open an [Issue on GitHub](https://github.com/iterorganization/IMAS-Core/issues) ## What's Included? @@ -142,11 +142,11 @@ To build IMAS-Core from source: ```bash git clone https://github.com/iterorganization/IMAS-Core.git cd IMAS-Core -cmake -Bbuild -GNinja -DAL_PYTHON_BINDINGS=ON -DCMAKE_INSTALL_PREFIX="$(pwd)/test-install +cmake -Bbuild -GNinja -DAL_PYTHON_BINDINGS=ON -DCMAKE_INSTALL_PREFIX="$(pwd)/test-install" cmake --build build --target install ``` -See [Developer Guide](docs2/source/developers/index.rst) for detailed instructions. +See [Developer Guide](docs/source/developers/index.rst) for detailed instructions. ## Links diff --git a/pyproject.toml b/pyproject.toml index c57d21b8..d6e383c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,8 +39,9 @@ build-backend = "scikit_build_core.build" [tool.cibuildwheel] # build-verbosity = 1 # CIBW_CONFIG_SETTINGS = "cmake.args='--debug-output'" -# Only build wheels for CPython 3.11 -build = "cp311-*" +# Default build configuration (can be overridden by CIBW_BUILD env var in workflows) +# The GitHub Actions workflow builds for Python 3.9, 3.10, 3.11, 3.12, and 3.13 via matrix strategy +build = "cp39-* cp310-* cp311-* cp312-* cp313-*" # Skip 32-bit builds skip = ["*-win32", "*-manylinux_i686"] From 8ab3dfe44ee85629c2af4dfd67477ae2c05768e0 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Mon, 8 Dec 2025 15:55:14 +0100 Subject: [PATCH 11/44] Fix CMake lookup by using find_package(PThreads4W CONFIG REQUIRED) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35d3197e..7be9f9d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,7 @@ endif() # ############################################################################## if(WIN32) - find_package(PThreads4W REQUIRED) + find_package(PThreads4W CONFIG REQUIRED) find_package(dlfcn-win32 CONFIG REQUIRED) endif() From 9ffcb95f9b167b2446acdd997e778e2f8f136fe0 Mon Sep 17 00:00:00 2001 From: Prasad Date: Tue, 9 Dec 2025 08:22:42 +0100 Subject: [PATCH 12/44] fix the badge and version issue (#11) --- .github/workflows/wheels.yml | 28 +--------------------------- README.md | 10 +++++----- docs/source/conf.py | 16 ++++++++++++---- docs/source/index.rst | 11 +++++++++-- 4 files changed, 27 insertions(+), 38 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index c66938a4..b6e859eb 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: build_wheels: - name: build_wheels (${{ matrix.platform_id }}, ${{ matrix.AL_BACKEND_HDF5 }}, ${{ matrix.AL_BACKEND_MDSPLUS }}, ${{ matrix.AL_BACKEND_UDA }}) + name: build_wheels (Python ${{ matrix.python }}, ${{ matrix.platform_id }}, ${{ matrix.AL_BACKEND_HDF5 }}, ${{ matrix.AL_BACKEND_MDSPLUS }}, ${{ matrix.AL_BACKEND_UDA }}) runs-on: ${{ matrix.os }} strategy: # Ensure that a wheel builder finishes even if another fails @@ -13,19 +13,6 @@ jobs: # Github Actions doesn't support pairing matrix values together include: - - os: ubuntu-24.04 - triplet: x64-linux - python: 39 - cibw_platform: linux - cibw_archs: x86_64 - platform_id: manylinux_x86_64 - manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 - AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON - AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=ON - UDA_REF: "2.9.3" - FMT_REF: "11.1.4" - - os: ubuntu-24.04 triplet: x64-linux python: 310 @@ -82,19 +69,6 @@ jobs: # # python: 311 # # platform_id: macosx_x86_64 - - os: windows-2022 - triplet: x64-windows - python: 39 - platform_id: win_amd64 - cibw_platform: windows - cibw_archs: AMD64 - manylinux_image: windows - AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON - AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF - UDA_REF: "2.9.3" - FMT_REF: "11.1.4" - - os: windows-2022 triplet: x64-windows python: 310 diff --git a/README.md b/README.md index 18080c27..d487ef9b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # IMAS-Core -[![Build Status](https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml/badge.svg)](https://github.com/iterorganization/IMAS-Core/actions) -[![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](LICENSE.txt) +[![Build](https://github.com/iterorganization/IMAS-Core/actions/workflows/wheels.yml/badge.svg?branch=develop)](https://github.com/iterorganization/IMAS-Core/actions/workflows/wheels.yml) +[![Open Issues](https://img.shields.io/github/issues/iterorganization/IMAS-Core)](https://github.com/iterorganization/IMAS-Core/issues) +[![License: LGPL-3.0](https://img.shields.io/github/license/iterorganization/IMAS-Core?label=License)](https://github.com/iterorganization/IMAS-Core/blob/main/LICENSE.txt) + **IMAS-Core** is a lowlevel library with Python bindings for reading and writing fusion experiment data in standard IMAS format. @@ -15,8 +17,6 @@ This repository contains the **Lowlevel components of the Access Layer**: - **MDS+ model logic** for creating the models required by the MDS+ backend - - ## Quick Installation Install IMAS-Core with a single command: @@ -94,7 +94,7 @@ Then use IMAS-Core from your preferred language: ## System Requirements -- **Python**: 3.9 or newer +- **Python**: 3.8 or newer - **OS**: Linux, macOS, or Windows - **pip**: 19.0 or newer diff --git a/docs/source/conf.py b/docs/source/conf.py index adc63c0b..02739a0b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -10,20 +10,28 @@ project = 'IMAS-Core' copyright = f"{datetime.datetime.now().year}, ITER Organization" author = 'ITER Organization' -release = '1.0.0' # Try to get version from git try: - version = subprocess.check_output(["git", "describe"], stderr=subprocess.DEVNULL).decode().strip() + full_version = subprocess.check_output(["git", "describe"], stderr=subprocess.DEVNULL).decode().strip() last_tag = subprocess.check_output(["git", "describe", "--abbrev=0"], stderr=subprocess.DEVNULL).decode().strip() - is_develop = version != last_tag + is_develop = full_version != last_tag + # Use full version for both version and release when in development + if is_develop: + release = full_version # Show full version like "5.5.2-12-g63bb0415" + version = full_version + else: + release = last_tag # Show just the tag like "5.5.2" + version = last_tag except (subprocess.CalledProcessError, FileNotFoundError): version = "dev" + release = "dev" last_tag = "dev" is_develop = True html_context = { - "is_develop": is_develop + "is_develop": is_develop, + "version": version } language = "en" diff --git a/docs/source/index.rst b/docs/source/index.rst index 678df278..12217cbc 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,7 +1,14 @@ IMAS-Core Documentation ======================= -.. image:: https://github.com/iterorganization/IMAS-Core/actions/workflows/cmake.yaml/badge.svg - :target: https://github.com/iterorganization/IMAS-Core/actions + +.. image:: https://img.shields.io/github/issues/iterorganization/IMAS-Core + :target: https://github.com/iterorganization/IMAS-Core/issues + :alt: Open Issues + +.. image:: https://img.shields.io/github/license/iterorganization/IMAS-Core + :target: https://github.com/iterorganization/IMAS-Core/blob/main/LICENSE.txt + :alt: License + What is IMAS? ------------- From 0934f3350dee2afb978413f75c77b76d288dc815 Mon Sep 17 00:00:00 2001 From: Olivier Hoenen Date: Tue, 9 Dec 2025 08:43:24 +0100 Subject: [PATCH 13/44] Replace badge in doc --- docs/source/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 12217cbc..cc73979f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,9 +1,9 @@ IMAS-Core Documentation ======================= -.. image:: https://img.shields.io/github/issues/iterorganization/IMAS-Core - :target: https://github.com/iterorganization/IMAS-Core/issues - :alt: Open Issues +.. image:: https://github.com/iterorganization/IMAS-Core/actions/workflows/wheels.yml/badge.svg?branch=develop + :target: https://github.com/iterorganization/IMAS-Core/actions/workflows/wheels.yml + :alt: Build Status .. image:: https://img.shields.io/github/license/iterorganization/IMAS-Core :target: https://github.com/iterorganization/IMAS-Core/blob/main/LICENSE.txt From 5e06e59ac688a64f82c050a7877bf4abc6e13541 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Thu, 8 Jan 2026 10:49:27 +0100 Subject: [PATCH 14/44] Adding config for macos, still untested. --- .github/workflows/wheels.yml | 44 +++++++++++++++++++++++++++++++++--- CMakeLists.txt | 9 ++++++++ pyproject.toml | 8 +++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index b6e859eb..cd29399b 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -65,10 +65,26 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" - # # - os: macos-13 - # # python: 311 - # # platform_id: macosx_x86_64 + - os: macos-13 + triplet: x64-osx + python: 311 + platform_id: macosx_x86_64 + cibw_platform: macos + cibw_archs: x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + - os: macos-14 + triplet: arm64-osx + python: 311 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + - os: windows-2022 triplet: x64-windows python: 310 @@ -255,6 +271,28 @@ jobs: output-dir: wheelhouse config-file: "{package}/pyproject.toml" + - uses: pypa/cibuildwheel@v3.0.0 + if: startsWith(matrix.os, 'macos-') + env: + CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} + CIBW_PLATFORM: macos + CIBW_ARCHS: ${{ matrix.cibw_archs }} + + CIBW_CONFIG_SETTINGS: > + cmake.define.${{ matrix.AL_BACKEND_HDF5 }} + cmake.define.${{ matrix.AL_BACKEND_MDSPLUS }} + cmake.define.${{ matrix.AL_BACKEND_UDA }} + + # Dependency installation + CIBW_BEFORE_ALL_MACOS: > + brew update; + brew install cmake pkg-config boost hdf5 libomp; + + with: + package-dir: . + output-dir: wheelhouse + config-file: "{package}/pyproject.toml" + - uses: actions/upload-artifact@v4 with: name: cibw-wheels-cp${{ matrix.python }}-${{ matrix.platform_id }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 7be9f9d4..baad7c86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,15 @@ if(NOT PROJECT_VERSION_TWEAK EQUAL 0) message("Building a development version of the Access Layer core") endif() +# macOS RPATH handling +# ############################################################################## + +if(APPLE) + set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_INSTALL_RPATH "@loader_path") + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +endif() + # Dependencies # ############################################################################## diff --git a/pyproject.toml b/pyproject.toml index d6e383c8..0aa54fac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,14 @@ VCPKG_KEEP_ENV_VARS = "VCPKG_ROOT;CMAKE_PREFIX_PATH;CMAKE_TOOLCHAIN_FILE;CMAKE_P before-build = "bash ./ci/wheels/cibw_before_build_win.sh" repair-wheel-command = "bash ./ci/wheels/repair_windows.sh {wheel} {dest_dir}" +[tool.cibuildwheel.macos.environment] +CMAKE_PREFIX_PATH = "/opt/homebrew;/usr/local" +PKG_CONFIG_PATH = "/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" +MACOSX_DEPLOYMENT_TARGET = "11.0" + +[tool.cibuildwheel.macos] +repair-wheel-command = "delocate-wheel -w {dest_dir} {wheel}" + [tool.scikit-build.cmake.define] BUILD_SHARED_LIBS = "ON" DOCS_ONLY = { env = "DOCS_ONLY", default = "OFF" } From a1e0d32c6237d388e2086b53f956ec41979fd311 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 09:57:43 +0100 Subject: [PATCH 15/44] Fixing RPATH issues --- CMakeLists.txt | 5 ++++- python/CMakeLists.txt | 30 +++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index baad7c86..57dbbb75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,8 +74,11 @@ endif() if(APPLE) set(CMAKE_MACOSX_RPATH ON) - set(CMAKE_INSTALL_RPATH "@loader_path") + set(CMAKE_INSTALL_RPATH "@loader_path/../imas_core.libs") set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) + # force UDA off for now: + message(STATUS "Disabling UDA backend on macOS") + set(AL_BACKEND_UDA OFF CACHE BOOL "UDA backend" FORCE) endif() diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 0f213273..07267e48 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -7,8 +7,32 @@ python_add_library(_al_lowlevel MODULE ${_al_lowlevel_source} WITH_SOABI) python_add_library(al_defs MODULE ${al_defs_source} WITH_SOABI) target_link_libraries(_al_lowlevel PRIVATE Python::NumPy al) target_link_libraries(al_defs PRIVATE Python::NumPy al) -set_target_properties(al PROPERTIES INSTALL_RPATH $ORIGIN) -set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH $ORIGIN/../imas_core.libs) + +# Handling RPATH in Linux and macOS: +if(APPLE) + set(_IMAS_RPATH_SELF "@loader_path") + set(_IMAS_RPATH_LIBS "@loader_path/../imas_core.libs") +elseif(UNIX) + set(_IMAS_RPATH_SELF "$ORIGIN") + set(_IMAS_RPATH_LIBS "$ORIGIN/../imas_core.libs") +else() + # Windows: no RPATH + set(_IMAS_RPATH_SELF "") + set(_IMAS_RPATH_LIBS "") +endif() + +if(_IMAS_RPATH_SELF) + set_target_properties(al PROPERTIES + INSTALL_RPATH "${_IMAS_RPATH_SELF}" + ) +endif() + +if(_IMAS_RPATH_LIBS) + set_target_properties(_al_lowlevel al_defs PROPERTIES + INSTALL_RPATH "${_IMAS_RPATH_LIBS}" + ) +endif() + install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) @@ -48,4 +72,4 @@ install( "ext-ms-" # Windows extension DLLs POST_EXCLUDE_REGEXES ${POST_EXCLUDE_PATTERNS} ) -install(TARGETS _al_lowlevel al_defs DESTINATION imas_core) \ No newline at end of file +install(TARGETS _al_lowlevel al_defs DESTINATION imas_core) From c96598b764a9e695daeaad0375272d547f41ac7d Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 10:27:00 +0100 Subject: [PATCH 16/44] Cleaning main CMakeLists. Seems to work on macOS now. --- CMakeLists.txt | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57dbbb75..f7ff0378 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,16 +69,11 @@ if(NOT PROJECT_VERSION_TWEAK EQUAL 0) message("Building a development version of the Access Layer core") endif() -# macOS RPATH handling -# ############################################################################## - if(APPLE) - set(CMAKE_MACOSX_RPATH ON) - set(CMAKE_INSTALL_RPATH "@loader_path/../imas_core.libs") - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) - # force UDA off for now: - message(STATUS "Disabling UDA backend on macOS") + # Disable extra backends for now: + message(STATUS "Disabling UDA and MDSPlus backends on macOS") set(AL_BACKEND_UDA OFF CACHE BOOL "UDA backend" FORCE) + set(AL_BACKEND_MDSPLUS OFF CACHE BOOL "MDSPlus backend" FORCE) endif() From 5d51fa9884be4739eec0ab240d47509b77e1cc23 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 10:57:11 +0100 Subject: [PATCH 17/44] ensuring arm64 when building the wheel on macos --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 0aa54fac..51dd98e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,6 +67,7 @@ PKG_CONFIG_PATH = "/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" MACOSX_DEPLOYMENT_TARGET = "11.0" [tool.cibuildwheel.macos] +archs = ["arm64"] repair-wheel-command = "delocate-wheel -w {dest_dir} {wheel}" [tool.scikit-build.cmake.define] From 38d42e12d6db70dd3e0fa22dbc36c83e78ed5765 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 11:06:05 +0100 Subject: [PATCH 18/44] Removing github actions for macOS x86 for now, will be added later on request. --- .github/workflows/wheels.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index cd29399b..f8c39e50 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -65,16 +65,6 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" - - os: macos-13 - triplet: x64-osx - python: 311 - platform_id: macosx_x86_64 - cibw_platform: macos - cibw_archs: x86_64 - AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON - AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF - - os: macos-14 triplet: arm64-osx python: 311 From c63d4f4d4c823298cce38e06529ac692afb9ed45 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 11:18:56 +0100 Subject: [PATCH 19/44] Fixing macOS version from 11 to 14 to ensure arm only, no x86 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 51dd98e0..9a6d0ee5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ repair-wheel-command = "bash ./ci/wheels/repair_windows.sh {wheel} {dest_dir}" [tool.cibuildwheel.macos.environment] CMAKE_PREFIX_PATH = "/opt/homebrew;/usr/local" PKG_CONFIG_PATH = "/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" -MACOSX_DEPLOYMENT_TARGET = "11.0" +MACOSX_DEPLOYMENT_TARGET = "14.0" [tool.cibuildwheel.macos] archs = ["arm64"] From 1ece6005bc64a9e07fdeaa8479a3d4cd4949b384 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 18:51:02 +0100 Subject: [PATCH 20/44] Improving legibility in macOS section in cmake --- python/CMakeLists.txt | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 07267e48..71f8b780 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -8,31 +8,15 @@ python_add_library(al_defs MODULE ${al_defs_source} WITH_SOABI) target_link_libraries(_al_lowlevel PRIVATE Python::NumPy al) target_link_libraries(al_defs PRIVATE Python::NumPy al) -# Handling RPATH in Linux and macOS: +# Handling RPATH in macOS: if(APPLE) - set(_IMAS_RPATH_SELF "@loader_path") - set(_IMAS_RPATH_LIBS "@loader_path/../imas_core.libs") -elseif(UNIX) - set(_IMAS_RPATH_SELF "$ORIGIN") - set(_IMAS_RPATH_LIBS "$ORIGIN/../imas_core.libs") + set_target_properties(al PROPERTIES INSTALL_RPATH "@loader_path") + set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH "@loader_path/../imas_core.libs") else() - # Windows: no RPATH - set(_IMAS_RPATH_SELF "") - set(_IMAS_RPATH_LIBS "") + set_target_properties(al PROPERTIES INSTALL_RPATH $ORIGIN) + set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH $ORIGIN/../imas_core.libs) endif() - -if(_IMAS_RPATH_SELF) - set_target_properties(al PROPERTIES - INSTALL_RPATH "${_IMAS_RPATH_SELF}" - ) -endif() - -if(_IMAS_RPATH_LIBS) - set_target_properties(_al_lowlevel al_defs PROPERTIES - INSTALL_RPATH "${_IMAS_RPATH_LIBS}" - ) -endif() - + install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) From b44579c617abfb6b34a14bccccb8976caaa6aa38 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Mon, 12 Jan 2026 19:00:54 +0100 Subject: [PATCH 21/44] Fixing missing override warnings --- src/no_backend.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/no_backend.h b/src/no_backend.h index d3f8d3ac..8b46e6b2 100644 --- a/src/no_backend.h +++ b/src/no_backend.h @@ -29,14 +29,14 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend ~NoBackend() {}; void openPulse(DataEntryContext *ctx, - int mode); + int mode) override; void closePulse(DataEntryContext *ctx, - int mode); + int mode) override; - void beginAction(OperationContext *ctx); + void beginAction(OperationContext *ctx) override; - void endAction(Context *ctx); + void endAction(Context *ctx) override; void writeData(Context *ctx, std::string fieldname, @@ -44,7 +44,7 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend void* data, int datatype, int dim, - int* size); + int* size) override; int readData(Context *ctx, std::string fieldname, @@ -52,26 +52,26 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend void** data, int* datatype, int* dim, - int* size); + int* size) override; void deleteData(OperationContext *ctx, - std::string path); + std::string path) override; void beginArraystructAction(ArraystructContext *ctx, - int *size); + int *size) override; - std::pair getVersion(DataEntryContext *ctx); + std::pair getVersion(DataEntryContext *ctx) override; void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation() { + bool supportsTimeDataInterpolation() override { return false; } - void initDataInterpolationComponent() { + void initDataInterpolationComponent() override { } - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return false; } From 01a06a0741b13cdcd3d1b8c5145b62002616b080 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Tue, 13 Jan 2026 08:09:29 +0100 Subject: [PATCH 22/44] Feature/macos arm (#20) --- .github/workflows/wheels.yml | 36 ++++++++++++++++++++++++++++++++---- CMakeLists.txt | 7 +++++++ pyproject.toml | 9 +++++++++ python/CMakeLists.txt | 14 +++++++++++--- src/no_backend.h | 24 ++++++++++++------------ 5 files changed, 71 insertions(+), 19 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index b6e859eb..f8c39e50 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -65,10 +65,16 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" - # # - os: macos-13 - # # python: 311 - # # platform_id: macosx_x86_64 - + - os: macos-14 + triplet: arm64-osx + python: 311 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + - os: windows-2022 triplet: x64-windows python: 310 @@ -255,6 +261,28 @@ jobs: output-dir: wheelhouse config-file: "{package}/pyproject.toml" + - uses: pypa/cibuildwheel@v3.0.0 + if: startsWith(matrix.os, 'macos-') + env: + CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} + CIBW_PLATFORM: macos + CIBW_ARCHS: ${{ matrix.cibw_archs }} + + CIBW_CONFIG_SETTINGS: > + cmake.define.${{ matrix.AL_BACKEND_HDF5 }} + cmake.define.${{ matrix.AL_BACKEND_MDSPLUS }} + cmake.define.${{ matrix.AL_BACKEND_UDA }} + + # Dependency installation + CIBW_BEFORE_ALL_MACOS: > + brew update; + brew install cmake pkg-config boost hdf5 libomp; + + with: + package-dir: . + output-dir: wheelhouse + config-file: "{package}/pyproject.toml" + - uses: actions/upload-artifact@v4 with: name: cibw-wheels-cp${{ matrix.python }}-${{ matrix.platform_id }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 7be9f9d4..f7ff0378 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,13 @@ if(NOT PROJECT_VERSION_TWEAK EQUAL 0) message("Building a development version of the Access Layer core") endif() +if(APPLE) + # Disable extra backends for now: + message(STATUS "Disabling UDA and MDSPlus backends on macOS") + set(AL_BACKEND_UDA OFF CACHE BOOL "UDA backend" FORCE) + set(AL_BACKEND_MDSPLUS OFF CACHE BOOL "MDSPlus backend" FORCE) +endif() + # Dependencies # ############################################################################## diff --git a/pyproject.toml b/pyproject.toml index d6e383c8..9a6d0ee5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,15 @@ VCPKG_KEEP_ENV_VARS = "VCPKG_ROOT;CMAKE_PREFIX_PATH;CMAKE_TOOLCHAIN_FILE;CMAKE_P before-build = "bash ./ci/wheels/cibw_before_build_win.sh" repair-wheel-command = "bash ./ci/wheels/repair_windows.sh {wheel} {dest_dir}" +[tool.cibuildwheel.macos.environment] +CMAKE_PREFIX_PATH = "/opt/homebrew;/usr/local" +PKG_CONFIG_PATH = "/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" +MACOSX_DEPLOYMENT_TARGET = "14.0" + +[tool.cibuildwheel.macos] +archs = ["arm64"] +repair-wheel-command = "delocate-wheel -w {dest_dir} {wheel}" + [tool.scikit-build.cmake.define] BUILD_SHARED_LIBS = "ON" DOCS_ONLY = { env = "DOCS_ONLY", default = "OFF" } diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 0f213273..71f8b780 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -7,8 +7,16 @@ python_add_library(_al_lowlevel MODULE ${_al_lowlevel_source} WITH_SOABI) python_add_library(al_defs MODULE ${al_defs_source} WITH_SOABI) target_link_libraries(_al_lowlevel PRIVATE Python::NumPy al) target_link_libraries(al_defs PRIVATE Python::NumPy al) -set_target_properties(al PROPERTIES INSTALL_RPATH $ORIGIN) -set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH $ORIGIN/../imas_core.libs) + +# Handling RPATH in macOS: +if(APPLE) + set_target_properties(al PROPERTIES INSTALL_RPATH "@loader_path") + set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH "@loader_path/../imas_core.libs") +else() + set_target_properties(al PROPERTIES INSTALL_RPATH $ORIGIN) + set_target_properties(_al_lowlevel al_defs PROPERTIES INSTALL_RPATH $ORIGIN/../imas_core.libs) +endif() + install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) install(FILES $ DESTINATION imas_core.libs) @@ -48,4 +56,4 @@ install( "ext-ms-" # Windows extension DLLs POST_EXCLUDE_REGEXES ${POST_EXCLUDE_PATTERNS} ) -install(TARGETS _al_lowlevel al_defs DESTINATION imas_core) \ No newline at end of file +install(TARGETS _al_lowlevel al_defs DESTINATION imas_core) diff --git a/src/no_backend.h b/src/no_backend.h index d3f8d3ac..8b46e6b2 100644 --- a/src/no_backend.h +++ b/src/no_backend.h @@ -29,14 +29,14 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend ~NoBackend() {}; void openPulse(DataEntryContext *ctx, - int mode); + int mode) override; void closePulse(DataEntryContext *ctx, - int mode); + int mode) override; - void beginAction(OperationContext *ctx); + void beginAction(OperationContext *ctx) override; - void endAction(Context *ctx); + void endAction(Context *ctx) override; void writeData(Context *ctx, std::string fieldname, @@ -44,7 +44,7 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend void* data, int datatype, int dim, - int* size); + int* size) override; int readData(Context *ctx, std::string fieldname, @@ -52,26 +52,26 @@ class IMAS_CORE_LIBRARY_API NoBackend : public Backend void** data, int* datatype, int* dim, - int* size); + int* size) override; void deleteData(OperationContext *ctx, - std::string path); + std::string path) override; void beginArraystructAction(ArraystructContext *ctx, - int *size); + int *size) override; - std::pair getVersion(DataEntryContext *ctx); + std::pair getVersion(DataEntryContext *ctx) override; void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation() { + bool supportsTimeDataInterpolation() override { return false; } - void initDataInterpolationComponent() { + void initDataInterpolationComponent() override { } - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return false; } From a34ef25db7c9332b4b74ed8cef815fc26b7bad19 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Thu, 15 Jan 2026 15:32:41 +0100 Subject: [PATCH 23/44] Adding support for python versions 3.10 to 3.13, like the other architectures. --- .github/workflows/wheels.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index f8c39e50..6c6f0703 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -65,6 +65,16 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" + - os: macos-14 + triplet: arm64-osx + python: 310 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + - os: macos-14 triplet: arm64-osx python: 311 @@ -74,6 +84,26 @@ jobs: AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + + - os: macos-14 + triplet: arm64-osx + python: 312 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + + - os: macos-14 + triplet: arm64-osx + python: 313 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF - os: windows-2022 triplet: x64-windows From c6ce7a5f08b4d4c0992a3fc2fc39b60d6f3cd7de Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 16 Jan 2026 11:16:30 +0100 Subject: [PATCH 24/44] Adding missing override modifiers to avoid compilation warnings --- src/uda/uda_backend.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/uda/uda_backend.h b/src/uda/uda_backend.h index faa32f4b..0869aa3c 100644 --- a/src/uda/uda_backend.h +++ b/src/uda/uda_backend.h @@ -184,13 +184,13 @@ class IMAS_CORE_LIBRARY_API UDABackend : public Backend void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation(); + bool supportsTimeDataInterpolation() override; // Do nothing, UDA plugin will need to initDataInterpolationComponent on data backend when it knows which backend // is being used, i.e. when a URI is given. - void initDataInterpolationComponent() {} + void initDataInterpolationComponent() override {} - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return this->supportsTimeDataInterpolation(); } From 72dffdd5b0a00eab278756c6aa12a5dfb5eebb14 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 16 Jan 2026 13:07:46 +0100 Subject: [PATCH 25/44] macOS ARM: all python versions available and UDA enabled. --- .github/workflows/wheels.yml | 32 +++++++++++++++++++++++++------- CMakeLists.txt | 5 ++--- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 6c6f0703..8a811dd0 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -73,7 +73,8 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" - os: macos-14 triplet: arm64-osx @@ -83,7 +84,8 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" - os: macos-14 triplet: arm64-osx @@ -93,7 +95,8 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" - os: macos-14 triplet: arm64-osx @@ -103,7 +106,8 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" - os: windows-2022 triplet: x64-windows @@ -303,10 +307,24 @@ jobs: cmake.define.${{ matrix.AL_BACKEND_MDSPLUS }} cmake.define.${{ matrix.AL_BACKEND_UDA }} - # Dependency installation + # Dependency installationinto /tmp CIBW_BEFORE_ALL_MACOS: > - brew update; - brew install cmake pkg-config boost hdf5 libomp; + brew update >&2; + brew install cmake pkg-config boost hdf5 libomp ninja fmt spdlog libxml2 openssl capnp libmemcached >&2; + git clone --depth 1 --branch ${{ matrix.UDA_REF }} https://github.com/ukaea/UDA.git >&2 && + cd UDA >&2; + cmake -G Ninja -B build . \ + -DBUILD_SHARED_LIBS=ON \ + -DSSLAUTHENTICATION=ON \ + -DCLIENT_ONLY=ON \ + -DENABLE_CAPNP=ON \ + -DCMAKE_INSTALL_PREFIX=/tmp/uda-install >&2 && + cmake --build build --target install -j >&2; + + # Where to find the dependencies + CIBW_ENVIRONMENT_MACOS: > + CMAKE_PREFIX_PATH="/tmp/uda-install:/opt/homebrew:/usr/local" + PKG_CONFIG_PATH="/tmp/uda-install/lib/pkgconfig:/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" with: package-dir: . diff --git a/CMakeLists.txt b/CMakeLists.txt index f7ff0378..d7ad6ee1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,9 +70,8 @@ if(NOT PROJECT_VERSION_TWEAK EQUAL 0) endif() if(APPLE) - # Disable extra backends for now: - message(STATUS "Disabling UDA and MDSPlus backends on macOS") - set(AL_BACKEND_UDA OFF CACHE BOOL "UDA backend" FORCE) + # Disable MDSPlus: + message(STATUS "Disabling MDSPlus backend on macOS") set(AL_BACKEND_MDSPLUS OFF CACHE BOOL "MDSPlus backend" FORCE) endif() From c9e92a11d5e44829f65fb1c8bc65850e3adad012 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 16 Jan 2026 13:39:07 +0100 Subject: [PATCH 26/44] Adding missing override to virtual functions implementations. --- src/ascii_backend.h | 6 +++--- src/hdf5/hdf5_backend.h | 6 +++--- src/memory_backend.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ascii_backend.h b/src/ascii_backend.h index ef3df61c..fe884e5c 100644 --- a/src/ascii_backend.h +++ b/src/ascii_backend.h @@ -92,15 +92,15 @@ class IMAS_CORE_LIBRARY_API AsciiBackend : public Backend void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation() { + bool supportsTimeDataInterpolation() override { return false; } - void initDataInterpolationComponent() { + void initDataInterpolationComponent() override { throw ALBackendException("ASCII backend does not support time range and time slices operations",LOG); } - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return false; } diff --git a/src/hdf5/hdf5_backend.h b/src/hdf5/hdf5_backend.h index 21ce3511..26bdc001 100644 --- a/src/hdf5/hdf5_backend.h +++ b/src/hdf5/hdf5_backend.h @@ -132,14 +132,14 @@ class HDF5Backend:public Backend { void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation() { + bool supportsTimeDataInterpolation() override { return true; } - void initDataInterpolationComponent() { + void initDataInterpolationComponent() override { } - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return true; } diff --git a/src/memory_backend.h b/src/memory_backend.h index 97c3d24d..e74bcb92 100644 --- a/src/memory_backend.h +++ b/src/memory_backend.h @@ -674,15 +674,15 @@ class IMAS_CORE_LIBRARY_API MemoryBackend:public Backend void get_occurrences(Context* ctx, const char* ids_name, int** occurrences_list, int* size) override; - bool supportsTimeDataInterpolation() { + bool supportsTimeDataInterpolation() override { return false; } - void initDataInterpolationComponent() { + void initDataInterpolationComponent() override { throw ALBackendException("Memory backend does not support time range and time slices operations",LOG); } - bool supportsTimeRangeOperation() { + bool supportsTimeRangeOperation() override { return false; } From 0817e7bde29f7a0fe041d3e0db304db2ee8d472e Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 16 Jan 2026 13:54:56 +0100 Subject: [PATCH 27/44] Adding minimal MACOSX_DEPLOYMENT_TARGET --- .github/workflows/wheels.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 8a811dd0..bba42dd6 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -318,11 +318,13 @@ jobs: -DSSLAUTHENTICATION=ON \ -DCLIENT_ONLY=ON \ -DENABLE_CAPNP=ON \ + -DMACOSX_DEPLOYMENT_TARGET=11.0 \ -DCMAKE_INSTALL_PREFIX=/tmp/uda-install >&2 && cmake --build build --target install -j >&2; # Where to find the dependencies CIBW_ENVIRONMENT_MACOS: > + MACOSX_DEPLOYMENT_TARGET=11.0 CMAKE_PREFIX_PATH="/tmp/uda-install:/opt/homebrew:/usr/local" PKG_CONFIG_PATH="/tmp/uda-install/lib/pkgconfig:/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" From 5c15c59950e98d654137bb64a1f44daa3a1f1c16 Mon Sep 17 00:00:00 2001 From: Maarten Sebregts <110895564+maarten-ic@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:46:45 +0100 Subject: [PATCH 28/44] Add `--no-index` to installation command for imas_core Ensure that pip installs the just-built version of imas_core instead of downloading it from PyPI. --- skbuild.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/skbuild.cmake b/skbuild.cmake index 21668734..ab217342 100644 --- a/skbuild.cmake +++ b/skbuild.cmake @@ -51,6 +51,7 @@ set_target_properties( al-python-bindings PROPERTIES DIST_FOLDER ${CMAKE_CURRENT_BINARY_DIR}/dist/) install(CODE "execute_process(COMMAND ${Python_EXECUTABLE} -m pip install imas_core +--no-index --prefix=${CMAKE_INSTALL_PREFIX} --find-links ${CMAKE_CURRENT_BINARY_DIR}/dist/ )" From 20148709f738431a2473e97c545e73282f9e180a Mon Sep 17 00:00:00 2001 From: Ludovic Fleury Date: Wed, 21 Jan 2026 12:52:41 +0100 Subject: [PATCH 29/44] IMAS-5428: fix --- src/hdf5/hdf5_utils.cpp | 62 ++++++++++++++++++++++++++++------------ src/hdf5/hdf5_utils.h | 4 +-- src/hdf5/hdf5_writer.cpp | 4 +-- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/src/hdf5/hdf5_utils.cpp b/src/hdf5/hdf5_utils.cpp index 3739b61e..78954a74 100644 --- a/src/hdf5/hdf5_utils.cpp +++ b/src/hdf5/hdf5_utils.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include using namespace boost::filesystem; @@ -178,7 +179,10 @@ void HDF5Utils::deleteIDSFile(const std::string &filePath) { void HDF5Utils::deleteMasterFile(const std::string &filePath, hid_t *file_id, std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string &files_directory, std::string &relative_file_path) { if (exists(filePath.c_str())) { - openMasterFile(file_id, filePath); + openMasterFile(file_id, filePath, true); + if (*file_id == -1) { + return; + } initExternalLinks(file_id, opened_IDS_files, files_directory, relative_file_path); deleteIDSFiles(opened_IDS_files, files_directory, relative_file_path); closeMasterFile(file_id); @@ -237,7 +241,7 @@ void HDF5Utils::createIDSFile(OperationContext * ctx, std::string &IDSpulseFile, } -void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only) { +void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only, std::string backend_version) { if (!exists(IDSpulseFile.c_str())) return; *IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); @@ -254,15 +258,34 @@ void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, h } } else { - char error_message[200]; - sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. It might indicate that the file is being currently handled by a writing concurrent process.\n", ctx->getDataobjectName().c_str()); - throw ALBackendException(error_message, LOG); + if (errno == EAGAIN || errno == EACCES || errno == EBUSY) { + char error_message[200]; + sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. It might indicate that the file is being currently handled by a writing concurrent process.\n", ctx->getDataobjectName().c_str()); + throw ALBackendException(error_message, LOG); + } + else { + //H5Eprint(H5E_DEFAULT, stderr); + remove(IDSpulseFile.c_str()); + *IDS_file_id = -2; + + createIDSFile(ctx, IDSpulseFile, backend_version, IDS_file_id); + + //*IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); + + /*if (*IDS_file_id < 0) { + char error_message[200]; + sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. Unknow reason.\n", ctx->getDataobjectName().c_str()); + throw ALBackendException(error_message, LOG); + }*/ + + } + } } } -void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath) { //open master file +void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath, bool for_deletion) { //open master file if (*file_id != -1) return; if (!exists(filePath)) { @@ -276,9 +299,16 @@ void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath) { // if (*file_id < 0) { //have a try now in read only access *file_id = H5Fopen(filePath.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT); if (*file_id < 0) { - std::string message("Unable to open HDF5 master file: "); - message += filePath; - throw ALBackendException(message, LOG); + if (for_deletion) { + remove(filePath.c_str()); + //printf("WARNING: The HDF5 master file '%s' was probably corrupted. It has been deleted and the linked IDS files could not be deleted automatically.\n", filePath.c_str()); + *file_id = -1; + return; + } else { + std::string message("Unable to open HDF5 master file: "); + message += filePath; + throw ALBackendException(message, LOG); + } } else { //printf("master file read successfully with file_id=%d\n", *file_id); @@ -375,17 +405,13 @@ herr_t file_info(hid_t loc_id, const char *IDS_link_name, const H5L_info_t * lin std::string IDSpulseFile = hdf5_utils.getIDSPulseFilePath(od->files_directory, od->relative_file_path, std::string(IDS_link_name)); if (exists(IDSpulseFile.c_str())) { hid_t IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - if (IDS_file_id < 0) { + /*if (IDS_file_id < 0) { std::string message("Unable to open external file: "); message += IDSpulseFile; throw ALBackendException(message, LOG); - - /*if (!od->mode) { - if (H5Lexists(IDS_file_id, IDS_link_name, H5P_DEFAULT) > 0) - H5Ldelete(IDS_file_id, IDS_link_name, H5P_DEFAULT); - }*/ - } - hdf5_utils.closeIDSFile(IDS_file_id, IDS_link_name); //closing the IDS file + }*/ + if (IDS_file_id >= 0) + hdf5_utils.closeIDSFile(IDS_file_id, IDS_link_name); //closing the IDS file } od->link_names[od->count] = (char *) malloc(100); strcpy(od->link_names[od->count], IDS_link_name); @@ -755,5 +781,3 @@ void HDF5Utils::readOptions(uri::Uri uri, bool *compression_enabled, bool *readB *write_cache = (size_t) (atof(value.c_str()) * 1024 * 1024); } } - - diff --git a/src/hdf5/hdf5_utils.h b/src/hdf5/hdf5_utils.h index 9d072606..a7d621a5 100644 --- a/src/hdf5/hdf5_utils.h +++ b/src/hdf5/hdf5_utils.h @@ -39,7 +39,7 @@ class HDF5Utils { std::string getPulseFilePath(DataEntryContext * ctx, int mode, int strategy, std::string & files_directory, std::string & relative_file_path); void deleteIDSFiles(std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string & files_directory, std::string & relative_file_path); void createMasterFile(DataEntryContext * ctx, std::string &filePath, hid_t *file_id, std::string &backend_version); - void openMasterFile(hid_t *file_id, const std::string &filePath); + void openMasterFile(hid_t *file_id, const std::string &filePath, bool for_deletion = false); void initExternalLinks(hid_t *file_id, std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string &files_directory, std::string &relative_file_path); public: @@ -58,7 +58,7 @@ class HDF5Utils { bool pulseFileExists(const std::string &IDS_pulse_file); void closeMasterFile(hid_t *file_id); void removeLinkFromMasterPulseFile(hid_t &file_id, const std::string &link_name); - void openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only); + void openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only, std::string backend_version = ""); void closeIDSFile(hid_t pulse_file_id, const std::string &external_link_name) ; void createIDSFile(OperationContext * ctx, std::string &IDSpulseFile, std::string &backend_version, hid_t *IDS_file_id); void removeLinkFromIDSPulseFile(hid_t &IDS_file_id, const std::string &IDS_link_name); diff --git a/src/hdf5/hdf5_writer.cpp b/src/hdf5/hdf5_writer.cpp index 7aefa3b6..d914a7d3 100644 --- a/src/hdf5/hdf5_writer.cpp +++ b/src/hdf5/hdf5_writer.cpp @@ -138,7 +138,7 @@ void HDF5Writer::create_IDS_group(OperationContext * ctx, hid_t file_id, std::un hdf5_utils.createIDSFile(ctx, IDSpulseFile, backend_version, &IDS_file_id); } else { - hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false); + hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false, backend_version); } opened_IDS_files[IDS_link_name] = IDS_file_id; @@ -150,7 +150,7 @@ void HDF5Writer::create_IDS_group(OperationContext * ctx, hid_t file_id, std::un hdf5_utils.createIDSFile(ctx, IDSpulseFile, backend_version, &IDS_file_id); } else { - hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false); + hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false, backend_version); } opened_IDS_files[IDS_link_name] = IDS_file_id; From 6aa12126be2efe53fb1957a03937d4945cb1c9fb Mon Sep 17 00:00:00 2001 From: Anushan Fernando Date: Wed, 21 Jan 2026 14:08:01 +0000 Subject: [PATCH 30/44] Fixing corrupted reads when reading two IDSs back to back. --- src/ascii_backend.cpp | 3 ++ src/flexbuffers_backend.cpp | 5 ++- src/hdf5/hdf5_dataset_handler.cpp | 64 +++++++++++++++++-------------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/ascii_backend.cpp b/src/ascii_backend.cpp index 34735eac..40d943ed 100644 --- a/src/ascii_backend.cpp +++ b/src/ascii_backend.cpp @@ -218,6 +218,8 @@ void AsciiBackend::beginAction(OperationContext *ctx) this->pulsefile.open(this->fname, std::ios::in); if (this->pulsefile.fail()) throw ALBackendException("Failed to open file "+this->fname+" in read mode",LOG); + this->curcontent.str(std::string()); + this->curcontent.clear(); this->curcontent << this->pulsefile.rdbuf(); this->curcontent_map.clear(); while (std::getline(this->curcontent, this->curline)) { @@ -486,6 +488,7 @@ int AsciiBackend::readData(Context *ctx, return 0; } + this->curcontent.clear(); this->curcontent.seekg((*seekpos).second); this->curline = pathname; diff --git a/src/flexbuffers_backend.cpp b/src/flexbuffers_backend.cpp index 5240109f..32f71811 100644 --- a/src/flexbuffers_backend.cpp +++ b/src/flexbuffers_backend.cpp @@ -1,6 +1,7 @@ #include "flexbuffers_backend.h" #include +#include #include #define ENDIAN_MARKER_VALUE uint32_t(0x01020304) @@ -166,7 +167,9 @@ void FlexbuffersBackend::beginAction(OperationContext* ctx) { _push_element_map(root.AsVector()); // Check that we have the same endian-ness as the machine that // serialized - uint32_t endian_marker = *reinterpret_cast(_cur_vector.top()[0].AsBlob().data()); + uint32_t endian_marker; + auto blob = _cur_vector.top()[0].AsBlob(); + memcpy(&endian_marker, blob.data(), sizeof(endian_marker)); if (endian_marker != ENDIAN_MARKER_VALUE) { std::stringstream ss; ss << "Error when deserializing data: expected endian marker 0x"; diff --git a/src/hdf5/hdf5_dataset_handler.cpp b/src/hdf5/hdf5_dataset_handler.cpp index c437c9af..f65c774b 100644 --- a/src/hdf5/hdf5_dataset_handler.cpp +++ b/src/hdf5/hdf5_dataset_handler.cpp @@ -1168,35 +1168,43 @@ void HDF5DataSetHandler::readUsingHyperslabs(const std::vector < int >¤t_a int size[H5S_MAX_RANK]; hsSelectionReader.getSize(size, slice_mode, is_dynamic); int strings_count = size[0]; - std::vector t(strings_count, NULL); - status = H5Dread(dataset_id, hsSelectionReader.dtype_id, hsSelectionReader.memspace, hsSelectionReader.dataspace, H5P_DEFAULT, (char **) &t[0]); - - std::vector strs(strings_count); - int maxlength = 0; - for (int i = 0; i < strings_count; i++) { - if (t[i] != NULL) - strs[i] = std::string(t[i]); - else { - strs[i] = std::string(""); - continue; - } - //printf("strs[%d]=%s\n", i, strs[i].c_str()); - if ((int) strs[i].length() > maxlength) - maxlength = strs[i].length(); + if (strings_count <= 0) { + // No strings to read - allocate an empty result + *data = (void*)malloc(1); + ((char*)*data)[0] = '\0'; + status = 0; + } else { + std::vector t(strings_count, NULL); + status = + H5Dread(dataset_id, hsSelectionReader.dtype_id, + hsSelectionReader.memspace, hsSelectionReader.dataspace, + H5P_DEFAULT, (char**)&t[0]); + + std::vector strs(strings_count); + int maxlength = 0; + for (int i = 0; i < strings_count; i++) { + if (t[i] != NULL) + strs[i] = std::string(t[i]); + else { + strs[i] = std::string(""); + continue; + } + // printf("strs[%d]=%s\n", i, strs[i].c_str()); + if ((int)strs[i].length() > maxlength) maxlength = strs[i].length(); + } + // allocate 1 additional char so all strings are definitely + // null-terminated: + *data = (void*)malloc(sizeof(char) * (strings_count * maxlength + 1)); + char* p = (char*)*data; + memset(p, 0, strings_count * maxlength + 1); + for (int i = 0; i < strings_count; i++) { + char* q = const_cast(strs[i].data()); + memcpy(p + i * maxlength, q, strs[i].length()); + } + for (int i = 0; i < strings_count; i++) free(t[i]); + size[1] = maxlength; + hsSelectionReader.setSize(size, 2); } - // allocate 1 additional char so all strings are definitely null-terminated: - *data = (void*) malloc(sizeof(char) * (strings_count * maxlength + 1)); - char* p = (char *) *data; - memset(p, 0, strings_count * maxlength + 1); - for(int i=0; i < strings_count; i++) - { - char* q = const_cast (strs[i].data()); - memcpy(p + i * maxlength, q, strs[i].length()); - } - for (int i = 0; i < strings_count; i++) - free(t[i]); - size[1] = maxlength; - hsSelectionReader.setSize(size, 2); } if (status < 0) { From 0d58d3e380d4b828de1753444c52c4672521fe9b Mon Sep 17 00:00:00 2001 From: Ludovic Fleury Date: Thu, 22 Jan 2026 10:46:07 +0100 Subject: [PATCH 31/44] Removing useless comments --- src/hdf5/hdf5_utils.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/hdf5/hdf5_utils.cpp b/src/hdf5/hdf5_utils.cpp index 78954a74..a9cd66e4 100644 --- a/src/hdf5/hdf5_utils.cpp +++ b/src/hdf5/hdf5_utils.cpp @@ -270,14 +270,6 @@ void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, h createIDSFile(ctx, IDSpulseFile, backend_version, IDS_file_id); - //*IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - - /*if (*IDS_file_id < 0) { - char error_message[200]; - sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. Unknow reason.\n", ctx->getDataobjectName().c_str()); - throw ALBackendException(error_message, LOG); - }*/ - } @@ -405,11 +397,6 @@ herr_t file_info(hid_t loc_id, const char *IDS_link_name, const H5L_info_t * lin std::string IDSpulseFile = hdf5_utils.getIDSPulseFilePath(od->files_directory, od->relative_file_path, std::string(IDS_link_name)); if (exists(IDSpulseFile.c_str())) { hid_t IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - /*if (IDS_file_id < 0) { - std::string message("Unable to open external file: "); - message += IDSpulseFile; - throw ALBackendException(message, LOG); - }*/ if (IDS_file_id >= 0) hdf5_utils.closeIDSFile(IDS_file_id, IDS_link_name); //closing the IDS file } From 5355ef1c5aa795ce4009d185339e9dee85591fdd Mon Sep 17 00:00:00 2001 From: Prasad Date: Thu, 22 Jan 2026 15:59:44 +0100 Subject: [PATCH 32/44] Install and doc update in common to prepare for high level interfaces (#25) --- CMakeLists.txt | 42 ++- common/cmake/ALBuildDataDictionary.cmake | 335 ++++++++++++++++++---- common/cmake/ALCommonConfig.cmake | 4 +- common/cmake/ALCore.cmake | 201 ++++++++++--- common/cmake/ALSetCompilerFlags.cmake | 4 +- common/cmake/FindPThreads4W.cmake | 70 +++++ common/cmake/FindSaxonHE.cmake | 56 ---- common/doc_common/building_installing.rst | 6 + common/doc_common/plugins_examples.rst | 80 +++--- common/xsltproc.py | 71 +++++ docs/requirements.txt | 2 +- docs/source/user_guide/installation.rst | 54 +++- include/fix_include_windows.h | 5 +- python/CMakeLists.txt | 56 ++++ src/hdf5/CMakeLists.txt | 34 ++- 15 files changed, 795 insertions(+), 225 deletions(-) create mode 100644 common/cmake/FindPThreads4W.cmake delete mode 100644 common/cmake/FindSaxonHE.cmake create mode 100644 common/xsltproc.py diff --git a/CMakeLists.txt b/CMakeLists.txt index f7ff0378..ca4415be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,10 @@ # CMake build configuration for Access Layer core cmake_minimum_required(VERSION 3.21) +if(POLICY CMP0144) + cmake_policy(SET CMP0144 NEW) +endif() + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.30) cmake_policy(SET CMP0167 NEW) # Use system BoostConfig instead of cmake FindBoost endif() @@ -81,7 +85,42 @@ endif() # ############################################################################## if(WIN32) - find_package(PThreads4W CONFIG REQUIRED) + # Ensure vcpkg paths are in CMAKE_PREFIX_PATH for finding packages + if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_TARGET_TRIPLET) + list(APPEND CMAKE_PREFIX_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}") + message(STATUS "al-core: Added CMAKE_PREFIX_PATH: ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}") + else() + # Try to auto-detect vcpkg installed directory from build path + if(CMAKE_CURRENT_BINARY_DIR MATCHES "(.*/build)/") + set(_BUILD_DIR "${CMAKE_MATCH_1}") + set(_VCPKG_PATH "${_BUILD_DIR}/vcpkg_installed/x64-windows") + if(EXISTS "${_VCPKG_PATH}") + list(APPEND CMAKE_PREFIX_PATH "${_VCPKG_PATH}") + message(STATUS "al-core: Auto-detected vcpkg path: ${_VCPKG_PATH}") + + # Set PKG_CONFIG_EXECUTABLE for vcpkg's pkgconf + if(EXISTS "${_VCPKG_PATH}/tools/pkgconf/pkgconf.exe") + set(PKG_CONFIG_EXECUTABLE "${_VCPKG_PATH}/tools/pkgconf/pkgconf.exe" CACHE FILEPATH "pkg-config executable") + message(STATUS "al-core: Set PKG_CONFIG_EXECUTABLE to ${PKG_CONFIG_EXECUTABLE}") + endif() + endif() + endif() + endif() + + message(STATUS "al-core: CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}") + + # Add cmake module path for FindPThreads4W.cmake fallback + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/common/cmake") + + # Try CONFIG mode first, fall back to MODULE mode + find_package(PThreads4W CONFIG QUIET) + if(NOT PThreads4W_FOUND) + message(STATUS "PThreads4W CONFIG not found, trying MODULE mode") + find_package(PThreads4W MODULE REQUIRED) + else() + message(STATUS "Found PThreads4W via CONFIG mode") + endif() + find_package(dlfcn-win32 CONFIG REQUIRED) endif() @@ -115,6 +154,7 @@ set(PUBLIC_HEADER_FILES include/readback_plugin_feature.h include/uri_parser.h include/data_interpolation.h + include/fix_include_windows.h # al_defs.h is generated in the binary folder with configure_file: ${CMAKE_CURRENT_BINARY_DIR}/include/al_defs.h) diff --git a/common/cmake/ALBuildDataDictionary.cmake b/common/cmake/ALBuildDataDictionary.cmake index 6aff7f7a..7961b623 100644 --- a/common/cmake/ALBuildDataDictionary.cmake +++ b/common/cmake/ALBuildDataDictionary.cmake @@ -11,18 +11,95 @@ if( AL_DOCS_ONLY ) endif() # Find Python for the xsltproc.py program -find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) -# Find LibXslt for the xsltproc program -find_package( LibXslt QUIET ) -if( NOT LIBXSLT_XSLTPROC_EXECUTABLE ) - message( FATAL_ERROR "Could not find xsltproc" ) +if(WIN32) + if(NOT Python3_FOUND AND NOT PYTHON_EXECUTABLE) + # Check if Python is in PATH + find_program(PYTHON_EXECUTABLE NAMES python3.exe python.exe python3 python DOC "Python interpreter") + if(NOT PYTHON_EXECUTABLE) + message(FATAL_ERROR "Could not find Python. Please ensure Python is installed and in PATH.") + endif() + else() + set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + endif() +else() + find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) + set(PYTHON_EXECUTABLE ${Python_EXECUTABLE}) +endif() + +message(STATUS "Found Python: ${PYTHON_EXECUTABLE}") + +# Set up Python venv paths for saxonche (used for all XSLT transformations) +if(WIN32) + set(_VENV_PYTHON "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/Scripts/python.exe") + set(_VENV_PIP "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/Scripts/pip.exe") +else() + set(_VENV_PYTHON "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/bin/python") + set(_VENV_PIP "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/bin/pip") endif() if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) # The DD easybuild module should be loaded, use that module: - # Use idsinfo idspath command to get the path to IDSDef.xml or data_dictionary.xml + # Create Python venv first and install imas_data_dictionary + if(NOT EXISTS "${_VENV_PYTHON}") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m venv dd_build_env + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RESULT_VARIABLE _VENV_EXITCODE + OUTPUT_VARIABLE _VENV_OUTPUT + ERROR_VARIABLE _VENV_ERROR + ) + + if(_VENV_EXITCODE) + message(STATUS "venv stdout: ${_VENV_OUTPUT}") + message(STATUS "venv stderr: ${_VENV_ERROR}") + message(FATAL_ERROR "Failed to create venv (exit code: ${_VENV_EXITCODE}). Ensure Python has venv module installed: python -m venv --help") + endif() + + if(DEFINED DD_VERSION) + execute_process( + COMMAND ${_VENV_PIP} install imas_data_dictionary==${DD_VERSION} + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR + ) + else() + execute_process( + COMMAND ${_VENV_PIP} install imas_data_dictionary + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR + ) + endif() + + if(_PIP_EXITCODE) + message(STATUS "imas_data_dictionary pip output: ${_PIP_OUTPUT}") + message(STATUS "imas_data_dictionary pip error: ${_PIP_ERROR}") + message(FATAL_ERROR "Failed to install imas_data_dictionary dependency (exit code: ${_PIP_EXITCODE}). Check network connectivity and Python wheel compatibility.") + endif() + + execute_process( + COMMAND ${_VENV_PIP} install saxonche + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR + ) + + if(_PIP_EXITCODE) + message(STATUS "saxonche pip output: ${_PIP_OUTPUT}") + message(STATUS "saxonche pip error: ${_PIP_ERROR}") + message(FATAL_ERROR "Failed to install saxonche dependency (exit code: ${_PIP_EXITCODE}). Check network connectivity and Python wheel compatibility.") + endif() + endif() +# Set up idsinfo command path +if(WIN32) + set(_IDSINFO_COMMAND "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/Scripts/idsinfo.exe") +else() + set(_IDSINFO_COMMAND "${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/bin/idsinfo") +endif() + + # Use idsinfo idspath command from venv to get the path to IDSDef.xml or data_dictionary.xml execute_process( - COMMAND idsinfo idspath + COMMAND ${_IDSINFO_COMMAND} idspath OUTPUT_VARIABLE IDSDEF OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _IDSINFO_EXITCODE @@ -58,37 +135,115 @@ if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) if( NOT DD_IDENTIFIER_FILES ) message( WARNING "No identifier XML files found in Data Dictionary at: ${IDSDEF}" ) endif() -else() - # Build the DD from source: - include(FetchContent) - - if( AL_DOWNLOAD_DEPENDENCIES ) - # Download the Data Dictionary from the ITER git: - FetchContent_Declare( - data-dictionary - GIT_REPOSITORY ${DD_GIT_REPOSITORY} - GIT_TAG ${DD_VERSION} + + # When using pre-installed DD, we still need venv for extracting IDS names and version + # Create Python venv and install saxonche if not already done + if(NOT EXISTS "${_VENV_PYTHON}") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m venv dd_build_env + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RESULT_VARIABLE _VENV_EXITCODE + OUTPUT_VARIABLE _VENV_OUTPUT + ERROR_VARIABLE _VENV_ERROR ) - else() - # Look in ../data-dictionary for the data dictionary - if( NOT( AL_PARENT_FOLDER ) ) - set( AL_PARENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/.. ) - endif() - set( DD_SOURCE_DIRECTORY ${AL_PARENT_FOLDER}/data-dictionary ) - if( NOT IS_DIRECTORY ${DD_SOURCE_DIRECTORY} ) - message( FATAL_ERROR - "${DD_SOURCE_DIRECTORY} does not exist. Please clone the " - "data-dictionary repository or set AL_DOWNLOAD_DEPENDENCIES=ON." - ) + + if(_VENV_EXITCODE) + message(STATUS "venv stdout: ${_VENV_OUTPUT}") + message(STATUS "venv stderr: ${_VENV_ERROR}") + message(FATAL_ERROR "Failed to create venv (exit code: ${_VENV_EXITCODE}). Ensure Python has venv module installed: python -m venv --help") endif() - FetchContent_Declare( - data-dictionary - SOURCE_DIR ${DD_SOURCE_DIRECTORY} + execute_process( + COMMAND ${_VENV_PIP} install saxonche + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR ) - set( DD_SOURCE_DIRECTORY ) # unset temporary var + + if(_PIP_EXITCODE) + message(STATUS "saxonche pip output: ${_PIP_OUTPUT}") + message(STATUS "saxonche pip error: ${_PIP_ERROR}") + message(FATAL_ERROR "Failed to install saxonche dependency (exit code: ${_PIP_EXITCODE}). Check network connectivity and Python wheel compatibility.") + endif() endif() - FetchContent_MakeAvailable( data-dictionary ) +else() + if(WIN32) + # Build the DD from source using direct git commands: + if( AL_DOWNLOAD_DEPENDENCIES ) + # Download the Data Dictionary from the ITER git: + set( data-dictionary_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/data-dictionary-src" ) + if( NOT EXISTS "${data-dictionary_SOURCE_DIR}/.git" ) + message( STATUS "Cloning data-dictionary from ${DD_GIT_REPOSITORY}" ) + execute_process( + COMMAND git clone "${DD_GIT_REPOSITORY}" "${data-dictionary_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CLONE_RESULT + ERROR_VARIABLE _GIT_CLONE_ERROR + ) + if( _GIT_CLONE_RESULT ) + message( FATAL_ERROR "Failed to clone data-dictionary: ${_GIT_CLONE_ERROR}" ) + endif() + endif() + # Checkout the specified version + execute_process( + COMMAND git fetch origin + WORKING_DIRECTORY "${data-dictionary_SOURCE_DIR}" + RESULT_VARIABLE _GIT_FETCH_RESULT + ) + execute_process( + COMMAND git checkout "${DD_VERSION}" + WORKING_DIRECTORY "${data-dictionary_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CHECKOUT_RESULT + ERROR_VARIABLE _GIT_CHECKOUT_ERROR + ) + if( _GIT_CHECKOUT_RESULT ) + message( FATAL_ERROR "Failed to checkout ${DD_VERSION}: ${_GIT_CHECKOUT_ERROR}" ) + endif() + else() + # Look in ../data-dictionary for the data dictionary + if( NOT( AL_PARENT_FOLDER ) ) + set( AL_PARENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/.. ) + endif() + set( data-dictionary_SOURCE_DIR ${AL_PARENT_FOLDER}/data-dictionary ) + if( NOT IS_DIRECTORY ${data-dictionary_SOURCE_DIR} ) + message( FATAL_ERROR + "${data-dictionary_SOURCE_DIR} does not exist. Please clone the " + "data-dictionary repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() + endif() + else() + # Build the DD from source: + include(FetchContent) + + if( AL_DOWNLOAD_DEPENDENCIES ) + # Download the Data Dictionary from the ITER git: + FetchContent_Declare( + data-dictionary + GIT_REPOSITORY ${DD_GIT_REPOSITORY} + GIT_TAG ${DD_VERSION} + ) + else() + # Look in ../data-dictionary for the data dictionary + if( NOT( AL_PARENT_FOLDER ) ) + set( AL_PARENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/.. ) + endif() + set( DD_SOURCE_DIRECTORY ${AL_PARENT_FOLDER}/data-dictionary ) + if( NOT IS_DIRECTORY ${DD_SOURCE_DIRECTORY} ) + message( FATAL_ERROR + "${DD_SOURCE_DIRECTORY} does not exist. Please clone the " + "data-dictionary repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() + + FetchContent_Declare( + data-dictionary + SOURCE_DIR ${DD_SOURCE_DIRECTORY} + ) + set( DD_SOURCE_DIRECTORY ) # unset temporary var + endif() + FetchContent_MakeAvailable( data-dictionary ) + endif() + # get version of the data dictionary execute_process( @@ -108,33 +263,52 @@ else() endif() # We need the IDSDef.xml at configure time, ensure it is built - execute_process( - COMMAND ${Python_EXECUTABLE} -m venv dd_build_env - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - ) - - execute_process( - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/bin/pip install saxonche - RESULT_VARIABLE _PIP_EXITCODE - ) - - if(_PIP_EXITCODE) - message(FATAL_ERROR "Failed to install saxonche dependency") + # Create Python venv and install saxonche if not already done + if(NOT EXISTS "${_VENV_PYTHON}") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m venv dd_build_env + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RESULT_VARIABLE _VENV_EXITCODE + OUTPUT_VARIABLE _VENV_OUTPUT + ERROR_VARIABLE _VENV_ERROR + ) + + if(_VENV_EXITCODE) + message(STATUS "venv stdout: ${_VENV_OUTPUT}") + message(STATUS "venv stderr: ${_VENV_ERROR}") + message(FATAL_ERROR "Failed to create venv (exit code: ${_VENV_EXITCODE}). Ensure Python has venv module installed: python -m venv --help") + endif() + + execute_process( + COMMAND ${_VENV_PIP} install saxonche + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR + ) + + if(_PIP_EXITCODE) + message(STATUS "saxonche pip output: ${_PIP_OUTPUT}") + message(STATUS "saxonche pip error: ${_PIP_ERROR}") + message(FATAL_ERROR "Failed to install saxonche dependency (exit code: ${_PIP_EXITCODE}). Check network connectivity and Python wheel compatibility.") + endif() endif() execute_process( - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dd_build_env/bin/python "${al-core_SOURCE_DIR}/xsltproc.py" + COMMAND ${_VENV_PYTHON} "${al-common_SOURCE_DIR}/xsltproc.py" -xsl "dd_data_dictionary.xml.xsl" -o "IDSDef.xml" -s "dd_data_dictionary.xml.xsd" DD_GIT_DESCRIBE=${DD_GIT_DESCRIBE} WORKING_DIRECTORY ${data-dictionary_SOURCE_DIR} RESULT_VARIABLE _MAKE_DD_EXITCODE + OUTPUT_VARIABLE _MAKE_DD_OUTPUT + ERROR_VARIABLE _MAKE_DD_ERROR ) if( _MAKE_DD_EXITCODE ) - # make did not succeed: - message( FATAL_ERROR "Error while building the Data Dictionary. See output on previous lines." ) + message(STATUS "xsltproc.py output: ${_MAKE_DD_OUTPUT}") + message(STATUS "xsltproc.py error: ${_MAKE_DD_ERROR}") + message(FATAL_ERROR "Error while building the Data Dictionary (exit code: ${_MAKE_DD_EXITCODE}). Check paths and Saxon-HE configuration.") endif() # Populate IDSDEF filename @@ -149,19 +323,74 @@ else() endif() # Find out which IDSs exist and populate IDS_NAMES +# Ensure saxonche is installed before using xsltproc.py +# Check if saxonche is available in the venv +execute_process( + COMMAND ${_VENV_PYTHON} -c "import saxonche" + RESULT_VARIABLE _SAXONCHE_CHECK + OUTPUT_QUIET + ERROR_QUIET +) + +if(_SAXONCHE_CHECK) + message(STATUS "Installing saxonche in venv...") + execute_process( + COMMAND ${_VENV_PIP} install saxonche + RESULT_VARIABLE _PIP_EXITCODE + OUTPUT_VARIABLE _PIP_OUTPUT + ERROR_VARIABLE _PIP_ERROR + ) + + if(_PIP_EXITCODE) + message(STATUS "saxonche pip output: ${_PIP_OUTPUT}") + message(STATUS "saxonche pip error: ${_PIP_ERROR}") + message(FATAL_ERROR "Failed to install saxonche dependency (exit code: ${_PIP_EXITCODE}). Check network connectivity and Python wheel compatibility.") + endif() +endif() + set( list_idss_file ${al-common_SOURCE_DIR}/list_idss.xsl ) set( CMAKE_CONFIGURE_DEPENDS ${CMAKE_CONFIGURE_DEPENDS};${list_idss_file};${IDSDEF} ) +set( ids_names_tmpfile "${CMAKE_CURRENT_BINARY_DIR}/ids_names_tmp.txt" ) execute_process( COMMAND - ${LIBXSLT_XSLTPROC_EXECUTABLE} ${list_idss_file} ${IDSDEF} - OUTPUT_VARIABLE IDS_NAMES + ${_VENV_PYTHON} "${al-common_SOURCE_DIR}/xsltproc.py" + -xsl ${list_idss_file} + -s ${IDSDEF} + -o ${ids_names_tmpfile} + RESULT_VARIABLE _XSLT_RESULT + ERROR_VARIABLE _XSLT_ERROR ) +if(_XSLT_RESULT) + message(FATAL_ERROR "Failed to extract IDS names: ${_XSLT_ERROR}") +endif() +if(EXISTS ${ids_names_tmpfile}) + file(READ ${ids_names_tmpfile} IDS_NAMES) + string(STRIP "${IDS_NAMES}" IDS_NAMES) + file(REMOVE ${ids_names_tmpfile}) +else() + message(FATAL_ERROR "IDS names output file not created") +endif() set( list_idss_file ) # unset temporary var # DD version set( dd_version_file ${al-common_SOURCE_DIR}/dd_version.xsl ) +set( dd_version_tmpfile "${CMAKE_CURRENT_BINARY_DIR}/dd_version_tmp.txt" ) execute_process( COMMAND - ${LIBXSLT_XSLTPROC_EXECUTABLE} ${dd_version_file} ${IDSDEF} - OUTPUT_VARIABLE DD_VERSION + ${_VENV_PYTHON} "${al-common_SOURCE_DIR}/xsltproc.py" + -xsl ${dd_version_file} + -s ${IDSDEF} + -o ${dd_version_tmpfile} + RESULT_VARIABLE _XSLT_RESULT + ERROR_VARIABLE _XSLT_ERROR ) -string( REGEX REPLACE "[+-]" "_" DD_SAFE_VERSION ${DD_VERSION} ) +if(_XSLT_RESULT) + message(FATAL_ERROR "Failed to extract DD version: ${_XSLT_ERROR}") +endif() +if(EXISTS ${dd_version_tmpfile}) + file(READ ${dd_version_tmpfile} DD_VERSION) + string(STRIP "${DD_VERSION}" DD_VERSION) + file(REMOVE ${dd_version_tmpfile}) +else() + message(FATAL_ERROR "DD version output file not created") +endif() +string( REGEX REPLACE "[+-]" "_" DD_SAFE_VERSION "${DD_VERSION}" ) set( dd_version_file ) # unset temporary var diff --git a/common/cmake/ALCommonConfig.cmake b/common/cmake/ALCommonConfig.cmake index badee05b..2431a5d9 100644 --- a/common/cmake/ALCommonConfig.cmake +++ b/common/cmake/ALCommonConfig.cmake @@ -13,8 +13,8 @@ option( AL_PLUGINS "Enable plugin framework for tests and examples" OFF ) option( AL_HLI_DOCS "Build the Sphinx-based High Level Interface documentation" OFF ) option( AL_DOCS_ONLY "Don't build anything, except the Sphinx-based High Level Interface documentation" OFF ) -# Find Saxon XSLT processor -find_package( SaxonHE REQUIRED ) +# Saxon XSLT processor has been replaced with Python saxonche +# No longer need to find SaxonHE - saxonche is installed automatically via pip in virtual environments if( NOT AL_DOWNLOAD_DEPENDENCIES ) if( DEFINED ENV{AL_COMMON_PATH} ) diff --git a/common/cmake/ALCore.cmake b/common/cmake/ALCore.cmake index 9492263e..21c6bc74 100644 --- a/common/cmake/ALCore.cmake +++ b/common/cmake/ALCore.cmake @@ -11,69 +11,176 @@ if( NOT AL_DOWNLOAD_DEPENDENCIES AND NOT AL_DEVELOPMENT_LAYOUT ) # Stop processing return() endif() - -include(FetchContent) - -if( AL_DOWNLOAD_DEPENDENCIES ) - # Download the AL core from the ITER git: - FetchContent_Declare( - al-core - GIT_REPOSITORY ${AL_CORE_GIT_REPOSITORY} - GIT_TAG ${AL_CORE_VERSION} - ) -else() - # Look in ../al-core - set( AL_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-core ) - if( NOT IS_DIRECTORY ${AL_SOURCE_DIRECTORY} ) - # Repository used to be called "al-lowlevel", check this directory as well for - # backwards compatibility: - set( AL_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-lowlevel ) - if( NOT IS_DIRECTORY ${AL_SOURCE_DIRECTORY} ) - message( FATAL_ERROR - "${AL_SOURCE_DIRECTORY} does not exist. Please clone the " - "al-core repository or set AL_DOWNLOAD_DEPENDENCIES=ON." +if(WIN32) + if( AL_DOWNLOAD_DEPENDENCIES ) + # Download the AL core from the ITER git using direct git commands: + set( al-core_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/al-core-src" ) + if( NOT EXISTS "${al-core_SOURCE_DIR}/.git" ) + message( STATUS "Cloning al-core from ${AL_CORE_GIT_REPOSITORY}" ) + execute_process( + COMMAND git clone "${AL_CORE_GIT_REPOSITORY}" "${al-core_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CLONE_RESULT + ERROR_VARIABLE _GIT_CLONE_ERROR ) + if( _GIT_CLONE_RESULT ) + message( FATAL_ERROR "Failed to clone al-core: ${_GIT_CLONE_ERROR}" ) + endif() + endif() + # Checkout the specified version + execute_process( + COMMAND git fetch origin + WORKING_DIRECTORY "${al-core_SOURCE_DIR}" + RESULT_VARIABLE _GIT_FETCH_RESULT + ) + execute_process( + COMMAND git checkout "${AL_CORE_VERSION}" + WORKING_DIRECTORY "${al-core_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CHECKOUT_RESULT + ERROR_VARIABLE _GIT_CHECKOUT_ERROR + ) + if( _GIT_CHECKOUT_RESULT ) + message( FATAL_ERROR "Failed to checkout ${AL_CORE_VERSION}: ${_GIT_CHECKOUT_ERROR}" ) + endif() + else() + # Look in ../al-core + set( al-core_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../al-core ) + if( NOT IS_DIRECTORY ${al-core_SOURCE_DIR} ) + # Repository used to be called "al-lowlevel", check this directory as well for + # backwards compatibility: + set( al-core_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../al-lowlevel ) + if( NOT IS_DIRECTORY ${al-core_SOURCE_DIR} ) + message( FATAL_ERROR + "${al-core_SOURCE_DIR} does not exist. Please clone the " + "al-core repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() endif() endif() +else() + include(FetchContent) + + if( AL_DOWNLOAD_DEPENDENCIES ) + # Download the AL core from the ITER git: + FetchContent_Declare( + al-core + GIT_REPOSITORY ${AL_CORE_GIT_REPOSITORY} + GIT_TAG ${AL_CORE_VERSION} + ) + else() + # Look in ../al-core + set( AL_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-core ) + if( NOT IS_DIRECTORY ${AL_SOURCE_DIRECTORY} ) + # Repository used to be called "al-lowlevel", check this directory as well for + # backwards compatibility: + set( AL_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-lowlevel ) + if( NOT IS_DIRECTORY ${AL_SOURCE_DIRECTORY} ) + message( FATAL_ERROR + "${AL_SOURCE_DIRECTORY} does not exist. Please clone the " + "al-core repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() + endif() - FetchContent_Declare( - al-core - SOURCE_DIR ${AL_SOURCE_DIRECTORY} - ) - set( AL_SOURCE_DIRECTORY ) # unset temporary var + FetchContent_Declare( + al-core + SOURCE_DIR ${AL_SOURCE_DIRECTORY} + ) + set( AL_SOURCE_DIRECTORY ) # unset temporary var + endif() endif() + # Don't load the AL core when only building documentation if( NOT AL_DOCS_ONLY ) - FetchContent_MakeAvailable( al-core ) + # Ensure vcpkg packages are found in the subdirectory + if(WIN32) + # On Windows, ensure vcpkg packages are available to the subdirectory + if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_TARGET_TRIPLET) + # Add vcpkg installed directory to CMAKE_PREFIX_PATH for the subdirectory + set(CMAKE_PREFIX_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET};${CMAKE_PREFIX_PATH}") + # Pass vcpkg variables to subdirectory by setting them in parent scope + set(VCPKG_INSTALLED_DIR "${VCPKG_INSTALLED_DIR}" CACHE STRING "vcpkg installed dir" FORCE) + set(VCPKG_TARGET_TRIPLET "${VCPKG_TARGET_TRIPLET}" CACHE STRING "vcpkg triplet" FORCE) + message(STATUS "ALCore: Passing vcpkg paths to al-core subdirectory") + message(STATUS " VCPKG_INSTALLED_DIR: ${VCPKG_INSTALLED_DIR}") + message(STATUS " VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") + message(STATUS " CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") + endif() + add_subdirectory( ${al-core_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/_deps/al-core-build ) + else() + FetchContent_MakeAvailable( al-core ) + endif() get_target_property( AL_CORE_VERSION al VERSION ) endif() if( ${AL_PLUGINS} ) - if( ${AL_DOWNLOAD_DEPENDENCIES} ) - # Download the AL plugins from the ITER git: - FetchContent_Declare( - al-plugins - GIT_REPOSITORY ${AL_PLUGINS_GIT_REPOSITORY} - GIT_TAG ${AL_PLUGINS_VERSION} - ) - else() - # Look in ../plugins - set( PLUGINS_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-plugins ) - if( NOT IS_DIRECTORY ${PLUGINS_SOURCE_DIRECTORY} ) - message( FATAL_ERROR - "${PLUGINS_SOURCE_DIRECTORY} does not exist. Please clone the " - "al-plugins repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + if(WIN32) + if( ${AL_DOWNLOAD_DEPENDENCIES} ) + # Download the AL plugins from the ITER git using direct git commands: + set( al-plugins_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/al-plugins-src" ) + if( NOT EXISTS "${al-plugins_SOURCE_DIR}/.git" ) + message( STATUS "Cloning al-plugins from ${AL_PLUGINS_GIT_REPOSITORY}" ) + execute_process( + COMMAND git clone "${AL_PLUGINS_GIT_REPOSITORY}" "${al-plugins_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CLONE_RESULT + ERROR_VARIABLE _GIT_CLONE_ERROR + ) + if( _GIT_CLONE_RESULT ) + message( FATAL_ERROR "Failed to clone al-plugins: ${_GIT_CLONE_ERROR}" ) + endif() + endif() + # Checkout the specified version + execute_process( + COMMAND git fetch origin + WORKING_DIRECTORY "${al-plugins_SOURCE_DIR}" + RESULT_VARIABLE _GIT_FETCH_RESULT ) + execute_process( + COMMAND git checkout "${AL_PLUGINS_VERSION}" + WORKING_DIRECTORY "${al-plugins_SOURCE_DIR}" + RESULT_VARIABLE _GIT_CHECKOUT_RESULT + ERROR_VARIABLE _GIT_CHECKOUT_ERROR + ) + if( _GIT_CHECKOUT_RESULT ) + message( FATAL_ERROR "Failed to checkout ${AL_PLUGINS_VERSION}: ${_GIT_CHECKOUT_ERROR}" ) + endif() + else() + # Look in ../plugins + set( al-plugins_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../al-plugins ) + if( NOT IS_DIRECTORY ${al-plugins_SOURCE_DIR} ) + message( FATAL_ERROR + "${al-plugins_SOURCE_DIR} does not exist. Please clone the " + "al-plugins repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() endif() - FetchContent_Declare( - al-plugins - SOURCE_DIR ${PLUGINS_SOURCE_DIRECTORY} - ) - set( PLUGINS_SOURCE_DIRECTORY ) # unset temporary var + else() + if( ${AL_DOWNLOAD_DEPENDENCIES} ) + # Download the AL plugins from the ITER git: + FetchContent_Declare( + al-plugins + GIT_REPOSITORY ${AL_PLUGINS_GIT_REPOSITORY} + GIT_TAG ${AL_PLUGINS_VERSION} + ) + else() + # Look in ../plugins + set( PLUGINS_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../al-plugins ) + if( NOT IS_DIRECTORY ${PLUGINS_SOURCE_DIRECTORY} ) + message( FATAL_ERROR + "${PLUGINS_SOURCE_DIRECTORY} does not exist. Please clone the " + "al-plugins repository or set AL_DOWNLOAD_DEPENDENCIES=ON." + ) + endif() + + FetchContent_Declare( + al-plugins + SOURCE_DIR ${PLUGINS_SOURCE_DIRECTORY} + ) + set( PLUGINS_SOURCE_DIRECTORY ) # unset temporary var + endif() + FetchContent_MakeAvailable( al-plugins ) endif() - FetchContent_MakeAvailable( al-plugins ) endif() if( AL_HLI_DOCS ) diff --git a/common/cmake/ALSetCompilerFlags.cmake b/common/cmake/ALSetCompilerFlags.cmake index 4bd88c3b..b821ffce 100644 --- a/common/cmake/ALSetCompilerFlags.cmake +++ b/common/cmake/ALSetCompilerFlags.cmake @@ -34,8 +34,8 @@ endif() if(NOT DEFINED CMAKE_CXX_STANDARD) set( CMAKE_CXX_STANDARD 17 ) endif() -if( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" ) - # icpc options +if( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" ) + # icpc/icpx options string( APPEND CMAKE_CXX_FLAGS # " -Wall" ) diff --git a/common/cmake/FindPThreads4W.cmake b/common/cmake/FindPThreads4W.cmake new file mode 100644 index 00000000..4de1783b --- /dev/null +++ b/common/cmake/FindPThreads4W.cmake @@ -0,0 +1,70 @@ +# FindPThreads4W.cmake - Minimal version +# Find the PThreads-Win32 library + +message(STATUS "FindPThreads4W: CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}") +message(STATUS "FindPThreads4W: VCPKG_INSTALLED_DIR = ${VCPKG_INSTALLED_DIR}") +message(STATUS "FindPThreads4W: VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}") +message(STATUS "FindPThreads4W: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}") +message(STATUS "FindPThreads4W: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}") + +# Try to determine vcpkg installed directory from build directory structure +set(_POSSIBLE_VCPKG_PATHS "") +if(CMAKE_CURRENT_BINARY_DIR MATCHES "(.*/build)/") + set(_BUILD_DIR "${CMAKE_MATCH_1}") + list(APPEND _POSSIBLE_VCPKG_PATHS + "${_BUILD_DIR}/vcpkg_installed/x64-windows" + "${_BUILD_DIR}/vcpkg_installed/x86-windows" + ) + message(STATUS "FindPThreads4W: Detected build dir: ${_BUILD_DIR}") +endif() + +# Find include directory and library +find_path(PThreads4W_INCLUDE_DIR + NAMES pthread.h + HINTS + ${PThreads4W_DIR} + ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET} + ${CMAKE_PREFIX_PATH} + ${_POSSIBLE_VCPKG_PATHS} + PATH_SUFFIXES include +) + +find_library(PThreads4W_LIBRARY + NAMES pthreadVC3 pthreadVCE3 pthreadVSE3 pthread pthreads + HINTS + ${PThreads4W_DIR} + ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET} + ${CMAKE_PREFIX_PATH} + ${_POSSIBLE_VCPKG_PATHS} + PATH_SUFFIXES lib +) + +message(STATUS "FindPThreads4W: PThreads4W_INCLUDE_DIR = ${PThreads4W_INCLUDE_DIR}") +message(STATUS "FindPThreads4W: PThreads4W_LIBRARY = ${PThreads4W_LIBRARY}") + +# Use standard CMake handling +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PThreads4W + REQUIRED_VARS PThreads4W_INCLUDE_DIR PThreads4W_LIBRARY +) + +if(PThreads4W_FOUND) + set(PThreads4W_INCLUDE_DIRS ${PThreads4W_INCLUDE_DIR}) + set(PThreads4W_LIBRARIES ${PThreads4W_LIBRARY}) + + # Create imported target + if(NOT TARGET PThreads4W::PThreads4W) + add_library(PThreads4W::PThreads4W UNKNOWN IMPORTED) + set_target_properties(PThreads4W::PThreads4W PROPERTIES + IMPORTED_LOCATION "${PThreads4W_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${PThreads4W_INCLUDE_DIR}" + ) + if(WIN32) + set_target_properties(PThreads4W::PThreads4W PROPERTIES + INTERFACE_LINK_LIBRARIES "ws2_32" + ) + endif(WIN32) + endif(NOT TARGET PThreads4W::PThreads4W) +endif(PThreads4W_FOUND) + +mark_as_advanced(PThreads4W_INCLUDE_DIR PThreads4W_LIBRARY) diff --git a/common/cmake/FindSaxonHE.cmake b/common/cmake/FindSaxonHE.cmake deleted file mode 100644 index af2b5d2f..00000000 --- a/common/cmake/FindSaxonHE.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# Find Saxon-HE XSLT processor -# -# Sets the following variables -# - SaxonHE_FOUND -# - SaxonHE_CLASSPATH -# - SaxonHE_VERSION - -find_package( Java COMPONENTS Runtime ) -include( FindPackageHandleStandardArgs ) - -macro( TestSaxon CLASSPATH ) - execute_process( - COMMAND ${Java_JAVA_EXECUTABLE} -cp "${CLASSPATH}" net.sf.saxon.Transform -? - ERROR_VARIABLE _Saxon_OUTPUT - RESULT_VARIABLE _Saxon_RESULT - OUTPUT_QUIET - ) - if( _Saxon_RESULT EQUAL 0 ) - set( SaxonHE_CLASSPATH "${CLASSPATH}" CACHE STRING "Java classpath containing Saxon-HE" FORCE ) - if( _Saxon_OUTPUT MATCHES "Saxon(-HE)? ([^ ]*) from" ) - set( SaxonHE_VERSION ${CMAKE_MATCH_2} ) - else() - set( SaxonHE_VERSION "Unknown" ) - endif() - endif() -endmacro() - -if( Java_FOUND AND NOT SaxonHE_CLASSPATH ) - # Check if saxon is already on the classpath - TestSaxon( "$ENV{CLASSPATH}" ) - if( NOT SaxonHE_CLASSPATH ) - # Try to find Saxon in /usr/share/java: - find_file( SaxonHE_JAR - NAMES Saxon-HE.jar saxon-he.jar - PATHS - /usr/share/java/ - /usr/local/share/java/ - ) - if( SaxonHE_JAR ) - TestSaxon( "${SaxonHE_JAR}" ) - endif() - endif() -endif() - -if( SaxonHE_CLASSPATH ) - # Saxon found (or classpath set by user) - if( NOT SaxonHE_VERSION ) - TestSaxon( "${SaxonHE_CLASSPATH}" ) - endif() -endif() - -find_package_handle_standard_args( - SaxonHE - REQUIRED_VARS SaxonHE_CLASSPATH SaxonHE_VERSION - VERSION_VAR SaxonHE_VERSION -) diff --git a/common/doc_common/building_installing.rst b/common/doc_common/building_installing.rst index 07b2fe67..a5571fb3 100644 --- a/common/doc_common/building_installing.rst +++ b/common/doc_common/building_installing.rst @@ -7,6 +7,11 @@ Documentation for developers wishing to contribute to the Access Layer can be fo the :ref:`Access Layer development guide`. Please refer to that guide if you wish to set up a development environment. +.. note:: + + For Windows-specific installation instructions, please refer to the + :doc:`Windows Installation Guide `. + .. _`build prerequisites`: @@ -404,3 +409,4 @@ Troubleshooting **Problem:** ``Target Boost::log already has an imported location`` This problem is known to occur with the ``2020b`` toolchain on SDCC. Add the CMake configuration option ``-D Boost_NO_BOOST_CMAKE=ON`` to work around the problem. + diff --git a/common/doc_common/plugins_examples.rst b/common/doc_common/plugins_examples.rst index 281b5ce4..03bbf340 100644 --- a/common/doc_common/plugins_examples.rst +++ b/common/doc_common/plugins_examples.rst @@ -1,6 +1,11 @@ Plugins examples ================ +.. note:: + + The plugin examples referenced in this documentation are maintained in the al-plugins repository. + Please refer to: https://git.iter.org/projects/IMAS/repos/al-plugins/browse for the complete source code. + The ``debug`` plugin -------------------- @@ -9,8 +14,7 @@ In this first example, we want to display the value of the field ``ids_properties/version_put/access_layer`` for a given IDS during the execution of a ``get()`` operation. -The debug plugin is a C++ class named ``Debug_plugin``. `Figure 10`_ shows -the header code: +The debug plugin is a C++ class named ``Debug_plugin``. The header code shows: - The Debug_plugin class inherits from the access_layer_plugin plugin interface @@ -20,12 +24,11 @@ the header code: - The private attributes shot, dataobjectname and occurrence will be initialized during the initialization of the plugin -.. literalinclude:: ./plugins/debug_plugin.h - :caption: **Figure 10:** Header of the Debug_plugin class - :name: Figure 10 - :language: C++ +.. note:: + + The complete source code for the debug_plugin.h header is available in the al-plugins repository. -`Figure 10a`_ shows the plugin implementation code: +The plugin implementation code includes: - Plugin initialization occurs in the ``begin_global_action(...)`` function. However, no initialization is required in this example. @@ -42,19 +45,16 @@ the header code: ``getReadbackName(path, index)`` returns an empty string, meaning that the ``debug`` plugin does not define any *readback* plugin. +.. note:: -.. literalinclude:: ./plugins/debug_plugin.cpp - :caption: **Figure 10a:** C++ plugin implementation code - :name: Figure 10a - :language: C++ + The complete source code for the debug_plugin.cpp implementation is available in the al-plugins repository. Plugin compilation: creating a shared library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`Figure 11`_ shows the Makefile for compiling the plugin. This makefile -will also compile the C++ HLI code ``test_debug_plugin.cpp``, which uses -this plugin (`Figure 13`_). +The Makefile for compiling the plugin will also compile the C++ HLI code ``test_debug_plugin.cpp``, which uses +this plugin. Executing the Makefile generates the shared library ``debug_plugin.so`` and creates an executable ``test_debug_plugin`` for the HLI test @@ -336,25 +336,22 @@ Simplifying plugin code: introducing the ``AL_reader_helper_plugin`` class In this section, we show how to simplify the ``debug`` plugin code presented previously. For this purpose, we introduce the new helper class ``AL_reader_helper_plugin`` whose part of the header (provenance -feature operations have been removed for clarity) is shown in `Figure 15`_. -`Figure 16`_ depicts its implementation code. +feature operations have been removed for clarity) is shown in Figure 15. +Figure 16 depicts its implementation code. -.. literalinclude:: ./plugins/al_reader_helper_plugin.h - :caption: **Figure 15:** the ``AL_reader_helper_plugin`` class header - :name: Figure 15 - :language: C++ +.. note:: + + The complete source code for the al_reader_helper_plugin.h header is available in the al-plugins repository. By inheriting the helper class, we obtain the header of the ``Debug_plugin`` -class depicted in `Figure 17`_. The header code declares only the +class depicted in Figure 17. The header code declares only the ``read_data(..)`` function (from the plugin interface) whose implementation is overridden in the simplified implementation code of the ``Debug_plugin`` -class (`Figure 18`_). +class (Figure 18). +.. note:: -.. literalinclude:: ./plugins/al_reader_helper_plugin.cpp - :caption: **Figure 16:** the ``AL_reader_helper_plugin`` class implementation - :name: Figure 16 - :language: C++ + The complete source code for the al_reader_helper_plugin.cpp implementation is available in the al-plugins repository. .. code-block:: C++ :caption: **Figure 17:** the simplified ``Debug_plugin`` class header @@ -425,20 +422,13 @@ The requirement of IMAS-3121 ITER JIRA ticket is to fill in the ``ids_properties/creation_date`` node during a ``put()`` operation with the current date in the form YYYY-MM-DD. -.. literalinclude:: ./plugins/creation_date_plugin.cpp - :caption: **Figure 25:** Creation_date_plugin class implementation - :name: Figure 25 - :language: C++ +.. note:: -The ``Creation_date_plugin`` class whose implementation is depicted in -`Figure 25`_ implements this feature. `Figure 26`_ displays the header file -content. Provenance feature operations have been removed for clarity in -these files. + The complete source code for the creation_date_plugin.cpp implementation is available in the al-plugins repository. -.. literalinclude:: ./plugins/creation_date_plugin.cpp - :caption: **Figure 26:** Creation_date_plugin class header - :name: Figure 26 - :language: C++ +The ``Creation_date_plugin`` class implements this feature. The header file +content is also available in the al-plugins repository. Provenance feature operations have been removed for clarity in +these files. .. code-block:: python :caption: **Figure 27:** python client of the ``creation_date`` plugin @@ -789,21 +779,15 @@ Building a partial ``get()`` operation Skipping the read of an array of structure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. literalinclude:: ./plugins/partial_get_plugin.cpp - :caption: **Figure 31:** the PartialGetPlugin class implementation - :name: Figure 31 - :language: C++ +.. note:: -.. literalinclude:: ./plugins/partial_get_plugin.h - :caption: **Figure 32:** the PartialGetPlugin header class - :name: Figure 32 - :language: C++ + The complete source code for the PartialGetPlugin class implementation (partial_get_plugin.cpp) + and header (partial_get_plugin.h) is available in the al-plugins repository. In a first use-case, the user wants to access only few attributes of the ``equilibrium`` IDS for many shots. In order to speed up reading, he decides to skip the loading of the ``grids_ggd`` array of structures (AOS). -The use of the ``PartialGetPlugin`` class implementation (`Figure 31`_) with -its header (`Figure 32`_) provides an efficient solution. During the ``get()`` +The ``PartialGetPlugin`` class provides an efficient solution. During the ``get()`` operation, the plugin intercepts the HLI call to the function ``al_begin_arraystruct_action(...)`` for the ``grids_ggd`` AOS and sets its size (using the arraySize pointer) to 0 after displaying a warning to the diff --git a/common/xsltproc.py b/common/xsltproc.py new file mode 100644 index 00000000..009b7ad4 --- /dev/null +++ b/common/xsltproc.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# simple net.sf.saxon.Transform cli replacement via saxonche Python bindings +# example invokation: +# ./xsltproc.py -xsl IDSDef2MDSpreTree.xsl -s IDSDef.xml -o output.xml DD_GIT_DESCRIBE=1 AL_GIT_DESCRIBE=1 + +import argparse +import logging + +import saxonche + + +def parse_arguments() -> tuple: + """Parse arguments, similar to net.sf.saxon.Transform...""" + + parser = argparse.ArgumentParser( + prog="xsltproc.py", + description="Imitates Saxon-HE's net.sf.saxon.Transform.", + epilog="Additional arguments in format key=value will be set as xml parameters", + ) + parser.add_argument( + "-xsl", + "--stylesheet_file", + type=str, + required=True, + help="XSL style sheet file", + ) + parser.add_argument( + "-s", + "--source_file", + type=str, + required=True, + help="source XML document", + ) + parser.add_argument( + "-o", + "--output_file", + type=str, + required=True, + help="transformed output XML document", + ) + + args, other_args = parser.parse_known_args() + # Convert list of strings "key=value" into dict(key=value, ...) + other_kwargs = {k: v for k, v in map(lambda x: x.split("="), other_args)} + return (args, other_kwargs) + + +def saxon_xsltproc( + source_file: str, stylesheet_file: str, output_file: str, **kwargs +) -> None: + with saxonche.PySaxonProcessor(license=False) as proc: + xsltproc = proc.new_xslt30_processor() + for key, value in kwargs.items(): + string_value = proc.make_string_value(value) + xsltproc.set_parameter(key, string_value) + xsltproc.transform_to_file( + source_file=source_file, + stylesheet_file=stylesheet_file, + output_file=output_file, + ) + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + args, other_kwargs = parse_arguments() + saxon_xsltproc( + source_file=args.source_file, + stylesheet_file=args.stylesheet_file, + output_file=args.output_file, + **other_kwargs, + ) diff --git a/docs/requirements.txt b/docs/requirements.txt index e512142f..d700e884 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,5 @@ sphinx-immaterial>=0.12.0 sphinx-tabs>=3.4.0 sphinx-design>=0.5.0 -sphinx>=5.0 +sphinx>=5.0,<9.0 numpy>=1.20.0 diff --git a/docs/source/user_guide/installation.rst b/docs/source/user_guide/installation.rst index 3b72bdd0..dc2f77bd 100644 --- a/docs/source/user_guide/installation.rst +++ b/docs/source/user_guide/installation.rst @@ -17,11 +17,7 @@ Requirements - **Python 3.8+** - **Linux** (fully supported) -- **macOS and Windows** (experimental - in testing) -.. note:: - macOS and Windows support is still being tested. Linux is the primary supported platform. - Please report any issues on `GitHub `_. Binary wheels are provided for all platforms, so you don't need to compile anything. @@ -51,6 +47,13 @@ To build the IMAS-Core you need: - Boost C++ libraries (1.66 or newer) - PkgConfig +On Windows +- **Visual Studio 2022** with: + - Desktop Development with C++ + - C++ Make Tools for Windows +- **CMake** (included with Visual Studio) + + The following dependencies are only required for some of the components: - Backends @@ -62,9 +65,7 @@ The following dependencies are only required for some of the components: .. [#uda_install] When installing UDA, make sure you have `Cap'n'Proto `__ installed in your system - and add its support by adding the CMake switch `-DENABLE_CAPNP=ON` when configuring UDA. - - + and add its support by adding the CMake switch `-DENABLE_CAPNP=ON` when configuring UDA. Standard environments: .. md-tab-set:: @@ -89,6 +90,23 @@ Standard environments: details. - MATLAB, which is not freely available. + .. md-tab-item:: Windows with Visual Studio + + First, set up vcpkg: + + .. code-block:: bash + + git clone https://github.com/microsoft/vcpkg.git + cd vcpkg # VCPKG_INSTALLATION_PATH + bootstrap-vcpkg.bat + + Then run these commands in PowerShell before building: + + .. code-block:: powershell + + $env:PATH += ";C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\" + $env:PATH += ";C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX86\x86" + $env:PATH += ";" Building and installing IMAS-Core --------------------------------- @@ -107,18 +125,38 @@ First you need to clone the repository of the IMAS-Core you want to build: git clone git@github.com:iterorganization/IMAS-Core.git -cmake configuration +CMake configuration ~~~~~~~~~~~~~~~~~~~ Once you have cloned the repository, navigate your shell to the folder and run cmake. You can pass configuration options with ``-D OPTION=VALUE``. See below list for an overview of configuration options. +On Linux +'''''''' + .. code-block:: bash cd IMAS-Core cmake -B build -D CMAKE_INSTALL_PREFIX=$HOME/install -D OPTION1=VALUE1 -D OPTION2=VALUE2 [...] +On Windows +'''''''''' + +**Debug Build:** + +.. code-block:: bash + + cmake -Bbuild -S . -DVCPKG=ON -DCMAKE_INSTALL_PREFIX="" -DCMAKE_TOOLCHAIN_FILE="/scripts/buildsystems/vcpkg.cmake" -DAL_DOWNLOAD_DEPENDENCIES=ON cmake -B build -DCMAKE_INSTALL_PREFIX="$(pwd)/test-install/" -DAL_BACKEND_HDF5=ON -DAL_BACKEND_MDSPLUS=ON -DAL_BACKEND_UDA=ON -DAL_BUILD_MDSPLUS_MODELS=ON -DAL_PYTHON_BINDINGS=no-build-isolation -DAL_DOWNLOAD_DEPENDENCIES=ON -DDD_GIT_REPOSITORY=https://github.com/iterorganization/IMAS-Data-Dictionary.git -DDD_VERSION=main -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_CXX_STANDARD=17 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ + +**Release Build:** + +.. code-block:: bash + + cmake -Bbuild -S . -DCMAKE_BUILD_TYPE=Release -DVCPKG=ON -DCMAKE_INSTALL_PREFIX="" -DCMAKE_TOOLCHAIN_FILE="/scripts/buildsystems/vcpkg.cmake" -DAL_DOWNLOAD_DEPENDENCIES=ON cmake -B build -DCMAKE_INSTALL_PREFIX="$(pwd)/test-install/" -DAL_BACKEND_HDF5=ON -DAL_BACKEND_MDSPLUS=ON -DAL_BACKEND_UDA=ON -DAL_BUILD_MDSPLUS_MODELS=ON -DAL_PYTHON_BINDINGS=no-build-isolation -DAL_DOWNLOAD_DEPENDENCIES=ON -DDD_GIT_REPOSITORY=https://github.com/iterorganization/IMAS-Data-Dictionary.git -DDD_VERSION=main -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_CXX_STANDARD=17 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ + + + .. note:: CMake will automatically fetch dependencies from required repositories diff --git a/include/fix_include_windows.h b/include/fix_include_windows.h index 01692d40..db160e10 100644 --- a/include/fix_include_windows.h +++ b/include/fix_include_windows.h @@ -16,6 +16,9 @@ To fix std::min() after any #include "microsoft-mega-api.h" // use the Standard C++ std::min() and std::max() and ensure to #include #include + +#ifdef __cplusplus #include using std::max; -using std::min; \ No newline at end of file +using std::min; +#endif \ No newline at end of file diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 71f8b780..528e33f6 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -26,6 +26,62 @@ else() set(LIBRARY_DIRS) endif() +# Add vcpkg directories on Windows +if(WIN32) + message(STATUS "Searching for vcpkg directories...") + message(STATUS " CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}") + message(STATUS " CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") + message(STATUS " VCPKG_INSTALLED_DIR: ${VCPKG_INSTALLED_DIR}") + message(STATUS " VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") + + # Method 1: Try VCPKG_INSTALLED_DIR variable + if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_TARGET_TRIPLET) + if(EXISTS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin") + list(APPEND LIBRARY_DIRS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin") + list(APPEND LIBRARY_DIRS "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin") + message(STATUS " Found via VCPKG_INSTALLED_DIR: ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}") + endif() + endif() + + # Method 2: Try extracting from CMAKE_TOOLCHAIN_FILE + if(DEFINED CMAKE_TOOLCHAIN_FILE) + get_filename_component(VCPKG_ROOT "${CMAKE_TOOLCHAIN_FILE}" DIRECTORY) + get_filename_component(VCPKG_ROOT "${VCPKG_ROOT}" DIRECTORY) + get_filename_component(VCPKG_ROOT "${VCPKG_ROOT}" DIRECTORY) + if(EXISTS "${VCPKG_ROOT}/installed/x64-windows/bin") + list(APPEND LIBRARY_DIRS "${VCPKG_ROOT}/installed/x64-windows/bin") + list(APPEND LIBRARY_DIRS "${VCPKG_ROOT}/installed/x64-windows/debug/bin") + message(STATUS " Found via CMAKE_TOOLCHAIN_FILE: ${VCPKG_ROOT}/installed/x64-windows") + endif() + endif() + + # Method 3: Search parent directories for vcpkg_installed (FetchContent/ExternalProject builds) + set(SEARCH_DIR "${CMAKE_BINARY_DIR}") + foreach(i RANGE 6) + get_filename_component(SEARCH_DIR "${SEARCH_DIR}" DIRECTORY) + if(EXISTS "${SEARCH_DIR}/vcpkg_installed/x64-windows/bin") + list(APPEND LIBRARY_DIRS "${SEARCH_DIR}/vcpkg_installed/x64-windows/bin") + list(APPEND LIBRARY_DIRS "${SEARCH_DIR}/vcpkg_installed/x64-windows/debug/bin") + message(STATUS " Found via parent search: ${SEARCH_DIR}/vcpkg_installed") + break() + endif() + endforeach() + + # Remove duplicates + if(LIBRARY_DIRS) + list(REMOVE_DUPLICATES LIBRARY_DIRS) + endif() + + # Ensure we have at least some directories (install-time fallback) + if(NOT LIBRARY_DIRS) + message(WARNING "Could not find vcpkg directories at configure time. Adding PATH as fallback.") + # This will be resolved at install time from system PATH + list(APPEND LIBRARY_DIRS "$ENV{PATH}") + endif() + + message(STATUS "Python wheel LIBRARY_DIRS: ${LIBRARY_DIRS}") +endif() + # Build POST_EXCLUDE_REGEXES list based on platform set(POST_EXCLUDE_PATTERNS ".*system32/.*\\.dll" # Windows system DLLs diff --git a/src/hdf5/CMakeLists.txt b/src/hdf5/CMakeLists.txt index dc9c043b..9bc92385 100644 --- a/src/hdf5/CMakeLists.txt +++ b/src/hdf5/CMakeLists.txt @@ -1,6 +1,13 @@ # CMake configuration for the HDF5 backend - -find_package( HDF5 COMPONENTS C HL REQUIRED ) +if(WIN32) + # Try modern CONFIG mode first (vcpkg), fallback to legacy FindHDF5 module + find_package( hdf5 CONFIG QUIET ) + if( NOT hdf5_FOUND ) + find_package( HDF5 COMPONENTS C HL REQUIRED ) + endif() +else() + find_package( HDF5 COMPONENTS C HL REQUIRED ) +endif() target_sources( al PRIVATE hdf5_backend.cpp @@ -14,8 +21,23 @@ target_sources( al PRIVATE hdf5_backend_factory.cpp ) target_compile_definitions( al PRIVATE -DHDF5 ) - -target_include_directories( al PRIVATE ${HDF5_C_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ) -target_link_libraries( al PRIVATE ${HDF5_C_LIBRARIES} ) -target_compile_definitions( al PRIVATE ${HDF5_C_DEFINITIONS} ) +if(WIN32) + # Use modern CMake targets if available (vcpkg), otherwise legacy variables + if( TARGET hdf5::hdf5-shared ) + target_link_libraries( al PRIVATE hdf5::hdf5-shared hdf5::hdf5_hl-shared ) + elseif( TARGET hdf5::hdf5-static ) + target_link_libraries( al PRIVATE hdf5::hdf5-static hdf5::hdf5_hl-static ) + else() + # Legacy FindHDF5 module + target_include_directories( al PRIVATE ${HDF5_C_INCLUDE_DIRS} ) + target_link_libraries( al PRIVATE ${HDF5_C_LIBRARIES} ) + target_compile_definitions( al PRIVATE ${HDF5_C_DEFINITIONS} ) + endif() + + target_include_directories( al PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) +else() + target_include_directories( al PRIVATE ${HDF5_C_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ) + target_link_libraries( al PRIVATE ${HDF5_C_LIBRARIES} ) + target_compile_definitions( al PRIVATE ${HDF5_C_DEFINITIONS} ) +endif() From f5ac71e5fe67fbd698104e26f656303c77488a9f Mon Sep 17 00:00:00 2001 From: Prasad Date: Fri, 23 Jan 2026 10:42:11 +0100 Subject: [PATCH 33/44] added Python 314 wheels (#30) --- .github/workflows/wheels.yml | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index f8c39e50..7c88b960 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -65,6 +65,19 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" + - os: ubuntu-24.04 + triplet: x64-linux + python: 314 + cibw_platform: linux + cibw_archs: x86_64 + platform_id: manylinux_x86_64 + manylinux_image: quay.io/pypa/manylinux_2_28_x86_64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=ON + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + - os: macos-14 triplet: arm64-osx python: 311 @@ -127,6 +140,19 @@ jobs: UDA_REF: "2.9.3" FMT_REF: "11.1.4" + - os: windows-2022 + triplet: x64-windows + python: 314 + platform_id: win_amd64 + cibw_platform: windows + cibw_archs: AMD64 + manylinux_image: windows + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" + FMT_REF: "11.1.4" + steps: - uses: actions/checkout@v4 with: @@ -151,7 +177,7 @@ jobs: - name: Install cibuildwheel for windows if: startsWith(matrix.os, 'windows') run: | - python -m pip install cibuildwheel==3.0.0 + python -m pip install cibuildwheel==3.1.0 - name: Restore cibuildwheel cache id: cache @@ -187,6 +213,7 @@ jobs: CIBW_PLATFORM: ${{ matrix.cibw_platform }} CIBW_ARCHS: ${{ matrix.cibw_archs }} CIBW_BUILD_VERBOSITY: 1 + CIBW_SKIP: "cp31?t-*" # Skip free-threading builds (not supported yet) CIBW_CONFIG_SETTINGS: > cmake.define.${{ matrix.AL_BACKEND_HDF5 }} cmake.define.${{ matrix.AL_BACKEND_MDSPLUS }} @@ -209,13 +236,14 @@ jobs: path: C:\vcpkg\installed key: ${{ matrix.os }}-${{ env.cache-name }}-a - - uses: pypa/cibuildwheel@v3.0.0 + - uses: pypa/cibuildwheel@v3.1.0 if: startsWith(matrix.os, 'ubuntu-') env: CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} CIBW_PLATFORM: ${{ matrix.cibw_platform }} CIBW_ARCHS: ${{ matrix.cibw_archs }} CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_SKIP: "cp31?t-*" # Skip free-threading builds (not supported yet) # Install system libraries # NOTE: manylinux_2_28 is AlmaLinux 8 based, e.g. use yum/dnf @@ -261,12 +289,13 @@ jobs: output-dir: wheelhouse config-file: "{package}/pyproject.toml" - - uses: pypa/cibuildwheel@v3.0.0 + - uses: pypa/cibuildwheel@v3.1.0 if: startsWith(matrix.os, 'macos-') env: CIBW_BUILD: cp${{ matrix.python }}-${{ matrix.platform_id }} CIBW_PLATFORM: macos CIBW_ARCHS: ${{ matrix.cibw_archs }} + CIBW_SKIP: "cp31?t-*" # Skip free-threading builds (not supported yet) CIBW_CONFIG_SETTINGS: > cmake.define.${{ matrix.AL_BACKEND_HDF5 }} From 18a6a3611af8ced962c2270939280c6858858ba3 Mon Sep 17 00:00:00 2001 From: Olivier Hoenen Date: Mon, 26 Jan 2026 08:08:48 +0100 Subject: [PATCH 34/44] Update MDSplus backend configuration configuration (#31) --- common/al_env.sh.in | 2 +- docs/source/user_guide/configuration.rst | 4 ++++ src/mdsplus/mdsplus_backend.cpp | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/common/al_env.sh.in b/common/al_env.sh.in index 22878aac..1d363128 100644 --- a/common/al_env.sh.in +++ b/common/al_env.sh.in @@ -13,7 +13,7 @@ if [ -d "${CMAKE_INSTALL_PREFIX}/lib/python${PYVER}/site-packages" ]; then export PYTHONPATH="${CMAKE_INSTALL_PREFIX}/lib/python${PYVER}/site-packages:$PYTHONPATH" fi if [ -d "${CMAKE_INSTALL_PREFIX}/models/mdsplus" ]; then - export ids_path="${CMAKE_INSTALL_PREFIX}/models/mdsplus" + export MDSPLUS_MODELS_PATH="${CMAKE_INSTALL_PREFIX}/models/mdsplus" fi if [ -f "${CMAKE_INSTALL_PREFIX}/include/IDSDef.xml" ]; then export IDSDEF_PATH="${CMAKE_INSTALL_PREFIX}/include/IDSDef.xml" diff --git a/docs/source/user_guide/configuration.rst b/docs/source/user_guide/configuration.rst index 185a5243..cba19b58 100644 --- a/docs/source/user_guide/configuration.rst +++ b/docs/source/user_guide/configuration.rst @@ -102,6 +102,10 @@ Backend specific environment variables Specify the path to storing temporary data. If it is not set, the default location `/dev/shm/` or the current working directory will be chosen. +``MDSPLUS_MODELS_PATH`` + Specify the path where the MDSplus models files are stored for a given + version of the Data Dictionary (previously set by the `ids_path`, which + is now internally handled by the backend). UDA client configuration to reach the server at ITER diff --git a/src/mdsplus/mdsplus_backend.cpp b/src/mdsplus/mdsplus_backend.cpp index a6bdbfcc..a0c73f1b 100644 --- a/src/mdsplus/mdsplus_backend.cpp +++ b/src/mdsplus/mdsplus_backend.cpp @@ -1428,7 +1428,7 @@ static char *getPathInfo(MDSplus::Data *data, MDSplus::TreeNode *refNode) std::string translatedBaseStr(translatedBase); if(originalIdsPath == "") { - char *origPath = getenv(szPath); + char *origPath = getenv("MDSPLUS_MODELS_PATH"); if(origPath) originalIdsPath = origPath; } @@ -1495,7 +1495,7 @@ void MDSplusBackend::resetIdsPath(std::string strTree) { if(originalIdsPath == "") //Do it only once in case it is defined { - char *origPath = getenv(szPath); + char *origPath = getenv("MDSPLUS_MODELS_PATH"); if(origPath) originalIdsPath = origPath; } From d2d7ec9b454ea4fe0a5759c52c0caedda7e539a6 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Tue, 27 Jan 2026 11:42:18 +0100 Subject: [PATCH 35/44] Removing UDA again, to create a commit with just several python versions. --- .github/workflows/wheels.yml | 8 ++++---- CMakeLists.txt | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index bba42dd6..576efe35 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -73,7 +73,7 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=ON + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF UDA_REF: "2.9.3" - os: macos-14 @@ -84,7 +84,7 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=ON + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF UDA_REF: "2.9.3" - os: macos-14 @@ -95,7 +95,7 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=ON + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF UDA_REF: "2.9.3" - os: macos-14 @@ -106,7 +106,7 @@ jobs: cibw_archs: arm64 AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF - AL_BACKEND_UDA: AL_BACKEND_UDA=ON + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF UDA_REF: "2.9.3" - os: windows-2022 diff --git a/CMakeLists.txt b/CMakeLists.txt index d7ad6ee1..4adecc7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,6 +73,9 @@ if(APPLE) # Disable MDSPlus: message(STATUS "Disabling MDSPlus backend on macOS") set(AL_BACKEND_MDSPLUS OFF CACHE BOOL "MDSPlus backend" FORCE) + # Disable UDA: + message(STATUS "Disabling UDA backend on macOS") + set(AL_BACKEND_UDA OFF CACHE BOOL "UDA backend" FORCE) endif() From 801250e02b37bab4384b082a97df75502aba518f Mon Sep 17 00:00:00 2001 From: Ludovic Fleury Date: Wed, 28 Jan 2026 08:53:02 +0100 Subject: [PATCH 36/44] IMAS-5428: enable warning message --- src/hdf5/hdf5_utils.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/hdf5/hdf5_utils.cpp b/src/hdf5/hdf5_utils.cpp index a9cd66e4..c76352a9 100644 --- a/src/hdf5/hdf5_utils.cpp +++ b/src/hdf5/hdf5_utils.cpp @@ -293,7 +293,8 @@ void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath, bool if (*file_id < 0) { if (for_deletion) { remove(filePath.c_str()); - //printf("WARNING: The HDF5 master file '%s' was probably corrupted. It has been deleted and the linked IDS files could not be deleted automatically.\n", filePath.c_str()); + printf("WARNING: The HDF5 master file '%s' was corrupted and re-created, but linked \ + IDS h5 files may remain and would need to be removed manually unless replaced by subsequent write operations.\n", filePath.c_str()); *file_id = -1; return; } else { @@ -302,9 +303,6 @@ void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath, bool throw ALBackendException(message, LOG); } } - else { - //printf("master file read successfully with file_id=%d\n", *file_id); - } } } From a4108b30c6bb3809866c2b5f4e58b704c5d69754 Mon Sep 17 00:00:00 2001 From: fleuryl-ai Date: Wed, 28 Jan 2026 11:24:18 +0100 Subject: [PATCH 37/44] Proposed fix for IMAS-5428: Issue with imas.create() for HDF5 files when badly closed (#27) --- src/hdf5/hdf5_utils.cpp | 59 +++++++++++++++++++++++----------------- src/hdf5/hdf5_utils.h | 4 +-- src/hdf5/hdf5_writer.cpp | 4 +-- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/hdf5/hdf5_utils.cpp b/src/hdf5/hdf5_utils.cpp index 3739b61e..c76352a9 100644 --- a/src/hdf5/hdf5_utils.cpp +++ b/src/hdf5/hdf5_utils.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include using namespace boost::filesystem; @@ -178,7 +179,10 @@ void HDF5Utils::deleteIDSFile(const std::string &filePath) { void HDF5Utils::deleteMasterFile(const std::string &filePath, hid_t *file_id, std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string &files_directory, std::string &relative_file_path) { if (exists(filePath.c_str())) { - openMasterFile(file_id, filePath); + openMasterFile(file_id, filePath, true); + if (*file_id == -1) { + return; + } initExternalLinks(file_id, opened_IDS_files, files_directory, relative_file_path); deleteIDSFiles(opened_IDS_files, files_directory, relative_file_path); closeMasterFile(file_id); @@ -237,7 +241,7 @@ void HDF5Utils::createIDSFile(OperationContext * ctx, std::string &IDSpulseFile, } -void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only) { +void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only, std::string backend_version) { if (!exists(IDSpulseFile.c_str())) return; *IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); @@ -254,15 +258,26 @@ void HDF5Utils::openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, h } } else { - char error_message[200]; - sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. It might indicate that the file is being currently handled by a writing concurrent process.\n", ctx->getDataobjectName().c_str()); - throw ALBackendException(error_message, LOG); + if (errno == EAGAIN || errno == EACCES || errno == EBUSY) { + char error_message[200]; + sprintf(error_message, "Unable to open external file in Read-Write mode for IDS: %s. It might indicate that the file is being currently handled by a writing concurrent process.\n", ctx->getDataobjectName().c_str()); + throw ALBackendException(error_message, LOG); + } + else { + //H5Eprint(H5E_DEFAULT, stderr); + remove(IDSpulseFile.c_str()); + *IDS_file_id = -2; + + createIDSFile(ctx, IDSpulseFile, backend_version, IDS_file_id); + + } + } } } -void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath) { //open master file +void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath, bool for_deletion) { //open master file if (*file_id != -1) return; if (!exists(filePath)) { @@ -276,13 +291,18 @@ void HDF5Utils::openMasterFile(hid_t *file_id, const std::string &filePath) { // if (*file_id < 0) { //have a try now in read only access *file_id = H5Fopen(filePath.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT); if (*file_id < 0) { - std::string message("Unable to open HDF5 master file: "); - message += filePath; - throw ALBackendException(message, LOG); + if (for_deletion) { + remove(filePath.c_str()); + printf("WARNING: The HDF5 master file '%s' was corrupted and re-created, but linked \ + IDS h5 files may remain and would need to be removed manually unless replaced by subsequent write operations.\n", filePath.c_str()); + *file_id = -1; + return; + } else { + std::string message("Unable to open HDF5 master file: "); + message += filePath; + throw ALBackendException(message, LOG); + } } - else { - //printf("master file read successfully with file_id=%d\n", *file_id); - } } } @@ -375,17 +395,8 @@ herr_t file_info(hid_t loc_id, const char *IDS_link_name, const H5L_info_t * lin std::string IDSpulseFile = hdf5_utils.getIDSPulseFilePath(od->files_directory, od->relative_file_path, std::string(IDS_link_name)); if (exists(IDSpulseFile.c_str())) { hid_t IDS_file_id = H5Fopen(IDSpulseFile.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - if (IDS_file_id < 0) { - std::string message("Unable to open external file: "); - message += IDSpulseFile; - throw ALBackendException(message, LOG); - - /*if (!od->mode) { - if (H5Lexists(IDS_file_id, IDS_link_name, H5P_DEFAULT) > 0) - H5Ldelete(IDS_file_id, IDS_link_name, H5P_DEFAULT); - }*/ - } - hdf5_utils.closeIDSFile(IDS_file_id, IDS_link_name); //closing the IDS file + if (IDS_file_id >= 0) + hdf5_utils.closeIDSFile(IDS_file_id, IDS_link_name); //closing the IDS file } od->link_names[od->count] = (char *) malloc(100); strcpy(od->link_names[od->count], IDS_link_name); @@ -755,5 +766,3 @@ void HDF5Utils::readOptions(uri::Uri uri, bool *compression_enabled, bool *readB *write_cache = (size_t) (atof(value.c_str()) * 1024 * 1024); } } - - diff --git a/src/hdf5/hdf5_utils.h b/src/hdf5/hdf5_utils.h index 9d072606..a7d621a5 100644 --- a/src/hdf5/hdf5_utils.h +++ b/src/hdf5/hdf5_utils.h @@ -39,7 +39,7 @@ class HDF5Utils { std::string getPulseFilePath(DataEntryContext * ctx, int mode, int strategy, std::string & files_directory, std::string & relative_file_path); void deleteIDSFiles(std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string & files_directory, std::string & relative_file_path); void createMasterFile(DataEntryContext * ctx, std::string &filePath, hid_t *file_id, std::string &backend_version); - void openMasterFile(hid_t *file_id, const std::string &filePath); + void openMasterFile(hid_t *file_id, const std::string &filePath, bool for_deletion = false); void initExternalLinks(hid_t *file_id, std::unordered_map < std::string, hid_t > &opened_IDS_files, std::string &files_directory, std::string &relative_file_path); public: @@ -58,7 +58,7 @@ class HDF5Utils { bool pulseFileExists(const std::string &IDS_pulse_file); void closeMasterFile(hid_t *file_id); void removeLinkFromMasterPulseFile(hid_t &file_id, const std::string &link_name); - void openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only); + void openIDSFile(OperationContext * ctx, std::string &IDSpulseFile, hid_t *IDS_file_id, bool try_read_only, std::string backend_version = ""); void closeIDSFile(hid_t pulse_file_id, const std::string &external_link_name) ; void createIDSFile(OperationContext * ctx, std::string &IDSpulseFile, std::string &backend_version, hid_t *IDS_file_id); void removeLinkFromIDSPulseFile(hid_t &IDS_file_id, const std::string &IDS_link_name); diff --git a/src/hdf5/hdf5_writer.cpp b/src/hdf5/hdf5_writer.cpp index 7aefa3b6..d914a7d3 100644 --- a/src/hdf5/hdf5_writer.cpp +++ b/src/hdf5/hdf5_writer.cpp @@ -138,7 +138,7 @@ void HDF5Writer::create_IDS_group(OperationContext * ctx, hid_t file_id, std::un hdf5_utils.createIDSFile(ctx, IDSpulseFile, backend_version, &IDS_file_id); } else { - hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false); + hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false, backend_version); } opened_IDS_files[IDS_link_name] = IDS_file_id; @@ -150,7 +150,7 @@ void HDF5Writer::create_IDS_group(OperationContext * ctx, hid_t file_id, std::un hdf5_utils.createIDSFile(ctx, IDSpulseFile, backend_version, &IDS_file_id); } else { - hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false); + hdf5_utils.openIDSFile(ctx, IDSpulseFile, &IDS_file_id, false, backend_version); } opened_IDS_files[IDS_link_name] = IDS_file_id; From 1d453db11e49f5224cfb288cbc408d73e18e7ce7 Mon Sep 17 00:00:00 2001 From: Olivier Hoenen Date: Wed, 28 Jan 2026 11:47:47 +0100 Subject: [PATCH 38/44] add doc for IMAS_LOCAL_HOSTS configuration --- docs/source/user_guide/configuration.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/source/user_guide/configuration.rst b/docs/source/user_guide/configuration.rst index cba19b58..97186c06 100644 --- a/docs/source/user_guide/configuration.rst +++ b/docs/source/user_guide/configuration.rst @@ -46,6 +46,15 @@ Environment variables controlling IMAS-Core behaviour in the Pythonens-user API. +``IMAS_LOCAL_HOSTS`` + If you have a UDA server on a site where users have direct access to the IMAS data files, + the IMAS-Core backend can decide to use a direct file access (via the relevant backend, e.g. HDF5) + instead of going via the UDA server (which has performance overheads). If you want to use this + feature, you need to set a list of UDA server hostname (cf. ``UDA_HOST`` [#uda_uri]_ ) in the + ``IMAS_LOCAL_HOSTS`` environment variable. You can specify several servers separated with a + semi-colon ``;``. + + Environment variables controlling access layer plugins ------------------------------------------------------ From 701c930d4670f7aaa08a48cd4b952f9cf694b4d4 Mon Sep 17 00:00:00 2001 From: Deepak <56668629+deepakmaroo@users.noreply.github.com> Date: Wed, 28 Jan 2026 18:36:55 +0100 Subject: [PATCH 39/44] Set default UDA local_cache path to /tmp/$USER (#33) --- common/doc_common/imas_uri.rst | 2 +- docs/source/user_guide/backends_guide.rst | 2 +- src/uda/uda_backend.cpp | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/common/doc_common/imas_uri.rst b/common/doc_common/imas_uri.rst index 891e76ac..30acbf6d 100644 --- a/common/doc_common/imas_uri.rst +++ b/common/doc_common/imas_uri.rst @@ -248,6 +248,6 @@ The :ref:`UDA backend` also recognizes these backend-specific query keys. and downloading IDS files to the local ``local_cache`` directory. ``local_cache`` - UDA ``local_cache`` is set to ``tmp/path_in_uri`` by default. This is used along with ``fetch=1`` in the query. + UDA ``local_cache`` is set to ``tmp/uda-cache-of-$USER/path_in_uri`` by default. This is used along with ``fetch=1`` in the query. Set ``local_cache=/path/to/local/cache/directory`` and the download directory will be ``local_cache/path_in_uri``. ``local_cache`` specifies the path to the local cache directory where IDSs will be downloaded. diff --git a/docs/source/user_guide/backends_guide.rst b/docs/source/user_guide/backends_guide.rst index f20840a4..f918a7ea 100644 --- a/docs/source/user_guide/backends_guide.rst +++ b/docs/source/user_guide/backends_guide.rst @@ -217,6 +217,6 @@ The :ref:`UDA backend` also recognizes these backend-specific query keys. and downloading IDS files to the local ``local_cache`` directory. ``local_cache`` - UDA ``local_cache`` is set to ``tmp/path_in_uri`` by default. This is used along with ``fetch=1`` in the query. + UDA ``local_cache`` is set to ``tmp/uda-cache-of-$USER/path_in_uri`` by default. This is used along with ``fetch=1`` in the query. Set ``local_cache=/path/to/local/cache/directory`` and the download directory will be ``local_cache/path_in_uri``. ``local_cache`` specifies the path to the local cache directory where IDSs will be downloaded. diff --git a/src/uda/uda_backend.cpp b/src/uda/uda_backend.cpp index 02fabbaa..b1ccb81b 100644 --- a/src/uda/uda_backend.cpp +++ b/src/uda/uda_backend.cpp @@ -421,7 +421,10 @@ void UDABackend::fetch_files(const uri::Uri& uri) } remote_path_ = std::filesystem::path{ maybe_path.value()}; - auto cache_path = maybe_local_cache ? std::filesystem::path{maybe_local_cache.value()} : std::filesystem::temp_directory_path(); + + // Determine cache path: explicit parameter, or default to /tmp/uda-cache-of-$USER/path_in_uri for isolation + const char* user = std::getenv("USER"); + auto cache_path = maybe_local_cache ? std::filesystem::path{maybe_local_cache.value()} : user ? std::filesystem::temp_directory_path() / ("uda-cache-of-" + std::string{user}) : std::filesystem::temp_directory_path() / "uda-cache"; local_path_ = cache_path / remote_path_.relative_path(); std::string backend = maybe_backend.value(); From df82138b37eff0de08509dcb1ffb2bcc3866b715 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 6 Feb 2026 17:10:31 +0100 Subject: [PATCH 40/44] adding python 3.14 to macos-arm --- .github/workflows/wheels.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 7ebb3d33..c543a459 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -122,6 +122,17 @@ jobs: AL_BACKEND_UDA: AL_BACKEND_UDA=OFF UDA_REF: "2.9.3" + - os: macos-14 + triplet: arm64-osx + python: 314 + platform_id: macosx_arm64 + cibw_platform: macos + cibw_archs: arm64 + AL_BACKEND_HDF5: AL_BACKEND_HDF5=ON + AL_BACKEND_MDSPLUS: AL_BACKEND_MDSPLUS=OFF + AL_BACKEND_UDA: AL_BACKEND_UDA=OFF + UDA_REF: "2.9.3" + - os: windows-2022 triplet: x64-windows python: 310 From c741b42d8804bf0de638a28df081d7c71cfdc989 Mon Sep 17 00:00:00 2001 From: Paulo Abreu Date: Fri, 6 Feb 2026 17:19:38 +0100 Subject: [PATCH 41/44] macos target is now 14 everywhere to ensure ARM processors only. --- .github/workflows/wheels.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index c543a459..4430d290 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -358,13 +358,13 @@ jobs: -DSSLAUTHENTICATION=ON \ -DCLIENT_ONLY=ON \ -DENABLE_CAPNP=ON \ - -DMACOSX_DEPLOYMENT_TARGET=11.0 \ + -DMACOSX_DEPLOYMENT_TARGET=14.0 \ -DCMAKE_INSTALL_PREFIX=/tmp/uda-install >&2 && cmake --build build --target install -j >&2; # Where to find the dependencies CIBW_ENVIRONMENT_MACOS: > - MACOSX_DEPLOYMENT_TARGET=11.0 + MACOSX_DEPLOYMENT_TARGET=14.0 CMAKE_PREFIX_PATH="/tmp/uda-install:/opt/homebrew:/usr/local" PKG_CONFIG_PATH="/tmp/uda-install/lib/pkgconfig:/opt/homebrew/lib/pkgconfig:/usr/local/lib/pkgconfig" From 0e51105079613adff450de1bc5c99cfa590e21eb Mon Sep 17 00:00:00 2001 From: Ludovic Fleury Date: Fri, 6 Feb 2026 17:26:48 +0100 Subject: [PATCH 42/44] Catching exception for empty static AOS shapes --- src/hdf5/hdf5_writer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hdf5/hdf5_writer.cpp b/src/hdf5/hdf5_writer.cpp index d914a7d3..57d8f702 100644 --- a/src/hdf5/hdf5_writer.cpp +++ b/src/hdf5/hdf5_writer.cpp @@ -751,7 +751,11 @@ void HDF5Writer::createOrUpdateAOSShapesDataSet(ArraystructContext * ctx, hid_t dataSetHandler->setSliceMode(ctx); timedAOS_shape = readTimedAOSShape(ctx, loc_id, arrctx_indices); //printf("modified timedAOS_shape=%d\n", timedAOS_shape); + if (aos_shapes.size() == 0) { + throw ALBackendException("HDF5Backend: unexpected AOS shapes (size=0).", LOG); + } aos_shapes[timed_AOS_index] = timedAOS_shape - slices_extension; + /*for (size_t i = 0; i < aos_shapes.size(); i++) { printf("tensorized_path=%s, aos_shapes[%d]=%d\n", tensorized_path.c_str(), i, aos_shapes[i]); }*/ From f977afaba092078d3d2c3dc8b9d72e479a41a1d4 Mon Sep 17 00:00:00 2001 From: Olivier Hoenen Date: Mon, 9 Feb 2026 11:27:10 +0100 Subject: [PATCH 43/44] add CODEOWNERS --- .github/CODEOWNERS | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..c8a325df --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,15 @@ +# This file allows setting automatically reviewers for pull requests. +# Each line is a file pattern followed by one or more owners. +# The last match takes precedence over previous ones. +# Do not edit unless specifically mandated to do so. + +# Experts on specific backends +src/hdf5 @fleuryl-ai +src/mdsplus @GabrieleManduchi +src/uda @deepakmaroo + +# Global/fallback and technical modifications. +* @prasad-sawantdesai @olivhoenen + +# Modifications to CODEOWNERS and action workflows +.github/ @SimonPinches @olivhoenen From 805041f75595a5e422f1b3cb725376320b8e764a Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Mon, 9 Feb 2026 11:50:06 +0100 Subject: [PATCH 44/44] search logic for hdf libraries --- src/hdf5/CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/hdf5/CMakeLists.txt b/src/hdf5/CMakeLists.txt index 9bc92385..f9a19479 100644 --- a/src/hdf5/CMakeLists.txt +++ b/src/hdf5/CMakeLists.txt @@ -24,9 +24,15 @@ target_compile_definitions( al PRIVATE -DHDF5 ) if(WIN32) # Use modern CMake targets if available (vcpkg), otherwise legacy variables if( TARGET hdf5::hdf5-shared ) - target_link_libraries( al PRIVATE hdf5::hdf5-shared hdf5::hdf5_hl-shared ) + target_link_libraries( al PRIVATE hdf5::hdf5-shared ) + if( TARGET hdf5::hdf5_hl-shared ) + target_link_libraries( al PRIVATE hdf5::hdf5_hl-shared ) + endif() elseif( TARGET hdf5::hdf5-static ) - target_link_libraries( al PRIVATE hdf5::hdf5-static hdf5::hdf5_hl-static ) + target_link_libraries( al PRIVATE hdf5::hdf5-static ) + if( TARGET hdf5::hdf5_hl-static ) + target_link_libraries( al PRIVATE hdf5::hdf5_hl-static ) + endif() else() # Legacy FindHDF5 module target_include_directories( al PRIVATE ${HDF5_C_INCLUDE_DIRS} )