From e9101ab57f9fb4ab076ff9eb2a3b5e85aaafc21b Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 19 Jul 2024 01:25:36 +0100 Subject: [PATCH 001/145] draft scikit build core wheel --- CMakeLists.txt | 10 ++++++++++ openmc/__init__.py | 1 + openmc/openmc_exec.py | 22 ++++++++++++++++++++++ pyproject.toml | 9 ++++++++- setup.py | 11 +++++++++-- 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 openmc/openmc_exec.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f4cc1b527b..d7fa6cb2a2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,11 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # Set module path set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) +# Conditionally find Python if building with scikit-build-core +if(SKBUILD) + find_package(Python COMPONENTS Interpreter Development.Module REQUIRED) +endif() + # Enable correct usage of CXX_EXTENSIONS if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22) cmake_policy(SET CMP0128 NEW) @@ -614,3 +619,8 @@ install(FILES man/man1/openmc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES LICENSE DESTINATION "${CMAKE_INSTALL_DOCDIR}" RENAME copyright) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/openmc) + +if(SKBUILD) + install(TARGETS openmc RUNTIME DESTINATION openmc/bin) + install(TARGETS libopenmc LIBRARY DESTINATION openmc/lib) +endif() diff --git a/openmc/__init__.py b/openmc/__init__.py index 566d287068f..32320365d58 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -34,6 +34,7 @@ from openmc.polynomial import * from openmc.tracks import * from .config import * +from .openmc_exec import main # Import a few names from the model module from openmc.model import Model diff --git a/openmc/openmc_exec.py b/openmc/openmc_exec.py new file mode 100644 index 00000000000..72cd283beff --- /dev/null +++ b/openmc/openmc_exec.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +# helper script that launches the openmc binary + +import os +import sys +import sysconfig +from pathlib import Path + + +def main(): + lib_path = sysconfig.get_path("platlib") + "openmc/lib/openmc" + os.environ["LD_LIBRARY_PATH"] = ( + lib_path + ":" + os.environ.get("LD_LIBRARY_PATH", "") + ) + os.execv( + Path(sysconfig.get_path("platlib")) / "openmc" / "bin" / "openmc", sys.argv + ) + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index d1b2c335cd7..08bc9ad1313 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [build-system] -requires = ["setuptools", "wheel", "numpy", "cython"] +requires = ["setuptools", "wheel", "numpy", "cython", "scikit-build-core"] +build-backend = "scikit_build_core.build" [project] name = "openmc" @@ -72,3 +73,9 @@ openmc-track-to-vtk = "scripts.openmc_track_to_vtk:main" openmc-update-inputs = "scripts.openmc_update_inputs:main" openmc-update-mgxs = "scripts.openmc_update_mgxs:main" openmc-voxel-to-vtk = "scripts.openmc_voxel_to_vtk:main" +openmc-exec = "openmc.openmc_exec:main" + +[tool.scikit-build] +cmake.verbose = true +# cmake args can be passed in here or in the command line via exports or inline with the pip install +cmake.args = ["-DCMAKE_BUILD_TYPE=RELEASE"] \ No newline at end of file diff --git a/setup.py b/setup.py index 4e24f48a123..32cf2483ce0 100755 --- a/setup.py +++ b/setup.py @@ -1,13 +1,20 @@ #!/usr/bin/env python +import os import numpy as np -from setuptools import setup +from setuptools import setup, Extension from Cython.Build import cythonize +class OpenMCExtension(Extension): + def __init__(self, name, cmake_lists_dir=".", sources=[], **kwa): + Extension.__init__(self, name, sources=sources, **kwa) + self.cmake_lists_dir = os.path.abspath(cmake_lists_dir) + + kwargs = { # Cython is used to add resonance reconstruction and fast float_endf - 'ext_modules': cythonize('openmc/data/*.pyx'), + 'ext_modules': cythonize('openmc/data/*.pyx') + [OpenMCExtension('libopenmc')], 'include_dirs': [np.get_include()] } From e857f4529cd8833c475ee1cecbf6af7e48a61493 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 19 Jul 2024 01:31:11 +0100 Subject: [PATCH 002/145] renamed executable --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 08bc9ad1313..69090111b33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,7 +73,7 @@ openmc-track-to-vtk = "scripts.openmc_track_to_vtk:main" openmc-update-inputs = "scripts.openmc_update_inputs:main" openmc-update-mgxs = "scripts.openmc_update_mgxs:main" openmc-voxel-to-vtk = "scripts.openmc_voxel_to_vtk:main" -openmc-exec = "openmc.openmc_exec:main" +openmc = "openmc.openmc_exec:main" [tool.scikit-build] cmake.verbose = true From 61b7035681230cb0c94e8b819584ee104873faed Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Fri, 19 Jul 2024 10:02:52 +0100 Subject: [PATCH 003/145] linking libopenmc with openmc in cmakelists --- CMakeLists.txt | 7 ++++++- openmc/openmc_exec.py | 4 ---- pyproject.toml | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d7fa6cb2a2f..7c86c391521 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,6 +332,11 @@ if("${isSystemDir}" STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") endif() +if(SKBUILD) + set(CMAKE_INSTALL_RPATH "$ORIGIN") + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +endif() + #=============================================================================== # libopenmc #=============================================================================== @@ -622,5 +627,5 @@ install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${CMAKE if(SKBUILD) install(TARGETS openmc RUNTIME DESTINATION openmc/bin) - install(TARGETS libopenmc LIBRARY DESTINATION openmc/lib) + install(TARGETS libopenmc LIBRARY DESTINATION openmc/bin) endif() diff --git a/openmc/openmc_exec.py b/openmc/openmc_exec.py index 72cd283beff..579eeced24f 100644 --- a/openmc/openmc_exec.py +++ b/openmc/openmc_exec.py @@ -9,10 +9,6 @@ def main(): - lib_path = sysconfig.get_path("platlib") + "openmc/lib/openmc" - os.environ["LD_LIBRARY_PATH"] = ( - lib_path + ":" + os.environ.get("LD_LIBRARY_PATH", "") - ) os.execv( Path(sysconfig.get_path("platlib")) / "openmc" / "bin" / "openmc", sys.argv ) diff --git a/pyproject.toml b/pyproject.toml index 08bc9ad1313..c236b968035 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,9 +73,9 @@ openmc-track-to-vtk = "scripts.openmc_track_to_vtk:main" openmc-update-inputs = "scripts.openmc_update_inputs:main" openmc-update-mgxs = "scripts.openmc_update_mgxs:main" openmc-voxel-to-vtk = "scripts.openmc_voxel_to_vtk:main" -openmc-exec = "openmc.openmc_exec:main" +openmc = "openmc.openmc_exec:main" [tool.scikit-build] cmake.verbose = true # cmake args can be passed in here or in the command line via exports or inline with the pip install -cmake.args = ["-DCMAKE_BUILD_TYPE=RELEASE"] \ No newline at end of file +cmake.args = ["-DCMAKE_BUILD_TYPE=RELEASE"] From 2541d50e557653ba6dc17e70c47db8431edc72a4 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Sat, 20 Jul 2024 00:08:42 +0100 Subject: [PATCH 004/145] updated docs for pip install that compiles --- docs/source/quickinstall.rst | 25 ++++++------------ docs/source/usersguide/install.rst | 42 +++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst index 7f222f77cb8..3e0778a9eca 100644 --- a/docs/source/quickinstall.rst +++ b/docs/source/quickinstall.rst @@ -160,28 +160,19 @@ download and install OpenMC by entering the following commands in a terminal: git clone --recurse-submodules https://github.com/openmc-dev/openmc.git cd openmc - mkdir build && cd build - cmake .. - make - sudo make install + python -m pip install . -This will build an executable named ``openmc`` and install it (by default in -/usr/local/bin). If you do not have administrator privileges, the cmake command -should specify an installation directory where you have write access, e.g. +The easiest way to install it is using `pip `_. +This `pip` command will install the `openmc` Python package and compile an executable named ``openmc`` +and install it (by default in the bin folder of the Python package directory). .. code-block:: sh - cmake -DCMAKE_INSTALL_PREFIX=$HOME/.local .. - -The :mod:`openmc` Python package must be installed separately. The easiest way -to install it is using `pip `_. -From the root directory of the OpenMC repository, run: + python -m pip install . --global-option="build_ext" --global-option="--" --global-option="-DOPENMC_USE_MPI=ON" -.. code-block:: sh - - python -m pip install . +The compilion of the ``openmc`` can be customised by specifying CMake arguments. By default, OpenMC will be built with multithreading support. To build -distributed-memory parallel versions of OpenMC using MPI or to configure other -options, directions can be found in the :ref:`detailed installation instructions +distributed-memory parallel versions of OpenMC using MPI the above command can be run. +There are other options that can be set, more details can be found in the :ref:`detailed installation instructions `. diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 130e96c0ae6..203ec879430 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -175,9 +175,9 @@ feature can be used to access the installed packages. .. _install_source: ----------------------- -Installing from Source ----------------------- +-------------------------------- +Compiling from Source with CMake +-------------------------------- .. _prerequisites: @@ -367,6 +367,8 @@ Note that first a build directory is created as a subdirectory of the source directory. The Makefile in the top-level directory will automatically perform an out-of-source build with default options. +.. _cmake_arguemnts: + CMakeLists.txt Options ++++++++++++++++++++++ @@ -505,15 +507,15 @@ To run the test suite, you will first need to download a pre-generated cross section library along with windowed multipole data. Please refer to our :ref:`devguide_tests` documentation for further details. ---------------------- -Installing Python API ---------------------- +----------------------------------------------- +Installing Python API and compiling from source +----------------------------------------------- If you installed OpenMC using :ref:`Conda `, no further steps are necessary in order to use OpenMC's :ref:`Python API `. However, if -you are :ref:`installing from source `, the Python API is not -installed by default when ``make install`` is run because in many situations it -doesn't make sense to install a Python package in the same location as the +you are :ref:`Compiling from Source with CMake `, the Python API +is not installed by default when ``make install`` is run because in many situations +it doesn't make sense to install a Python package in the same location as the ``openmc`` executable (for example, if you are installing the package into a `virtual environment `_). The easiest way to install the :mod:`openmc` Python package is to use pip_, which is @@ -527,7 +529,27 @@ distribution/repository, run: pip will first check that all :ref:`required third-party packages ` have been installed, and if they are not present, they will be installed by downloading the appropriate packages from the Python -Package Index (`PyPI `_). +Package Index (`PyPI `_). The pip command will also compile +an executable named ``openmc`` and install it (by default in the bin folder of +the Python package directory). + +Passing CMake Options to via pip +-------------------------------- + +If you need to pass CMake options to the build process, you can do so by +running pip install with some additional options. All the CMake arguments +covered in the :ref:`CMakeLists.txt Options` are supported. +For example, to build OpenMC with MPI support, you can run: + +.. code-block:: sh + + python -m pip install . --global-option="build_ext" --global-option="--" --global-option="-DOPENMC_USE_MPI=ON" + +To build OpenMC with DAGMC support two CMake arguments are needed, you can run: + +.. code-block:: sh + + python -m pip install . --global-option="build_ext" --global-option="--" --global-option="-DOPENMC_USE_DAGMC=ON" --global-option="-DDAGMC_ROOT=/path/to/dagmc/installation" Installing in "Development" Mode -------------------------------- From f15e80f00537660919b2d8ff9d8b66f65562953b Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Tue, 23 Jul 2024 19:04:34 +0100 Subject: [PATCH 005/145] pip install with cmake args in ci --- tools/ci/gha-install.py | 33 ++++++++++++++++----------------- tools/ci/gha-install.sh | 3 --- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index f4b2fbb3187..5cf46baa24c 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -26,48 +26,47 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys os.chdir('build') # Build in debug mode by default with support for MCPL - cmake_cmd = ['cmake', '-DCMAKE_BUILD_TYPE=Debug', '-DOPENMC_USE_MCPL=on'] + pip_command = ['pip' 'install' '.[test,vtk]'] + pip_suffix = ['--config-settings=cmake.args=-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] # Turn off OpenMP if specified if not omp: - cmake_cmd.append('-DOPENMC_USE_OPENMP=off') + pip_suffix.append('-DOPENMC_USE_OPENMP=off') # Use MPI wrappers when building in parallel if mpi: - cmake_cmd.append('-DOPENMC_USE_MPI=on') + pip_suffix.append('-DOPENMC_USE_MPI=on') # Tell CMake to prefer parallel HDF5 if specified if phdf5: if not mpi: raise ValueError('Parallel HDF5 must be used in ' 'conjunction with MPI.') - cmake_cmd.append('-DHDF5_PREFER_PARALLEL=ON') + pip_suffix.append('-DHDF5_PREFER_PARALLEL=ON') else: - cmake_cmd.append('-DHDF5_PREFER_PARALLEL=OFF') + pip_suffix.append('-DHDF5_PREFER_PARALLEL=OFF') if dagmc: - cmake_cmd.append('-DOPENMC_USE_DAGMC=ON') - cmake_cmd.append('-DCMAKE_PREFIX_PATH=~/DAGMC') + pip_suffix.append('-DOPENMC_USE_DAGMC=ON') + pip_suffix.append('-DCMAKE_PREFIX_PATH=~/DAGMC') if libmesh: - cmake_cmd.append('-DOPENMC_USE_LIBMESH=ON') + pip_suffix.append('-DOPENMC_USE_LIBMESH=ON') libmesh_path = os.environ.get('HOME') + '/LIBMESH' - cmake_cmd.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) + pip_suffix.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) if ncrystal: - cmake_cmd.append('-DOPENMC_USE_NCRYSTAL=ON') + pip_suffix.append('-DOPENMC_USE_NCRYSTAL=ON') ncrystal_cmake_path = os.environ.get('HOME') + '/ncrystal_inst/lib/cmake' - cmake_cmd.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') + pip_suffix.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') # Build in coverage mode for coverage testing - cmake_cmd.append('-DOPENMC_ENABLE_COVERAGE=on') + pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=on') + pip_command.append(';'.join(pip_suffix)) # Build and install - cmake_cmd.append('..') - print(' '.join(cmake_cmd)) - subprocess.check_call(cmake_cmd) - subprocess.check_call(['make', '-j4']) - subprocess.check_call(['sudo', 'make', 'install']) + print(' '.join(pip_command)) + subprocess.check_call(pip_command) def main(): # Convert Travis matrix environment variables into arguments for install() diff --git a/tools/ci/gha-install.sh b/tools/ci/gha-install.sh index 2cef974d346..1673edd4ada 100755 --- a/tools/ci/gha-install.sh +++ b/tools/ci/gha-install.sh @@ -47,9 +47,6 @@ fi # Build and install OpenMC executable python tools/ci/gha-install.py -# Install Python API in editable mode -pip install -e .[test,vtk] - # For coverage testing of the C++ source files pip install cpp-coveralls From 3c98d8a8346746d1c0cd90dd60ed33c4799d5b39 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Tue, 23 Jul 2024 19:59:07 +0100 Subject: [PATCH 006/145] added missing , --- tools/ci/gha-install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index 5cf46baa24c..f8c9ebe7e53 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -26,7 +26,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys os.chdir('build') # Build in debug mode by default with support for MCPL - pip_command = ['pip' 'install' '.[test,vtk]'] + pip_command = ['pip', 'install', '.[test,vtk]'] pip_suffix = ['--config-settings=cmake.args=-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] # Turn off OpenMP if specified From 0aafd44dda9cdaffca73e83fd42c201eec0fbae5 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Tue, 23 Jul 2024 20:02:44 +0100 Subject: [PATCH 007/145] no need for manual creation of build dir --- tools/ci/gha-install.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index f8c9ebe7e53..536df1f9377 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -1,5 +1,4 @@ import os -import shutil import subprocess def which(program): @@ -20,10 +19,6 @@ def is_exe(fpath): def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): - # Create build directory and change to it - shutil.rmtree('build', ignore_errors=True) - os.mkdir('build') - os.chdir('build') # Build in debug mode by default with support for MCPL pip_command = ['pip', 'install', '.[test,vtk]'] From 9ef3beb1603bd286467dccbfa13eca87f29c9bf2 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 26 Jul 2024 13:05:41 +0100 Subject: [PATCH 008/145] [skip ci] adding apt packages for read the docs --- .readthedocs.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index b7b69f9fe59..fb49db819e5 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,6 +4,11 @@ build: os: "ubuntu-20.04" tools: python: "3.10" + apt_package: + - g++ + - cmake + - libhdf5-dev + - libpng-dev sphinx: configuration: docs/source/conf.py From 40ceaadea68b02e6758b4ef0a66194371095456c Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 26 Jul 2024 13:17:20 +0100 Subject: [PATCH 009/145] [skip ci] trying ubuntu 22.04 --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index fb49db819e5..e5d69973b34 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,7 @@ version: 2 build: - os: "ubuntu-20.04" + os: "ubuntu-22.04" tools: python: "3.10" apt_package: From 2c8cf714a716d77bcf9363d4e93abd73bb93defa Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 26 Jul 2024 13:18:08 +0100 Subject: [PATCH 010/145] [skip ci] added missing s --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e5d69973b34..bcbea55994e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,7 +4,7 @@ build: os: "ubuntu-22.04" tools: python: "3.10" - apt_package: + apt_packages: - g++ - cmake - libhdf5-dev From 4c0075f0f3fdb7562beff590a71de2da7ad0f9d7 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 26 Jul 2024 17:52:37 +0100 Subject: [PATCH 011/145] adding gha actions --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9293e319b42..1415074ad71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,9 +145,7 @@ jobs: - name: test shell: bash - run: | - CTEST_OUTPUT_ON_FAILURE=1 make test -C $GITHUB_WORKSPACE/build/ - $GITHUB_WORKSPACE/tools/ci/gha-script.sh + run: $GITHUB_WORKSPACE/tools/ci/gha-script.sh - name: after_success shell: bash From 4de0d948f0feceaa5c3fa1e4c1119f6db2224697 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Fri, 26 Jul 2024 23:30:11 +0100 Subject: [PATCH 012/145] upper case ON for cmake args --- tools/ci/gha-install.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index cb1b23b2433..a03c89712b1 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -14,7 +14,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys # Use MPI wrappers when building in parallel if mpi: - pip_suffix.append('-DOPENMC_USE_MPI=on') + pip_suffix.append('-DOPENMC_USE_MPI=ON') # Tell CMake to prefer parallel HDF5 if specified if phdf5: @@ -40,7 +40,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys pip_suffix.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') # Build in coverage mode for coverage testing - pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=on') + pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON') pip_command.append(';'.join(pip_suffix)) # Build and install From 688d6882d59e56da6b3f2e191986b788fadf7982 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 00:09:17 +0100 Subject: [PATCH 013/145] added quotes to cmake args --- tools/ci/gha-pip-install.py | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tools/ci/gha-pip-install.py diff --git a/tools/ci/gha-pip-install.py b/tools/ci/gha-pip-install.py new file mode 100644 index 00000000000..dde7535e0d6 --- /dev/null +++ b/tools/ci/gha-pip-install.py @@ -0,0 +1,63 @@ +import os +import subprocess + + +def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): + + # Build in debug mode by default with support for MCPL + pip_command = ['pip', 'install', '.[test,vtk]'] + pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] + + # Turn off OpenMP if specified + if not omp: + pip_suffix.append('-DOPENMC_USE_OPENMP=off') + + # Use MPI wrappers when building in parallel + if mpi: + pip_suffix.append('-DOPENMC_USE_MPI=ON') + + # Tell CMake to prefer parallel HDF5 if specified + if phdf5: + if not mpi: + raise ValueError('Parallel HDF5 must be used in ' + 'conjunction with MPI.') + pip_suffix.append('-DHDF5_PREFER_PARALLEL=ON') + else: + pip_suffix.append('-DHDF5_PREFER_PARALLEL=OFF') + + if dagmc: + pip_suffix.append('-DOPENMC_USE_DAGMC=ON') + pip_suffix.append('-DCMAKE_PREFIX_PATH=~/DAGMC') + + if libmesh: + pip_suffix.append('-DOPENMC_USE_LIBMESH=ON') + libmesh_path = os.environ.get('HOME') + '/LIBMESH' + pip_suffix.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) + + if ncrystal: + pip_suffix.append('-DOPENMC_USE_NCRYSTAL=ON') + ncrystal_cmake_path = os.environ.get('HOME') + '/ncrystal_inst/lib/cmake' + pip_suffix.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') + + # Build in coverage mode for coverage testing + pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON"') + + pip_command.append(';'.join(pip_suffix)) + # Build and install + print(' '.join(pip_command)) + subprocess.check_call(pip_command) + +def main(): + # Convert Travis matrix environment variables into arguments for install() + omp = (os.environ.get('OMP') == 'y') + mpi = (os.environ.get('MPI') == 'y') + phdf5 = (os.environ.get('PHDF5') == 'y') + dagmc = (os.environ.get('DAGMC') == 'y') + ncrystal = (os.environ.get('NCRYSTAL') == 'y') + libmesh = (os.environ.get('LIBMESH') == 'y') + + # Build and install + install(omp, mpi, phdf5, dagmc, libmesh, ncrystal) + +if __name__ == '__main__': + main() From 07a4dcd473fc048aeb4baf22bceb22fb203aa9a0 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 00:26:08 +0100 Subject: [PATCH 014/145] keeping same filename --- .github/workflows/ci.yml | 4 ++- tools/ci/gha-install.py | 4 +-- tools/ci/gha-pip-install.py | 63 ------------------------------------- 3 files changed, 5 insertions(+), 66 deletions(-) delete mode 100644 tools/ci/gha-pip-install.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1415074ad71..9293e319b42 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,7 +145,9 @@ jobs: - name: test shell: bash - run: $GITHUB_WORKSPACE/tools/ci/gha-script.sh + run: | + CTEST_OUTPUT_ON_FAILURE=1 make test -C $GITHUB_WORKSPACE/build/ + $GITHUB_WORKSPACE/tools/ci/gha-script.sh - name: after_success shell: bash diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index a03c89712b1..dde7535e0d6 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -6,7 +6,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys # Build in debug mode by default with support for MCPL pip_command = ['pip', 'install', '.[test,vtk]'] - pip_suffix = ['--config-settings=cmake.args=-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] + pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] # Turn off OpenMP if specified if not omp: @@ -40,7 +40,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys pip_suffix.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') # Build in coverage mode for coverage testing - pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON') + pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON"') pip_command.append(';'.join(pip_suffix)) # Build and install diff --git a/tools/ci/gha-pip-install.py b/tools/ci/gha-pip-install.py deleted file mode 100644 index dde7535e0d6..00000000000 --- a/tools/ci/gha-pip-install.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -import subprocess - - -def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): - - # Build in debug mode by default with support for MCPL - pip_command = ['pip', 'install', '.[test,vtk]'] - pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] - - # Turn off OpenMP if specified - if not omp: - pip_suffix.append('-DOPENMC_USE_OPENMP=off') - - # Use MPI wrappers when building in parallel - if mpi: - pip_suffix.append('-DOPENMC_USE_MPI=ON') - - # Tell CMake to prefer parallel HDF5 if specified - if phdf5: - if not mpi: - raise ValueError('Parallel HDF5 must be used in ' - 'conjunction with MPI.') - pip_suffix.append('-DHDF5_PREFER_PARALLEL=ON') - else: - pip_suffix.append('-DHDF5_PREFER_PARALLEL=OFF') - - if dagmc: - pip_suffix.append('-DOPENMC_USE_DAGMC=ON') - pip_suffix.append('-DCMAKE_PREFIX_PATH=~/DAGMC') - - if libmesh: - pip_suffix.append('-DOPENMC_USE_LIBMESH=ON') - libmesh_path = os.environ.get('HOME') + '/LIBMESH' - pip_suffix.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) - - if ncrystal: - pip_suffix.append('-DOPENMC_USE_NCRYSTAL=ON') - ncrystal_cmake_path = os.environ.get('HOME') + '/ncrystal_inst/lib/cmake' - pip_suffix.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') - - # Build in coverage mode for coverage testing - pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON"') - - pip_command.append(';'.join(pip_suffix)) - # Build and install - print(' '.join(pip_command)) - subprocess.check_call(pip_command) - -def main(): - # Convert Travis matrix environment variables into arguments for install() - omp = (os.environ.get('OMP') == 'y') - mpi = (os.environ.get('MPI') == 'y') - phdf5 = (os.environ.get('PHDF5') == 'y') - dagmc = (os.environ.get('DAGMC') == 'y') - ncrystal = (os.environ.get('NCRYSTAL') == 'y') - libmesh = (os.environ.get('LIBMESH') == 'y') - - # Build and install - install(omp, mpi, phdf5, dagmc, libmesh, ncrystal) - -if __name__ == '__main__': - main() From 9253977ac3df5a29b2b021fb6112c509b7794c54 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 00:37:54 +0100 Subject: [PATCH 015/145] running just pytest --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9293e319b42..1415074ad71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,9 +145,7 @@ jobs: - name: test shell: bash - run: | - CTEST_OUTPUT_ON_FAILURE=1 make test -C $GITHUB_WORKSPACE/build/ - $GITHUB_WORKSPACE/tools/ci/gha-script.sh + run: $GITHUB_WORKSPACE/tools/ci/gha-script.sh - name: after_success shell: bash From 1f016940ee9e6c0c6e2eba5bf71912729ee2bf63 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 00:39:43 +0100 Subject: [PATCH 016/145] [skip ci] corrected cmake arg passing example --- docs/source/usersguide/install.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 203ec879430..c0ad2fdcd48 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -176,7 +176,7 @@ feature can be used to access the installed packages. .. _install_source: -------------------------------- -Compiling from Source with CMake +Compiling from source with CMake -------------------------------- .. _prerequisites: @@ -533,7 +533,7 @@ Package Index (`PyPI `_). The pip command will also compile an executable named ``openmc`` and install it (by default in the bin folder of the Python package directory). -Passing CMake Options to via pip +Passing CMake arguments via pip -------------------------------- If you need to pass CMake options to the build process, you can do so by @@ -543,13 +543,13 @@ For example, to build OpenMC with MPI support, you can run: .. code-block:: sh - python -m pip install . --global-option="build_ext" --global-option="--" --global-option="-DOPENMC_USE_MPI=ON" + python -m pip install . --config-settings=cmake.args=-DOPENMC_USE_MPI=ON To build OpenMC with DAGMC support two CMake arguments are needed, you can run: .. code-block:: sh - python -m pip install . --global-option="build_ext" --global-option="--" --global-option="-DOPENMC_USE_DAGMC=ON" --global-option="-DDAGMC_ROOT=/path/to/dagmc/installation" + python -m pip install . --config-settings=cmake.args="-DOPENMC_USE_DAGMC=ON;DDAGMC_ROOT=/path/to/dagmc/installation" Installing in "Development" Mode -------------------------------- From 6850217ad5dffdcc1874c052b809c154166dfc84 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 01:02:49 +0100 Subject: [PATCH 017/145] added diagnosis prints --- CMakeLists.txt | 11 +++++++++++ tools/ci/gha-install.py | 1 + 2 files changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c86c391521..928f72c245f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,17 @@ option(OPENMC_USE_MCPL "Enable MCPL" option(OPENMC_USE_NCRYSTAL "Enable support for NCrystal scattering" OFF) option(OPENMC_USE_UWUW "Enable UWUW" OFF) +message(STATUS "OPENMC_USE_OPENMP ${OPENMC_USE_OPENMP}") +message(STATUS "OPENMC_BUILD_TESTS ${OPENMC_BUILD_TESTS}") +message(STATUS "OPENMC_ENABLE_PROFILE ${OPENMC_ENABLE_PROFILE}") +message(STATUS "OPENMC_ENABLE_COVERAGE ${OPENMC_ENABLE_COVERAGE}") +message(STATUS "OPENMC_USE_DAGMC ${OPENMC_USE_DAGMC}") +message(STATUS "OPENMC_USE_LIBMESH ${OPENMC_USE_LIBMESH}") +message(STATUS "OPENMC_USE_MPI ${OPENMC_USE_MPI}") +message(STATUS "OPENMC_USE_MCPL ${OPENMC_USE_MCPL}") +message(STATUS "OPENMC_USE_NCRYSTAL ${OPENMC_USE_NCRYSTAL}") +message(STATUS "OPENMC_USE_UWUW ${OPENMC_USE_UWUW}") + # Warnings for deprecated options foreach(OLD_OPT IN ITEMS "openmp" "profile" "coverage" "dagmc" "libmesh") if(DEFINED ${OLD_OPT}) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index dde7535e0d6..4ef2e780d3f 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -43,6 +43,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys pip_suffix.append('-DOPENMC_ENABLE_COVERAGE=ON"') pip_command.append(';'.join(pip_suffix)) + pip_command.append('--verbose') # Build and install print(' '.join(pip_command)) subprocess.check_call(pip_command) From 97a3f22bdf532315f5381310ce540a374272f7cc Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sat, 27 Jul 2024 01:15:36 +0100 Subject: [PATCH 018/145] removed 2nd pip install which was overwritting --- tools/ci/gha-install.py | 2 +- tools/ci/gha-install.sh | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index 4ef2e780d3f..da94df1bc2b 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -5,7 +5,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): # Build in debug mode by default with support for MCPL - pip_command = ['pip', 'install', '.[test,vtk]'] + pip_command = ['pip', 'install', '.[test,vtk,ci]'] pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] # Turn off OpenMP if specified diff --git a/tools/ci/gha-install.sh b/tools/ci/gha-install.sh index 87952fda9cb..e69aaaa13fb 100755 --- a/tools/ci/gha-install.sh +++ b/tools/ci/gha-install.sh @@ -46,6 +46,3 @@ fi # Build and install OpenMC executable python tools/ci/gha-install.py - -# Install Python API in editable mode -pip install -e .[test,vtk,ci] From 021339254c29b65875f7f0c7b02351e6b9a497b8 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 14 Aug 2024 21:37:22 +0100 Subject: [PATCH 019/145] matching simulation results from ci --- tests/regression_tests/triso/results_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/regression_tests/triso/results_true.dat b/tests/regression_tests/triso/results_true.dat index fa1842e547d..a24354045e2 100644 --- a/tests/regression_tests/triso/results_true.dat +++ b/tests/regression_tests/triso/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.716873E+00 5.266107E-02 +1.716873E+00 5.266094E-02 From 6e3e47e11de207419b91114fe07fc6fb0cd4c224 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Thu, 12 Sep 2024 14:36:43 +0100 Subject: [PATCH 020/145] using debug instead of on for DCMAKE_BUILD_TYPE --- tools/ci/gha-install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index da94df1bc2b..004ce589300 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -6,7 +6,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys # Build in debug mode by default with support for MCPL pip_command = ['pip', 'install', '.[test,vtk,ci]'] - pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=ON;-DOPENMC_USE_MCPL=ON'] + pip_suffix = ['--config-settings=cmake.args="-DCMAKE_BUILD_TYPE=DEBUG;-DOPENMC_USE_MCPL=ON'] # Turn off OpenMP if specified if not omp: From b4b4e3a14280932ef210179052eb3d444a42607c Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 17 Sep 2024 08:22:24 +0600 Subject: [PATCH 021/145] scikit-build-core added --- CMakeLists.txt | 2 +- MANIFEST.in | 48 ------------------------------------------------ pyproject.toml | 25 +++++++++++++------------ 3 files changed, 14 insertions(+), 61 deletions(-) delete mode 100644 MANIFEST.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f4cc1b527b..bd3d011b66f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16 FATAL_ERROR) +cmake_minimum_required(VERSION 3.18 FATAL_ERROR) project(openmc C CXX) # Set version numbers diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index b73218af0dc..00000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,48 +0,0 @@ -include CMakeLists.txt -include LICENSE -include CODE_OF_CONDUCT.md -include CODEOWNERS -include CONTRIBUTING.md -include Dockerfile -include schemas.xml -include pyproject.toml -include pytest.ini -include docs/source/_templates/layout.html -global-include *.cmake -global-include *.cmake.in -global-include *.rst -recursive-include docs *.css -recursive-include docs *.dia -recursive-include docs *.png -recursive-include docs *.py -recursive-include docs *.svg -recursive-include docs *.tex -recursive-include docs *.txt -recursive-include docs Makefile -recursive-include examples *.cpp -recursive-include examples *.py -recursive-include examples *.xml -recursive-include include *.h -recursive-include include *.h.in -recursive-include include *.hh -recursive-include man *.1 -recursive-include src *.cc -recursive-include src *.cpp -recursive-include src *.rnc -recursive-include src *.rng -recursive-include tests *.dat -recursive-include tests *.h5 -recursive-include tests *.h5m -recursive-include tests *.py -recursive-include tests *.xml -recursive-include vendor CMakeLists.txt -recursive-include vendor *.cc -recursive-include vendor *.cpp -recursive-include vendor *.h -recursive-include vendor *.hh -recursive-include vendor *.hpp -recursive-include vendor *.pc.in -recursive-include vendor *.natvis -include vendor/gsl-lite/include/gsl/gsl -prune docs/build -prune docs/source/pythonapi/generated/ diff --git a/pyproject.toml b/pyproject.toml index 39aa261c1b4..6700f5d8f43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,15 +1,15 @@ [build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" +requires = ["scikit-build-core"] +build-backend = "scikit_build_core.build" [project] name = "openmc" +version = "0.15.1-dev" authors = [ {name = "The OpenMC Development Team", email = "openmc@anl.gov"}, ] -description = "OpenMC" -version = "0.15.1-dev" -requires-python = ">=3.10" +description = "OpenMC is a community-developed Monte Carlo neutron and photon transport code." +readme = "README.md" license = {file = "LICENSE"} classifiers = [ "Development Status :: 4 - Beta", @@ -25,6 +25,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] +requires-python = ">=3.10" dependencies = [ "numpy", "h5py", @@ -58,14 +59,14 @@ Documentation = "https://docs.openmc.org" Repository = "https://github.com/openmc-dev/openmc" Issues = "https://github.com/openmc-dev/openmc/issues" -[tool.setuptools.packages.find] -include = ['openmc*', 'scripts*'] -exclude = ['tests*'] +# Scikit-Build Configuration +[tool.scikit-build] +cmake.verbose = true +logging.level = "INFO" +wheel.install-dir = "pyne/core" +wheel.packages = ["pyne"] +wheel.exclude = ["CMakeLists.txt"] -[tool.setuptools.package-data] -"openmc.data.effective_dose" = ["*.txt"] -"openmc.data" = ["*.txt", "*.DAT", "*.json", "*.h5"] -"openmc.lib" = ["libopenmc.dylib", "libopenmc.so"] [project.scripts] openmc-ace-to-hdf5 = "scripts.openmc_ace_to_hdf5:main" From 79ae016b1a5b7d92d127dae74cfc6c8191c0626d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 20 Sep 2024 23:47:34 +0600 Subject: [PATCH 022/145] Add rpath --- CMakeLists.txt | 91 +++++++++++++++++++++++++++++++++++++++----------- pyproject.toml | 16 ++------- 2 files changed, 74 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd3d011b66f..0570d30ac0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -310,23 +310,52 @@ include(GNUInstallDirs) # installed one in CMAKE_INSTALL_PREFIX. Ref: # https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling -# use, i.e. don't skip the full RPATH for the build tree -set(CMAKE_SKIP_BUILD_RPATH FALSE) -# when building, don't use the install RPATH already -# (but later on when installing) -set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +if(SKBUILD) + # Scikit-build installs OpenMC to ${SKBUILD_PLATLIB_DIR}/openmc + # So, set bin directory to root environment (install prefix/bin) + set(CMAKE_INSTALL_BINDIR ${SKBUILD_SCRIPTS_DIR}) + # Unfortunately, OpenMC has lib directory in the openmc/lib subdirectory + set(CMAKE_INSTALL_LIBDIR lib) + set(SKBUILD_LIB_DIR openmc/${CMAKE_INSTALL_LIBDIR}) + + # Auditwheel and Delocate need this when repairing the wheel + # Since OpenMC libs are installed in the openmc/core subdirectory + # Auditwheel and Delocate need this to find the OpenMC libs for openmc.data + # It's a bit of a hack, but it works + set(SKBUILD_REPAIR_WHEEL_PATCH ../../openmc/${CMAKE_INSTALL_LIBDIR}) + if(APPLE) + set(CMAKE_MACOSX_RPATH ON) + set(OPENMC_LIBRARY_RPATH "@loader_path") + set(OPENMC_PYTHON_MODULE_RPATH "@loader_path/${CMAKE_INSTALL_LIBDIR}") + set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../../${SKBUILD_LIB_DIR}") + elseif(UNIX) + set(OPENMC_LIBRARY_RPATH "$ORIGIN") + set(OPENMC_PYTHON_MODULE_RPATH "$ORIGIN/${CMAKE_INSTALL_LIBDIR}") + set(OPENMC_BINARY_RPATH "$ORIGIN/../${SKBUILD_LIB_DIR};$ORIGIN/../../${SKBUILD_LIB_DIR}") + else() + set(OPENMC_LIBRARY_RPATH OFF) + set(OPENMC_PYTHON_MODULE_RPATH OFF) + set(OPENMC_BINARY_RPATH OFF) + endif() +else() + # use, i.e. don't skip the full RPATH for the build tree + set(CMAKE_SKIP_BUILD_RPATH FALSE) -# add the automatically determined parts of the RPATH -# which point to directories outside the build tree to the install RPATH -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # when building, don't use the install RPATH already + # (but later on when installing) + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) -# the RPATH to be used when installing, but only if it's not a system directory -list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemDir) -if("${isSystemDir}" STREQUAL "-1") - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") -endif() + # add the automatically determined parts of the RPATH + # which point to directories outside the build tree to the install RPATH + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # the RPATH to be used when installing, but only if it's not a system directory + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemDir) + if("${isSystemDir}" STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") + endif() +endif() #=============================================================================== # libopenmc #=============================================================================== @@ -472,6 +501,14 @@ target_include_directories(libopenmc # Set compile flags target_compile_options(libopenmc PRIVATE ${cxxflags}) +if(SKBUILD) + set_target_properties( + libopenmc + PROPERTIES + INSTALL_RPATH "${OPENMC_LIBRARY_RPATH}" + ) +endif() + # Add include directory for configured version file target_include_directories(libopenmc PUBLIC $) @@ -577,16 +614,24 @@ target_compile_features(openmc PUBLIC cxx_std_17) target_compile_features(libopenmc PUBLIC cxx_std_17) set_target_properties(openmc libopenmc PROPERTIES CXX_EXTENSIONS OFF) +if(SKBUILD) + set_target_properties( + openmc + PROPERTIES + INSTALL_RPATH "${OPENMC_BINARY_RPATH}" + ) +endif() + #=============================================================================== # Python package #=============================================================================== - -add_custom_command(TARGET libopenmc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - $ - ${CMAKE_CURRENT_SOURCE_DIR}/openmc/lib/$ - COMMENT "Copying libopenmc to Python module directory") - +if(NOT SKBUILD) + add_custom_command(TARGET libopenmc POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + $ + ${CMAKE_CURRENT_SOURCE_DIR}/openmc/lib/$ + COMMENT "Copying libopenmc to Python module directory") +endif() #=============================================================================== # Install executable, scripts, manpage, license #=============================================================================== @@ -606,6 +651,12 @@ install(EXPORT openmc-targets NAMESPACE OpenMC:: DESTINATION ${INSTALL_CONFIGDIR}) +# Collect scripts +file(GLOB SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/*") + +# Install scripts to bin directory +install(PROGRAMS ${SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" diff --git a/pyproject.toml b/pyproject.toml index 6700f5d8f43..16d16106798 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,18 +61,8 @@ Issues = "https://github.com/openmc-dev/openmc/issues" # Scikit-Build Configuration [tool.scikit-build] -cmake.verbose = true +build.verbose = true logging.level = "INFO" -wheel.install-dir = "pyne/core" -wheel.packages = ["pyne"] +wheel.install-dir = "openmc" +wheel.packages = ["openmc"] wheel.exclude = ["CMakeLists.txt"] - - -[project.scripts] -openmc-ace-to-hdf5 = "scripts.openmc_ace_to_hdf5:main" -openmc-plot-mesh-tally = "scripts.openmc_plot_mesh_tally:main" -openmc-track-combine = "scripts.openmc_track_combine:main" -openmc-track-to-vtk = "scripts.openmc_track_to_vtk:main" -openmc-update-inputs = "scripts.openmc_update_inputs:main" -openmc-update-mgxs = "scripts.openmc_update_mgxs:main" -openmc-voxel-to-vtk = "scripts.openmc_voxel_to_vtk:main" From 394b0f97fe39524b00ea729358f97f22c9e9ca25 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 24 Sep 2024 08:05:06 +0600 Subject: [PATCH 023/145] Install by scikit-build-core --- Dockerfile | 45 ++++++++++----------------------- tools/ci/gha-install.py | 56 +++++++++++++++++++++++------------------ tools/ci/gha-install.sh | 4 +-- 3 files changed, 46 insertions(+), 59 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4a94e3c0b11..f4c011310c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -195,40 +195,21 @@ ENV LIBMESH_INSTALL_DIR=$HOME/LIBMESH # clone and install openmc RUN mkdir -p ${HOME}/OpenMC && cd ${HOME}/OpenMC \ && git clone --shallow-submodules --recurse-submodules --single-branch -b ${openmc_branch} --depth=1 ${OPENMC_REPO} \ - && mkdir build && cd build ; \ - if [ ${build_dagmc} = "on" ] && [ ${build_libmesh} = "on" ]; then \ - cmake ../openmc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DOPENMC_USE_MPI=on \ - -DHDF5_PREFER_PARALLEL=on \ - -DOPENMC_USE_DAGMC=on \ - -DOPENMC_USE_LIBMESH=on \ - -DCMAKE_PREFIX_PATH="${DAGMC_INSTALL_DIR};${LIBMESH_INSTALL_DIR}" ; \ + && cd openmc ; \ + export SKBUILD_CMAKE_ARGS="-DCMAKE_CXX_COMPILER=mpicxx; \ + -DOPENMC_USE_MPI=on; \ + -DHDF5_PREFER_PARALLEL=on" \ + if [ ${build_dagmc} = "on" ]; then \ + SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS}; \ + -DOPENMC_USE_DAGMC=on; \ + -DCMAKE_PREFIX_PATH=${DAGMC_INSTALL_DIR}" ; \ fi ; \ - if [ ${build_dagmc} = "on" ] && [ ${build_libmesh} = "off" ]; then \ - cmake ../openmc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DOPENMC_USE_MPI=on \ - -DHDF5_PREFER_PARALLEL=on \ - -DOPENMC_USE_DAGMC=ON \ - -DCMAKE_PREFIX_PATH=${DAGMC_INSTALL_DIR} ; \ + if [ ${build_libmesh} = "on" ]; then \ + SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS}; \ + -DOPENMC_USE_LIBMESH=on; \ + -DCMAKE_PREFIX_PATH=${LIBMESH_INSTALL_DIR}" ; \ fi ; \ - if [ ${build_dagmc} = "off" ] && [ ${build_libmesh} = "on" ]; then \ - cmake ../openmc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DOPENMC_USE_MPI=on \ - -DHDF5_PREFER_PARALLEL=on \ - -DOPENMC_USE_LIBMESH=on \ - -DCMAKE_PREFIX_PATH=${LIBMESH_INSTALL_DIR} ; \ - fi ; \ - if [ ${build_dagmc} = "off" ] && [ ${build_libmesh} = "off" ]; then \ - cmake ../openmc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DOPENMC_USE_MPI=on \ - -DHDF5_PREFER_PARALLEL=on ; \ - fi ; \ - make 2>/dev/null -j${compile_cores} install \ - && cd ../openmc && pip install .[test,depletion-mpi] \ + pip -v install .[test,depletion-mpi] \ && python -c "import openmc" FROM build AS release diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index f046e863470..9a72c32e1c7 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -1,56 +1,64 @@ import os -import shutil import subprocess +import shutil def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): - # Create build directory and change to it - shutil.rmtree('build', ignore_errors=True) - os.mkdir('build') - os.chdir('build') - - # Build in debug mode by default with support for MCPL - cmake_cmd = ['cmake', '-DCMAKE_BUILD_TYPE=Debug', '-DOPENMC_USE_MCPL=on'] + # List to store the CMake arguments + cmake_args = ['-DCMAKE_BUILD_TYPE=Debug', '-DOPENMC_USE_MCPL=on'] # Turn off OpenMP if specified if not omp: - cmake_cmd.append('-DOPENMC_USE_OPENMP=off') + cmake_args.append('-DOPENMC_USE_OPENMP=off') # Use MPI wrappers when building in parallel if mpi: - cmake_cmd.append('-DOPENMC_USE_MPI=on') + cmake_args.append('-DOPENMC_USE_MPI=on') # Tell CMake to prefer parallel HDF5 if specified if phdf5: if not mpi: - raise ValueError('Parallel HDF5 must be used in ' - 'conjunction with MPI.') - cmake_cmd.append('-DHDF5_PREFER_PARALLEL=ON') + raise ValueError('Parallel HDF5 must be used in conjunction with MPI.') + cmake_args.append('-DHDF5_PREFER_PARALLEL=ON') else: - cmake_cmd.append('-DHDF5_PREFER_PARALLEL=OFF') + cmake_args.append('-DHDF5_PREFER_PARALLEL=OFF') if dagmc: - cmake_cmd.append('-DOPENMC_USE_DAGMC=ON') - cmake_cmd.append('-DCMAKE_PREFIX_PATH=~/DAGMC') + cmake_args.append('-DOPENMC_USE_DAGMC=ON') + cmake_args.append('-DCMAKE_PREFIX_PATH=~/DAGMC') if libmesh: - cmake_cmd.append('-DOPENMC_USE_LIBMESH=ON') + cmake_args.append('-DOPENMC_USE_LIBMESH=ON') libmesh_path = os.environ.get('HOME') + '/LIBMESH' - cmake_cmd.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) + cmake_args.append('-DCMAKE_PREFIX_PATH=' + libmesh_path) if ncrystal: - cmake_cmd.append('-DOPENMC_USE_NCRYSTAL=ON') + cmake_args.append('-DOPENMC_USE_NCRYSTAL=ON') ncrystal_cmake_path = os.environ.get('HOME') + '/ncrystal_inst/lib/cmake' - cmake_cmd.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') + cmake_args.append(f'-DCMAKE_PREFIX_PATH={ncrystal_cmake_path}') # Build in coverage mode for coverage testing - cmake_cmd.append('-DOPENMC_ENABLE_COVERAGE=on') + cmake_args.append('-DOPENMC_ENABLE_COVERAGE=on') - # Build and install - cmake_cmd.append('..') + # Set environment variable for SKBUILD + os.environ['SKBUILD_CMAKE_ARGS'] = ';'.join(cmake_args) + + # Run pip to build and install + subprocess.check_call(['pip', '-v', 'install', '.[test,vtk,ci]']) + + # Using standard CMake method + # Create build directory and change to it + shutil.rmtree('build', ignore_errors=True) + os.mkdir('build') + os.chdir('build') + + # Add CMake arguments for standard method + cmake_cmd = ['cmake', '..'] + cmake_args print(' '.join(cmake_cmd)) + + # Run CMake and build subprocess.check_call(cmake_cmd) - subprocess.check_call(['make', '-j4']) + subprocess.check_call(['make', '-j$(nproc)']) subprocess.check_call(['sudo', 'make', 'install']) def main(): diff --git a/tools/ci/gha-install.sh b/tools/ci/gha-install.sh index cff7dc834f5..9a302c23f0b 100755 --- a/tools/ci/gha-install.sh +++ b/tools/ci/gha-install.sh @@ -43,8 +43,6 @@ if [[ $MPI == 'y' ]]; then pip install --no-binary=h5py h5py fi -# Build and install OpenMC executable +# Build and install OpenMC python tools/ci/gha-install.py -# Install Python API in editable mode -pip install -e .[test,vtk,ci] From 12aec226081e64b22e76d5957af592a125999ac4 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 24 Sep 2024 11:21:12 +0600 Subject: [PATCH 024/145] update python install doc --- docs/source/devguide/workflow.rst | 17 +++++------ docs/source/quickinstall.rst | 49 +++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/docs/source/devguide/workflow.rst b/docs/source/devguide/workflow.rst index d6a3c6ba4f4..136b97c313f 100644 --- a/docs/source/devguide/workflow.rst +++ b/docs/source/devguide/workflow.rst @@ -116,15 +116,14 @@ pip_. From the root directory of the OpenMC repository, run: .. code-block:: sh - python -m pip install -e .[test] - -This installs the OpenMC Python package in `"editable" mode -`_ so that 1) -it can be imported from a Python interpreter and 2) any changes made are -immediately reflected in the installed version (that is, you don't need to keep -reinstalling it). While the same effect can be achieved using the -:envvar:`PYTHONPATH` environment variable, this is generally discouraged as it -can interfere with virtual environments. +python -m pip install --no-build-isolation \ + -Ceditable.rebuild=true \ + -Ccmake.build-type=Debug \ + -Cbuild-dir=build \ + -ve ".[test]" + +This feature allows for rebuilding on initial import, providing +flexibility for iterative development or testing changes to the codebase. .. _git: http://git-scm.com/ .. _GitHub: https://github.com/ diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst index 7f222f77cb8..05f4f0a1805 100644 --- a/docs/source/quickinstall.rst +++ b/docs/source/quickinstall.rst @@ -150,13 +150,20 @@ source below. Building Source on Linux or macOS --------------------------------- -All OpenMC source code is hosted on `GitHub -`_. If you have `git -`_, a modern C++ compiler, `CMake `_, -and `HDF5 `_ installed, you can -download and install OpenMC by entering the following commands in a terminal: +All OpenMC source code is hosted on GitHub (`OpenMC GitHub `_). +Depending on your needs, you can either: -.. code-block:: sh +- Build only the OpenMC executable (using CMake). +- Build both the OpenMC executable and Python package (using pip). + +1. Building the OpenMC Executable Only (CMake) +============================================== + +If you only need the OpenMC executable without Python bindings, you can build it using +the following steps. You will need `git `_, a modern C++ compiler, +`CMake `_, and `HDF5 `_ installed: + +.. code-block:: bash git clone --recurse-submodules https://github.com/openmc-dev/openmc.git cd openmc @@ -172,15 +179,39 @@ should specify an installation directory where you have write access, e.g. .. code-block:: sh cmake -DCMAKE_INSTALL_PREFIX=$HOME/.local .. + make + make install + +2. Building the OpenMC Executable with Python Support (pip) +=========================================================== -The :mod:`openmc` Python package must be installed separately. The easiest way -to install it is using `pip `_. -From the root directory of the OpenMC repository, run: +If you also want to install the OpenMC Python package,you can use +`pip `_ to build both the executable and +the Python package at the same time. This requires a Python environment +and pip installed. From the root directory of the OpenMC repository, run: .. code-block:: sh python -m pip install . +This will build the ``openmc`` executable and install it along with the Python bindings. +There is no need to manually run ``cmake`` or ``make``, as the pip command handles +both the C++ and Python build processes. + +Custom Build Options +~~~~~~~~~~~~~~~~~~~~ + +If you need to customize the build options (e.g., enabling MPI, DAGMC, or LibMesh), +you can pass CMake arguments using the ``SKBUILD_CMAKE_ARGS`` environment variable +before running pip. For example: + +.. code-block:: bash + + export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=on;-DOPENMC_USE_DAGMC=on" + python -m pip install ".[test,depletion-mpi]" + +This allows you to configure your build just like you would with CMake. + By default, OpenMC will be built with multithreading support. To build distributed-memory parallel versions of OpenMC using MPI or to configure other options, directions can be found in the :ref:`detailed installation instructions From 564cb5fa3b5173049e6756046e50f63980e8a821 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 24 Sep 2024 11:21:31 +0600 Subject: [PATCH 025/145] add support for dev mode --- CMakeLists.txt | 19 ++++++++---- docs/source/usersguide/install.rst | 48 +++++++++++++++++++++++------- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0570d30ac0c..0edf8108f28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -312,27 +312,33 @@ include(GNUInstallDirs) if(SKBUILD) + # Find necessary packages + find_package( + Python + COMPONENTS Interpreter + REQUIRED + ) # Scikit-build installs OpenMC to ${SKBUILD_PLATLIB_DIR}/openmc # So, set bin directory to root environment (install prefix/bin) set(CMAKE_INSTALL_BINDIR ${SKBUILD_SCRIPTS_DIR}) # Unfortunately, OpenMC has lib directory in the openmc/lib subdirectory set(CMAKE_INSTALL_LIBDIR lib) - set(SKBUILD_LIB_DIR openmc/${CMAKE_INSTALL_LIBDIR}) + set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${CMAKE_INSTALL_LIBDIR}) # Auditwheel and Delocate need this when repairing the wheel # Since OpenMC libs are installed in the openmc/core subdirectory # Auditwheel and Delocate need this to find the OpenMC libs for openmc.data # It's a bit of a hack, but it works - set(SKBUILD_REPAIR_WHEEL_PATCH ../../openmc/${CMAKE_INSTALL_LIBDIR}) + set(SKBUILD_REPAIR_WHEEL_PATCH openmc/${CMAKE_INSTALL_LIBDIR}) if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(OPENMC_LIBRARY_RPATH "@loader_path") set(OPENMC_PYTHON_MODULE_RPATH "@loader_path/${CMAKE_INSTALL_LIBDIR}") - set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../../${SKBUILD_LIB_DIR}") + set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../${SKBUILD_REPAIR_WHEEL_PATCH};@loader_path/../../${SKBUILD_REPAIR_WHEEL_PATCH}") elseif(UNIX) set(OPENMC_LIBRARY_RPATH "$ORIGIN") set(OPENMC_PYTHON_MODULE_RPATH "$ORIGIN/${CMAKE_INSTALL_LIBDIR}") - set(OPENMC_BINARY_RPATH "$ORIGIN/../${SKBUILD_LIB_DIR};$ORIGIN/../../${SKBUILD_LIB_DIR}") + set(OPENMC_BINARY_RPATH "$ORIGIN/../${SKBUILD_LIB_DIR};$ORIGIN/../${SKBUILD_REPAIR_WHEEL_PATCH};$ORIGIN/../../${SKBUILD_REPAIR_WHEEL_PATCH}") else() set(OPENMC_LIBRARY_RPATH OFF) set(OPENMC_PYTHON_MODULE_RPATH OFF) @@ -623,9 +629,10 @@ if(SKBUILD) endif() #=============================================================================== -# Python package +# Copy libopenmc to Python module directory for development #=============================================================================== -if(NOT SKBUILD) +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) add_custom_command(TARGET libopenmc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 1c0b7fa5b32..07398bcb20b 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -510,19 +510,45 @@ Installing Python API --------------------- If you installed OpenMC using :ref:`Conda `, no further steps are -necessary in order to use OpenMC's :ref:`Python API `. However, if -you are :ref:`installing from source `, the Python API is not -installed by default when ``make install`` is run because in many situations it -doesn't make sense to install a Python package in the same location as the -``openmc`` executable (for example, if you are installing the package into a -`virtual environment `_). The -easiest way to install the :mod:`openmc` Python package is to use pip_, which is -included by default in Python 3.4+. From the root directory of the OpenMC -distribution/repository, run: +necessary to use OpenMC's :ref:`Python API `. However, if you are +:ref:`installing from source `, the Python API is not installed +by default when building OpenMC because, in many cases, it doesn't make sense to +install a Python package in the same location as the OpenMC executable (for example, +if you are using a virtual environment `virtualenv `_). -.. code-block:: sh +To install OpenMC and its Python API, the recommended method is to use pip, +which includes both the Python package and the OpenMC executable. +From the root directory of the OpenMC repository, run: + +.. code-block:: bash + + python -m pip install ".[test,depletion-mpi]" + +This command installs both the OpenMC executable and the Python API together. +There's no need to manually run ``cmake`` or ``make install`` as pip automatically +handles the build process, including any CMake configuration. + +Custom Build Options +==================== + +If you need to customize the build (for example, to enable MPI, DAGMC, or LibMesh), +you can pass the necessary CMake arguments through the ``SKBUILD_CMAKE_ARGS`` +environment variable before running pip install: + +.. code-block:: bash + + export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=on;-DOPENMC_USE_DAGMC=on" + python -m pip install ".[test,depletion-mpi]" + +Alternatively, pip provides additional ways to configure the build using +``--config-settings``: + +.. code-block:: bash - python -m pip install . + python -m pip install . -v --config-settings=build.verbose=true \ + --config-settings=logging.level=INFO \ + --config-settings=cmake.define.SOME_DEFINE=ON \ + --config-settings=cmake.args="-DSOME_DEFINE=ON;-DOTHER=OFF" pip will first check that all :ref:`required third-party packages ` have been installed, and if they are not present, From 1f1faca345085b42e350141a16f059fc617a40c6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 24 Sep 2024 11:24:28 +0600 Subject: [PATCH 026/145] update dev doc with skbuild support --- docs/source/devguide/workflow.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/devguide/workflow.rst b/docs/source/devguide/workflow.rst index 136b97c313f..3b8cb2044b1 100644 --- a/docs/source/devguide/workflow.rst +++ b/docs/source/devguide/workflow.rst @@ -63,9 +63,9 @@ features and bug fixes. The general steps for contributing are as follows: .. code-block:: sh - git clone --recurse-submodules git@github.com:yourusername/openmc.git - cd openmc - git checkout -b newbranch develop + git clone --recurse-submodules git@github.com:yourusername/openmc.git + cd openmc + git checkout -b newbranch develop 3. Run ``tools/dev/install-commit-hooks.sh`` to install a post-commit hook that runs clang-format on C++ files to apply :ref:`automatic code formatting @@ -116,11 +116,11 @@ pip_. From the root directory of the OpenMC repository, run: .. code-block:: sh -python -m pip install --no-build-isolation \ - -Ceditable.rebuild=true \ - -Ccmake.build-type=Debug \ - -Cbuild-dir=build \ - -ve ".[test]" + python -m pip install --no-build-isolation \ + -Ceditable.rebuild=true \ + -Ccmake.build-type=Debug \ + -Cbuild-dir=build \ + -ve ".[test]" This feature allows for rebuilding on initial import, providing flexibility for iterative development or testing changes to the codebase. From f1142657d888e5340d6f46a6c4a477ee0012b184 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 25 Sep 2024 09:39:30 +0200 Subject: [PATCH 027/145] back to -j4 for make --- tools/ci/gha-install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index 9a72c32e1c7..9fe64d3aafa 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -58,7 +58,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys # Run CMake and build subprocess.check_call(cmake_cmd) - subprocess.check_call(['make', '-j$(nproc)']) + subprocess.check_call(['make', '-j4']) subprocess.check_call(['sudo', 'make', 'install']) def main(): From c577d509b4f0845857d13f3d37dd19a8098dceac Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 25 Sep 2024 11:25:39 +0200 Subject: [PATCH 028/145] adding cmake args to pip install command --- tools/ci/gha-install.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index 9fe64d3aafa..4ed863f304f 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -44,7 +44,8 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys os.environ['SKBUILD_CMAKE_ARGS'] = ';'.join(cmake_args) # Run pip to build and install - subprocess.check_call(['pip', '-v', 'install', '.[test,vtk,ci]']) + pip_suffix = '--config-settings=cmake.args="' + ';'.join(cmake_args) + '"' + subprocess.check_call(['pip', '-v', 'install', '.[test,vtk,ci]', pip_suffix]) # Using standard CMake method # Create build directory and change to it From ec7e11f75bf974a3ec6982a7821d109de43f0c0d Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 25 Sep 2024 11:31:22 +0200 Subject: [PATCH 029/145] [skip ci] cmake args actual openmc options --- docs/source/usersguide/install.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 60fb99104c4..f9cbfa6f4dd 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -547,9 +547,7 @@ Alternatively, pip provides additional ways to configure the build using .. code-block:: bash - python -m pip install . -v --config-settings=build.verbose=true \ - --config-settings=cmake.define.SOME_DEFINE=ON \ - --config-settings=cmake.args="-DSOME_DEFINE=ON;-DOTHER=OFF" + python -m pip install . --config-settings=cmake.args="-OPENMC_USE_MPI=ON;-OPENMC_USE_MCPL=ON" pip will first check that all :ref:`required third-party packages ` have been installed, and if they are not present, From 03a6744679f8cc4d15ac9e08055c583e10d21201 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 19:30:30 +0600 Subject: [PATCH 030/145] add manylinux docker --- tools/ci/manylinux.dockerfile | 378 ++++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 tools/ci/manylinux.dockerfile diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile new file mode 100644 index 00000000000..20669e766ae --- /dev/null +++ b/tools/ci/manylinux.dockerfile @@ -0,0 +1,378 @@ +# Configure base image +ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 +ARG Python_ABI="cp312-cp312" + +# Configure dependencies tags +ARG NJOY2016_TAG="2016.76" +ARG HDF5_TAG="hdf5_1.14.4.3" +ARG NETCDF_TAG="v4.9.2" +ARG MOAB_TAG="master" +ARG EMBREE_TAG="v4.3.3" +ARG DD_TAG="v1.1.0" +ARG DAGMC_TAG="v3.2.3" +ARG NCrystal_TAG="v3.9.7" +ARG PYBIND_TAG="v2.13.6" +ARG XTL_TAG="0.7.7" +ARG XTENSOR_TAG="0.25.0" +ARG XTENSOR_PYTHON_TAG="0.27.0" +ARG XTENSOR_BLAS_TAG="0.21.0" +ARG VECTFIT_TAG="master" +ARG LIBMESH_TAG="v1.7.2" +ARG MCPL_TAG="v1.6.2" + + +# Build base stage +FROM quay.io/pypa/${MANYLINUX_IMAGE} AS base + +ARG Python_ABI + +# Set timezone +ENV TZ=America/Chicago +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# Set Home directory +ENV HOME /root +WORKDIR $HOME + +# Setup Epel +RUN yum install -y epel-release && \ + yum config-manager --enable epel + +# Install basic dependencies +RUN yum install -y \ + wget \ + git \ + gcc \ + gcc-c++ \ + gcc-gfortran \ + make \ + python3.12-devel \ + zlib-devel \ + curl-devel \ + eigen3-devel \ + lapack-devel \ + libpng-devel \ + openmpi-devel && \ + yum clean all + +# Use Python from manylinux as the default Python +ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" +RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python + +# Set up general library environment variables +ENV LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH + +# Set up OpenMPI environment variables +ENV PATH=/usr/lib64/openmpi/bin:$PATH +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH + +# Install necessary Python packages +RUN python -m pip install --upgrade \ + scikit-build-core \ + setuptools \ + numpy \ + cmake \ + ninja \ + h5py \ + scipy \ + ipython \ + matplotlib \ + pandas \ + lxml \ + uncertainties \ + endf \ + vtk \ + mpi4py \ + packaging \ + pytest \ + pytest-cov \ + colorama \ + openpyxl + + +# Set up NJOY2016 +ARG NJOY2016_TAG + +# Build and install NJOY2016 +RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git njoy && \ + cd njoy && \ + mkdir build && cd build && \ + cmake .. \ + -Dstatic=ON && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf njoy + + +# Set up HDF5 +ARG HDF5_TAG + +# Build and install HDF5 +RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ + cd hdf5 && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DMPI_C_COMPILER=mpicc \ + -DMPI_CXX_COMPILER=mpicxx \ + -DMPI_Fortran_COMPILER=mpif90 \ + -DHDF5_ENABLE_PARALLEL=ON \ + -DHDF5_BUILD_HL_LIB=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_EXAMPLES=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf hdf5 + + +# Set up NetCDF +ARG NETCDF_TAG + +# Build and install NetCDF +RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ + cd netcdf && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_C_COMPILER=mpicc \ + -DCMAKE_CXX_COMPILER=mpicxx \ + -DCMAKE_Fortran_COMPILER=mpif90 \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_DAP=ON \ + -DENABLE_TESTS=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf netcdf + + +# Set up MOAB +ARG MOAB_TAG + +# Build and install MOAB +RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git moab && \ + cd moab && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_C_COMPILER=mpicc \ + -DCMAKE_CXX_COMPILER=mpicxx \ + -DCMAKE_Fortran_COMPILER=mpif90 \ + -DENABLE_MPI=ON \ + -DENABLE_HDF5=ON \ + -DHDF5_ROOT=/usr/local \ + -DENABLE_NETCDF=ON \ + -DNETCDF_ROOT=/usr/local \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_BLASLAPACK=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf moab + +# Set up EMBREE +ARG EMBREE_TAG + +# Build and install EMBREE +RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git embree && \ + cd embree && \ + mkdir build && cd build && \ + cmake .. \ + -DEMBREE_TASKING_SYSTEM=INTERNAL \ + -DEMBREE_ISPC_SUPPORT=OFF \ + -DEMBREE_TUTORIALS=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf embree + +# Set up Double Down +ARG DD_TAG + +# Build and install Double Down +RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ + cd dd && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf dd + +# Set up DAGMC +ARG DAGMC_TAG + +# Build and install DAGMC +RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dagmc && \ + cd dagmc && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_C_COMPILER=mpicc \ + -DCMAKE_CXX_COMPILER=mpicxx \ + -DMOAB_DIR=/usr/local \ + -Ddd_ROOT=/usr/local \ + -DBUILD_TALLY=ON \ + -DBUILD_UWUW=ON \ + -DDOUBLE_DOWN=ON \ + -DBUILD_STATIC_LIBS=OFF \ + -DBUILD_RPATH=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf dagmc + +# Set up NCrystal +ARG NCrystal_TAG + +# Build and install NCrystal +RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ + cd ncrystal && \ + mkdir build && cd build && \ + cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ + -DNCRYSTAL_MODIFY_RPATH=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ + -DNCRYSTAL_ENABLE_SETUPSH=OFF \ + -DNCRYSTAL_ENABLE_DATA=EMBED \ + -DPython3_EXECUTABLE=$(which python) && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + ncrystal-config --setup && \ + rm -rf ncrystal + +# Set up pybind +ARG PYBIND_TAG + +# Build and install pybind +RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ + cd pybind11 && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd .. && \ + python -m pip install . && \ + cd .. && \ + rm -rf pybind11 + +# Set up xtl +ARG XTL_TAG + +# Build and install xtl +RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ + cd xtl && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtl + +# Set up xtensor +ARG XTENSOR_TAG + +# Build and install xtensor +RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ + cd xtensor && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor + +# Set up xtensor-python +ARG XTENSOR_PYTHON_TAG + +# Build and install xtensor-python +RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ + cd xtensor-python && \ + mkdir build && cd build && \ + cmake .. \ + -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-python + +# Set up xtensor-blas +ARG XTENSOR_BLAS_TAG + +# Build and install xtensor-blas +RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ + cd xtensor-blas && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-blas + +# Set up vectfit +ARG VECTFIT_TAG + +# Build and install vectfit +RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ + cd vectfit && \ + python -m pip install . && \ + cd .. && \ + rm -rf vectfit + +# Set up libMesh +ARG LIBMESH_TAG + +# Build and install libMesh +RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ + cd libmesh && \ + git submodule update --init --recursive && \ + mkdir build && cd build && \ + export METHODS="opt" && \ + ../configure \ + CXX=mpicxx CC=mpicc FC=mpifort F77=mpif77 \ + --enable-exodus \ + --disable-netcdf-4 \ + --disable-eigen \ + --disable-lapack && \ + make -j$(nproc) && make install && \ + cd .. && \ + rm -rf libmesh + +# Set up MCPL +ARG MCPL_TAG + +# Build and install MCPL +RUN git clone --depth 1 --single-branch -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ + cd mcpl && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd .. && \ + rm -rf mcpl + + +# Download and extract HDF5 data +RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ + +# Download and extract ENDF/B-VII.1 distribution +RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ + + +FROM base AS build + +# Copy OpenMC source +COPY . $HOME/openmc + +# Configure SKBUILD CMake arguments +ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_OPENMP=ON; \ + -DOPENMC_USE_DAGMC=ON; \ + -DOPENMC_USE_LIBMESH=ON; \ + -DOPENMC_USE_MPI=ON; \ + -DOPENMC_USE_MCPL=ON; \ + -DOPENMC_USE_NCRYSTAL=ON;" + +# Build OpenMC wheel +RUN cd $HOME/openmc && python -m build . -w + +# Repair wheel +RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist + +# Install OpenMC wheel +RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl + + +FROM build AS test + +# Test OpenMC +RUN cd $HOME/openmc && \ + nctool --test && \ + pytest --cov=openmc -v --mpi --event tests From 556adbb18224ffb27ff128bd29d7c7b4ac9ed62f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 19:50:30 +0600 Subject: [PATCH 031/145] add gcc and mpi build --- tools/ci/manylinux.dockerfile | 57 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 20669e766ae..450d7cb65fc 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -2,6 +2,9 @@ ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 ARG Python_ABI="cp312-cp312" +# Configure Compiler to use (gcc or openmpi) +ARG COMPILER="gcc" + # Configure dependencies tags ARG NJOY2016_TAG="2016.76" ARG HDF5_TAG="hdf5_1.14.4.3" @@ -62,10 +65,6 @@ RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python # Set up general library environment variables ENV LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH -# Set up OpenMPI environment variables -ENV PATH=/usr/lib64/openmpi/bin:$PATH -ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH - # Install necessary Python packages RUN python -m pip install --upgrade \ scikit-build-core \ @@ -89,6 +88,28 @@ RUN python -m pip install --upgrade \ colorama \ openpyxl +FROM base AS compiler-gcc + +ENV CC=gcc +ENV CXX=g++ +ENV FC=gfortran +ENV F77=gfortran + +FROM base AS compiler-openmpi + +ENV CC=mpicc +ENV CXX=mpicxx +ENV FC=mpif90 +ENV F77=mpif77 + +# Set up OpenMPI environment variables +ENV PATH=/usr/lib64/openmpi/bin:$PATH +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH + + +FROM compiler-${COMPILER} AS dependencies + +ARG COMPILER # Set up NJOY2016 ARG NJOY2016_TAG @@ -113,10 +134,7 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 mkdir build && cd build && \ cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DMPI_C_COMPILER=mpicc \ - -DMPI_CXX_COMPILER=mpicxx \ - -DMPI_Fortran_COMPILER=mpif90 \ - -DHDF5_ENABLE_PARALLEL=ON \ + -DHDF5_ENABLE_PARALLEL=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DHDF5_BUILD_HL_LIB=ON \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_EXAMPLES=OFF && \ @@ -133,9 +151,6 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git cd netcdf && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_C_COMPILER=mpicc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DCMAKE_Fortran_COMPILER=mpif90 \ -DBUILD_SHARED_LIBS=ON \ -DENABLE_DAP=ON \ -DENABLE_TESTS=OFF && \ @@ -152,10 +167,7 @@ RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git cd moab && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_C_COMPILER=mpicc \ - -DCMAKE_CXX_COMPILER=mpicxx \ - -DCMAKE_Fortran_COMPILER=mpif90 \ - -DENABLE_MPI=ON \ + -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DENABLE_HDF5=ON \ -DHDF5_ROOT=/usr/local \ -DENABLE_NETCDF=ON \ @@ -201,8 +213,6 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd dagmc && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_C_COMPILER=mpicc \ - -DCMAKE_CXX_COMPILER=mpicxx \ -DMOAB_DIR=/usr/local \ -Ddd_ROOT=/usr/local \ -DBUILD_TALLY=ON \ @@ -318,7 +328,6 @@ RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git mkdir build && cd build && \ export METHODS="opt" && \ ../configure \ - CXX=mpicxx CC=mpicc FC=mpifort F77=mpif77 \ --enable-exodus \ --disable-netcdf-4 \ --disable-eigen \ @@ -347,7 +356,9 @@ RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ -FROM base AS build +FROM dependencies AS openmc + +ARG COMPILER # Copy OpenMC source COPY . $HOME/openmc @@ -356,7 +367,7 @@ COPY . $HOME/openmc ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_OPENMP=ON; \ -DOPENMC_USE_DAGMC=ON; \ -DOPENMC_USE_LIBMESH=ON; \ - -DOPENMC_USE_MPI=ON; \ + -DOPENMC_USE_MPI=$([ ${COMPILER} = 'openmpi' ] && echo 'ON' || echo 'OFF'); \ -DOPENMC_USE_MCPL=ON; \ -DOPENMC_USE_NCRYSTAL=ON;" @@ -370,9 +381,11 @@ RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl -FROM build AS test +FROM openmc AS openmc-test + +ARG COMPILER # Test OpenMC RUN cd $HOME/openmc && \ nctool --test && \ - pytest --cov=openmc -v --mpi --event tests + pytest --cov=openmc -v $([ ${COMPILER} = 'openmpi' ] && echo '--mpi') --event tests From ef1ca2f36c8cdd051bad772f751df78534d00abd Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 20:26:15 +0600 Subject: [PATCH 032/145] Add openmc options and add more docs --- tools/ci/manylinux.dockerfile | 144 +++++++++++++++++++++------------- 1 file changed, 89 insertions(+), 55 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 450d7cb65fc..3599f5194ce 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -1,9 +1,45 @@ +# ---------------------------------------------------------------------------- +# Dockerfile for building the OpenMC project with support for various dependencies +# and configurations. This Dockerfile allows you to build OpenMC with support +# for GCC or OpenMPI compilers, along with several libraries like NJOY2016, HDF5, +# NetCDF, MOAB, EMBREE, Double Down, DAGMC, NCrystal, PyBind11, Xtensor, Vectfit, +# libMesh, and MCPL. Each of these dependencies is installed from their respective +# repositories and tags. + +# The build process is split into stages: +# 1. Base Stage: Sets up a Manylinux base image and installs necessary dependencies. +# 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. +# 3. Dependencies Stage: Downloads and builds all external dependencies. +# 4. OpenMC Stage: Copies OpenMC source code, builds it using CMake with specific +# flags and installs it in the container. +# 5. Test Stage: Runs OpenMC's unit tests. + +# Arguments and environment variables can be customized for different compiler and +# dependency versions. +# +# To build the Docker image, use the following command from the repository's root: +# docker build -t openmc -f tools/ci/manylinux.dockerfile . +# +# For more information about each step, refer to the inline comments. +# ---------------------------------------------------------------------------- + # Configure base image ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 ARG Python_ABI="cp312-cp312" # Configure Compiler to use (gcc or openmpi) -ARG COMPILER="gcc" +ARG COMPILER="openmpi" + +# OpenMC options +ARG OPENMC_USE_OPENMP="ON" +ARG OPENMC_BUILD_TESTS="ON" +ARG OPENMC_ENABLE_PROFILE="OFF" +ARG OPENMC_ENABLE_COVERAGE="OFF" +ARG OPENMC_USE_DAGMC="ON" +ARG OPENMC_USE_LIBMESH="ON" +ARG OPENMC_USE_MCPL="ON" +ARG OPENMC_USE_NCRYSTAL="ON" +ARG OPENMC_USE_UWUW="OFF" # Configure dependencies tags ARG NJOY2016_TAG="2016.76" @@ -24,7 +60,7 @@ ARG LIBMESH_TAG="v1.7.2" ARG MCPL_TAG="v1.6.2" -# Build base stage +# Base stage FROM quay.io/pypa/${MANYLINUX_IMAGE} AS base ARG Python_ABI @@ -37,12 +73,10 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV HOME /root WORKDIR $HOME -# Setup Epel +# Setup Epel repository and install build dependencies RUN yum install -y epel-release && \ - yum config-manager --enable epel - -# Install basic dependencies -RUN yum install -y \ + yum config-manager --enable epel && \ + yum install -y \ wget \ git \ gcc \ @@ -62,7 +96,7 @@ RUN yum install -y \ ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python -# Set up general library environment variables +# Set up environment variables for shared libraries ENV LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH # Install necessary Python packages @@ -88,6 +122,8 @@ RUN python -m pip install --upgrade \ colorama \ openpyxl + +# Compiler configuration stage: gcc FROM base AS compiler-gcc ENV CC=gcc @@ -95,6 +131,8 @@ ENV CXX=g++ ENV FC=gfortran ENV F77=gfortran + +# Compiler configuration stage: openmpi FROM base AS compiler-openmpi ENV CC=mpicc @@ -107,14 +145,13 @@ ENV PATH=/usr/lib64/openmpi/bin:$PATH ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH +# Dependencies stage FROM compiler-${COMPILER} AS dependencies ARG COMPILER -# Set up NJOY2016 -ARG NJOY2016_TAG - # Build and install NJOY2016 +ARG NJOY2016_TAG RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git njoy && \ cd njoy && \ mkdir build && cd build && \ @@ -125,10 +162,8 @@ RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git rm -rf njoy -# Set up HDF5 -ARG HDF5_TAG - # Build and install HDF5 +ARG HDF5_TAG RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ cd hdf5 && \ mkdir build && cd build && \ @@ -143,10 +178,8 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 rm -rf hdf5 -# Set up NetCDF -ARG NETCDF_TAG - # Build and install NetCDF +ARG NETCDF_TAG RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ cd netcdf && \ mkdir build && cd build && \ @@ -159,10 +192,8 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git rm -rf netcdf -# Set up MOAB -ARG MOAB_TAG - # Build and install MOAB +ARG MOAB_TAG RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git moab && \ cd moab && \ mkdir build && cd build && \ @@ -178,10 +209,9 @@ RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git cd ../.. && \ rm -rf moab -# Set up EMBREE -ARG EMBREE_TAG -# Build and install EMBREE +# Build and install Embree +ARG EMBREE_TAG RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git embree && \ cd embree && \ mkdir build && cd build && \ @@ -193,10 +223,9 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd ../.. && \ rm -rf embree -# Set up Double Down -ARG DD_TAG # Build and install Double Down +ARG DD_TAG RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ cd dd && \ mkdir build && cd build && \ @@ -205,10 +234,9 @@ RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.gi cd ../.. && \ rm -rf dd -# Set up DAGMC -ARG DAGMC_TAG # Build and install DAGMC +ARG DAGMC_TAG RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dagmc && \ cd dagmc && \ mkdir build && cd build && \ @@ -224,10 +252,9 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd ../.. && \ rm -rf dagmc -# Set up NCrystal -ARG NCrystal_TAG # Build and install NCrystal +ARG NCrystal_TAG RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ cd ncrystal && \ mkdir build && cd build && \ @@ -245,10 +272,9 @@ RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.g ncrystal-config --setup && \ rm -rf ncrystal -# Set up pybind -ARG PYBIND_TAG # Build and install pybind +ARG PYBIND_TAG RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ cd pybind11 && \ mkdir build && cd build && \ @@ -259,10 +285,9 @@ RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git cd .. && \ rm -rf pybind11 -# Set up xtl -ARG XTL_TAG # Build and install xtl +ARG XTL_TAG RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ cd xtl && \ mkdir build && cd build && \ @@ -271,10 +296,9 @@ RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git x cd ../.. && \ rm -rf xtl -# Set up xtensor -ARG XTENSOR_TAG # Build and install xtensor +ARG XTENSOR_TAG RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ cd xtensor && \ mkdir build && cd build && \ @@ -283,10 +307,9 @@ RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtens cd ../.. && \ rm -rf xtensor -# Set up xtensor-python -ARG XTENSOR_PYTHON_TAG # Build and install xtensor-python +ARG XTENSOR_PYTHON_TAG RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ cd xtensor-python && \ mkdir build && cd build && \ @@ -296,10 +319,9 @@ RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stac cd ../.. && \ rm -rf xtensor-python -# Set up xtensor-blas -ARG XTENSOR_BLAS_TAG # Build and install xtensor-blas +ARG XTENSOR_BLAS_TAG RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ cd xtensor-blas && \ mkdir build && cd build && \ @@ -308,26 +330,25 @@ RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/ cd ../.. && \ rm -rf xtensor-blas -# Set up vectfit -ARG VECTFIT_TAG # Build and install vectfit +ARG VECTFIT_TAG RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ cd vectfit && \ python -m pip install . && \ cd .. && \ rm -rf vectfit -# Set up libMesh -ARG LIBMESH_TAG # Build and install libMesh +ARG LIBMESH_TAG RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ cd libmesh && \ git submodule update --init --recursive && \ mkdir build && cd build && \ export METHODS="opt" && \ ../configure \ + $([ ${COMPILER} = 'openmpi' ] && echo '--enable-mpi' || echo '--disable-mpi') \ --enable-exodus \ --disable-netcdf-4 \ --disable-eigen \ @@ -336,11 +357,10 @@ RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git cd .. && \ rm -rf libmesh -# Set up MCPL -ARG MCPL_TAG # Build and install MCPL -RUN git clone --depth 1 --single-branch -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ +ARG MCPL_TAG +RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ cd mcpl && \ mkdir build && cd build && \ cmake .. && \ @@ -356,20 +376,34 @@ RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ +# Build and install OpenMC stage FROM dependencies AS openmc ARG COMPILER - -# Copy OpenMC source +ARG OPENMC_USE_OPENMP +ARG OPENMC_BUILD_TESTS +ARG OPENMC_ENABLE_PROFILE +ARG OPENMC_ENABLE_COVERAGE +ARG OPENMC_USE_DAGMC +ARG OPENMC_USE_LIBMESH +ARG OPENMC_USE_MCPL +ARG OPENMC_USE_NCRYSTAL +ARG OPENMC_USE_UWUW + +# Copy OpenMC source to docker image COPY . $HOME/openmc # Configure SKBUILD CMake arguments -ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_OPENMP=ON; \ - -DOPENMC_USE_DAGMC=ON; \ - -DOPENMC_USE_LIBMESH=ON; \ - -DOPENMC_USE_MPI=$([ ${COMPILER} = 'openmpi' ] && echo 'ON' || echo 'OFF'); \ - -DOPENMC_USE_MCPL=ON; \ - -DOPENMC_USE_NCRYSTAL=ON;" +ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_MPI=$([ ${COMPILER} = 'openmpi' ] && echo 'ON' || echo 'OFF'); \ + -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ + -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ + -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ + -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ + -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ + -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ + -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ + -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ + -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" # Build OpenMC wheel RUN cd $HOME/openmc && python -m build . -w @@ -380,7 +414,7 @@ RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist # Install OpenMC wheel RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl - +# Test OpenMC stage FROM openmc AS openmc-test ARG COMPILER From ead096dc85058dfd27506eaa17ec141111667491 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 21:27:47 +0600 Subject: [PATCH 033/145] install openmpi on openmpi stage --- tools/ci/manylinux.dockerfile | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 3599f5194ce..a8eed4890af 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -28,7 +28,7 @@ ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 ARG Python_ABI="cp312-cp312" # Configure Compiler to use (gcc or openmpi) -ARG COMPILER="openmpi" +ARG COMPILER="gcc" # OpenMC options ARG OPENMC_USE_OPENMP="ON" @@ -88,8 +88,7 @@ RUN yum install -y epel-release && \ curl-devel \ eigen3-devel \ lapack-devel \ - libpng-devel \ - openmpi-devel && \ + libpng-devel && \ yum clean all # Use Python from manylinux as the default Python @@ -115,7 +114,6 @@ RUN python -m pip install --upgrade \ uncertainties \ endf \ vtk \ - mpi4py \ packaging \ pytest \ pytest-cov \ @@ -135,6 +133,13 @@ ENV F77=gfortran # Compiler configuration stage: openmpi FROM base AS compiler-openmpi +# Install OpenMPI +RUN yum install -y \ + openmpi-devel && \ + yum clean all && \ + python -m pip install --upgrade \ + mpi4py + ENV CC=mpicc ENV CXX=mpicxx ENV FC=mpif90 From 8a7362e0e12777dfb80ed075f676ef826a95da49 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 23:19:14 +0600 Subject: [PATCH 034/145] add /usr/local/lib64 to path --- tools/ci/manylinux.dockerfile | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index a8eed4890af..85dea9d028e 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -96,7 +96,7 @@ ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python # Set up environment variables for shared libraries -ENV LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH +ENV LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:$LD_LIBRARY_PATH # Install necessary Python packages RUN python -m pip install --upgrade \ @@ -133,6 +133,10 @@ ENV F77=gfortran # Compiler configuration stage: openmpi FROM base AS compiler-openmpi +# Set up OpenMPI environment variables +ENV PATH=/usr/lib64/openmpi/bin:$PATH +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH + # Install OpenMPI RUN yum install -y \ openmpi-devel && \ @@ -145,10 +149,6 @@ ENV CXX=mpicxx ENV FC=mpif90 ENV F77=mpif77 -# Set up OpenMPI environment variables -ENV PATH=/usr/lib64/openmpi/bin:$PATH -ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH - # Dependencies stage FROM compiler-${COMPILER} AS dependencies @@ -399,7 +399,7 @@ ARG OPENMC_USE_UWUW COPY . $HOME/openmc # Configure SKBUILD CMake arguments -ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_MPI=$([ ${COMPILER} = 'openmpi' ] && echo 'ON' || echo 'OFF'); \ +RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] && echo 'ON' || echo 'OFF'); \ -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ @@ -408,10 +408,9 @@ ENV SKBUILD_CMAKE_ARGS "-DOPENMC_USE_MPI=$([ ${COMPILER} = 'openmpi' ] && echo ' -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ - -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" - -# Build OpenMC wheel -RUN cd $HOME/openmc && python -m build . -w + -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ + cd $HOME/openmc && \ + python -m build . -w # Repair wheel RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist @@ -427,4 +426,4 @@ ARG COMPILER # Test OpenMC RUN cd $HOME/openmc && \ nctool --test && \ - pytest --cov=openmc -v $([ ${COMPILER} = 'openmpi' ] && echo '--mpi') --event tests + pytest --cov=openmc -v $([ ${COMPILER} == 'openmpi' ] && echo '--mpi') --event tests From 9985fab03729a0f56092700e9fa5cab8ce4b74b6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 23:19:27 +0600 Subject: [PATCH 035/145] add workflow --- .../workflows/docker-publish-manylinux.yml | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 .github/workflows/docker-publish-manylinux.yml diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml new file mode 100644 index 00000000000..1bc1edfe757 --- /dev/null +++ b/.github/workflows/docker-publish-manylinux.yml @@ -0,0 +1,120 @@ +name: Build & Publish Manylinux Images + +on: + # allows us to run workflows manually + workflow_dispatch: + push: + paths: + - "tools/ci/manylinux.dockerfile" + - ".github/workflows/docker-publish-manylinux.yml" + +jobs: + build-dependency-and-test-img: + runs-on: ubuntu-latest + + strategy: + matrix: + manylinux_image: [ + manylinux_2_28_x86_64 + ] + compiler: [ + gcc, + openmpi + ] + python: [ + cp312-cp312 + ] + + name: Installing Dependencies, Building OpenMC and running tests + steps: + - name: default environment + run: | + echo "tag-latest-on-default=false" >> "$GITHUB_ENV" + + - name: condition on trigger parameters + if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} + run: | + echo "tag-latest-on-default=true" >> "$GITHUB_ENV" + + - name: Log in to the Container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Configure docker image tag + run: | + image_base_tag=ghcr.io/${{ github.repository_owner }}/ + image_base_tag+=openmc-ci-${{ matrix.manylinux_image }} + image_base_tag+=-${{ matrix.compiler}} + image_base_tag+=-${{ matrix.python }} + echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" + + - name: Installing Dependencies in Docker image + uses: firehed/multistage-docker-build-action@v1 + with: + repository: ${{ env.image_base_tag }} + stages: base, dependencies, openmc + server-stage: openmc-test + quiet: false + parallel: true + tag-latest-on-default: ${{ env.tag-latest-on-default }} + dockerfile: CI/Dockerfile + build-args: > + MANYLINUX_IMAGE=${{ matrix.manylinux_image }}, + COMPILER=${{ matrix.compiler }}, + Python_ABI=${{ matrix.python }} + + push_stable_ci_img: + needs: [build-dependency-and-test-img] + runs-on: ubuntu-latest + + strategy: + matrix: + manylinux_image: [ + manylinux_2_28_x86_64 + ] + compiler: [ + gcc, + openmpi + ] + python: [ + cp312-cp312 + ] + + name: Pushing final images + steps: + - name: Log in to the Container registry + if: ${{ github.repository_owner == 'svalinn' }} + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure docker image tag + if: ${{ github.repository_owner == 'openmc-dev' }} + run: | + image_base_tag=ghcr.io/${{ github.repository_owner }}/ + image_base_tag+=openmc-ci-${{ matrix.manylinux_image }} + image_base_tag+=-${{ matrix.compiler}} + image_base_tag+=-${{ matrix.python }} + echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" + + - name: Push Image as latest img + if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} + uses: akhilerm/tag-push-action@v2.1.0 + with: + src: ${{ env.image_base_tag }}/openmc:latest + dst: ${{ env.image_base_tag }}:latest + + - name: Push Image as latest img + if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} + uses: akhilerm/tag-push-action@v2.1.0 + with: + src: ${{ env.image_base_tag }}:latest + dst: ${{ env.image_base_tag }}:stable From 65ae22c16543fe8e63286e089b1dcdc5d6217091 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 30 Sep 2024 23:55:51 +0600 Subject: [PATCH 036/145] remove setup.py --- setup.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 setup.py diff --git a/setup.py b/setup.py deleted file mode 100755 index f26b3138274..00000000000 --- a/setup.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python - -import os -import numpy as np -from setuptools import setup, Extension - - -class OpenMCExtension(Extension): - def __init__(self, name, cmake_lists_dir=".", sources=[], **kwa): - Extension.__init__(self, name, sources=sources, **kwa) - self.cmake_lists_dir = os.path.abspath(cmake_lists_dir) - - -kwargs = { - 'ext_modules': [OpenMCExtension('libopenmc')], - 'include_dirs': [np.get_include()] -} - -setup(**kwargs) From ac5648cea049d25e04ccf2cab79940d5a892154c Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 1 Oct 2024 08:40:51 +0600 Subject: [PATCH 037/145] remove test stage --- .github/workflows/docker-publish-manylinux.yml | 6 +++--- tools/ci/manylinux.dockerfile | 12 +++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index 1bc1edfe757..6a4c8d50ae0 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -58,8 +58,8 @@ jobs: uses: firehed/multistage-docker-build-action@v1 with: repository: ${{ env.image_base_tag }} - stages: base, dependencies, openmc - server-stage: openmc-test + stages: base, dependencies + server-stage: openmc quiet: false parallel: true tag-latest-on-default: ${{ env.tag-latest-on-default }} @@ -89,7 +89,7 @@ jobs: name: Pushing final images steps: - name: Log in to the Container registry - if: ${{ github.repository_owner == 'svalinn' }} + if: ${{ github.repository_owner == 'openmc-dev' }} uses: docker/login-action@v2 with: registry: ghcr.io diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 85dea9d028e..00464450c17 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -11,8 +11,7 @@ # 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. # 3. Dependencies Stage: Downloads and builds all external dependencies. # 4. OpenMC Stage: Copies OpenMC source code, builds it using CMake with specific -# flags and installs it in the container. -# 5. Test Stage: Runs OpenMC's unit tests. +# flags and installs it in the container. After the build, OpenMC is tested. # Arguments and environment variables can be customized for different compiler and # dependency versions. @@ -359,7 +358,7 @@ RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git --disable-eigen \ --disable-lapack && \ make -j$(nproc) && make install && \ - cd .. && \ + cd ../.. && \ rm -rf libmesh @@ -370,7 +369,7 @@ RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl mkdir build && cd build && \ cmake .. && \ make -j$(nproc) && make install && \ - cd .. && \ + cd ../.. && \ rm -rf mcpl @@ -418,11 +417,6 @@ RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist # Install OpenMC wheel RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl -# Test OpenMC stage -FROM openmc AS openmc-test - -ARG COMPILER - # Test OpenMC RUN cd $HOME/openmc && \ nctool --test && \ From db8265f5558cc44316ed9585448fbf9cf0db1af6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 1 Oct 2024 09:30:19 +0600 Subject: [PATCH 038/145] add pypi --- .../workflows/docker-publish-manylinux.yml | 4 +- .github/workflows/pypi.yml | 57 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/pypi.yml diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index 6a4c8d50ae0..a9aae2b0f4e 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -49,7 +49,7 @@ jobs: - name: Configure docker image tag run: | image_base_tag=ghcr.io/${{ github.repository_owner }}/ - image_base_tag+=openmc-ci-${{ matrix.manylinux_image }} + image_base_tag+=openmc-${{ matrix.manylinux_image }} image_base_tag+=-${{ matrix.compiler}} image_base_tag+=-${{ matrix.python }} echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" @@ -100,7 +100,7 @@ jobs: if: ${{ github.repository_owner == 'openmc-dev' }} run: | image_base_tag=ghcr.io/${{ github.repository_owner }}/ - image_base_tag+=openmc-ci-${{ matrix.manylinux_image }} + image_base_tag+=openmc-${{ matrix.manylinux_image }} image_base_tag+=-${{ matrix.compiler}} image_base_tag+=-${{ matrix.python }} echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml new file mode 100644 index 00000000000..7b7aa690d54 --- /dev/null +++ b/.github/workflows/pypi.yml @@ -0,0 +1,57 @@ +name: Publish wheels to PyPI + +on: + # allows running workflows manually + workflow_dispatch: + + release: + types: [published] + +jobs: + main: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + arch: manylinux_x86_64 + - os: macos-13 + arch: macosx_x86_64 + - os: macos-14 + arch: macosx_arm64 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Build wheels + uses: pypa/cibuildwheel@v2.18.0 + env: + CIBW_BUILD: "cp*-${{ matrix.arch }}" + CIBW_ARCHS_LINUX: "x86_64" + CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc-cp312-cp312/openmc:latest + CIBW_ARCHS_MACOS: "native" + CIBW_BEFORE_BUILD_MACOS: | + brew install llvm cmake xtensor hdf5 python libomp libpng + CIBW_ENVIRONMENT_MACOS: > + MACOSX_DEPLOYMENT_TARGET=${{ matrix.os == 'macos-14' && '14.0' || '13.0' }} + DYLD_LIBRARY_PATH=/usr/local/opt/gcc/lib/gcc/current/:$DYLD_LIBRARY_PATH + CXX=$(brew --prefix llvm)/bin/clang++ + HDF5_ROOT=$(brew --prefix hdf5) + CIBW_BUILD_FRONTEND: "build" + with: + package-dir: openmc + output-dir: wheelhouse + config-file: "{package}/pyproject.toml" + + - name: Publish package to PyPI + if: success() + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} + run: | + twine upload wheelhouse/*.whl \ No newline at end of file From a205ef762f7eb7c847bd2510429bc001b7918883 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 1 Oct 2024 15:31:05 +0600 Subject: [PATCH 039/145] move python deps to last --- tools/ci/manylinux.dockerfile | 212 +++++++++++++++------------------- 1 file changed, 93 insertions(+), 119 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 00464450c17..cbf487f7288 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -11,7 +11,8 @@ # 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. # 3. Dependencies Stage: Downloads and builds all external dependencies. # 4. OpenMC Stage: Copies OpenMC source code, builds it using CMake with specific -# flags and installs it in the container. After the build, OpenMC is tested. +# flags and installs it in the container. +# 5. Test Stage: Runs OpenMC unit tests. # Arguments and environment variables can be customized for different compiler and # dependency versions. @@ -24,11 +25,13 @@ # Configure base image ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 -ARG Python_ABI="cp312-cp312" # Configure Compiler to use (gcc or openmpi) ARG COMPILER="gcc" +# Configure Python ABI to use +ARG Python_ABI="cp312-cp312" + # OpenMC options ARG OPENMC_USE_OPENMP="ON" ARG OPENMC_BUILD_TESTS="ON" @@ -44,7 +47,7 @@ ARG OPENMC_USE_UWUW="OFF" ARG NJOY2016_TAG="2016.76" ARG HDF5_TAG="hdf5_1.14.4.3" ARG NETCDF_TAG="v4.9.2" -ARG MOAB_TAG="master" +ARG MOAB_TAG="5.5.1" ARG EMBREE_TAG="v4.3.3" ARG DD_TAG="v1.1.0" ARG DAGMC_TAG="v3.2.3" @@ -62,8 +65,6 @@ ARG MCPL_TAG="v1.6.2" # Base stage FROM quay.io/pypa/${MANYLINUX_IMAGE} AS base -ARG Python_ABI - # Set timezone ENV TZ=America/Chicago RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone @@ -90,35 +91,9 @@ RUN yum install -y epel-release && \ libpng-devel && \ yum clean all -# Use Python from manylinux as the default Python -ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" -RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python - # Set up environment variables for shared libraries ENV LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:$LD_LIBRARY_PATH -# Install necessary Python packages -RUN python -m pip install --upgrade \ - scikit-build-core \ - setuptools \ - numpy \ - cmake \ - ninja \ - h5py \ - scipy \ - ipython \ - matplotlib \ - pandas \ - lxml \ - uncertainties \ - endf \ - vtk \ - packaging \ - pytest \ - pytest-cov \ - colorama \ - openpyxl - # Compiler configuration stage: gcc FROM base AS compiler-gcc @@ -132,22 +107,20 @@ ENV F77=gfortran # Compiler configuration stage: openmpi FROM base AS compiler-openmpi -# Set up OpenMPI environment variables -ENV PATH=/usr/lib64/openmpi/bin:$PATH -ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH - # Install OpenMPI RUN yum install -y \ openmpi-devel && \ - yum clean all && \ - python -m pip install --upgrade \ - mpi4py + yum clean all ENV CC=mpicc ENV CXX=mpicxx ENV FC=mpif90 ENV F77=mpif77 +# Set up OpenMPI environment variables +ENV PATH=/usr/lib64/openmpi/bin:$PATH +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH + # Dependencies stage FROM compiler-${COMPILER} AS dependencies @@ -165,7 +138,6 @@ RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git cd ../.. && \ rm -rf njoy - # Build and install HDF5 ARG HDF5_TAG RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ @@ -181,7 +153,6 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 cd ../.. && \ rm -rf hdf5 - # Build and install NetCDF ARG NETCDF_TAG RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ @@ -195,7 +166,6 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git cd ../.. && \ rm -rf netcdf - # Build and install MOAB ARG MOAB_TAG RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git moab && \ @@ -208,12 +178,12 @@ RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git -DENABLE_NETCDF=ON \ -DNETCDF_ROOT=/usr/local \ -DBUILD_SHARED_LIBS=ON \ - -DENABLE_BLASLAPACK=OFF && \ + -DENABLE_BLASLAPACK=OFF \ + -DENABLE_PYMOAB=OFF && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf moab - # Build and install Embree ARG EMBREE_TAG RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git embree && \ @@ -227,18 +197,17 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd ../.. && \ rm -rf embree - # Build and install Double Down ARG DD_TAG RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ cd dd && \ mkdir build && cd build && \ - cmake .. && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf dd - # Build and install DAGMC ARG DAGMC_TAG RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dagmc && \ @@ -256,7 +225,6 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd ../.. && \ rm -rf dagmc - # Build and install NCrystal ARG NCrystal_TAG RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ @@ -276,74 +244,6 @@ RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.g ncrystal-config --setup && \ rm -rf ncrystal - -# Build and install pybind -ARG PYBIND_TAG -RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ - cd pybind11 && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd .. && \ - python -m pip install . && \ - cd .. && \ - rm -rf pybind11 - - -# Build and install xtl -ARG XTL_TAG -RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ - cd xtl && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtl - - -# Build and install xtensor -ARG XTENSOR_TAG -RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ - cd xtensor && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor - - -# Build and install xtensor-python -ARG XTENSOR_PYTHON_TAG -RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ - cd xtensor-python && \ - mkdir build && cd build && \ - cmake .. \ - -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor-python - - -# Build and install xtensor-blas -ARG XTENSOR_BLAS_TAG -RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ - cd xtensor-blas && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor-blas - - -# Build and install vectfit -ARG VECTFIT_TAG -RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ - cd vectfit && \ - python -m pip install . && \ - cd .. && \ - rm -rf vectfit - - # Build and install libMesh ARG LIBMESH_TAG RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ @@ -361,7 +261,6 @@ RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git cd ../.. && \ rm -rf libmesh - # Build and install MCPL ARG MCPL_TAG RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ @@ -372,7 +271,6 @@ RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl cd ../.. && \ rm -rf mcpl - # Download and extract HDF5 data RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ @@ -384,6 +282,7 @@ RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kv FROM dependencies AS openmc ARG COMPILER +ARG Python_ABI ARG OPENMC_USE_OPENMP ARG OPENMC_BUILD_TESTS ARG OPENMC_ENABLE_PROFILE @@ -394,6 +293,10 @@ ARG OPENMC_USE_MCPL ARG OPENMC_USE_NCRYSTAL ARG OPENMC_USE_UWUW +# Use Python from manylinux as the default Python +ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" +RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python + # Copy OpenMC source to docker image COPY . $HOME/openmc @@ -412,10 +315,81 @@ RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] & python -m build . -w # Repair wheel -RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist +RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ # Install OpenMC wheel -RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl +RUN python -m pip install \ + "$(echo $HOME/openmc/dist/*manylinux**.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" + + +# Test OpenMC stage +FROM openmc AS test + +ARG COMPILER + +# Build and install pybind +ARG PYBIND_TAG +RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ + cd pybind11 && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd .. && \ + python -m pip install . && \ + cd .. && \ + rm -rf pybind11 + +# Build and install xtl +ARG XTL_TAG +RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ + cd xtl && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtl + +# Build and install xtensor +ARG XTENSOR_TAG +RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ + cd xtensor && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor + +# Build and install xtensor-python +ARG XTENSOR_PYTHON_TAG +RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ + cd xtensor-python && \ + mkdir build && cd build && \ + cmake .. \ + -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-python + +# Build and install xtensor-blas +ARG XTENSOR_BLAS_TAG +RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ + cd xtensor-blas && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-blas + +# Build and install vectfit +ARG VECTFIT_TAG +RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ + cd vectfit && \ + python -m pip install . && \ + cd .. && \ + rm -rf vectfit + +RUN yum install -y \ + sqlite-devel # Test OpenMC RUN cd $HOME/openmc && \ From 7036ec6422e6121dc098362469d76d7076ff8eb6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 2 Oct 2024 13:16:34 +0600 Subject: [PATCH 040/145] fix pytest-cov issue --- tools/ci/manylinux.dockerfile | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index cbf487f7288..cdd63212133 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -92,7 +92,7 @@ RUN yum install -y epel-release && \ yum clean all # Set up environment variables for shared libraries -ENV LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib64:$LD_LIBRARY_PATH +ENV LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH # Compiler configuration stage: gcc @@ -133,6 +133,7 @@ RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git cd njoy && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -Dstatic=ON && \ make -j$(nproc) && make install && \ cd ../.. && \ @@ -159,6 +160,7 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git cd netcdf && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_SHARED_LIBS=ON \ -DENABLE_DAP=ON \ -DENABLE_TESTS=OFF && \ @@ -172,6 +174,7 @@ RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git cd moab && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DENABLE_HDF5=ON \ -DHDF5_ROOT=/usr/local \ @@ -190,6 +193,7 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd embree && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DEMBREE_TASKING_SYSTEM=INTERNAL \ -DEMBREE_ISPC_SUPPORT=OFF \ -DEMBREE_TUTORIALS=OFF && \ @@ -231,6 +235,7 @@ RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.g cd ncrystal && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_SHARED_LIBS=ON \ -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ -DNCRYSTAL_MODIFY_RPATH=OFF \ @@ -253,6 +258,7 @@ RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git export METHODS="opt" && \ ../configure \ $([ ${COMPILER} = 'openmpi' ] && echo '--enable-mpi' || echo '--disable-mpi') \ + --prefix=/usr/local \ --enable-exodus \ --disable-netcdf-4 \ --disable-eigen \ @@ -266,7 +272,8 @@ ARG MCPL_TAG RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ cd mcpl && \ mkdir build && cd build && \ - cmake .. && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf mcpl @@ -388,9 +395,6 @@ RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git cd .. && \ rm -rf vectfit -RUN yum install -y \ - sqlite-devel - # Test OpenMC RUN cd $HOME/openmc && \ nctool --test && \ From 1d8e951a2c04bc665ff37930965b0480f3c1c4e1 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 2 Oct 2024 13:19:28 +0600 Subject: [PATCH 041/145] fix pytest-cov issue --- tools/ci/manylinux.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index cdd63212133..7b5e949a280 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -218,6 +218,7 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd dagmc && \ mkdir build && cd build && \ cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ -DMOAB_DIR=/usr/local \ -Ddd_ROOT=/usr/local \ -DBUILD_TALLY=ON \ From 0043634d9b0b5c4dd816def0c4ee33f2d403f04f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 2 Oct 2024 15:06:49 +0600 Subject: [PATCH 042/145] no need abi --- .github/workflows/docker-publish-manylinux.yml | 16 +++------------- .github/workflows/pypi.yml | 2 +- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index a9aae2b0f4e..da60b82d6ca 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -21,9 +21,6 @@ jobs: gcc, openmpi ] - python: [ - cp312-cp312 - ] name: Installing Dependencies, Building OpenMC and running tests steps: @@ -51,24 +48,21 @@ jobs: image_base_tag=ghcr.io/${{ github.repository_owner }}/ image_base_tag+=openmc-${{ matrix.manylinux_image }} image_base_tag+=-${{ matrix.compiler}} - image_base_tag+=-${{ matrix.python }} echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" - name: Installing Dependencies in Docker image uses: firehed/multistage-docker-build-action@v1 with: repository: ${{ env.image_base_tag }} - stages: base, dependencies - server-stage: openmc + stages: base, dependencies, openmc + server-stage: test quiet: false parallel: true tag-latest-on-default: ${{ env.tag-latest-on-default }} dockerfile: CI/Dockerfile build-args: > MANYLINUX_IMAGE=${{ matrix.manylinux_image }}, - COMPILER=${{ matrix.compiler }}, - Python_ABI=${{ matrix.python }} - + COMPILER=${{ matrix.compiler }} push_stable_ci_img: needs: [build-dependency-and-test-img] runs-on: ubuntu-latest @@ -82,9 +76,6 @@ jobs: gcc, openmpi ] - python: [ - cp312-cp312 - ] name: Pushing final images steps: @@ -102,7 +93,6 @@ jobs: image_base_tag=ghcr.io/${{ github.repository_owner }}/ image_base_tag+=openmc-${{ matrix.manylinux_image }} image_base_tag+=-${{ matrix.compiler}} - image_base_tag+=-${{ matrix.python }} echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" - name: Push Image as latest img diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index 7b7aa690d54..0b324d3b7c1 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -33,7 +33,7 @@ jobs: env: CIBW_BUILD: "cp*-${{ matrix.arch }}" CIBW_ARCHS_LINUX: "x86_64" - CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc-cp312-cp312/openmc:latest + CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc/openmc:latest CIBW_ARCHS_MACOS: "native" CIBW_BEFORE_BUILD_MACOS: | brew install llvm cmake xtensor hdf5 python libomp libpng From 9e65e4ab1577ab5a8383c18c4a825c4cdd00d9be Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 2 Oct 2024 20:19:09 +0600 Subject: [PATCH 043/145] fix path --- .github/workflows/docker-publish-manylinux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index da60b82d6ca..5fc49d8900c 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -59,7 +59,7 @@ jobs: quiet: false parallel: true tag-latest-on-default: ${{ env.tag-latest-on-default }} - dockerfile: CI/Dockerfile + dockerfile: tools/ci/manylinux.dockerfile build-args: > MANYLINUX_IMAGE=${{ matrix.manylinux_image }}, COMPILER=${{ matrix.compiler }} From 1985003b0c2f7871b3ad4d47aaa872d06d6da99b Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 21:06:56 +0600 Subject: [PATCH 044/145] move openmc to src --- openmc/data/compton_profiles.h5 | Bin 598888 -> 0 bytes openmc/data/density_effect.h5 | Bin 206264 -> 0 bytes pyproject.toml | 2 +- {openmc => src/openmc}/__init__.py | 0 {openmc => src/openmc}/_xml.py | 0 {openmc => src/openmc}/arithmetic.py | 0 {openmc => src/openmc}/bounding_box.py | 0 {openmc => src/openmc}/cell.py | 0 {openmc => src/openmc}/checkvalue.py | 0 {openmc => src/openmc}/cmfd.py | 0 {openmc => src/openmc}/config.py | 0 {openmc => src/openmc}/data/BREMX.DAT | 0 {openmc => src/openmc}/data/__init__.py | 0 {openmc => src/openmc}/data/ace.py | 0 .../openmc}/data/angle_distribution.py | 0 {openmc => src/openmc}/data/angle_energy.py | 0 {openmc => src/openmc}/data/correlated.py | 0 {openmc => src/openmc}/data/data.py | 0 {openmc => src/openmc}/data/decay.py | 0 .../openmc}/data/effective_dose/__init__.py | 0 .../openmc}/data/effective_dose/dose.py | 0 .../openmc}/data/effective_dose/electrons.txt | 0 .../data/effective_dose/helium_ions.txt | 0 .../data/effective_dose/negative_muons.txt | 0 .../data/effective_dose/negative_pions.txt | 0 .../openmc}/data/effective_dose/neutrons.txt | 0 .../openmc}/data/effective_dose/photons.txt | 0 .../data/effective_dose/photons_kerma.txt | 0 .../data/effective_dose/positive_muons.txt | 0 .../data/effective_dose/positive_pions.txt | 0 .../openmc}/data/effective_dose/positrons.txt | 0 .../openmc}/data/effective_dose/protons.txt | 0 {openmc => src/openmc}/data/endf.py | 0 .../openmc}/data/energy_distribution.py | 0 {openmc => src/openmc}/data/fission_energy.py | 0 {openmc => src/openmc}/data/function.py | 0 {openmc => src/openmc}/data/grid.py | 0 {openmc => src/openmc}/data/half_life.json | 0 {openmc => src/openmc}/data/kalbach_mann.py | 0 {openmc => src/openmc}/data/laboratory.py | 0 {openmc => src/openmc}/data/library.py | 0 {openmc => src/openmc}/data/mass_1.mas20.txt | 0 {openmc => src/openmc}/data/multipole.py | 0 {openmc => src/openmc}/data/nbody.py | 0 {openmc => src/openmc}/data/neutron.py | 0 {openmc => src/openmc}/data/njoy.py | 0 {openmc => src/openmc}/data/photon.py | 0 {openmc => src/openmc}/data/product.py | 0 {openmc => src/openmc}/data/reaction.py | 0 {openmc => src/openmc}/data/resonance.py | 0 .../openmc}/data/resonance_covariance.py | 0 {openmc => src/openmc}/data/thermal.py | 0 .../openmc}/data/thermal_angle_energy.py | 0 {openmc => src/openmc}/data/uncorrelated.py | 0 {openmc => src/openmc}/data/urr.py | 0 {openmc => src/openmc}/deplete/__init__.py | 0 .../openmc}/deplete/_matrix_funcs.py | 0 {openmc => src/openmc}/deplete/abc.py | 0 {openmc => src/openmc}/deplete/atom_number.py | 0 {openmc => src/openmc}/deplete/chain.py | 0 .../openmc}/deplete/coupled_operator.py | 0 {openmc => src/openmc}/deplete/cram.py | 0 {openmc => src/openmc}/deplete/helpers.py | 0 .../openmc}/deplete/independent_operator.py | 0 {openmc => src/openmc}/deplete/integrators.py | 0 {openmc => src/openmc}/deplete/microxs.py | 0 {openmc => src/openmc}/deplete/nuclide.py | 0 .../openmc}/deplete/openmc_operator.py | 0 {openmc => src/openmc}/deplete/pool.py | 0 .../openmc}/deplete/reaction_rates.py | 0 {openmc => src/openmc}/deplete/results.py | 0 {openmc => src/openmc}/deplete/stepresult.py | 0 .../openmc}/deplete/transfer_rates.py | 0 {openmc => src/openmc}/dummy_comm.py | 0 {openmc => src/openmc}/element.py | 0 {openmc => src/openmc}/examples.py | 0 {openmc => src/openmc}/exceptions.py | 0 {openmc => src/openmc}/executor.py | 0 {openmc => src/openmc}/filter.py | 0 {openmc => src/openmc}/filter_expansion.py | 0 {openmc => src/openmc}/geometry.py | 0 {openmc => src/openmc}/lattice.py | 0 {openmc => src/openmc}/lib/__init__.py | 0 {openmc => src/openmc}/lib/cell.py | 0 {openmc => src/openmc}/lib/core.py | 0 {openmc => src/openmc}/lib/error.py | 0 {openmc => src/openmc}/lib/filter.py | 0 {openmc => src/openmc}/lib/material.py | 0 {openmc => src/openmc}/lib/math.py | 0 {openmc => src/openmc}/lib/mesh.py | 0 {openmc => src/openmc}/lib/nuclide.py | 0 {openmc => src/openmc}/lib/plot.py | 0 {openmc => src/openmc}/lib/settings.py | 0 {openmc => src/openmc}/lib/tally.py | 0 {openmc => src/openmc}/lib/weight_windows.py | 0 {openmc => src/openmc}/macroscopic.py | 0 {openmc => src/openmc}/material.py | 0 {openmc => src/openmc}/mesh.py | 0 {openmc => src/openmc}/mgxs/__init__.py | 0 {openmc => src/openmc}/mgxs/groups.py | 0 {openmc => src/openmc}/mgxs/library.py | 0 {openmc => src/openmc}/mgxs/mdgxs.py | 0 {openmc => src/openmc}/mgxs/mgxs.py | 0 {openmc => src/openmc}/mgxs_library.py | 0 {openmc => src/openmc}/mixin.py | 0 {openmc => src/openmc}/model/__init__.py | 0 {openmc => src/openmc}/model/funcs.py | 0 {openmc => src/openmc}/model/model.py | 0 .../openmc}/model/surface_composite.py | 0 {openmc => src/openmc}/model/triso.py | 0 {openmc => src/openmc}/mpi.py | 0 {openmc => src/openmc}/nuclide.py | 0 {openmc => src/openmc}/openmc_exec.py | 0 {openmc => src/openmc}/openmoc_compatible.py | 0 {openmc => src/openmc}/particle_restart.py | 0 {openmc => src/openmc}/plots.py | 0 {openmc => src/openmc}/plotter.py | 0 {openmc => src/openmc}/polynomial.py | 0 {openmc => src/openmc}/region.py | 0 {openmc => src/openmc}/search.py | 0 {openmc => src/openmc}/settings.py | 0 {openmc => src/openmc}/source.py | 0 {openmc => src/openmc}/statepoint.py | 0 {openmc => src/openmc}/stats/__init__.py | 0 {openmc => src/openmc}/stats/multivariate.py | 0 {openmc => src/openmc}/stats/univariate.py | 0 {openmc => src/openmc}/summary.py | 0 {openmc => src/openmc}/surface.py | 0 {openmc => src/openmc}/tallies.py | 0 {openmc => src/openmc}/tally_derivative.py | 0 {openmc => src/openmc}/tracks.py | 0 {openmc => src/openmc}/trigger.py | 0 {openmc => src/openmc}/universe.py | 0 {openmc => src/openmc}/utility_funcs.py | 0 {openmc => src/openmc}/volume.py | 0 {openmc => src/openmc}/weight_windows.py | 0 136 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 openmc/data/compton_profiles.h5 delete mode 100644 openmc/data/density_effect.h5 rename {openmc => src/openmc}/__init__.py (100%) rename {openmc => src/openmc}/_xml.py (100%) rename {openmc => src/openmc}/arithmetic.py (100%) rename {openmc => src/openmc}/bounding_box.py (100%) rename {openmc => src/openmc}/cell.py (100%) rename {openmc => src/openmc}/checkvalue.py (100%) rename {openmc => src/openmc}/cmfd.py (100%) rename {openmc => src/openmc}/config.py (100%) rename {openmc => src/openmc}/data/BREMX.DAT (100%) rename {openmc => src/openmc}/data/__init__.py (100%) rename {openmc => src/openmc}/data/ace.py (100%) rename {openmc => src/openmc}/data/angle_distribution.py (100%) rename {openmc => src/openmc}/data/angle_energy.py (100%) rename {openmc => src/openmc}/data/correlated.py (100%) rename {openmc => src/openmc}/data/data.py (100%) rename {openmc => src/openmc}/data/decay.py (100%) rename {openmc => src/openmc}/data/effective_dose/__init__.py (100%) rename {openmc => src/openmc}/data/effective_dose/dose.py (100%) rename {openmc => src/openmc}/data/effective_dose/electrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/helium_ions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/negative_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/negative_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/neutrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/photons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/photons_kerma.txt (100%) rename {openmc => src/openmc}/data/effective_dose/positive_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/positive_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/positrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/protons.txt (100%) rename {openmc => src/openmc}/data/endf.py (100%) rename {openmc => src/openmc}/data/energy_distribution.py (100%) rename {openmc => src/openmc}/data/fission_energy.py (100%) rename {openmc => src/openmc}/data/function.py (100%) rename {openmc => src/openmc}/data/grid.py (100%) rename {openmc => src/openmc}/data/half_life.json (100%) rename {openmc => src/openmc}/data/kalbach_mann.py (100%) rename {openmc => src/openmc}/data/laboratory.py (100%) rename {openmc => src/openmc}/data/library.py (100%) rename {openmc => src/openmc}/data/mass_1.mas20.txt (100%) rename {openmc => src/openmc}/data/multipole.py (100%) rename {openmc => src/openmc}/data/nbody.py (100%) rename {openmc => src/openmc}/data/neutron.py (100%) rename {openmc => src/openmc}/data/njoy.py (100%) rename {openmc => src/openmc}/data/photon.py (100%) rename {openmc => src/openmc}/data/product.py (100%) rename {openmc => src/openmc}/data/reaction.py (100%) rename {openmc => src/openmc}/data/resonance.py (100%) rename {openmc => src/openmc}/data/resonance_covariance.py (100%) rename {openmc => src/openmc}/data/thermal.py (100%) rename {openmc => src/openmc}/data/thermal_angle_energy.py (100%) rename {openmc => src/openmc}/data/uncorrelated.py (100%) rename {openmc => src/openmc}/data/urr.py (100%) rename {openmc => src/openmc}/deplete/__init__.py (100%) rename {openmc => src/openmc}/deplete/_matrix_funcs.py (100%) rename {openmc => src/openmc}/deplete/abc.py (100%) rename {openmc => src/openmc}/deplete/atom_number.py (100%) rename {openmc => src/openmc}/deplete/chain.py (100%) rename {openmc => src/openmc}/deplete/coupled_operator.py (100%) rename {openmc => src/openmc}/deplete/cram.py (100%) rename {openmc => src/openmc}/deplete/helpers.py (100%) rename {openmc => src/openmc}/deplete/independent_operator.py (100%) rename {openmc => src/openmc}/deplete/integrators.py (100%) rename {openmc => src/openmc}/deplete/microxs.py (100%) rename {openmc => src/openmc}/deplete/nuclide.py (100%) rename {openmc => src/openmc}/deplete/openmc_operator.py (100%) rename {openmc => src/openmc}/deplete/pool.py (100%) rename {openmc => src/openmc}/deplete/reaction_rates.py (100%) rename {openmc => src/openmc}/deplete/results.py (100%) rename {openmc => src/openmc}/deplete/stepresult.py (100%) rename {openmc => src/openmc}/deplete/transfer_rates.py (100%) rename {openmc => src/openmc}/dummy_comm.py (100%) rename {openmc => src/openmc}/element.py (100%) rename {openmc => src/openmc}/examples.py (100%) rename {openmc => src/openmc}/exceptions.py (100%) rename {openmc => src/openmc}/executor.py (100%) rename {openmc => src/openmc}/filter.py (100%) rename {openmc => src/openmc}/filter_expansion.py (100%) rename {openmc => src/openmc}/geometry.py (100%) rename {openmc => src/openmc}/lattice.py (100%) rename {openmc => src/openmc}/lib/__init__.py (100%) rename {openmc => src/openmc}/lib/cell.py (100%) rename {openmc => src/openmc}/lib/core.py (100%) rename {openmc => src/openmc}/lib/error.py (100%) rename {openmc => src/openmc}/lib/filter.py (100%) rename {openmc => src/openmc}/lib/material.py (100%) rename {openmc => src/openmc}/lib/math.py (100%) rename {openmc => src/openmc}/lib/mesh.py (100%) rename {openmc => src/openmc}/lib/nuclide.py (100%) rename {openmc => src/openmc}/lib/plot.py (100%) rename {openmc => src/openmc}/lib/settings.py (100%) rename {openmc => src/openmc}/lib/tally.py (100%) rename {openmc => src/openmc}/lib/weight_windows.py (100%) rename {openmc => src/openmc}/macroscopic.py (100%) rename {openmc => src/openmc}/material.py (100%) rename {openmc => src/openmc}/mesh.py (100%) rename {openmc => src/openmc}/mgxs/__init__.py (100%) rename {openmc => src/openmc}/mgxs/groups.py (100%) rename {openmc => src/openmc}/mgxs/library.py (100%) rename {openmc => src/openmc}/mgxs/mdgxs.py (100%) rename {openmc => src/openmc}/mgxs/mgxs.py (100%) rename {openmc => src/openmc}/mgxs_library.py (100%) rename {openmc => src/openmc}/mixin.py (100%) rename {openmc => src/openmc}/model/__init__.py (100%) rename {openmc => src/openmc}/model/funcs.py (100%) rename {openmc => src/openmc}/model/model.py (100%) rename {openmc => src/openmc}/model/surface_composite.py (100%) rename {openmc => src/openmc}/model/triso.py (100%) rename {openmc => src/openmc}/mpi.py (100%) rename {openmc => src/openmc}/nuclide.py (100%) rename {openmc => src/openmc}/openmc_exec.py (100%) rename {openmc => src/openmc}/openmoc_compatible.py (100%) rename {openmc => src/openmc}/particle_restart.py (100%) rename {openmc => src/openmc}/plots.py (100%) rename {openmc => src/openmc}/plotter.py (100%) rename {openmc => src/openmc}/polynomial.py (100%) rename {openmc => src/openmc}/region.py (100%) rename {openmc => src/openmc}/search.py (100%) rename {openmc => src/openmc}/settings.py (100%) rename {openmc => src/openmc}/source.py (100%) rename {openmc => src/openmc}/statepoint.py (100%) rename {openmc => src/openmc}/stats/__init__.py (100%) rename {openmc => src/openmc}/stats/multivariate.py (100%) rename {openmc => src/openmc}/stats/univariate.py (100%) rename {openmc => src/openmc}/summary.py (100%) rename {openmc => src/openmc}/surface.py (100%) rename {openmc => src/openmc}/tallies.py (100%) rename {openmc => src/openmc}/tally_derivative.py (100%) rename {openmc => src/openmc}/tracks.py (100%) rename {openmc => src/openmc}/trigger.py (100%) rename {openmc => src/openmc}/universe.py (100%) rename {openmc => src/openmc}/utility_funcs.py (100%) rename {openmc => src/openmc}/volume.py (100%) rename {openmc => src/openmc}/weight_windows.py (100%) diff --git a/openmc/data/compton_profiles.h5 b/openmc/data/compton_profiles.h5 deleted file mode 100644 index 298ed0340e6eaf3a0788d86edc5faa011931cdf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598888 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≈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

}U12r=Nc;3o?hkbPBt9lvcZCodG)-bNQ9@w2JCF zJm6NiP8LFcvD0Q;*N z*8io(|NP~B@R2@RPvLQwDJ~a$3%DN6H@B3&;R;emc&!~fb$DTI$F&+bnvWHkqu3yI zg@lpoo*R_jA-JXvU5vz6fb=Q*Q<`s#J0Bm#vB6&u?>Vj;Tn}`LkZ%XK20td|_kAh3 zL~wc`EARX6Z{jQK)LQX@(|wrWqlx*P$BVPfV?BiTC@Q@9W2ql_X|pTM?f-6hc@26o z$tCi8t3L-WQ?Hf!r_S|2ZxGjw`3>(kcqZsF4XgR^U5AS+H27|DU;8maWbWb^?XwCR zHNf?l%&W%;JkOtf9CV$Y-<^yz^�W9Te_#zw#>q*Ms%XINR@@x>@w)Le+cBKlf_I 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 diff --git a/openmc/data/density_effect.h5 b/openmc/data/density_effect.h5 deleted file mode 100644 index 77d973517c244f6083b558e9569a5082174169eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206264 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 diff --git a/pyproject.toml b/pyproject.toml index 16d16106798..847b97bded6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,5 +64,5 @@ Issues = "https://github.com/openmc-dev/openmc/issues" build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" -wheel.packages = ["openmc"] +wheel.packages = ["src/openmc"] wheel.exclude = ["CMakeLists.txt"] diff --git a/openmc/__init__.py b/src/openmc/__init__.py similarity index 100% rename from openmc/__init__.py rename to src/openmc/__init__.py diff --git a/openmc/_xml.py b/src/openmc/_xml.py similarity index 100% rename from openmc/_xml.py rename to src/openmc/_xml.py diff --git a/openmc/arithmetic.py b/src/openmc/arithmetic.py similarity index 100% rename from openmc/arithmetic.py rename to src/openmc/arithmetic.py diff --git a/openmc/bounding_box.py b/src/openmc/bounding_box.py similarity index 100% rename from openmc/bounding_box.py rename to src/openmc/bounding_box.py diff --git a/openmc/cell.py b/src/openmc/cell.py similarity index 100% rename from openmc/cell.py rename to src/openmc/cell.py diff --git a/openmc/checkvalue.py b/src/openmc/checkvalue.py similarity index 100% rename from openmc/checkvalue.py rename to src/openmc/checkvalue.py diff --git a/openmc/cmfd.py b/src/openmc/cmfd.py similarity index 100% rename from openmc/cmfd.py rename to src/openmc/cmfd.py diff --git a/openmc/config.py b/src/openmc/config.py similarity index 100% rename from openmc/config.py rename to src/openmc/config.py diff --git a/openmc/data/BREMX.DAT b/src/openmc/data/BREMX.DAT similarity index 100% rename from openmc/data/BREMX.DAT rename to src/openmc/data/BREMX.DAT diff --git a/openmc/data/__init__.py b/src/openmc/data/__init__.py similarity index 100% rename from openmc/data/__init__.py rename to src/openmc/data/__init__.py diff --git a/openmc/data/ace.py b/src/openmc/data/ace.py similarity index 100% rename from openmc/data/ace.py rename to src/openmc/data/ace.py diff --git a/openmc/data/angle_distribution.py b/src/openmc/data/angle_distribution.py similarity index 100% rename from openmc/data/angle_distribution.py rename to src/openmc/data/angle_distribution.py diff --git a/openmc/data/angle_energy.py b/src/openmc/data/angle_energy.py similarity index 100% rename from openmc/data/angle_energy.py rename to src/openmc/data/angle_energy.py diff --git a/openmc/data/correlated.py b/src/openmc/data/correlated.py similarity index 100% rename from openmc/data/correlated.py rename to src/openmc/data/correlated.py diff --git a/openmc/data/data.py b/src/openmc/data/data.py similarity index 100% rename from openmc/data/data.py rename to src/openmc/data/data.py diff --git a/openmc/data/decay.py b/src/openmc/data/decay.py similarity index 100% rename from openmc/data/decay.py rename to src/openmc/data/decay.py diff --git a/openmc/data/effective_dose/__init__.py b/src/openmc/data/effective_dose/__init__.py similarity index 100% rename from openmc/data/effective_dose/__init__.py rename to src/openmc/data/effective_dose/__init__.py diff --git a/openmc/data/effective_dose/dose.py b/src/openmc/data/effective_dose/dose.py similarity index 100% rename from openmc/data/effective_dose/dose.py rename to src/openmc/data/effective_dose/dose.py diff --git a/openmc/data/effective_dose/electrons.txt b/src/openmc/data/effective_dose/electrons.txt similarity index 100% rename from openmc/data/effective_dose/electrons.txt rename to src/openmc/data/effective_dose/electrons.txt diff --git a/openmc/data/effective_dose/helium_ions.txt b/src/openmc/data/effective_dose/helium_ions.txt similarity index 100% rename from openmc/data/effective_dose/helium_ions.txt rename to src/openmc/data/effective_dose/helium_ions.txt diff --git a/openmc/data/effective_dose/negative_muons.txt b/src/openmc/data/effective_dose/negative_muons.txt similarity index 100% rename from openmc/data/effective_dose/negative_muons.txt rename to src/openmc/data/effective_dose/negative_muons.txt diff --git a/openmc/data/effective_dose/negative_pions.txt b/src/openmc/data/effective_dose/negative_pions.txt similarity index 100% rename from openmc/data/effective_dose/negative_pions.txt rename to src/openmc/data/effective_dose/negative_pions.txt diff --git a/openmc/data/effective_dose/neutrons.txt b/src/openmc/data/effective_dose/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/neutrons.txt rename to src/openmc/data/effective_dose/neutrons.txt diff --git a/openmc/data/effective_dose/photons.txt b/src/openmc/data/effective_dose/photons.txt similarity index 100% rename from openmc/data/effective_dose/photons.txt rename to src/openmc/data/effective_dose/photons.txt diff --git a/openmc/data/effective_dose/photons_kerma.txt b/src/openmc/data/effective_dose/photons_kerma.txt similarity index 100% rename from openmc/data/effective_dose/photons_kerma.txt rename to src/openmc/data/effective_dose/photons_kerma.txt diff --git a/openmc/data/effective_dose/positive_muons.txt b/src/openmc/data/effective_dose/positive_muons.txt similarity index 100% rename from openmc/data/effective_dose/positive_muons.txt rename to src/openmc/data/effective_dose/positive_muons.txt diff --git a/openmc/data/effective_dose/positive_pions.txt b/src/openmc/data/effective_dose/positive_pions.txt similarity index 100% rename from openmc/data/effective_dose/positive_pions.txt rename to src/openmc/data/effective_dose/positive_pions.txt diff --git a/openmc/data/effective_dose/positrons.txt b/src/openmc/data/effective_dose/positrons.txt similarity index 100% rename from openmc/data/effective_dose/positrons.txt rename to src/openmc/data/effective_dose/positrons.txt diff --git a/openmc/data/effective_dose/protons.txt b/src/openmc/data/effective_dose/protons.txt similarity index 100% rename from openmc/data/effective_dose/protons.txt rename to src/openmc/data/effective_dose/protons.txt diff --git a/openmc/data/endf.py b/src/openmc/data/endf.py similarity index 100% rename from openmc/data/endf.py rename to src/openmc/data/endf.py diff --git a/openmc/data/energy_distribution.py b/src/openmc/data/energy_distribution.py similarity index 100% rename from openmc/data/energy_distribution.py rename to src/openmc/data/energy_distribution.py diff --git a/openmc/data/fission_energy.py b/src/openmc/data/fission_energy.py similarity index 100% rename from openmc/data/fission_energy.py rename to src/openmc/data/fission_energy.py diff --git a/openmc/data/function.py b/src/openmc/data/function.py similarity index 100% rename from openmc/data/function.py rename to src/openmc/data/function.py diff --git a/openmc/data/grid.py b/src/openmc/data/grid.py similarity index 100% rename from openmc/data/grid.py rename to src/openmc/data/grid.py diff --git a/openmc/data/half_life.json b/src/openmc/data/half_life.json similarity index 100% rename from openmc/data/half_life.json rename to src/openmc/data/half_life.json diff --git a/openmc/data/kalbach_mann.py b/src/openmc/data/kalbach_mann.py similarity index 100% rename from openmc/data/kalbach_mann.py rename to src/openmc/data/kalbach_mann.py diff --git a/openmc/data/laboratory.py b/src/openmc/data/laboratory.py similarity index 100% rename from openmc/data/laboratory.py rename to src/openmc/data/laboratory.py diff --git a/openmc/data/library.py b/src/openmc/data/library.py similarity index 100% rename from openmc/data/library.py rename to src/openmc/data/library.py diff --git a/openmc/data/mass_1.mas20.txt b/src/openmc/data/mass_1.mas20.txt similarity index 100% rename from openmc/data/mass_1.mas20.txt rename to src/openmc/data/mass_1.mas20.txt diff --git a/openmc/data/multipole.py b/src/openmc/data/multipole.py similarity index 100% rename from openmc/data/multipole.py rename to src/openmc/data/multipole.py diff --git a/openmc/data/nbody.py b/src/openmc/data/nbody.py similarity index 100% rename from openmc/data/nbody.py rename to src/openmc/data/nbody.py diff --git a/openmc/data/neutron.py b/src/openmc/data/neutron.py similarity index 100% rename from openmc/data/neutron.py rename to src/openmc/data/neutron.py diff --git a/openmc/data/njoy.py b/src/openmc/data/njoy.py similarity index 100% rename from openmc/data/njoy.py rename to src/openmc/data/njoy.py diff --git a/openmc/data/photon.py b/src/openmc/data/photon.py similarity index 100% rename from openmc/data/photon.py rename to src/openmc/data/photon.py diff --git a/openmc/data/product.py b/src/openmc/data/product.py similarity index 100% rename from openmc/data/product.py rename to src/openmc/data/product.py diff --git a/openmc/data/reaction.py b/src/openmc/data/reaction.py similarity index 100% rename from openmc/data/reaction.py rename to src/openmc/data/reaction.py diff --git a/openmc/data/resonance.py b/src/openmc/data/resonance.py similarity index 100% rename from openmc/data/resonance.py rename to src/openmc/data/resonance.py diff --git a/openmc/data/resonance_covariance.py b/src/openmc/data/resonance_covariance.py similarity index 100% rename from openmc/data/resonance_covariance.py rename to src/openmc/data/resonance_covariance.py diff --git a/openmc/data/thermal.py b/src/openmc/data/thermal.py similarity index 100% rename from openmc/data/thermal.py rename to src/openmc/data/thermal.py diff --git a/openmc/data/thermal_angle_energy.py b/src/openmc/data/thermal_angle_energy.py similarity index 100% rename from openmc/data/thermal_angle_energy.py rename to src/openmc/data/thermal_angle_energy.py diff --git a/openmc/data/uncorrelated.py b/src/openmc/data/uncorrelated.py similarity index 100% rename from openmc/data/uncorrelated.py rename to src/openmc/data/uncorrelated.py diff --git a/openmc/data/urr.py b/src/openmc/data/urr.py similarity index 100% rename from openmc/data/urr.py rename to src/openmc/data/urr.py diff --git a/openmc/deplete/__init__.py b/src/openmc/deplete/__init__.py similarity index 100% rename from openmc/deplete/__init__.py rename to src/openmc/deplete/__init__.py diff --git a/openmc/deplete/_matrix_funcs.py b/src/openmc/deplete/_matrix_funcs.py similarity index 100% rename from openmc/deplete/_matrix_funcs.py rename to src/openmc/deplete/_matrix_funcs.py diff --git a/openmc/deplete/abc.py b/src/openmc/deplete/abc.py similarity index 100% rename from openmc/deplete/abc.py rename to src/openmc/deplete/abc.py diff --git a/openmc/deplete/atom_number.py b/src/openmc/deplete/atom_number.py similarity index 100% rename from openmc/deplete/atom_number.py rename to src/openmc/deplete/atom_number.py diff --git a/openmc/deplete/chain.py b/src/openmc/deplete/chain.py similarity index 100% rename from openmc/deplete/chain.py rename to src/openmc/deplete/chain.py diff --git a/openmc/deplete/coupled_operator.py b/src/openmc/deplete/coupled_operator.py similarity index 100% rename from openmc/deplete/coupled_operator.py rename to src/openmc/deplete/coupled_operator.py diff --git a/openmc/deplete/cram.py b/src/openmc/deplete/cram.py similarity index 100% rename from openmc/deplete/cram.py rename to src/openmc/deplete/cram.py diff --git a/openmc/deplete/helpers.py b/src/openmc/deplete/helpers.py similarity index 100% rename from openmc/deplete/helpers.py rename to src/openmc/deplete/helpers.py diff --git a/openmc/deplete/independent_operator.py b/src/openmc/deplete/independent_operator.py similarity index 100% rename from openmc/deplete/independent_operator.py rename to src/openmc/deplete/independent_operator.py diff --git a/openmc/deplete/integrators.py b/src/openmc/deplete/integrators.py similarity index 100% rename from openmc/deplete/integrators.py rename to src/openmc/deplete/integrators.py diff --git a/openmc/deplete/microxs.py b/src/openmc/deplete/microxs.py similarity index 100% rename from openmc/deplete/microxs.py rename to src/openmc/deplete/microxs.py diff --git a/openmc/deplete/nuclide.py b/src/openmc/deplete/nuclide.py similarity index 100% rename from openmc/deplete/nuclide.py rename to src/openmc/deplete/nuclide.py diff --git a/openmc/deplete/openmc_operator.py b/src/openmc/deplete/openmc_operator.py similarity index 100% rename from openmc/deplete/openmc_operator.py rename to src/openmc/deplete/openmc_operator.py diff --git a/openmc/deplete/pool.py b/src/openmc/deplete/pool.py similarity index 100% rename from openmc/deplete/pool.py rename to src/openmc/deplete/pool.py diff --git a/openmc/deplete/reaction_rates.py b/src/openmc/deplete/reaction_rates.py similarity index 100% rename from openmc/deplete/reaction_rates.py rename to src/openmc/deplete/reaction_rates.py diff --git a/openmc/deplete/results.py b/src/openmc/deplete/results.py similarity index 100% rename from openmc/deplete/results.py rename to src/openmc/deplete/results.py diff --git a/openmc/deplete/stepresult.py b/src/openmc/deplete/stepresult.py similarity index 100% rename from openmc/deplete/stepresult.py rename to src/openmc/deplete/stepresult.py diff --git a/openmc/deplete/transfer_rates.py b/src/openmc/deplete/transfer_rates.py similarity index 100% rename from openmc/deplete/transfer_rates.py rename to src/openmc/deplete/transfer_rates.py diff --git a/openmc/dummy_comm.py b/src/openmc/dummy_comm.py similarity index 100% rename from openmc/dummy_comm.py rename to src/openmc/dummy_comm.py diff --git a/openmc/element.py b/src/openmc/element.py similarity index 100% rename from openmc/element.py rename to src/openmc/element.py diff --git a/openmc/examples.py b/src/openmc/examples.py similarity index 100% rename from openmc/examples.py rename to src/openmc/examples.py diff --git a/openmc/exceptions.py b/src/openmc/exceptions.py similarity index 100% rename from openmc/exceptions.py rename to src/openmc/exceptions.py diff --git a/openmc/executor.py b/src/openmc/executor.py similarity index 100% rename from openmc/executor.py rename to src/openmc/executor.py diff --git a/openmc/filter.py b/src/openmc/filter.py similarity index 100% rename from openmc/filter.py rename to src/openmc/filter.py diff --git a/openmc/filter_expansion.py b/src/openmc/filter_expansion.py similarity index 100% rename from openmc/filter_expansion.py rename to src/openmc/filter_expansion.py diff --git a/openmc/geometry.py b/src/openmc/geometry.py similarity index 100% rename from openmc/geometry.py rename to src/openmc/geometry.py diff --git a/openmc/lattice.py b/src/openmc/lattice.py similarity index 100% rename from openmc/lattice.py rename to src/openmc/lattice.py diff --git a/openmc/lib/__init__.py b/src/openmc/lib/__init__.py similarity index 100% rename from openmc/lib/__init__.py rename to src/openmc/lib/__init__.py diff --git a/openmc/lib/cell.py b/src/openmc/lib/cell.py similarity index 100% rename from openmc/lib/cell.py rename to src/openmc/lib/cell.py diff --git a/openmc/lib/core.py b/src/openmc/lib/core.py similarity index 100% rename from openmc/lib/core.py rename to src/openmc/lib/core.py diff --git a/openmc/lib/error.py b/src/openmc/lib/error.py similarity index 100% rename from openmc/lib/error.py rename to src/openmc/lib/error.py diff --git a/openmc/lib/filter.py b/src/openmc/lib/filter.py similarity index 100% rename from openmc/lib/filter.py rename to src/openmc/lib/filter.py diff --git a/openmc/lib/material.py b/src/openmc/lib/material.py similarity index 100% rename from openmc/lib/material.py rename to src/openmc/lib/material.py diff --git a/openmc/lib/math.py b/src/openmc/lib/math.py similarity index 100% rename from openmc/lib/math.py rename to src/openmc/lib/math.py diff --git a/openmc/lib/mesh.py b/src/openmc/lib/mesh.py similarity index 100% rename from openmc/lib/mesh.py rename to src/openmc/lib/mesh.py diff --git a/openmc/lib/nuclide.py b/src/openmc/lib/nuclide.py similarity index 100% rename from openmc/lib/nuclide.py rename to src/openmc/lib/nuclide.py diff --git a/openmc/lib/plot.py b/src/openmc/lib/plot.py similarity index 100% rename from openmc/lib/plot.py rename to src/openmc/lib/plot.py diff --git a/openmc/lib/settings.py b/src/openmc/lib/settings.py similarity index 100% rename from openmc/lib/settings.py rename to src/openmc/lib/settings.py diff --git a/openmc/lib/tally.py b/src/openmc/lib/tally.py similarity index 100% rename from openmc/lib/tally.py rename to src/openmc/lib/tally.py diff --git a/openmc/lib/weight_windows.py b/src/openmc/lib/weight_windows.py similarity index 100% rename from openmc/lib/weight_windows.py rename to src/openmc/lib/weight_windows.py diff --git a/openmc/macroscopic.py b/src/openmc/macroscopic.py similarity index 100% rename from openmc/macroscopic.py rename to src/openmc/macroscopic.py diff --git a/openmc/material.py b/src/openmc/material.py similarity index 100% rename from openmc/material.py rename to src/openmc/material.py diff --git a/openmc/mesh.py b/src/openmc/mesh.py similarity index 100% rename from openmc/mesh.py rename to src/openmc/mesh.py diff --git a/openmc/mgxs/__init__.py b/src/openmc/mgxs/__init__.py similarity index 100% rename from openmc/mgxs/__init__.py rename to src/openmc/mgxs/__init__.py diff --git a/openmc/mgxs/groups.py b/src/openmc/mgxs/groups.py similarity index 100% rename from openmc/mgxs/groups.py rename to src/openmc/mgxs/groups.py diff --git a/openmc/mgxs/library.py b/src/openmc/mgxs/library.py similarity index 100% rename from openmc/mgxs/library.py rename to src/openmc/mgxs/library.py diff --git a/openmc/mgxs/mdgxs.py b/src/openmc/mgxs/mdgxs.py similarity index 100% rename from openmc/mgxs/mdgxs.py rename to src/openmc/mgxs/mdgxs.py diff --git a/openmc/mgxs/mgxs.py b/src/openmc/mgxs/mgxs.py similarity index 100% rename from openmc/mgxs/mgxs.py rename to src/openmc/mgxs/mgxs.py diff --git a/openmc/mgxs_library.py b/src/openmc/mgxs_library.py similarity index 100% rename from openmc/mgxs_library.py rename to src/openmc/mgxs_library.py diff --git a/openmc/mixin.py b/src/openmc/mixin.py similarity index 100% rename from openmc/mixin.py rename to src/openmc/mixin.py diff --git a/openmc/model/__init__.py b/src/openmc/model/__init__.py similarity index 100% rename from openmc/model/__init__.py rename to src/openmc/model/__init__.py diff --git a/openmc/model/funcs.py b/src/openmc/model/funcs.py similarity index 100% rename from openmc/model/funcs.py rename to src/openmc/model/funcs.py diff --git a/openmc/model/model.py b/src/openmc/model/model.py similarity index 100% rename from openmc/model/model.py rename to src/openmc/model/model.py diff --git a/openmc/model/surface_composite.py b/src/openmc/model/surface_composite.py similarity index 100% rename from openmc/model/surface_composite.py rename to src/openmc/model/surface_composite.py diff --git a/openmc/model/triso.py b/src/openmc/model/triso.py similarity index 100% rename from openmc/model/triso.py rename to src/openmc/model/triso.py diff --git a/openmc/mpi.py b/src/openmc/mpi.py similarity index 100% rename from openmc/mpi.py rename to src/openmc/mpi.py diff --git a/openmc/nuclide.py b/src/openmc/nuclide.py similarity index 100% rename from openmc/nuclide.py rename to src/openmc/nuclide.py diff --git a/openmc/openmc_exec.py b/src/openmc/openmc_exec.py similarity index 100% rename from openmc/openmc_exec.py rename to src/openmc/openmc_exec.py diff --git a/openmc/openmoc_compatible.py b/src/openmc/openmoc_compatible.py similarity index 100% rename from openmc/openmoc_compatible.py rename to src/openmc/openmoc_compatible.py diff --git a/openmc/particle_restart.py b/src/openmc/particle_restart.py similarity index 100% rename from openmc/particle_restart.py rename to src/openmc/particle_restart.py diff --git a/openmc/plots.py b/src/openmc/plots.py similarity index 100% rename from openmc/plots.py rename to src/openmc/plots.py diff --git a/openmc/plotter.py b/src/openmc/plotter.py similarity index 100% rename from openmc/plotter.py rename to src/openmc/plotter.py diff --git a/openmc/polynomial.py b/src/openmc/polynomial.py similarity index 100% rename from openmc/polynomial.py rename to src/openmc/polynomial.py diff --git a/openmc/region.py b/src/openmc/region.py similarity index 100% rename from openmc/region.py rename to src/openmc/region.py diff --git a/openmc/search.py b/src/openmc/search.py similarity index 100% rename from openmc/search.py rename to src/openmc/search.py diff --git a/openmc/settings.py b/src/openmc/settings.py similarity index 100% rename from openmc/settings.py rename to src/openmc/settings.py diff --git a/openmc/source.py b/src/openmc/source.py similarity index 100% rename from openmc/source.py rename to src/openmc/source.py diff --git a/openmc/statepoint.py b/src/openmc/statepoint.py similarity index 100% rename from openmc/statepoint.py rename to src/openmc/statepoint.py diff --git a/openmc/stats/__init__.py b/src/openmc/stats/__init__.py similarity index 100% rename from openmc/stats/__init__.py rename to src/openmc/stats/__init__.py diff --git a/openmc/stats/multivariate.py b/src/openmc/stats/multivariate.py similarity index 100% rename from openmc/stats/multivariate.py rename to src/openmc/stats/multivariate.py diff --git a/openmc/stats/univariate.py b/src/openmc/stats/univariate.py similarity index 100% rename from openmc/stats/univariate.py rename to src/openmc/stats/univariate.py diff --git a/openmc/summary.py b/src/openmc/summary.py similarity index 100% rename from openmc/summary.py rename to src/openmc/summary.py diff --git a/openmc/surface.py b/src/openmc/surface.py similarity index 100% rename from openmc/surface.py rename to src/openmc/surface.py diff --git a/openmc/tallies.py b/src/openmc/tallies.py similarity index 100% rename from openmc/tallies.py rename to src/openmc/tallies.py diff --git a/openmc/tally_derivative.py b/src/openmc/tally_derivative.py similarity index 100% rename from openmc/tally_derivative.py rename to src/openmc/tally_derivative.py diff --git a/openmc/tracks.py b/src/openmc/tracks.py similarity index 100% rename from openmc/tracks.py rename to src/openmc/tracks.py diff --git a/openmc/trigger.py b/src/openmc/trigger.py similarity index 100% rename from openmc/trigger.py rename to src/openmc/trigger.py diff --git a/openmc/universe.py b/src/openmc/universe.py similarity index 100% rename from openmc/universe.py rename to src/openmc/universe.py diff --git a/openmc/utility_funcs.py b/src/openmc/utility_funcs.py similarity index 100% rename from openmc/utility_funcs.py rename to src/openmc/utility_funcs.py diff --git a/openmc/volume.py b/src/openmc/volume.py similarity index 100% rename from openmc/volume.py rename to src/openmc/volume.py diff --git a/openmc/weight_windows.py b/src/openmc/weight_windows.py similarity index 100% rename from openmc/weight_windows.py rename to src/openmc/weight_windows.py From 303f5963a5737900a53753eb5bccd48331115c64 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 21:09:51 +0600 Subject: [PATCH 045/145] no need to copy lib to openmc --- CMakeLists.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2742111cdf3..34c0753303a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -644,17 +644,6 @@ if(SKBUILD) ) endif() -#=============================================================================== -# Copy libopenmc to Python module directory for development -#=============================================================================== -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - add_custom_command(TARGET libopenmc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - $ - ${CMAKE_CURRENT_SOURCE_DIR}/openmc/lib/$ - COMMENT "Copying libopenmc to Python module directory") -endif() #=============================================================================== # Install executable, scripts, manpage, license #=============================================================================== From 1813d6e5fcd1a4f7242606ad2c401388a3f14884 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 21:41:38 +0600 Subject: [PATCH 046/145] remove BUILD_EXAMPLES --- tools/ci/manylinux.dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 7b5e949a280..783834a577e 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -148,8 +148,7 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 -DCMAKE_INSTALL_PREFIX=/usr/local \ -DHDF5_ENABLE_PARALLEL=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DHDF5_BUILD_HL_LIB=ON \ - -DBUILD_SHARED_LIBS=ON \ - -DBUILD_EXAMPLES=OFF && \ + -DBUILD_SHARED_LIBS=ON && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf hdf5 From 2cbce3b7db3602878f1dfe8dc43a7b2da21aa671 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 22:10:05 +0600 Subject: [PATCH 047/145] python deps stage --- .../workflows/docker-publish-manylinux.yml | 4 +- .github/workflows/pypi.yml | 2 +- tools/ci/manylinux.dockerfile | 130 +++++++++--------- 3 files changed, 69 insertions(+), 67 deletions(-) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index 5fc49d8900c..e6860457e5b 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -54,8 +54,8 @@ jobs: uses: firehed/multistage-docker-build-action@v1 with: repository: ${{ env.image_base_tag }} - stages: base, dependencies, openmc - server-stage: test + stages: base, dependencies, python-dependencies + server-stage: openmc quiet: false parallel: true tag-latest-on-default: ${{ env.tag-latest-on-default }} diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index 0b324d3b7c1..bd9efb69646 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -33,7 +33,7 @@ jobs: env: CIBW_BUILD: "cp*-${{ matrix.arch }}" CIBW_ARCHS_LINUX: "x86_64" - CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc/openmc:latest + CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc/python-dependencies:latest CIBW_ARCHS_MACOS: "native" CIBW_BEFORE_BUILD_MACOS: | brew install llvm cmake xtensor hdf5 python libomp libpng diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 783834a577e..89798082218 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -10,9 +10,9 @@ # 1. Base Stage: Sets up a Manylinux base image and installs necessary dependencies. # 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. # 3. Dependencies Stage: Downloads and builds all external dependencies. -# 4. OpenMC Stage: Copies OpenMC source code, builds it using CMake with specific -# flags and installs it in the container. -# 5. Test Stage: Runs OpenMC unit tests. +# 4. Python Dependencies Stage: Downloads and installs Python dependencies. +# 5. OpenMC Stage: Copies OpenMC source code, build wheel with specific +# flags and installs it in the container. Then, runs tests. # Arguments and environment variables can be customized for different compiler and # dependency versions. @@ -229,26 +229,6 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd ../.. && \ rm -rf dagmc -# Build and install NCrystal -ARG NCrystal_TAG -RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ - cd ncrystal && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DBUILD_SHARED_LIBS=ON \ - -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ - -DNCRYSTAL_MODIFY_RPATH=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ - -DNCRYSTAL_ENABLE_SETUPSH=OFF \ - -DNCRYSTAL_ENABLE_DATA=EMBED \ - -DPython3_EXECUTABLE=$(which python) && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - ncrystal-config --setup && \ - rm -rf ncrystal - # Build and install libMesh ARG LIBMESH_TAG RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ @@ -280,59 +260,41 @@ RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl # Download and extract HDF5 data RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ +ENV OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml # Download and extract ENDF/B-VII.1 distribution RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ +ENV OPENMC_ENDF_DATA=$HOME/endf-b-vii.1 -# Build and install OpenMC stage -FROM dependencies AS openmc +# Python dependencies stage +FROM dependencies AS python-dependencies -ARG COMPILER ARG Python_ABI -ARG OPENMC_USE_OPENMP -ARG OPENMC_BUILD_TESTS -ARG OPENMC_ENABLE_PROFILE -ARG OPENMC_ENABLE_COVERAGE -ARG OPENMC_USE_DAGMC -ARG OPENMC_USE_LIBMESH -ARG OPENMC_USE_MCPL -ARG OPENMC_USE_NCRYSTAL -ARG OPENMC_USE_UWUW # Use Python from manylinux as the default Python ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python -# Copy OpenMC source to docker image -COPY . $HOME/openmc - -# Configure SKBUILD CMake arguments -RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] && echo 'ON' || echo 'OFF'); \ - -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ - -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ - -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ - -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ - -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ - -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ - -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ - -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ - -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ - cd $HOME/openmc && \ - python -m build . -w - -# Repair wheel -RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ - -# Install OpenMC wheel -RUN python -m pip install \ - "$(echo $HOME/openmc/dist/*manylinux**.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" - - -# Test OpenMC stage -FROM openmc AS test - -ARG COMPILER +# Build and install NCrystal +ARG NCrystal_TAG +RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ + cd ncrystal && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBUILD_SHARED_LIBS=ON \ + -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ + -DNCRYSTAL_MODIFY_RPATH=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ + -DNCRYSTAL_ENABLE_SETUPSH=OFF \ + -DNCRYSTAL_ENABLE_DATA=EMBED \ + -DPython3_EXECUTABLE=$(which python) && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + ncrystal-config --setup && \ + rm -rf ncrystal # Build and install pybind ARG PYBIND_TAG @@ -395,6 +357,46 @@ RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git cd .. && \ rm -rf vectfit + +# OpenMC stage +FROM python-dependencies AS openmc + +ARG COMPILER +ARG Python_ABI +ARG OPENMC_USE_OPENMP +ARG OPENMC_BUILD_TESTS +ARG OPENMC_ENABLE_PROFILE +ARG OPENMC_ENABLE_COVERAGE +ARG OPENMC_USE_DAGMC +ARG OPENMC_USE_LIBMESH +ARG OPENMC_USE_MCPL +ARG OPENMC_USE_NCRYSTAL +ARG OPENMC_USE_UWUW + +# Copy OpenMC source to docker image +COPY . $HOME/openmc + +# Configure SKBUILD CMake arguments +RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] && echo 'ON' || echo 'OFF'); \ + -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ + -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ + -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ + -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ + -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ + -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ + -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ + -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ + -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ + cd $HOME/openmc && \ + python -m build . -w + +# Repair wheel +RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ + +# Install OpenMC wheel +RUN python -m pip install \ + "$(echo $HOME/openmc/dist/*manylinux**.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" + # Test OpenMC RUN cd $HOME/openmc && \ nctool --test && \ From d58867078be9712ccec94833ba5b5a4674b9521b Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 22:47:38 +0600 Subject: [PATCH 048/145] pip install numpy --- tools/ci/manylinux.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 89798082218..97e91194236 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -333,6 +333,7 @@ ARG XTENSOR_PYTHON_TAG RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ cd xtensor-python && \ mkdir build && cd build && \ + python -m pip install numpy && \ cmake .. \ -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ make -j$(nproc) && make install && \ From 4b08da7b5eec0557d0f5fd347730ddf990fd92d0 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 3 Oct 2024 23:19:07 +0600 Subject: [PATCH 049/145] fail-fast: false --- .github/workflows/docker-publish-manylinux.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index e6860457e5b..073b9db5074 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -13,6 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: manylinux_image: [ manylinux_2_28_x86_64 From db2bb3f0d1062b89a79759dd2479a9a148aa99fa Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 4 Oct 2024 00:14:14 +0600 Subject: [PATCH 050/145] sdist.include = ["src/openmc/**"] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 847b97bded6..0f5cfb9d659 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,4 +65,4 @@ build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" wheel.packages = ["src/openmc"] -wheel.exclude = ["CMakeLists.txt"] +sdist.include = ["src/openmc/**"] From 63e1b26d5b90a9b9c1abc1af16ae72fa2fef1d8c Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 4 Oct 2024 19:18:54 +0600 Subject: [PATCH 051/145] set DATAROOTDIR --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34c0753303a..ce9f00f915f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -339,6 +339,8 @@ if(SKBUILD) set(CMAKE_INSTALL_BINDIR ${SKBUILD_SCRIPTS_DIR}) # Unfortunately, OpenMC has lib directory in the openmc/lib subdirectory set(CMAKE_INSTALL_LIBDIR lib) + set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_HEADERS_DIR}) + set(CMAKE_INSTALL_DATAROOTDIR ${SKBUILD_DATA_DIR}) set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${CMAKE_INSTALL_LIBDIR}) # Auditwheel and Delocate need this when repairing the wheel @@ -651,7 +653,12 @@ endif() configure_file(cmake/OpenMCConfig.cmake.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" @ONLY) configure_file(cmake/OpenMCConfigVersion.cmake.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" @ONLY) -set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/OpenMC) +if(SKBUILD) + set(INSTALL_CONFIGDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/OpenMC) +else() + set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/OpenMC) +endif() + install(TARGETS openmc libopenmc EXPORT openmc-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} From cbca8378f8730f32aee5f1e519324a44d7fabf75 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 4 Oct 2024 20:02:01 +0600 Subject: [PATCH 052/145] add vendor packages --- tools/ci/manylinux.dockerfile | 102 ++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 36 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 97e91194236..f6f5ec801d7 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -44,6 +44,11 @@ ARG OPENMC_USE_NCRYSTAL="ON" ARG OPENMC_USE_UWUW="OFF" # Configure dependencies tags +ARG GSL_LITE_TAG="v0.41.0" +ARG XTL_TAG="0.7.7" +ARG XTENSOR_TAG="0.25.0" +ARG XTENSOR_BLAS_TAG="0.21.0" +ARG CATCH2_TAG="v3.7.1" ARG NJOY2016_TAG="2016.76" ARG HDF5_TAG="hdf5_1.14.4.3" ARG NETCDF_TAG="v4.9.2" @@ -53,10 +58,7 @@ ARG DD_TAG="v1.1.0" ARG DAGMC_TAG="v3.2.3" ARG NCrystal_TAG="v3.9.7" ARG PYBIND_TAG="v2.13.6" -ARG XTL_TAG="0.7.7" -ARG XTENSOR_TAG="0.25.0" ARG XTENSOR_PYTHON_TAG="0.27.0" -ARG XTENSOR_BLAS_TAG="0.21.0" ARG VECTFIT_TAG="master" ARG LIBMESH_TAG="v1.7.2" ARG MCPL_TAG="v1.6.2" @@ -88,7 +90,9 @@ RUN yum install -y epel-release && \ curl-devel \ eigen3-devel \ lapack-devel \ - libpng-devel && \ + libpng-devel \ + pugixml-devel \ + fmt-devel && \ yum clean all # Set up environment variables for shared libraries @@ -127,6 +131,60 @@ FROM compiler-${COMPILER} AS dependencies ARG COMPILER +# Build and install gsl-lite +ARG GSL_LITE_TAG +RUN git clone --depth 1 -b ${GSL_LITE_TAG} https://github.com/gsl-lite/gsl-lite.git gsl-lite && \ + cd gsl-lite && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf gsl-lite + +# Build and install xtl +ARG XTL_TAG +RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ + cd xtl && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtl + +# Build and install xtensor +ARG XTENSOR_TAG +RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ + cd xtensor && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor + +# Build and install xtensor-blas +ARG XTENSOR_BLAS_TAG +RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ + cd xtensor-blas && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-blas + +# Build and install Catch2 +ARG CATCH2_TAG +RUN git clone --depth 1 -b ${CATCH2_TAG} https://github.com/catchorg/Catch2.git catch2 && \ + cd catch2 && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf catch2 + # Build and install NJOY2016 ARG NJOY2016_TAG RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git njoy && \ @@ -301,33 +359,14 @@ ARG PYBIND_TAG RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ cd pybind11 && \ mkdir build && cd build && \ - cmake .. && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ make -j$(nproc) && make install && \ cd .. && \ python -m pip install . && \ cd .. && \ rm -rf pybind11 -# Build and install xtl -ARG XTL_TAG -RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ - cd xtl && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtl - -# Build and install xtensor -ARG XTENSOR_TAG -RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ - cd xtensor && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor - # Build and install xtensor-python ARG XTENSOR_PYTHON_TAG RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ @@ -335,21 +374,12 @@ RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stac mkdir build && cd build && \ python -m pip install numpy && \ cmake .. \ - -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf xtensor-python -# Build and install xtensor-blas -ARG XTENSOR_BLAS_TAG -RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ - cd xtensor-blas && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor-blas - # Build and install vectfit ARG VECTFIT_TAG RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ From 995c840bafc42907df5b722cc190d28f902b527a Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 5 Oct 2024 00:01:22 +0600 Subject: [PATCH 053/145] add more dirs --- CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce9f00f915f..dae56dfe3da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -341,10 +341,17 @@ if(SKBUILD) set(CMAKE_INSTALL_LIBDIR lib) set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_HEADERS_DIR}) set(CMAKE_INSTALL_DATAROOTDIR ${SKBUILD_DATA_DIR}) + set(CMAKE_INSTALL_DATADIR ${SKBUILD_DATA_DIR}) + set(CMAKE_INSTALL_DOCDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DOCDIR}) + set(CMAKE_INSTALL_INFODIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_INFODIR}) + set(CMAKE_INSTALL_MANDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_MANDIR}) + set(CMAKE_INSTALL_LOCALEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALEDIR}) + set(CMAKE_INSTALL_LOCALSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALSTATEDIR}) + set(CMAKE_INSTALL_RUNSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_RUNSTATEDIR}) set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${CMAKE_INSTALL_LIBDIR}) # Auditwheel and Delocate need this when repairing the wheel - # Since OpenMC libs are installed in the openmc/core subdirectory + # Since OpenMC libs are installed in the openmc subdirectory # Auditwheel and Delocate need this to find the OpenMC libs for openmc.data # It's a bit of a hack, but it works set(SKBUILD_REPAIR_WHEEL_PATCH openmc/${CMAKE_INSTALL_LIBDIR}) @@ -352,7 +359,7 @@ if(SKBUILD) set(CMAKE_MACOSX_RPATH ON) set(OPENMC_LIBRARY_RPATH "@loader_path") set(OPENMC_PYTHON_MODULE_RPATH "@loader_path/${CMAKE_INSTALL_LIBDIR}") - set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../${SKBUILD_REPAIR_WHEEL_PATCH};@loader_path/../../${SKBUILD_REPAIR_WHEEL_PATCH}") + set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../../${SKBUILD_REPAIR_WHEEL_PATCH}") elseif(UNIX) set(OPENMC_LIBRARY_RPATH "$ORIGIN") set(OPENMC_PYTHON_MODULE_RPATH "$ORIGIN/${CMAKE_INSTALL_LIBDIR}") From d68bac590e0eb1ca95011ca51fee933d55edf0d6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 5 Oct 2024 01:45:41 +0600 Subject: [PATCH 054/145] CMAKE_INSTALL_DATADIR --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dae56dfe3da..03cbb89bf50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -340,8 +340,7 @@ if(SKBUILD) # Unfortunately, OpenMC has lib directory in the openmc/lib subdirectory set(CMAKE_INSTALL_LIBDIR lib) set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_HEADERS_DIR}) - set(CMAKE_INSTALL_DATAROOTDIR ${SKBUILD_DATA_DIR}) - set(CMAKE_INSTALL_DATADIR ${SKBUILD_DATA_DIR}) + set(CMAKE_INSTALL_DATADIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DATADIR}) set(CMAKE_INSTALL_DOCDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DOCDIR}) set(CMAKE_INSTALL_INFODIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_INFODIR}) set(CMAKE_INSTALL_MANDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_MANDIR}) From 07126a0871b54518d241fb2a54226aa5c893b820 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 5 Oct 2024 16:21:04 +0600 Subject: [PATCH 055/145] no need OpenMCTargets for skbuild --- CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03cbb89bf50..ba18af20892 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -671,10 +671,14 @@ install(TARGETS openmc libopenmc LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -install(EXPORT openmc-targets - FILE OpenMCTargets.cmake - NAMESPACE OpenMC:: - DESTINATION ${INSTALL_CONFIGDIR}) + +if(NOT SKBUILD) + install(EXPORT openmc-targets + FILE OpenMCTargets.cmake + NAMESPACE OpenMC:: + DESTINATION ${INSTALL_CONFIGDIR} + ) +endif() # Collect scripts file(GLOB SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/*") From bf0f40038063923fa9ae7fa85ec41eb5bd867c43 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 5 Oct 2024 16:22:57 +0600 Subject: [PATCH 056/145] install rpath if var is defined --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba18af20892..8e395ad363c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -531,7 +531,7 @@ target_include_directories(libopenmc # Set compile flags target_compile_options(libopenmc PRIVATE ${cxxflags}) -if(SKBUILD) +if(OPENMC_LIBRARY_RPATH) set_target_properties( libopenmc PROPERTIES @@ -644,7 +644,7 @@ target_compile_features(openmc PUBLIC cxx_std_17) target_compile_features(libopenmc PUBLIC cxx_std_17) set_target_properties(openmc libopenmc PROPERTIES CXX_EXTENSIONS OFF) -if(SKBUILD) +if(OPENMC_BINARY_RPATH) set_target_properties( openmc PROPERTIES From 12acf73ab5d2a4117ce7861ec7fab13a49ec5f9d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 5 Oct 2024 22:02:03 +0600 Subject: [PATCH 057/145] eval $(ncrystal-config --setup) --- tools/ci/manylinux.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index f6f5ec801d7..ea60b38175c 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -351,7 +351,6 @@ RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.g -DPython3_EXECUTABLE=$(which python) && \ make -j$(nproc) && make install && \ cd ../.. && \ - ncrystal-config --setup && \ rm -rf ncrystal # Build and install pybind @@ -430,5 +429,6 @@ RUN python -m pip install \ # Test OpenMC RUN cd $HOME/openmc && \ + eval $(ncrystal-config --setup) && \ nctool --test && \ pytest --cov=openmc -v $([ ${COMPILER} == 'openmpi' ] && echo '--mpi') --event tests From bf334ce9e2c2c6ee8a8e9093767396babee275d0 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 8 Oct 2024 23:44:12 +0600 Subject: [PATCH 058/145] sdist include *.h5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0f5cfb9d659..5d1837bec4c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,4 +65,4 @@ build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" wheel.packages = ["src/openmc"] -sdist.include = ["src/openmc/**"] +sdist.include = ["*.h5"] From 4e6939799c16c7712293bcdfc9cc8c612a9e3f2f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 17 Oct 2024 20:21:57 +0600 Subject: [PATCH 059/145] setup openmc lib for skbuild --- cmake/OpenMCConfig.cmake.in | 67 +++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index 44a5e0d5a3f..4aa5f92d9ba 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -23,7 +23,70 @@ endif() find_package(PNG) -if(NOT TARGET OpenMC::libopenmc) +if(@SKBUILD@) + # Find the Python interpreter and ensure it's available. + find_package(Python COMPONENTS Interpreter REQUIRED) + + # Function to run Python commands and validate their execution. + function(run_python_command output_var command) + execute_process( + COMMAND ${Python_EXECUTABLE} -c "${command}" + OUTPUT_VARIABLE ${output_var} + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE result + ) + # Check if the command was successful + if(NOT result EQUAL 0) + message(FATAL_ERROR "Failed to run Python command: ${command}") + else() + # Add the output variable to the parent scope + set(${output_var} "${${output_var}}" PARENT_SCOPE) + endif() + endfunction() + + # Extract MOAB include paths, library paths, and extra libraries + run_python_command(OpenMC_INCLUDE_DIRS "import openmc; print(openmc.include_path)") + run_python_command(OpenMC_LIBRARY_DIRS "import openmc; print(openmc.lib_path)") + run_python_command(OpenMC_EXTRA_LIBRARIES "import openmc; print(' '.join(openmc.extra_lib))") + + # Check if the wheel was repaired using auditwheel or delocate + if(OpenMC_EXTRA_LIBRARIES) + message(FATAL_ERROR + "This build of OpenMC is not supported. " + "It appears that the wheel was repaired using tools like auditwheel or delocate, " + "that modifies the shared libraries, which may cause problems.\n" + "OpenMC_EXTRA_LIBRARIES is not empty: ${OpenMC_EXTRA_LIBRARIES}.\n" + "To resolve this, please build OpenMC from scratch. " + "For more information, visit: https://docs.openmc.org/" + ) + endif() + + # Find the core library + find_library(OpenMC_LIBRARY + NAMES openmc + HINTS ${OpenMC_LIBRARY_DIRS} + NO_DEFAULT_PATH + ) + + # Add the core library as an imported target + add_library(OpenMC::libopenmc UNKNOWN IMPORTED) + set_target_properties(OpenMC::libopenmc PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenMC_INCLUDE_DIRS}" + IMPORTED_LOCATION "${OpenMC_LIBRARY}" + ) + + # Add the core library to the list of libraries + set(OpenMC_LIBRARIES ${OpenMC_LIBRARY}) + + # Include standard argument handling for finding packages + include(FindPackageHandleStandardArgs) + + # Validates that the necessary variables are set + find_package_handle_standard_args(MOAB + REQUIRED_VARS OpenMC_LIBRARIES OpenMC_INCLUDE_DIRS + VERSION_VAR @OPENMC_VERSION@ + ) +elseif(NOT TARGET OpenMC::libopenmc) include("${OpenMC_CMAKE_DIR}/OpenMCTargets.cmake") endif() @@ -41,4 +104,4 @@ endif() if(@OPENMC_USE_UWUW@) find_package(UWUW REQUIRED) -endif() +endif() \ No newline at end of file From 4a69b09ba71796cfdfe672b9eada5ac9863ed6fd Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 17 Oct 2024 20:23:18 +0600 Subject: [PATCH 060/145] prepare for merge --- {src/openmc => openmc}/__init__.py | 0 {src/openmc => openmc}/_xml.py | 0 {src/openmc => openmc}/arithmetic.py | 0 {src/openmc => openmc}/bounding_box.py | 0 {src/openmc => openmc}/cell.py | 0 {src/openmc => openmc}/checkvalue.py | 0 {src/openmc => openmc}/cmfd.py | 0 {src/openmc => openmc}/config.py | 0 {src/openmc => openmc}/data/BREMX.DAT | 0 {src/openmc => openmc}/data/__init__.py | 0 {src/openmc => openmc}/data/ace.py | 0 {src/openmc => openmc}/data/angle_distribution.py | 0 {src/openmc => openmc}/data/angle_energy.py | 0 {src/openmc => openmc}/data/correlated.py | 0 {src/openmc => openmc}/data/data.py | 0 {src/openmc => openmc}/data/decay.py | 0 {src/openmc => openmc}/data/effective_dose/__init__.py | 0 {src/openmc => openmc}/data/effective_dose/dose.py | 0 {src/openmc => openmc}/data/effective_dose/electrons.txt | 0 {src/openmc => openmc}/data/effective_dose/helium_ions.txt | 0 {src/openmc => openmc}/data/effective_dose/negative_muons.txt | 0 {src/openmc => openmc}/data/effective_dose/negative_pions.txt | 0 {src/openmc => openmc}/data/effective_dose/neutrons.txt | 0 {src/openmc => openmc}/data/effective_dose/photons.txt | 0 {src/openmc => openmc}/data/effective_dose/photons_kerma.txt | 0 {src/openmc => openmc}/data/effective_dose/positive_muons.txt | 0 {src/openmc => openmc}/data/effective_dose/positive_pions.txt | 0 {src/openmc => openmc}/data/effective_dose/positrons.txt | 0 {src/openmc => openmc}/data/effective_dose/protons.txt | 0 {src/openmc => openmc}/data/endf.py | 0 {src/openmc => openmc}/data/energy_distribution.py | 0 {src/openmc => openmc}/data/fission_energy.py | 0 {src/openmc => openmc}/data/function.py | 0 {src/openmc => openmc}/data/grid.py | 0 {src/openmc => openmc}/data/half_life.json | 0 {src/openmc => openmc}/data/kalbach_mann.py | 0 {src/openmc => openmc}/data/laboratory.py | 0 {src/openmc => openmc}/data/library.py | 0 {src/openmc => openmc}/data/mass_1.mas20.txt | 0 {src/openmc => openmc}/data/multipole.py | 0 {src/openmc => openmc}/data/nbody.py | 0 {src/openmc => openmc}/data/neutron.py | 0 {src/openmc => openmc}/data/njoy.py | 0 {src/openmc => openmc}/data/photon.py | 0 {src/openmc => openmc}/data/product.py | 0 {src/openmc => openmc}/data/reaction.py | 0 {src/openmc => openmc}/data/resonance.py | 0 {src/openmc => openmc}/data/resonance_covariance.py | 0 {src/openmc => openmc}/data/thermal.py | 0 {src/openmc => openmc}/data/thermal_angle_energy.py | 0 {src/openmc => openmc}/data/uncorrelated.py | 0 {src/openmc => openmc}/data/urr.py | 0 {src/openmc => openmc}/deplete/__init__.py | 0 {src/openmc => openmc}/deplete/_matrix_funcs.py | 0 {src/openmc => openmc}/deplete/abc.py | 0 {src/openmc => openmc}/deplete/atom_number.py | 0 {src/openmc => openmc}/deplete/chain.py | 0 {src/openmc => openmc}/deplete/coupled_operator.py | 0 {src/openmc => openmc}/deplete/cram.py | 0 {src/openmc => openmc}/deplete/helpers.py | 0 {src/openmc => openmc}/deplete/independent_operator.py | 0 {src/openmc => openmc}/deplete/integrators.py | 0 {src/openmc => openmc}/deplete/microxs.py | 0 {src/openmc => openmc}/deplete/nuclide.py | 0 {src/openmc => openmc}/deplete/openmc_operator.py | 0 {src/openmc => openmc}/deplete/pool.py | 0 {src/openmc => openmc}/deplete/reaction_rates.py | 0 {src/openmc => openmc}/deplete/results.py | 0 {src/openmc => openmc}/deplete/stepresult.py | 0 {src/openmc => openmc}/deplete/transfer_rates.py | 0 {src/openmc => openmc}/dummy_comm.py | 0 {src/openmc => openmc}/element.py | 0 {src/openmc => openmc}/examples.py | 0 {src/openmc => openmc}/exceptions.py | 0 {src/openmc => openmc}/executor.py | 0 {src/openmc => openmc}/filter.py | 0 {src/openmc => openmc}/filter_expansion.py | 0 {src/openmc => openmc}/geometry.py | 0 {src/openmc => openmc}/lattice.py | 0 {src/openmc => openmc}/lib/__init__.py | 0 {src/openmc => openmc}/lib/cell.py | 0 {src/openmc => openmc}/lib/core.py | 0 {src/openmc => openmc}/lib/error.py | 0 {src/openmc => openmc}/lib/filter.py | 0 {src/openmc => openmc}/lib/material.py | 0 {src/openmc => openmc}/lib/math.py | 0 {src/openmc => openmc}/lib/mesh.py | 0 {src/openmc => openmc}/lib/nuclide.py | 0 {src/openmc => openmc}/lib/plot.py | 0 {src/openmc => openmc}/lib/settings.py | 0 {src/openmc => openmc}/lib/tally.py | 0 {src/openmc => openmc}/lib/weight_windows.py | 0 {src/openmc => openmc}/macroscopic.py | 0 {src/openmc => openmc}/material.py | 0 {src/openmc => openmc}/mesh.py | 0 {src/openmc => openmc}/mgxs/__init__.py | 0 {src/openmc => openmc}/mgxs/groups.py | 0 {src/openmc => openmc}/mgxs/library.py | 0 {src/openmc => openmc}/mgxs/mdgxs.py | 0 {src/openmc => openmc}/mgxs/mgxs.py | 0 {src/openmc => openmc}/mgxs_library.py | 0 {src/openmc => openmc}/mixin.py | 0 {src/openmc => openmc}/model/__init__.py | 0 {src/openmc => openmc}/model/funcs.py | 0 {src/openmc => openmc}/model/model.py | 0 {src/openmc => openmc}/model/surface_composite.py | 0 {src/openmc => openmc}/model/triso.py | 0 {src/openmc => openmc}/mpi.py | 0 {src/openmc => openmc}/nuclide.py | 0 {src/openmc => openmc}/openmc_exec.py | 0 {src/openmc => openmc}/openmoc_compatible.py | 0 {src/openmc => openmc}/particle_restart.py | 0 {src/openmc => openmc}/plots.py | 0 {src/openmc => openmc}/plotter.py | 0 {src/openmc => openmc}/polynomial.py | 0 {src/openmc => openmc}/region.py | 0 {src/openmc => openmc}/search.py | 0 {src/openmc => openmc}/settings.py | 0 {src/openmc => openmc}/source.py | 0 {src/openmc => openmc}/statepoint.py | 0 {src/openmc => openmc}/stats/__init__.py | 0 {src/openmc => openmc}/stats/multivariate.py | 0 {src/openmc => openmc}/stats/univariate.py | 0 {src/openmc => openmc}/summary.py | 0 {src/openmc => openmc}/surface.py | 0 {src/openmc => openmc}/tallies.py | 0 {src/openmc => openmc}/tally_derivative.py | 0 {src/openmc => openmc}/tracks.py | 0 {src/openmc => openmc}/trigger.py | 0 {src/openmc => openmc}/universe.py | 0 {src/openmc => openmc}/utility_funcs.py | 0 {src/openmc => openmc}/volume.py | 0 {src/openmc => openmc}/weight_windows.py | 0 133 files changed, 0 insertions(+), 0 deletions(-) rename {src/openmc => openmc}/__init__.py (100%) rename {src/openmc => openmc}/_xml.py (100%) rename {src/openmc => openmc}/arithmetic.py (100%) rename {src/openmc => openmc}/bounding_box.py (100%) rename {src/openmc => openmc}/cell.py (100%) rename {src/openmc => openmc}/checkvalue.py (100%) rename {src/openmc => openmc}/cmfd.py (100%) rename {src/openmc => openmc}/config.py (100%) rename {src/openmc => openmc}/data/BREMX.DAT (100%) rename {src/openmc => openmc}/data/__init__.py (100%) rename {src/openmc => openmc}/data/ace.py (100%) rename {src/openmc => openmc}/data/angle_distribution.py (100%) rename {src/openmc => openmc}/data/angle_energy.py (100%) rename {src/openmc => openmc}/data/correlated.py (100%) rename {src/openmc => openmc}/data/data.py (100%) rename {src/openmc => openmc}/data/decay.py (100%) rename {src/openmc => openmc}/data/effective_dose/__init__.py (100%) rename {src/openmc => openmc}/data/effective_dose/dose.py (100%) rename {src/openmc => openmc}/data/effective_dose/electrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/helium_ions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/negative_muons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/negative_pions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/neutrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/photons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/photons_kerma.txt (100%) rename {src/openmc => openmc}/data/effective_dose/positive_muons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/positive_pions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/positrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/protons.txt (100%) rename {src/openmc => openmc}/data/endf.py (100%) rename {src/openmc => openmc}/data/energy_distribution.py (100%) rename {src/openmc => openmc}/data/fission_energy.py (100%) rename {src/openmc => openmc}/data/function.py (100%) rename {src/openmc => openmc}/data/grid.py (100%) rename {src/openmc => openmc}/data/half_life.json (100%) rename {src/openmc => openmc}/data/kalbach_mann.py (100%) rename {src/openmc => openmc}/data/laboratory.py (100%) rename {src/openmc => openmc}/data/library.py (100%) rename {src/openmc => openmc}/data/mass_1.mas20.txt (100%) rename {src/openmc => openmc}/data/multipole.py (100%) rename {src/openmc => openmc}/data/nbody.py (100%) rename {src/openmc => openmc}/data/neutron.py (100%) rename {src/openmc => openmc}/data/njoy.py (100%) rename {src/openmc => openmc}/data/photon.py (100%) rename {src/openmc => openmc}/data/product.py (100%) rename {src/openmc => openmc}/data/reaction.py (100%) rename {src/openmc => openmc}/data/resonance.py (100%) rename {src/openmc => openmc}/data/resonance_covariance.py (100%) rename {src/openmc => openmc}/data/thermal.py (100%) rename {src/openmc => openmc}/data/thermal_angle_energy.py (100%) rename {src/openmc => openmc}/data/uncorrelated.py (100%) rename {src/openmc => openmc}/data/urr.py (100%) rename {src/openmc => openmc}/deplete/__init__.py (100%) rename {src/openmc => openmc}/deplete/_matrix_funcs.py (100%) rename {src/openmc => openmc}/deplete/abc.py (100%) rename {src/openmc => openmc}/deplete/atom_number.py (100%) rename {src/openmc => openmc}/deplete/chain.py (100%) rename {src/openmc => openmc}/deplete/coupled_operator.py (100%) rename {src/openmc => openmc}/deplete/cram.py (100%) rename {src/openmc => openmc}/deplete/helpers.py (100%) rename {src/openmc => openmc}/deplete/independent_operator.py (100%) rename {src/openmc => openmc}/deplete/integrators.py (100%) rename {src/openmc => openmc}/deplete/microxs.py (100%) rename {src/openmc => openmc}/deplete/nuclide.py (100%) rename {src/openmc => openmc}/deplete/openmc_operator.py (100%) rename {src/openmc => openmc}/deplete/pool.py (100%) rename {src/openmc => openmc}/deplete/reaction_rates.py (100%) rename {src/openmc => openmc}/deplete/results.py (100%) rename {src/openmc => openmc}/deplete/stepresult.py (100%) rename {src/openmc => openmc}/deplete/transfer_rates.py (100%) rename {src/openmc => openmc}/dummy_comm.py (100%) rename {src/openmc => openmc}/element.py (100%) rename {src/openmc => openmc}/examples.py (100%) rename {src/openmc => openmc}/exceptions.py (100%) rename {src/openmc => openmc}/executor.py (100%) rename {src/openmc => openmc}/filter.py (100%) rename {src/openmc => openmc}/filter_expansion.py (100%) rename {src/openmc => openmc}/geometry.py (100%) rename {src/openmc => openmc}/lattice.py (100%) rename {src/openmc => openmc}/lib/__init__.py (100%) rename {src/openmc => openmc}/lib/cell.py (100%) rename {src/openmc => openmc}/lib/core.py (100%) rename {src/openmc => openmc}/lib/error.py (100%) rename {src/openmc => openmc}/lib/filter.py (100%) rename {src/openmc => openmc}/lib/material.py (100%) rename {src/openmc => openmc}/lib/math.py (100%) rename {src/openmc => openmc}/lib/mesh.py (100%) rename {src/openmc => openmc}/lib/nuclide.py (100%) rename {src/openmc => openmc}/lib/plot.py (100%) rename {src/openmc => openmc}/lib/settings.py (100%) rename {src/openmc => openmc}/lib/tally.py (100%) rename {src/openmc => openmc}/lib/weight_windows.py (100%) rename {src/openmc => openmc}/macroscopic.py (100%) rename {src/openmc => openmc}/material.py (100%) rename {src/openmc => openmc}/mesh.py (100%) rename {src/openmc => openmc}/mgxs/__init__.py (100%) rename {src/openmc => openmc}/mgxs/groups.py (100%) rename {src/openmc => openmc}/mgxs/library.py (100%) rename {src/openmc => openmc}/mgxs/mdgxs.py (100%) rename {src/openmc => openmc}/mgxs/mgxs.py (100%) rename {src/openmc => openmc}/mgxs_library.py (100%) rename {src/openmc => openmc}/mixin.py (100%) rename {src/openmc => openmc}/model/__init__.py (100%) rename {src/openmc => openmc}/model/funcs.py (100%) rename {src/openmc => openmc}/model/model.py (100%) rename {src/openmc => openmc}/model/surface_composite.py (100%) rename {src/openmc => openmc}/model/triso.py (100%) rename {src/openmc => openmc}/mpi.py (100%) rename {src/openmc => openmc}/nuclide.py (100%) rename {src/openmc => openmc}/openmc_exec.py (100%) rename {src/openmc => openmc}/openmoc_compatible.py (100%) rename {src/openmc => openmc}/particle_restart.py (100%) rename {src/openmc => openmc}/plots.py (100%) rename {src/openmc => openmc}/plotter.py (100%) rename {src/openmc => openmc}/polynomial.py (100%) rename {src/openmc => openmc}/region.py (100%) rename {src/openmc => openmc}/search.py (100%) rename {src/openmc => openmc}/settings.py (100%) rename {src/openmc => openmc}/source.py (100%) rename {src/openmc => openmc}/statepoint.py (100%) rename {src/openmc => openmc}/stats/__init__.py (100%) rename {src/openmc => openmc}/stats/multivariate.py (100%) rename {src/openmc => openmc}/stats/univariate.py (100%) rename {src/openmc => openmc}/summary.py (100%) rename {src/openmc => openmc}/surface.py (100%) rename {src/openmc => openmc}/tallies.py (100%) rename {src/openmc => openmc}/tally_derivative.py (100%) rename {src/openmc => openmc}/tracks.py (100%) rename {src/openmc => openmc}/trigger.py (100%) rename {src/openmc => openmc}/universe.py (100%) rename {src/openmc => openmc}/utility_funcs.py (100%) rename {src/openmc => openmc}/volume.py (100%) rename {src/openmc => openmc}/weight_windows.py (100%) diff --git a/src/openmc/__init__.py b/openmc/__init__.py similarity index 100% rename from src/openmc/__init__.py rename to openmc/__init__.py diff --git a/src/openmc/_xml.py b/openmc/_xml.py similarity index 100% rename from src/openmc/_xml.py rename to openmc/_xml.py diff --git a/src/openmc/arithmetic.py b/openmc/arithmetic.py similarity index 100% rename from src/openmc/arithmetic.py rename to openmc/arithmetic.py diff --git a/src/openmc/bounding_box.py b/openmc/bounding_box.py similarity index 100% rename from src/openmc/bounding_box.py rename to openmc/bounding_box.py diff --git a/src/openmc/cell.py b/openmc/cell.py similarity index 100% rename from src/openmc/cell.py rename to openmc/cell.py diff --git a/src/openmc/checkvalue.py b/openmc/checkvalue.py similarity index 100% rename from src/openmc/checkvalue.py rename to openmc/checkvalue.py diff --git a/src/openmc/cmfd.py b/openmc/cmfd.py similarity index 100% rename from src/openmc/cmfd.py rename to openmc/cmfd.py diff --git a/src/openmc/config.py b/openmc/config.py similarity index 100% rename from src/openmc/config.py rename to openmc/config.py diff --git a/src/openmc/data/BREMX.DAT b/openmc/data/BREMX.DAT similarity index 100% rename from src/openmc/data/BREMX.DAT rename to openmc/data/BREMX.DAT diff --git a/src/openmc/data/__init__.py b/openmc/data/__init__.py similarity index 100% rename from src/openmc/data/__init__.py rename to openmc/data/__init__.py diff --git a/src/openmc/data/ace.py b/openmc/data/ace.py similarity index 100% rename from src/openmc/data/ace.py rename to openmc/data/ace.py diff --git a/src/openmc/data/angle_distribution.py b/openmc/data/angle_distribution.py similarity index 100% rename from src/openmc/data/angle_distribution.py rename to openmc/data/angle_distribution.py diff --git a/src/openmc/data/angle_energy.py b/openmc/data/angle_energy.py similarity index 100% rename from src/openmc/data/angle_energy.py rename to openmc/data/angle_energy.py diff --git a/src/openmc/data/correlated.py b/openmc/data/correlated.py similarity index 100% rename from src/openmc/data/correlated.py rename to openmc/data/correlated.py diff --git a/src/openmc/data/data.py b/openmc/data/data.py similarity index 100% rename from src/openmc/data/data.py rename to openmc/data/data.py diff --git a/src/openmc/data/decay.py b/openmc/data/decay.py similarity index 100% rename from src/openmc/data/decay.py rename to openmc/data/decay.py diff --git a/src/openmc/data/effective_dose/__init__.py b/openmc/data/effective_dose/__init__.py similarity index 100% rename from src/openmc/data/effective_dose/__init__.py rename to openmc/data/effective_dose/__init__.py diff --git a/src/openmc/data/effective_dose/dose.py b/openmc/data/effective_dose/dose.py similarity index 100% rename from src/openmc/data/effective_dose/dose.py rename to openmc/data/effective_dose/dose.py diff --git a/src/openmc/data/effective_dose/electrons.txt b/openmc/data/effective_dose/electrons.txt similarity index 100% rename from src/openmc/data/effective_dose/electrons.txt rename to openmc/data/effective_dose/electrons.txt diff --git a/src/openmc/data/effective_dose/helium_ions.txt b/openmc/data/effective_dose/helium_ions.txt similarity index 100% rename from src/openmc/data/effective_dose/helium_ions.txt rename to openmc/data/effective_dose/helium_ions.txt diff --git a/src/openmc/data/effective_dose/negative_muons.txt b/openmc/data/effective_dose/negative_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/negative_muons.txt rename to openmc/data/effective_dose/negative_muons.txt diff --git a/src/openmc/data/effective_dose/negative_pions.txt b/openmc/data/effective_dose/negative_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/negative_pions.txt rename to openmc/data/effective_dose/negative_pions.txt diff --git a/src/openmc/data/effective_dose/neutrons.txt b/openmc/data/effective_dose/neutrons.txt similarity index 100% rename from src/openmc/data/effective_dose/neutrons.txt rename to openmc/data/effective_dose/neutrons.txt diff --git a/src/openmc/data/effective_dose/photons.txt b/openmc/data/effective_dose/photons.txt similarity index 100% rename from src/openmc/data/effective_dose/photons.txt rename to openmc/data/effective_dose/photons.txt diff --git a/src/openmc/data/effective_dose/photons_kerma.txt b/openmc/data/effective_dose/photons_kerma.txt similarity index 100% rename from src/openmc/data/effective_dose/photons_kerma.txt rename to openmc/data/effective_dose/photons_kerma.txt diff --git a/src/openmc/data/effective_dose/positive_muons.txt b/openmc/data/effective_dose/positive_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/positive_muons.txt rename to openmc/data/effective_dose/positive_muons.txt diff --git a/src/openmc/data/effective_dose/positive_pions.txt b/openmc/data/effective_dose/positive_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/positive_pions.txt rename to openmc/data/effective_dose/positive_pions.txt diff --git a/src/openmc/data/effective_dose/positrons.txt b/openmc/data/effective_dose/positrons.txt similarity index 100% rename from src/openmc/data/effective_dose/positrons.txt rename to openmc/data/effective_dose/positrons.txt diff --git a/src/openmc/data/effective_dose/protons.txt b/openmc/data/effective_dose/protons.txt similarity index 100% rename from src/openmc/data/effective_dose/protons.txt rename to openmc/data/effective_dose/protons.txt diff --git a/src/openmc/data/endf.py b/openmc/data/endf.py similarity index 100% rename from src/openmc/data/endf.py rename to openmc/data/endf.py diff --git a/src/openmc/data/energy_distribution.py b/openmc/data/energy_distribution.py similarity index 100% rename from src/openmc/data/energy_distribution.py rename to openmc/data/energy_distribution.py diff --git a/src/openmc/data/fission_energy.py b/openmc/data/fission_energy.py similarity index 100% rename from src/openmc/data/fission_energy.py rename to openmc/data/fission_energy.py diff --git a/src/openmc/data/function.py b/openmc/data/function.py similarity index 100% rename from src/openmc/data/function.py rename to openmc/data/function.py diff --git a/src/openmc/data/grid.py b/openmc/data/grid.py similarity index 100% rename from src/openmc/data/grid.py rename to openmc/data/grid.py diff --git a/src/openmc/data/half_life.json b/openmc/data/half_life.json similarity index 100% rename from src/openmc/data/half_life.json rename to openmc/data/half_life.json diff --git a/src/openmc/data/kalbach_mann.py b/openmc/data/kalbach_mann.py similarity index 100% rename from src/openmc/data/kalbach_mann.py rename to openmc/data/kalbach_mann.py diff --git a/src/openmc/data/laboratory.py b/openmc/data/laboratory.py similarity index 100% rename from src/openmc/data/laboratory.py rename to openmc/data/laboratory.py diff --git a/src/openmc/data/library.py b/openmc/data/library.py similarity index 100% rename from src/openmc/data/library.py rename to openmc/data/library.py diff --git a/src/openmc/data/mass_1.mas20.txt b/openmc/data/mass_1.mas20.txt similarity index 100% rename from src/openmc/data/mass_1.mas20.txt rename to openmc/data/mass_1.mas20.txt diff --git a/src/openmc/data/multipole.py b/openmc/data/multipole.py similarity index 100% rename from src/openmc/data/multipole.py rename to openmc/data/multipole.py diff --git a/src/openmc/data/nbody.py b/openmc/data/nbody.py similarity index 100% rename from src/openmc/data/nbody.py rename to openmc/data/nbody.py diff --git a/src/openmc/data/neutron.py b/openmc/data/neutron.py similarity index 100% rename from src/openmc/data/neutron.py rename to openmc/data/neutron.py diff --git a/src/openmc/data/njoy.py b/openmc/data/njoy.py similarity index 100% rename from src/openmc/data/njoy.py rename to openmc/data/njoy.py diff --git a/src/openmc/data/photon.py b/openmc/data/photon.py similarity index 100% rename from src/openmc/data/photon.py rename to openmc/data/photon.py diff --git a/src/openmc/data/product.py b/openmc/data/product.py similarity index 100% rename from src/openmc/data/product.py rename to openmc/data/product.py diff --git a/src/openmc/data/reaction.py b/openmc/data/reaction.py similarity index 100% rename from src/openmc/data/reaction.py rename to openmc/data/reaction.py diff --git a/src/openmc/data/resonance.py b/openmc/data/resonance.py similarity index 100% rename from src/openmc/data/resonance.py rename to openmc/data/resonance.py diff --git a/src/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py similarity index 100% rename from src/openmc/data/resonance_covariance.py rename to openmc/data/resonance_covariance.py diff --git a/src/openmc/data/thermal.py b/openmc/data/thermal.py similarity index 100% rename from src/openmc/data/thermal.py rename to openmc/data/thermal.py diff --git a/src/openmc/data/thermal_angle_energy.py b/openmc/data/thermal_angle_energy.py similarity index 100% rename from src/openmc/data/thermal_angle_energy.py rename to openmc/data/thermal_angle_energy.py diff --git a/src/openmc/data/uncorrelated.py b/openmc/data/uncorrelated.py similarity index 100% rename from src/openmc/data/uncorrelated.py rename to openmc/data/uncorrelated.py diff --git a/src/openmc/data/urr.py b/openmc/data/urr.py similarity index 100% rename from src/openmc/data/urr.py rename to openmc/data/urr.py diff --git a/src/openmc/deplete/__init__.py b/openmc/deplete/__init__.py similarity index 100% rename from src/openmc/deplete/__init__.py rename to openmc/deplete/__init__.py diff --git a/src/openmc/deplete/_matrix_funcs.py b/openmc/deplete/_matrix_funcs.py similarity index 100% rename from src/openmc/deplete/_matrix_funcs.py rename to openmc/deplete/_matrix_funcs.py diff --git a/src/openmc/deplete/abc.py b/openmc/deplete/abc.py similarity index 100% rename from src/openmc/deplete/abc.py rename to openmc/deplete/abc.py diff --git a/src/openmc/deplete/atom_number.py b/openmc/deplete/atom_number.py similarity index 100% rename from src/openmc/deplete/atom_number.py rename to openmc/deplete/atom_number.py diff --git a/src/openmc/deplete/chain.py b/openmc/deplete/chain.py similarity index 100% rename from src/openmc/deplete/chain.py rename to openmc/deplete/chain.py diff --git a/src/openmc/deplete/coupled_operator.py b/openmc/deplete/coupled_operator.py similarity index 100% rename from src/openmc/deplete/coupled_operator.py rename to openmc/deplete/coupled_operator.py diff --git a/src/openmc/deplete/cram.py b/openmc/deplete/cram.py similarity index 100% rename from src/openmc/deplete/cram.py rename to openmc/deplete/cram.py diff --git a/src/openmc/deplete/helpers.py b/openmc/deplete/helpers.py similarity index 100% rename from src/openmc/deplete/helpers.py rename to openmc/deplete/helpers.py diff --git a/src/openmc/deplete/independent_operator.py b/openmc/deplete/independent_operator.py similarity index 100% rename from src/openmc/deplete/independent_operator.py rename to openmc/deplete/independent_operator.py diff --git a/src/openmc/deplete/integrators.py b/openmc/deplete/integrators.py similarity index 100% rename from src/openmc/deplete/integrators.py rename to openmc/deplete/integrators.py diff --git a/src/openmc/deplete/microxs.py b/openmc/deplete/microxs.py similarity index 100% rename from src/openmc/deplete/microxs.py rename to openmc/deplete/microxs.py diff --git a/src/openmc/deplete/nuclide.py b/openmc/deplete/nuclide.py similarity index 100% rename from src/openmc/deplete/nuclide.py rename to openmc/deplete/nuclide.py diff --git a/src/openmc/deplete/openmc_operator.py b/openmc/deplete/openmc_operator.py similarity index 100% rename from src/openmc/deplete/openmc_operator.py rename to openmc/deplete/openmc_operator.py diff --git a/src/openmc/deplete/pool.py b/openmc/deplete/pool.py similarity index 100% rename from src/openmc/deplete/pool.py rename to openmc/deplete/pool.py diff --git a/src/openmc/deplete/reaction_rates.py b/openmc/deplete/reaction_rates.py similarity index 100% rename from src/openmc/deplete/reaction_rates.py rename to openmc/deplete/reaction_rates.py diff --git a/src/openmc/deplete/results.py b/openmc/deplete/results.py similarity index 100% rename from src/openmc/deplete/results.py rename to openmc/deplete/results.py diff --git a/src/openmc/deplete/stepresult.py b/openmc/deplete/stepresult.py similarity index 100% rename from src/openmc/deplete/stepresult.py rename to openmc/deplete/stepresult.py diff --git a/src/openmc/deplete/transfer_rates.py b/openmc/deplete/transfer_rates.py similarity index 100% rename from src/openmc/deplete/transfer_rates.py rename to openmc/deplete/transfer_rates.py diff --git a/src/openmc/dummy_comm.py b/openmc/dummy_comm.py similarity index 100% rename from src/openmc/dummy_comm.py rename to openmc/dummy_comm.py diff --git a/src/openmc/element.py b/openmc/element.py similarity index 100% rename from src/openmc/element.py rename to openmc/element.py diff --git a/src/openmc/examples.py b/openmc/examples.py similarity index 100% rename from src/openmc/examples.py rename to openmc/examples.py diff --git a/src/openmc/exceptions.py b/openmc/exceptions.py similarity index 100% rename from src/openmc/exceptions.py rename to openmc/exceptions.py diff --git a/src/openmc/executor.py b/openmc/executor.py similarity index 100% rename from src/openmc/executor.py rename to openmc/executor.py diff --git a/src/openmc/filter.py b/openmc/filter.py similarity index 100% rename from src/openmc/filter.py rename to openmc/filter.py diff --git a/src/openmc/filter_expansion.py b/openmc/filter_expansion.py similarity index 100% rename from src/openmc/filter_expansion.py rename to openmc/filter_expansion.py diff --git a/src/openmc/geometry.py b/openmc/geometry.py similarity index 100% rename from src/openmc/geometry.py rename to openmc/geometry.py diff --git a/src/openmc/lattice.py b/openmc/lattice.py similarity index 100% rename from src/openmc/lattice.py rename to openmc/lattice.py diff --git a/src/openmc/lib/__init__.py b/openmc/lib/__init__.py similarity index 100% rename from src/openmc/lib/__init__.py rename to openmc/lib/__init__.py diff --git a/src/openmc/lib/cell.py b/openmc/lib/cell.py similarity index 100% rename from src/openmc/lib/cell.py rename to openmc/lib/cell.py diff --git a/src/openmc/lib/core.py b/openmc/lib/core.py similarity index 100% rename from src/openmc/lib/core.py rename to openmc/lib/core.py diff --git a/src/openmc/lib/error.py b/openmc/lib/error.py similarity index 100% rename from src/openmc/lib/error.py rename to openmc/lib/error.py diff --git a/src/openmc/lib/filter.py b/openmc/lib/filter.py similarity index 100% rename from src/openmc/lib/filter.py rename to openmc/lib/filter.py diff --git a/src/openmc/lib/material.py b/openmc/lib/material.py similarity index 100% rename from src/openmc/lib/material.py rename to openmc/lib/material.py diff --git a/src/openmc/lib/math.py b/openmc/lib/math.py similarity index 100% rename from src/openmc/lib/math.py rename to openmc/lib/math.py diff --git a/src/openmc/lib/mesh.py b/openmc/lib/mesh.py similarity index 100% rename from src/openmc/lib/mesh.py rename to openmc/lib/mesh.py diff --git a/src/openmc/lib/nuclide.py b/openmc/lib/nuclide.py similarity index 100% rename from src/openmc/lib/nuclide.py rename to openmc/lib/nuclide.py diff --git a/src/openmc/lib/plot.py b/openmc/lib/plot.py similarity index 100% rename from src/openmc/lib/plot.py rename to openmc/lib/plot.py diff --git a/src/openmc/lib/settings.py b/openmc/lib/settings.py similarity index 100% rename from src/openmc/lib/settings.py rename to openmc/lib/settings.py diff --git a/src/openmc/lib/tally.py b/openmc/lib/tally.py similarity index 100% rename from src/openmc/lib/tally.py rename to openmc/lib/tally.py diff --git a/src/openmc/lib/weight_windows.py b/openmc/lib/weight_windows.py similarity index 100% rename from src/openmc/lib/weight_windows.py rename to openmc/lib/weight_windows.py diff --git a/src/openmc/macroscopic.py b/openmc/macroscopic.py similarity index 100% rename from src/openmc/macroscopic.py rename to openmc/macroscopic.py diff --git a/src/openmc/material.py b/openmc/material.py similarity index 100% rename from src/openmc/material.py rename to openmc/material.py diff --git a/src/openmc/mesh.py b/openmc/mesh.py similarity index 100% rename from src/openmc/mesh.py rename to openmc/mesh.py diff --git a/src/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py similarity index 100% rename from src/openmc/mgxs/__init__.py rename to openmc/mgxs/__init__.py diff --git a/src/openmc/mgxs/groups.py b/openmc/mgxs/groups.py similarity index 100% rename from src/openmc/mgxs/groups.py rename to openmc/mgxs/groups.py diff --git a/src/openmc/mgxs/library.py b/openmc/mgxs/library.py similarity index 100% rename from src/openmc/mgxs/library.py rename to openmc/mgxs/library.py diff --git a/src/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py similarity index 100% rename from src/openmc/mgxs/mdgxs.py rename to openmc/mgxs/mdgxs.py diff --git a/src/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py similarity index 100% rename from src/openmc/mgxs/mgxs.py rename to openmc/mgxs/mgxs.py diff --git a/src/openmc/mgxs_library.py b/openmc/mgxs_library.py similarity index 100% rename from src/openmc/mgxs_library.py rename to openmc/mgxs_library.py diff --git a/src/openmc/mixin.py b/openmc/mixin.py similarity index 100% rename from src/openmc/mixin.py rename to openmc/mixin.py diff --git a/src/openmc/model/__init__.py b/openmc/model/__init__.py similarity index 100% rename from src/openmc/model/__init__.py rename to openmc/model/__init__.py diff --git a/src/openmc/model/funcs.py b/openmc/model/funcs.py similarity index 100% rename from src/openmc/model/funcs.py rename to openmc/model/funcs.py diff --git a/src/openmc/model/model.py b/openmc/model/model.py similarity index 100% rename from src/openmc/model/model.py rename to openmc/model/model.py diff --git a/src/openmc/model/surface_composite.py b/openmc/model/surface_composite.py similarity index 100% rename from src/openmc/model/surface_composite.py rename to openmc/model/surface_composite.py diff --git a/src/openmc/model/triso.py b/openmc/model/triso.py similarity index 100% rename from src/openmc/model/triso.py rename to openmc/model/triso.py diff --git a/src/openmc/mpi.py b/openmc/mpi.py similarity index 100% rename from src/openmc/mpi.py rename to openmc/mpi.py diff --git a/src/openmc/nuclide.py b/openmc/nuclide.py similarity index 100% rename from src/openmc/nuclide.py rename to openmc/nuclide.py diff --git a/src/openmc/openmc_exec.py b/openmc/openmc_exec.py similarity index 100% rename from src/openmc/openmc_exec.py rename to openmc/openmc_exec.py diff --git a/src/openmc/openmoc_compatible.py b/openmc/openmoc_compatible.py similarity index 100% rename from src/openmc/openmoc_compatible.py rename to openmc/openmoc_compatible.py diff --git a/src/openmc/particle_restart.py b/openmc/particle_restart.py similarity index 100% rename from src/openmc/particle_restart.py rename to openmc/particle_restart.py diff --git a/src/openmc/plots.py b/openmc/plots.py similarity index 100% rename from src/openmc/plots.py rename to openmc/plots.py diff --git a/src/openmc/plotter.py b/openmc/plotter.py similarity index 100% rename from src/openmc/plotter.py rename to openmc/plotter.py diff --git a/src/openmc/polynomial.py b/openmc/polynomial.py similarity index 100% rename from src/openmc/polynomial.py rename to openmc/polynomial.py diff --git a/src/openmc/region.py b/openmc/region.py similarity index 100% rename from src/openmc/region.py rename to openmc/region.py diff --git a/src/openmc/search.py b/openmc/search.py similarity index 100% rename from src/openmc/search.py rename to openmc/search.py diff --git a/src/openmc/settings.py b/openmc/settings.py similarity index 100% rename from src/openmc/settings.py rename to openmc/settings.py diff --git a/src/openmc/source.py b/openmc/source.py similarity index 100% rename from src/openmc/source.py rename to openmc/source.py diff --git a/src/openmc/statepoint.py b/openmc/statepoint.py similarity index 100% rename from src/openmc/statepoint.py rename to openmc/statepoint.py diff --git a/src/openmc/stats/__init__.py b/openmc/stats/__init__.py similarity index 100% rename from src/openmc/stats/__init__.py rename to openmc/stats/__init__.py diff --git a/src/openmc/stats/multivariate.py b/openmc/stats/multivariate.py similarity index 100% rename from src/openmc/stats/multivariate.py rename to openmc/stats/multivariate.py diff --git a/src/openmc/stats/univariate.py b/openmc/stats/univariate.py similarity index 100% rename from src/openmc/stats/univariate.py rename to openmc/stats/univariate.py diff --git a/src/openmc/summary.py b/openmc/summary.py similarity index 100% rename from src/openmc/summary.py rename to openmc/summary.py diff --git a/src/openmc/surface.py b/openmc/surface.py similarity index 100% rename from src/openmc/surface.py rename to openmc/surface.py diff --git a/src/openmc/tallies.py b/openmc/tallies.py similarity index 100% rename from src/openmc/tallies.py rename to openmc/tallies.py diff --git a/src/openmc/tally_derivative.py b/openmc/tally_derivative.py similarity index 100% rename from src/openmc/tally_derivative.py rename to openmc/tally_derivative.py diff --git a/src/openmc/tracks.py b/openmc/tracks.py similarity index 100% rename from src/openmc/tracks.py rename to openmc/tracks.py diff --git a/src/openmc/trigger.py b/openmc/trigger.py similarity index 100% rename from src/openmc/trigger.py rename to openmc/trigger.py diff --git a/src/openmc/universe.py b/openmc/universe.py similarity index 100% rename from src/openmc/universe.py rename to openmc/universe.py diff --git a/src/openmc/utility_funcs.py b/openmc/utility_funcs.py similarity index 100% rename from src/openmc/utility_funcs.py rename to openmc/utility_funcs.py diff --git a/src/openmc/volume.py b/openmc/volume.py similarity index 100% rename from src/openmc/volume.py rename to openmc/volume.py diff --git a/src/openmc/weight_windows.py b/openmc/weight_windows.py similarity index 100% rename from src/openmc/weight_windows.py rename to openmc/weight_windows.py From d0740ce41710f2b9456f5fb2cd8b025fad3a3626 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 17 Oct 2024 20:26:48 +0600 Subject: [PATCH 061/145] move openmc to src again --- {openmc => src/openmc}/__init__.py | 0 {openmc => src/openmc}/_xml.py | 0 {openmc => src/openmc}/arithmetic.py | 0 {openmc => src/openmc}/bounding_box.py | 0 {openmc => src/openmc}/cell.py | 0 {openmc => src/openmc}/checkvalue.py | 0 {openmc => src/openmc}/cmfd.py | 0 {openmc => src/openmc}/config.py | 0 {openmc => src/openmc}/data/BREMX.DAT | 0 {openmc => src/openmc}/data/__init__.py | 0 {openmc => src/openmc}/data/ace.py | 0 {openmc => src/openmc}/data/angle_distribution.py | 0 {openmc => src/openmc}/data/angle_energy.py | 0 {openmc => src/openmc}/data/correlated.py | 0 {openmc => src/openmc}/data/data.py | 0 {openmc => src/openmc}/data/decay.py | 0 {openmc => src/openmc}/data/effective_dose/__init__.py | 0 {openmc => src/openmc}/data/effective_dose/dose.py | 0 {openmc => src/openmc}/data/effective_dose/icrp116/electrons.txt | 0 .../openmc}/data/effective_dose/icrp116/helium_ions.txt | 0 .../openmc}/data/effective_dose/icrp116/negative_muons.txt | 0 .../openmc}/data/effective_dose/icrp116/negative_pions.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/neutrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/photons.txt | 0 .../openmc}/data/effective_dose/icrp116/photons_kerma.txt | 0 .../openmc}/data/effective_dose/icrp116/positive_muons.txt | 0 .../openmc}/data/effective_dose/icrp116/positive_pions.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/positrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/protons.txt | 0 .../data/effective_dose/icrp74/generate_photon_effective_dose.py | 0 {openmc => src/openmc}/data/effective_dose/icrp74/neutrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp74/photons.txt | 0 {openmc => src/openmc}/data/endf.py | 0 {openmc => src/openmc}/data/energy_distribution.py | 0 {openmc => src/openmc}/data/fission_energy.py | 0 {openmc => src/openmc}/data/function.py | 0 {openmc => src/openmc}/data/grid.py | 0 {openmc => src/openmc}/data/half_life.json | 0 {openmc => src/openmc}/data/kalbach_mann.py | 0 {openmc => src/openmc}/data/laboratory.py | 0 {openmc => src/openmc}/data/library.py | 0 {openmc => src/openmc}/data/mass_1.mas20.txt | 0 {openmc => src/openmc}/data/multipole.py | 0 {openmc => src/openmc}/data/nbody.py | 0 {openmc => src/openmc}/data/neutron.py | 0 {openmc => src/openmc}/data/njoy.py | 0 {openmc => src/openmc}/data/photon.py | 0 {openmc => src/openmc}/data/product.py | 0 {openmc => src/openmc}/data/reaction.py | 0 {openmc => src/openmc}/data/resonance.py | 0 {openmc => src/openmc}/data/resonance_covariance.py | 0 {openmc => src/openmc}/data/thermal.py | 0 {openmc => src/openmc}/data/thermal_angle_energy.py | 0 {openmc => src/openmc}/data/uncorrelated.py | 0 {openmc => src/openmc}/data/urr.py | 0 {openmc => src/openmc}/deplete/__init__.py | 0 {openmc => src/openmc}/deplete/_matrix_funcs.py | 0 {openmc => src/openmc}/deplete/abc.py | 0 {openmc => src/openmc}/deplete/atom_number.py | 0 {openmc => src/openmc}/deplete/chain.py | 0 {openmc => src/openmc}/deplete/coupled_operator.py | 0 {openmc => src/openmc}/deplete/cram.py | 0 {openmc => src/openmc}/deplete/helpers.py | 0 {openmc => src/openmc}/deplete/independent_operator.py | 0 {openmc => src/openmc}/deplete/integrators.py | 0 {openmc => src/openmc}/deplete/microxs.py | 0 {openmc => src/openmc}/deplete/nuclide.py | 0 {openmc => src/openmc}/deplete/openmc_operator.py | 0 {openmc => src/openmc}/deplete/pool.py | 0 {openmc => src/openmc}/deplete/reaction_rates.py | 0 {openmc => src/openmc}/deplete/results.py | 0 {openmc => src/openmc}/deplete/stepresult.py | 0 {openmc => src/openmc}/deplete/transfer_rates.py | 0 {openmc => src/openmc}/dummy_comm.py | 0 {openmc => src/openmc}/element.py | 0 {openmc => src/openmc}/examples.py | 0 {openmc => src/openmc}/exceptions.py | 0 {openmc => src/openmc}/executor.py | 0 {openmc => src/openmc}/filter.py | 0 {openmc => src/openmc}/filter_expansion.py | 0 {openmc => src/openmc}/geometry.py | 0 {openmc => src/openmc}/lattice.py | 0 {openmc => src/openmc}/lib/__init__.py | 0 {openmc => src/openmc}/lib/cell.py | 0 {openmc => src/openmc}/lib/core.py | 0 {openmc => src/openmc}/lib/error.py | 0 {openmc => src/openmc}/lib/filter.py | 0 {openmc => src/openmc}/lib/material.py | 0 {openmc => src/openmc}/lib/math.py | 0 {openmc => src/openmc}/lib/mesh.py | 0 {openmc => src/openmc}/lib/nuclide.py | 0 {openmc => src/openmc}/lib/plot.py | 0 {openmc => src/openmc}/lib/settings.py | 0 {openmc => src/openmc}/lib/tally.py | 0 {openmc => src/openmc}/lib/weight_windows.py | 0 {openmc => src/openmc}/macroscopic.py | 0 {openmc => src/openmc}/material.py | 0 {openmc => src/openmc}/mesh.py | 0 {openmc => src/openmc}/mgxs/__init__.py | 0 {openmc => src/openmc}/mgxs/groups.py | 0 {openmc => src/openmc}/mgxs/library.py | 0 {openmc => src/openmc}/mgxs/mdgxs.py | 0 {openmc => src/openmc}/mgxs/mgxs.py | 0 {openmc => src/openmc}/mgxs_library.py | 0 {openmc => src/openmc}/mixin.py | 0 {openmc => src/openmc}/model/__init__.py | 0 {openmc => src/openmc}/model/funcs.py | 0 {openmc => src/openmc}/model/model.py | 0 {openmc => src/openmc}/model/surface_composite.py | 0 {openmc => src/openmc}/model/triso.py | 0 {openmc => src/openmc}/mpi.py | 0 {openmc => src/openmc}/nuclide.py | 0 {openmc => src/openmc}/openmc_exec.py | 0 {openmc => src/openmc}/openmoc_compatible.py | 0 {openmc => src/openmc}/particle_restart.py | 0 {openmc => src/openmc}/plots.py | 0 {openmc => src/openmc}/plotter.py | 0 {openmc => src/openmc}/polynomial.py | 0 {openmc => src/openmc}/region.py | 0 {openmc => src/openmc}/search.py | 0 {openmc => src/openmc}/settings.py | 0 {openmc => src/openmc}/source.py | 0 {openmc => src/openmc}/statepoint.py | 0 {openmc => src/openmc}/stats/__init__.py | 0 {openmc => src/openmc}/stats/multivariate.py | 0 {openmc => src/openmc}/stats/univariate.py | 0 {openmc => src/openmc}/summary.py | 0 {openmc => src/openmc}/surface.py | 0 {openmc => src/openmc}/tallies.py | 0 {openmc => src/openmc}/tally_derivative.py | 0 {openmc => src/openmc}/tracks.py | 0 {openmc => src/openmc}/trigger.py | 0 {openmc => src/openmc}/universe.py | 0 {openmc => src/openmc}/utility_funcs.py | 0 {openmc => src/openmc}/volume.py | 0 {openmc => src/openmc}/weight_windows.py | 0 136 files changed, 0 insertions(+), 0 deletions(-) rename {openmc => src/openmc}/__init__.py (100%) rename {openmc => src/openmc}/_xml.py (100%) rename {openmc => src/openmc}/arithmetic.py (100%) rename {openmc => src/openmc}/bounding_box.py (100%) rename {openmc => src/openmc}/cell.py (100%) rename {openmc => src/openmc}/checkvalue.py (100%) rename {openmc => src/openmc}/cmfd.py (100%) rename {openmc => src/openmc}/config.py (100%) rename {openmc => src/openmc}/data/BREMX.DAT (100%) rename {openmc => src/openmc}/data/__init__.py (100%) rename {openmc => src/openmc}/data/ace.py (100%) rename {openmc => src/openmc}/data/angle_distribution.py (100%) rename {openmc => src/openmc}/data/angle_energy.py (100%) rename {openmc => src/openmc}/data/correlated.py (100%) rename {openmc => src/openmc}/data/data.py (100%) rename {openmc => src/openmc}/data/decay.py (100%) rename {openmc => src/openmc}/data/effective_dose/__init__.py (100%) rename {openmc => src/openmc}/data/effective_dose/dose.py (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {openmc => src/openmc}/data/endf.py (100%) rename {openmc => src/openmc}/data/energy_distribution.py (100%) rename {openmc => src/openmc}/data/fission_energy.py (100%) rename {openmc => src/openmc}/data/function.py (100%) rename {openmc => src/openmc}/data/grid.py (100%) rename {openmc => src/openmc}/data/half_life.json (100%) rename {openmc => src/openmc}/data/kalbach_mann.py (100%) rename {openmc => src/openmc}/data/laboratory.py (100%) rename {openmc => src/openmc}/data/library.py (100%) rename {openmc => src/openmc}/data/mass_1.mas20.txt (100%) rename {openmc => src/openmc}/data/multipole.py (100%) rename {openmc => src/openmc}/data/nbody.py (100%) rename {openmc => src/openmc}/data/neutron.py (100%) rename {openmc => src/openmc}/data/njoy.py (100%) rename {openmc => src/openmc}/data/photon.py (100%) rename {openmc => src/openmc}/data/product.py (100%) rename {openmc => src/openmc}/data/reaction.py (100%) rename {openmc => src/openmc}/data/resonance.py (100%) rename {openmc => src/openmc}/data/resonance_covariance.py (100%) rename {openmc => src/openmc}/data/thermal.py (100%) rename {openmc => src/openmc}/data/thermal_angle_energy.py (100%) rename {openmc => src/openmc}/data/uncorrelated.py (100%) rename {openmc => src/openmc}/data/urr.py (100%) rename {openmc => src/openmc}/deplete/__init__.py (100%) rename {openmc => src/openmc}/deplete/_matrix_funcs.py (100%) rename {openmc => src/openmc}/deplete/abc.py (100%) rename {openmc => src/openmc}/deplete/atom_number.py (100%) rename {openmc => src/openmc}/deplete/chain.py (100%) rename {openmc => src/openmc}/deplete/coupled_operator.py (100%) rename {openmc => src/openmc}/deplete/cram.py (100%) rename {openmc => src/openmc}/deplete/helpers.py (100%) rename {openmc => src/openmc}/deplete/independent_operator.py (100%) rename {openmc => src/openmc}/deplete/integrators.py (100%) rename {openmc => src/openmc}/deplete/microxs.py (100%) rename {openmc => src/openmc}/deplete/nuclide.py (100%) rename {openmc => src/openmc}/deplete/openmc_operator.py (100%) rename {openmc => src/openmc}/deplete/pool.py (100%) rename {openmc => src/openmc}/deplete/reaction_rates.py (100%) rename {openmc => src/openmc}/deplete/results.py (100%) rename {openmc => src/openmc}/deplete/stepresult.py (100%) rename {openmc => src/openmc}/deplete/transfer_rates.py (100%) rename {openmc => src/openmc}/dummy_comm.py (100%) rename {openmc => src/openmc}/element.py (100%) rename {openmc => src/openmc}/examples.py (100%) rename {openmc => src/openmc}/exceptions.py (100%) rename {openmc => src/openmc}/executor.py (100%) rename {openmc => src/openmc}/filter.py (100%) rename {openmc => src/openmc}/filter_expansion.py (100%) rename {openmc => src/openmc}/geometry.py (100%) rename {openmc => src/openmc}/lattice.py (100%) rename {openmc => src/openmc}/lib/__init__.py (100%) rename {openmc => src/openmc}/lib/cell.py (100%) rename {openmc => src/openmc}/lib/core.py (100%) rename {openmc => src/openmc}/lib/error.py (100%) rename {openmc => src/openmc}/lib/filter.py (100%) rename {openmc => src/openmc}/lib/material.py (100%) rename {openmc => src/openmc}/lib/math.py (100%) rename {openmc => src/openmc}/lib/mesh.py (100%) rename {openmc => src/openmc}/lib/nuclide.py (100%) rename {openmc => src/openmc}/lib/plot.py (100%) rename {openmc => src/openmc}/lib/settings.py (100%) rename {openmc => src/openmc}/lib/tally.py (100%) rename {openmc => src/openmc}/lib/weight_windows.py (100%) rename {openmc => src/openmc}/macroscopic.py (100%) rename {openmc => src/openmc}/material.py (100%) rename {openmc => src/openmc}/mesh.py (100%) rename {openmc => src/openmc}/mgxs/__init__.py (100%) rename {openmc => src/openmc}/mgxs/groups.py (100%) rename {openmc => src/openmc}/mgxs/library.py (100%) rename {openmc => src/openmc}/mgxs/mdgxs.py (100%) rename {openmc => src/openmc}/mgxs/mgxs.py (100%) rename {openmc => src/openmc}/mgxs_library.py (100%) rename {openmc => src/openmc}/mixin.py (100%) rename {openmc => src/openmc}/model/__init__.py (100%) rename {openmc => src/openmc}/model/funcs.py (100%) rename {openmc => src/openmc}/model/model.py (100%) rename {openmc => src/openmc}/model/surface_composite.py (100%) rename {openmc => src/openmc}/model/triso.py (100%) rename {openmc => src/openmc}/mpi.py (100%) rename {openmc => src/openmc}/nuclide.py (100%) rename {openmc => src/openmc}/openmc_exec.py (100%) rename {openmc => src/openmc}/openmoc_compatible.py (100%) rename {openmc => src/openmc}/particle_restart.py (100%) rename {openmc => src/openmc}/plots.py (100%) rename {openmc => src/openmc}/plotter.py (100%) rename {openmc => src/openmc}/polynomial.py (100%) rename {openmc => src/openmc}/region.py (100%) rename {openmc => src/openmc}/search.py (100%) rename {openmc => src/openmc}/settings.py (100%) rename {openmc => src/openmc}/source.py (100%) rename {openmc => src/openmc}/statepoint.py (100%) rename {openmc => src/openmc}/stats/__init__.py (100%) rename {openmc => src/openmc}/stats/multivariate.py (100%) rename {openmc => src/openmc}/stats/univariate.py (100%) rename {openmc => src/openmc}/summary.py (100%) rename {openmc => src/openmc}/surface.py (100%) rename {openmc => src/openmc}/tallies.py (100%) rename {openmc => src/openmc}/tally_derivative.py (100%) rename {openmc => src/openmc}/tracks.py (100%) rename {openmc => src/openmc}/trigger.py (100%) rename {openmc => src/openmc}/universe.py (100%) rename {openmc => src/openmc}/utility_funcs.py (100%) rename {openmc => src/openmc}/volume.py (100%) rename {openmc => src/openmc}/weight_windows.py (100%) diff --git a/openmc/__init__.py b/src/openmc/__init__.py similarity index 100% rename from openmc/__init__.py rename to src/openmc/__init__.py diff --git a/openmc/_xml.py b/src/openmc/_xml.py similarity index 100% rename from openmc/_xml.py rename to src/openmc/_xml.py diff --git a/openmc/arithmetic.py b/src/openmc/arithmetic.py similarity index 100% rename from openmc/arithmetic.py rename to src/openmc/arithmetic.py diff --git a/openmc/bounding_box.py b/src/openmc/bounding_box.py similarity index 100% rename from openmc/bounding_box.py rename to src/openmc/bounding_box.py diff --git a/openmc/cell.py b/src/openmc/cell.py similarity index 100% rename from openmc/cell.py rename to src/openmc/cell.py diff --git a/openmc/checkvalue.py b/src/openmc/checkvalue.py similarity index 100% rename from openmc/checkvalue.py rename to src/openmc/checkvalue.py diff --git a/openmc/cmfd.py b/src/openmc/cmfd.py similarity index 100% rename from openmc/cmfd.py rename to src/openmc/cmfd.py diff --git a/openmc/config.py b/src/openmc/config.py similarity index 100% rename from openmc/config.py rename to src/openmc/config.py diff --git a/openmc/data/BREMX.DAT b/src/openmc/data/BREMX.DAT similarity index 100% rename from openmc/data/BREMX.DAT rename to src/openmc/data/BREMX.DAT diff --git a/openmc/data/__init__.py b/src/openmc/data/__init__.py similarity index 100% rename from openmc/data/__init__.py rename to src/openmc/data/__init__.py diff --git a/openmc/data/ace.py b/src/openmc/data/ace.py similarity index 100% rename from openmc/data/ace.py rename to src/openmc/data/ace.py diff --git a/openmc/data/angle_distribution.py b/src/openmc/data/angle_distribution.py similarity index 100% rename from openmc/data/angle_distribution.py rename to src/openmc/data/angle_distribution.py diff --git a/openmc/data/angle_energy.py b/src/openmc/data/angle_energy.py similarity index 100% rename from openmc/data/angle_energy.py rename to src/openmc/data/angle_energy.py diff --git a/openmc/data/correlated.py b/src/openmc/data/correlated.py similarity index 100% rename from openmc/data/correlated.py rename to src/openmc/data/correlated.py diff --git a/openmc/data/data.py b/src/openmc/data/data.py similarity index 100% rename from openmc/data/data.py rename to src/openmc/data/data.py diff --git a/openmc/data/decay.py b/src/openmc/data/decay.py similarity index 100% rename from openmc/data/decay.py rename to src/openmc/data/decay.py diff --git a/openmc/data/effective_dose/__init__.py b/src/openmc/data/effective_dose/__init__.py similarity index 100% rename from openmc/data/effective_dose/__init__.py rename to src/openmc/data/effective_dose/__init__.py diff --git a/openmc/data/effective_dose/dose.py b/src/openmc/data/effective_dose/dose.py similarity index 100% rename from openmc/data/effective_dose/dose.py rename to src/openmc/data/effective_dose/dose.py diff --git a/openmc/data/effective_dose/icrp116/electrons.txt b/src/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/electrons.txt rename to src/openmc/data/effective_dose/icrp116/electrons.txt diff --git a/openmc/data/effective_dose/icrp116/helium_ions.txt b/src/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/helium_ions.txt rename to src/openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/openmc/data/effective_dose/icrp116/negative_muons.txt b/src/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_muons.txt rename to src/openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/openmc/data/effective_dose/icrp116/negative_pions.txt b/src/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_pions.txt rename to src/openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/openmc/data/effective_dose/icrp116/neutrons.txt b/src/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/neutrons.txt rename to src/openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/openmc/data/effective_dose/icrp116/photons.txt b/src/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons.txt rename to src/openmc/data/effective_dose/icrp116/photons.txt diff --git a/openmc/data/effective_dose/icrp116/photons_kerma.txt b/src/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons_kerma.txt rename to src/openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/openmc/data/effective_dose/icrp116/positive_muons.txt b/src/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_muons.txt rename to src/openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/openmc/data/effective_dose/icrp116/positive_pions.txt b/src/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_pions.txt rename to src/openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/openmc/data/effective_dose/icrp116/positrons.txt b/src/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positrons.txt rename to src/openmc/data/effective_dose/icrp116/positrons.txt diff --git a/openmc/data/effective_dose/icrp116/protons.txt b/src/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/protons.txt rename to src/openmc/data/effective_dose/icrp116/protons.txt diff --git a/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/openmc/data/effective_dose/icrp74/neutrons.txt b/src/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/neutrons.txt rename to src/openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/openmc/data/effective_dose/icrp74/photons.txt b/src/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/photons.txt rename to src/openmc/data/effective_dose/icrp74/photons.txt diff --git a/openmc/data/endf.py b/src/openmc/data/endf.py similarity index 100% rename from openmc/data/endf.py rename to src/openmc/data/endf.py diff --git a/openmc/data/energy_distribution.py b/src/openmc/data/energy_distribution.py similarity index 100% rename from openmc/data/energy_distribution.py rename to src/openmc/data/energy_distribution.py diff --git a/openmc/data/fission_energy.py b/src/openmc/data/fission_energy.py similarity index 100% rename from openmc/data/fission_energy.py rename to src/openmc/data/fission_energy.py diff --git a/openmc/data/function.py b/src/openmc/data/function.py similarity index 100% rename from openmc/data/function.py rename to src/openmc/data/function.py diff --git a/openmc/data/grid.py b/src/openmc/data/grid.py similarity index 100% rename from openmc/data/grid.py rename to src/openmc/data/grid.py diff --git a/openmc/data/half_life.json b/src/openmc/data/half_life.json similarity index 100% rename from openmc/data/half_life.json rename to src/openmc/data/half_life.json diff --git a/openmc/data/kalbach_mann.py b/src/openmc/data/kalbach_mann.py similarity index 100% rename from openmc/data/kalbach_mann.py rename to src/openmc/data/kalbach_mann.py diff --git a/openmc/data/laboratory.py b/src/openmc/data/laboratory.py similarity index 100% rename from openmc/data/laboratory.py rename to src/openmc/data/laboratory.py diff --git a/openmc/data/library.py b/src/openmc/data/library.py similarity index 100% rename from openmc/data/library.py rename to src/openmc/data/library.py diff --git a/openmc/data/mass_1.mas20.txt b/src/openmc/data/mass_1.mas20.txt similarity index 100% rename from openmc/data/mass_1.mas20.txt rename to src/openmc/data/mass_1.mas20.txt diff --git a/openmc/data/multipole.py b/src/openmc/data/multipole.py similarity index 100% rename from openmc/data/multipole.py rename to src/openmc/data/multipole.py diff --git a/openmc/data/nbody.py b/src/openmc/data/nbody.py similarity index 100% rename from openmc/data/nbody.py rename to src/openmc/data/nbody.py diff --git a/openmc/data/neutron.py b/src/openmc/data/neutron.py similarity index 100% rename from openmc/data/neutron.py rename to src/openmc/data/neutron.py diff --git a/openmc/data/njoy.py b/src/openmc/data/njoy.py similarity index 100% rename from openmc/data/njoy.py rename to src/openmc/data/njoy.py diff --git a/openmc/data/photon.py b/src/openmc/data/photon.py similarity index 100% rename from openmc/data/photon.py rename to src/openmc/data/photon.py diff --git a/openmc/data/product.py b/src/openmc/data/product.py similarity index 100% rename from openmc/data/product.py rename to src/openmc/data/product.py diff --git a/openmc/data/reaction.py b/src/openmc/data/reaction.py similarity index 100% rename from openmc/data/reaction.py rename to src/openmc/data/reaction.py diff --git a/openmc/data/resonance.py b/src/openmc/data/resonance.py similarity index 100% rename from openmc/data/resonance.py rename to src/openmc/data/resonance.py diff --git a/openmc/data/resonance_covariance.py b/src/openmc/data/resonance_covariance.py similarity index 100% rename from openmc/data/resonance_covariance.py rename to src/openmc/data/resonance_covariance.py diff --git a/openmc/data/thermal.py b/src/openmc/data/thermal.py similarity index 100% rename from openmc/data/thermal.py rename to src/openmc/data/thermal.py diff --git a/openmc/data/thermal_angle_energy.py b/src/openmc/data/thermal_angle_energy.py similarity index 100% rename from openmc/data/thermal_angle_energy.py rename to src/openmc/data/thermal_angle_energy.py diff --git a/openmc/data/uncorrelated.py b/src/openmc/data/uncorrelated.py similarity index 100% rename from openmc/data/uncorrelated.py rename to src/openmc/data/uncorrelated.py diff --git a/openmc/data/urr.py b/src/openmc/data/urr.py similarity index 100% rename from openmc/data/urr.py rename to src/openmc/data/urr.py diff --git a/openmc/deplete/__init__.py b/src/openmc/deplete/__init__.py similarity index 100% rename from openmc/deplete/__init__.py rename to src/openmc/deplete/__init__.py diff --git a/openmc/deplete/_matrix_funcs.py b/src/openmc/deplete/_matrix_funcs.py similarity index 100% rename from openmc/deplete/_matrix_funcs.py rename to src/openmc/deplete/_matrix_funcs.py diff --git a/openmc/deplete/abc.py b/src/openmc/deplete/abc.py similarity index 100% rename from openmc/deplete/abc.py rename to src/openmc/deplete/abc.py diff --git a/openmc/deplete/atom_number.py b/src/openmc/deplete/atom_number.py similarity index 100% rename from openmc/deplete/atom_number.py rename to src/openmc/deplete/atom_number.py diff --git a/openmc/deplete/chain.py b/src/openmc/deplete/chain.py similarity index 100% rename from openmc/deplete/chain.py rename to src/openmc/deplete/chain.py diff --git a/openmc/deplete/coupled_operator.py b/src/openmc/deplete/coupled_operator.py similarity index 100% rename from openmc/deplete/coupled_operator.py rename to src/openmc/deplete/coupled_operator.py diff --git a/openmc/deplete/cram.py b/src/openmc/deplete/cram.py similarity index 100% rename from openmc/deplete/cram.py rename to src/openmc/deplete/cram.py diff --git a/openmc/deplete/helpers.py b/src/openmc/deplete/helpers.py similarity index 100% rename from openmc/deplete/helpers.py rename to src/openmc/deplete/helpers.py diff --git a/openmc/deplete/independent_operator.py b/src/openmc/deplete/independent_operator.py similarity index 100% rename from openmc/deplete/independent_operator.py rename to src/openmc/deplete/independent_operator.py diff --git a/openmc/deplete/integrators.py b/src/openmc/deplete/integrators.py similarity index 100% rename from openmc/deplete/integrators.py rename to src/openmc/deplete/integrators.py diff --git a/openmc/deplete/microxs.py b/src/openmc/deplete/microxs.py similarity index 100% rename from openmc/deplete/microxs.py rename to src/openmc/deplete/microxs.py diff --git a/openmc/deplete/nuclide.py b/src/openmc/deplete/nuclide.py similarity index 100% rename from openmc/deplete/nuclide.py rename to src/openmc/deplete/nuclide.py diff --git a/openmc/deplete/openmc_operator.py b/src/openmc/deplete/openmc_operator.py similarity index 100% rename from openmc/deplete/openmc_operator.py rename to src/openmc/deplete/openmc_operator.py diff --git a/openmc/deplete/pool.py b/src/openmc/deplete/pool.py similarity index 100% rename from openmc/deplete/pool.py rename to src/openmc/deplete/pool.py diff --git a/openmc/deplete/reaction_rates.py b/src/openmc/deplete/reaction_rates.py similarity index 100% rename from openmc/deplete/reaction_rates.py rename to src/openmc/deplete/reaction_rates.py diff --git a/openmc/deplete/results.py b/src/openmc/deplete/results.py similarity index 100% rename from openmc/deplete/results.py rename to src/openmc/deplete/results.py diff --git a/openmc/deplete/stepresult.py b/src/openmc/deplete/stepresult.py similarity index 100% rename from openmc/deplete/stepresult.py rename to src/openmc/deplete/stepresult.py diff --git a/openmc/deplete/transfer_rates.py b/src/openmc/deplete/transfer_rates.py similarity index 100% rename from openmc/deplete/transfer_rates.py rename to src/openmc/deplete/transfer_rates.py diff --git a/openmc/dummy_comm.py b/src/openmc/dummy_comm.py similarity index 100% rename from openmc/dummy_comm.py rename to src/openmc/dummy_comm.py diff --git a/openmc/element.py b/src/openmc/element.py similarity index 100% rename from openmc/element.py rename to src/openmc/element.py diff --git a/openmc/examples.py b/src/openmc/examples.py similarity index 100% rename from openmc/examples.py rename to src/openmc/examples.py diff --git a/openmc/exceptions.py b/src/openmc/exceptions.py similarity index 100% rename from openmc/exceptions.py rename to src/openmc/exceptions.py diff --git a/openmc/executor.py b/src/openmc/executor.py similarity index 100% rename from openmc/executor.py rename to src/openmc/executor.py diff --git a/openmc/filter.py b/src/openmc/filter.py similarity index 100% rename from openmc/filter.py rename to src/openmc/filter.py diff --git a/openmc/filter_expansion.py b/src/openmc/filter_expansion.py similarity index 100% rename from openmc/filter_expansion.py rename to src/openmc/filter_expansion.py diff --git a/openmc/geometry.py b/src/openmc/geometry.py similarity index 100% rename from openmc/geometry.py rename to src/openmc/geometry.py diff --git a/openmc/lattice.py b/src/openmc/lattice.py similarity index 100% rename from openmc/lattice.py rename to src/openmc/lattice.py diff --git a/openmc/lib/__init__.py b/src/openmc/lib/__init__.py similarity index 100% rename from openmc/lib/__init__.py rename to src/openmc/lib/__init__.py diff --git a/openmc/lib/cell.py b/src/openmc/lib/cell.py similarity index 100% rename from openmc/lib/cell.py rename to src/openmc/lib/cell.py diff --git a/openmc/lib/core.py b/src/openmc/lib/core.py similarity index 100% rename from openmc/lib/core.py rename to src/openmc/lib/core.py diff --git a/openmc/lib/error.py b/src/openmc/lib/error.py similarity index 100% rename from openmc/lib/error.py rename to src/openmc/lib/error.py diff --git a/openmc/lib/filter.py b/src/openmc/lib/filter.py similarity index 100% rename from openmc/lib/filter.py rename to src/openmc/lib/filter.py diff --git a/openmc/lib/material.py b/src/openmc/lib/material.py similarity index 100% rename from openmc/lib/material.py rename to src/openmc/lib/material.py diff --git a/openmc/lib/math.py b/src/openmc/lib/math.py similarity index 100% rename from openmc/lib/math.py rename to src/openmc/lib/math.py diff --git a/openmc/lib/mesh.py b/src/openmc/lib/mesh.py similarity index 100% rename from openmc/lib/mesh.py rename to src/openmc/lib/mesh.py diff --git a/openmc/lib/nuclide.py b/src/openmc/lib/nuclide.py similarity index 100% rename from openmc/lib/nuclide.py rename to src/openmc/lib/nuclide.py diff --git a/openmc/lib/plot.py b/src/openmc/lib/plot.py similarity index 100% rename from openmc/lib/plot.py rename to src/openmc/lib/plot.py diff --git a/openmc/lib/settings.py b/src/openmc/lib/settings.py similarity index 100% rename from openmc/lib/settings.py rename to src/openmc/lib/settings.py diff --git a/openmc/lib/tally.py b/src/openmc/lib/tally.py similarity index 100% rename from openmc/lib/tally.py rename to src/openmc/lib/tally.py diff --git a/openmc/lib/weight_windows.py b/src/openmc/lib/weight_windows.py similarity index 100% rename from openmc/lib/weight_windows.py rename to src/openmc/lib/weight_windows.py diff --git a/openmc/macroscopic.py b/src/openmc/macroscopic.py similarity index 100% rename from openmc/macroscopic.py rename to src/openmc/macroscopic.py diff --git a/openmc/material.py b/src/openmc/material.py similarity index 100% rename from openmc/material.py rename to src/openmc/material.py diff --git a/openmc/mesh.py b/src/openmc/mesh.py similarity index 100% rename from openmc/mesh.py rename to src/openmc/mesh.py diff --git a/openmc/mgxs/__init__.py b/src/openmc/mgxs/__init__.py similarity index 100% rename from openmc/mgxs/__init__.py rename to src/openmc/mgxs/__init__.py diff --git a/openmc/mgxs/groups.py b/src/openmc/mgxs/groups.py similarity index 100% rename from openmc/mgxs/groups.py rename to src/openmc/mgxs/groups.py diff --git a/openmc/mgxs/library.py b/src/openmc/mgxs/library.py similarity index 100% rename from openmc/mgxs/library.py rename to src/openmc/mgxs/library.py diff --git a/openmc/mgxs/mdgxs.py b/src/openmc/mgxs/mdgxs.py similarity index 100% rename from openmc/mgxs/mdgxs.py rename to src/openmc/mgxs/mdgxs.py diff --git a/openmc/mgxs/mgxs.py b/src/openmc/mgxs/mgxs.py similarity index 100% rename from openmc/mgxs/mgxs.py rename to src/openmc/mgxs/mgxs.py diff --git a/openmc/mgxs_library.py b/src/openmc/mgxs_library.py similarity index 100% rename from openmc/mgxs_library.py rename to src/openmc/mgxs_library.py diff --git a/openmc/mixin.py b/src/openmc/mixin.py similarity index 100% rename from openmc/mixin.py rename to src/openmc/mixin.py diff --git a/openmc/model/__init__.py b/src/openmc/model/__init__.py similarity index 100% rename from openmc/model/__init__.py rename to src/openmc/model/__init__.py diff --git a/openmc/model/funcs.py b/src/openmc/model/funcs.py similarity index 100% rename from openmc/model/funcs.py rename to src/openmc/model/funcs.py diff --git a/openmc/model/model.py b/src/openmc/model/model.py similarity index 100% rename from openmc/model/model.py rename to src/openmc/model/model.py diff --git a/openmc/model/surface_composite.py b/src/openmc/model/surface_composite.py similarity index 100% rename from openmc/model/surface_composite.py rename to src/openmc/model/surface_composite.py diff --git a/openmc/model/triso.py b/src/openmc/model/triso.py similarity index 100% rename from openmc/model/triso.py rename to src/openmc/model/triso.py diff --git a/openmc/mpi.py b/src/openmc/mpi.py similarity index 100% rename from openmc/mpi.py rename to src/openmc/mpi.py diff --git a/openmc/nuclide.py b/src/openmc/nuclide.py similarity index 100% rename from openmc/nuclide.py rename to src/openmc/nuclide.py diff --git a/openmc/openmc_exec.py b/src/openmc/openmc_exec.py similarity index 100% rename from openmc/openmc_exec.py rename to src/openmc/openmc_exec.py diff --git a/openmc/openmoc_compatible.py b/src/openmc/openmoc_compatible.py similarity index 100% rename from openmc/openmoc_compatible.py rename to src/openmc/openmoc_compatible.py diff --git a/openmc/particle_restart.py b/src/openmc/particle_restart.py similarity index 100% rename from openmc/particle_restart.py rename to src/openmc/particle_restart.py diff --git a/openmc/plots.py b/src/openmc/plots.py similarity index 100% rename from openmc/plots.py rename to src/openmc/plots.py diff --git a/openmc/plotter.py b/src/openmc/plotter.py similarity index 100% rename from openmc/plotter.py rename to src/openmc/plotter.py diff --git a/openmc/polynomial.py b/src/openmc/polynomial.py similarity index 100% rename from openmc/polynomial.py rename to src/openmc/polynomial.py diff --git a/openmc/region.py b/src/openmc/region.py similarity index 100% rename from openmc/region.py rename to src/openmc/region.py diff --git a/openmc/search.py b/src/openmc/search.py similarity index 100% rename from openmc/search.py rename to src/openmc/search.py diff --git a/openmc/settings.py b/src/openmc/settings.py similarity index 100% rename from openmc/settings.py rename to src/openmc/settings.py diff --git a/openmc/source.py b/src/openmc/source.py similarity index 100% rename from openmc/source.py rename to src/openmc/source.py diff --git a/openmc/statepoint.py b/src/openmc/statepoint.py similarity index 100% rename from openmc/statepoint.py rename to src/openmc/statepoint.py diff --git a/openmc/stats/__init__.py b/src/openmc/stats/__init__.py similarity index 100% rename from openmc/stats/__init__.py rename to src/openmc/stats/__init__.py diff --git a/openmc/stats/multivariate.py b/src/openmc/stats/multivariate.py similarity index 100% rename from openmc/stats/multivariate.py rename to src/openmc/stats/multivariate.py diff --git a/openmc/stats/univariate.py b/src/openmc/stats/univariate.py similarity index 100% rename from openmc/stats/univariate.py rename to src/openmc/stats/univariate.py diff --git a/openmc/summary.py b/src/openmc/summary.py similarity index 100% rename from openmc/summary.py rename to src/openmc/summary.py diff --git a/openmc/surface.py b/src/openmc/surface.py similarity index 100% rename from openmc/surface.py rename to src/openmc/surface.py diff --git a/openmc/tallies.py b/src/openmc/tallies.py similarity index 100% rename from openmc/tallies.py rename to src/openmc/tallies.py diff --git a/openmc/tally_derivative.py b/src/openmc/tally_derivative.py similarity index 100% rename from openmc/tally_derivative.py rename to src/openmc/tally_derivative.py diff --git a/openmc/tracks.py b/src/openmc/tracks.py similarity index 100% rename from openmc/tracks.py rename to src/openmc/tracks.py diff --git a/openmc/trigger.py b/src/openmc/trigger.py similarity index 100% rename from openmc/trigger.py rename to src/openmc/trigger.py diff --git a/openmc/universe.py b/src/openmc/universe.py similarity index 100% rename from openmc/universe.py rename to src/openmc/universe.py diff --git a/openmc/utility_funcs.py b/src/openmc/utility_funcs.py similarity index 100% rename from openmc/utility_funcs.py rename to src/openmc/utility_funcs.py diff --git a/openmc/volume.py b/src/openmc/volume.py similarity index 100% rename from openmc/volume.py rename to src/openmc/volume.py diff --git a/openmc/weight_windows.py b/src/openmc/weight_windows.py similarity index 100% rename from openmc/weight_windows.py rename to src/openmc/weight_windows.py From fbda53058e92c22ce7fd307cad98a30c7e5685e8 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 18 Oct 2024 00:50:00 +0600 Subject: [PATCH 062/145] update lib paths --- CMakeLists.txt | 21 +++++++-------------- cmake/OpenMCConfig.cmake.in | 2 +- src/openmc/__init__.py | 30 ++++++++++++++++++++++++++++++ src/openmc/lib/__init__.py | 12 ++---------- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8ec7ab23db..1df0b882208 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -337,9 +337,7 @@ if(SKBUILD) # Scikit-build installs OpenMC to ${SKBUILD_PLATLIB_DIR}/openmc # So, set bin directory to root environment (install prefix/bin) set(CMAKE_INSTALL_BINDIR ${SKBUILD_SCRIPTS_DIR}) - # Unfortunately, OpenMC has lib directory in the openmc/lib subdirectory - set(CMAKE_INSTALL_LIBDIR lib) - set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_HEADERS_DIR}) + set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_SUBDIR}/${CMAKE_INSTALL_INCLUDEDIR}) set(CMAKE_INSTALL_DATADIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DATADIR}) set(CMAKE_INSTALL_DOCDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DOCDIR}) set(CMAKE_INSTALL_INFODIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_INFODIR}) @@ -347,26 +345,21 @@ if(SKBUILD) set(CMAKE_INSTALL_LOCALEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALEDIR}) set(CMAKE_INSTALL_LOCALSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALSTATEDIR}) set(CMAKE_INSTALL_RUNSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_RUNSTATEDIR}) - set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${CMAKE_INSTALL_LIBDIR}) + set(SKBUILD_SUBDIR core/) + set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR}) # Auditwheel and Delocate need this when repairing the wheel # Since OpenMC libs are installed in the openmc subdirectory # Auditwheel and Delocate need this to find the OpenMC libs for openmc.data # It's a bit of a hack, but it works - set(SKBUILD_REPAIR_WHEEL_PATCH openmc/${CMAKE_INSTALL_LIBDIR}) + set(SKBUILD_REPAIR_WHEEL_PATCH openmc/${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR}) if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(OPENMC_LIBRARY_RPATH "@loader_path") - set(OPENMC_PYTHON_MODULE_RPATH "@loader_path/${CMAKE_INSTALL_LIBDIR}") set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../../${SKBUILD_REPAIR_WHEEL_PATCH}") elseif(UNIX) set(OPENMC_LIBRARY_RPATH "$ORIGIN") - set(OPENMC_PYTHON_MODULE_RPATH "$ORIGIN/${CMAKE_INSTALL_LIBDIR}") set(OPENMC_BINARY_RPATH "$ORIGIN/../${SKBUILD_LIB_DIR};$ORIGIN/../${SKBUILD_REPAIR_WHEEL_PATCH};$ORIGIN/../../${SKBUILD_REPAIR_WHEEL_PATCH}") - else() - set(OPENMC_LIBRARY_RPATH OFF) - set(OPENMC_PYTHON_MODULE_RPATH OFF) - set(OPENMC_BINARY_RPATH OFF) endif() else() # use, i.e. don't skip the full RPATH for the build tree @@ -672,7 +665,7 @@ endif() install(TARGETS openmc libopenmc EXPORT openmc-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) @@ -696,5 +689,5 @@ install(FILES DESTINATION ${INSTALL_CONFIGDIR}) install(FILES man/man1/openmc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES LICENSE DESTINATION "${CMAKE_INSTALL_DOCDIR}" RENAME copyright) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/openmc) +install(DIRECTORY include/ DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_INCLUDEDIR}) +install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_INCLUDEDIR}/openmc) diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index 5323495d077..ece6f1bd342 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -46,7 +46,7 @@ if(@SKBUILD@) # Extract MOAB include paths, library paths, and extra libraries run_python_command(OpenMC_INCLUDE_DIRS "import openmc; print(openmc.include_path)") - run_python_command(OpenMC_LIBRARY_DIRS "import openmc; print(openmc.lib_path)") + run_python_command(OpenMC_LIBRARY_DIRS "import openmc; print(' '.join(openmc.lib_path))") run_python_command(OpenMC_EXTRA_LIBRARIES "import openmc; print(' '.join(openmc.extra_lib))") # Check if the wheel was repaired using auditwheel or delocate diff --git a/src/openmc/__init__.py b/src/openmc/__init__.py index 32320365d58..db070fd6a45 100644 --- a/src/openmc/__init__.py +++ b/src/openmc/__init__.py @@ -1,3 +1,5 @@ +import os +import glob import importlib.metadata from openmc.arithmetic import * from openmc.bounding_box import * @@ -43,3 +45,31 @@ __version__ = importlib.metadata.version("openmc") + +def get_path(subdir, pattern=""): + """Helper function to return paths that match a given pattern within a subdirectory.""" + path = os.path.join(__path__[0], "core", subdir) + return glob.glob(os.path.join(path, pattern)) if os.path.exists(path) else [] + +def get_include_path(): + """Return the include directory path for OpenMC headers.""" + return get_path("include") + +def get_core_libraries(): + """Return library paths and library directory paths.""" + lib_paths = [libs for lib in ["lib", "lib64"] for libs in get_path(lib)] + lib = [libs for lib in ["lib", "lib64"] for libs in get_path(lib, pattern="*openmc*")] + return lib, lib_paths + +def get_extra_libraries(): + """List all the extra libraries of OpenMC.""" + libs_path = os.path.join(__path__[0], ".dylibs") if sys.platform == "darwin" else os.path.join(__path__[0], "..", "pyne.libs") + return (glob.glob(os.path.join(libs_path, "*")), libs_path) if os.path.exists(libs_path) else ([], []) + +# Setup variables +include_path = get_include_path() +lib, lib_path = get_core_libraries() +extra_lib, extra_lib_path = get_extra_libraries() + +# Export variables for easy access +__all__ = ["include_path", "lib", "lib_path", "extra_lib", "extra_lib_path"] diff --git a/src/openmc/lib/__init__.py b/src/openmc/lib/__init__.py index 9bb2efb38af..cd49665a5f3 100644 --- a/src/openmc/lib/__init__.py +++ b/src/openmc/lib/__init__.py @@ -13,20 +13,12 @@ """ from ctypes import CDLL, c_bool, c_int -import importlib.resources import os -import sys - - -# Determine shared-library suffix -if sys.platform == 'darwin': - _suffix = 'dylib' -else: - _suffix = 'so' if os.environ.get('READTHEDOCS', None) != 'True': # Open shared library - _filename = importlib.resources.files(__name__) / f'libopenmc.{_suffix}' + import openmc + _filename = openmc.lib[0] _dll = CDLL(str(_filename)) # TODO: Remove str() when Python 3.12+ else: # For documentation builds, we don't actually have the shared library From 0d3f6f20f632214841c23111b39a317b761eb0ec Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 18 Oct 2024 20:53:02 +0600 Subject: [PATCH 063/145] add include --- cmake/OpenMCConfig.cmake.in | 2 +- src/openmc/__init__.py | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index ece6f1bd342..e62849c78e6 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -45,7 +45,7 @@ if(@SKBUILD@) endfunction() # Extract MOAB include paths, library paths, and extra libraries - run_python_command(OpenMC_INCLUDE_DIRS "import openmc; print(openmc.include_path)") + run_python_command(OpenMC_INCLUDE_DIRS "import openmc; print(' '.join(openmc.include_path))") run_python_command(OpenMC_LIBRARY_DIRS "import openmc; print(' '.join(openmc.lib_path))") run_python_command(OpenMC_EXTRA_LIBRARIES "import openmc; print(' '.join(openmc.extra_lib))") diff --git a/src/openmc/__init__.py b/src/openmc/__init__.py index db070fd6a45..4b14ce53452 100644 --- a/src/openmc/__init__.py +++ b/src/openmc/__init__.py @@ -46,30 +46,32 @@ __version__ = importlib.metadata.version("openmc") -def get_path(subdir, pattern=""): +def get_core_path(subdir, pattern="*"): """Helper function to return paths that match a given pattern within a subdirectory.""" path = os.path.join(__path__[0], "core", subdir) return glob.glob(os.path.join(path, pattern)) if os.path.exists(path) else [] def get_include_path(): """Return the include directory path for OpenMC headers.""" - return get_path("include") + include = get_core_path("include") + include_path = get_core_path("include", "") + return include, include_path def get_core_libraries(): """Return library paths and library directory paths.""" - lib_paths = [libs for lib in ["lib", "lib64"] for libs in get_path(lib)] - lib = [libs for lib in ["lib", "lib64"] for libs in get_path(lib, pattern="*openmc*")] + lib = [libs for lib in ["lib", "lib64"] for libs in get_core_path(lib)] + lib_paths = [libs for lib in ["lib", "lib64"] for libs in get_core_path(lib, "")] return lib, lib_paths def get_extra_libraries(): - """List all the extra libraries of OpenMC.""" - libs_path = os.path.join(__path__[0], ".dylibs") if sys.platform == "darwin" else os.path.join(__path__[0], "..", "pyne.libs") + """List all the extra libraries.""" + libs_path = os.path.join(__path__[0], ".dylibs") if sys.platform == "darwin" else os.path.join(__path__[0], "..", "openmc.libs") return (glob.glob(os.path.join(libs_path, "*")), libs_path) if os.path.exists(libs_path) else ([], []) # Setup variables -include_path = get_include_path() +include, include_path = get_include_path() lib, lib_path = get_core_libraries() extra_lib, extra_lib_path = get_extra_libraries() # Export variables for easy access -__all__ = ["include_path", "lib", "lib_path", "extra_lib", "extra_lib_path"] +__all__ = ["include", "include_path", "lib", "lib_path", "extra_lib", "extra_lib_path"] From af0f1d5ccf70a84373f53215a0c7416713abf11e Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 02:27:34 +0600 Subject: [PATCH 064/145] add openmc.in --- CMakeLists.txt | 54 +++++++++++++++++++++++++------------------------ cmake/openmc.in | 12 +++++++++++ 2 files changed, 40 insertions(+), 26 deletions(-) create mode 100644 cmake/openmc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 1df0b882208..e83b654f01a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -334,10 +334,11 @@ if(SKBUILD) COMPONENTS Interpreter REQUIRED ) - # Scikit-build installs OpenMC to ${SKBUILD_PLATLIB_DIR}/openmc - # So, set bin directory to root environment (install prefix/bin) - set(CMAKE_INSTALL_BINDIR ${SKBUILD_SCRIPTS_DIR}) - set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_SUBDIR}/${CMAKE_INSTALL_INCLUDEDIR}) + # By default, scikit-build will install everything to ${SKBUILD_PLATLIB_DIR}/openmc + # Install include and bin directories to ${SKBUILD_PLATLIB_DIR}/openmc/SKBUILD_SUBDIR + set(SKBUILD_SUBDIR core/) + set(CMAKE_INSTALL_BINDIR ${SKBUILD_SUBDIR}${CMAKE_INSTALL_BINDIR}) + set(CMAKE_INSTALL_INCLUDEDIR ${SKBUILD_SUBDIR}${CMAKE_INSTALL_INCLUDEDIR}) set(CMAKE_INSTALL_DATADIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DATADIR}) set(CMAKE_INSTALL_DOCDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_DOCDIR}) set(CMAKE_INSTALL_INFODIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_INFODIR}) @@ -345,21 +346,13 @@ if(SKBUILD) set(CMAKE_INSTALL_LOCALEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALEDIR}) set(CMAKE_INSTALL_LOCALSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALSTATEDIR}) set(CMAKE_INSTALL_RUNSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_RUNSTATEDIR}) - set(SKBUILD_SUBDIR core/) - set(SKBUILD_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/openmc/${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR}) - - # Auditwheel and Delocate need this when repairing the wheel - # Since OpenMC libs are installed in the openmc subdirectory - # Auditwheel and Delocate need this to find the OpenMC libs for openmc.data - # It's a bit of a hack, but it works - set(SKBUILD_REPAIR_WHEEL_PATCH openmc/${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR}) if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(OPENMC_LIBRARY_RPATH "@loader_path") - set(OPENMC_BINARY_RPATH "@loader_path/../${SKBUILD_LIB_DIR};@loader_path/../../${SKBUILD_REPAIR_WHEEL_PATCH}") + set(OPENMC_BINARY_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR}") elseif(UNIX) set(OPENMC_LIBRARY_RPATH "$ORIGIN") - set(OPENMC_BINARY_RPATH "$ORIGIN/../${SKBUILD_LIB_DIR};$ORIGIN/../${SKBUILD_REPAIR_WHEEL_PATCH};$ORIGIN/../../${SKBUILD_REPAIR_WHEEL_PATCH}") + set(OPENMC_BINARY_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") endif() else() # use, i.e. don't skip the full RPATH for the build tree @@ -517,7 +510,7 @@ endif() target_include_directories(libopenmc PUBLIC - $ + $ $ ${HDF5_INCLUDE_DIRS} ) @@ -666,22 +659,31 @@ install(TARGETS openmc libopenmc EXPORT openmc-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR} ) -if(NOT SKBUILD) - install(EXPORT openmc-targets - FILE OpenMCTargets.cmake - NAMESPACE OpenMC:: - DESTINATION ${INSTALL_CONFIGDIR} - ) -endif() +set(INSTALL_TARGETDIR ${SKBUILD_SUBDIR}${CMAKE_INSTALL_LIBDIR}/cmake/OpenMC) +install(EXPORT openmc-targets + FILE OpenMCTargets.cmake + NAMESPACE OpenMC:: + DESTINATION ${INSTALL_TARGETDIR} +) # Collect scripts file(GLOB SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/*") # Install scripts to bin directory -install(PROGRAMS ${SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR}) +if(SKBUILD) + install(PROGRAMS ${SCRIPTS} DESTINATION ${SKBUILD_SCRIPTS_DIR}) +else() + install(PROGRAMS ${SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + +# Install openmc script +if(SKBUILD) + configure_file(cmake/openmc.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/openmc" @ONLY) + install(PROGRAMS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/openmc" DESTINATION ${SKBUILD_SCRIPTS_DIR}) +endif() install(FILES "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" @@ -689,5 +691,5 @@ install(FILES DESTINATION ${INSTALL_CONFIGDIR}) install(FILES man/man1/openmc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES LICENSE DESTINATION "${CMAKE_INSTALL_DOCDIR}" RENAME copyright) -install(DIRECTORY include/ DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${SKBUILD_SUBDIR}${CMAKE_INSTALL_INCLUDEDIR}/openmc) +install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(FILES "${CMAKE_BINARY_DIR}/include/openmc/version.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/openmc) diff --git a/cmake/openmc.in b/cmake/openmc.in new file mode 100644 index 00000000000..e0cffe9950a --- /dev/null +++ b/cmake/openmc.in @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 + +import os +import sys +import sysconfig + + +if __name__ == "__main__": + os.execv( + os.path.join(sysconfig.get_path("platlib"), 'openmc', '@CMAKE_INSTALL_BINDIR@', 'openmc'), + sys.argv, + ) \ No newline at end of file From e2802f34b352489688eff913011af0ae3c207e9b Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 02:31:01 +0600 Subject: [PATCH 065/145] use OpenMC targets --- cmake/OpenMCConfig.cmake.in | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index e62849c78e6..aa276bb7eab 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -5,6 +5,9 @@ find_package(gsl-lite REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../gsl-lite) find_package(pugixml REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../pugixml) find_package(xtl REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../xtl) find_package(xtensor REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../xtensor) + +find_package(HDF5 REQUIRED COMPONENTS C HL) + if(@OPENMC_USE_DAGMC@) find_package(DAGMC REQUIRED HINTS @DAGMC_DIR@) endif() @@ -60,32 +63,10 @@ if(@SKBUILD@) "For more information, visit: https://docs.openmc.org/" ) endif() - - # Find the core library - find_library(OpenMC_LIBRARY - NAMES openmc - HINTS ${OpenMC_LIBRARY_DIRS} - NO_DEFAULT_PATH - ) - - # Add the core library as an imported target - add_library(OpenMC::libopenmc UNKNOWN IMPORTED) - set_target_properties(OpenMC::libopenmc PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OpenMC_INCLUDE_DIRS}" - IMPORTED_LOCATION "${OpenMC_LIBRARY}" - ) - - # Add the core library to the list of libraries - set(OpenMC_LIBRARIES ${OpenMC_LIBRARY}) - - # Include standard argument handling for finding packages - include(FindPackageHandleStandardArgs) - - # Validates that the necessary variables are set - find_package_handle_standard_args(MOAB - REQUIRED_VARS OpenMC_LIBRARIES OpenMC_INCLUDE_DIRS - VERSION_VAR @OPENMC_VERSION@ - ) + + # Add OpenMC targets + file(TO_CMAKE_PATH "${OpenMC_LIBRARY_DIRS}/cmake/OpenMC/OpenMCTargets.cmake" OpenMC_TARGETS_FILE) + include(${OpenMC_TARGETS_FILE}) elseif(NOT TARGET OpenMC::libopenmc) include("${OpenMC_CMAKE_DIR}/OpenMCTargets.cmake") endif() From db1d8d1cbc5cabc8f9b6e3cdacbc5a723f6d58fb Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 02:53:18 +0600 Subject: [PATCH 066/145] install source version --- tools/ci/manylinux.dockerfile | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index ea60b38175c..e9a3521a9d5 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -96,8 +96,7 @@ RUN yum install -y epel-release && \ yum clean all # Set up environment variables for shared libraries -ENV LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH - +ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH # Compiler configuration stage: gcc FROM base AS compiler-gcc @@ -331,8 +330,8 @@ FROM dependencies AS python-dependencies ARG Python_ABI # Use Python from manylinux as the default Python +ENV PYTHONHOME="/opt/python/${Python_ABI}" ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" -RUN ln -sf /opt/python/${Python_ABI}/bin/python3 /usr/bin/python # Build and install NCrystal ARG NCrystal_TAG @@ -420,15 +419,20 @@ RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] & cd $HOME/openmc && \ python -m build . -w -# Repair wheel -RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ - # Install OpenMC wheel RUN python -m pip install \ - "$(echo $HOME/openmc/dist/*manylinux**.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" + "$(echo $HOME/openmc/dist/*.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" # Test OpenMC RUN cd $HOME/openmc && \ eval $(ncrystal-config --setup) && \ nctool --test && \ pytest --cov=openmc -v $([ ${COMPILER} == 'openmpi' ] && echo '--mpi') --event tests + +# Repair wheel +RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ + +# Test repaired wheel +RUN python -m pip uninstall openmc -y && \ + python -m pip install $HOME/openmc/dist/*manylinux**.whl && \ + openmc --version \ No newline at end of file From 7a0a56d12750806d39ce9b9c37c66027b910f336 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 11:44:43 +0600 Subject: [PATCH 067/145] add SKBUILDScripts.cmake --- CMakeLists.txt | 25 +++++++++++-------------- cmake/SKBUILDScripts.cmake | 24 ++++++++++++++++++++++++ cmake/openmc.in | 12 ------------ 3 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 cmake/SKBUILDScripts.cmake delete mode 100644 cmake/openmc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index e83b654f01a..c611e5a55fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,11 +16,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # Set module path set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) -# Conditionally find Python if building with scikit-build-core -if(SKBUILD) - find_package(Python COMPONENTS Interpreter Development.Module REQUIRED) -endif() - # Enable correct usage of CXX_EXTENSIONS if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22) cmake_policy(SET CMP0128 NEW) @@ -328,12 +323,6 @@ include(GNUInstallDirs) if(SKBUILD) - # Find necessary packages - find_package( - Python - COMPONENTS Interpreter - REQUIRED - ) # By default, scikit-build will install everything to ${SKBUILD_PLATLIB_DIR}/openmc # Install include and bin directories to ${SKBUILD_PLATLIB_DIR}/openmc/SKBUILD_SUBDIR set(SKBUILD_SUBDIR core/) @@ -346,6 +335,11 @@ if(SKBUILD) set(CMAKE_INSTALL_LOCALEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALEDIR}) set(CMAKE_INSTALL_LOCALSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALSTATEDIR}) set(CMAKE_INSTALL_RUNSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_RUNSTATEDIR}) + + # Include the SKBUILDScripts.cmake file + include(cmake/SKBUILDScripts.cmake) + + # Set RPATH if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(OPENMC_LIBRARY_RPATH "@loader_path") @@ -634,6 +628,10 @@ target_compile_features(openmc PUBLIC cxx_std_17) target_compile_features(libopenmc PUBLIC cxx_std_17) set_target_properties(openmc libopenmc PROPERTIES CXX_EXTENSIONS OFF) +# Add openmc executable to SKBUILD_SCRIPT_LIST +list(APPEND SKBUILD_SCRIPT_LIST openmc) + +# Set rpath for openmc executable if(OPENMC_BINARY_RPATH) set_target_properties( openmc @@ -679,10 +677,9 @@ else() install(PROGRAMS ${SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -# Install openmc script +# Generate and install the SKBUILD scripts if(SKBUILD) - configure_file(cmake/openmc.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/openmc" @ONLY) - install(PROGRAMS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/openmc" DESTINATION ${SKBUILD_SCRIPTS_DIR}) + generate_and_install_scripts(${SKBUILD_SCRIPT_LIST}) endif() install(FILES diff --git a/cmake/SKBUILDScripts.cmake b/cmake/SKBUILDScripts.cmake new file mode 100644 index 00000000000..da86ee801f1 --- /dev/null +++ b/cmake/SKBUILDScripts.cmake @@ -0,0 +1,24 @@ +# Function to create and install the binary scripts +function(generate_and_install_scripts SCRIPT_LIST) + foreach(SCRIPT_NAME ${SCRIPT_LIST}) + # Define the output path for each generated script + set(GENERATED_SCRIPT "${CMAKE_BINARY_DIR}/${SCRIPT_NAME}") + + # Generate the script content directly + file(WRITE "${GENERATED_SCRIPT}" "#!/usr/bin/env python3\n\n") + file(APPEND "${GENERATED_SCRIPT}" "import os\n") + file(APPEND "${GENERATED_SCRIPT}" "import sys\n") + file(APPEND "${GENERATED_SCRIPT}" "import sysconfig\n\n") + file(APPEND "${GENERATED_SCRIPT}" "if __name__ == '__main__':\n") + file(APPEND "${GENERATED_SCRIPT}" " os.execv(\n") + file(APPEND "${GENERATED_SCRIPT}" " os.path.join(sysconfig.get_path('platlib'), '${SKBUILD_PROJECT_NAME}', '${CMAKE_INSTALL_BINDIR}', '${SCRIPT_NAME}'),\n") + file(APPEND "${GENERATED_SCRIPT}" " sys.argv,\n") + file(APPEND "${GENERATED_SCRIPT}" " )\n") + + # Install the generated script + install( + PROGRAMS "${GENERATED_SCRIPT}" + DESTINATION "${SKBUILD_SCRIPTS_DIR}" + ) + endforeach() +endfunction() diff --git a/cmake/openmc.in b/cmake/openmc.in deleted file mode 100644 index e0cffe9950a..00000000000 --- a/cmake/openmc.in +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import sysconfig - - -if __name__ == "__main__": - os.execv( - os.path.join(sysconfig.get_path("platlib"), 'openmc', '@CMAKE_INSTALL_BINDIR@', 'openmc'), - sys.argv, - ) \ No newline at end of file From 8dabae4d49d85710b553ef4319565d37f59e9876 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 12:16:38 +0600 Subject: [PATCH 068/145] update get_core_path --- src/openmc/__init__.py | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/openmc/__init__.py b/src/openmc/__init__.py index 4b14ce53452..7f6dedadc9d 100644 --- a/src/openmc/__init__.py +++ b/src/openmc/__init__.py @@ -46,26 +46,37 @@ __version__ = importlib.metadata.version("openmc") -def get_core_path(subdir, pattern="*"): - """Helper function to return paths that match a given pattern within a subdirectory.""" +def get_core_path(subdir, pattern="*", recursive=False): + """ + Helper function to return paths that match a given pattern within a subdirectory. + + Args: + subdir (str): The subdirectory within the 'core' directory. + pattern (str): The pattern to match files or directories. + recursive (bool): Whether to search recursively in subdirectories. + + Returns: + list: A list of matched paths. + """ path = os.path.join(__path__[0], "core", subdir) - return glob.glob(os.path.join(path, pattern)) if os.path.exists(path) else [] + search_pattern = os.path.join(path, "**", pattern) if recursive else os.path.join(path, pattern) + return glob.glob(search_pattern, recursive=recursive) if os.path.exists(path) else [] def get_include_path(): - """Return the include directory path for OpenMC headers.""" - include = get_core_path("include") - include_path = get_core_path("include", "") + """Return includes and include path for OpenMC headers.""" + include = get_core_path("include", "*", recursive=True) + include_path = get_core_path("include", "", recursive=False) return include, include_path def get_core_libraries(): - """Return library paths and library directory paths.""" - lib = [libs for lib in ["lib", "lib64"] for libs in get_core_path(lib)] - lib_paths = [libs for lib in ["lib", "lib64"] for libs in get_core_path(lib, "")] - return lib, lib_paths + """Return libraries and library paths for OpenMC.""" + lib = [lib_file for lib in ["lib", "lib64"] for lib_file in get_core_path(lib, "libopenmc*", recursive=True)] + lib_path = [lib_file for lib in ["lib", "lib64"] for lib_file in get_core_path(lib, "", recursive=False)] + return lib, lib_path def get_extra_libraries(): - """List all the extra libraries.""" - libs_path = os.path.join(__path__[0], ".dylibs") if sys.platform == "darwin" else os.path.join(__path__[0], "..", "openmc.libs") + """Return the extra libraries installed by auditwheel or delocate.""" + libs_path = os.path.join(__path__[0], ".dylibs") if sys.platform == "darwin" else os.path.normpath(os.path.join(__path__[0], "..", "openmc.libs")) return (glob.glob(os.path.join(libs_path, "*")), libs_path) if os.path.exists(libs_path) else ([], []) # Setup variables @@ -74,4 +85,4 @@ def get_extra_libraries(): extra_lib, extra_lib_path = get_extra_libraries() # Export variables for easy access -__all__ = ["include", "include_path", "lib", "lib_path", "extra_lib", "extra_lib_path"] +__all__ = ["include", "include_path", "lib", "lib_path", "extra_lib", "extra_lib_path"] \ No newline at end of file From b8f634c1af52a4eefae54aa97208480113736f30 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 12:22:08 +0600 Subject: [PATCH 069/145] add /usr/local/lib/ to lib path --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c201b003c6..5214aed9901 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,6 +98,7 @@ jobs: run: | echo "OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml" >> $GITHUB_ENV echo "OPENMC_ENDF_DATA=$HOME/endf-b-vii.1" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV - name: Apt dependencies shell: bash From 73cd2669a9148770bbb1348930b221d56c78f600 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 12:23:07 +0600 Subject: [PATCH 070/145] remove file openmc_exec --- src/openmc/openmc_exec.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 src/openmc/openmc_exec.py diff --git a/src/openmc/openmc_exec.py b/src/openmc/openmc_exec.py deleted file mode 100644 index 579eeced24f..00000000000 --- a/src/openmc/openmc_exec.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python3 - -# helper script that launches the openmc binary - -import os -import sys -import sysconfig -from pathlib import Path - - -def main(): - os.execv( - Path(sysconfig.get_path("platlib")) / "openmc" / "bin" / "openmc", sys.argv - ) - - -if __name__ == "__main__": - main() From ea6fab9789ff003fedef7f8cd12fa26479fc947a Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 13:29:34 +0600 Subject: [PATCH 071/145] remove openmc_exec --- src/openmc/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openmc/__init__.py b/src/openmc/__init__.py index 7f6dedadc9d..9c95c4f0ea2 100644 --- a/src/openmc/__init__.py +++ b/src/openmc/__init__.py @@ -36,7 +36,6 @@ from openmc.polynomial import * from openmc.tracks import * from .config import * -from .openmc_exec import main # Import a few names from the model module from openmc.model import Model From e51918979cf7f74f31002341644f71014a3a768f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 14:39:52 +0600 Subject: [PATCH 072/145] Allow CMAKE_INSTALL_RPATH_USE_LINK_PATH --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c611e5a55fb..57253f61cdb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -356,16 +356,16 @@ else() # (but later on when installing) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - # add the automatically determined parts of the RPATH - # which point to directories outside the build tree to the install RPATH - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - # the RPATH to be used when installing, but only if it's not a system directory list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemDir) if("${isSystemDir}" STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") endif() endif() + +# add the automatically determined parts of the RPATH +# which point to directories outside the build tree to the install RPATH +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) #=============================================================================== # libopenmc #=============================================================================== From 32d96e2d4cdfab80e90dd316265b360a32e61cd4 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 18:07:35 +0600 Subject: [PATCH 073/145] renamed to GenerateScript.cmake --- CMakeLists.txt | 11 ++++----- ...UILDScripts.cmake => GenerateScript.cmake} | 23 +++++++++++++------ 2 files changed, 20 insertions(+), 14 deletions(-) rename cmake/{SKBUILDScripts.cmake => GenerateScript.cmake} (55%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57253f61cdb..31bc71fa0ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,9 @@ foreach(OLD_BLD in ITEMS "debug" "optimize") endif() endforeach() +# Include the GenerateScript.cmake file +include(cmake/GenerateScript.cmake) + #=============================================================================== # Set a default build configuration if not explicitly specified #=============================================================================== @@ -628,8 +631,7 @@ target_compile_features(openmc PUBLIC cxx_std_17) target_compile_features(libopenmc PUBLIC cxx_std_17) set_target_properties(openmc libopenmc PROPERTIES CXX_EXTENSIONS OFF) -# Add openmc executable to SKBUILD_SCRIPT_LIST -list(APPEND SKBUILD_SCRIPT_LIST openmc) +generate_and_install_python_script(openmc) # Set rpath for openmc executable if(OPENMC_BINARY_RPATH) @@ -677,11 +679,6 @@ else() install(PROGRAMS ${SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -# Generate and install the SKBUILD scripts -if(SKBUILD) - generate_and_install_scripts(${SKBUILD_SCRIPT_LIST}) -endif() - install(FILES "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" diff --git a/cmake/SKBUILDScripts.cmake b/cmake/GenerateScript.cmake similarity index 55% rename from cmake/SKBUILDScripts.cmake rename to cmake/GenerateScript.cmake index da86ee801f1..553c3dc1627 100644 --- a/cmake/SKBUILDScripts.cmake +++ b/cmake/GenerateScript.cmake @@ -1,8 +1,17 @@ -# Function to create and install the binary scripts -function(generate_and_install_scripts SCRIPT_LIST) - foreach(SCRIPT_NAME ${SCRIPT_LIST}) - # Define the output path for each generated script - set(GENERATED_SCRIPT "${CMAKE_BINARY_DIR}/${SCRIPT_NAME}") +# Function to generate and install a Python script +# This function creates a Python script with a specified name, writes content to it, +# and installs it to a specified location. +# +# Arguments: +# SCRIPT_NAME - The name of the script to be generated (e.g., 'my_script'). +# +function(generate_and_install_python_script SCRIPT_NAME) + if(SKBUILD) + # Strip any leading/trailing whitespace from the script name + string(STRIP "${SCRIPT_NAME}" CLEAN_SCRIPT_NAME) + + # Define the output path for the generated script using the cleaned name + set(GENERATED_SCRIPT "${CMAKE_BINARY_DIR}/${CLEAN_SCRIPT_NAME}") # Generate the script content directly file(WRITE "${GENERATED_SCRIPT}" "#!/usr/bin/env python3\n\n") @@ -11,7 +20,7 @@ function(generate_and_install_scripts SCRIPT_LIST) file(APPEND "${GENERATED_SCRIPT}" "import sysconfig\n\n") file(APPEND "${GENERATED_SCRIPT}" "if __name__ == '__main__':\n") file(APPEND "${GENERATED_SCRIPT}" " os.execv(\n") - file(APPEND "${GENERATED_SCRIPT}" " os.path.join(sysconfig.get_path('platlib'), '${SKBUILD_PROJECT_NAME}', '${CMAKE_INSTALL_BINDIR}', '${SCRIPT_NAME}'),\n") + file(APPEND "${GENERATED_SCRIPT}" " os.path.join(sysconfig.get_path('platlib'), '${SKBUILD_PROJECT_NAME}', '${CMAKE_INSTALL_BINDIR}', '${CLEAN_SCRIPT_NAME}'),\n") file(APPEND "${GENERATED_SCRIPT}" " sys.argv,\n") file(APPEND "${GENERATED_SCRIPT}" " )\n") @@ -20,5 +29,5 @@ function(generate_and_install_scripts SCRIPT_LIST) PROGRAMS "${GENERATED_SCRIPT}" DESTINATION "${SKBUILD_SCRIPTS_DIR}" ) - endforeach() + endif() endfunction() From f52ff64e17003e1c39493ed126b90097e62b7460 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 20 Oct 2024 18:16:23 +0600 Subject: [PATCH 074/145] remove SKBUILDScripts --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31bc71fa0ae..36fb0fada6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -338,9 +338,6 @@ if(SKBUILD) set(CMAKE_INSTALL_LOCALEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALEDIR}) set(CMAKE_INSTALL_LOCALSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_LOCALSTATEDIR}) set(CMAKE_INSTALL_RUNSTATEDIR ${SKBUILD_DATA_DIR}/${CMAKE_INSTALL_RUNSTATEDIR}) - - # Include the SKBUILDScripts.cmake file - include(cmake/SKBUILDScripts.cmake) # Set RPATH if(APPLE) From d1f8ae338ecd218123489306c595f8ddce4d1154 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 22 Oct 2024 09:40:24 +0600 Subject: [PATCH 075/145] revert --- tests/regression_tests/triso/results_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/regression_tests/triso/results_true.dat b/tests/regression_tests/triso/results_true.dat index a24354045e2..fa1842e547d 100644 --- a/tests/regression_tests/triso/results_true.dat +++ b/tests/regression_tests/triso/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.716873E+00 5.266094E-02 +1.716873E+00 5.266107E-02 From ddb6c96ef1339d45759e4d1f7d83ff7391e0aff4 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 22 Oct 2024 09:58:54 +0600 Subject: [PATCH 076/145] update to 1.8 --- .github/workflows/docker-publish-manylinux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml index 073b9db5074..8dacdd556b6 100644 --- a/.github/workflows/docker-publish-manylinux.yml +++ b/.github/workflows/docker-publish-manylinux.yml @@ -52,7 +52,7 @@ jobs: echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" - name: Installing Dependencies in Docker image - uses: firehed/multistage-docker-build-action@v1 + uses: firehed/multistage-docker-build-action@v1.8 with: repository: ${{ env.image_base_tag }} stages: base, dependencies, python-dependencies From c1bcb8c7412bf6e737e051a9badb236b64a4f137 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Fri, 8 Nov 2024 15:27:40 +0100 Subject: [PATCH 077/145] reduced diff --- pyproject.toml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5d1837bec4c..f940fd1538d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,12 +4,12 @@ build-backend = "scikit_build_core.build" [project] name = "openmc" -version = "0.15.1-dev" authors = [ {name = "The OpenMC Development Team", email = "openmc@anl.gov"}, ] -description = "OpenMC is a community-developed Monte Carlo neutron and photon transport code." -readme = "README.md" +description = "OpenMC" +version = "0.15.1-dev" +requires-python = ">=3.10" license = {file = "LICENSE"} classifiers = [ "Development Status :: 4 - Beta", @@ -25,7 +25,6 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] -requires-python = ">=3.10" dependencies = [ "numpy", "h5py", From 6065c6953c7dc8fcef93e4e6ee0a46cf78028685 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Fri, 8 Nov 2024 15:30:07 +0100 Subject: [PATCH 078/145] reducing diff --- tools/ci/gha-install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index 43b53adb8d4..7d1048ff35c 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -1,6 +1,6 @@ import os -import subprocess import shutil +import subprocess def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrystal=False): From 22175210e32c821a5decaebdc1a6ab95ca1c967d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 27 Nov 2024 15:15:43 +0600 Subject: [PATCH 079/145] prepare for merge --- {src/openmc => openmc}/__init__.py | 0 {src/openmc => openmc}/_xml.py | 0 {src/openmc => openmc}/arithmetic.py | 0 {src/openmc => openmc}/bounding_box.py | 0 {src/openmc => openmc}/cell.py | 0 {src/openmc => openmc}/checkvalue.py | 0 {src/openmc => openmc}/cmfd.py | 0 {src/openmc => openmc}/config.py | 0 {src/openmc => openmc}/data/BREMX.DAT | 0 {src/openmc => openmc}/data/__init__.py | 0 {src/openmc => openmc}/data/ace.py | 0 {src/openmc => openmc}/data/angle_distribution.py | 0 {src/openmc => openmc}/data/angle_energy.py | 0 {src/openmc => openmc}/data/correlated.py | 0 {src/openmc => openmc}/data/data.py | 0 {src/openmc => openmc}/data/decay.py | 0 {src/openmc => openmc}/data/effective_dose/__init__.py | 0 {src/openmc => openmc}/data/effective_dose/dose.py | 0 {src/openmc => openmc}/data/effective_dose/icrp116/electrons.txt | 0 .../openmc => openmc}/data/effective_dose/icrp116/helium_ions.txt | 0 .../data/effective_dose/icrp116/negative_muons.txt | 0 .../data/effective_dose/icrp116/negative_pions.txt | 0 {src/openmc => openmc}/data/effective_dose/icrp116/neutrons.txt | 0 {src/openmc => openmc}/data/effective_dose/icrp116/photons.txt | 0 .../data/effective_dose/icrp116/photons_kerma.txt | 0 .../data/effective_dose/icrp116/positive_muons.txt | 0 .../data/effective_dose/icrp116/positive_pions.txt | 0 {src/openmc => openmc}/data/effective_dose/icrp116/positrons.txt | 0 {src/openmc => openmc}/data/effective_dose/icrp116/protons.txt | 0 .../data/effective_dose/icrp74/generate_photon_effective_dose.py | 0 {src/openmc => openmc}/data/effective_dose/icrp74/neutrons.txt | 0 {src/openmc => openmc}/data/effective_dose/icrp74/photons.txt | 0 {src/openmc => openmc}/data/endf.py | 0 {src/openmc => openmc}/data/energy_distribution.py | 0 {src/openmc => openmc}/data/fission_energy.py | 0 {src/openmc => openmc}/data/function.py | 0 {src/openmc => openmc}/data/grid.py | 0 {src/openmc => openmc}/data/half_life.json | 0 {src/openmc => openmc}/data/kalbach_mann.py | 0 {src/openmc => openmc}/data/laboratory.py | 0 {src/openmc => openmc}/data/library.py | 0 {src/openmc => openmc}/data/mass_1.mas20.txt | 0 {src/openmc => openmc}/data/multipole.py | 0 {src/openmc => openmc}/data/nbody.py | 0 {src/openmc => openmc}/data/neutron.py | 0 {src/openmc => openmc}/data/njoy.py | 0 {src/openmc => openmc}/data/photon.py | 0 {src/openmc => openmc}/data/product.py | 0 {src/openmc => openmc}/data/reaction.py | 0 {src/openmc => openmc}/data/resonance.py | 0 {src/openmc => openmc}/data/resonance_covariance.py | 0 {src/openmc => openmc}/data/thermal.py | 0 {src/openmc => openmc}/data/thermal_angle_energy.py | 0 {src/openmc => openmc}/data/uncorrelated.py | 0 {src/openmc => openmc}/data/urr.py | 0 {src/openmc => openmc}/deplete/__init__.py | 0 {src/openmc => openmc}/deplete/_matrix_funcs.py | 0 {src/openmc => openmc}/deplete/abc.py | 0 {src/openmc => openmc}/deplete/atom_number.py | 0 {src/openmc => openmc}/deplete/chain.py | 0 {src/openmc => openmc}/deplete/coupled_operator.py | 0 {src/openmc => openmc}/deplete/cram.py | 0 {src/openmc => openmc}/deplete/helpers.py | 0 {src/openmc => openmc}/deplete/independent_operator.py | 0 {src/openmc => openmc}/deplete/integrators.py | 0 {src/openmc => openmc}/deplete/microxs.py | 0 {src/openmc => openmc}/deplete/nuclide.py | 0 {src/openmc => openmc}/deplete/openmc_operator.py | 0 {src/openmc => openmc}/deplete/pool.py | 0 {src/openmc => openmc}/deplete/reaction_rates.py | 0 {src/openmc => openmc}/deplete/results.py | 0 {src/openmc => openmc}/deplete/stepresult.py | 0 {src/openmc => openmc}/deplete/transfer_rates.py | 0 {src/openmc => openmc}/dummy_comm.py | 0 {src/openmc => openmc}/element.py | 0 {src/openmc => openmc}/examples.py | 0 {src/openmc => openmc}/exceptions.py | 0 {src/openmc => openmc}/executor.py | 0 {src/openmc => openmc}/filter.py | 0 {src/openmc => openmc}/filter_expansion.py | 0 {src/openmc => openmc}/geometry.py | 0 {src/openmc => openmc}/lattice.py | 0 {src/openmc => openmc}/lib/__init__.py | 0 {src/openmc => openmc}/lib/cell.py | 0 {src/openmc => openmc}/lib/core.py | 0 {src/openmc => openmc}/lib/error.py | 0 {src/openmc => openmc}/lib/filter.py | 0 {src/openmc => openmc}/lib/material.py | 0 {src/openmc => openmc}/lib/math.py | 0 {src/openmc => openmc}/lib/mesh.py | 0 {src/openmc => openmc}/lib/nuclide.py | 0 {src/openmc => openmc}/lib/plot.py | 0 {src/openmc => openmc}/lib/settings.py | 0 {src/openmc => openmc}/lib/tally.py | 0 {src/openmc => openmc}/lib/weight_windows.py | 0 {src/openmc => openmc}/macroscopic.py | 0 {src/openmc => openmc}/material.py | 0 {src/openmc => openmc}/mesh.py | 0 {src/openmc => openmc}/mgxs/__init__.py | 0 {src/openmc => openmc}/mgxs/groups.py | 0 {src/openmc => openmc}/mgxs/library.py | 0 {src/openmc => openmc}/mgxs/mdgxs.py | 0 {src/openmc => openmc}/mgxs/mgxs.py | 0 {src/openmc => openmc}/mgxs_library.py | 0 {src/openmc => openmc}/mixin.py | 0 {src/openmc => openmc}/model/__init__.py | 0 {src/openmc => openmc}/model/funcs.py | 0 {src/openmc => openmc}/model/model.py | 0 {src/openmc => openmc}/model/surface_composite.py | 0 {src/openmc => openmc}/model/triso.py | 0 {src/openmc => openmc}/mpi.py | 0 {src/openmc => openmc}/nuclide.py | 0 {src/openmc => openmc}/openmoc_compatible.py | 0 {src/openmc => openmc}/particle_restart.py | 0 {src/openmc => openmc}/plots.py | 0 {src/openmc => openmc}/plotter.py | 0 {src/openmc => openmc}/polynomial.py | 0 {src/openmc => openmc}/region.py | 0 {src/openmc => openmc}/search.py | 0 {src/openmc => openmc}/settings.py | 0 {src/openmc => openmc}/source.py | 0 {src/openmc => openmc}/statepoint.py | 0 {src/openmc => openmc}/stats/__init__.py | 0 {src/openmc => openmc}/stats/multivariate.py | 0 {src/openmc => openmc}/stats/univariate.py | 0 {src/openmc => openmc}/summary.py | 0 {src/openmc => openmc}/surface.py | 0 {src/openmc => openmc}/tallies.py | 0 {src/openmc => openmc}/tally_derivative.py | 0 {src/openmc => openmc}/tracks.py | 0 {src/openmc => openmc}/trigger.py | 0 {src/openmc => openmc}/universe.py | 0 {src/openmc => openmc}/utility_funcs.py | 0 {src/openmc => openmc}/volume.py | 0 {src/openmc => openmc}/weight_windows.py | 0 135 files changed, 0 insertions(+), 0 deletions(-) rename {src/openmc => openmc}/__init__.py (100%) rename {src/openmc => openmc}/_xml.py (100%) rename {src/openmc => openmc}/arithmetic.py (100%) rename {src/openmc => openmc}/bounding_box.py (100%) rename {src/openmc => openmc}/cell.py (100%) rename {src/openmc => openmc}/checkvalue.py (100%) rename {src/openmc => openmc}/cmfd.py (100%) rename {src/openmc => openmc}/config.py (100%) rename {src/openmc => openmc}/data/BREMX.DAT (100%) rename {src/openmc => openmc}/data/__init__.py (100%) rename {src/openmc => openmc}/data/ace.py (100%) rename {src/openmc => openmc}/data/angle_distribution.py (100%) rename {src/openmc => openmc}/data/angle_energy.py (100%) rename {src/openmc => openmc}/data/correlated.py (100%) rename {src/openmc => openmc}/data/data.py (100%) rename {src/openmc => openmc}/data/decay.py (100%) rename {src/openmc => openmc}/data/effective_dose/__init__.py (100%) rename {src/openmc => openmc}/data/effective_dose/dose.py (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {src/openmc => openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {src/openmc => openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {src/openmc => openmc}/data/endf.py (100%) rename {src/openmc => openmc}/data/energy_distribution.py (100%) rename {src/openmc => openmc}/data/fission_energy.py (100%) rename {src/openmc => openmc}/data/function.py (100%) rename {src/openmc => openmc}/data/grid.py (100%) rename {src/openmc => openmc}/data/half_life.json (100%) rename {src/openmc => openmc}/data/kalbach_mann.py (100%) rename {src/openmc => openmc}/data/laboratory.py (100%) rename {src/openmc => openmc}/data/library.py (100%) rename {src/openmc => openmc}/data/mass_1.mas20.txt (100%) rename {src/openmc => openmc}/data/multipole.py (100%) rename {src/openmc => openmc}/data/nbody.py (100%) rename {src/openmc => openmc}/data/neutron.py (100%) rename {src/openmc => openmc}/data/njoy.py (100%) rename {src/openmc => openmc}/data/photon.py (100%) rename {src/openmc => openmc}/data/product.py (100%) rename {src/openmc => openmc}/data/reaction.py (100%) rename {src/openmc => openmc}/data/resonance.py (100%) rename {src/openmc => openmc}/data/resonance_covariance.py (100%) rename {src/openmc => openmc}/data/thermal.py (100%) rename {src/openmc => openmc}/data/thermal_angle_energy.py (100%) rename {src/openmc => openmc}/data/uncorrelated.py (100%) rename {src/openmc => openmc}/data/urr.py (100%) rename {src/openmc => openmc}/deplete/__init__.py (100%) rename {src/openmc => openmc}/deplete/_matrix_funcs.py (100%) rename {src/openmc => openmc}/deplete/abc.py (100%) rename {src/openmc => openmc}/deplete/atom_number.py (100%) rename {src/openmc => openmc}/deplete/chain.py (100%) rename {src/openmc => openmc}/deplete/coupled_operator.py (100%) rename {src/openmc => openmc}/deplete/cram.py (100%) rename {src/openmc => openmc}/deplete/helpers.py (100%) rename {src/openmc => openmc}/deplete/independent_operator.py (100%) rename {src/openmc => openmc}/deplete/integrators.py (100%) rename {src/openmc => openmc}/deplete/microxs.py (100%) rename {src/openmc => openmc}/deplete/nuclide.py (100%) rename {src/openmc => openmc}/deplete/openmc_operator.py (100%) rename {src/openmc => openmc}/deplete/pool.py (100%) rename {src/openmc => openmc}/deplete/reaction_rates.py (100%) rename {src/openmc => openmc}/deplete/results.py (100%) rename {src/openmc => openmc}/deplete/stepresult.py (100%) rename {src/openmc => openmc}/deplete/transfer_rates.py (100%) rename {src/openmc => openmc}/dummy_comm.py (100%) rename {src/openmc => openmc}/element.py (100%) rename {src/openmc => openmc}/examples.py (100%) rename {src/openmc => openmc}/exceptions.py (100%) rename {src/openmc => openmc}/executor.py (100%) rename {src/openmc => openmc}/filter.py (100%) rename {src/openmc => openmc}/filter_expansion.py (100%) rename {src/openmc => openmc}/geometry.py (100%) rename {src/openmc => openmc}/lattice.py (100%) rename {src/openmc => openmc}/lib/__init__.py (100%) rename {src/openmc => openmc}/lib/cell.py (100%) rename {src/openmc => openmc}/lib/core.py (100%) rename {src/openmc => openmc}/lib/error.py (100%) rename {src/openmc => openmc}/lib/filter.py (100%) rename {src/openmc => openmc}/lib/material.py (100%) rename {src/openmc => openmc}/lib/math.py (100%) rename {src/openmc => openmc}/lib/mesh.py (100%) rename {src/openmc => openmc}/lib/nuclide.py (100%) rename {src/openmc => openmc}/lib/plot.py (100%) rename {src/openmc => openmc}/lib/settings.py (100%) rename {src/openmc => openmc}/lib/tally.py (100%) rename {src/openmc => openmc}/lib/weight_windows.py (100%) rename {src/openmc => openmc}/macroscopic.py (100%) rename {src/openmc => openmc}/material.py (100%) rename {src/openmc => openmc}/mesh.py (100%) rename {src/openmc => openmc}/mgxs/__init__.py (100%) rename {src/openmc => openmc}/mgxs/groups.py (100%) rename {src/openmc => openmc}/mgxs/library.py (100%) rename {src/openmc => openmc}/mgxs/mdgxs.py (100%) rename {src/openmc => openmc}/mgxs/mgxs.py (100%) rename {src/openmc => openmc}/mgxs_library.py (100%) rename {src/openmc => openmc}/mixin.py (100%) rename {src/openmc => openmc}/model/__init__.py (100%) rename {src/openmc => openmc}/model/funcs.py (100%) rename {src/openmc => openmc}/model/model.py (100%) rename {src/openmc => openmc}/model/surface_composite.py (100%) rename {src/openmc => openmc}/model/triso.py (100%) rename {src/openmc => openmc}/mpi.py (100%) rename {src/openmc => openmc}/nuclide.py (100%) rename {src/openmc => openmc}/openmoc_compatible.py (100%) rename {src/openmc => openmc}/particle_restart.py (100%) rename {src/openmc => openmc}/plots.py (100%) rename {src/openmc => openmc}/plotter.py (100%) rename {src/openmc => openmc}/polynomial.py (100%) rename {src/openmc => openmc}/region.py (100%) rename {src/openmc => openmc}/search.py (100%) rename {src/openmc => openmc}/settings.py (100%) rename {src/openmc => openmc}/source.py (100%) rename {src/openmc => openmc}/statepoint.py (100%) rename {src/openmc => openmc}/stats/__init__.py (100%) rename {src/openmc => openmc}/stats/multivariate.py (100%) rename {src/openmc => openmc}/stats/univariate.py (100%) rename {src/openmc => openmc}/summary.py (100%) rename {src/openmc => openmc}/surface.py (100%) rename {src/openmc => openmc}/tallies.py (100%) rename {src/openmc => openmc}/tally_derivative.py (100%) rename {src/openmc => openmc}/tracks.py (100%) rename {src/openmc => openmc}/trigger.py (100%) rename {src/openmc => openmc}/universe.py (100%) rename {src/openmc => openmc}/utility_funcs.py (100%) rename {src/openmc => openmc}/volume.py (100%) rename {src/openmc => openmc}/weight_windows.py (100%) diff --git a/src/openmc/__init__.py b/openmc/__init__.py similarity index 100% rename from src/openmc/__init__.py rename to openmc/__init__.py diff --git a/src/openmc/_xml.py b/openmc/_xml.py similarity index 100% rename from src/openmc/_xml.py rename to openmc/_xml.py diff --git a/src/openmc/arithmetic.py b/openmc/arithmetic.py similarity index 100% rename from src/openmc/arithmetic.py rename to openmc/arithmetic.py diff --git a/src/openmc/bounding_box.py b/openmc/bounding_box.py similarity index 100% rename from src/openmc/bounding_box.py rename to openmc/bounding_box.py diff --git a/src/openmc/cell.py b/openmc/cell.py similarity index 100% rename from src/openmc/cell.py rename to openmc/cell.py diff --git a/src/openmc/checkvalue.py b/openmc/checkvalue.py similarity index 100% rename from src/openmc/checkvalue.py rename to openmc/checkvalue.py diff --git a/src/openmc/cmfd.py b/openmc/cmfd.py similarity index 100% rename from src/openmc/cmfd.py rename to openmc/cmfd.py diff --git a/src/openmc/config.py b/openmc/config.py similarity index 100% rename from src/openmc/config.py rename to openmc/config.py diff --git a/src/openmc/data/BREMX.DAT b/openmc/data/BREMX.DAT similarity index 100% rename from src/openmc/data/BREMX.DAT rename to openmc/data/BREMX.DAT diff --git a/src/openmc/data/__init__.py b/openmc/data/__init__.py similarity index 100% rename from src/openmc/data/__init__.py rename to openmc/data/__init__.py diff --git a/src/openmc/data/ace.py b/openmc/data/ace.py similarity index 100% rename from src/openmc/data/ace.py rename to openmc/data/ace.py diff --git a/src/openmc/data/angle_distribution.py b/openmc/data/angle_distribution.py similarity index 100% rename from src/openmc/data/angle_distribution.py rename to openmc/data/angle_distribution.py diff --git a/src/openmc/data/angle_energy.py b/openmc/data/angle_energy.py similarity index 100% rename from src/openmc/data/angle_energy.py rename to openmc/data/angle_energy.py diff --git a/src/openmc/data/correlated.py b/openmc/data/correlated.py similarity index 100% rename from src/openmc/data/correlated.py rename to openmc/data/correlated.py diff --git a/src/openmc/data/data.py b/openmc/data/data.py similarity index 100% rename from src/openmc/data/data.py rename to openmc/data/data.py diff --git a/src/openmc/data/decay.py b/openmc/data/decay.py similarity index 100% rename from src/openmc/data/decay.py rename to openmc/data/decay.py diff --git a/src/openmc/data/effective_dose/__init__.py b/openmc/data/effective_dose/__init__.py similarity index 100% rename from src/openmc/data/effective_dose/__init__.py rename to openmc/data/effective_dose/__init__.py diff --git a/src/openmc/data/effective_dose/dose.py b/openmc/data/effective_dose/dose.py similarity index 100% rename from src/openmc/data/effective_dose/dose.py rename to openmc/data/effective_dose/dose.py diff --git a/src/openmc/data/effective_dose/icrp116/electrons.txt b/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/electrons.txt rename to openmc/data/effective_dose/icrp116/electrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/helium_ions.txt b/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/helium_ions.txt rename to openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/src/openmc/data/effective_dose/icrp116/negative_muons.txt b/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/negative_muons.txt rename to openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/src/openmc/data/effective_dose/icrp116/negative_pions.txt b/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/negative_pions.txt rename to openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/src/openmc/data/effective_dose/icrp116/neutrons.txt b/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/neutrons.txt rename to openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/photons.txt b/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/photons.txt rename to openmc/data/effective_dose/icrp116/photons.txt diff --git a/src/openmc/data/effective_dose/icrp116/photons_kerma.txt b/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/photons_kerma.txt rename to openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/src/openmc/data/effective_dose/icrp116/positive_muons.txt b/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positive_muons.txt rename to openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/src/openmc/data/effective_dose/icrp116/positive_pions.txt b/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positive_pions.txt rename to openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/src/openmc/data/effective_dose/icrp116/positrons.txt b/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positrons.txt rename to openmc/data/effective_dose/icrp116/positrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/protons.txt b/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/protons.txt rename to openmc/data/effective_dose/icrp116/protons.txt diff --git a/src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/src/openmc/data/effective_dose/icrp74/neutrons.txt b/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp74/neutrons.txt rename to openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/src/openmc/data/effective_dose/icrp74/photons.txt b/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp74/photons.txt rename to openmc/data/effective_dose/icrp74/photons.txt diff --git a/src/openmc/data/endf.py b/openmc/data/endf.py similarity index 100% rename from src/openmc/data/endf.py rename to openmc/data/endf.py diff --git a/src/openmc/data/energy_distribution.py b/openmc/data/energy_distribution.py similarity index 100% rename from src/openmc/data/energy_distribution.py rename to openmc/data/energy_distribution.py diff --git a/src/openmc/data/fission_energy.py b/openmc/data/fission_energy.py similarity index 100% rename from src/openmc/data/fission_energy.py rename to openmc/data/fission_energy.py diff --git a/src/openmc/data/function.py b/openmc/data/function.py similarity index 100% rename from src/openmc/data/function.py rename to openmc/data/function.py diff --git a/src/openmc/data/grid.py b/openmc/data/grid.py similarity index 100% rename from src/openmc/data/grid.py rename to openmc/data/grid.py diff --git a/src/openmc/data/half_life.json b/openmc/data/half_life.json similarity index 100% rename from src/openmc/data/half_life.json rename to openmc/data/half_life.json diff --git a/src/openmc/data/kalbach_mann.py b/openmc/data/kalbach_mann.py similarity index 100% rename from src/openmc/data/kalbach_mann.py rename to openmc/data/kalbach_mann.py diff --git a/src/openmc/data/laboratory.py b/openmc/data/laboratory.py similarity index 100% rename from src/openmc/data/laboratory.py rename to openmc/data/laboratory.py diff --git a/src/openmc/data/library.py b/openmc/data/library.py similarity index 100% rename from src/openmc/data/library.py rename to openmc/data/library.py diff --git a/src/openmc/data/mass_1.mas20.txt b/openmc/data/mass_1.mas20.txt similarity index 100% rename from src/openmc/data/mass_1.mas20.txt rename to openmc/data/mass_1.mas20.txt diff --git a/src/openmc/data/multipole.py b/openmc/data/multipole.py similarity index 100% rename from src/openmc/data/multipole.py rename to openmc/data/multipole.py diff --git a/src/openmc/data/nbody.py b/openmc/data/nbody.py similarity index 100% rename from src/openmc/data/nbody.py rename to openmc/data/nbody.py diff --git a/src/openmc/data/neutron.py b/openmc/data/neutron.py similarity index 100% rename from src/openmc/data/neutron.py rename to openmc/data/neutron.py diff --git a/src/openmc/data/njoy.py b/openmc/data/njoy.py similarity index 100% rename from src/openmc/data/njoy.py rename to openmc/data/njoy.py diff --git a/src/openmc/data/photon.py b/openmc/data/photon.py similarity index 100% rename from src/openmc/data/photon.py rename to openmc/data/photon.py diff --git a/src/openmc/data/product.py b/openmc/data/product.py similarity index 100% rename from src/openmc/data/product.py rename to openmc/data/product.py diff --git a/src/openmc/data/reaction.py b/openmc/data/reaction.py similarity index 100% rename from src/openmc/data/reaction.py rename to openmc/data/reaction.py diff --git a/src/openmc/data/resonance.py b/openmc/data/resonance.py similarity index 100% rename from src/openmc/data/resonance.py rename to openmc/data/resonance.py diff --git a/src/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py similarity index 100% rename from src/openmc/data/resonance_covariance.py rename to openmc/data/resonance_covariance.py diff --git a/src/openmc/data/thermal.py b/openmc/data/thermal.py similarity index 100% rename from src/openmc/data/thermal.py rename to openmc/data/thermal.py diff --git a/src/openmc/data/thermal_angle_energy.py b/openmc/data/thermal_angle_energy.py similarity index 100% rename from src/openmc/data/thermal_angle_energy.py rename to openmc/data/thermal_angle_energy.py diff --git a/src/openmc/data/uncorrelated.py b/openmc/data/uncorrelated.py similarity index 100% rename from src/openmc/data/uncorrelated.py rename to openmc/data/uncorrelated.py diff --git a/src/openmc/data/urr.py b/openmc/data/urr.py similarity index 100% rename from src/openmc/data/urr.py rename to openmc/data/urr.py diff --git a/src/openmc/deplete/__init__.py b/openmc/deplete/__init__.py similarity index 100% rename from src/openmc/deplete/__init__.py rename to openmc/deplete/__init__.py diff --git a/src/openmc/deplete/_matrix_funcs.py b/openmc/deplete/_matrix_funcs.py similarity index 100% rename from src/openmc/deplete/_matrix_funcs.py rename to openmc/deplete/_matrix_funcs.py diff --git a/src/openmc/deplete/abc.py b/openmc/deplete/abc.py similarity index 100% rename from src/openmc/deplete/abc.py rename to openmc/deplete/abc.py diff --git a/src/openmc/deplete/atom_number.py b/openmc/deplete/atom_number.py similarity index 100% rename from src/openmc/deplete/atom_number.py rename to openmc/deplete/atom_number.py diff --git a/src/openmc/deplete/chain.py b/openmc/deplete/chain.py similarity index 100% rename from src/openmc/deplete/chain.py rename to openmc/deplete/chain.py diff --git a/src/openmc/deplete/coupled_operator.py b/openmc/deplete/coupled_operator.py similarity index 100% rename from src/openmc/deplete/coupled_operator.py rename to openmc/deplete/coupled_operator.py diff --git a/src/openmc/deplete/cram.py b/openmc/deplete/cram.py similarity index 100% rename from src/openmc/deplete/cram.py rename to openmc/deplete/cram.py diff --git a/src/openmc/deplete/helpers.py b/openmc/deplete/helpers.py similarity index 100% rename from src/openmc/deplete/helpers.py rename to openmc/deplete/helpers.py diff --git a/src/openmc/deplete/independent_operator.py b/openmc/deplete/independent_operator.py similarity index 100% rename from src/openmc/deplete/independent_operator.py rename to openmc/deplete/independent_operator.py diff --git a/src/openmc/deplete/integrators.py b/openmc/deplete/integrators.py similarity index 100% rename from src/openmc/deplete/integrators.py rename to openmc/deplete/integrators.py diff --git a/src/openmc/deplete/microxs.py b/openmc/deplete/microxs.py similarity index 100% rename from src/openmc/deplete/microxs.py rename to openmc/deplete/microxs.py diff --git a/src/openmc/deplete/nuclide.py b/openmc/deplete/nuclide.py similarity index 100% rename from src/openmc/deplete/nuclide.py rename to openmc/deplete/nuclide.py diff --git a/src/openmc/deplete/openmc_operator.py b/openmc/deplete/openmc_operator.py similarity index 100% rename from src/openmc/deplete/openmc_operator.py rename to openmc/deplete/openmc_operator.py diff --git a/src/openmc/deplete/pool.py b/openmc/deplete/pool.py similarity index 100% rename from src/openmc/deplete/pool.py rename to openmc/deplete/pool.py diff --git a/src/openmc/deplete/reaction_rates.py b/openmc/deplete/reaction_rates.py similarity index 100% rename from src/openmc/deplete/reaction_rates.py rename to openmc/deplete/reaction_rates.py diff --git a/src/openmc/deplete/results.py b/openmc/deplete/results.py similarity index 100% rename from src/openmc/deplete/results.py rename to openmc/deplete/results.py diff --git a/src/openmc/deplete/stepresult.py b/openmc/deplete/stepresult.py similarity index 100% rename from src/openmc/deplete/stepresult.py rename to openmc/deplete/stepresult.py diff --git a/src/openmc/deplete/transfer_rates.py b/openmc/deplete/transfer_rates.py similarity index 100% rename from src/openmc/deplete/transfer_rates.py rename to openmc/deplete/transfer_rates.py diff --git a/src/openmc/dummy_comm.py b/openmc/dummy_comm.py similarity index 100% rename from src/openmc/dummy_comm.py rename to openmc/dummy_comm.py diff --git a/src/openmc/element.py b/openmc/element.py similarity index 100% rename from src/openmc/element.py rename to openmc/element.py diff --git a/src/openmc/examples.py b/openmc/examples.py similarity index 100% rename from src/openmc/examples.py rename to openmc/examples.py diff --git a/src/openmc/exceptions.py b/openmc/exceptions.py similarity index 100% rename from src/openmc/exceptions.py rename to openmc/exceptions.py diff --git a/src/openmc/executor.py b/openmc/executor.py similarity index 100% rename from src/openmc/executor.py rename to openmc/executor.py diff --git a/src/openmc/filter.py b/openmc/filter.py similarity index 100% rename from src/openmc/filter.py rename to openmc/filter.py diff --git a/src/openmc/filter_expansion.py b/openmc/filter_expansion.py similarity index 100% rename from src/openmc/filter_expansion.py rename to openmc/filter_expansion.py diff --git a/src/openmc/geometry.py b/openmc/geometry.py similarity index 100% rename from src/openmc/geometry.py rename to openmc/geometry.py diff --git a/src/openmc/lattice.py b/openmc/lattice.py similarity index 100% rename from src/openmc/lattice.py rename to openmc/lattice.py diff --git a/src/openmc/lib/__init__.py b/openmc/lib/__init__.py similarity index 100% rename from src/openmc/lib/__init__.py rename to openmc/lib/__init__.py diff --git a/src/openmc/lib/cell.py b/openmc/lib/cell.py similarity index 100% rename from src/openmc/lib/cell.py rename to openmc/lib/cell.py diff --git a/src/openmc/lib/core.py b/openmc/lib/core.py similarity index 100% rename from src/openmc/lib/core.py rename to openmc/lib/core.py diff --git a/src/openmc/lib/error.py b/openmc/lib/error.py similarity index 100% rename from src/openmc/lib/error.py rename to openmc/lib/error.py diff --git a/src/openmc/lib/filter.py b/openmc/lib/filter.py similarity index 100% rename from src/openmc/lib/filter.py rename to openmc/lib/filter.py diff --git a/src/openmc/lib/material.py b/openmc/lib/material.py similarity index 100% rename from src/openmc/lib/material.py rename to openmc/lib/material.py diff --git a/src/openmc/lib/math.py b/openmc/lib/math.py similarity index 100% rename from src/openmc/lib/math.py rename to openmc/lib/math.py diff --git a/src/openmc/lib/mesh.py b/openmc/lib/mesh.py similarity index 100% rename from src/openmc/lib/mesh.py rename to openmc/lib/mesh.py diff --git a/src/openmc/lib/nuclide.py b/openmc/lib/nuclide.py similarity index 100% rename from src/openmc/lib/nuclide.py rename to openmc/lib/nuclide.py diff --git a/src/openmc/lib/plot.py b/openmc/lib/plot.py similarity index 100% rename from src/openmc/lib/plot.py rename to openmc/lib/plot.py diff --git a/src/openmc/lib/settings.py b/openmc/lib/settings.py similarity index 100% rename from src/openmc/lib/settings.py rename to openmc/lib/settings.py diff --git a/src/openmc/lib/tally.py b/openmc/lib/tally.py similarity index 100% rename from src/openmc/lib/tally.py rename to openmc/lib/tally.py diff --git a/src/openmc/lib/weight_windows.py b/openmc/lib/weight_windows.py similarity index 100% rename from src/openmc/lib/weight_windows.py rename to openmc/lib/weight_windows.py diff --git a/src/openmc/macroscopic.py b/openmc/macroscopic.py similarity index 100% rename from src/openmc/macroscopic.py rename to openmc/macroscopic.py diff --git a/src/openmc/material.py b/openmc/material.py similarity index 100% rename from src/openmc/material.py rename to openmc/material.py diff --git a/src/openmc/mesh.py b/openmc/mesh.py similarity index 100% rename from src/openmc/mesh.py rename to openmc/mesh.py diff --git a/src/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py similarity index 100% rename from src/openmc/mgxs/__init__.py rename to openmc/mgxs/__init__.py diff --git a/src/openmc/mgxs/groups.py b/openmc/mgxs/groups.py similarity index 100% rename from src/openmc/mgxs/groups.py rename to openmc/mgxs/groups.py diff --git a/src/openmc/mgxs/library.py b/openmc/mgxs/library.py similarity index 100% rename from src/openmc/mgxs/library.py rename to openmc/mgxs/library.py diff --git a/src/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py similarity index 100% rename from src/openmc/mgxs/mdgxs.py rename to openmc/mgxs/mdgxs.py diff --git a/src/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py similarity index 100% rename from src/openmc/mgxs/mgxs.py rename to openmc/mgxs/mgxs.py diff --git a/src/openmc/mgxs_library.py b/openmc/mgxs_library.py similarity index 100% rename from src/openmc/mgxs_library.py rename to openmc/mgxs_library.py diff --git a/src/openmc/mixin.py b/openmc/mixin.py similarity index 100% rename from src/openmc/mixin.py rename to openmc/mixin.py diff --git a/src/openmc/model/__init__.py b/openmc/model/__init__.py similarity index 100% rename from src/openmc/model/__init__.py rename to openmc/model/__init__.py diff --git a/src/openmc/model/funcs.py b/openmc/model/funcs.py similarity index 100% rename from src/openmc/model/funcs.py rename to openmc/model/funcs.py diff --git a/src/openmc/model/model.py b/openmc/model/model.py similarity index 100% rename from src/openmc/model/model.py rename to openmc/model/model.py diff --git a/src/openmc/model/surface_composite.py b/openmc/model/surface_composite.py similarity index 100% rename from src/openmc/model/surface_composite.py rename to openmc/model/surface_composite.py diff --git a/src/openmc/model/triso.py b/openmc/model/triso.py similarity index 100% rename from src/openmc/model/triso.py rename to openmc/model/triso.py diff --git a/src/openmc/mpi.py b/openmc/mpi.py similarity index 100% rename from src/openmc/mpi.py rename to openmc/mpi.py diff --git a/src/openmc/nuclide.py b/openmc/nuclide.py similarity index 100% rename from src/openmc/nuclide.py rename to openmc/nuclide.py diff --git a/src/openmc/openmoc_compatible.py b/openmc/openmoc_compatible.py similarity index 100% rename from src/openmc/openmoc_compatible.py rename to openmc/openmoc_compatible.py diff --git a/src/openmc/particle_restart.py b/openmc/particle_restart.py similarity index 100% rename from src/openmc/particle_restart.py rename to openmc/particle_restart.py diff --git a/src/openmc/plots.py b/openmc/plots.py similarity index 100% rename from src/openmc/plots.py rename to openmc/plots.py diff --git a/src/openmc/plotter.py b/openmc/plotter.py similarity index 100% rename from src/openmc/plotter.py rename to openmc/plotter.py diff --git a/src/openmc/polynomial.py b/openmc/polynomial.py similarity index 100% rename from src/openmc/polynomial.py rename to openmc/polynomial.py diff --git a/src/openmc/region.py b/openmc/region.py similarity index 100% rename from src/openmc/region.py rename to openmc/region.py diff --git a/src/openmc/search.py b/openmc/search.py similarity index 100% rename from src/openmc/search.py rename to openmc/search.py diff --git a/src/openmc/settings.py b/openmc/settings.py similarity index 100% rename from src/openmc/settings.py rename to openmc/settings.py diff --git a/src/openmc/source.py b/openmc/source.py similarity index 100% rename from src/openmc/source.py rename to openmc/source.py diff --git a/src/openmc/statepoint.py b/openmc/statepoint.py similarity index 100% rename from src/openmc/statepoint.py rename to openmc/statepoint.py diff --git a/src/openmc/stats/__init__.py b/openmc/stats/__init__.py similarity index 100% rename from src/openmc/stats/__init__.py rename to openmc/stats/__init__.py diff --git a/src/openmc/stats/multivariate.py b/openmc/stats/multivariate.py similarity index 100% rename from src/openmc/stats/multivariate.py rename to openmc/stats/multivariate.py diff --git a/src/openmc/stats/univariate.py b/openmc/stats/univariate.py similarity index 100% rename from src/openmc/stats/univariate.py rename to openmc/stats/univariate.py diff --git a/src/openmc/summary.py b/openmc/summary.py similarity index 100% rename from src/openmc/summary.py rename to openmc/summary.py diff --git a/src/openmc/surface.py b/openmc/surface.py similarity index 100% rename from src/openmc/surface.py rename to openmc/surface.py diff --git a/src/openmc/tallies.py b/openmc/tallies.py similarity index 100% rename from src/openmc/tallies.py rename to openmc/tallies.py diff --git a/src/openmc/tally_derivative.py b/openmc/tally_derivative.py similarity index 100% rename from src/openmc/tally_derivative.py rename to openmc/tally_derivative.py diff --git a/src/openmc/tracks.py b/openmc/tracks.py similarity index 100% rename from src/openmc/tracks.py rename to openmc/tracks.py diff --git a/src/openmc/trigger.py b/openmc/trigger.py similarity index 100% rename from src/openmc/trigger.py rename to openmc/trigger.py diff --git a/src/openmc/universe.py b/openmc/universe.py similarity index 100% rename from src/openmc/universe.py rename to openmc/universe.py diff --git a/src/openmc/utility_funcs.py b/openmc/utility_funcs.py similarity index 100% rename from src/openmc/utility_funcs.py rename to openmc/utility_funcs.py diff --git a/src/openmc/volume.py b/openmc/volume.py similarity index 100% rename from src/openmc/volume.py rename to openmc/volume.py diff --git a/src/openmc/weight_windows.py b/openmc/weight_windows.py similarity index 100% rename from src/openmc/weight_windows.py rename to openmc/weight_windows.py From 48b0ee5641874d809f1473779c7fc1b87d6797f4 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 27 Nov 2024 15:17:22 +0600 Subject: [PATCH 080/145] mv openmc to src --- {openmc => src/openmc}/__init__.py | 0 {openmc => src/openmc}/_xml.py | 0 {openmc => src/openmc}/arithmetic.py | 0 {openmc => src/openmc}/bounding_box.py | 0 {openmc => src/openmc}/cell.py | 0 {openmc => src/openmc}/checkvalue.py | 0 {openmc => src/openmc}/cmfd.py | 0 {openmc => src/openmc}/config.py | 0 {openmc => src/openmc}/data/BREMX.DAT | 0 {openmc => src/openmc}/data/__init__.py | 0 {openmc => src/openmc}/data/ace.py | 0 {openmc => src/openmc}/data/angle_distribution.py | 0 {openmc => src/openmc}/data/angle_energy.py | 0 {openmc => src/openmc}/data/correlated.py | 0 {openmc => src/openmc}/data/data.py | 0 {openmc => src/openmc}/data/decay.py | 0 {openmc => src/openmc}/data/effective_dose/__init__.py | 0 {openmc => src/openmc}/data/effective_dose/dose.py | 0 {openmc => src/openmc}/data/effective_dose/icrp116/electrons.txt | 0 .../openmc}/data/effective_dose/icrp116/helium_ions.txt | 0 .../openmc}/data/effective_dose/icrp116/negative_muons.txt | 0 .../openmc}/data/effective_dose/icrp116/negative_pions.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/neutrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/photons.txt | 0 .../openmc}/data/effective_dose/icrp116/photons_kerma.txt | 0 .../openmc}/data/effective_dose/icrp116/positive_muons.txt | 0 .../openmc}/data/effective_dose/icrp116/positive_pions.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/positrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp116/protons.txt | 0 .../data/effective_dose/icrp74/generate_photon_effective_dose.py | 0 {openmc => src/openmc}/data/effective_dose/icrp74/neutrons.txt | 0 {openmc => src/openmc}/data/effective_dose/icrp74/photons.txt | 0 {openmc => src/openmc}/data/endf.py | 0 {openmc => src/openmc}/data/energy_distribution.py | 0 {openmc => src/openmc}/data/fission_energy.py | 0 {openmc => src/openmc}/data/function.py | 0 {openmc => src/openmc}/data/grid.py | 0 {openmc => src/openmc}/data/half_life.json | 0 {openmc => src/openmc}/data/kalbach_mann.py | 0 {openmc => src/openmc}/data/laboratory.py | 0 {openmc => src/openmc}/data/library.py | 0 {openmc => src/openmc}/data/mass_1.mas20.txt | 0 {openmc => src/openmc}/data/multipole.py | 0 {openmc => src/openmc}/data/nbody.py | 0 {openmc => src/openmc}/data/neutron.py | 0 {openmc => src/openmc}/data/njoy.py | 0 {openmc => src/openmc}/data/photon.py | 0 {openmc => src/openmc}/data/product.py | 0 {openmc => src/openmc}/data/reaction.py | 0 {openmc => src/openmc}/data/resonance.py | 0 {openmc => src/openmc}/data/resonance_covariance.py | 0 {openmc => src/openmc}/data/thermal.py | 0 {openmc => src/openmc}/data/thermal_angle_energy.py | 0 {openmc => src/openmc}/data/uncorrelated.py | 0 {openmc => src/openmc}/data/urr.py | 0 {openmc => src/openmc}/deplete/__init__.py | 0 {openmc => src/openmc}/deplete/_matrix_funcs.py | 0 {openmc => src/openmc}/deplete/abc.py | 0 {openmc => src/openmc}/deplete/atom_number.py | 0 {openmc => src/openmc}/deplete/chain.py | 0 {openmc => src/openmc}/deplete/coupled_operator.py | 0 {openmc => src/openmc}/deplete/cram.py | 0 {openmc => src/openmc}/deplete/helpers.py | 0 {openmc => src/openmc}/deplete/independent_operator.py | 0 {openmc => src/openmc}/deplete/integrators.py | 0 {openmc => src/openmc}/deplete/microxs.py | 0 {openmc => src/openmc}/deplete/nuclide.py | 0 {openmc => src/openmc}/deplete/openmc_operator.py | 0 {openmc => src/openmc}/deplete/pool.py | 0 {openmc => src/openmc}/deplete/reaction_rates.py | 0 {openmc => src/openmc}/deplete/results.py | 0 {openmc => src/openmc}/deplete/stepresult.py | 0 {openmc => src/openmc}/deplete/transfer_rates.py | 0 {openmc => src/openmc}/dummy_comm.py | 0 {openmc => src/openmc}/element.py | 0 {openmc => src/openmc}/examples.py | 0 {openmc => src/openmc}/exceptions.py | 0 {openmc => src/openmc}/executor.py | 0 {openmc => src/openmc}/filter.py | 0 {openmc => src/openmc}/filter_expansion.py | 0 {openmc => src/openmc}/geometry.py | 0 {openmc => src/openmc}/lattice.py | 0 {openmc => src/openmc}/lib/__init__.py | 0 {openmc => src/openmc}/lib/cell.py | 0 {openmc => src/openmc}/lib/core.py | 0 {openmc => src/openmc}/lib/error.py | 0 {openmc => src/openmc}/lib/filter.py | 0 {openmc => src/openmc}/lib/material.py | 0 {openmc => src/openmc}/lib/math.py | 0 {openmc => src/openmc}/lib/mesh.py | 0 {openmc => src/openmc}/lib/nuclide.py | 0 {openmc => src/openmc}/lib/plot.py | 0 {openmc => src/openmc}/lib/settings.py | 0 {openmc => src/openmc}/lib/tally.py | 0 {openmc => src/openmc}/lib/weight_windows.py | 0 {openmc => src/openmc}/macroscopic.py | 0 {openmc => src/openmc}/material.py | 0 {openmc => src/openmc}/mesh.py | 0 {openmc => src/openmc}/mgxs/__init__.py | 0 {openmc => src/openmc}/mgxs/groups.py | 0 {openmc => src/openmc}/mgxs/library.py | 0 {openmc => src/openmc}/mgxs/mdgxs.py | 0 {openmc => src/openmc}/mgxs/mgxs.py | 0 {openmc => src/openmc}/mgxs_library.py | 0 {openmc => src/openmc}/mixin.py | 0 {openmc => src/openmc}/model/__init__.py | 0 {openmc => src/openmc}/model/funcs.py | 0 {openmc => src/openmc}/model/model.py | 0 {openmc => src/openmc}/model/surface_composite.py | 0 {openmc => src/openmc}/model/triso.py | 0 {openmc => src/openmc}/mpi.py | 0 {openmc => src/openmc}/nuclide.py | 0 {openmc => src/openmc}/openmoc_compatible.py | 0 {openmc => src/openmc}/particle_restart.py | 0 {openmc => src/openmc}/plots.py | 0 {openmc => src/openmc}/plotter.py | 0 {openmc => src/openmc}/polynomial.py | 0 {openmc => src/openmc}/region.py | 0 {openmc => src/openmc}/search.py | 0 {openmc => src/openmc}/settings.py | 0 {openmc => src/openmc}/source.py | 0 {openmc => src/openmc}/statepoint.py | 0 {openmc => src/openmc}/stats/__init__.py | 0 {openmc => src/openmc}/stats/multivariate.py | 0 {openmc => src/openmc}/stats/univariate.py | 0 {openmc => src/openmc}/summary.py | 0 {openmc => src/openmc}/surface.py | 0 {openmc => src/openmc}/tallies.py | 0 {openmc => src/openmc}/tally_derivative.py | 0 {openmc => src/openmc}/tracks.py | 0 {openmc => src/openmc}/trigger.py | 0 {openmc => src/openmc}/universe.py | 0 {openmc => src/openmc}/utility_funcs.py | 0 {openmc => src/openmc}/volume.py | 0 {openmc => src/openmc}/weight_windows.py | 0 135 files changed, 0 insertions(+), 0 deletions(-) rename {openmc => src/openmc}/__init__.py (100%) rename {openmc => src/openmc}/_xml.py (100%) rename {openmc => src/openmc}/arithmetic.py (100%) rename {openmc => src/openmc}/bounding_box.py (100%) rename {openmc => src/openmc}/cell.py (100%) rename {openmc => src/openmc}/checkvalue.py (100%) rename {openmc => src/openmc}/cmfd.py (100%) rename {openmc => src/openmc}/config.py (100%) rename {openmc => src/openmc}/data/BREMX.DAT (100%) rename {openmc => src/openmc}/data/__init__.py (100%) rename {openmc => src/openmc}/data/ace.py (100%) rename {openmc => src/openmc}/data/angle_distribution.py (100%) rename {openmc => src/openmc}/data/angle_energy.py (100%) rename {openmc => src/openmc}/data/correlated.py (100%) rename {openmc => src/openmc}/data/data.py (100%) rename {openmc => src/openmc}/data/decay.py (100%) rename {openmc => src/openmc}/data/effective_dose/__init__.py (100%) rename {openmc => src/openmc}/data/effective_dose/dose.py (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {openmc => src/openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {openmc => src/openmc}/data/endf.py (100%) rename {openmc => src/openmc}/data/energy_distribution.py (100%) rename {openmc => src/openmc}/data/fission_energy.py (100%) rename {openmc => src/openmc}/data/function.py (100%) rename {openmc => src/openmc}/data/grid.py (100%) rename {openmc => src/openmc}/data/half_life.json (100%) rename {openmc => src/openmc}/data/kalbach_mann.py (100%) rename {openmc => src/openmc}/data/laboratory.py (100%) rename {openmc => src/openmc}/data/library.py (100%) rename {openmc => src/openmc}/data/mass_1.mas20.txt (100%) rename {openmc => src/openmc}/data/multipole.py (100%) rename {openmc => src/openmc}/data/nbody.py (100%) rename {openmc => src/openmc}/data/neutron.py (100%) rename {openmc => src/openmc}/data/njoy.py (100%) rename {openmc => src/openmc}/data/photon.py (100%) rename {openmc => src/openmc}/data/product.py (100%) rename {openmc => src/openmc}/data/reaction.py (100%) rename {openmc => src/openmc}/data/resonance.py (100%) rename {openmc => src/openmc}/data/resonance_covariance.py (100%) rename {openmc => src/openmc}/data/thermal.py (100%) rename {openmc => src/openmc}/data/thermal_angle_energy.py (100%) rename {openmc => src/openmc}/data/uncorrelated.py (100%) rename {openmc => src/openmc}/data/urr.py (100%) rename {openmc => src/openmc}/deplete/__init__.py (100%) rename {openmc => src/openmc}/deplete/_matrix_funcs.py (100%) rename {openmc => src/openmc}/deplete/abc.py (100%) rename {openmc => src/openmc}/deplete/atom_number.py (100%) rename {openmc => src/openmc}/deplete/chain.py (100%) rename {openmc => src/openmc}/deplete/coupled_operator.py (100%) rename {openmc => src/openmc}/deplete/cram.py (100%) rename {openmc => src/openmc}/deplete/helpers.py (100%) rename {openmc => src/openmc}/deplete/independent_operator.py (100%) rename {openmc => src/openmc}/deplete/integrators.py (100%) rename {openmc => src/openmc}/deplete/microxs.py (100%) rename {openmc => src/openmc}/deplete/nuclide.py (100%) rename {openmc => src/openmc}/deplete/openmc_operator.py (100%) rename {openmc => src/openmc}/deplete/pool.py (100%) rename {openmc => src/openmc}/deplete/reaction_rates.py (100%) rename {openmc => src/openmc}/deplete/results.py (100%) rename {openmc => src/openmc}/deplete/stepresult.py (100%) rename {openmc => src/openmc}/deplete/transfer_rates.py (100%) rename {openmc => src/openmc}/dummy_comm.py (100%) rename {openmc => src/openmc}/element.py (100%) rename {openmc => src/openmc}/examples.py (100%) rename {openmc => src/openmc}/exceptions.py (100%) rename {openmc => src/openmc}/executor.py (100%) rename {openmc => src/openmc}/filter.py (100%) rename {openmc => src/openmc}/filter_expansion.py (100%) rename {openmc => src/openmc}/geometry.py (100%) rename {openmc => src/openmc}/lattice.py (100%) rename {openmc => src/openmc}/lib/__init__.py (100%) rename {openmc => src/openmc}/lib/cell.py (100%) rename {openmc => src/openmc}/lib/core.py (100%) rename {openmc => src/openmc}/lib/error.py (100%) rename {openmc => src/openmc}/lib/filter.py (100%) rename {openmc => src/openmc}/lib/material.py (100%) rename {openmc => src/openmc}/lib/math.py (100%) rename {openmc => src/openmc}/lib/mesh.py (100%) rename {openmc => src/openmc}/lib/nuclide.py (100%) rename {openmc => src/openmc}/lib/plot.py (100%) rename {openmc => src/openmc}/lib/settings.py (100%) rename {openmc => src/openmc}/lib/tally.py (100%) rename {openmc => src/openmc}/lib/weight_windows.py (100%) rename {openmc => src/openmc}/macroscopic.py (100%) rename {openmc => src/openmc}/material.py (100%) rename {openmc => src/openmc}/mesh.py (100%) rename {openmc => src/openmc}/mgxs/__init__.py (100%) rename {openmc => src/openmc}/mgxs/groups.py (100%) rename {openmc => src/openmc}/mgxs/library.py (100%) rename {openmc => src/openmc}/mgxs/mdgxs.py (100%) rename {openmc => src/openmc}/mgxs/mgxs.py (100%) rename {openmc => src/openmc}/mgxs_library.py (100%) rename {openmc => src/openmc}/mixin.py (100%) rename {openmc => src/openmc}/model/__init__.py (100%) rename {openmc => src/openmc}/model/funcs.py (100%) rename {openmc => src/openmc}/model/model.py (100%) rename {openmc => src/openmc}/model/surface_composite.py (100%) rename {openmc => src/openmc}/model/triso.py (100%) rename {openmc => src/openmc}/mpi.py (100%) rename {openmc => src/openmc}/nuclide.py (100%) rename {openmc => src/openmc}/openmoc_compatible.py (100%) rename {openmc => src/openmc}/particle_restart.py (100%) rename {openmc => src/openmc}/plots.py (100%) rename {openmc => src/openmc}/plotter.py (100%) rename {openmc => src/openmc}/polynomial.py (100%) rename {openmc => src/openmc}/region.py (100%) rename {openmc => src/openmc}/search.py (100%) rename {openmc => src/openmc}/settings.py (100%) rename {openmc => src/openmc}/source.py (100%) rename {openmc => src/openmc}/statepoint.py (100%) rename {openmc => src/openmc}/stats/__init__.py (100%) rename {openmc => src/openmc}/stats/multivariate.py (100%) rename {openmc => src/openmc}/stats/univariate.py (100%) rename {openmc => src/openmc}/summary.py (100%) rename {openmc => src/openmc}/surface.py (100%) rename {openmc => src/openmc}/tallies.py (100%) rename {openmc => src/openmc}/tally_derivative.py (100%) rename {openmc => src/openmc}/tracks.py (100%) rename {openmc => src/openmc}/trigger.py (100%) rename {openmc => src/openmc}/universe.py (100%) rename {openmc => src/openmc}/utility_funcs.py (100%) rename {openmc => src/openmc}/volume.py (100%) rename {openmc => src/openmc}/weight_windows.py (100%) diff --git a/openmc/__init__.py b/src/openmc/__init__.py similarity index 100% rename from openmc/__init__.py rename to src/openmc/__init__.py diff --git a/openmc/_xml.py b/src/openmc/_xml.py similarity index 100% rename from openmc/_xml.py rename to src/openmc/_xml.py diff --git a/openmc/arithmetic.py b/src/openmc/arithmetic.py similarity index 100% rename from openmc/arithmetic.py rename to src/openmc/arithmetic.py diff --git a/openmc/bounding_box.py b/src/openmc/bounding_box.py similarity index 100% rename from openmc/bounding_box.py rename to src/openmc/bounding_box.py diff --git a/openmc/cell.py b/src/openmc/cell.py similarity index 100% rename from openmc/cell.py rename to src/openmc/cell.py diff --git a/openmc/checkvalue.py b/src/openmc/checkvalue.py similarity index 100% rename from openmc/checkvalue.py rename to src/openmc/checkvalue.py diff --git a/openmc/cmfd.py b/src/openmc/cmfd.py similarity index 100% rename from openmc/cmfd.py rename to src/openmc/cmfd.py diff --git a/openmc/config.py b/src/openmc/config.py similarity index 100% rename from openmc/config.py rename to src/openmc/config.py diff --git a/openmc/data/BREMX.DAT b/src/openmc/data/BREMX.DAT similarity index 100% rename from openmc/data/BREMX.DAT rename to src/openmc/data/BREMX.DAT diff --git a/openmc/data/__init__.py b/src/openmc/data/__init__.py similarity index 100% rename from openmc/data/__init__.py rename to src/openmc/data/__init__.py diff --git a/openmc/data/ace.py b/src/openmc/data/ace.py similarity index 100% rename from openmc/data/ace.py rename to src/openmc/data/ace.py diff --git a/openmc/data/angle_distribution.py b/src/openmc/data/angle_distribution.py similarity index 100% rename from openmc/data/angle_distribution.py rename to src/openmc/data/angle_distribution.py diff --git a/openmc/data/angle_energy.py b/src/openmc/data/angle_energy.py similarity index 100% rename from openmc/data/angle_energy.py rename to src/openmc/data/angle_energy.py diff --git a/openmc/data/correlated.py b/src/openmc/data/correlated.py similarity index 100% rename from openmc/data/correlated.py rename to src/openmc/data/correlated.py diff --git a/openmc/data/data.py b/src/openmc/data/data.py similarity index 100% rename from openmc/data/data.py rename to src/openmc/data/data.py diff --git a/openmc/data/decay.py b/src/openmc/data/decay.py similarity index 100% rename from openmc/data/decay.py rename to src/openmc/data/decay.py diff --git a/openmc/data/effective_dose/__init__.py b/src/openmc/data/effective_dose/__init__.py similarity index 100% rename from openmc/data/effective_dose/__init__.py rename to src/openmc/data/effective_dose/__init__.py diff --git a/openmc/data/effective_dose/dose.py b/src/openmc/data/effective_dose/dose.py similarity index 100% rename from openmc/data/effective_dose/dose.py rename to src/openmc/data/effective_dose/dose.py diff --git a/openmc/data/effective_dose/icrp116/electrons.txt b/src/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/electrons.txt rename to src/openmc/data/effective_dose/icrp116/electrons.txt diff --git a/openmc/data/effective_dose/icrp116/helium_ions.txt b/src/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/helium_ions.txt rename to src/openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/openmc/data/effective_dose/icrp116/negative_muons.txt b/src/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_muons.txt rename to src/openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/openmc/data/effective_dose/icrp116/negative_pions.txt b/src/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_pions.txt rename to src/openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/openmc/data/effective_dose/icrp116/neutrons.txt b/src/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/neutrons.txt rename to src/openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/openmc/data/effective_dose/icrp116/photons.txt b/src/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons.txt rename to src/openmc/data/effective_dose/icrp116/photons.txt diff --git a/openmc/data/effective_dose/icrp116/photons_kerma.txt b/src/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons_kerma.txt rename to src/openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/openmc/data/effective_dose/icrp116/positive_muons.txt b/src/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_muons.txt rename to src/openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/openmc/data/effective_dose/icrp116/positive_pions.txt b/src/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_pions.txt rename to src/openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/openmc/data/effective_dose/icrp116/positrons.txt b/src/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positrons.txt rename to src/openmc/data/effective_dose/icrp116/positrons.txt diff --git a/openmc/data/effective_dose/icrp116/protons.txt b/src/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/protons.txt rename to src/openmc/data/effective_dose/icrp116/protons.txt diff --git a/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/openmc/data/effective_dose/icrp74/neutrons.txt b/src/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/neutrons.txt rename to src/openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/openmc/data/effective_dose/icrp74/photons.txt b/src/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/photons.txt rename to src/openmc/data/effective_dose/icrp74/photons.txt diff --git a/openmc/data/endf.py b/src/openmc/data/endf.py similarity index 100% rename from openmc/data/endf.py rename to src/openmc/data/endf.py diff --git a/openmc/data/energy_distribution.py b/src/openmc/data/energy_distribution.py similarity index 100% rename from openmc/data/energy_distribution.py rename to src/openmc/data/energy_distribution.py diff --git a/openmc/data/fission_energy.py b/src/openmc/data/fission_energy.py similarity index 100% rename from openmc/data/fission_energy.py rename to src/openmc/data/fission_energy.py diff --git a/openmc/data/function.py b/src/openmc/data/function.py similarity index 100% rename from openmc/data/function.py rename to src/openmc/data/function.py diff --git a/openmc/data/grid.py b/src/openmc/data/grid.py similarity index 100% rename from openmc/data/grid.py rename to src/openmc/data/grid.py diff --git a/openmc/data/half_life.json b/src/openmc/data/half_life.json similarity index 100% rename from openmc/data/half_life.json rename to src/openmc/data/half_life.json diff --git a/openmc/data/kalbach_mann.py b/src/openmc/data/kalbach_mann.py similarity index 100% rename from openmc/data/kalbach_mann.py rename to src/openmc/data/kalbach_mann.py diff --git a/openmc/data/laboratory.py b/src/openmc/data/laboratory.py similarity index 100% rename from openmc/data/laboratory.py rename to src/openmc/data/laboratory.py diff --git a/openmc/data/library.py b/src/openmc/data/library.py similarity index 100% rename from openmc/data/library.py rename to src/openmc/data/library.py diff --git a/openmc/data/mass_1.mas20.txt b/src/openmc/data/mass_1.mas20.txt similarity index 100% rename from openmc/data/mass_1.mas20.txt rename to src/openmc/data/mass_1.mas20.txt diff --git a/openmc/data/multipole.py b/src/openmc/data/multipole.py similarity index 100% rename from openmc/data/multipole.py rename to src/openmc/data/multipole.py diff --git a/openmc/data/nbody.py b/src/openmc/data/nbody.py similarity index 100% rename from openmc/data/nbody.py rename to src/openmc/data/nbody.py diff --git a/openmc/data/neutron.py b/src/openmc/data/neutron.py similarity index 100% rename from openmc/data/neutron.py rename to src/openmc/data/neutron.py diff --git a/openmc/data/njoy.py b/src/openmc/data/njoy.py similarity index 100% rename from openmc/data/njoy.py rename to src/openmc/data/njoy.py diff --git a/openmc/data/photon.py b/src/openmc/data/photon.py similarity index 100% rename from openmc/data/photon.py rename to src/openmc/data/photon.py diff --git a/openmc/data/product.py b/src/openmc/data/product.py similarity index 100% rename from openmc/data/product.py rename to src/openmc/data/product.py diff --git a/openmc/data/reaction.py b/src/openmc/data/reaction.py similarity index 100% rename from openmc/data/reaction.py rename to src/openmc/data/reaction.py diff --git a/openmc/data/resonance.py b/src/openmc/data/resonance.py similarity index 100% rename from openmc/data/resonance.py rename to src/openmc/data/resonance.py diff --git a/openmc/data/resonance_covariance.py b/src/openmc/data/resonance_covariance.py similarity index 100% rename from openmc/data/resonance_covariance.py rename to src/openmc/data/resonance_covariance.py diff --git a/openmc/data/thermal.py b/src/openmc/data/thermal.py similarity index 100% rename from openmc/data/thermal.py rename to src/openmc/data/thermal.py diff --git a/openmc/data/thermal_angle_energy.py b/src/openmc/data/thermal_angle_energy.py similarity index 100% rename from openmc/data/thermal_angle_energy.py rename to src/openmc/data/thermal_angle_energy.py diff --git a/openmc/data/uncorrelated.py b/src/openmc/data/uncorrelated.py similarity index 100% rename from openmc/data/uncorrelated.py rename to src/openmc/data/uncorrelated.py diff --git a/openmc/data/urr.py b/src/openmc/data/urr.py similarity index 100% rename from openmc/data/urr.py rename to src/openmc/data/urr.py diff --git a/openmc/deplete/__init__.py b/src/openmc/deplete/__init__.py similarity index 100% rename from openmc/deplete/__init__.py rename to src/openmc/deplete/__init__.py diff --git a/openmc/deplete/_matrix_funcs.py b/src/openmc/deplete/_matrix_funcs.py similarity index 100% rename from openmc/deplete/_matrix_funcs.py rename to src/openmc/deplete/_matrix_funcs.py diff --git a/openmc/deplete/abc.py b/src/openmc/deplete/abc.py similarity index 100% rename from openmc/deplete/abc.py rename to src/openmc/deplete/abc.py diff --git a/openmc/deplete/atom_number.py b/src/openmc/deplete/atom_number.py similarity index 100% rename from openmc/deplete/atom_number.py rename to src/openmc/deplete/atom_number.py diff --git a/openmc/deplete/chain.py b/src/openmc/deplete/chain.py similarity index 100% rename from openmc/deplete/chain.py rename to src/openmc/deplete/chain.py diff --git a/openmc/deplete/coupled_operator.py b/src/openmc/deplete/coupled_operator.py similarity index 100% rename from openmc/deplete/coupled_operator.py rename to src/openmc/deplete/coupled_operator.py diff --git a/openmc/deplete/cram.py b/src/openmc/deplete/cram.py similarity index 100% rename from openmc/deplete/cram.py rename to src/openmc/deplete/cram.py diff --git a/openmc/deplete/helpers.py b/src/openmc/deplete/helpers.py similarity index 100% rename from openmc/deplete/helpers.py rename to src/openmc/deplete/helpers.py diff --git a/openmc/deplete/independent_operator.py b/src/openmc/deplete/independent_operator.py similarity index 100% rename from openmc/deplete/independent_operator.py rename to src/openmc/deplete/independent_operator.py diff --git a/openmc/deplete/integrators.py b/src/openmc/deplete/integrators.py similarity index 100% rename from openmc/deplete/integrators.py rename to src/openmc/deplete/integrators.py diff --git a/openmc/deplete/microxs.py b/src/openmc/deplete/microxs.py similarity index 100% rename from openmc/deplete/microxs.py rename to src/openmc/deplete/microxs.py diff --git a/openmc/deplete/nuclide.py b/src/openmc/deplete/nuclide.py similarity index 100% rename from openmc/deplete/nuclide.py rename to src/openmc/deplete/nuclide.py diff --git a/openmc/deplete/openmc_operator.py b/src/openmc/deplete/openmc_operator.py similarity index 100% rename from openmc/deplete/openmc_operator.py rename to src/openmc/deplete/openmc_operator.py diff --git a/openmc/deplete/pool.py b/src/openmc/deplete/pool.py similarity index 100% rename from openmc/deplete/pool.py rename to src/openmc/deplete/pool.py diff --git a/openmc/deplete/reaction_rates.py b/src/openmc/deplete/reaction_rates.py similarity index 100% rename from openmc/deplete/reaction_rates.py rename to src/openmc/deplete/reaction_rates.py diff --git a/openmc/deplete/results.py b/src/openmc/deplete/results.py similarity index 100% rename from openmc/deplete/results.py rename to src/openmc/deplete/results.py diff --git a/openmc/deplete/stepresult.py b/src/openmc/deplete/stepresult.py similarity index 100% rename from openmc/deplete/stepresult.py rename to src/openmc/deplete/stepresult.py diff --git a/openmc/deplete/transfer_rates.py b/src/openmc/deplete/transfer_rates.py similarity index 100% rename from openmc/deplete/transfer_rates.py rename to src/openmc/deplete/transfer_rates.py diff --git a/openmc/dummy_comm.py b/src/openmc/dummy_comm.py similarity index 100% rename from openmc/dummy_comm.py rename to src/openmc/dummy_comm.py diff --git a/openmc/element.py b/src/openmc/element.py similarity index 100% rename from openmc/element.py rename to src/openmc/element.py diff --git a/openmc/examples.py b/src/openmc/examples.py similarity index 100% rename from openmc/examples.py rename to src/openmc/examples.py diff --git a/openmc/exceptions.py b/src/openmc/exceptions.py similarity index 100% rename from openmc/exceptions.py rename to src/openmc/exceptions.py diff --git a/openmc/executor.py b/src/openmc/executor.py similarity index 100% rename from openmc/executor.py rename to src/openmc/executor.py diff --git a/openmc/filter.py b/src/openmc/filter.py similarity index 100% rename from openmc/filter.py rename to src/openmc/filter.py diff --git a/openmc/filter_expansion.py b/src/openmc/filter_expansion.py similarity index 100% rename from openmc/filter_expansion.py rename to src/openmc/filter_expansion.py diff --git a/openmc/geometry.py b/src/openmc/geometry.py similarity index 100% rename from openmc/geometry.py rename to src/openmc/geometry.py diff --git a/openmc/lattice.py b/src/openmc/lattice.py similarity index 100% rename from openmc/lattice.py rename to src/openmc/lattice.py diff --git a/openmc/lib/__init__.py b/src/openmc/lib/__init__.py similarity index 100% rename from openmc/lib/__init__.py rename to src/openmc/lib/__init__.py diff --git a/openmc/lib/cell.py b/src/openmc/lib/cell.py similarity index 100% rename from openmc/lib/cell.py rename to src/openmc/lib/cell.py diff --git a/openmc/lib/core.py b/src/openmc/lib/core.py similarity index 100% rename from openmc/lib/core.py rename to src/openmc/lib/core.py diff --git a/openmc/lib/error.py b/src/openmc/lib/error.py similarity index 100% rename from openmc/lib/error.py rename to src/openmc/lib/error.py diff --git a/openmc/lib/filter.py b/src/openmc/lib/filter.py similarity index 100% rename from openmc/lib/filter.py rename to src/openmc/lib/filter.py diff --git a/openmc/lib/material.py b/src/openmc/lib/material.py similarity index 100% rename from openmc/lib/material.py rename to src/openmc/lib/material.py diff --git a/openmc/lib/math.py b/src/openmc/lib/math.py similarity index 100% rename from openmc/lib/math.py rename to src/openmc/lib/math.py diff --git a/openmc/lib/mesh.py b/src/openmc/lib/mesh.py similarity index 100% rename from openmc/lib/mesh.py rename to src/openmc/lib/mesh.py diff --git a/openmc/lib/nuclide.py b/src/openmc/lib/nuclide.py similarity index 100% rename from openmc/lib/nuclide.py rename to src/openmc/lib/nuclide.py diff --git a/openmc/lib/plot.py b/src/openmc/lib/plot.py similarity index 100% rename from openmc/lib/plot.py rename to src/openmc/lib/plot.py diff --git a/openmc/lib/settings.py b/src/openmc/lib/settings.py similarity index 100% rename from openmc/lib/settings.py rename to src/openmc/lib/settings.py diff --git a/openmc/lib/tally.py b/src/openmc/lib/tally.py similarity index 100% rename from openmc/lib/tally.py rename to src/openmc/lib/tally.py diff --git a/openmc/lib/weight_windows.py b/src/openmc/lib/weight_windows.py similarity index 100% rename from openmc/lib/weight_windows.py rename to src/openmc/lib/weight_windows.py diff --git a/openmc/macroscopic.py b/src/openmc/macroscopic.py similarity index 100% rename from openmc/macroscopic.py rename to src/openmc/macroscopic.py diff --git a/openmc/material.py b/src/openmc/material.py similarity index 100% rename from openmc/material.py rename to src/openmc/material.py diff --git a/openmc/mesh.py b/src/openmc/mesh.py similarity index 100% rename from openmc/mesh.py rename to src/openmc/mesh.py diff --git a/openmc/mgxs/__init__.py b/src/openmc/mgxs/__init__.py similarity index 100% rename from openmc/mgxs/__init__.py rename to src/openmc/mgxs/__init__.py diff --git a/openmc/mgxs/groups.py b/src/openmc/mgxs/groups.py similarity index 100% rename from openmc/mgxs/groups.py rename to src/openmc/mgxs/groups.py diff --git a/openmc/mgxs/library.py b/src/openmc/mgxs/library.py similarity index 100% rename from openmc/mgxs/library.py rename to src/openmc/mgxs/library.py diff --git a/openmc/mgxs/mdgxs.py b/src/openmc/mgxs/mdgxs.py similarity index 100% rename from openmc/mgxs/mdgxs.py rename to src/openmc/mgxs/mdgxs.py diff --git a/openmc/mgxs/mgxs.py b/src/openmc/mgxs/mgxs.py similarity index 100% rename from openmc/mgxs/mgxs.py rename to src/openmc/mgxs/mgxs.py diff --git a/openmc/mgxs_library.py b/src/openmc/mgxs_library.py similarity index 100% rename from openmc/mgxs_library.py rename to src/openmc/mgxs_library.py diff --git a/openmc/mixin.py b/src/openmc/mixin.py similarity index 100% rename from openmc/mixin.py rename to src/openmc/mixin.py diff --git a/openmc/model/__init__.py b/src/openmc/model/__init__.py similarity index 100% rename from openmc/model/__init__.py rename to src/openmc/model/__init__.py diff --git a/openmc/model/funcs.py b/src/openmc/model/funcs.py similarity index 100% rename from openmc/model/funcs.py rename to src/openmc/model/funcs.py diff --git a/openmc/model/model.py b/src/openmc/model/model.py similarity index 100% rename from openmc/model/model.py rename to src/openmc/model/model.py diff --git a/openmc/model/surface_composite.py b/src/openmc/model/surface_composite.py similarity index 100% rename from openmc/model/surface_composite.py rename to src/openmc/model/surface_composite.py diff --git a/openmc/model/triso.py b/src/openmc/model/triso.py similarity index 100% rename from openmc/model/triso.py rename to src/openmc/model/triso.py diff --git a/openmc/mpi.py b/src/openmc/mpi.py similarity index 100% rename from openmc/mpi.py rename to src/openmc/mpi.py diff --git a/openmc/nuclide.py b/src/openmc/nuclide.py similarity index 100% rename from openmc/nuclide.py rename to src/openmc/nuclide.py diff --git a/openmc/openmoc_compatible.py b/src/openmc/openmoc_compatible.py similarity index 100% rename from openmc/openmoc_compatible.py rename to src/openmc/openmoc_compatible.py diff --git a/openmc/particle_restart.py b/src/openmc/particle_restart.py similarity index 100% rename from openmc/particle_restart.py rename to src/openmc/particle_restart.py diff --git a/openmc/plots.py b/src/openmc/plots.py similarity index 100% rename from openmc/plots.py rename to src/openmc/plots.py diff --git a/openmc/plotter.py b/src/openmc/plotter.py similarity index 100% rename from openmc/plotter.py rename to src/openmc/plotter.py diff --git a/openmc/polynomial.py b/src/openmc/polynomial.py similarity index 100% rename from openmc/polynomial.py rename to src/openmc/polynomial.py diff --git a/openmc/region.py b/src/openmc/region.py similarity index 100% rename from openmc/region.py rename to src/openmc/region.py diff --git a/openmc/search.py b/src/openmc/search.py similarity index 100% rename from openmc/search.py rename to src/openmc/search.py diff --git a/openmc/settings.py b/src/openmc/settings.py similarity index 100% rename from openmc/settings.py rename to src/openmc/settings.py diff --git a/openmc/source.py b/src/openmc/source.py similarity index 100% rename from openmc/source.py rename to src/openmc/source.py diff --git a/openmc/statepoint.py b/src/openmc/statepoint.py similarity index 100% rename from openmc/statepoint.py rename to src/openmc/statepoint.py diff --git a/openmc/stats/__init__.py b/src/openmc/stats/__init__.py similarity index 100% rename from openmc/stats/__init__.py rename to src/openmc/stats/__init__.py diff --git a/openmc/stats/multivariate.py b/src/openmc/stats/multivariate.py similarity index 100% rename from openmc/stats/multivariate.py rename to src/openmc/stats/multivariate.py diff --git a/openmc/stats/univariate.py b/src/openmc/stats/univariate.py similarity index 100% rename from openmc/stats/univariate.py rename to src/openmc/stats/univariate.py diff --git a/openmc/summary.py b/src/openmc/summary.py similarity index 100% rename from openmc/summary.py rename to src/openmc/summary.py diff --git a/openmc/surface.py b/src/openmc/surface.py similarity index 100% rename from openmc/surface.py rename to src/openmc/surface.py diff --git a/openmc/tallies.py b/src/openmc/tallies.py similarity index 100% rename from openmc/tallies.py rename to src/openmc/tallies.py diff --git a/openmc/tally_derivative.py b/src/openmc/tally_derivative.py similarity index 100% rename from openmc/tally_derivative.py rename to src/openmc/tally_derivative.py diff --git a/openmc/tracks.py b/src/openmc/tracks.py similarity index 100% rename from openmc/tracks.py rename to src/openmc/tracks.py diff --git a/openmc/trigger.py b/src/openmc/trigger.py similarity index 100% rename from openmc/trigger.py rename to src/openmc/trigger.py diff --git a/openmc/universe.py b/src/openmc/universe.py similarity index 100% rename from openmc/universe.py rename to src/openmc/universe.py diff --git a/openmc/utility_funcs.py b/src/openmc/utility_funcs.py similarity index 100% rename from openmc/utility_funcs.py rename to src/openmc/utility_funcs.py diff --git a/openmc/volume.py b/src/openmc/volume.py similarity index 100% rename from openmc/volume.py rename to src/openmc/volume.py diff --git a/openmc/weight_windows.py b/src/openmc/weight_windows.py similarity index 100% rename from openmc/weight_windows.py rename to src/openmc/weight_windows.py From 6e8d1af4373b41eb0aab4adbc33e3da6c80c6a6e Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 27 Nov 2024 23:08:09 +0600 Subject: [PATCH 081/145] do not ignore .h5 --- .gitignore | 3 --- src/openmc/data/compton_profiles.h5 | Bin 0 -> 598888 bytes src/openmc/data/density_effect.h5 | Bin 0 -> 206264 bytes 3 files changed, 3 deletions(-) create mode 100644 src/openmc/data/compton_profiles.h5 create mode 100644 src/openmc/data/density_effect.h5 diff --git a/.gitignore b/.gitignore index 3b2a24a4dbc..dc30c60ce93 100644 --- a/.gitignore +++ b/.gitignore @@ -43,9 +43,6 @@ results_test.dat # Test .pytest_cache/ -# HDF5 files -*.h5 - # Build files src/CMakeCache.txt src/CMakeFiles/ diff --git a/src/openmc/data/compton_profiles.h5 b/src/openmc/data/compton_profiles.h5 new file mode 100644 index 0000000000000000000000000000000000000000..298ed0340e6eaf3a0788d86edc5faa011931cdf6 GIT binary patch literal 598888 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≈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

}U12r=Nc;3o?hkbPBt9lvcZCodG)-bNQ9@w2JCF zJm6NiP8LFcvD0Q;*N z*8io(|NP~B@R2@RPvLQwDJ~a$3%DN6H@B3&;R;emc&!~fb$DTI$F&+bnvWHkqu3yI zg@lpoo*R_jA-JXvU5vz6fb=Q*Q<`s#J0Bm#vB6&u?>Vj;Tn}`LkZ%XK20td|_kAh3 zL~wc`EARX6Z{jQK)LQX@(|wrWqlx*P$BVPfV?BiTC@Q@9W2ql_X|pTM?f-6hc@26o z$tCi8t3L-WQ?Hf!r_S|2ZxGjw`3>(kcqZsF4XgR^U5AS+H27|DU;8maWbWb^?XwCR zHNf?l%&W%;JkOtf9CV$Y-<^yz^�W9Te_#zw#>q*Ms%XINR@@x>@w)Le+cBKlf_I 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 literal 0 HcmV?d00001 diff --git a/src/openmc/data/density_effect.h5 b/src/openmc/data/density_effect.h5 new file mode 100644 index 0000000000000000000000000000000000000000..77d973517c244f6083b558e9569a5082174169eb GIT binary patch literal 206264 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 literal 0 HcmV?d00001 From b2abffb09915e9b7484e14050ecfad079061413f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sat, 30 Nov 2024 19:30:31 +0600 Subject: [PATCH 082/145] make test --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5214aed9901..cf7ba5224db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,7 +150,9 @@ jobs: - name: test shell: bash - run: $GITHUB_WORKSPACE/tools/ci/gha-script.sh + run: | + CTEST_OUTPUT_ON_FAILURE=1 make test -C $GITHUB_WORKSPACE/build/ + $GITHUB_WORKSPACE/tools/ci/gha-script.sh - name: after_success shell: bash From 3ede515e55e587aaa11603cbb6c7d29e0e97bc1f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 3 Dec 2024 00:07:10 +0600 Subject: [PATCH 083/145] Exclude src/openmc --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf7ba5224db..a78b33177c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,7 +157,7 @@ jobs: - name: after_success shell: bash run: | - cpp-coveralls -i src -i include -e src/external --exclude-pattern "/usr/*" --dump cpp_cov.json + cpp-coveralls -i src -i include -e src/external -e src/openmc --exclude-pattern "/usr/*" --dump cpp_cov.json coveralls --merge=cpp_cov.json --service=github finish: From 1806f7680b2aafd3968b9728f1058ce9037a3e5f Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 3 Dec 2024 10:33:47 +0600 Subject: [PATCH 084/145] move openmc to python dir --- .github/workflows/ci.yml | 2 +- pyproject.toml | 2 +- {src => python}/openmc/__init__.py | 0 {src => python}/openmc/_xml.py | 0 {src => python}/openmc/arithmetic.py | 0 {src => python}/openmc/bounding_box.py | 0 {src => python}/openmc/cell.py | 0 {src => python}/openmc/checkvalue.py | 0 {src => python}/openmc/cmfd.py | 0 {src => python}/openmc/config.py | 0 {src => python}/openmc/data/BREMX.DAT | 0 {src => python}/openmc/data/__init__.py | 0 {src => python}/openmc/data/ace.py | 0 {src => python}/openmc/data/angle_distribution.py | 0 {src => python}/openmc/data/angle_energy.py | 0 {src => python}/openmc/data/compton_profiles.h5 | Bin {src => python}/openmc/data/correlated.py | 0 {src => python}/openmc/data/data.py | 0 {src => python}/openmc/data/decay.py | 0 {src => python}/openmc/data/density_effect.h5 | Bin .../openmc/data/effective_dose/__init__.py | 0 {src => python}/openmc/data/effective_dose/dose.py | 0 .../data/effective_dose/icrp116/electrons.txt | 0 .../data/effective_dose/icrp116/helium_ions.txt | 0 .../data/effective_dose/icrp116/negative_muons.txt | 0 .../data/effective_dose/icrp116/negative_pions.txt | 0 .../openmc/data/effective_dose/icrp116/neutrons.txt | 0 .../openmc/data/effective_dose/icrp116/photons.txt | 0 .../data/effective_dose/icrp116/photons_kerma.txt | 0 .../data/effective_dose/icrp116/positive_muons.txt | 0 .../data/effective_dose/icrp116/positive_pions.txt | 0 .../data/effective_dose/icrp116/positrons.txt | 0 .../openmc/data/effective_dose/icrp116/protons.txt | 0 .../icrp74/generate_photon_effective_dose.py | 0 .../openmc/data/effective_dose/icrp74/neutrons.txt | 0 .../openmc/data/effective_dose/icrp74/photons.txt | 0 {src => python}/openmc/data/endf.py | 0 {src => python}/openmc/data/energy_distribution.py | 0 {src => python}/openmc/data/fission_energy.py | 0 {src => python}/openmc/data/function.py | 0 {src => python}/openmc/data/grid.py | 0 {src => python}/openmc/data/half_life.json | 0 {src => python}/openmc/data/kalbach_mann.py | 0 {src => python}/openmc/data/laboratory.py | 0 {src => python}/openmc/data/library.py | 0 {src => python}/openmc/data/mass_1.mas20.txt | 0 {src => python}/openmc/data/multipole.py | 0 {src => python}/openmc/data/nbody.py | 0 {src => python}/openmc/data/neutron.py | 0 {src => python}/openmc/data/njoy.py | 0 {src => python}/openmc/data/photon.py | 0 {src => python}/openmc/data/product.py | 0 {src => python}/openmc/data/reaction.py | 0 {src => python}/openmc/data/resonance.py | 0 {src => python}/openmc/data/resonance_covariance.py | 0 {src => python}/openmc/data/thermal.py | 0 {src => python}/openmc/data/thermal_angle_energy.py | 0 {src => python}/openmc/data/uncorrelated.py | 0 {src => python}/openmc/data/urr.py | 0 {src => python}/openmc/deplete/__init__.py | 0 {src => python}/openmc/deplete/_matrix_funcs.py | 0 {src => python}/openmc/deplete/abc.py | 0 {src => python}/openmc/deplete/atom_number.py | 0 {src => python}/openmc/deplete/chain.py | 0 {src => python}/openmc/deplete/coupled_operator.py | 0 {src => python}/openmc/deplete/cram.py | 0 {src => python}/openmc/deplete/helpers.py | 0 .../openmc/deplete/independent_operator.py | 0 {src => python}/openmc/deplete/integrators.py | 0 {src => python}/openmc/deplete/microxs.py | 0 {src => python}/openmc/deplete/nuclide.py | 0 {src => python}/openmc/deplete/openmc_operator.py | 0 {src => python}/openmc/deplete/pool.py | 0 {src => python}/openmc/deplete/reaction_rates.py | 0 {src => python}/openmc/deplete/results.py | 0 {src => python}/openmc/deplete/stepresult.py | 0 {src => python}/openmc/deplete/transfer_rates.py | 0 {src => python}/openmc/dummy_comm.py | 0 {src => python}/openmc/element.py | 0 {src => python}/openmc/examples.py | 0 {src => python}/openmc/exceptions.py | 0 {src => python}/openmc/executor.py | 0 {src => python}/openmc/filter.py | 0 {src => python}/openmc/filter_expansion.py | 0 {src => python}/openmc/geometry.py | 0 {src => python}/openmc/lattice.py | 0 {src => python}/openmc/lib/__init__.py | 0 {src => python}/openmc/lib/cell.py | 0 {src => python}/openmc/lib/core.py | 0 {src => python}/openmc/lib/error.py | 0 {src => python}/openmc/lib/filter.py | 0 {src => python}/openmc/lib/material.py | 0 {src => python}/openmc/lib/math.py | 0 {src => python}/openmc/lib/mesh.py | 0 {src => python}/openmc/lib/nuclide.py | 0 {src => python}/openmc/lib/plot.py | 0 {src => python}/openmc/lib/settings.py | 0 {src => python}/openmc/lib/tally.py | 0 {src => python}/openmc/lib/weight_windows.py | 0 {src => python}/openmc/macroscopic.py | 0 {src => python}/openmc/material.py | 0 {src => python}/openmc/mesh.py | 0 {src => python}/openmc/mgxs/__init__.py | 0 {src => python}/openmc/mgxs/groups.py | 0 {src => python}/openmc/mgxs/library.py | 0 {src => python}/openmc/mgxs/mdgxs.py | 0 {src => python}/openmc/mgxs/mgxs.py | 0 {src => python}/openmc/mgxs_library.py | 0 {src => python}/openmc/mixin.py | 0 {src => python}/openmc/model/__init__.py | 0 {src => python}/openmc/model/funcs.py | 0 {src => python}/openmc/model/model.py | 0 {src => python}/openmc/model/surface_composite.py | 0 {src => python}/openmc/model/triso.py | 0 {src => python}/openmc/mpi.py | 0 {src => python}/openmc/nuclide.py | 0 {src => python}/openmc/openmoc_compatible.py | 0 {src => python}/openmc/particle_restart.py | 0 {src => python}/openmc/plots.py | 0 {src => python}/openmc/plotter.py | 0 {src => python}/openmc/polynomial.py | 0 {src => python}/openmc/region.py | 0 {src => python}/openmc/search.py | 0 {src => python}/openmc/settings.py | 0 {src => python}/openmc/source.py | 0 {src => python}/openmc/statepoint.py | 0 {src => python}/openmc/stats/__init__.py | 0 {src => python}/openmc/stats/multivariate.py | 0 {src => python}/openmc/stats/univariate.py | 0 {src => python}/openmc/summary.py | 0 {src => python}/openmc/surface.py | 0 {src => python}/openmc/tallies.py | 0 {src => python}/openmc/tally_derivative.py | 0 {src => python}/openmc/tracks.py | 0 {src => python}/openmc/trigger.py | 0 {src => python}/openmc/universe.py | 0 {src => python}/openmc/utility_funcs.py | 0 {src => python}/openmc/volume.py | 0 {src => python}/openmc/weight_windows.py | 0 139 files changed, 2 insertions(+), 2 deletions(-) rename {src => python}/openmc/__init__.py (100%) rename {src => python}/openmc/_xml.py (100%) rename {src => python}/openmc/arithmetic.py (100%) rename {src => python}/openmc/bounding_box.py (100%) rename {src => python}/openmc/cell.py (100%) rename {src => python}/openmc/checkvalue.py (100%) rename {src => python}/openmc/cmfd.py (100%) rename {src => python}/openmc/config.py (100%) rename {src => python}/openmc/data/BREMX.DAT (100%) rename {src => python}/openmc/data/__init__.py (100%) rename {src => python}/openmc/data/ace.py (100%) rename {src => python}/openmc/data/angle_distribution.py (100%) rename {src => python}/openmc/data/angle_energy.py (100%) rename {src => python}/openmc/data/compton_profiles.h5 (100%) rename {src => python}/openmc/data/correlated.py (100%) rename {src => python}/openmc/data/data.py (100%) rename {src => python}/openmc/data/decay.py (100%) rename {src => python}/openmc/data/density_effect.h5 (100%) rename {src => python}/openmc/data/effective_dose/__init__.py (100%) rename {src => python}/openmc/data/effective_dose/dose.py (100%) rename {src => python}/openmc/data/effective_dose/icrp116/electrons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/helium_ions.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/negative_muons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/negative_pions.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/neutrons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/photons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/positive_muons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/positive_pions.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/positrons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp116/protons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {src => python}/openmc/data/effective_dose/icrp74/neutrons.txt (100%) rename {src => python}/openmc/data/effective_dose/icrp74/photons.txt (100%) rename {src => python}/openmc/data/endf.py (100%) rename {src => python}/openmc/data/energy_distribution.py (100%) rename {src => python}/openmc/data/fission_energy.py (100%) rename {src => python}/openmc/data/function.py (100%) rename {src => python}/openmc/data/grid.py (100%) rename {src => python}/openmc/data/half_life.json (100%) rename {src => python}/openmc/data/kalbach_mann.py (100%) rename {src => python}/openmc/data/laboratory.py (100%) rename {src => python}/openmc/data/library.py (100%) rename {src => python}/openmc/data/mass_1.mas20.txt (100%) rename {src => python}/openmc/data/multipole.py (100%) rename {src => python}/openmc/data/nbody.py (100%) rename {src => python}/openmc/data/neutron.py (100%) rename {src => python}/openmc/data/njoy.py (100%) rename {src => python}/openmc/data/photon.py (100%) rename {src => python}/openmc/data/product.py (100%) rename {src => python}/openmc/data/reaction.py (100%) rename {src => python}/openmc/data/resonance.py (100%) rename {src => python}/openmc/data/resonance_covariance.py (100%) rename {src => python}/openmc/data/thermal.py (100%) rename {src => python}/openmc/data/thermal_angle_energy.py (100%) rename {src => python}/openmc/data/uncorrelated.py (100%) rename {src => python}/openmc/data/urr.py (100%) rename {src => python}/openmc/deplete/__init__.py (100%) rename {src => python}/openmc/deplete/_matrix_funcs.py (100%) rename {src => python}/openmc/deplete/abc.py (100%) rename {src => python}/openmc/deplete/atom_number.py (100%) rename {src => python}/openmc/deplete/chain.py (100%) rename {src => python}/openmc/deplete/coupled_operator.py (100%) rename {src => python}/openmc/deplete/cram.py (100%) rename {src => python}/openmc/deplete/helpers.py (100%) rename {src => python}/openmc/deplete/independent_operator.py (100%) rename {src => python}/openmc/deplete/integrators.py (100%) rename {src => python}/openmc/deplete/microxs.py (100%) rename {src => python}/openmc/deplete/nuclide.py (100%) rename {src => python}/openmc/deplete/openmc_operator.py (100%) rename {src => python}/openmc/deplete/pool.py (100%) rename {src => python}/openmc/deplete/reaction_rates.py (100%) rename {src => python}/openmc/deplete/results.py (100%) rename {src => python}/openmc/deplete/stepresult.py (100%) rename {src => python}/openmc/deplete/transfer_rates.py (100%) rename {src => python}/openmc/dummy_comm.py (100%) rename {src => python}/openmc/element.py (100%) rename {src => python}/openmc/examples.py (100%) rename {src => python}/openmc/exceptions.py (100%) rename {src => python}/openmc/executor.py (100%) rename {src => python}/openmc/filter.py (100%) rename {src => python}/openmc/filter_expansion.py (100%) rename {src => python}/openmc/geometry.py (100%) rename {src => python}/openmc/lattice.py (100%) rename {src => python}/openmc/lib/__init__.py (100%) rename {src => python}/openmc/lib/cell.py (100%) rename {src => python}/openmc/lib/core.py (100%) rename {src => python}/openmc/lib/error.py (100%) rename {src => python}/openmc/lib/filter.py (100%) rename {src => python}/openmc/lib/material.py (100%) rename {src => python}/openmc/lib/math.py (100%) rename {src => python}/openmc/lib/mesh.py (100%) rename {src => python}/openmc/lib/nuclide.py (100%) rename {src => python}/openmc/lib/plot.py (100%) rename {src => python}/openmc/lib/settings.py (100%) rename {src => python}/openmc/lib/tally.py (100%) rename {src => python}/openmc/lib/weight_windows.py (100%) rename {src => python}/openmc/macroscopic.py (100%) rename {src => python}/openmc/material.py (100%) rename {src => python}/openmc/mesh.py (100%) rename {src => python}/openmc/mgxs/__init__.py (100%) rename {src => python}/openmc/mgxs/groups.py (100%) rename {src => python}/openmc/mgxs/library.py (100%) rename {src => python}/openmc/mgxs/mdgxs.py (100%) rename {src => python}/openmc/mgxs/mgxs.py (100%) rename {src => python}/openmc/mgxs_library.py (100%) rename {src => python}/openmc/mixin.py (100%) rename {src => python}/openmc/model/__init__.py (100%) rename {src => python}/openmc/model/funcs.py (100%) rename {src => python}/openmc/model/model.py (100%) rename {src => python}/openmc/model/surface_composite.py (100%) rename {src => python}/openmc/model/triso.py (100%) rename {src => python}/openmc/mpi.py (100%) rename {src => python}/openmc/nuclide.py (100%) rename {src => python}/openmc/openmoc_compatible.py (100%) rename {src => python}/openmc/particle_restart.py (100%) rename {src => python}/openmc/plots.py (100%) rename {src => python}/openmc/plotter.py (100%) rename {src => python}/openmc/polynomial.py (100%) rename {src => python}/openmc/region.py (100%) rename {src => python}/openmc/search.py (100%) rename {src => python}/openmc/settings.py (100%) rename {src => python}/openmc/source.py (100%) rename {src => python}/openmc/statepoint.py (100%) rename {src => python}/openmc/stats/__init__.py (100%) rename {src => python}/openmc/stats/multivariate.py (100%) rename {src => python}/openmc/stats/univariate.py (100%) rename {src => python}/openmc/summary.py (100%) rename {src => python}/openmc/surface.py (100%) rename {src => python}/openmc/tallies.py (100%) rename {src => python}/openmc/tally_derivative.py (100%) rename {src => python}/openmc/tracks.py (100%) rename {src => python}/openmc/trigger.py (100%) rename {src => python}/openmc/universe.py (100%) rename {src => python}/openmc/utility_funcs.py (100%) rename {src => python}/openmc/volume.py (100%) rename {src => python}/openmc/weight_windows.py (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a78b33177c1..cf7ba5224db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,7 +157,7 @@ jobs: - name: after_success shell: bash run: | - cpp-coveralls -i src -i include -e src/external -e src/openmc --exclude-pattern "/usr/*" --dump cpp_cov.json + cpp-coveralls -i src -i include -e src/external --exclude-pattern "/usr/*" --dump cpp_cov.json coveralls --merge=cpp_cov.json --service=github finish: diff --git a/pyproject.toml b/pyproject.toml index f940fd1538d..d2800f93d31 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,5 +63,5 @@ Issues = "https://github.com/openmc-dev/openmc/issues" build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" -wheel.packages = ["src/openmc"] +wheel.packages = ["python/openmc"] sdist.include = ["*.h5"] diff --git a/src/openmc/__init__.py b/python/openmc/__init__.py similarity index 100% rename from src/openmc/__init__.py rename to python/openmc/__init__.py diff --git a/src/openmc/_xml.py b/python/openmc/_xml.py similarity index 100% rename from src/openmc/_xml.py rename to python/openmc/_xml.py diff --git a/src/openmc/arithmetic.py b/python/openmc/arithmetic.py similarity index 100% rename from src/openmc/arithmetic.py rename to python/openmc/arithmetic.py diff --git a/src/openmc/bounding_box.py b/python/openmc/bounding_box.py similarity index 100% rename from src/openmc/bounding_box.py rename to python/openmc/bounding_box.py diff --git a/src/openmc/cell.py b/python/openmc/cell.py similarity index 100% rename from src/openmc/cell.py rename to python/openmc/cell.py diff --git a/src/openmc/checkvalue.py b/python/openmc/checkvalue.py similarity index 100% rename from src/openmc/checkvalue.py rename to python/openmc/checkvalue.py diff --git a/src/openmc/cmfd.py b/python/openmc/cmfd.py similarity index 100% rename from src/openmc/cmfd.py rename to python/openmc/cmfd.py diff --git a/src/openmc/config.py b/python/openmc/config.py similarity index 100% rename from src/openmc/config.py rename to python/openmc/config.py diff --git a/src/openmc/data/BREMX.DAT b/python/openmc/data/BREMX.DAT similarity index 100% rename from src/openmc/data/BREMX.DAT rename to python/openmc/data/BREMX.DAT diff --git a/src/openmc/data/__init__.py b/python/openmc/data/__init__.py similarity index 100% rename from src/openmc/data/__init__.py rename to python/openmc/data/__init__.py diff --git a/src/openmc/data/ace.py b/python/openmc/data/ace.py similarity index 100% rename from src/openmc/data/ace.py rename to python/openmc/data/ace.py diff --git a/src/openmc/data/angle_distribution.py b/python/openmc/data/angle_distribution.py similarity index 100% rename from src/openmc/data/angle_distribution.py rename to python/openmc/data/angle_distribution.py diff --git a/src/openmc/data/angle_energy.py b/python/openmc/data/angle_energy.py similarity index 100% rename from src/openmc/data/angle_energy.py rename to python/openmc/data/angle_energy.py diff --git a/src/openmc/data/compton_profiles.h5 b/python/openmc/data/compton_profiles.h5 similarity index 100% rename from src/openmc/data/compton_profiles.h5 rename to python/openmc/data/compton_profiles.h5 diff --git a/src/openmc/data/correlated.py b/python/openmc/data/correlated.py similarity index 100% rename from src/openmc/data/correlated.py rename to python/openmc/data/correlated.py diff --git a/src/openmc/data/data.py b/python/openmc/data/data.py similarity index 100% rename from src/openmc/data/data.py rename to python/openmc/data/data.py diff --git a/src/openmc/data/decay.py b/python/openmc/data/decay.py similarity index 100% rename from src/openmc/data/decay.py rename to python/openmc/data/decay.py diff --git a/src/openmc/data/density_effect.h5 b/python/openmc/data/density_effect.h5 similarity index 100% rename from src/openmc/data/density_effect.h5 rename to python/openmc/data/density_effect.h5 diff --git a/src/openmc/data/effective_dose/__init__.py b/python/openmc/data/effective_dose/__init__.py similarity index 100% rename from src/openmc/data/effective_dose/__init__.py rename to python/openmc/data/effective_dose/__init__.py diff --git a/src/openmc/data/effective_dose/dose.py b/python/openmc/data/effective_dose/dose.py similarity index 100% rename from src/openmc/data/effective_dose/dose.py rename to python/openmc/data/effective_dose/dose.py diff --git a/src/openmc/data/effective_dose/icrp116/electrons.txt b/python/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/electrons.txt rename to python/openmc/data/effective_dose/icrp116/electrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/helium_ions.txt b/python/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/helium_ions.txt rename to python/openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/src/openmc/data/effective_dose/icrp116/negative_muons.txt b/python/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/negative_muons.txt rename to python/openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/src/openmc/data/effective_dose/icrp116/negative_pions.txt b/python/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/negative_pions.txt rename to python/openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/src/openmc/data/effective_dose/icrp116/neutrons.txt b/python/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/neutrons.txt rename to python/openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/photons.txt b/python/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/photons.txt rename to python/openmc/data/effective_dose/icrp116/photons.txt diff --git a/src/openmc/data/effective_dose/icrp116/photons_kerma.txt b/python/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/photons_kerma.txt rename to python/openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/src/openmc/data/effective_dose/icrp116/positive_muons.txt b/python/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positive_muons.txt rename to python/openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/src/openmc/data/effective_dose/icrp116/positive_pions.txt b/python/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positive_pions.txt rename to python/openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/src/openmc/data/effective_dose/icrp116/positrons.txt b/python/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/positrons.txt rename to python/openmc/data/effective_dose/icrp116/positrons.txt diff --git a/src/openmc/data/effective_dose/icrp116/protons.txt b/python/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp116/protons.txt rename to python/openmc/data/effective_dose/icrp116/protons.txt diff --git a/src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from src/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/src/openmc/data/effective_dose/icrp74/neutrons.txt b/python/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp74/neutrons.txt rename to python/openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/src/openmc/data/effective_dose/icrp74/photons.txt b/python/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from src/openmc/data/effective_dose/icrp74/photons.txt rename to python/openmc/data/effective_dose/icrp74/photons.txt diff --git a/src/openmc/data/endf.py b/python/openmc/data/endf.py similarity index 100% rename from src/openmc/data/endf.py rename to python/openmc/data/endf.py diff --git a/src/openmc/data/energy_distribution.py b/python/openmc/data/energy_distribution.py similarity index 100% rename from src/openmc/data/energy_distribution.py rename to python/openmc/data/energy_distribution.py diff --git a/src/openmc/data/fission_energy.py b/python/openmc/data/fission_energy.py similarity index 100% rename from src/openmc/data/fission_energy.py rename to python/openmc/data/fission_energy.py diff --git a/src/openmc/data/function.py b/python/openmc/data/function.py similarity index 100% rename from src/openmc/data/function.py rename to python/openmc/data/function.py diff --git a/src/openmc/data/grid.py b/python/openmc/data/grid.py similarity index 100% rename from src/openmc/data/grid.py rename to python/openmc/data/grid.py diff --git a/src/openmc/data/half_life.json b/python/openmc/data/half_life.json similarity index 100% rename from src/openmc/data/half_life.json rename to python/openmc/data/half_life.json diff --git a/src/openmc/data/kalbach_mann.py b/python/openmc/data/kalbach_mann.py similarity index 100% rename from src/openmc/data/kalbach_mann.py rename to python/openmc/data/kalbach_mann.py diff --git a/src/openmc/data/laboratory.py b/python/openmc/data/laboratory.py similarity index 100% rename from src/openmc/data/laboratory.py rename to python/openmc/data/laboratory.py diff --git a/src/openmc/data/library.py b/python/openmc/data/library.py similarity index 100% rename from src/openmc/data/library.py rename to python/openmc/data/library.py diff --git a/src/openmc/data/mass_1.mas20.txt b/python/openmc/data/mass_1.mas20.txt similarity index 100% rename from src/openmc/data/mass_1.mas20.txt rename to python/openmc/data/mass_1.mas20.txt diff --git a/src/openmc/data/multipole.py b/python/openmc/data/multipole.py similarity index 100% rename from src/openmc/data/multipole.py rename to python/openmc/data/multipole.py diff --git a/src/openmc/data/nbody.py b/python/openmc/data/nbody.py similarity index 100% rename from src/openmc/data/nbody.py rename to python/openmc/data/nbody.py diff --git a/src/openmc/data/neutron.py b/python/openmc/data/neutron.py similarity index 100% rename from src/openmc/data/neutron.py rename to python/openmc/data/neutron.py diff --git a/src/openmc/data/njoy.py b/python/openmc/data/njoy.py similarity index 100% rename from src/openmc/data/njoy.py rename to python/openmc/data/njoy.py diff --git a/src/openmc/data/photon.py b/python/openmc/data/photon.py similarity index 100% rename from src/openmc/data/photon.py rename to python/openmc/data/photon.py diff --git a/src/openmc/data/product.py b/python/openmc/data/product.py similarity index 100% rename from src/openmc/data/product.py rename to python/openmc/data/product.py diff --git a/src/openmc/data/reaction.py b/python/openmc/data/reaction.py similarity index 100% rename from src/openmc/data/reaction.py rename to python/openmc/data/reaction.py diff --git a/src/openmc/data/resonance.py b/python/openmc/data/resonance.py similarity index 100% rename from src/openmc/data/resonance.py rename to python/openmc/data/resonance.py diff --git a/src/openmc/data/resonance_covariance.py b/python/openmc/data/resonance_covariance.py similarity index 100% rename from src/openmc/data/resonance_covariance.py rename to python/openmc/data/resonance_covariance.py diff --git a/src/openmc/data/thermal.py b/python/openmc/data/thermal.py similarity index 100% rename from src/openmc/data/thermal.py rename to python/openmc/data/thermal.py diff --git a/src/openmc/data/thermal_angle_energy.py b/python/openmc/data/thermal_angle_energy.py similarity index 100% rename from src/openmc/data/thermal_angle_energy.py rename to python/openmc/data/thermal_angle_energy.py diff --git a/src/openmc/data/uncorrelated.py b/python/openmc/data/uncorrelated.py similarity index 100% rename from src/openmc/data/uncorrelated.py rename to python/openmc/data/uncorrelated.py diff --git a/src/openmc/data/urr.py b/python/openmc/data/urr.py similarity index 100% rename from src/openmc/data/urr.py rename to python/openmc/data/urr.py diff --git a/src/openmc/deplete/__init__.py b/python/openmc/deplete/__init__.py similarity index 100% rename from src/openmc/deplete/__init__.py rename to python/openmc/deplete/__init__.py diff --git a/src/openmc/deplete/_matrix_funcs.py b/python/openmc/deplete/_matrix_funcs.py similarity index 100% rename from src/openmc/deplete/_matrix_funcs.py rename to python/openmc/deplete/_matrix_funcs.py diff --git a/src/openmc/deplete/abc.py b/python/openmc/deplete/abc.py similarity index 100% rename from src/openmc/deplete/abc.py rename to python/openmc/deplete/abc.py diff --git a/src/openmc/deplete/atom_number.py b/python/openmc/deplete/atom_number.py similarity index 100% rename from src/openmc/deplete/atom_number.py rename to python/openmc/deplete/atom_number.py diff --git a/src/openmc/deplete/chain.py b/python/openmc/deplete/chain.py similarity index 100% rename from src/openmc/deplete/chain.py rename to python/openmc/deplete/chain.py diff --git a/src/openmc/deplete/coupled_operator.py b/python/openmc/deplete/coupled_operator.py similarity index 100% rename from src/openmc/deplete/coupled_operator.py rename to python/openmc/deplete/coupled_operator.py diff --git a/src/openmc/deplete/cram.py b/python/openmc/deplete/cram.py similarity index 100% rename from src/openmc/deplete/cram.py rename to python/openmc/deplete/cram.py diff --git a/src/openmc/deplete/helpers.py b/python/openmc/deplete/helpers.py similarity index 100% rename from src/openmc/deplete/helpers.py rename to python/openmc/deplete/helpers.py diff --git a/src/openmc/deplete/independent_operator.py b/python/openmc/deplete/independent_operator.py similarity index 100% rename from src/openmc/deplete/independent_operator.py rename to python/openmc/deplete/independent_operator.py diff --git a/src/openmc/deplete/integrators.py b/python/openmc/deplete/integrators.py similarity index 100% rename from src/openmc/deplete/integrators.py rename to python/openmc/deplete/integrators.py diff --git a/src/openmc/deplete/microxs.py b/python/openmc/deplete/microxs.py similarity index 100% rename from src/openmc/deplete/microxs.py rename to python/openmc/deplete/microxs.py diff --git a/src/openmc/deplete/nuclide.py b/python/openmc/deplete/nuclide.py similarity index 100% rename from src/openmc/deplete/nuclide.py rename to python/openmc/deplete/nuclide.py diff --git a/src/openmc/deplete/openmc_operator.py b/python/openmc/deplete/openmc_operator.py similarity index 100% rename from src/openmc/deplete/openmc_operator.py rename to python/openmc/deplete/openmc_operator.py diff --git a/src/openmc/deplete/pool.py b/python/openmc/deplete/pool.py similarity index 100% rename from src/openmc/deplete/pool.py rename to python/openmc/deplete/pool.py diff --git a/src/openmc/deplete/reaction_rates.py b/python/openmc/deplete/reaction_rates.py similarity index 100% rename from src/openmc/deplete/reaction_rates.py rename to python/openmc/deplete/reaction_rates.py diff --git a/src/openmc/deplete/results.py b/python/openmc/deplete/results.py similarity index 100% rename from src/openmc/deplete/results.py rename to python/openmc/deplete/results.py diff --git a/src/openmc/deplete/stepresult.py b/python/openmc/deplete/stepresult.py similarity index 100% rename from src/openmc/deplete/stepresult.py rename to python/openmc/deplete/stepresult.py diff --git a/src/openmc/deplete/transfer_rates.py b/python/openmc/deplete/transfer_rates.py similarity index 100% rename from src/openmc/deplete/transfer_rates.py rename to python/openmc/deplete/transfer_rates.py diff --git a/src/openmc/dummy_comm.py b/python/openmc/dummy_comm.py similarity index 100% rename from src/openmc/dummy_comm.py rename to python/openmc/dummy_comm.py diff --git a/src/openmc/element.py b/python/openmc/element.py similarity index 100% rename from src/openmc/element.py rename to python/openmc/element.py diff --git a/src/openmc/examples.py b/python/openmc/examples.py similarity index 100% rename from src/openmc/examples.py rename to python/openmc/examples.py diff --git a/src/openmc/exceptions.py b/python/openmc/exceptions.py similarity index 100% rename from src/openmc/exceptions.py rename to python/openmc/exceptions.py diff --git a/src/openmc/executor.py b/python/openmc/executor.py similarity index 100% rename from src/openmc/executor.py rename to python/openmc/executor.py diff --git a/src/openmc/filter.py b/python/openmc/filter.py similarity index 100% rename from src/openmc/filter.py rename to python/openmc/filter.py diff --git a/src/openmc/filter_expansion.py b/python/openmc/filter_expansion.py similarity index 100% rename from src/openmc/filter_expansion.py rename to python/openmc/filter_expansion.py diff --git a/src/openmc/geometry.py b/python/openmc/geometry.py similarity index 100% rename from src/openmc/geometry.py rename to python/openmc/geometry.py diff --git a/src/openmc/lattice.py b/python/openmc/lattice.py similarity index 100% rename from src/openmc/lattice.py rename to python/openmc/lattice.py diff --git a/src/openmc/lib/__init__.py b/python/openmc/lib/__init__.py similarity index 100% rename from src/openmc/lib/__init__.py rename to python/openmc/lib/__init__.py diff --git a/src/openmc/lib/cell.py b/python/openmc/lib/cell.py similarity index 100% rename from src/openmc/lib/cell.py rename to python/openmc/lib/cell.py diff --git a/src/openmc/lib/core.py b/python/openmc/lib/core.py similarity index 100% rename from src/openmc/lib/core.py rename to python/openmc/lib/core.py diff --git a/src/openmc/lib/error.py b/python/openmc/lib/error.py similarity index 100% rename from src/openmc/lib/error.py rename to python/openmc/lib/error.py diff --git a/src/openmc/lib/filter.py b/python/openmc/lib/filter.py similarity index 100% rename from src/openmc/lib/filter.py rename to python/openmc/lib/filter.py diff --git a/src/openmc/lib/material.py b/python/openmc/lib/material.py similarity index 100% rename from src/openmc/lib/material.py rename to python/openmc/lib/material.py diff --git a/src/openmc/lib/math.py b/python/openmc/lib/math.py similarity index 100% rename from src/openmc/lib/math.py rename to python/openmc/lib/math.py diff --git a/src/openmc/lib/mesh.py b/python/openmc/lib/mesh.py similarity index 100% rename from src/openmc/lib/mesh.py rename to python/openmc/lib/mesh.py diff --git a/src/openmc/lib/nuclide.py b/python/openmc/lib/nuclide.py similarity index 100% rename from src/openmc/lib/nuclide.py rename to python/openmc/lib/nuclide.py diff --git a/src/openmc/lib/plot.py b/python/openmc/lib/plot.py similarity index 100% rename from src/openmc/lib/plot.py rename to python/openmc/lib/plot.py diff --git a/src/openmc/lib/settings.py b/python/openmc/lib/settings.py similarity index 100% rename from src/openmc/lib/settings.py rename to python/openmc/lib/settings.py diff --git a/src/openmc/lib/tally.py b/python/openmc/lib/tally.py similarity index 100% rename from src/openmc/lib/tally.py rename to python/openmc/lib/tally.py diff --git a/src/openmc/lib/weight_windows.py b/python/openmc/lib/weight_windows.py similarity index 100% rename from src/openmc/lib/weight_windows.py rename to python/openmc/lib/weight_windows.py diff --git a/src/openmc/macroscopic.py b/python/openmc/macroscopic.py similarity index 100% rename from src/openmc/macroscopic.py rename to python/openmc/macroscopic.py diff --git a/src/openmc/material.py b/python/openmc/material.py similarity index 100% rename from src/openmc/material.py rename to python/openmc/material.py diff --git a/src/openmc/mesh.py b/python/openmc/mesh.py similarity index 100% rename from src/openmc/mesh.py rename to python/openmc/mesh.py diff --git a/src/openmc/mgxs/__init__.py b/python/openmc/mgxs/__init__.py similarity index 100% rename from src/openmc/mgxs/__init__.py rename to python/openmc/mgxs/__init__.py diff --git a/src/openmc/mgxs/groups.py b/python/openmc/mgxs/groups.py similarity index 100% rename from src/openmc/mgxs/groups.py rename to python/openmc/mgxs/groups.py diff --git a/src/openmc/mgxs/library.py b/python/openmc/mgxs/library.py similarity index 100% rename from src/openmc/mgxs/library.py rename to python/openmc/mgxs/library.py diff --git a/src/openmc/mgxs/mdgxs.py b/python/openmc/mgxs/mdgxs.py similarity index 100% rename from src/openmc/mgxs/mdgxs.py rename to python/openmc/mgxs/mdgxs.py diff --git a/src/openmc/mgxs/mgxs.py b/python/openmc/mgxs/mgxs.py similarity index 100% rename from src/openmc/mgxs/mgxs.py rename to python/openmc/mgxs/mgxs.py diff --git a/src/openmc/mgxs_library.py b/python/openmc/mgxs_library.py similarity index 100% rename from src/openmc/mgxs_library.py rename to python/openmc/mgxs_library.py diff --git a/src/openmc/mixin.py b/python/openmc/mixin.py similarity index 100% rename from src/openmc/mixin.py rename to python/openmc/mixin.py diff --git a/src/openmc/model/__init__.py b/python/openmc/model/__init__.py similarity index 100% rename from src/openmc/model/__init__.py rename to python/openmc/model/__init__.py diff --git a/src/openmc/model/funcs.py b/python/openmc/model/funcs.py similarity index 100% rename from src/openmc/model/funcs.py rename to python/openmc/model/funcs.py diff --git a/src/openmc/model/model.py b/python/openmc/model/model.py similarity index 100% rename from src/openmc/model/model.py rename to python/openmc/model/model.py diff --git a/src/openmc/model/surface_composite.py b/python/openmc/model/surface_composite.py similarity index 100% rename from src/openmc/model/surface_composite.py rename to python/openmc/model/surface_composite.py diff --git a/src/openmc/model/triso.py b/python/openmc/model/triso.py similarity index 100% rename from src/openmc/model/triso.py rename to python/openmc/model/triso.py diff --git a/src/openmc/mpi.py b/python/openmc/mpi.py similarity index 100% rename from src/openmc/mpi.py rename to python/openmc/mpi.py diff --git a/src/openmc/nuclide.py b/python/openmc/nuclide.py similarity index 100% rename from src/openmc/nuclide.py rename to python/openmc/nuclide.py diff --git a/src/openmc/openmoc_compatible.py b/python/openmc/openmoc_compatible.py similarity index 100% rename from src/openmc/openmoc_compatible.py rename to python/openmc/openmoc_compatible.py diff --git a/src/openmc/particle_restart.py b/python/openmc/particle_restart.py similarity index 100% rename from src/openmc/particle_restart.py rename to python/openmc/particle_restart.py diff --git a/src/openmc/plots.py b/python/openmc/plots.py similarity index 100% rename from src/openmc/plots.py rename to python/openmc/plots.py diff --git a/src/openmc/plotter.py b/python/openmc/plotter.py similarity index 100% rename from src/openmc/plotter.py rename to python/openmc/plotter.py diff --git a/src/openmc/polynomial.py b/python/openmc/polynomial.py similarity index 100% rename from src/openmc/polynomial.py rename to python/openmc/polynomial.py diff --git a/src/openmc/region.py b/python/openmc/region.py similarity index 100% rename from src/openmc/region.py rename to python/openmc/region.py diff --git a/src/openmc/search.py b/python/openmc/search.py similarity index 100% rename from src/openmc/search.py rename to python/openmc/search.py diff --git a/src/openmc/settings.py b/python/openmc/settings.py similarity index 100% rename from src/openmc/settings.py rename to python/openmc/settings.py diff --git a/src/openmc/source.py b/python/openmc/source.py similarity index 100% rename from src/openmc/source.py rename to python/openmc/source.py diff --git a/src/openmc/statepoint.py b/python/openmc/statepoint.py similarity index 100% rename from src/openmc/statepoint.py rename to python/openmc/statepoint.py diff --git a/src/openmc/stats/__init__.py b/python/openmc/stats/__init__.py similarity index 100% rename from src/openmc/stats/__init__.py rename to python/openmc/stats/__init__.py diff --git a/src/openmc/stats/multivariate.py b/python/openmc/stats/multivariate.py similarity index 100% rename from src/openmc/stats/multivariate.py rename to python/openmc/stats/multivariate.py diff --git a/src/openmc/stats/univariate.py b/python/openmc/stats/univariate.py similarity index 100% rename from src/openmc/stats/univariate.py rename to python/openmc/stats/univariate.py diff --git a/src/openmc/summary.py b/python/openmc/summary.py similarity index 100% rename from src/openmc/summary.py rename to python/openmc/summary.py diff --git a/src/openmc/surface.py b/python/openmc/surface.py similarity index 100% rename from src/openmc/surface.py rename to python/openmc/surface.py diff --git a/src/openmc/tallies.py b/python/openmc/tallies.py similarity index 100% rename from src/openmc/tallies.py rename to python/openmc/tallies.py diff --git a/src/openmc/tally_derivative.py b/python/openmc/tally_derivative.py similarity index 100% rename from src/openmc/tally_derivative.py rename to python/openmc/tally_derivative.py diff --git a/src/openmc/tracks.py b/python/openmc/tracks.py similarity index 100% rename from src/openmc/tracks.py rename to python/openmc/tracks.py diff --git a/src/openmc/trigger.py b/python/openmc/trigger.py similarity index 100% rename from src/openmc/trigger.py rename to python/openmc/trigger.py diff --git a/src/openmc/universe.py b/python/openmc/universe.py similarity index 100% rename from src/openmc/universe.py rename to python/openmc/universe.py diff --git a/src/openmc/utility_funcs.py b/python/openmc/utility_funcs.py similarity index 100% rename from src/openmc/utility_funcs.py rename to python/openmc/utility_funcs.py diff --git a/src/openmc/volume.py b/python/openmc/volume.py similarity index 100% rename from src/openmc/volume.py rename to python/openmc/volume.py diff --git a/src/openmc/weight_windows.py b/python/openmc/weight_windows.py similarity index 100% rename from src/openmc/weight_windows.py rename to python/openmc/weight_windows.py From d80e7dff885d50cfc95855cf55e7ea015b1d2133 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 12 Dec 2024 22:25:59 +0600 Subject: [PATCH 085/145] python/openmc -> openmc --- {python/openmc => openmc}/__init__.py | 0 {python/openmc => openmc}/_xml.py | 0 {python/openmc => openmc}/arithmetic.py | 0 {python/openmc => openmc}/bounding_box.py | 0 {python/openmc => openmc}/cell.py | 0 {python/openmc => openmc}/checkvalue.py | 0 {python/openmc => openmc}/cmfd.py | 0 {python/openmc => openmc}/config.py | 0 {python/openmc => openmc}/data/BREMX.DAT | 0 {python/openmc => openmc}/data/__init__.py | 0 {python/openmc => openmc}/data/ace.py | 0 .../openmc => openmc}/data/angle_distribution.py | 0 {python/openmc => openmc}/data/angle_energy.py | 0 {python/openmc => openmc}/data/compton_profiles.h5 | Bin {python/openmc => openmc}/data/correlated.py | 0 {python/openmc => openmc}/data/data.py | 0 {python/openmc => openmc}/data/decay.py | 0 {python/openmc => openmc}/data/density_effect.h5 | Bin .../data/effective_dose/__init__.py | 0 .../openmc => openmc}/data/effective_dose/dose.py | 0 .../data/effective_dose/icrp116/electrons.txt | 0 .../data/effective_dose/icrp116/helium_ions.txt | 0 .../data/effective_dose/icrp116/negative_muons.txt | 0 .../data/effective_dose/icrp116/negative_pions.txt | 0 .../data/effective_dose/icrp116/neutrons.txt | 0 .../data/effective_dose/icrp116/photons.txt | 0 .../data/effective_dose/icrp116/photons_kerma.txt | 0 .../data/effective_dose/icrp116/positive_muons.txt | 0 .../data/effective_dose/icrp116/positive_pions.txt | 0 .../data/effective_dose/icrp116/positrons.txt | 0 .../data/effective_dose/icrp116/protons.txt | 0 .../icrp74/generate_photon_effective_dose.py | 0 .../data/effective_dose/icrp74/neutrons.txt | 0 .../data/effective_dose/icrp74/photons.txt | 0 {python/openmc => openmc}/data/endf.py | 0 .../openmc => openmc}/data/energy_distribution.py | 0 {python/openmc => openmc}/data/fission_energy.py | 0 {python/openmc => openmc}/data/function.py | 0 {python/openmc => openmc}/data/grid.py | 0 {python/openmc => openmc}/data/half_life.json | 0 {python/openmc => openmc}/data/kalbach_mann.py | 0 {python/openmc => openmc}/data/laboratory.py | 0 {python/openmc => openmc}/data/library.py | 0 {python/openmc => openmc}/data/mass_1.mas20.txt | 0 {python/openmc => openmc}/data/multipole.py | 0 {python/openmc => openmc}/data/nbody.py | 0 {python/openmc => openmc}/data/neutron.py | 0 {python/openmc => openmc}/data/njoy.py | 0 {python/openmc => openmc}/data/photon.py | 0 {python/openmc => openmc}/data/product.py | 0 {python/openmc => openmc}/data/reaction.py | 0 {python/openmc => openmc}/data/resonance.py | 0 .../openmc => openmc}/data/resonance_covariance.py | 0 {python/openmc => openmc}/data/thermal.py | 0 .../openmc => openmc}/data/thermal_angle_energy.py | 0 {python/openmc => openmc}/data/uncorrelated.py | 0 {python/openmc => openmc}/data/urr.py | 0 {python/openmc => openmc}/deplete/__init__.py | 0 {python/openmc => openmc}/deplete/_matrix_funcs.py | 0 {python/openmc => openmc}/deplete/abc.py | 0 {python/openmc => openmc}/deplete/atom_number.py | 0 {python/openmc => openmc}/deplete/chain.py | 0 .../openmc => openmc}/deplete/coupled_operator.py | 0 {python/openmc => openmc}/deplete/cram.py | 0 {python/openmc => openmc}/deplete/helpers.py | 0 .../deplete/independent_operator.py | 0 {python/openmc => openmc}/deplete/integrators.py | 0 {python/openmc => openmc}/deplete/microxs.py | 0 {python/openmc => openmc}/deplete/nuclide.py | 0 .../openmc => openmc}/deplete/openmc_operator.py | 0 {python/openmc => openmc}/deplete/pool.py | 0 {python/openmc => openmc}/deplete/reaction_rates.py | 0 {python/openmc => openmc}/deplete/results.py | 0 {python/openmc => openmc}/deplete/stepresult.py | 0 {python/openmc => openmc}/deplete/transfer_rates.py | 0 {python/openmc => openmc}/dummy_comm.py | 0 {python/openmc => openmc}/element.py | 0 {python/openmc => openmc}/examples.py | 0 {python/openmc => openmc}/exceptions.py | 0 {python/openmc => openmc}/executor.py | 0 {python/openmc => openmc}/filter.py | 0 {python/openmc => openmc}/filter_expansion.py | 0 {python/openmc => openmc}/geometry.py | 0 {python/openmc => openmc}/lattice.py | 0 {python/openmc => openmc}/lib/__init__.py | 0 {python/openmc => openmc}/lib/cell.py | 0 {python/openmc => openmc}/lib/core.py | 0 {python/openmc => openmc}/lib/error.py | 0 {python/openmc => openmc}/lib/filter.py | 0 {python/openmc => openmc}/lib/material.py | 0 {python/openmc => openmc}/lib/math.py | 0 {python/openmc => openmc}/lib/mesh.py | 0 {python/openmc => openmc}/lib/nuclide.py | 0 {python/openmc => openmc}/lib/plot.py | 0 {python/openmc => openmc}/lib/settings.py | 0 {python/openmc => openmc}/lib/tally.py | 0 {python/openmc => openmc}/lib/weight_windows.py | 0 {python/openmc => openmc}/macroscopic.py | 0 {python/openmc => openmc}/material.py | 0 {python/openmc => openmc}/mesh.py | 0 {python/openmc => openmc}/mgxs/__init__.py | 0 {python/openmc => openmc}/mgxs/groups.py | 0 {python/openmc => openmc}/mgxs/library.py | 0 {python/openmc => openmc}/mgxs/mdgxs.py | 0 {python/openmc => openmc}/mgxs/mgxs.py | 0 {python/openmc => openmc}/mgxs_library.py | 0 {python/openmc => openmc}/mixin.py | 0 {python/openmc => openmc}/model/__init__.py | 0 {python/openmc => openmc}/model/funcs.py | 0 {python/openmc => openmc}/model/model.py | 0 .../openmc => openmc}/model/surface_composite.py | 0 {python/openmc => openmc}/model/triso.py | 0 {python/openmc => openmc}/mpi.py | 0 {python/openmc => openmc}/nuclide.py | 0 {python/openmc => openmc}/openmoc_compatible.py | 0 {python/openmc => openmc}/particle_restart.py | 0 {python/openmc => openmc}/plots.py | 0 {python/openmc => openmc}/plotter.py | 0 {python/openmc => openmc}/polynomial.py | 0 {python/openmc => openmc}/region.py | 0 {python/openmc => openmc}/search.py | 0 {python/openmc => openmc}/settings.py | 0 {python/openmc => openmc}/source.py | 0 {python/openmc => openmc}/statepoint.py | 0 {python/openmc => openmc}/stats/__init__.py | 0 {python/openmc => openmc}/stats/multivariate.py | 0 {python/openmc => openmc}/stats/univariate.py | 0 {python/openmc => openmc}/summary.py | 0 {python/openmc => openmc}/surface.py | 0 {python/openmc => openmc}/tallies.py | 0 {python/openmc => openmc}/tally_derivative.py | 0 {python/openmc => openmc}/tracks.py | 0 {python/openmc => openmc}/trigger.py | 0 {python/openmc => openmc}/universe.py | 0 {python/openmc => openmc}/utility_funcs.py | 0 {python/openmc => openmc}/volume.py | 0 {python/openmc => openmc}/weight_windows.py | 0 137 files changed, 0 insertions(+), 0 deletions(-) rename {python/openmc => openmc}/__init__.py (100%) rename {python/openmc => openmc}/_xml.py (100%) rename {python/openmc => openmc}/arithmetic.py (100%) rename {python/openmc => openmc}/bounding_box.py (100%) rename {python/openmc => openmc}/cell.py (100%) rename {python/openmc => openmc}/checkvalue.py (100%) rename {python/openmc => openmc}/cmfd.py (100%) rename {python/openmc => openmc}/config.py (100%) rename {python/openmc => openmc}/data/BREMX.DAT (100%) rename {python/openmc => openmc}/data/__init__.py (100%) rename {python/openmc => openmc}/data/ace.py (100%) rename {python/openmc => openmc}/data/angle_distribution.py (100%) rename {python/openmc => openmc}/data/angle_energy.py (100%) rename {python/openmc => openmc}/data/compton_profiles.h5 (100%) rename {python/openmc => openmc}/data/correlated.py (100%) rename {python/openmc => openmc}/data/data.py (100%) rename {python/openmc => openmc}/data/decay.py (100%) rename {python/openmc => openmc}/data/density_effect.h5 (100%) rename {python/openmc => openmc}/data/effective_dose/__init__.py (100%) rename {python/openmc => openmc}/data/effective_dose/dose.py (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {python/openmc => openmc}/data/endf.py (100%) rename {python/openmc => openmc}/data/energy_distribution.py (100%) rename {python/openmc => openmc}/data/fission_energy.py (100%) rename {python/openmc => openmc}/data/function.py (100%) rename {python/openmc => openmc}/data/grid.py (100%) rename {python/openmc => openmc}/data/half_life.json (100%) rename {python/openmc => openmc}/data/kalbach_mann.py (100%) rename {python/openmc => openmc}/data/laboratory.py (100%) rename {python/openmc => openmc}/data/library.py (100%) rename {python/openmc => openmc}/data/mass_1.mas20.txt (100%) rename {python/openmc => openmc}/data/multipole.py (100%) rename {python/openmc => openmc}/data/nbody.py (100%) rename {python/openmc => openmc}/data/neutron.py (100%) rename {python/openmc => openmc}/data/njoy.py (100%) rename {python/openmc => openmc}/data/photon.py (100%) rename {python/openmc => openmc}/data/product.py (100%) rename {python/openmc => openmc}/data/reaction.py (100%) rename {python/openmc => openmc}/data/resonance.py (100%) rename {python/openmc => openmc}/data/resonance_covariance.py (100%) rename {python/openmc => openmc}/data/thermal.py (100%) rename {python/openmc => openmc}/data/thermal_angle_energy.py (100%) rename {python/openmc => openmc}/data/uncorrelated.py (100%) rename {python/openmc => openmc}/data/urr.py (100%) rename {python/openmc => openmc}/deplete/__init__.py (100%) rename {python/openmc => openmc}/deplete/_matrix_funcs.py (100%) rename {python/openmc => openmc}/deplete/abc.py (100%) rename {python/openmc => openmc}/deplete/atom_number.py (100%) rename {python/openmc => openmc}/deplete/chain.py (100%) rename {python/openmc => openmc}/deplete/coupled_operator.py (100%) rename {python/openmc => openmc}/deplete/cram.py (100%) rename {python/openmc => openmc}/deplete/helpers.py (100%) rename {python/openmc => openmc}/deplete/independent_operator.py (100%) rename {python/openmc => openmc}/deplete/integrators.py (100%) rename {python/openmc => openmc}/deplete/microxs.py (100%) rename {python/openmc => openmc}/deplete/nuclide.py (100%) rename {python/openmc => openmc}/deplete/openmc_operator.py (100%) rename {python/openmc => openmc}/deplete/pool.py (100%) rename {python/openmc => openmc}/deplete/reaction_rates.py (100%) rename {python/openmc => openmc}/deplete/results.py (100%) rename {python/openmc => openmc}/deplete/stepresult.py (100%) rename {python/openmc => openmc}/deplete/transfer_rates.py (100%) rename {python/openmc => openmc}/dummy_comm.py (100%) rename {python/openmc => openmc}/element.py (100%) rename {python/openmc => openmc}/examples.py (100%) rename {python/openmc => openmc}/exceptions.py (100%) rename {python/openmc => openmc}/executor.py (100%) rename {python/openmc => openmc}/filter.py (100%) rename {python/openmc => openmc}/filter_expansion.py (100%) rename {python/openmc => openmc}/geometry.py (100%) rename {python/openmc => openmc}/lattice.py (100%) rename {python/openmc => openmc}/lib/__init__.py (100%) rename {python/openmc => openmc}/lib/cell.py (100%) rename {python/openmc => openmc}/lib/core.py (100%) rename {python/openmc => openmc}/lib/error.py (100%) rename {python/openmc => openmc}/lib/filter.py (100%) rename {python/openmc => openmc}/lib/material.py (100%) rename {python/openmc => openmc}/lib/math.py (100%) rename {python/openmc => openmc}/lib/mesh.py (100%) rename {python/openmc => openmc}/lib/nuclide.py (100%) rename {python/openmc => openmc}/lib/plot.py (100%) rename {python/openmc => openmc}/lib/settings.py (100%) rename {python/openmc => openmc}/lib/tally.py (100%) rename {python/openmc => openmc}/lib/weight_windows.py (100%) rename {python/openmc => openmc}/macroscopic.py (100%) rename {python/openmc => openmc}/material.py (100%) rename {python/openmc => openmc}/mesh.py (100%) rename {python/openmc => openmc}/mgxs/__init__.py (100%) rename {python/openmc => openmc}/mgxs/groups.py (100%) rename {python/openmc => openmc}/mgxs/library.py (100%) rename {python/openmc => openmc}/mgxs/mdgxs.py (100%) rename {python/openmc => openmc}/mgxs/mgxs.py (100%) rename {python/openmc => openmc}/mgxs_library.py (100%) rename {python/openmc => openmc}/mixin.py (100%) rename {python/openmc => openmc}/model/__init__.py (100%) rename {python/openmc => openmc}/model/funcs.py (100%) rename {python/openmc => openmc}/model/model.py (100%) rename {python/openmc => openmc}/model/surface_composite.py (100%) rename {python/openmc => openmc}/model/triso.py (100%) rename {python/openmc => openmc}/mpi.py (100%) rename {python/openmc => openmc}/nuclide.py (100%) rename {python/openmc => openmc}/openmoc_compatible.py (100%) rename {python/openmc => openmc}/particle_restart.py (100%) rename {python/openmc => openmc}/plots.py (100%) rename {python/openmc => openmc}/plotter.py (100%) rename {python/openmc => openmc}/polynomial.py (100%) rename {python/openmc => openmc}/region.py (100%) rename {python/openmc => openmc}/search.py (100%) rename {python/openmc => openmc}/settings.py (100%) rename {python/openmc => openmc}/source.py (100%) rename {python/openmc => openmc}/statepoint.py (100%) rename {python/openmc => openmc}/stats/__init__.py (100%) rename {python/openmc => openmc}/stats/multivariate.py (100%) rename {python/openmc => openmc}/stats/univariate.py (100%) rename {python/openmc => openmc}/summary.py (100%) rename {python/openmc => openmc}/surface.py (100%) rename {python/openmc => openmc}/tallies.py (100%) rename {python/openmc => openmc}/tally_derivative.py (100%) rename {python/openmc => openmc}/tracks.py (100%) rename {python/openmc => openmc}/trigger.py (100%) rename {python/openmc => openmc}/universe.py (100%) rename {python/openmc => openmc}/utility_funcs.py (100%) rename {python/openmc => openmc}/volume.py (100%) rename {python/openmc => openmc}/weight_windows.py (100%) diff --git a/python/openmc/__init__.py b/openmc/__init__.py similarity index 100% rename from python/openmc/__init__.py rename to openmc/__init__.py diff --git a/python/openmc/_xml.py b/openmc/_xml.py similarity index 100% rename from python/openmc/_xml.py rename to openmc/_xml.py diff --git a/python/openmc/arithmetic.py b/openmc/arithmetic.py similarity index 100% rename from python/openmc/arithmetic.py rename to openmc/arithmetic.py diff --git a/python/openmc/bounding_box.py b/openmc/bounding_box.py similarity index 100% rename from python/openmc/bounding_box.py rename to openmc/bounding_box.py diff --git a/python/openmc/cell.py b/openmc/cell.py similarity index 100% rename from python/openmc/cell.py rename to openmc/cell.py diff --git a/python/openmc/checkvalue.py b/openmc/checkvalue.py similarity index 100% rename from python/openmc/checkvalue.py rename to openmc/checkvalue.py diff --git a/python/openmc/cmfd.py b/openmc/cmfd.py similarity index 100% rename from python/openmc/cmfd.py rename to openmc/cmfd.py diff --git a/python/openmc/config.py b/openmc/config.py similarity index 100% rename from python/openmc/config.py rename to openmc/config.py diff --git a/python/openmc/data/BREMX.DAT b/openmc/data/BREMX.DAT similarity index 100% rename from python/openmc/data/BREMX.DAT rename to openmc/data/BREMX.DAT diff --git a/python/openmc/data/__init__.py b/openmc/data/__init__.py similarity index 100% rename from python/openmc/data/__init__.py rename to openmc/data/__init__.py diff --git a/python/openmc/data/ace.py b/openmc/data/ace.py similarity index 100% rename from python/openmc/data/ace.py rename to openmc/data/ace.py diff --git a/python/openmc/data/angle_distribution.py b/openmc/data/angle_distribution.py similarity index 100% rename from python/openmc/data/angle_distribution.py rename to openmc/data/angle_distribution.py diff --git a/python/openmc/data/angle_energy.py b/openmc/data/angle_energy.py similarity index 100% rename from python/openmc/data/angle_energy.py rename to openmc/data/angle_energy.py diff --git a/python/openmc/data/compton_profiles.h5 b/openmc/data/compton_profiles.h5 similarity index 100% rename from python/openmc/data/compton_profiles.h5 rename to openmc/data/compton_profiles.h5 diff --git a/python/openmc/data/correlated.py b/openmc/data/correlated.py similarity index 100% rename from python/openmc/data/correlated.py rename to openmc/data/correlated.py diff --git a/python/openmc/data/data.py b/openmc/data/data.py similarity index 100% rename from python/openmc/data/data.py rename to openmc/data/data.py diff --git a/python/openmc/data/decay.py b/openmc/data/decay.py similarity index 100% rename from python/openmc/data/decay.py rename to openmc/data/decay.py diff --git a/python/openmc/data/density_effect.h5 b/openmc/data/density_effect.h5 similarity index 100% rename from python/openmc/data/density_effect.h5 rename to openmc/data/density_effect.h5 diff --git a/python/openmc/data/effective_dose/__init__.py b/openmc/data/effective_dose/__init__.py similarity index 100% rename from python/openmc/data/effective_dose/__init__.py rename to openmc/data/effective_dose/__init__.py diff --git a/python/openmc/data/effective_dose/dose.py b/openmc/data/effective_dose/dose.py similarity index 100% rename from python/openmc/data/effective_dose/dose.py rename to openmc/data/effective_dose/dose.py diff --git a/python/openmc/data/effective_dose/icrp116/electrons.txt b/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/electrons.txt rename to openmc/data/effective_dose/icrp116/electrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/helium_ions.txt b/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/helium_ions.txt rename to openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/python/openmc/data/effective_dose/icrp116/negative_muons.txt b/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/negative_muons.txt rename to openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/python/openmc/data/effective_dose/icrp116/negative_pions.txt b/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/negative_pions.txt rename to openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/python/openmc/data/effective_dose/icrp116/neutrons.txt b/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/neutrons.txt rename to openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/photons.txt b/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/photons.txt rename to openmc/data/effective_dose/icrp116/photons.txt diff --git a/python/openmc/data/effective_dose/icrp116/photons_kerma.txt b/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/photons_kerma.txt rename to openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/python/openmc/data/effective_dose/icrp116/positive_muons.txt b/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positive_muons.txt rename to openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/python/openmc/data/effective_dose/icrp116/positive_pions.txt b/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positive_pions.txt rename to openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/python/openmc/data/effective_dose/icrp116/positrons.txt b/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positrons.txt rename to openmc/data/effective_dose/icrp116/positrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/protons.txt b/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/protons.txt rename to openmc/data/effective_dose/icrp116/protons.txt diff --git a/python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/python/openmc/data/effective_dose/icrp74/neutrons.txt b/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp74/neutrons.txt rename to openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/python/openmc/data/effective_dose/icrp74/photons.txt b/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp74/photons.txt rename to openmc/data/effective_dose/icrp74/photons.txt diff --git a/python/openmc/data/endf.py b/openmc/data/endf.py similarity index 100% rename from python/openmc/data/endf.py rename to openmc/data/endf.py diff --git a/python/openmc/data/energy_distribution.py b/openmc/data/energy_distribution.py similarity index 100% rename from python/openmc/data/energy_distribution.py rename to openmc/data/energy_distribution.py diff --git a/python/openmc/data/fission_energy.py b/openmc/data/fission_energy.py similarity index 100% rename from python/openmc/data/fission_energy.py rename to openmc/data/fission_energy.py diff --git a/python/openmc/data/function.py b/openmc/data/function.py similarity index 100% rename from python/openmc/data/function.py rename to openmc/data/function.py diff --git a/python/openmc/data/grid.py b/openmc/data/grid.py similarity index 100% rename from python/openmc/data/grid.py rename to openmc/data/grid.py diff --git a/python/openmc/data/half_life.json b/openmc/data/half_life.json similarity index 100% rename from python/openmc/data/half_life.json rename to openmc/data/half_life.json diff --git a/python/openmc/data/kalbach_mann.py b/openmc/data/kalbach_mann.py similarity index 100% rename from python/openmc/data/kalbach_mann.py rename to openmc/data/kalbach_mann.py diff --git a/python/openmc/data/laboratory.py b/openmc/data/laboratory.py similarity index 100% rename from python/openmc/data/laboratory.py rename to openmc/data/laboratory.py diff --git a/python/openmc/data/library.py b/openmc/data/library.py similarity index 100% rename from python/openmc/data/library.py rename to openmc/data/library.py diff --git a/python/openmc/data/mass_1.mas20.txt b/openmc/data/mass_1.mas20.txt similarity index 100% rename from python/openmc/data/mass_1.mas20.txt rename to openmc/data/mass_1.mas20.txt diff --git a/python/openmc/data/multipole.py b/openmc/data/multipole.py similarity index 100% rename from python/openmc/data/multipole.py rename to openmc/data/multipole.py diff --git a/python/openmc/data/nbody.py b/openmc/data/nbody.py similarity index 100% rename from python/openmc/data/nbody.py rename to openmc/data/nbody.py diff --git a/python/openmc/data/neutron.py b/openmc/data/neutron.py similarity index 100% rename from python/openmc/data/neutron.py rename to openmc/data/neutron.py diff --git a/python/openmc/data/njoy.py b/openmc/data/njoy.py similarity index 100% rename from python/openmc/data/njoy.py rename to openmc/data/njoy.py diff --git a/python/openmc/data/photon.py b/openmc/data/photon.py similarity index 100% rename from python/openmc/data/photon.py rename to openmc/data/photon.py diff --git a/python/openmc/data/product.py b/openmc/data/product.py similarity index 100% rename from python/openmc/data/product.py rename to openmc/data/product.py diff --git a/python/openmc/data/reaction.py b/openmc/data/reaction.py similarity index 100% rename from python/openmc/data/reaction.py rename to openmc/data/reaction.py diff --git a/python/openmc/data/resonance.py b/openmc/data/resonance.py similarity index 100% rename from python/openmc/data/resonance.py rename to openmc/data/resonance.py diff --git a/python/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py similarity index 100% rename from python/openmc/data/resonance_covariance.py rename to openmc/data/resonance_covariance.py diff --git a/python/openmc/data/thermal.py b/openmc/data/thermal.py similarity index 100% rename from python/openmc/data/thermal.py rename to openmc/data/thermal.py diff --git a/python/openmc/data/thermal_angle_energy.py b/openmc/data/thermal_angle_energy.py similarity index 100% rename from python/openmc/data/thermal_angle_energy.py rename to openmc/data/thermal_angle_energy.py diff --git a/python/openmc/data/uncorrelated.py b/openmc/data/uncorrelated.py similarity index 100% rename from python/openmc/data/uncorrelated.py rename to openmc/data/uncorrelated.py diff --git a/python/openmc/data/urr.py b/openmc/data/urr.py similarity index 100% rename from python/openmc/data/urr.py rename to openmc/data/urr.py diff --git a/python/openmc/deplete/__init__.py b/openmc/deplete/__init__.py similarity index 100% rename from python/openmc/deplete/__init__.py rename to openmc/deplete/__init__.py diff --git a/python/openmc/deplete/_matrix_funcs.py b/openmc/deplete/_matrix_funcs.py similarity index 100% rename from python/openmc/deplete/_matrix_funcs.py rename to openmc/deplete/_matrix_funcs.py diff --git a/python/openmc/deplete/abc.py b/openmc/deplete/abc.py similarity index 100% rename from python/openmc/deplete/abc.py rename to openmc/deplete/abc.py diff --git a/python/openmc/deplete/atom_number.py b/openmc/deplete/atom_number.py similarity index 100% rename from python/openmc/deplete/atom_number.py rename to openmc/deplete/atom_number.py diff --git a/python/openmc/deplete/chain.py b/openmc/deplete/chain.py similarity index 100% rename from python/openmc/deplete/chain.py rename to openmc/deplete/chain.py diff --git a/python/openmc/deplete/coupled_operator.py b/openmc/deplete/coupled_operator.py similarity index 100% rename from python/openmc/deplete/coupled_operator.py rename to openmc/deplete/coupled_operator.py diff --git a/python/openmc/deplete/cram.py b/openmc/deplete/cram.py similarity index 100% rename from python/openmc/deplete/cram.py rename to openmc/deplete/cram.py diff --git a/python/openmc/deplete/helpers.py b/openmc/deplete/helpers.py similarity index 100% rename from python/openmc/deplete/helpers.py rename to openmc/deplete/helpers.py diff --git a/python/openmc/deplete/independent_operator.py b/openmc/deplete/independent_operator.py similarity index 100% rename from python/openmc/deplete/independent_operator.py rename to openmc/deplete/independent_operator.py diff --git a/python/openmc/deplete/integrators.py b/openmc/deplete/integrators.py similarity index 100% rename from python/openmc/deplete/integrators.py rename to openmc/deplete/integrators.py diff --git a/python/openmc/deplete/microxs.py b/openmc/deplete/microxs.py similarity index 100% rename from python/openmc/deplete/microxs.py rename to openmc/deplete/microxs.py diff --git a/python/openmc/deplete/nuclide.py b/openmc/deplete/nuclide.py similarity index 100% rename from python/openmc/deplete/nuclide.py rename to openmc/deplete/nuclide.py diff --git a/python/openmc/deplete/openmc_operator.py b/openmc/deplete/openmc_operator.py similarity index 100% rename from python/openmc/deplete/openmc_operator.py rename to openmc/deplete/openmc_operator.py diff --git a/python/openmc/deplete/pool.py b/openmc/deplete/pool.py similarity index 100% rename from python/openmc/deplete/pool.py rename to openmc/deplete/pool.py diff --git a/python/openmc/deplete/reaction_rates.py b/openmc/deplete/reaction_rates.py similarity index 100% rename from python/openmc/deplete/reaction_rates.py rename to openmc/deplete/reaction_rates.py diff --git a/python/openmc/deplete/results.py b/openmc/deplete/results.py similarity index 100% rename from python/openmc/deplete/results.py rename to openmc/deplete/results.py diff --git a/python/openmc/deplete/stepresult.py b/openmc/deplete/stepresult.py similarity index 100% rename from python/openmc/deplete/stepresult.py rename to openmc/deplete/stepresult.py diff --git a/python/openmc/deplete/transfer_rates.py b/openmc/deplete/transfer_rates.py similarity index 100% rename from python/openmc/deplete/transfer_rates.py rename to openmc/deplete/transfer_rates.py diff --git a/python/openmc/dummy_comm.py b/openmc/dummy_comm.py similarity index 100% rename from python/openmc/dummy_comm.py rename to openmc/dummy_comm.py diff --git a/python/openmc/element.py b/openmc/element.py similarity index 100% rename from python/openmc/element.py rename to openmc/element.py diff --git a/python/openmc/examples.py b/openmc/examples.py similarity index 100% rename from python/openmc/examples.py rename to openmc/examples.py diff --git a/python/openmc/exceptions.py b/openmc/exceptions.py similarity index 100% rename from python/openmc/exceptions.py rename to openmc/exceptions.py diff --git a/python/openmc/executor.py b/openmc/executor.py similarity index 100% rename from python/openmc/executor.py rename to openmc/executor.py diff --git a/python/openmc/filter.py b/openmc/filter.py similarity index 100% rename from python/openmc/filter.py rename to openmc/filter.py diff --git a/python/openmc/filter_expansion.py b/openmc/filter_expansion.py similarity index 100% rename from python/openmc/filter_expansion.py rename to openmc/filter_expansion.py diff --git a/python/openmc/geometry.py b/openmc/geometry.py similarity index 100% rename from python/openmc/geometry.py rename to openmc/geometry.py diff --git a/python/openmc/lattice.py b/openmc/lattice.py similarity index 100% rename from python/openmc/lattice.py rename to openmc/lattice.py diff --git a/python/openmc/lib/__init__.py b/openmc/lib/__init__.py similarity index 100% rename from python/openmc/lib/__init__.py rename to openmc/lib/__init__.py diff --git a/python/openmc/lib/cell.py b/openmc/lib/cell.py similarity index 100% rename from python/openmc/lib/cell.py rename to openmc/lib/cell.py diff --git a/python/openmc/lib/core.py b/openmc/lib/core.py similarity index 100% rename from python/openmc/lib/core.py rename to openmc/lib/core.py diff --git a/python/openmc/lib/error.py b/openmc/lib/error.py similarity index 100% rename from python/openmc/lib/error.py rename to openmc/lib/error.py diff --git a/python/openmc/lib/filter.py b/openmc/lib/filter.py similarity index 100% rename from python/openmc/lib/filter.py rename to openmc/lib/filter.py diff --git a/python/openmc/lib/material.py b/openmc/lib/material.py similarity index 100% rename from python/openmc/lib/material.py rename to openmc/lib/material.py diff --git a/python/openmc/lib/math.py b/openmc/lib/math.py similarity index 100% rename from python/openmc/lib/math.py rename to openmc/lib/math.py diff --git a/python/openmc/lib/mesh.py b/openmc/lib/mesh.py similarity index 100% rename from python/openmc/lib/mesh.py rename to openmc/lib/mesh.py diff --git a/python/openmc/lib/nuclide.py b/openmc/lib/nuclide.py similarity index 100% rename from python/openmc/lib/nuclide.py rename to openmc/lib/nuclide.py diff --git a/python/openmc/lib/plot.py b/openmc/lib/plot.py similarity index 100% rename from python/openmc/lib/plot.py rename to openmc/lib/plot.py diff --git a/python/openmc/lib/settings.py b/openmc/lib/settings.py similarity index 100% rename from python/openmc/lib/settings.py rename to openmc/lib/settings.py diff --git a/python/openmc/lib/tally.py b/openmc/lib/tally.py similarity index 100% rename from python/openmc/lib/tally.py rename to openmc/lib/tally.py diff --git a/python/openmc/lib/weight_windows.py b/openmc/lib/weight_windows.py similarity index 100% rename from python/openmc/lib/weight_windows.py rename to openmc/lib/weight_windows.py diff --git a/python/openmc/macroscopic.py b/openmc/macroscopic.py similarity index 100% rename from python/openmc/macroscopic.py rename to openmc/macroscopic.py diff --git a/python/openmc/material.py b/openmc/material.py similarity index 100% rename from python/openmc/material.py rename to openmc/material.py diff --git a/python/openmc/mesh.py b/openmc/mesh.py similarity index 100% rename from python/openmc/mesh.py rename to openmc/mesh.py diff --git a/python/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py similarity index 100% rename from python/openmc/mgxs/__init__.py rename to openmc/mgxs/__init__.py diff --git a/python/openmc/mgxs/groups.py b/openmc/mgxs/groups.py similarity index 100% rename from python/openmc/mgxs/groups.py rename to openmc/mgxs/groups.py diff --git a/python/openmc/mgxs/library.py b/openmc/mgxs/library.py similarity index 100% rename from python/openmc/mgxs/library.py rename to openmc/mgxs/library.py diff --git a/python/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py similarity index 100% rename from python/openmc/mgxs/mdgxs.py rename to openmc/mgxs/mdgxs.py diff --git a/python/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py similarity index 100% rename from python/openmc/mgxs/mgxs.py rename to openmc/mgxs/mgxs.py diff --git a/python/openmc/mgxs_library.py b/openmc/mgxs_library.py similarity index 100% rename from python/openmc/mgxs_library.py rename to openmc/mgxs_library.py diff --git a/python/openmc/mixin.py b/openmc/mixin.py similarity index 100% rename from python/openmc/mixin.py rename to openmc/mixin.py diff --git a/python/openmc/model/__init__.py b/openmc/model/__init__.py similarity index 100% rename from python/openmc/model/__init__.py rename to openmc/model/__init__.py diff --git a/python/openmc/model/funcs.py b/openmc/model/funcs.py similarity index 100% rename from python/openmc/model/funcs.py rename to openmc/model/funcs.py diff --git a/python/openmc/model/model.py b/openmc/model/model.py similarity index 100% rename from python/openmc/model/model.py rename to openmc/model/model.py diff --git a/python/openmc/model/surface_composite.py b/openmc/model/surface_composite.py similarity index 100% rename from python/openmc/model/surface_composite.py rename to openmc/model/surface_composite.py diff --git a/python/openmc/model/triso.py b/openmc/model/triso.py similarity index 100% rename from python/openmc/model/triso.py rename to openmc/model/triso.py diff --git a/python/openmc/mpi.py b/openmc/mpi.py similarity index 100% rename from python/openmc/mpi.py rename to openmc/mpi.py diff --git a/python/openmc/nuclide.py b/openmc/nuclide.py similarity index 100% rename from python/openmc/nuclide.py rename to openmc/nuclide.py diff --git a/python/openmc/openmoc_compatible.py b/openmc/openmoc_compatible.py similarity index 100% rename from python/openmc/openmoc_compatible.py rename to openmc/openmoc_compatible.py diff --git a/python/openmc/particle_restart.py b/openmc/particle_restart.py similarity index 100% rename from python/openmc/particle_restart.py rename to openmc/particle_restart.py diff --git a/python/openmc/plots.py b/openmc/plots.py similarity index 100% rename from python/openmc/plots.py rename to openmc/plots.py diff --git a/python/openmc/plotter.py b/openmc/plotter.py similarity index 100% rename from python/openmc/plotter.py rename to openmc/plotter.py diff --git a/python/openmc/polynomial.py b/openmc/polynomial.py similarity index 100% rename from python/openmc/polynomial.py rename to openmc/polynomial.py diff --git a/python/openmc/region.py b/openmc/region.py similarity index 100% rename from python/openmc/region.py rename to openmc/region.py diff --git a/python/openmc/search.py b/openmc/search.py similarity index 100% rename from python/openmc/search.py rename to openmc/search.py diff --git a/python/openmc/settings.py b/openmc/settings.py similarity index 100% rename from python/openmc/settings.py rename to openmc/settings.py diff --git a/python/openmc/source.py b/openmc/source.py similarity index 100% rename from python/openmc/source.py rename to openmc/source.py diff --git a/python/openmc/statepoint.py b/openmc/statepoint.py similarity index 100% rename from python/openmc/statepoint.py rename to openmc/statepoint.py diff --git a/python/openmc/stats/__init__.py b/openmc/stats/__init__.py similarity index 100% rename from python/openmc/stats/__init__.py rename to openmc/stats/__init__.py diff --git a/python/openmc/stats/multivariate.py b/openmc/stats/multivariate.py similarity index 100% rename from python/openmc/stats/multivariate.py rename to openmc/stats/multivariate.py diff --git a/python/openmc/stats/univariate.py b/openmc/stats/univariate.py similarity index 100% rename from python/openmc/stats/univariate.py rename to openmc/stats/univariate.py diff --git a/python/openmc/summary.py b/openmc/summary.py similarity index 100% rename from python/openmc/summary.py rename to openmc/summary.py diff --git a/python/openmc/surface.py b/openmc/surface.py similarity index 100% rename from python/openmc/surface.py rename to openmc/surface.py diff --git a/python/openmc/tallies.py b/openmc/tallies.py similarity index 100% rename from python/openmc/tallies.py rename to openmc/tallies.py diff --git a/python/openmc/tally_derivative.py b/openmc/tally_derivative.py similarity index 100% rename from python/openmc/tally_derivative.py rename to openmc/tally_derivative.py diff --git a/python/openmc/tracks.py b/openmc/tracks.py similarity index 100% rename from python/openmc/tracks.py rename to openmc/tracks.py diff --git a/python/openmc/trigger.py b/openmc/trigger.py similarity index 100% rename from python/openmc/trigger.py rename to openmc/trigger.py diff --git a/python/openmc/universe.py b/openmc/universe.py similarity index 100% rename from python/openmc/universe.py rename to openmc/universe.py diff --git a/python/openmc/utility_funcs.py b/openmc/utility_funcs.py similarity index 100% rename from python/openmc/utility_funcs.py rename to openmc/utility_funcs.py diff --git a/python/openmc/volume.py b/openmc/volume.py similarity index 100% rename from python/openmc/volume.py rename to openmc/volume.py diff --git a/python/openmc/weight_windows.py b/openmc/weight_windows.py similarity index 100% rename from python/openmc/weight_windows.py rename to openmc/weight_windows.py From 79e789b508e046ddc15f87e50a8f4a39a7740e31 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 12 Dec 2024 22:27:04 +0600 Subject: [PATCH 086/145] openmc -> python/openmc --- {openmc => python/openmc}/__init__.py | 0 {openmc => python/openmc}/_xml.py | 0 {openmc => python/openmc}/arithmetic.py | 0 {openmc => python/openmc}/bounding_box.py | 0 {openmc => python/openmc}/cell.py | 0 {openmc => python/openmc}/checkvalue.py | 0 {openmc => python/openmc}/cmfd.py | 0 {openmc => python/openmc}/config.py | 0 {openmc => python/openmc}/data/BREMX.DAT | 0 {openmc => python/openmc}/data/__init__.py | 0 {openmc => python/openmc}/data/ace.py | 0 .../openmc}/data/angle_distribution.py | 0 {openmc => python/openmc}/data/angle_energy.py | 0 {openmc => python/openmc}/data/compton_profiles.h5 | Bin {openmc => python/openmc}/data/correlated.py | 0 {openmc => python/openmc}/data/data.py | 0 {openmc => python/openmc}/data/decay.py | 0 {openmc => python/openmc}/data/density_effect.h5 | Bin .../openmc}/data/effective_dose/__init__.py | 0 .../openmc}/data/effective_dose/dose.py | 0 .../data/effective_dose/icrp116/electrons.txt | 0 .../data/effective_dose/icrp116/helium_ions.txt | 0 .../data/effective_dose/icrp116/negative_muons.txt | 0 .../data/effective_dose/icrp116/negative_pions.txt | 0 .../data/effective_dose/icrp116/neutrons.txt | 0 .../openmc}/data/effective_dose/icrp116/photons.txt | 0 .../data/effective_dose/icrp116/photons_kerma.txt | 0 .../data/effective_dose/icrp116/positive_muons.txt | 0 .../data/effective_dose/icrp116/positive_pions.txt | 0 .../data/effective_dose/icrp116/positrons.txt | 0 .../openmc}/data/effective_dose/icrp116/protons.txt | 0 .../icrp74/generate_photon_effective_dose.py | 0 .../openmc}/data/effective_dose/icrp74/neutrons.txt | 0 .../openmc}/data/effective_dose/icrp74/photons.txt | 0 {openmc => python/openmc}/data/endf.py | 0 .../openmc}/data/energy_distribution.py | 0 {openmc => python/openmc}/data/fission_energy.py | 0 {openmc => python/openmc}/data/function.py | 0 {openmc => python/openmc}/data/grid.py | 0 {openmc => python/openmc}/data/half_life.json | 0 {openmc => python/openmc}/data/kalbach_mann.py | 0 {openmc => python/openmc}/data/laboratory.py | 0 {openmc => python/openmc}/data/library.py | 0 {openmc => python/openmc}/data/mass_1.mas20.txt | 0 {openmc => python/openmc}/data/multipole.py | 0 {openmc => python/openmc}/data/nbody.py | 0 {openmc => python/openmc}/data/neutron.py | 0 {openmc => python/openmc}/data/njoy.py | 0 {openmc => python/openmc}/data/photon.py | 0 {openmc => python/openmc}/data/product.py | 0 {openmc => python/openmc}/data/reaction.py | 0 {openmc => python/openmc}/data/resonance.py | 0 .../openmc}/data/resonance_covariance.py | 0 {openmc => python/openmc}/data/thermal.py | 0 .../openmc}/data/thermal_angle_energy.py | 0 {openmc => python/openmc}/data/uncorrelated.py | 0 {openmc => python/openmc}/data/urr.py | 0 {openmc => python/openmc}/deplete/__init__.py | 0 {openmc => python/openmc}/deplete/_matrix_funcs.py | 0 {openmc => python/openmc}/deplete/abc.py | 0 {openmc => python/openmc}/deplete/atom_number.py | 0 {openmc => python/openmc}/deplete/chain.py | 0 .../openmc}/deplete/coupled_operator.py | 0 {openmc => python/openmc}/deplete/cram.py | 0 {openmc => python/openmc}/deplete/helpers.py | 0 .../openmc}/deplete/independent_operator.py | 0 {openmc => python/openmc}/deplete/integrators.py | 0 {openmc => python/openmc}/deplete/microxs.py | 0 {openmc => python/openmc}/deplete/nuclide.py | 0 .../openmc}/deplete/openmc_operator.py | 0 {openmc => python/openmc}/deplete/pool.py | 0 {openmc => python/openmc}/deplete/reaction_rates.py | 0 {openmc => python/openmc}/deplete/results.py | 0 {openmc => python/openmc}/deplete/stepresult.py | 0 {openmc => python/openmc}/deplete/transfer_rates.py | 0 {openmc => python/openmc}/dummy_comm.py | 0 {openmc => python/openmc}/element.py | 0 {openmc => python/openmc}/examples.py | 0 {openmc => python/openmc}/exceptions.py | 0 {openmc => python/openmc}/executor.py | 0 {openmc => python/openmc}/filter.py | 0 {openmc => python/openmc}/filter_expansion.py | 0 {openmc => python/openmc}/geometry.py | 0 {openmc => python/openmc}/lattice.py | 0 {openmc => python/openmc}/lib/__init__.py | 0 {openmc => python/openmc}/lib/cell.py | 0 {openmc => python/openmc}/lib/core.py | 0 {openmc => python/openmc}/lib/error.py | 0 {openmc => python/openmc}/lib/filter.py | 0 {openmc => python/openmc}/lib/material.py | 0 {openmc => python/openmc}/lib/math.py | 0 {openmc => python/openmc}/lib/mesh.py | 0 {openmc => python/openmc}/lib/nuclide.py | 0 {openmc => python/openmc}/lib/plot.py | 0 {openmc => python/openmc}/lib/settings.py | 0 {openmc => python/openmc}/lib/tally.py | 0 {openmc => python/openmc}/lib/weight_windows.py | 0 {openmc => python/openmc}/macroscopic.py | 0 {openmc => python/openmc}/material.py | 0 {openmc => python/openmc}/mesh.py | 0 {openmc => python/openmc}/mgxs/__init__.py | 0 {openmc => python/openmc}/mgxs/groups.py | 0 {openmc => python/openmc}/mgxs/library.py | 0 {openmc => python/openmc}/mgxs/mdgxs.py | 0 {openmc => python/openmc}/mgxs/mgxs.py | 0 {openmc => python/openmc}/mgxs_library.py | 0 {openmc => python/openmc}/mixin.py | 0 {openmc => python/openmc}/model/__init__.py | 0 {openmc => python/openmc}/model/funcs.py | 0 {openmc => python/openmc}/model/model.py | 0 .../openmc}/model/surface_composite.py | 0 {openmc => python/openmc}/model/triso.py | 0 {openmc => python/openmc}/mpi.py | 0 {openmc => python/openmc}/nuclide.py | 0 {openmc => python/openmc}/openmoc_compatible.py | 0 {openmc => python/openmc}/particle_restart.py | 0 {openmc => python/openmc}/plots.py | 0 {openmc => python/openmc}/plotter.py | 0 {openmc => python/openmc}/polynomial.py | 0 {openmc => python/openmc}/region.py | 0 {openmc => python/openmc}/search.py | 0 {openmc => python/openmc}/settings.py | 0 {openmc => python/openmc}/source.py | 0 {openmc => python/openmc}/statepoint.py | 0 {openmc => python/openmc}/stats/__init__.py | 0 {openmc => python/openmc}/stats/multivariate.py | 0 {openmc => python/openmc}/stats/univariate.py | 0 {openmc => python/openmc}/summary.py | 0 {openmc => python/openmc}/surface.py | 0 {openmc => python/openmc}/tallies.py | 0 {openmc => python/openmc}/tally_derivative.py | 0 {openmc => python/openmc}/tracks.py | 0 {openmc => python/openmc}/trigger.py | 0 {openmc => python/openmc}/universe.py | 0 {openmc => python/openmc}/utility_funcs.py | 0 {openmc => python/openmc}/volume.py | 0 {openmc => python/openmc}/weight_windows.py | 0 137 files changed, 0 insertions(+), 0 deletions(-) rename {openmc => python/openmc}/__init__.py (100%) rename {openmc => python/openmc}/_xml.py (100%) rename {openmc => python/openmc}/arithmetic.py (100%) rename {openmc => python/openmc}/bounding_box.py (100%) rename {openmc => python/openmc}/cell.py (100%) rename {openmc => python/openmc}/checkvalue.py (100%) rename {openmc => python/openmc}/cmfd.py (100%) rename {openmc => python/openmc}/config.py (100%) rename {openmc => python/openmc}/data/BREMX.DAT (100%) rename {openmc => python/openmc}/data/__init__.py (100%) rename {openmc => python/openmc}/data/ace.py (100%) rename {openmc => python/openmc}/data/angle_distribution.py (100%) rename {openmc => python/openmc}/data/angle_energy.py (100%) rename {openmc => python/openmc}/data/compton_profiles.h5 (100%) rename {openmc => python/openmc}/data/correlated.py (100%) rename {openmc => python/openmc}/data/data.py (100%) rename {openmc => python/openmc}/data/decay.py (100%) rename {openmc => python/openmc}/data/density_effect.h5 (100%) rename {openmc => python/openmc}/data/effective_dose/__init__.py (100%) rename {openmc => python/openmc}/data/effective_dose/dose.py (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {openmc => python/openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {openmc => python/openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {openmc => python/openmc}/data/endf.py (100%) rename {openmc => python/openmc}/data/energy_distribution.py (100%) rename {openmc => python/openmc}/data/fission_energy.py (100%) rename {openmc => python/openmc}/data/function.py (100%) rename {openmc => python/openmc}/data/grid.py (100%) rename {openmc => python/openmc}/data/half_life.json (100%) rename {openmc => python/openmc}/data/kalbach_mann.py (100%) rename {openmc => python/openmc}/data/laboratory.py (100%) rename {openmc => python/openmc}/data/library.py (100%) rename {openmc => python/openmc}/data/mass_1.mas20.txt (100%) rename {openmc => python/openmc}/data/multipole.py (100%) rename {openmc => python/openmc}/data/nbody.py (100%) rename {openmc => python/openmc}/data/neutron.py (100%) rename {openmc => python/openmc}/data/njoy.py (100%) rename {openmc => python/openmc}/data/photon.py (100%) rename {openmc => python/openmc}/data/product.py (100%) rename {openmc => python/openmc}/data/reaction.py (100%) rename {openmc => python/openmc}/data/resonance.py (100%) rename {openmc => python/openmc}/data/resonance_covariance.py (100%) rename {openmc => python/openmc}/data/thermal.py (100%) rename {openmc => python/openmc}/data/thermal_angle_energy.py (100%) rename {openmc => python/openmc}/data/uncorrelated.py (100%) rename {openmc => python/openmc}/data/urr.py (100%) rename {openmc => python/openmc}/deplete/__init__.py (100%) rename {openmc => python/openmc}/deplete/_matrix_funcs.py (100%) rename {openmc => python/openmc}/deplete/abc.py (100%) rename {openmc => python/openmc}/deplete/atom_number.py (100%) rename {openmc => python/openmc}/deplete/chain.py (100%) rename {openmc => python/openmc}/deplete/coupled_operator.py (100%) rename {openmc => python/openmc}/deplete/cram.py (100%) rename {openmc => python/openmc}/deplete/helpers.py (100%) rename {openmc => python/openmc}/deplete/independent_operator.py (100%) rename {openmc => python/openmc}/deplete/integrators.py (100%) rename {openmc => python/openmc}/deplete/microxs.py (100%) rename {openmc => python/openmc}/deplete/nuclide.py (100%) rename {openmc => python/openmc}/deplete/openmc_operator.py (100%) rename {openmc => python/openmc}/deplete/pool.py (100%) rename {openmc => python/openmc}/deplete/reaction_rates.py (100%) rename {openmc => python/openmc}/deplete/results.py (100%) rename {openmc => python/openmc}/deplete/stepresult.py (100%) rename {openmc => python/openmc}/deplete/transfer_rates.py (100%) rename {openmc => python/openmc}/dummy_comm.py (100%) rename {openmc => python/openmc}/element.py (100%) rename {openmc => python/openmc}/examples.py (100%) rename {openmc => python/openmc}/exceptions.py (100%) rename {openmc => python/openmc}/executor.py (100%) rename {openmc => python/openmc}/filter.py (100%) rename {openmc => python/openmc}/filter_expansion.py (100%) rename {openmc => python/openmc}/geometry.py (100%) rename {openmc => python/openmc}/lattice.py (100%) rename {openmc => python/openmc}/lib/__init__.py (100%) rename {openmc => python/openmc}/lib/cell.py (100%) rename {openmc => python/openmc}/lib/core.py (100%) rename {openmc => python/openmc}/lib/error.py (100%) rename {openmc => python/openmc}/lib/filter.py (100%) rename {openmc => python/openmc}/lib/material.py (100%) rename {openmc => python/openmc}/lib/math.py (100%) rename {openmc => python/openmc}/lib/mesh.py (100%) rename {openmc => python/openmc}/lib/nuclide.py (100%) rename {openmc => python/openmc}/lib/plot.py (100%) rename {openmc => python/openmc}/lib/settings.py (100%) rename {openmc => python/openmc}/lib/tally.py (100%) rename {openmc => python/openmc}/lib/weight_windows.py (100%) rename {openmc => python/openmc}/macroscopic.py (100%) rename {openmc => python/openmc}/material.py (100%) rename {openmc => python/openmc}/mesh.py (100%) rename {openmc => python/openmc}/mgxs/__init__.py (100%) rename {openmc => python/openmc}/mgxs/groups.py (100%) rename {openmc => python/openmc}/mgxs/library.py (100%) rename {openmc => python/openmc}/mgxs/mdgxs.py (100%) rename {openmc => python/openmc}/mgxs/mgxs.py (100%) rename {openmc => python/openmc}/mgxs_library.py (100%) rename {openmc => python/openmc}/mixin.py (100%) rename {openmc => python/openmc}/model/__init__.py (100%) rename {openmc => python/openmc}/model/funcs.py (100%) rename {openmc => python/openmc}/model/model.py (100%) rename {openmc => python/openmc}/model/surface_composite.py (100%) rename {openmc => python/openmc}/model/triso.py (100%) rename {openmc => python/openmc}/mpi.py (100%) rename {openmc => python/openmc}/nuclide.py (100%) rename {openmc => python/openmc}/openmoc_compatible.py (100%) rename {openmc => python/openmc}/particle_restart.py (100%) rename {openmc => python/openmc}/plots.py (100%) rename {openmc => python/openmc}/plotter.py (100%) rename {openmc => python/openmc}/polynomial.py (100%) rename {openmc => python/openmc}/region.py (100%) rename {openmc => python/openmc}/search.py (100%) rename {openmc => python/openmc}/settings.py (100%) rename {openmc => python/openmc}/source.py (100%) rename {openmc => python/openmc}/statepoint.py (100%) rename {openmc => python/openmc}/stats/__init__.py (100%) rename {openmc => python/openmc}/stats/multivariate.py (100%) rename {openmc => python/openmc}/stats/univariate.py (100%) rename {openmc => python/openmc}/summary.py (100%) rename {openmc => python/openmc}/surface.py (100%) rename {openmc => python/openmc}/tallies.py (100%) rename {openmc => python/openmc}/tally_derivative.py (100%) rename {openmc => python/openmc}/tracks.py (100%) rename {openmc => python/openmc}/trigger.py (100%) rename {openmc => python/openmc}/universe.py (100%) rename {openmc => python/openmc}/utility_funcs.py (100%) rename {openmc => python/openmc}/volume.py (100%) rename {openmc => python/openmc}/weight_windows.py (100%) diff --git a/openmc/__init__.py b/python/openmc/__init__.py similarity index 100% rename from openmc/__init__.py rename to python/openmc/__init__.py diff --git a/openmc/_xml.py b/python/openmc/_xml.py similarity index 100% rename from openmc/_xml.py rename to python/openmc/_xml.py diff --git a/openmc/arithmetic.py b/python/openmc/arithmetic.py similarity index 100% rename from openmc/arithmetic.py rename to python/openmc/arithmetic.py diff --git a/openmc/bounding_box.py b/python/openmc/bounding_box.py similarity index 100% rename from openmc/bounding_box.py rename to python/openmc/bounding_box.py diff --git a/openmc/cell.py b/python/openmc/cell.py similarity index 100% rename from openmc/cell.py rename to python/openmc/cell.py diff --git a/openmc/checkvalue.py b/python/openmc/checkvalue.py similarity index 100% rename from openmc/checkvalue.py rename to python/openmc/checkvalue.py diff --git a/openmc/cmfd.py b/python/openmc/cmfd.py similarity index 100% rename from openmc/cmfd.py rename to python/openmc/cmfd.py diff --git a/openmc/config.py b/python/openmc/config.py similarity index 100% rename from openmc/config.py rename to python/openmc/config.py diff --git a/openmc/data/BREMX.DAT b/python/openmc/data/BREMX.DAT similarity index 100% rename from openmc/data/BREMX.DAT rename to python/openmc/data/BREMX.DAT diff --git a/openmc/data/__init__.py b/python/openmc/data/__init__.py similarity index 100% rename from openmc/data/__init__.py rename to python/openmc/data/__init__.py diff --git a/openmc/data/ace.py b/python/openmc/data/ace.py similarity index 100% rename from openmc/data/ace.py rename to python/openmc/data/ace.py diff --git a/openmc/data/angle_distribution.py b/python/openmc/data/angle_distribution.py similarity index 100% rename from openmc/data/angle_distribution.py rename to python/openmc/data/angle_distribution.py diff --git a/openmc/data/angle_energy.py b/python/openmc/data/angle_energy.py similarity index 100% rename from openmc/data/angle_energy.py rename to python/openmc/data/angle_energy.py diff --git a/openmc/data/compton_profiles.h5 b/python/openmc/data/compton_profiles.h5 similarity index 100% rename from openmc/data/compton_profiles.h5 rename to python/openmc/data/compton_profiles.h5 diff --git a/openmc/data/correlated.py b/python/openmc/data/correlated.py similarity index 100% rename from openmc/data/correlated.py rename to python/openmc/data/correlated.py diff --git a/openmc/data/data.py b/python/openmc/data/data.py similarity index 100% rename from openmc/data/data.py rename to python/openmc/data/data.py diff --git a/openmc/data/decay.py b/python/openmc/data/decay.py similarity index 100% rename from openmc/data/decay.py rename to python/openmc/data/decay.py diff --git a/openmc/data/density_effect.h5 b/python/openmc/data/density_effect.h5 similarity index 100% rename from openmc/data/density_effect.h5 rename to python/openmc/data/density_effect.h5 diff --git a/openmc/data/effective_dose/__init__.py b/python/openmc/data/effective_dose/__init__.py similarity index 100% rename from openmc/data/effective_dose/__init__.py rename to python/openmc/data/effective_dose/__init__.py diff --git a/openmc/data/effective_dose/dose.py b/python/openmc/data/effective_dose/dose.py similarity index 100% rename from openmc/data/effective_dose/dose.py rename to python/openmc/data/effective_dose/dose.py diff --git a/openmc/data/effective_dose/icrp116/electrons.txt b/python/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/electrons.txt rename to python/openmc/data/effective_dose/icrp116/electrons.txt diff --git a/openmc/data/effective_dose/icrp116/helium_ions.txt b/python/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/helium_ions.txt rename to python/openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/openmc/data/effective_dose/icrp116/negative_muons.txt b/python/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_muons.txt rename to python/openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/openmc/data/effective_dose/icrp116/negative_pions.txt b/python/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/negative_pions.txt rename to python/openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/openmc/data/effective_dose/icrp116/neutrons.txt b/python/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/neutrons.txt rename to python/openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/openmc/data/effective_dose/icrp116/photons.txt b/python/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons.txt rename to python/openmc/data/effective_dose/icrp116/photons.txt diff --git a/openmc/data/effective_dose/icrp116/photons_kerma.txt b/python/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/photons_kerma.txt rename to python/openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/openmc/data/effective_dose/icrp116/positive_muons.txt b/python/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_muons.txt rename to python/openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/openmc/data/effective_dose/icrp116/positive_pions.txt b/python/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positive_pions.txt rename to python/openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/openmc/data/effective_dose/icrp116/positrons.txt b/python/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/positrons.txt rename to python/openmc/data/effective_dose/icrp116/positrons.txt diff --git a/openmc/data/effective_dose/icrp116/protons.txt b/python/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from openmc/data/effective_dose/icrp116/protons.txt rename to python/openmc/data/effective_dose/icrp116/protons.txt diff --git a/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/openmc/data/effective_dose/icrp74/neutrons.txt b/python/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/neutrons.txt rename to python/openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/openmc/data/effective_dose/icrp74/photons.txt b/python/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from openmc/data/effective_dose/icrp74/photons.txt rename to python/openmc/data/effective_dose/icrp74/photons.txt diff --git a/openmc/data/endf.py b/python/openmc/data/endf.py similarity index 100% rename from openmc/data/endf.py rename to python/openmc/data/endf.py diff --git a/openmc/data/energy_distribution.py b/python/openmc/data/energy_distribution.py similarity index 100% rename from openmc/data/energy_distribution.py rename to python/openmc/data/energy_distribution.py diff --git a/openmc/data/fission_energy.py b/python/openmc/data/fission_energy.py similarity index 100% rename from openmc/data/fission_energy.py rename to python/openmc/data/fission_energy.py diff --git a/openmc/data/function.py b/python/openmc/data/function.py similarity index 100% rename from openmc/data/function.py rename to python/openmc/data/function.py diff --git a/openmc/data/grid.py b/python/openmc/data/grid.py similarity index 100% rename from openmc/data/grid.py rename to python/openmc/data/grid.py diff --git a/openmc/data/half_life.json b/python/openmc/data/half_life.json similarity index 100% rename from openmc/data/half_life.json rename to python/openmc/data/half_life.json diff --git a/openmc/data/kalbach_mann.py b/python/openmc/data/kalbach_mann.py similarity index 100% rename from openmc/data/kalbach_mann.py rename to python/openmc/data/kalbach_mann.py diff --git a/openmc/data/laboratory.py b/python/openmc/data/laboratory.py similarity index 100% rename from openmc/data/laboratory.py rename to python/openmc/data/laboratory.py diff --git a/openmc/data/library.py b/python/openmc/data/library.py similarity index 100% rename from openmc/data/library.py rename to python/openmc/data/library.py diff --git a/openmc/data/mass_1.mas20.txt b/python/openmc/data/mass_1.mas20.txt similarity index 100% rename from openmc/data/mass_1.mas20.txt rename to python/openmc/data/mass_1.mas20.txt diff --git a/openmc/data/multipole.py b/python/openmc/data/multipole.py similarity index 100% rename from openmc/data/multipole.py rename to python/openmc/data/multipole.py diff --git a/openmc/data/nbody.py b/python/openmc/data/nbody.py similarity index 100% rename from openmc/data/nbody.py rename to python/openmc/data/nbody.py diff --git a/openmc/data/neutron.py b/python/openmc/data/neutron.py similarity index 100% rename from openmc/data/neutron.py rename to python/openmc/data/neutron.py diff --git a/openmc/data/njoy.py b/python/openmc/data/njoy.py similarity index 100% rename from openmc/data/njoy.py rename to python/openmc/data/njoy.py diff --git a/openmc/data/photon.py b/python/openmc/data/photon.py similarity index 100% rename from openmc/data/photon.py rename to python/openmc/data/photon.py diff --git a/openmc/data/product.py b/python/openmc/data/product.py similarity index 100% rename from openmc/data/product.py rename to python/openmc/data/product.py diff --git a/openmc/data/reaction.py b/python/openmc/data/reaction.py similarity index 100% rename from openmc/data/reaction.py rename to python/openmc/data/reaction.py diff --git a/openmc/data/resonance.py b/python/openmc/data/resonance.py similarity index 100% rename from openmc/data/resonance.py rename to python/openmc/data/resonance.py diff --git a/openmc/data/resonance_covariance.py b/python/openmc/data/resonance_covariance.py similarity index 100% rename from openmc/data/resonance_covariance.py rename to python/openmc/data/resonance_covariance.py diff --git a/openmc/data/thermal.py b/python/openmc/data/thermal.py similarity index 100% rename from openmc/data/thermal.py rename to python/openmc/data/thermal.py diff --git a/openmc/data/thermal_angle_energy.py b/python/openmc/data/thermal_angle_energy.py similarity index 100% rename from openmc/data/thermal_angle_energy.py rename to python/openmc/data/thermal_angle_energy.py diff --git a/openmc/data/uncorrelated.py b/python/openmc/data/uncorrelated.py similarity index 100% rename from openmc/data/uncorrelated.py rename to python/openmc/data/uncorrelated.py diff --git a/openmc/data/urr.py b/python/openmc/data/urr.py similarity index 100% rename from openmc/data/urr.py rename to python/openmc/data/urr.py diff --git a/openmc/deplete/__init__.py b/python/openmc/deplete/__init__.py similarity index 100% rename from openmc/deplete/__init__.py rename to python/openmc/deplete/__init__.py diff --git a/openmc/deplete/_matrix_funcs.py b/python/openmc/deplete/_matrix_funcs.py similarity index 100% rename from openmc/deplete/_matrix_funcs.py rename to python/openmc/deplete/_matrix_funcs.py diff --git a/openmc/deplete/abc.py b/python/openmc/deplete/abc.py similarity index 100% rename from openmc/deplete/abc.py rename to python/openmc/deplete/abc.py diff --git a/openmc/deplete/atom_number.py b/python/openmc/deplete/atom_number.py similarity index 100% rename from openmc/deplete/atom_number.py rename to python/openmc/deplete/atom_number.py diff --git a/openmc/deplete/chain.py b/python/openmc/deplete/chain.py similarity index 100% rename from openmc/deplete/chain.py rename to python/openmc/deplete/chain.py diff --git a/openmc/deplete/coupled_operator.py b/python/openmc/deplete/coupled_operator.py similarity index 100% rename from openmc/deplete/coupled_operator.py rename to python/openmc/deplete/coupled_operator.py diff --git a/openmc/deplete/cram.py b/python/openmc/deplete/cram.py similarity index 100% rename from openmc/deplete/cram.py rename to python/openmc/deplete/cram.py diff --git a/openmc/deplete/helpers.py b/python/openmc/deplete/helpers.py similarity index 100% rename from openmc/deplete/helpers.py rename to python/openmc/deplete/helpers.py diff --git a/openmc/deplete/independent_operator.py b/python/openmc/deplete/independent_operator.py similarity index 100% rename from openmc/deplete/independent_operator.py rename to python/openmc/deplete/independent_operator.py diff --git a/openmc/deplete/integrators.py b/python/openmc/deplete/integrators.py similarity index 100% rename from openmc/deplete/integrators.py rename to python/openmc/deplete/integrators.py diff --git a/openmc/deplete/microxs.py b/python/openmc/deplete/microxs.py similarity index 100% rename from openmc/deplete/microxs.py rename to python/openmc/deplete/microxs.py diff --git a/openmc/deplete/nuclide.py b/python/openmc/deplete/nuclide.py similarity index 100% rename from openmc/deplete/nuclide.py rename to python/openmc/deplete/nuclide.py diff --git a/openmc/deplete/openmc_operator.py b/python/openmc/deplete/openmc_operator.py similarity index 100% rename from openmc/deplete/openmc_operator.py rename to python/openmc/deplete/openmc_operator.py diff --git a/openmc/deplete/pool.py b/python/openmc/deplete/pool.py similarity index 100% rename from openmc/deplete/pool.py rename to python/openmc/deplete/pool.py diff --git a/openmc/deplete/reaction_rates.py b/python/openmc/deplete/reaction_rates.py similarity index 100% rename from openmc/deplete/reaction_rates.py rename to python/openmc/deplete/reaction_rates.py diff --git a/openmc/deplete/results.py b/python/openmc/deplete/results.py similarity index 100% rename from openmc/deplete/results.py rename to python/openmc/deplete/results.py diff --git a/openmc/deplete/stepresult.py b/python/openmc/deplete/stepresult.py similarity index 100% rename from openmc/deplete/stepresult.py rename to python/openmc/deplete/stepresult.py diff --git a/openmc/deplete/transfer_rates.py b/python/openmc/deplete/transfer_rates.py similarity index 100% rename from openmc/deplete/transfer_rates.py rename to python/openmc/deplete/transfer_rates.py diff --git a/openmc/dummy_comm.py b/python/openmc/dummy_comm.py similarity index 100% rename from openmc/dummy_comm.py rename to python/openmc/dummy_comm.py diff --git a/openmc/element.py b/python/openmc/element.py similarity index 100% rename from openmc/element.py rename to python/openmc/element.py diff --git a/openmc/examples.py b/python/openmc/examples.py similarity index 100% rename from openmc/examples.py rename to python/openmc/examples.py diff --git a/openmc/exceptions.py b/python/openmc/exceptions.py similarity index 100% rename from openmc/exceptions.py rename to python/openmc/exceptions.py diff --git a/openmc/executor.py b/python/openmc/executor.py similarity index 100% rename from openmc/executor.py rename to python/openmc/executor.py diff --git a/openmc/filter.py b/python/openmc/filter.py similarity index 100% rename from openmc/filter.py rename to python/openmc/filter.py diff --git a/openmc/filter_expansion.py b/python/openmc/filter_expansion.py similarity index 100% rename from openmc/filter_expansion.py rename to python/openmc/filter_expansion.py diff --git a/openmc/geometry.py b/python/openmc/geometry.py similarity index 100% rename from openmc/geometry.py rename to python/openmc/geometry.py diff --git a/openmc/lattice.py b/python/openmc/lattice.py similarity index 100% rename from openmc/lattice.py rename to python/openmc/lattice.py diff --git a/openmc/lib/__init__.py b/python/openmc/lib/__init__.py similarity index 100% rename from openmc/lib/__init__.py rename to python/openmc/lib/__init__.py diff --git a/openmc/lib/cell.py b/python/openmc/lib/cell.py similarity index 100% rename from openmc/lib/cell.py rename to python/openmc/lib/cell.py diff --git a/openmc/lib/core.py b/python/openmc/lib/core.py similarity index 100% rename from openmc/lib/core.py rename to python/openmc/lib/core.py diff --git a/openmc/lib/error.py b/python/openmc/lib/error.py similarity index 100% rename from openmc/lib/error.py rename to python/openmc/lib/error.py diff --git a/openmc/lib/filter.py b/python/openmc/lib/filter.py similarity index 100% rename from openmc/lib/filter.py rename to python/openmc/lib/filter.py diff --git a/openmc/lib/material.py b/python/openmc/lib/material.py similarity index 100% rename from openmc/lib/material.py rename to python/openmc/lib/material.py diff --git a/openmc/lib/math.py b/python/openmc/lib/math.py similarity index 100% rename from openmc/lib/math.py rename to python/openmc/lib/math.py diff --git a/openmc/lib/mesh.py b/python/openmc/lib/mesh.py similarity index 100% rename from openmc/lib/mesh.py rename to python/openmc/lib/mesh.py diff --git a/openmc/lib/nuclide.py b/python/openmc/lib/nuclide.py similarity index 100% rename from openmc/lib/nuclide.py rename to python/openmc/lib/nuclide.py diff --git a/openmc/lib/plot.py b/python/openmc/lib/plot.py similarity index 100% rename from openmc/lib/plot.py rename to python/openmc/lib/plot.py diff --git a/openmc/lib/settings.py b/python/openmc/lib/settings.py similarity index 100% rename from openmc/lib/settings.py rename to python/openmc/lib/settings.py diff --git a/openmc/lib/tally.py b/python/openmc/lib/tally.py similarity index 100% rename from openmc/lib/tally.py rename to python/openmc/lib/tally.py diff --git a/openmc/lib/weight_windows.py b/python/openmc/lib/weight_windows.py similarity index 100% rename from openmc/lib/weight_windows.py rename to python/openmc/lib/weight_windows.py diff --git a/openmc/macroscopic.py b/python/openmc/macroscopic.py similarity index 100% rename from openmc/macroscopic.py rename to python/openmc/macroscopic.py diff --git a/openmc/material.py b/python/openmc/material.py similarity index 100% rename from openmc/material.py rename to python/openmc/material.py diff --git a/openmc/mesh.py b/python/openmc/mesh.py similarity index 100% rename from openmc/mesh.py rename to python/openmc/mesh.py diff --git a/openmc/mgxs/__init__.py b/python/openmc/mgxs/__init__.py similarity index 100% rename from openmc/mgxs/__init__.py rename to python/openmc/mgxs/__init__.py diff --git a/openmc/mgxs/groups.py b/python/openmc/mgxs/groups.py similarity index 100% rename from openmc/mgxs/groups.py rename to python/openmc/mgxs/groups.py diff --git a/openmc/mgxs/library.py b/python/openmc/mgxs/library.py similarity index 100% rename from openmc/mgxs/library.py rename to python/openmc/mgxs/library.py diff --git a/openmc/mgxs/mdgxs.py b/python/openmc/mgxs/mdgxs.py similarity index 100% rename from openmc/mgxs/mdgxs.py rename to python/openmc/mgxs/mdgxs.py diff --git a/openmc/mgxs/mgxs.py b/python/openmc/mgxs/mgxs.py similarity index 100% rename from openmc/mgxs/mgxs.py rename to python/openmc/mgxs/mgxs.py diff --git a/openmc/mgxs_library.py b/python/openmc/mgxs_library.py similarity index 100% rename from openmc/mgxs_library.py rename to python/openmc/mgxs_library.py diff --git a/openmc/mixin.py b/python/openmc/mixin.py similarity index 100% rename from openmc/mixin.py rename to python/openmc/mixin.py diff --git a/openmc/model/__init__.py b/python/openmc/model/__init__.py similarity index 100% rename from openmc/model/__init__.py rename to python/openmc/model/__init__.py diff --git a/openmc/model/funcs.py b/python/openmc/model/funcs.py similarity index 100% rename from openmc/model/funcs.py rename to python/openmc/model/funcs.py diff --git a/openmc/model/model.py b/python/openmc/model/model.py similarity index 100% rename from openmc/model/model.py rename to python/openmc/model/model.py diff --git a/openmc/model/surface_composite.py b/python/openmc/model/surface_composite.py similarity index 100% rename from openmc/model/surface_composite.py rename to python/openmc/model/surface_composite.py diff --git a/openmc/model/triso.py b/python/openmc/model/triso.py similarity index 100% rename from openmc/model/triso.py rename to python/openmc/model/triso.py diff --git a/openmc/mpi.py b/python/openmc/mpi.py similarity index 100% rename from openmc/mpi.py rename to python/openmc/mpi.py diff --git a/openmc/nuclide.py b/python/openmc/nuclide.py similarity index 100% rename from openmc/nuclide.py rename to python/openmc/nuclide.py diff --git a/openmc/openmoc_compatible.py b/python/openmc/openmoc_compatible.py similarity index 100% rename from openmc/openmoc_compatible.py rename to python/openmc/openmoc_compatible.py diff --git a/openmc/particle_restart.py b/python/openmc/particle_restart.py similarity index 100% rename from openmc/particle_restart.py rename to python/openmc/particle_restart.py diff --git a/openmc/plots.py b/python/openmc/plots.py similarity index 100% rename from openmc/plots.py rename to python/openmc/plots.py diff --git a/openmc/plotter.py b/python/openmc/plotter.py similarity index 100% rename from openmc/plotter.py rename to python/openmc/plotter.py diff --git a/openmc/polynomial.py b/python/openmc/polynomial.py similarity index 100% rename from openmc/polynomial.py rename to python/openmc/polynomial.py diff --git a/openmc/region.py b/python/openmc/region.py similarity index 100% rename from openmc/region.py rename to python/openmc/region.py diff --git a/openmc/search.py b/python/openmc/search.py similarity index 100% rename from openmc/search.py rename to python/openmc/search.py diff --git a/openmc/settings.py b/python/openmc/settings.py similarity index 100% rename from openmc/settings.py rename to python/openmc/settings.py diff --git a/openmc/source.py b/python/openmc/source.py similarity index 100% rename from openmc/source.py rename to python/openmc/source.py diff --git a/openmc/statepoint.py b/python/openmc/statepoint.py similarity index 100% rename from openmc/statepoint.py rename to python/openmc/statepoint.py diff --git a/openmc/stats/__init__.py b/python/openmc/stats/__init__.py similarity index 100% rename from openmc/stats/__init__.py rename to python/openmc/stats/__init__.py diff --git a/openmc/stats/multivariate.py b/python/openmc/stats/multivariate.py similarity index 100% rename from openmc/stats/multivariate.py rename to python/openmc/stats/multivariate.py diff --git a/openmc/stats/univariate.py b/python/openmc/stats/univariate.py similarity index 100% rename from openmc/stats/univariate.py rename to python/openmc/stats/univariate.py diff --git a/openmc/summary.py b/python/openmc/summary.py similarity index 100% rename from openmc/summary.py rename to python/openmc/summary.py diff --git a/openmc/surface.py b/python/openmc/surface.py similarity index 100% rename from openmc/surface.py rename to python/openmc/surface.py diff --git a/openmc/tallies.py b/python/openmc/tallies.py similarity index 100% rename from openmc/tallies.py rename to python/openmc/tallies.py diff --git a/openmc/tally_derivative.py b/python/openmc/tally_derivative.py similarity index 100% rename from openmc/tally_derivative.py rename to python/openmc/tally_derivative.py diff --git a/openmc/tracks.py b/python/openmc/tracks.py similarity index 100% rename from openmc/tracks.py rename to python/openmc/tracks.py diff --git a/openmc/trigger.py b/python/openmc/trigger.py similarity index 100% rename from openmc/trigger.py rename to python/openmc/trigger.py diff --git a/openmc/universe.py b/python/openmc/universe.py similarity index 100% rename from openmc/universe.py rename to python/openmc/universe.py diff --git a/openmc/utility_funcs.py b/python/openmc/utility_funcs.py similarity index 100% rename from openmc/utility_funcs.py rename to python/openmc/utility_funcs.py diff --git a/openmc/volume.py b/python/openmc/volume.py similarity index 100% rename from openmc/volume.py rename to python/openmc/volume.py diff --git a/openmc/weight_windows.py b/python/openmc/weight_windows.py similarity index 100% rename from openmc/weight_windows.py rename to python/openmc/weight_windows.py From 97eec30c5d45df27c41c1c965e0fa00dbf9c1ab0 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 11:15:31 +0600 Subject: [PATCH 087/145] add load the library from the installed module --- python/openmc/lib/__init__.py | 42 +++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/python/openmc/lib/__init__.py b/python/openmc/lib/__init__.py index cd49665a5f3..f9d4a57d7a5 100644 --- a/python/openmc/lib/__init__.py +++ b/python/openmc/lib/__init__.py @@ -14,19 +14,37 @@ from ctypes import CDLL, c_bool, c_int import os +import warnings -if os.environ.get('READTHEDOCS', None) != 'True': - # Open shared library - import openmc - _filename = openmc.lib[0] - _dll = CDLL(str(_filename)) # TODO: Remove str() when Python 3.12+ -else: - # For documentation builds, we don't actually have the shared library - # available. Instead, we create a mock object so that when the modules - # within the openmc.lib package try to configure arguments and return - # values for symbols, no errors occur - from unittest.mock import Mock - _dll = Mock() +def load_openmc_library(): + try: + # Attempt to load the library from OpenMC + import openmc + _filename = openmc.lib[0] + if os.path.isfile(_filename): + return CDLL(str(_filename)) + raise FileNotFoundError + except (IndexError, FileNotFoundError): + # Attempt to load the library from the installed module + import importlib + openmc = importlib.import_module("openmc") + _filename = openmc.lib[0] + if os.path.isfile(_filename): + warnings.warn( + "It seems OpenMC is being run from its source directory. " + "This setup is not recommended as it may lead to unexpected behavior, " + "such as conflicts between source and installed versions. " + "Please run your script from outside the OpenMC source tree.", + RuntimeWarning + ) + return CDLL(str(_filename)) + raise RuntimeError( + "Unable to load the OpenMC library. Please ensure OpenMC " + "is installed correctly and accessible from your Python environment." + ) + +# Load the OpenMC shared library +_dll = load_openmc_library() def _dagmc_enabled(): From 97b26d03aaa15b0898ae993786f1cb84a400f8f6 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 11:18:06 +0600 Subject: [PATCH 088/145] python/openmc -> openmc --- {python/openmc => openmc}/__init__.py | 0 {python/openmc => openmc}/_xml.py | 0 {python/openmc => openmc}/arithmetic.py | 0 {python/openmc => openmc}/bounding_box.py | 0 {python/openmc => openmc}/cell.py | 0 {python/openmc => openmc}/checkvalue.py | 0 {python/openmc => openmc}/cmfd.py | 0 {python/openmc => openmc}/config.py | 0 {python/openmc => openmc}/data/BREMX.DAT | 0 {python/openmc => openmc}/data/__init__.py | 0 {python/openmc => openmc}/data/ace.py | 0 .../openmc => openmc}/data/angle_distribution.py | 0 {python/openmc => openmc}/data/angle_energy.py | 0 {python/openmc => openmc}/data/compton_profiles.h5 | Bin {python/openmc => openmc}/data/correlated.py | 0 {python/openmc => openmc}/data/data.py | 0 {python/openmc => openmc}/data/decay.py | 0 {python/openmc => openmc}/data/density_effect.h5 | Bin .../data/effective_dose/__init__.py | 0 .../openmc => openmc}/data/effective_dose/dose.py | 0 .../data/effective_dose/icrp116/electrons.txt | 0 .../data/effective_dose/icrp116/helium_ions.txt | 0 .../data/effective_dose/icrp116/negative_muons.txt | 0 .../data/effective_dose/icrp116/negative_pions.txt | 0 .../data/effective_dose/icrp116/neutrons.txt | 0 .../data/effective_dose/icrp116/photons.txt | 0 .../data/effective_dose/icrp116/photons_kerma.txt | 0 .../data/effective_dose/icrp116/positive_muons.txt | 0 .../data/effective_dose/icrp116/positive_pions.txt | 0 .../data/effective_dose/icrp116/positrons.txt | 0 .../data/effective_dose/icrp116/protons.txt | 0 .../icrp74/generate_photon_effective_dose.py | 0 .../data/effective_dose/icrp74/neutrons.txt | 0 .../data/effective_dose/icrp74/photons.txt | 0 {python/openmc => openmc}/data/endf.py | 0 .../openmc => openmc}/data/energy_distribution.py | 0 {python/openmc => openmc}/data/fission_energy.py | 0 {python/openmc => openmc}/data/function.py | 0 {python/openmc => openmc}/data/grid.py | 0 {python/openmc => openmc}/data/half_life.json | 0 {python/openmc => openmc}/data/kalbach_mann.py | 0 {python/openmc => openmc}/data/laboratory.py | 0 {python/openmc => openmc}/data/library.py | 0 {python/openmc => openmc}/data/mass_1.mas20.txt | 0 {python/openmc => openmc}/data/multipole.py | 0 {python/openmc => openmc}/data/nbody.py | 0 {python/openmc => openmc}/data/neutron.py | 0 {python/openmc => openmc}/data/njoy.py | 0 {python/openmc => openmc}/data/photon.py | 0 {python/openmc => openmc}/data/product.py | 0 {python/openmc => openmc}/data/reaction.py | 0 {python/openmc => openmc}/data/resonance.py | 0 .../openmc => openmc}/data/resonance_covariance.py | 0 {python/openmc => openmc}/data/thermal.py | 0 .../openmc => openmc}/data/thermal_angle_energy.py | 0 {python/openmc => openmc}/data/uncorrelated.py | 0 {python/openmc => openmc}/data/urr.py | 0 {python/openmc => openmc}/deplete/__init__.py | 0 {python/openmc => openmc}/deplete/_matrix_funcs.py | 0 {python/openmc => openmc}/deplete/abc.py | 0 {python/openmc => openmc}/deplete/atom_number.py | 0 {python/openmc => openmc}/deplete/chain.py | 0 .../openmc => openmc}/deplete/coupled_operator.py | 0 {python/openmc => openmc}/deplete/cram.py | 0 {python/openmc => openmc}/deplete/helpers.py | 0 .../deplete/independent_operator.py | 0 {python/openmc => openmc}/deplete/integrators.py | 0 {python/openmc => openmc}/deplete/microxs.py | 0 {python/openmc => openmc}/deplete/nuclide.py | 0 .../openmc => openmc}/deplete/openmc_operator.py | 0 {python/openmc => openmc}/deplete/pool.py | 0 {python/openmc => openmc}/deplete/reaction_rates.py | 0 {python/openmc => openmc}/deplete/results.py | 0 {python/openmc => openmc}/deplete/stepresult.py | 0 {python/openmc => openmc}/deplete/transfer_rates.py | 0 {python/openmc => openmc}/dummy_comm.py | 0 {python/openmc => openmc}/element.py | 0 {python/openmc => openmc}/examples.py | 0 {python/openmc => openmc}/exceptions.py | 0 {python/openmc => openmc}/executor.py | 0 {python/openmc => openmc}/filter.py | 0 {python/openmc => openmc}/filter_expansion.py | 0 {python/openmc => openmc}/geometry.py | 0 {python/openmc => openmc}/lattice.py | 0 {python/openmc => openmc}/lib/__init__.py | 0 {python/openmc => openmc}/lib/cell.py | 0 {python/openmc => openmc}/lib/core.py | 0 {python/openmc => openmc}/lib/error.py | 0 {python/openmc => openmc}/lib/filter.py | 0 {python/openmc => openmc}/lib/material.py | 0 {python/openmc => openmc}/lib/math.py | 0 {python/openmc => openmc}/lib/mesh.py | 0 {python/openmc => openmc}/lib/nuclide.py | 0 {python/openmc => openmc}/lib/plot.py | 0 {python/openmc => openmc}/lib/settings.py | 0 {python/openmc => openmc}/lib/tally.py | 0 {python/openmc => openmc}/lib/weight_windows.py | 0 {python/openmc => openmc}/macroscopic.py | 0 {python/openmc => openmc}/material.py | 0 {python/openmc => openmc}/mesh.py | 0 {python/openmc => openmc}/mgxs/__init__.py | 0 {python/openmc => openmc}/mgxs/groups.py | 0 {python/openmc => openmc}/mgxs/library.py | 0 {python/openmc => openmc}/mgxs/mdgxs.py | 0 {python/openmc => openmc}/mgxs/mgxs.py | 0 {python/openmc => openmc}/mgxs_library.py | 0 {python/openmc => openmc}/mixin.py | 0 {python/openmc => openmc}/model/__init__.py | 0 {python/openmc => openmc}/model/funcs.py | 0 {python/openmc => openmc}/model/model.py | 0 .../openmc => openmc}/model/surface_composite.py | 0 {python/openmc => openmc}/model/triso.py | 0 {python/openmc => openmc}/mpi.py | 0 {python/openmc => openmc}/nuclide.py | 0 {python/openmc => openmc}/openmoc_compatible.py | 0 {python/openmc => openmc}/particle_restart.py | 0 {python/openmc => openmc}/plots.py | 0 {python/openmc => openmc}/plotter.py | 0 {python/openmc => openmc}/polynomial.py | 0 {python/openmc => openmc}/region.py | 0 {python/openmc => openmc}/search.py | 0 {python/openmc => openmc}/settings.py | 0 {python/openmc => openmc}/source.py | 0 {python/openmc => openmc}/statepoint.py | 0 {python/openmc => openmc}/stats/__init__.py | 0 {python/openmc => openmc}/stats/multivariate.py | 0 {python/openmc => openmc}/stats/univariate.py | 0 {python/openmc => openmc}/summary.py | 0 {python/openmc => openmc}/surface.py | 0 {python/openmc => openmc}/tallies.py | 0 {python/openmc => openmc}/tally_derivative.py | 0 {python/openmc => openmc}/tracks.py | 0 {python/openmc => openmc}/trigger.py | 0 {python/openmc => openmc}/universe.py | 0 {python/openmc => openmc}/utility_funcs.py | 0 {python/openmc => openmc}/volume.py | 0 {python/openmc => openmc}/weight_windows.py | 0 137 files changed, 0 insertions(+), 0 deletions(-) rename {python/openmc => openmc}/__init__.py (100%) rename {python/openmc => openmc}/_xml.py (100%) rename {python/openmc => openmc}/arithmetic.py (100%) rename {python/openmc => openmc}/bounding_box.py (100%) rename {python/openmc => openmc}/cell.py (100%) rename {python/openmc => openmc}/checkvalue.py (100%) rename {python/openmc => openmc}/cmfd.py (100%) rename {python/openmc => openmc}/config.py (100%) rename {python/openmc => openmc}/data/BREMX.DAT (100%) rename {python/openmc => openmc}/data/__init__.py (100%) rename {python/openmc => openmc}/data/ace.py (100%) rename {python/openmc => openmc}/data/angle_distribution.py (100%) rename {python/openmc => openmc}/data/angle_energy.py (100%) rename {python/openmc => openmc}/data/compton_profiles.h5 (100%) rename {python/openmc => openmc}/data/correlated.py (100%) rename {python/openmc => openmc}/data/data.py (100%) rename {python/openmc => openmc}/data/decay.py (100%) rename {python/openmc => openmc}/data/density_effect.h5 (100%) rename {python/openmc => openmc}/data/effective_dose/__init__.py (100%) rename {python/openmc => openmc}/data/effective_dose/dose.py (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/electrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/helium_ions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/negative_muons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/negative_pions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/neutrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/photons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/photons_kerma.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positive_muons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positive_pions.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/positrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp116/protons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/generate_photon_effective_dose.py (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/neutrons.txt (100%) rename {python/openmc => openmc}/data/effective_dose/icrp74/photons.txt (100%) rename {python/openmc => openmc}/data/endf.py (100%) rename {python/openmc => openmc}/data/energy_distribution.py (100%) rename {python/openmc => openmc}/data/fission_energy.py (100%) rename {python/openmc => openmc}/data/function.py (100%) rename {python/openmc => openmc}/data/grid.py (100%) rename {python/openmc => openmc}/data/half_life.json (100%) rename {python/openmc => openmc}/data/kalbach_mann.py (100%) rename {python/openmc => openmc}/data/laboratory.py (100%) rename {python/openmc => openmc}/data/library.py (100%) rename {python/openmc => openmc}/data/mass_1.mas20.txt (100%) rename {python/openmc => openmc}/data/multipole.py (100%) rename {python/openmc => openmc}/data/nbody.py (100%) rename {python/openmc => openmc}/data/neutron.py (100%) rename {python/openmc => openmc}/data/njoy.py (100%) rename {python/openmc => openmc}/data/photon.py (100%) rename {python/openmc => openmc}/data/product.py (100%) rename {python/openmc => openmc}/data/reaction.py (100%) rename {python/openmc => openmc}/data/resonance.py (100%) rename {python/openmc => openmc}/data/resonance_covariance.py (100%) rename {python/openmc => openmc}/data/thermal.py (100%) rename {python/openmc => openmc}/data/thermal_angle_energy.py (100%) rename {python/openmc => openmc}/data/uncorrelated.py (100%) rename {python/openmc => openmc}/data/urr.py (100%) rename {python/openmc => openmc}/deplete/__init__.py (100%) rename {python/openmc => openmc}/deplete/_matrix_funcs.py (100%) rename {python/openmc => openmc}/deplete/abc.py (100%) rename {python/openmc => openmc}/deplete/atom_number.py (100%) rename {python/openmc => openmc}/deplete/chain.py (100%) rename {python/openmc => openmc}/deplete/coupled_operator.py (100%) rename {python/openmc => openmc}/deplete/cram.py (100%) rename {python/openmc => openmc}/deplete/helpers.py (100%) rename {python/openmc => openmc}/deplete/independent_operator.py (100%) rename {python/openmc => openmc}/deplete/integrators.py (100%) rename {python/openmc => openmc}/deplete/microxs.py (100%) rename {python/openmc => openmc}/deplete/nuclide.py (100%) rename {python/openmc => openmc}/deplete/openmc_operator.py (100%) rename {python/openmc => openmc}/deplete/pool.py (100%) rename {python/openmc => openmc}/deplete/reaction_rates.py (100%) rename {python/openmc => openmc}/deplete/results.py (100%) rename {python/openmc => openmc}/deplete/stepresult.py (100%) rename {python/openmc => openmc}/deplete/transfer_rates.py (100%) rename {python/openmc => openmc}/dummy_comm.py (100%) rename {python/openmc => openmc}/element.py (100%) rename {python/openmc => openmc}/examples.py (100%) rename {python/openmc => openmc}/exceptions.py (100%) rename {python/openmc => openmc}/executor.py (100%) rename {python/openmc => openmc}/filter.py (100%) rename {python/openmc => openmc}/filter_expansion.py (100%) rename {python/openmc => openmc}/geometry.py (100%) rename {python/openmc => openmc}/lattice.py (100%) rename {python/openmc => openmc}/lib/__init__.py (100%) rename {python/openmc => openmc}/lib/cell.py (100%) rename {python/openmc => openmc}/lib/core.py (100%) rename {python/openmc => openmc}/lib/error.py (100%) rename {python/openmc => openmc}/lib/filter.py (100%) rename {python/openmc => openmc}/lib/material.py (100%) rename {python/openmc => openmc}/lib/math.py (100%) rename {python/openmc => openmc}/lib/mesh.py (100%) rename {python/openmc => openmc}/lib/nuclide.py (100%) rename {python/openmc => openmc}/lib/plot.py (100%) rename {python/openmc => openmc}/lib/settings.py (100%) rename {python/openmc => openmc}/lib/tally.py (100%) rename {python/openmc => openmc}/lib/weight_windows.py (100%) rename {python/openmc => openmc}/macroscopic.py (100%) rename {python/openmc => openmc}/material.py (100%) rename {python/openmc => openmc}/mesh.py (100%) rename {python/openmc => openmc}/mgxs/__init__.py (100%) rename {python/openmc => openmc}/mgxs/groups.py (100%) rename {python/openmc => openmc}/mgxs/library.py (100%) rename {python/openmc => openmc}/mgxs/mdgxs.py (100%) rename {python/openmc => openmc}/mgxs/mgxs.py (100%) rename {python/openmc => openmc}/mgxs_library.py (100%) rename {python/openmc => openmc}/mixin.py (100%) rename {python/openmc => openmc}/model/__init__.py (100%) rename {python/openmc => openmc}/model/funcs.py (100%) rename {python/openmc => openmc}/model/model.py (100%) rename {python/openmc => openmc}/model/surface_composite.py (100%) rename {python/openmc => openmc}/model/triso.py (100%) rename {python/openmc => openmc}/mpi.py (100%) rename {python/openmc => openmc}/nuclide.py (100%) rename {python/openmc => openmc}/openmoc_compatible.py (100%) rename {python/openmc => openmc}/particle_restart.py (100%) rename {python/openmc => openmc}/plots.py (100%) rename {python/openmc => openmc}/plotter.py (100%) rename {python/openmc => openmc}/polynomial.py (100%) rename {python/openmc => openmc}/region.py (100%) rename {python/openmc => openmc}/search.py (100%) rename {python/openmc => openmc}/settings.py (100%) rename {python/openmc => openmc}/source.py (100%) rename {python/openmc => openmc}/statepoint.py (100%) rename {python/openmc => openmc}/stats/__init__.py (100%) rename {python/openmc => openmc}/stats/multivariate.py (100%) rename {python/openmc => openmc}/stats/univariate.py (100%) rename {python/openmc => openmc}/summary.py (100%) rename {python/openmc => openmc}/surface.py (100%) rename {python/openmc => openmc}/tallies.py (100%) rename {python/openmc => openmc}/tally_derivative.py (100%) rename {python/openmc => openmc}/tracks.py (100%) rename {python/openmc => openmc}/trigger.py (100%) rename {python/openmc => openmc}/universe.py (100%) rename {python/openmc => openmc}/utility_funcs.py (100%) rename {python/openmc => openmc}/volume.py (100%) rename {python/openmc => openmc}/weight_windows.py (100%) diff --git a/python/openmc/__init__.py b/openmc/__init__.py similarity index 100% rename from python/openmc/__init__.py rename to openmc/__init__.py diff --git a/python/openmc/_xml.py b/openmc/_xml.py similarity index 100% rename from python/openmc/_xml.py rename to openmc/_xml.py diff --git a/python/openmc/arithmetic.py b/openmc/arithmetic.py similarity index 100% rename from python/openmc/arithmetic.py rename to openmc/arithmetic.py diff --git a/python/openmc/bounding_box.py b/openmc/bounding_box.py similarity index 100% rename from python/openmc/bounding_box.py rename to openmc/bounding_box.py diff --git a/python/openmc/cell.py b/openmc/cell.py similarity index 100% rename from python/openmc/cell.py rename to openmc/cell.py diff --git a/python/openmc/checkvalue.py b/openmc/checkvalue.py similarity index 100% rename from python/openmc/checkvalue.py rename to openmc/checkvalue.py diff --git a/python/openmc/cmfd.py b/openmc/cmfd.py similarity index 100% rename from python/openmc/cmfd.py rename to openmc/cmfd.py diff --git a/python/openmc/config.py b/openmc/config.py similarity index 100% rename from python/openmc/config.py rename to openmc/config.py diff --git a/python/openmc/data/BREMX.DAT b/openmc/data/BREMX.DAT similarity index 100% rename from python/openmc/data/BREMX.DAT rename to openmc/data/BREMX.DAT diff --git a/python/openmc/data/__init__.py b/openmc/data/__init__.py similarity index 100% rename from python/openmc/data/__init__.py rename to openmc/data/__init__.py diff --git a/python/openmc/data/ace.py b/openmc/data/ace.py similarity index 100% rename from python/openmc/data/ace.py rename to openmc/data/ace.py diff --git a/python/openmc/data/angle_distribution.py b/openmc/data/angle_distribution.py similarity index 100% rename from python/openmc/data/angle_distribution.py rename to openmc/data/angle_distribution.py diff --git a/python/openmc/data/angle_energy.py b/openmc/data/angle_energy.py similarity index 100% rename from python/openmc/data/angle_energy.py rename to openmc/data/angle_energy.py diff --git a/python/openmc/data/compton_profiles.h5 b/openmc/data/compton_profiles.h5 similarity index 100% rename from python/openmc/data/compton_profiles.h5 rename to openmc/data/compton_profiles.h5 diff --git a/python/openmc/data/correlated.py b/openmc/data/correlated.py similarity index 100% rename from python/openmc/data/correlated.py rename to openmc/data/correlated.py diff --git a/python/openmc/data/data.py b/openmc/data/data.py similarity index 100% rename from python/openmc/data/data.py rename to openmc/data/data.py diff --git a/python/openmc/data/decay.py b/openmc/data/decay.py similarity index 100% rename from python/openmc/data/decay.py rename to openmc/data/decay.py diff --git a/python/openmc/data/density_effect.h5 b/openmc/data/density_effect.h5 similarity index 100% rename from python/openmc/data/density_effect.h5 rename to openmc/data/density_effect.h5 diff --git a/python/openmc/data/effective_dose/__init__.py b/openmc/data/effective_dose/__init__.py similarity index 100% rename from python/openmc/data/effective_dose/__init__.py rename to openmc/data/effective_dose/__init__.py diff --git a/python/openmc/data/effective_dose/dose.py b/openmc/data/effective_dose/dose.py similarity index 100% rename from python/openmc/data/effective_dose/dose.py rename to openmc/data/effective_dose/dose.py diff --git a/python/openmc/data/effective_dose/icrp116/electrons.txt b/openmc/data/effective_dose/icrp116/electrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/electrons.txt rename to openmc/data/effective_dose/icrp116/electrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/helium_ions.txt b/openmc/data/effective_dose/icrp116/helium_ions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/helium_ions.txt rename to openmc/data/effective_dose/icrp116/helium_ions.txt diff --git a/python/openmc/data/effective_dose/icrp116/negative_muons.txt b/openmc/data/effective_dose/icrp116/negative_muons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/negative_muons.txt rename to openmc/data/effective_dose/icrp116/negative_muons.txt diff --git a/python/openmc/data/effective_dose/icrp116/negative_pions.txt b/openmc/data/effective_dose/icrp116/negative_pions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/negative_pions.txt rename to openmc/data/effective_dose/icrp116/negative_pions.txt diff --git a/python/openmc/data/effective_dose/icrp116/neutrons.txt b/openmc/data/effective_dose/icrp116/neutrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/neutrons.txt rename to openmc/data/effective_dose/icrp116/neutrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/photons.txt b/openmc/data/effective_dose/icrp116/photons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/photons.txt rename to openmc/data/effective_dose/icrp116/photons.txt diff --git a/python/openmc/data/effective_dose/icrp116/photons_kerma.txt b/openmc/data/effective_dose/icrp116/photons_kerma.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/photons_kerma.txt rename to openmc/data/effective_dose/icrp116/photons_kerma.txt diff --git a/python/openmc/data/effective_dose/icrp116/positive_muons.txt b/openmc/data/effective_dose/icrp116/positive_muons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positive_muons.txt rename to openmc/data/effective_dose/icrp116/positive_muons.txt diff --git a/python/openmc/data/effective_dose/icrp116/positive_pions.txt b/openmc/data/effective_dose/icrp116/positive_pions.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positive_pions.txt rename to openmc/data/effective_dose/icrp116/positive_pions.txt diff --git a/python/openmc/data/effective_dose/icrp116/positrons.txt b/openmc/data/effective_dose/icrp116/positrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/positrons.txt rename to openmc/data/effective_dose/icrp116/positrons.txt diff --git a/python/openmc/data/effective_dose/icrp116/protons.txt b/openmc/data/effective_dose/icrp116/protons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp116/protons.txt rename to openmc/data/effective_dose/icrp116/protons.txt diff --git a/python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py b/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py similarity index 100% rename from python/openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py rename to openmc/data/effective_dose/icrp74/generate_photon_effective_dose.py diff --git a/python/openmc/data/effective_dose/icrp74/neutrons.txt b/openmc/data/effective_dose/icrp74/neutrons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp74/neutrons.txt rename to openmc/data/effective_dose/icrp74/neutrons.txt diff --git a/python/openmc/data/effective_dose/icrp74/photons.txt b/openmc/data/effective_dose/icrp74/photons.txt similarity index 100% rename from python/openmc/data/effective_dose/icrp74/photons.txt rename to openmc/data/effective_dose/icrp74/photons.txt diff --git a/python/openmc/data/endf.py b/openmc/data/endf.py similarity index 100% rename from python/openmc/data/endf.py rename to openmc/data/endf.py diff --git a/python/openmc/data/energy_distribution.py b/openmc/data/energy_distribution.py similarity index 100% rename from python/openmc/data/energy_distribution.py rename to openmc/data/energy_distribution.py diff --git a/python/openmc/data/fission_energy.py b/openmc/data/fission_energy.py similarity index 100% rename from python/openmc/data/fission_energy.py rename to openmc/data/fission_energy.py diff --git a/python/openmc/data/function.py b/openmc/data/function.py similarity index 100% rename from python/openmc/data/function.py rename to openmc/data/function.py diff --git a/python/openmc/data/grid.py b/openmc/data/grid.py similarity index 100% rename from python/openmc/data/grid.py rename to openmc/data/grid.py diff --git a/python/openmc/data/half_life.json b/openmc/data/half_life.json similarity index 100% rename from python/openmc/data/half_life.json rename to openmc/data/half_life.json diff --git a/python/openmc/data/kalbach_mann.py b/openmc/data/kalbach_mann.py similarity index 100% rename from python/openmc/data/kalbach_mann.py rename to openmc/data/kalbach_mann.py diff --git a/python/openmc/data/laboratory.py b/openmc/data/laboratory.py similarity index 100% rename from python/openmc/data/laboratory.py rename to openmc/data/laboratory.py diff --git a/python/openmc/data/library.py b/openmc/data/library.py similarity index 100% rename from python/openmc/data/library.py rename to openmc/data/library.py diff --git a/python/openmc/data/mass_1.mas20.txt b/openmc/data/mass_1.mas20.txt similarity index 100% rename from python/openmc/data/mass_1.mas20.txt rename to openmc/data/mass_1.mas20.txt diff --git a/python/openmc/data/multipole.py b/openmc/data/multipole.py similarity index 100% rename from python/openmc/data/multipole.py rename to openmc/data/multipole.py diff --git a/python/openmc/data/nbody.py b/openmc/data/nbody.py similarity index 100% rename from python/openmc/data/nbody.py rename to openmc/data/nbody.py diff --git a/python/openmc/data/neutron.py b/openmc/data/neutron.py similarity index 100% rename from python/openmc/data/neutron.py rename to openmc/data/neutron.py diff --git a/python/openmc/data/njoy.py b/openmc/data/njoy.py similarity index 100% rename from python/openmc/data/njoy.py rename to openmc/data/njoy.py diff --git a/python/openmc/data/photon.py b/openmc/data/photon.py similarity index 100% rename from python/openmc/data/photon.py rename to openmc/data/photon.py diff --git a/python/openmc/data/product.py b/openmc/data/product.py similarity index 100% rename from python/openmc/data/product.py rename to openmc/data/product.py diff --git a/python/openmc/data/reaction.py b/openmc/data/reaction.py similarity index 100% rename from python/openmc/data/reaction.py rename to openmc/data/reaction.py diff --git a/python/openmc/data/resonance.py b/openmc/data/resonance.py similarity index 100% rename from python/openmc/data/resonance.py rename to openmc/data/resonance.py diff --git a/python/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py similarity index 100% rename from python/openmc/data/resonance_covariance.py rename to openmc/data/resonance_covariance.py diff --git a/python/openmc/data/thermal.py b/openmc/data/thermal.py similarity index 100% rename from python/openmc/data/thermal.py rename to openmc/data/thermal.py diff --git a/python/openmc/data/thermal_angle_energy.py b/openmc/data/thermal_angle_energy.py similarity index 100% rename from python/openmc/data/thermal_angle_energy.py rename to openmc/data/thermal_angle_energy.py diff --git a/python/openmc/data/uncorrelated.py b/openmc/data/uncorrelated.py similarity index 100% rename from python/openmc/data/uncorrelated.py rename to openmc/data/uncorrelated.py diff --git a/python/openmc/data/urr.py b/openmc/data/urr.py similarity index 100% rename from python/openmc/data/urr.py rename to openmc/data/urr.py diff --git a/python/openmc/deplete/__init__.py b/openmc/deplete/__init__.py similarity index 100% rename from python/openmc/deplete/__init__.py rename to openmc/deplete/__init__.py diff --git a/python/openmc/deplete/_matrix_funcs.py b/openmc/deplete/_matrix_funcs.py similarity index 100% rename from python/openmc/deplete/_matrix_funcs.py rename to openmc/deplete/_matrix_funcs.py diff --git a/python/openmc/deplete/abc.py b/openmc/deplete/abc.py similarity index 100% rename from python/openmc/deplete/abc.py rename to openmc/deplete/abc.py diff --git a/python/openmc/deplete/atom_number.py b/openmc/deplete/atom_number.py similarity index 100% rename from python/openmc/deplete/atom_number.py rename to openmc/deplete/atom_number.py diff --git a/python/openmc/deplete/chain.py b/openmc/deplete/chain.py similarity index 100% rename from python/openmc/deplete/chain.py rename to openmc/deplete/chain.py diff --git a/python/openmc/deplete/coupled_operator.py b/openmc/deplete/coupled_operator.py similarity index 100% rename from python/openmc/deplete/coupled_operator.py rename to openmc/deplete/coupled_operator.py diff --git a/python/openmc/deplete/cram.py b/openmc/deplete/cram.py similarity index 100% rename from python/openmc/deplete/cram.py rename to openmc/deplete/cram.py diff --git a/python/openmc/deplete/helpers.py b/openmc/deplete/helpers.py similarity index 100% rename from python/openmc/deplete/helpers.py rename to openmc/deplete/helpers.py diff --git a/python/openmc/deplete/independent_operator.py b/openmc/deplete/independent_operator.py similarity index 100% rename from python/openmc/deplete/independent_operator.py rename to openmc/deplete/independent_operator.py diff --git a/python/openmc/deplete/integrators.py b/openmc/deplete/integrators.py similarity index 100% rename from python/openmc/deplete/integrators.py rename to openmc/deplete/integrators.py diff --git a/python/openmc/deplete/microxs.py b/openmc/deplete/microxs.py similarity index 100% rename from python/openmc/deplete/microxs.py rename to openmc/deplete/microxs.py diff --git a/python/openmc/deplete/nuclide.py b/openmc/deplete/nuclide.py similarity index 100% rename from python/openmc/deplete/nuclide.py rename to openmc/deplete/nuclide.py diff --git a/python/openmc/deplete/openmc_operator.py b/openmc/deplete/openmc_operator.py similarity index 100% rename from python/openmc/deplete/openmc_operator.py rename to openmc/deplete/openmc_operator.py diff --git a/python/openmc/deplete/pool.py b/openmc/deplete/pool.py similarity index 100% rename from python/openmc/deplete/pool.py rename to openmc/deplete/pool.py diff --git a/python/openmc/deplete/reaction_rates.py b/openmc/deplete/reaction_rates.py similarity index 100% rename from python/openmc/deplete/reaction_rates.py rename to openmc/deplete/reaction_rates.py diff --git a/python/openmc/deplete/results.py b/openmc/deplete/results.py similarity index 100% rename from python/openmc/deplete/results.py rename to openmc/deplete/results.py diff --git a/python/openmc/deplete/stepresult.py b/openmc/deplete/stepresult.py similarity index 100% rename from python/openmc/deplete/stepresult.py rename to openmc/deplete/stepresult.py diff --git a/python/openmc/deplete/transfer_rates.py b/openmc/deplete/transfer_rates.py similarity index 100% rename from python/openmc/deplete/transfer_rates.py rename to openmc/deplete/transfer_rates.py diff --git a/python/openmc/dummy_comm.py b/openmc/dummy_comm.py similarity index 100% rename from python/openmc/dummy_comm.py rename to openmc/dummy_comm.py diff --git a/python/openmc/element.py b/openmc/element.py similarity index 100% rename from python/openmc/element.py rename to openmc/element.py diff --git a/python/openmc/examples.py b/openmc/examples.py similarity index 100% rename from python/openmc/examples.py rename to openmc/examples.py diff --git a/python/openmc/exceptions.py b/openmc/exceptions.py similarity index 100% rename from python/openmc/exceptions.py rename to openmc/exceptions.py diff --git a/python/openmc/executor.py b/openmc/executor.py similarity index 100% rename from python/openmc/executor.py rename to openmc/executor.py diff --git a/python/openmc/filter.py b/openmc/filter.py similarity index 100% rename from python/openmc/filter.py rename to openmc/filter.py diff --git a/python/openmc/filter_expansion.py b/openmc/filter_expansion.py similarity index 100% rename from python/openmc/filter_expansion.py rename to openmc/filter_expansion.py diff --git a/python/openmc/geometry.py b/openmc/geometry.py similarity index 100% rename from python/openmc/geometry.py rename to openmc/geometry.py diff --git a/python/openmc/lattice.py b/openmc/lattice.py similarity index 100% rename from python/openmc/lattice.py rename to openmc/lattice.py diff --git a/python/openmc/lib/__init__.py b/openmc/lib/__init__.py similarity index 100% rename from python/openmc/lib/__init__.py rename to openmc/lib/__init__.py diff --git a/python/openmc/lib/cell.py b/openmc/lib/cell.py similarity index 100% rename from python/openmc/lib/cell.py rename to openmc/lib/cell.py diff --git a/python/openmc/lib/core.py b/openmc/lib/core.py similarity index 100% rename from python/openmc/lib/core.py rename to openmc/lib/core.py diff --git a/python/openmc/lib/error.py b/openmc/lib/error.py similarity index 100% rename from python/openmc/lib/error.py rename to openmc/lib/error.py diff --git a/python/openmc/lib/filter.py b/openmc/lib/filter.py similarity index 100% rename from python/openmc/lib/filter.py rename to openmc/lib/filter.py diff --git a/python/openmc/lib/material.py b/openmc/lib/material.py similarity index 100% rename from python/openmc/lib/material.py rename to openmc/lib/material.py diff --git a/python/openmc/lib/math.py b/openmc/lib/math.py similarity index 100% rename from python/openmc/lib/math.py rename to openmc/lib/math.py diff --git a/python/openmc/lib/mesh.py b/openmc/lib/mesh.py similarity index 100% rename from python/openmc/lib/mesh.py rename to openmc/lib/mesh.py diff --git a/python/openmc/lib/nuclide.py b/openmc/lib/nuclide.py similarity index 100% rename from python/openmc/lib/nuclide.py rename to openmc/lib/nuclide.py diff --git a/python/openmc/lib/plot.py b/openmc/lib/plot.py similarity index 100% rename from python/openmc/lib/plot.py rename to openmc/lib/plot.py diff --git a/python/openmc/lib/settings.py b/openmc/lib/settings.py similarity index 100% rename from python/openmc/lib/settings.py rename to openmc/lib/settings.py diff --git a/python/openmc/lib/tally.py b/openmc/lib/tally.py similarity index 100% rename from python/openmc/lib/tally.py rename to openmc/lib/tally.py diff --git a/python/openmc/lib/weight_windows.py b/openmc/lib/weight_windows.py similarity index 100% rename from python/openmc/lib/weight_windows.py rename to openmc/lib/weight_windows.py diff --git a/python/openmc/macroscopic.py b/openmc/macroscopic.py similarity index 100% rename from python/openmc/macroscopic.py rename to openmc/macroscopic.py diff --git a/python/openmc/material.py b/openmc/material.py similarity index 100% rename from python/openmc/material.py rename to openmc/material.py diff --git a/python/openmc/mesh.py b/openmc/mesh.py similarity index 100% rename from python/openmc/mesh.py rename to openmc/mesh.py diff --git a/python/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py similarity index 100% rename from python/openmc/mgxs/__init__.py rename to openmc/mgxs/__init__.py diff --git a/python/openmc/mgxs/groups.py b/openmc/mgxs/groups.py similarity index 100% rename from python/openmc/mgxs/groups.py rename to openmc/mgxs/groups.py diff --git a/python/openmc/mgxs/library.py b/openmc/mgxs/library.py similarity index 100% rename from python/openmc/mgxs/library.py rename to openmc/mgxs/library.py diff --git a/python/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py similarity index 100% rename from python/openmc/mgxs/mdgxs.py rename to openmc/mgxs/mdgxs.py diff --git a/python/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py similarity index 100% rename from python/openmc/mgxs/mgxs.py rename to openmc/mgxs/mgxs.py diff --git a/python/openmc/mgxs_library.py b/openmc/mgxs_library.py similarity index 100% rename from python/openmc/mgxs_library.py rename to openmc/mgxs_library.py diff --git a/python/openmc/mixin.py b/openmc/mixin.py similarity index 100% rename from python/openmc/mixin.py rename to openmc/mixin.py diff --git a/python/openmc/model/__init__.py b/openmc/model/__init__.py similarity index 100% rename from python/openmc/model/__init__.py rename to openmc/model/__init__.py diff --git a/python/openmc/model/funcs.py b/openmc/model/funcs.py similarity index 100% rename from python/openmc/model/funcs.py rename to openmc/model/funcs.py diff --git a/python/openmc/model/model.py b/openmc/model/model.py similarity index 100% rename from python/openmc/model/model.py rename to openmc/model/model.py diff --git a/python/openmc/model/surface_composite.py b/openmc/model/surface_composite.py similarity index 100% rename from python/openmc/model/surface_composite.py rename to openmc/model/surface_composite.py diff --git a/python/openmc/model/triso.py b/openmc/model/triso.py similarity index 100% rename from python/openmc/model/triso.py rename to openmc/model/triso.py diff --git a/python/openmc/mpi.py b/openmc/mpi.py similarity index 100% rename from python/openmc/mpi.py rename to openmc/mpi.py diff --git a/python/openmc/nuclide.py b/openmc/nuclide.py similarity index 100% rename from python/openmc/nuclide.py rename to openmc/nuclide.py diff --git a/python/openmc/openmoc_compatible.py b/openmc/openmoc_compatible.py similarity index 100% rename from python/openmc/openmoc_compatible.py rename to openmc/openmoc_compatible.py diff --git a/python/openmc/particle_restart.py b/openmc/particle_restart.py similarity index 100% rename from python/openmc/particle_restart.py rename to openmc/particle_restart.py diff --git a/python/openmc/plots.py b/openmc/plots.py similarity index 100% rename from python/openmc/plots.py rename to openmc/plots.py diff --git a/python/openmc/plotter.py b/openmc/plotter.py similarity index 100% rename from python/openmc/plotter.py rename to openmc/plotter.py diff --git a/python/openmc/polynomial.py b/openmc/polynomial.py similarity index 100% rename from python/openmc/polynomial.py rename to openmc/polynomial.py diff --git a/python/openmc/region.py b/openmc/region.py similarity index 100% rename from python/openmc/region.py rename to openmc/region.py diff --git a/python/openmc/search.py b/openmc/search.py similarity index 100% rename from python/openmc/search.py rename to openmc/search.py diff --git a/python/openmc/settings.py b/openmc/settings.py similarity index 100% rename from python/openmc/settings.py rename to openmc/settings.py diff --git a/python/openmc/source.py b/openmc/source.py similarity index 100% rename from python/openmc/source.py rename to openmc/source.py diff --git a/python/openmc/statepoint.py b/openmc/statepoint.py similarity index 100% rename from python/openmc/statepoint.py rename to openmc/statepoint.py diff --git a/python/openmc/stats/__init__.py b/openmc/stats/__init__.py similarity index 100% rename from python/openmc/stats/__init__.py rename to openmc/stats/__init__.py diff --git a/python/openmc/stats/multivariate.py b/openmc/stats/multivariate.py similarity index 100% rename from python/openmc/stats/multivariate.py rename to openmc/stats/multivariate.py diff --git a/python/openmc/stats/univariate.py b/openmc/stats/univariate.py similarity index 100% rename from python/openmc/stats/univariate.py rename to openmc/stats/univariate.py diff --git a/python/openmc/summary.py b/openmc/summary.py similarity index 100% rename from python/openmc/summary.py rename to openmc/summary.py diff --git a/python/openmc/surface.py b/openmc/surface.py similarity index 100% rename from python/openmc/surface.py rename to openmc/surface.py diff --git a/python/openmc/tallies.py b/openmc/tallies.py similarity index 100% rename from python/openmc/tallies.py rename to openmc/tallies.py diff --git a/python/openmc/tally_derivative.py b/openmc/tally_derivative.py similarity index 100% rename from python/openmc/tally_derivative.py rename to openmc/tally_derivative.py diff --git a/python/openmc/tracks.py b/openmc/tracks.py similarity index 100% rename from python/openmc/tracks.py rename to openmc/tracks.py diff --git a/python/openmc/trigger.py b/openmc/trigger.py similarity index 100% rename from python/openmc/trigger.py rename to openmc/trigger.py diff --git a/python/openmc/universe.py b/openmc/universe.py similarity index 100% rename from python/openmc/universe.py rename to openmc/universe.py diff --git a/python/openmc/utility_funcs.py b/openmc/utility_funcs.py similarity index 100% rename from python/openmc/utility_funcs.py rename to openmc/utility_funcs.py diff --git a/python/openmc/volume.py b/openmc/volume.py similarity index 100% rename from python/openmc/volume.py rename to openmc/volume.py diff --git a/python/openmc/weight_windows.py b/openmc/weight_windows.py similarity index 100% rename from python/openmc/weight_windows.py rename to openmc/weight_windows.py From aeef2d6e2cf7fc7ab66fb3baf944f793faeb9e73 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 11:19:28 +0600 Subject: [PATCH 089/145] python/openmc -> openmc --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d2800f93d31..e0f34249435 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,5 +63,5 @@ Issues = "https://github.com/openmc-dev/openmc/issues" build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" -wheel.packages = ["python/openmc"] +wheel.packages = ["openmc"] sdist.include = ["*.h5"] From b0995b856466650ec74d60a42e6a5c38fd1e5f3d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 17:21:56 +0600 Subject: [PATCH 090/145] add fallback --- openmc/__init__.py | 10 ++++++++++ openmc/lib/__init__.py | 42 ++++++++++++------------------------------ 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/openmc/__init__.py b/openmc/__init__.py index 9c95c4f0ea2..2b803e7cb63 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -58,6 +58,16 @@ def get_core_path(subdir, pattern="*", recursive=False): list: A list of matched paths. """ path = os.path.join(__path__[0], "core", subdir) + if not os.path.exists(path): + import sysconfig + path = os.path.join(sysconfig.get_path("platlib"), "openmc", "core", subdir) + warnings.warn( + "It seems OpenMC is being run from its source directory. " + "This setup is not recommended as it may lead to unexpected behavior, " + "such as conflicts between source and installed versions. " + "Please run your script from outside the OpenMC source tree.", + RuntimeWarning + ) search_pattern = os.path.join(path, "**", pattern) if recursive else os.path.join(path, pattern) return glob.glob(search_pattern, recursive=recursive) if os.path.exists(path) else [] diff --git a/openmc/lib/__init__.py b/openmc/lib/__init__.py index f9d4a57d7a5..cd49665a5f3 100644 --- a/openmc/lib/__init__.py +++ b/openmc/lib/__init__.py @@ -14,37 +14,19 @@ from ctypes import CDLL, c_bool, c_int import os -import warnings -def load_openmc_library(): - try: - # Attempt to load the library from OpenMC - import openmc - _filename = openmc.lib[0] - if os.path.isfile(_filename): - return CDLL(str(_filename)) - raise FileNotFoundError - except (IndexError, FileNotFoundError): - # Attempt to load the library from the installed module - import importlib - openmc = importlib.import_module("openmc") - _filename = openmc.lib[0] - if os.path.isfile(_filename): - warnings.warn( - "It seems OpenMC is being run from its source directory. " - "This setup is not recommended as it may lead to unexpected behavior, " - "such as conflicts between source and installed versions. " - "Please run your script from outside the OpenMC source tree.", - RuntimeWarning - ) - return CDLL(str(_filename)) - raise RuntimeError( - "Unable to load the OpenMC library. Please ensure OpenMC " - "is installed correctly and accessible from your Python environment." - ) - -# Load the OpenMC shared library -_dll = load_openmc_library() +if os.environ.get('READTHEDOCS', None) != 'True': + # Open shared library + import openmc + _filename = openmc.lib[0] + _dll = CDLL(str(_filename)) # TODO: Remove str() when Python 3.12+ +else: + # For documentation builds, we don't actually have the shared library + # available. Instead, we create a mock object so that when the modules + # within the openmc.lib package try to configure arguments and return + # values for symbols, no errors occur + from unittest.mock import Mock + _dll = Mock() def _dagmc_enabled(): From e4878aedd332d181de4a9cfc7a909eb7eab2023e Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 17:44:11 +0600 Subject: [PATCH 091/145] rm openmc --- tools/ci/gha-script.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/ci/gha-script.sh b/tools/ci/gha-script.sh index 9de84f3e553..3814c05f32b 100755 --- a/tools/ci/gha-script.sh +++ b/tools/ci/gha-script.sh @@ -21,5 +21,8 @@ if [[ $NCRYSTAL = 'y' ]]; then nctool --test fi +# Remove openmc directory to avoid warnings +rm -rf openmc/* + # Run regression and unit tests pytest --cov=openmc -v $args tests From d1a06fe758d5585ad07ffd0deb1f5fefcb442606 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 18:26:39 +0600 Subject: [PATCH 092/145] Add OPENMC_CORE_BASE_PATH --- openmc/__init__.py | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/openmc/__init__.py b/openmc/__init__.py index 2b803e7cb63..18189e3e311 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -45,7 +45,25 @@ __version__ = importlib.metadata.version("openmc") -def get_core_path(subdir, pattern="*", recursive=False): +try: + OPENMC_CORE_BASE_PATH = os.path.join(__path__[0], "core") +except NameError: + OPENMC_CORE_BASE_PATH = None + +if not OPENMC_CORE_BASE_PATH or not os.path.exists(OPENMC_CORE_BASE_PATH): + import sysconfig + OPENMC_CORE_BASE_PATH = os.path.join(sysconfig.get_path("platlib"), "openmc", "core") + if not os.path.exists(OPENMC_CORE_BASE_PATH): + raise ImportError("OpenMC is not installed. Please run 'pip install openmc'.") + warnings.warn( + "It seems OpenMC is being run from its source directory. " + "This setup is not recommended as it may lead to unexpected behavior, " + "such as conflicts between source and installed versions. " + "Please run your script from outside the OpenMC source tree.", + RuntimeWarning + ) + +def get_paths(subdir, pattern="*", recursive=False): """ Helper function to return paths that match a given pattern within a subdirectory. @@ -57,30 +75,19 @@ def get_core_path(subdir, pattern="*", recursive=False): Returns: list: A list of matched paths. """ - path = os.path.join(__path__[0], "core", subdir) - if not os.path.exists(path): - import sysconfig - path = os.path.join(sysconfig.get_path("platlib"), "openmc", "core", subdir) - warnings.warn( - "It seems OpenMC is being run from its source directory. " - "This setup is not recommended as it may lead to unexpected behavior, " - "such as conflicts between source and installed versions. " - "Please run your script from outside the OpenMC source tree.", - RuntimeWarning - ) - search_pattern = os.path.join(path, "**", pattern) if recursive else os.path.join(path, pattern) - return glob.glob(search_pattern, recursive=recursive) if os.path.exists(path) else [] + search_pattern = os.path.join(OPENMC_CORE_BASE_PATH, subdir, "**", pattern) if recursive else os.path.join(OPENMC_CORE_BASE_PATH, subdir, pattern) + return glob.glob(search_pattern, recursive=recursive) if os.path.exists(search_pattern) else [] def get_include_path(): """Return includes and include path for OpenMC headers.""" - include = get_core_path("include", "*", recursive=True) - include_path = get_core_path("include", "", recursive=False) + include = get_paths("include", "*", recursive=True) + include_path = get_paths("include", "", recursive=False) return include, include_path def get_core_libraries(): """Return libraries and library paths for OpenMC.""" - lib = [lib_file for lib in ["lib", "lib64"] for lib_file in get_core_path(lib, "libopenmc*", recursive=True)] - lib_path = [lib_file for lib in ["lib", "lib64"] for lib_file in get_core_path(lib, "", recursive=False)] + lib = [lib_file for lib in ["lib", "lib64"] for lib_file in get_paths(lib, "libopenmc*", recursive=True)] + lib_path = [lib_file for lib in ["lib", "lib64"] for lib_file in get_paths(lib, "", recursive=False)] return lib, lib_path def get_extra_libraries(): From 024855a1d8e19c0e178f8b6200e9eb29c69a7f65 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 13 Dec 2024 18:47:38 +0600 Subject: [PATCH 093/145] remove extra check --- openmc/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/__init__.py b/openmc/__init__.py index 18189e3e311..28a3397e90c 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -76,7 +76,7 @@ def get_paths(subdir, pattern="*", recursive=False): list: A list of matched paths. """ search_pattern = os.path.join(OPENMC_CORE_BASE_PATH, subdir, "**", pattern) if recursive else os.path.join(OPENMC_CORE_BASE_PATH, subdir, pattern) - return glob.glob(search_pattern, recursive=recursive) if os.path.exists(search_pattern) else [] + return glob.glob(search_pattern, recursive=recursive) def get_include_path(): """Return includes and include path for OpenMC headers.""" From cc1ccfc8e9f55fc3b02fcd536900b3da34ed725d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Mon, 16 Dec 2024 09:39:45 +0600 Subject: [PATCH 094/145] run tests on temp dir --- tools/ci/gha-script.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/ci/gha-script.sh b/tools/ci/gha-script.sh index 3814c05f32b..11e2e3f41e2 100755 --- a/tools/ci/gha-script.sh +++ b/tools/ci/gha-script.sh @@ -21,8 +21,13 @@ if [[ $NCRYSTAL = 'y' ]]; then nctool --test fi -# Remove openmc directory to avoid warnings -rm -rf openmc/* +# Create a temporary directory and copy the tests there +TEMP_DIR=$(mktemp -d) +cp -r tests $TEMP_DIR +cd $TEMP_DIR # Run regression and unit tests pytest --cov=openmc -v $args tests + +# Clean up temporary directory +rm -rf $TEMP_DIR From 98698bdaf961b25814433b0feab0395027fe5224 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Tue, 17 Dec 2024 09:10:39 +0600 Subject: [PATCH 095/145] mv openmc python/openmc --- tools/ci/gha-script.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/ci/gha-script.sh b/tools/ci/gha-script.sh index 11e2e3f41e2..84f37d74932 100755 --- a/tools/ci/gha-script.sh +++ b/tools/ci/gha-script.sh @@ -21,13 +21,11 @@ if [[ $NCRYSTAL = 'y' ]]; then nctool --test fi -# Create a temporary directory and copy the tests there -TEMP_DIR=$(mktemp -d) -cp -r tests $TEMP_DIR -cd $TEMP_DIR +# Move openmc to python/openmc +mv openmc python/openmc # Run regression and unit tests pytest --cov=openmc -v $args tests -# Clean up temporary directory -rm -rf $TEMP_DIR +# Move openmc back +mv python/openmc openmc From 3317476f530a8bb8a2c70d68b9c1fa2db29642b5 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Wed, 18 Dec 2024 08:58:41 +0600 Subject: [PATCH 096/145] rename openmc --- tools/ci/gha-script.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/ci/gha-script.sh b/tools/ci/gha-script.sh index 84f37d74932..9d27ffe164a 100755 --- a/tools/ci/gha-script.sh +++ b/tools/ci/gha-script.sh @@ -21,11 +21,11 @@ if [[ $NCRYSTAL = 'y' ]]; then nctool --test fi -# Move openmc to python/openmc -mv openmc python/openmc +# Rename openmc to openmc-test +mv openmc openmc-test # Run regression and unit tests pytest --cov=openmc -v $args tests -# Move openmc back -mv python/openmc openmc +# Rename to openmc back +mv openmc-test openmc From e7a8165f6390c9ee642eaa1348c7c1ab817885d2 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Sun, 12 Jan 2025 23:53:05 +0600 Subject: [PATCH 097/145] fix merge --- tools/ci/gha-install.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/ci/gha-install.py b/tools/ci/gha-install.py index d08813ffd08..276bf9871c2 100644 --- a/tools/ci/gha-install.py +++ b/tools/ci/gha-install.py @@ -24,8 +24,8 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False, libmesh=False, ncrys cmake_args.append('-DHDF5_PREFER_PARALLEL=OFF') if dagmc: - cmake_cmd.append('-DOPENMC_USE_DAGMC=ON') - cmake_cmd.append('-DOPENMC_USE_UWUW=ON') + cmake_args.append('-DOPENMC_USE_DAGMC=ON') + cmake_args.append('-DOPENMC_USE_UWUW=ON') dagmc_path = os.environ.get('HOME') + '/DAGMC' cmake_args.append('-DCMAKE_PREFIX_PATH=' + dagmc_path) From d68c72d5e2013f58b4823d75448b5b60d75506d0 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Feb 2025 22:36:28 +0600 Subject: [PATCH 098/145] Update .github/workflows/pypi.yml Co-authored-by: Jon Shimwell --- .github/workflows/pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index bd9efb69646..76eb556644d 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -29,7 +29,7 @@ jobs: submodules: recursive - name: Build wheels - uses: pypa/cibuildwheel@v2.18.0 + uses: pypa/cibuildwheel@v2.22.0 env: CIBW_BUILD: "cp*-${{ matrix.arch }}" CIBW_ARCHS_LINUX: "x86_64" From 97d1083b5b1872dedf3e4f697809887609c1930e Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Feb 2025 22:49:14 +0600 Subject: [PATCH 099/145] Update tools/ci/manylinux.dockerfile Co-authored-by: Jonathan Shimwell --- tools/ci/manylinux.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index e9a3521a9d5..52df05e1193 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -55,7 +55,7 @@ ARG NETCDF_TAG="v4.9.2" ARG MOAB_TAG="5.5.1" ARG EMBREE_TAG="v4.3.3" ARG DD_TAG="v1.1.0" -ARG DAGMC_TAG="v3.2.3" +ARG DAGMC_TAG="v3.2.4" ARG NCrystal_TAG="v3.9.7" ARG PYBIND_TAG="v2.13.6" ARG XTENSOR_PYTHON_TAG="0.27.0" From f09af412b443fab9d3a9d407333c1efe10d6a9a7 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Feb 2025 22:50:17 +0600 Subject: [PATCH 100/145] Update tools/ci/manylinux.dockerfile Co-authored-by: Jonathan Shimwell --- tools/ci/manylinux.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 52df05e1193..7f76823877f 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -60,7 +60,7 @@ ARG NCrystal_TAG="v3.9.7" ARG PYBIND_TAG="v2.13.6" ARG XTENSOR_PYTHON_TAG="0.27.0" ARG VECTFIT_TAG="master" -ARG LIBMESH_TAG="v1.7.2" +ARG LIBMESH_TAG="v1.7.7" ARG MCPL_TAG="v1.6.2" From 735868076f659916183bc9d64def601023f50bfe Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Feb 2025 22:51:28 +0600 Subject: [PATCH 101/145] Update docs/source/usersguide/install.rst Co-authored-by: Jonathan Shimwell --- docs/source/usersguide/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index f9cbfa6f4dd..3b73e088038 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -547,7 +547,7 @@ Alternatively, pip provides additional ways to configure the build using .. code-block:: bash - python -m pip install . --config-settings=cmake.args="-OPENMC_USE_MPI=ON;-OPENMC_USE_MCPL=ON" + python -m pip install . --config-settings=cmake.args="-DOPENMC_USE_MPI=ON;-DOPENMC_USE_MCPL=ON" pip will first check that all :ref:`required third-party packages ` have been installed, and if they are not present, From e28236a86f9058639e65d49334874a6b687d8957 Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Feb 2025 22:53:31 +0600 Subject: [PATCH 102/145] Update tools/ci/manylinux.dockerfile Co-authored-by: Jonathan Shimwell --- tools/ci/manylinux.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile index 7f76823877f..218d771a6ed 100644 --- a/tools/ci/manylinux.dockerfile +++ b/tools/ci/manylinux.dockerfile @@ -72,7 +72,7 @@ ENV TZ=America/Chicago RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # Set Home directory -ENV HOME /root +ENV HOME=/root WORKDIR $HOME # Setup Epel repository and install build dependencies From 20c292e2ac59da6ec062f1f735a28a4b1fc13d6a Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Thu, 6 Mar 2025 22:45:47 +0600 Subject: [PATCH 103/145] add apt packages --- .readthedocs.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 3578144b254..4c97633bbbd 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,6 +4,10 @@ build: os: "ubuntu-24.04" tools: python: "3.12" + apt_packages: + - g++ + - libhdf5-dev + - libpng-dev jobs: post_checkout: - git fetch --unshallow || true From af3de3c05a883254854e4943ee3895f6b3692b3d Mon Sep 17 00:00:00 2001 From: Ahnaf Tahmid Chowdhury Date: Fri, 7 Mar 2025 01:36:03 +0600 Subject: [PATCH 104/145] remove manylinux docker tools --- .../workflows/docker-publish-manylinux.yml | 111 ----- .github/workflows/pypi.yml | 57 --- tools/ci/manylinux.dockerfile | 438 ------------------ 3 files changed, 606 deletions(-) delete mode 100644 .github/workflows/docker-publish-manylinux.yml delete mode 100644 .github/workflows/pypi.yml delete mode 100644 tools/ci/manylinux.dockerfile diff --git a/.github/workflows/docker-publish-manylinux.yml b/.github/workflows/docker-publish-manylinux.yml deleted file mode 100644 index 8dacdd556b6..00000000000 --- a/.github/workflows/docker-publish-manylinux.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Build & Publish Manylinux Images - -on: - # allows us to run workflows manually - workflow_dispatch: - push: - paths: - - "tools/ci/manylinux.dockerfile" - - ".github/workflows/docker-publish-manylinux.yml" - -jobs: - build-dependency-and-test-img: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - manylinux_image: [ - manylinux_2_28_x86_64 - ] - compiler: [ - gcc, - openmpi - ] - - name: Installing Dependencies, Building OpenMC and running tests - steps: - - name: default environment - run: | - echo "tag-latest-on-default=false" >> "$GITHUB_ENV" - - - name: condition on trigger parameters - if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} - run: | - echo "tag-latest-on-default=true" >> "$GITHUB_ENV" - - - name: Log in to the Container registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Configure docker image tag - run: | - image_base_tag=ghcr.io/${{ github.repository_owner }}/ - image_base_tag+=openmc-${{ matrix.manylinux_image }} - image_base_tag+=-${{ matrix.compiler}} - echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" - - - name: Installing Dependencies in Docker image - uses: firehed/multistage-docker-build-action@v1.8 - with: - repository: ${{ env.image_base_tag }} - stages: base, dependencies, python-dependencies - server-stage: openmc - quiet: false - parallel: true - tag-latest-on-default: ${{ env.tag-latest-on-default }} - dockerfile: tools/ci/manylinux.dockerfile - build-args: > - MANYLINUX_IMAGE=${{ matrix.manylinux_image }}, - COMPILER=${{ matrix.compiler }} - push_stable_ci_img: - needs: [build-dependency-and-test-img] - runs-on: ubuntu-latest - - strategy: - matrix: - manylinux_image: [ - manylinux_2_28_x86_64 - ] - compiler: [ - gcc, - openmpi - ] - - name: Pushing final images - steps: - - name: Log in to the Container registry - if: ${{ github.repository_owner == 'openmc-dev' }} - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Configure docker image tag - if: ${{ github.repository_owner == 'openmc-dev' }} - run: | - image_base_tag=ghcr.io/${{ github.repository_owner }}/ - image_base_tag+=openmc-${{ matrix.manylinux_image }} - image_base_tag+=-${{ matrix.compiler}} - echo "image_base_tag=${image_base_tag}" >> "$GITHUB_ENV" - - - name: Push Image as latest img - if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} - uses: akhilerm/tag-push-action@v2.1.0 - with: - src: ${{ env.image_base_tag }}/openmc:latest - dst: ${{ env.image_base_tag }}:latest - - - name: Push Image as latest img - if: ${{ github.repository_owner == 'openmc-dev' && github.ref == 'refs/heads/develop' }} - uses: akhilerm/tag-push-action@v2.1.0 - with: - src: ${{ env.image_base_tag }}:latest - dst: ${{ env.image_base_tag }}:stable diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml deleted file mode 100644 index 76eb556644d..00000000000 --- a/.github/workflows/pypi.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Publish wheels to PyPI - -on: - # allows running workflows manually - workflow_dispatch: - - release: - types: [published] - -jobs: - main: - name: Build wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - arch: manylinux_x86_64 - - os: macos-13 - arch: macosx_x86_64 - - os: macos-14 - arch: macosx_arm64 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Build wheels - uses: pypa/cibuildwheel@v2.22.0 - env: - CIBW_BUILD: "cp*-${{ matrix.arch }}" - CIBW_ARCHS_LINUX: "x86_64" - CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/${{ github.repository_owner }}/openmc-manylinux_2_28_x86_64-gcc/python-dependencies:latest - CIBW_ARCHS_MACOS: "native" - CIBW_BEFORE_BUILD_MACOS: | - brew install llvm cmake xtensor hdf5 python libomp libpng - CIBW_ENVIRONMENT_MACOS: > - MACOSX_DEPLOYMENT_TARGET=${{ matrix.os == 'macos-14' && '14.0' || '13.0' }} - DYLD_LIBRARY_PATH=/usr/local/opt/gcc/lib/gcc/current/:$DYLD_LIBRARY_PATH - CXX=$(brew --prefix llvm)/bin/clang++ - HDF5_ROOT=$(brew --prefix hdf5) - CIBW_BUILD_FRONTEND: "build" - with: - package-dir: openmc - output-dir: wheelhouse - config-file: "{package}/pyproject.toml" - - - name: Publish package to PyPI - if: success() - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: | - twine upload wheelhouse/*.whl \ No newline at end of file diff --git a/tools/ci/manylinux.dockerfile b/tools/ci/manylinux.dockerfile deleted file mode 100644 index 218d771a6ed..00000000000 --- a/tools/ci/manylinux.dockerfile +++ /dev/null @@ -1,438 +0,0 @@ -# ---------------------------------------------------------------------------- -# Dockerfile for building the OpenMC project with support for various dependencies -# and configurations. This Dockerfile allows you to build OpenMC with support -# for GCC or OpenMPI compilers, along with several libraries like NJOY2016, HDF5, -# NetCDF, MOAB, EMBREE, Double Down, DAGMC, NCrystal, PyBind11, Xtensor, Vectfit, -# libMesh, and MCPL. Each of these dependencies is installed from their respective -# repositories and tags. - -# The build process is split into stages: -# 1. Base Stage: Sets up a Manylinux base image and installs necessary dependencies. -# 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. -# 3. Dependencies Stage: Downloads and builds all external dependencies. -# 4. Python Dependencies Stage: Downloads and installs Python dependencies. -# 5. OpenMC Stage: Copies OpenMC source code, build wheel with specific -# flags and installs it in the container. Then, runs tests. - -# Arguments and environment variables can be customized for different compiler and -# dependency versions. -# -# To build the Docker image, use the following command from the repository's root: -# docker build -t openmc -f tools/ci/manylinux.dockerfile . -# -# For more information about each step, refer to the inline comments. -# ---------------------------------------------------------------------------- - -# Configure base image -ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 - -# Configure Compiler to use (gcc or openmpi) -ARG COMPILER="gcc" - -# Configure Python ABI to use -ARG Python_ABI="cp312-cp312" - -# OpenMC options -ARG OPENMC_USE_OPENMP="ON" -ARG OPENMC_BUILD_TESTS="ON" -ARG OPENMC_ENABLE_PROFILE="OFF" -ARG OPENMC_ENABLE_COVERAGE="OFF" -ARG OPENMC_USE_DAGMC="ON" -ARG OPENMC_USE_LIBMESH="ON" -ARG OPENMC_USE_MCPL="ON" -ARG OPENMC_USE_NCRYSTAL="ON" -ARG OPENMC_USE_UWUW="OFF" - -# Configure dependencies tags -ARG GSL_LITE_TAG="v0.41.0" -ARG XTL_TAG="0.7.7" -ARG XTENSOR_TAG="0.25.0" -ARG XTENSOR_BLAS_TAG="0.21.0" -ARG CATCH2_TAG="v3.7.1" -ARG NJOY2016_TAG="2016.76" -ARG HDF5_TAG="hdf5_1.14.4.3" -ARG NETCDF_TAG="v4.9.2" -ARG MOAB_TAG="5.5.1" -ARG EMBREE_TAG="v4.3.3" -ARG DD_TAG="v1.1.0" -ARG DAGMC_TAG="v3.2.4" -ARG NCrystal_TAG="v3.9.7" -ARG PYBIND_TAG="v2.13.6" -ARG XTENSOR_PYTHON_TAG="0.27.0" -ARG VECTFIT_TAG="master" -ARG LIBMESH_TAG="v1.7.7" -ARG MCPL_TAG="v1.6.2" - - -# Base stage -FROM quay.io/pypa/${MANYLINUX_IMAGE} AS base - -# Set timezone -ENV TZ=America/Chicago -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -# Set Home directory -ENV HOME=/root -WORKDIR $HOME - -# Setup Epel repository and install build dependencies -RUN yum install -y epel-release && \ - yum config-manager --enable epel && \ - yum install -y \ - wget \ - git \ - gcc \ - gcc-c++ \ - gcc-gfortran \ - make \ - python3.12-devel \ - zlib-devel \ - curl-devel \ - eigen3-devel \ - lapack-devel \ - libpng-devel \ - pugixml-devel \ - fmt-devel && \ - yum clean all - -# Set up environment variables for shared libraries -ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH - -# Compiler configuration stage: gcc -FROM base AS compiler-gcc - -ENV CC=gcc -ENV CXX=g++ -ENV FC=gfortran -ENV F77=gfortran - - -# Compiler configuration stage: openmpi -FROM base AS compiler-openmpi - -# Install OpenMPI -RUN yum install -y \ - openmpi-devel && \ - yum clean all - -ENV CC=mpicc -ENV CXX=mpicxx -ENV FC=mpif90 -ENV F77=mpif77 - -# Set up OpenMPI environment variables -ENV PATH=/usr/lib64/openmpi/bin:$PATH -ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH - - -# Dependencies stage -FROM compiler-${COMPILER} AS dependencies - -ARG COMPILER - -# Build and install gsl-lite -ARG GSL_LITE_TAG -RUN git clone --depth 1 -b ${GSL_LITE_TAG} https://github.com/gsl-lite/gsl-lite.git gsl-lite && \ - cd gsl-lite && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf gsl-lite - -# Build and install xtl -ARG XTL_TAG -RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ - cd xtl && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtl - -# Build and install xtensor -ARG XTENSOR_TAG -RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ - cd xtensor && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor - -# Build and install xtensor-blas -ARG XTENSOR_BLAS_TAG -RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ - cd xtensor-blas && \ - mkdir build && cd build && \ - cmake .. && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor-blas - -# Build and install Catch2 -ARG CATCH2_TAG -RUN git clone --depth 1 -b ${CATCH2_TAG} https://github.com/catchorg/Catch2.git catch2 && \ - cd catch2 && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf catch2 - -# Build and install NJOY2016 -ARG NJOY2016_TAG -RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git njoy && \ - cd njoy && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -Dstatic=ON && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf njoy - -# Build and install HDF5 -ARG HDF5_TAG -RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ - cd hdf5 && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DHDF5_ENABLE_PARALLEL=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ - -DHDF5_BUILD_HL_LIB=ON \ - -DBUILD_SHARED_LIBS=ON && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf hdf5 - -# Build and install NetCDF -ARG NETCDF_TAG -RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ - cd netcdf && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DBUILD_SHARED_LIBS=ON \ - -DENABLE_DAP=ON \ - -DENABLE_TESTS=OFF && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf netcdf - -# Build and install MOAB -ARG MOAB_TAG -RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git moab && \ - cd moab && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ - -DENABLE_HDF5=ON \ - -DHDF5_ROOT=/usr/local \ - -DENABLE_NETCDF=ON \ - -DNETCDF_ROOT=/usr/local \ - -DBUILD_SHARED_LIBS=ON \ - -DENABLE_BLASLAPACK=OFF \ - -DENABLE_PYMOAB=OFF && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf moab - -# Build and install Embree -ARG EMBREE_TAG -RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git embree && \ - cd embree && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DEMBREE_TASKING_SYSTEM=INTERNAL \ - -DEMBREE_ISPC_SUPPORT=OFF \ - -DEMBREE_TUTORIALS=OFF && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf embree - -# Build and install Double Down -ARG DD_TAG -RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ - cd dd && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf dd - -# Build and install DAGMC -ARG DAGMC_TAG -RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dagmc && \ - cd dagmc && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DMOAB_DIR=/usr/local \ - -Ddd_ROOT=/usr/local \ - -DBUILD_TALLY=ON \ - -DBUILD_UWUW=ON \ - -DDOUBLE_DOWN=ON \ - -DBUILD_STATIC_LIBS=OFF \ - -DBUILD_RPATH=OFF && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf dagmc - -# Build and install libMesh -ARG LIBMESH_TAG -RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ - cd libmesh && \ - git submodule update --init --recursive && \ - mkdir build && cd build && \ - export METHODS="opt" && \ - ../configure \ - $([ ${COMPILER} = 'openmpi' ] && echo '--enable-mpi' || echo '--disable-mpi') \ - --prefix=/usr/local \ - --enable-exodus \ - --disable-netcdf-4 \ - --disable-eigen \ - --disable-lapack && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf libmesh - -# Build and install MCPL -ARG MCPL_TAG -RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ - cd mcpl && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf mcpl - -# Download and extract HDF5 data -RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ -ENV OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml - -# Download and extract ENDF/B-VII.1 distribution -RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ -ENV OPENMC_ENDF_DATA=$HOME/endf-b-vii.1 - - -# Python dependencies stage -FROM dependencies AS python-dependencies - -ARG Python_ABI - -# Use Python from manylinux as the default Python -ENV PYTHONHOME="/opt/python/${Python_ABI}" -ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" - -# Build and install NCrystal -ARG NCrystal_TAG -RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ - cd ncrystal && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DBUILD_SHARED_LIBS=ON \ - -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ - -DNCRYSTAL_MODIFY_RPATH=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ - -DNCRYSTAL_ENABLE_SETUPSH=OFF \ - -DNCRYSTAL_ENABLE_DATA=EMBED \ - -DPython3_EXECUTABLE=$(which python) && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf ncrystal - -# Build and install pybind -ARG PYBIND_TAG -RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ - cd pybind11 && \ - mkdir build && cd build && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ - make -j$(nproc) && make install && \ - cd .. && \ - python -m pip install . && \ - cd .. && \ - rm -rf pybind11 - -# Build and install xtensor-python -ARG XTENSOR_PYTHON_TAG -RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ - cd xtensor-python && \ - mkdir build && cd build && \ - python -m pip install numpy && \ - cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ - make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf xtensor-python - -# Build and install vectfit -ARG VECTFIT_TAG -RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ - cd vectfit && \ - python -m pip install . && \ - cd .. && \ - rm -rf vectfit - - -# OpenMC stage -FROM python-dependencies AS openmc - -ARG COMPILER -ARG Python_ABI -ARG OPENMC_USE_OPENMP -ARG OPENMC_BUILD_TESTS -ARG OPENMC_ENABLE_PROFILE -ARG OPENMC_ENABLE_COVERAGE -ARG OPENMC_USE_DAGMC -ARG OPENMC_USE_LIBMESH -ARG OPENMC_USE_MCPL -ARG OPENMC_USE_NCRYSTAL -ARG OPENMC_USE_UWUW - -# Copy OpenMC source to docker image -COPY . $HOME/openmc - -# Configure SKBUILD CMake arguments -RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] && echo 'ON' || echo 'OFF'); \ - -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ - -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ - -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ - -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ - -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ - -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ - -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ - -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ - -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ - cd $HOME/openmc && \ - python -m build . -w - -# Install OpenMC wheel -RUN python -m pip install \ - "$(echo $HOME/openmc/dist/*.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" - -# Test OpenMC -RUN cd $HOME/openmc && \ - eval $(ncrystal-config --setup) && \ - nctool --test && \ - pytest --cov=openmc -v $([ ${COMPILER} == 'openmpi' ] && echo '--mpi') --event tests - -# Repair wheel -RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ - -# Test repaired wheel -RUN python -m pip uninstall openmc -y && \ - python -m pip install $HOME/openmc/dist/*manylinux**.whl && \ - openmc --version \ No newline at end of file From 735072a5e6d93b9d5ddf5498d2dca2e502afcd30 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Sun, 9 Mar 2025 01:29:51 +0100 Subject: [PATCH 105/145] Align cmake args --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index dac9cb8b822..7d014a60ce9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -197,8 +197,8 @@ RUN mkdir -p ${HOME}/OpenMC && cd ${HOME}/OpenMC \ && git clone --shallow-submodules --recurse-submodules --single-branch -b ${openmc_branch} ${OPENMC_REPO} \ && cd openmc ; \ export SKBUILD_CMAKE_ARGS="-DCMAKE_CXX_COMPILER=mpicxx; \ - -DOPENMC_USE_MPI=on; \ - -DHDF5_PREFER_PARALLEL=on" \ + -DOPENMC_USE_MPI=on; \ + -DHDF5_PREFER_PARALLEL=on" \ if [ ${build_dagmc} = "on" ]; then \ SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS}; \ -DOPENMC_USE_DAGMC=on; \ From b456540c822c759a07192bb108f5a3a33316fc79 Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 22 Apr 2025 17:27:31 +0200 Subject: [PATCH 106/145] more standard location --- manylinux.Dockerfile | 443 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 manylinux.Dockerfile diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile new file mode 100644 index 00000000000..cda8888b07d --- /dev/null +++ b/manylinux.Dockerfile @@ -0,0 +1,443 @@ +# ---------------------------------------------------------------------------- +# Dockerfile for building the OpenMC project with support for various dependencies +# and configurations. This Dockerfile allows you to build OpenMC with support +# for GCC or OpenMPI compilers, along with several libraries like NJOY2016, HDF5, +# NetCDF, MOAB, EMBREE, Double Down, DAGMC, NCrystal, PyBind11, Xtensor, Vectfit, +# libMesh, and MCPL. Each of these dependencies is installed from their respective +# repositories and tags. + +# The build process is split into stages: +# 1. Base Stage: Sets up a Manylinux base image and installs necessary dependencies. +# 2. Compiler Configuration: Defines the compilers (GCC or OpenMPI) to be used. +# 3. Dependencies Stage: Downloads and builds all external dependencies. +# 4. Python Dependencies Stage: Downloads and installs Python dependencies. +# 5. OpenMC Stage: Copies OpenMC source code, build wheel with specific +# flags and installs it in the container. Then, runs tests. + +# Arguments and environment variables can be customized for different compiler and +# dependency versions. +# +# To build the Docker image, use the following command from the repository's root: +# docker build -t openmc -f tools/ci/manylinux.dockerfile . +# +# For more information about each step, refer to the inline comments. +# ---------------------------------------------------------------------------- + +# Configure base image +ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 +# ARG MANYLINUX_IMAGE=manylinux_2_24_x86_64 +# ARG MANYLINUX_IMAGE=manylinux2014_x86_64 + +# Configure Compiler to use (gcc or openmpi) +ARG COMPILER="gcc" + +# Configure Python ABI to use +ARG Python_ABI="cp310-cp310" + +# OpenMC options +ARG OPENMC_USE_OPENMP="ON" +ARG OPENMC_BUILD_TESTS="ON" +ARG OPENMC_ENABLE_PROFILE="OFF" +ARG OPENMC_ENABLE_COVERAGE="OFF" +ARG OPENMC_USE_DAGMC="ON" +ARG OPENMC_USE_LIBMESH="ON" +ARG OPENMC_USE_MCPL="ON" +ARG OPENMC_USE_NCRYSTAL="OFF" +ARG OPENMC_USE_UWUW="OFF" + +# Configure dependencies tags +ARG GSL_LITE_TAG="v0.41.0" +ARG XTL_TAG="0.7.7" +ARG XTENSOR_TAG="0.25.0" +ARG XTENSOR_BLAS_TAG="0.21.0" +ARG CATCH2_TAG="v3.7.1" +ARG NJOY2016_TAG="2016.76" +ARG HDF5_TAG="hdf5_1.14.4.3" +ARG NETCDF_TAG="v4.9.3" +ARG MOAB_TAG="5.5.1" +ARG EMBREE_TAG="v4.3.3" +ARG DD_TAG="v1.1.0" +ARG DAGMC_TAG="v3.2.4" +ARG NCrystal_TAG="v3.9.7" +ARG PYBIND_TAG="v2.13.6" +ARG XTENSOR_PYTHON_TAG="0.27.0" +ARG VECTFIT_TAG="master" +ARG LIBMESH_TAG="v1.7.7" +ARG MCPL_TAG="v1.6.2" + + +# Base stage +FROM quay.io/pypa/${MANYLINUX_IMAGE} AS base + +# Set timezone +ENV TZ=America/Chicago +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# Set Home directory +ENV HOME=/root +WORKDIR $HOME + +# Setup Epel repository and install build dependencies +RUN yum install -y epel-release && \ + yum config-manager --enable epel && \ + yum install -y \ + cmake-3.26.5 \ + wget \ + git \ + gcc \ + gcc-c++ \ + gcc-gfortran \ + make \ + python3.12-devel \ + # python3.10-devel \ + # python3.10-dev \ + # python3.10-venv \ + zlib-devel \ + curl-devel \ + eigen3-devel \ + lapack-devel \ + libpng-devel \ + pugixml-devel \ + openmpi-devel \ + fmt-devel && \ + yum clean all + +# Set up environment variables for shared libraries +ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH + +ENV CC=gcc +ENV CXX=g++ +ENV FC=gfortran +ENV F77=gfortran + +ENV CC=mpicc +ENV CXX=mpicxx +ENV FC=mpif90 +ENV F77=mpif77 + +# Set up OpenMPI environment variables +ENV PATH=/usr/lib64/openmpi/bin:$PATH +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH + + +ARG COMPILER + + +RUN pipx uninstall cmake +RUN pipx install cmake==3.31.6 + +# Build and install HDF5 +ARG HDF5_TAG +RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ + cd hdf5 && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DHDF5_ENABLE_PARALLEL=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ + -DHDF5_BUILD_HL_LIB=ON \ + -DBUILD_SHARED_LIBS=ON && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf hdf5 + +RUN pipx uninstall cmake +RUN pipx install cmake==3.31.6 + +# Build and install NetCDF +ARG NETCDF_TAG +RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ + cd netcdf && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_DAP=ON \ + -DENABLE_TESTS=OFF && \ + make -j$(nproc) && make install + +RUN pipx uninstall cmake +RUN pipx install cmake==3.31.6 + +ENV NETCDF_DIR=/usr/local + +# Build and install MOAB +ARG MOAB_TAG +RUN git clone https://bitbucket.org/ahnaf-tahmid-chowdhury/moab.git moab && \ + cd moab && \ + git checkout c10c1ef343cbd45bd61bec626eb77a9c4741cd68 && \ + mkdir build && cd build && \ + export NETCDF_DIR=/usr/local && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ + -DENABLE_HDF5=ON \ + -DHDF5_ROOT=/usr/local \ + -DENABLE_NETCDF=ON \ + -DNETCDF_ROOT=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_BLASLAPACK=OFF \ + -DENABLE_PYMOAB=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf moab + + +# Build and install gsl-lite +ARG GSL_LITE_TAG +RUN git clone --depth 1 -b ${GSL_LITE_TAG} https://github.com/gsl-lite/gsl-lite.git gsl-lite && \ + cd gsl-lite && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf gsl-lite + +# Build and install xtl +ARG XTL_TAG +RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git xtl && \ + cd xtl && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtl + +# Build and install xtensor +ARG XTENSOR_TAG +RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtensor.git xtensor && \ + cd xtensor && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor + +# Build and install xtensor-blas +ARG XTENSOR_BLAS_TAG +RUN git clone --depth 1 -b ${XTENSOR_BLAS_TAG} https://github.com/xtensor-stack/xtensor-blas.git xtensor-blas && \ + cd xtensor-blas && \ + mkdir build && cd build && \ + cmake .. && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf xtensor-blas + +# Build and install Catch2 +ARG CATCH2_TAG +RUN git clone --depth 1 -b ${CATCH2_TAG} https://github.com/catchorg/Catch2.git catch2 && \ + cd catch2 && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf catch2 + +# Build and install NJOY2016 +# ARG NJOY2016_TAG +# RUN git clone --depth 1 -b ${NJOY2016_TAG} https://github.com/njoy/njoy2016.git njoy && \ +# cd njoy && \ +# mkdir build && cd build && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr/local \ +# -Dstatic=ON && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf njoy + +# Build and install Embree +ARG EMBREE_TAG +RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git embree && \ + cd embree && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DEMBREE_TASKING_SYSTEM=INTERNAL \ + -DEMBREE_ISPC_SUPPORT=OFF \ + -DEMBREE_TUTORIALS=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf embree + +# Build and install Double Down +ARG DD_TAG +RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ + cd dd && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf dd + +# Build and install DAGMC +ARG DAGMC_TAG +RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dagmc && \ + cd dagmc && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DMOAB_DIR=/usr/local \ + -Ddd_ROOT=/usr/local \ + -DBUILD_TALLY=ON \ + -DBUILD_UWUW=ON \ + -DDOUBLE_DOWN=ON \ + -DBUILD_STATIC_LIBS=OFF \ + -DBUILD_RPATH=OFF && \ + make -j$(nproc) && make install && \ + cd ../.. && \ + rm -rf dagmc + +# Build and install libMesh +# ARG LIBMESH_TAG +# RUN git clone --depth 1 -b ${LIBMESH_TAG} https://github.com/libMesh/libmesh.git libmesh && \ +# cd libmesh && \ +# git submodule update --init --recursive && \ +# mkdir build && cd build && \ +# export METHODS="opt" && \ +# ../configure \ +# $([ ${COMPILER} = 'openmpi' ] && echo '--enable-mpi' || echo '--disable-mpi') \ +# --prefix=/usr/local \ +# --enable-exodus \ +# --disable-netcdf-4 \ +# --disable-eigen \ +# --disable-lapack && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf libmesh + +# Build and install MCPL +# ARG MCPL_TAG +# RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ +# cd mcpl && \ +# mkdir build && cd build && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr/local && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf mcpl + +# Download and extract HDF5 data +# RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ +# ENV OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml + +# # Download and extract ENDF/B-VII.1 distribution +# RUN wget -q -O - https://anl.box.com/shared/static/4kd2gxnf4gtk4w1c8eua5fsua22kvgjb.xz | tar -C $HOME -xJ +# ENV OPENMC_ENDF_DATA=$HOME/endf-b-vii.1 + + +# Python dependencies stage + +ARG Python_ABI + +# Use Python from manylinux as the default Python +ENV PYTHONHOME="" +# ENV PYTHONHOME="/opt/python/${Python_ABI}" +ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" + +# Build and install NCrystal +# ARG NCrystal_TAG +# RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ +# cd ncrystal && \ +# mkdir build && cd build && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr/local \ +# -DBUILD_SHARED_LIBS=ON \ +# -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ +# -DNCRYSTAL_MODIFY_RPATH=OFF \ +# -DCMAKE_BUILD_TYPE=Release \ +# -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ +# -DNCRYSTAL_ENABLE_SETUPSH=OFF \ +# -DNCRYSTAL_ENABLE_DATA=EMBED \ +# -DPython3_EXECUTABLE=$(which python) && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf ncrystal + +# Build and install pybind +# ARG PYBIND_TAG +# RUN git clone --depth 1 -b ${PYBIND_TAG} https://github.com/pybind/pybind11.git pybind11 && \ +# cd pybind11 && \ +# mkdir build && cd build && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr/local && \ +# make -j$(nproc) && make install && \ +# cd .. && \ +# python -m pip install . && \ +# cd .. && \ +# rm -rf pybind11 + +# # Build and install xtensor-python +# ARG XTENSOR_PYTHON_TAG +# RUN git clone --depth 1 -b ${XTENSOR_PYTHON_TAG} https://github.com/xtensor-stack/xtensor-python.git xtensor-python && \ +# cd xtensor-python && \ +# mkdir build && cd build && \ +# python -m pip install numpy && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr/local \ +# -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf xtensor-python + +# # Build and install vectfit +# ARG VECTFIT_TAG +# RUN git clone --depth 1 -b ${VECTFIT_TAG} https://github.com/liangjg/vectfit.git vectfit && \ +# cd vectfit && \ +# python -m pip install . && \ +# cd .. && \ +# rm -rf vectfit + + +# OpenMC stage + +ARG COMPILER +ARG Python_ABI +ARG OPENMC_USE_OPENMP +ARG OPENMC_BUILD_TESTS +ARG OPENMC_ENABLE_PROFILE +ARG OPENMC_ENABLE_COVERAGE +ARG OPENMC_USE_DAGMC +ARG OPENMC_USE_LIBMESH +ARG OPENMC_USE_MCPL +ARG OPENMC_USE_NCRYSTAL +ARG OPENMC_USE_UWUW + +# Copy OpenMC source to docker image +COPY . $HOME/openmc + +# Configure SKBUILD CMake arguments +RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] && echo 'ON' || echo 'OFF'); \ + -DOPENMC_USE_OPENMP=${OPENMC_USE_OPENMP}; \ + -DOPENMC_BUILD_TESTS=${OPENMC_BUILD_TESTS}; \ + -DOPENMC_ENABLE_PROFILE=${OPENMC_ENABLE_PROFILE}; \ + -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ + -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ + # -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ + # -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ + # -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ + -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ + cd $HOME/openmc && \ + python -m build . -w + +# Install OpenMC wheel +RUN python -m pip install \ + "$(echo $HOME/openmc/dist/*.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" + +# Test OpenMC +# RUN cd $HOME/openmc && \ + # eval $(ncrystal-config --setup) && \ + # nctool --test && \ + # pytest --cov=openmc -v $([ ${COMPILER} == 'openmpi' ] && echo '--mpi') --event tests + +# Repair wheel +RUN auditwheel repair $HOME/openmc/dist/openmc-*.whl -w $HOME/openmc/dist/ + +# Test repaired wheel +RUN python -m pip uninstall openmc -y +RUN ls $HOME/openmc/dist/*manylinux**.whl +RUN python -m pip install $HOME/openmc/dist/*manylinux**.whl +RUN openmc --version \ No newline at end of file From e09782a582e1d24d35b00320fe40f3716c60f299 Mon Sep 17 00:00:00 2001 From: shimwell Date: Wed, 23 Apr 2025 14:02:18 +0200 Subject: [PATCH 107/145] [skip ci] failing at dd compile --- manylinux.Dockerfile | 74 +++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 49 deletions(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index cda8888b07d..7fefac6c3d9 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -81,7 +81,7 @@ WORKDIR $HOME RUN yum install -y epel-release && \ yum config-manager --enable epel && \ yum install -y \ - cmake-3.26.5 \ + cmake \ wget \ git \ gcc \ @@ -103,7 +103,7 @@ RUN yum install -y epel-release && \ yum clean all # Set up environment variables for shared libraries -ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH +ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH ENV CC=gcc ENV CXX=g++ @@ -122,17 +122,13 @@ ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH ARG COMPILER - -RUN pipx uninstall cmake -RUN pipx install cmake==3.31.6 - # Build and install HDF5 ARG HDF5_TAG RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 && \ cd hdf5 && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_INSTALL_PREFIX=/usr \ -DHDF5_ENABLE_PARALLEL=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DHDF5_BUILD_HL_LIB=ON \ -DBUILD_SHARED_LIBS=ON && \ @@ -140,9 +136,6 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 cd ../.. && \ rm -rf hdf5 -RUN pipx uninstall cmake -RUN pipx install cmake==3.31.6 - # Build and install NetCDF ARG NETCDF_TAG RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git netcdf && \ @@ -155,10 +148,6 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git -DENABLE_TESTS=OFF && \ make -j$(nproc) && make install -RUN pipx uninstall cmake -RUN pipx install cmake==3.31.6 - -ENV NETCDF_DIR=/usr/local # Build and install MOAB ARG MOAB_TAG @@ -166,12 +155,12 @@ RUN git clone https://bitbucket.org/ahnaf-tahmid-chowdhury/moab.git moab && \ cd moab && \ git checkout c10c1ef343cbd45bd61bec626eb77a9c4741cd68 && \ mkdir build && cd build && \ - export NETCDF_DIR=/usr/local && \ + export NETCDF_DIR=/usr && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_INSTALL_PREFIX=/usr \ -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ -DENABLE_HDF5=ON \ - -DHDF5_ROOT=/usr/local \ + -DHDF5_ROOT=/usr \ -DENABLE_NETCDF=ON \ -DNETCDF_ROOT=/usr \ -DBUILD_SHARED_LIBS=ON \ @@ -188,7 +177,7 @@ RUN git clone --depth 1 -b ${GSL_LITE_TAG} https://github.com/gsl-lite/gsl-lite. cd gsl-lite && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ + -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf gsl-lite @@ -199,7 +188,7 @@ RUN git clone --depth 1 -b ${XTL_TAG} https://github.com/xtensor-stack/xtl.git x cd xtl && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ + -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf xtl @@ -210,7 +199,7 @@ RUN git clone --depth 1 -b ${XTENSOR_TAG} https://github.com/xtensor-stack/xtens cd xtensor && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ + -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf xtensor @@ -231,7 +220,7 @@ RUN git clone --depth 1 -b ${CATCH2_TAG} https://github.com/catchorg/Catch2.git cd catch2 && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ + -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf catch2 @@ -242,7 +231,7 @@ RUN git clone --depth 1 -b ${CATCH2_TAG} https://github.com/catchorg/Catch2.git # cd njoy && \ # mkdir build && cd build && \ # cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr/local \ +# -DCMAKE_INSTALL_PREFIX=/usr \ # -Dstatic=ON && \ # make -j$(nproc) && make install && \ # cd ../.. && \ @@ -254,7 +243,7 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd embree && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_INSTALL_PREFIX=/usr \ -DEMBREE_TASKING_SYSTEM=INTERNAL \ -DEMBREE_ISPC_SUPPORT=OFF \ -DEMBREE_TUTORIALS=OFF && \ @@ -262,13 +251,18 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd ../.. && \ rm -rf embree +RUN pipx uninstall cmake +RUN pipx install cmake==3.31.6 + # Build and install Double Down ARG DD_TAG RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.git dd && \ cd dd && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local && \ + -DHDF5_ROOT=/usr \ + -DHDF5_DIR=/usr/lib64/cmake/hdf5 \ + -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ rm -rf dd @@ -279,9 +273,9 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag cd dagmc && \ mkdir build && cd build && \ cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DMOAB_DIR=/usr/local \ - -Ddd_ROOT=/usr/local \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMOAB_DIR=/usr \ + -Ddd_ROOT=/usr \ -DBUILD_TALLY=ON \ -DBUILD_UWUW=ON \ -DDOUBLE_DOWN=ON \ @@ -300,7 +294,7 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag # export METHODS="opt" && \ # ../configure \ # $([ ${COMPILER} = 'openmpi' ] && echo '--enable-mpi' || echo '--disable-mpi') \ -# --prefix=/usr/local \ +# --prefix=/usr \ # --enable-exodus \ # --disable-netcdf-4 \ # --disable-eigen \ @@ -315,7 +309,7 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag # cd mcpl && \ # mkdir build && cd build && \ # cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr/local && \ +# -DCMAKE_INSTALL_PREFIX=/usr && \ # make -j$(nproc) && make install && \ # cd ../.. && \ # rm -rf mcpl @@ -338,24 +332,6 @@ ENV PYTHONHOME="" # ENV PYTHONHOME="/opt/python/${Python_ABI}" ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" -# Build and install NCrystal -# ARG NCrystal_TAG -# RUN git clone --depth 1 -b ${NCrystal_TAG} https://github.com/mctools/ncrystal.git ncrystal && \ -# cd ncrystal && \ -# mkdir build && cd build && \ -# cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr/local \ -# -DBUILD_SHARED_LIBS=ON \ -# -DNCRYSTAL_NOTOUCH_CMAKE_BUILD_TYPE=ON \ -# -DNCRYSTAL_MODIFY_RPATH=OFF \ -# -DCMAKE_BUILD_TYPE=Release \ -# -DNCRYSTAL_ENABLE_EXAMPLES=OFF \ -# -DNCRYSTAL_ENABLE_SETUPSH=OFF \ -# -DNCRYSTAL_ENABLE_DATA=EMBED \ -# -DPython3_EXECUTABLE=$(which python) && \ -# make -j$(nproc) && make install && \ -# cd ../.. && \ -# rm -rf ncrystal # Build and install pybind # ARG PYBIND_TAG @@ -363,7 +339,7 @@ ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" # cd pybind11 && \ # mkdir build && cd build && \ # cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr/local && \ +# -DCMAKE_INSTALL_PREFIX=/usr && \ # make -j$(nproc) && make install && \ # cd .. && \ # python -m pip install . && \ @@ -377,7 +353,7 @@ ENV PATH="/opt/python/${Python_ABI}/bin:${PATH}" # mkdir build && cd build && \ # python -m pip install numpy && \ # cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr/local \ +# -DCMAKE_INSTALL_PREFIX=/usr \ # -DNUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") && \ # make -j$(nproc) && make install && \ # cd ../.. && \ From f16e8005cd37f235712b27117bef803fe05c72a2 Mon Sep 17 00:00:00 2001 From: shimwell Date: Wed, 23 Apr 2025 14:06:17 +0200 Subject: [PATCH 108/145] [skip ci] failing at dd compile --- manylinux.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index 7fefac6c3d9..2a41ff1ad86 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -261,7 +261,7 @@ RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.gi mkdir build && cd build && \ cmake .. \ -DHDF5_ROOT=/usr \ - -DHDF5_DIR=/usr/lib64/cmake/hdf5 \ + -DHDF5_DIR=/usr \ -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ From b9bab8499f98ca07a4c2a33f27b9e81b5f331d50 Mon Sep 17 00:00:00 2001 From: shimwell Date: Wed, 23 Apr 2025 15:08:51 +0200 Subject: [PATCH 109/145] [skip ci] docker build appears to be working --- manylinux.Dockerfile | 37 +++++++++++++++++++++++++------------ pyproject.toml | 3 ++- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index 2a41ff1ad86..51f9ab99e59 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -54,7 +54,7 @@ ARG CATCH2_TAG="v3.7.1" ARG NJOY2016_TAG="2016.76" ARG HDF5_TAG="hdf5_1.14.4.3" ARG NETCDF_TAG="v4.9.3" -ARG MOAB_TAG="5.5.1" +ARG MOAB_TAG="5.5.0" ARG EMBREE_TAG="v4.3.3" ARG DD_TAG="v1.1.0" ARG DAGMC_TAG="v3.2.4" @@ -81,7 +81,6 @@ WORKDIR $HOME RUN yum install -y epel-release && \ yum config-manager --enable epel && \ yum install -y \ - cmake \ wget \ git \ gcc \ @@ -102,6 +101,9 @@ RUN yum install -y epel-release && \ fmt-devel && \ yum clean all +RUN pipx uninstall cmake +RUN pipx install cmake==3.31.6 + # Set up environment variables for shared libraries ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH @@ -133,8 +135,7 @@ RUN git clone --depth 1 -b ${HDF5_TAG} https://github.com/HDFGroup/hdf5.git hdf5 -DHDF5_BUILD_HL_LIB=ON \ -DBUILD_SHARED_LIBS=ON && \ make -j$(nproc) && make install && \ - cd ../.. && \ - rm -rf hdf5 + cd ../.. # Build and install NetCDF ARG NETCDF_TAG @@ -151,11 +152,28 @@ RUN git clone --depth 1 -b ${NETCDF_TAG} https://github.com/Unidata/netcdf-c.git # Build and install MOAB ARG MOAB_TAG -RUN git clone https://bitbucket.org/ahnaf-tahmid-chowdhury/moab.git moab && \ +# RUN git clone https://bitbucket.org/ahnaf-tahmid-chowdhury/moab.git moab && \ +# cd moab && \ +# git checkout c10c1ef343cbd45bd61bec626eb77a9c4741cd68 && \ +# mkdir build && cd build && \ +# export NETCDF_DIR=/usr && \ +# cmake .. \ +# -DCMAKE_INSTALL_PREFIX=/usr \ +# -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ +# -DENABLE_HDF5=ON \ +# -DHDF5_ROOT=/usr \ +# -DENABLE_NETCDF=ON \ +# -DNETCDF_ROOT=/usr \ +# -DBUILD_SHARED_LIBS=ON \ +# -DENABLE_BLASLAPACK=OFF \ +# -DENABLE_PYMOAB=OFF && \ +# make -j$(nproc) && make install && \ +# cd ../.. && \ +# rm -rf moab + +RUN git clone --depth 1 -b ${MOAB_TAG} https://bitbucket.org/fathomteam/moab.git moab && \ cd moab && \ - git checkout c10c1ef343cbd45bd61bec626eb77a9c4741cd68 && \ mkdir build && cd build && \ - export NETCDF_DIR=/usr && \ cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr \ -DENABLE_MPI=$([ ${COMPILER} == "openmpi" ] && echo "ON" || echo "OFF") \ @@ -170,7 +188,6 @@ RUN git clone https://bitbucket.org/ahnaf-tahmid-chowdhury/moab.git moab && \ cd ../.. && \ rm -rf moab - # Build and install gsl-lite ARG GSL_LITE_TAG RUN git clone --depth 1 -b ${GSL_LITE_TAG} https://github.com/gsl-lite/gsl-lite.git gsl-lite && \ @@ -251,8 +268,6 @@ RUN git clone --depth 1 -b ${EMBREE_TAG} https://github.com/embree/embree.git em cd ../.. && \ rm -rf embree -RUN pipx uninstall cmake -RUN pipx install cmake==3.31.6 # Build and install Double Down ARG DD_TAG @@ -260,8 +275,6 @@ RUN git clone --depth 1 -b ${DD_TAG} https://github.com/pshriwise/double-down.gi cd dd && \ mkdir build && cd build && \ cmake .. \ - -DHDF5_ROOT=/usr \ - -DHDF5_DIR=/usr \ -DCMAKE_INSTALL_PREFIX=/usr && \ make -j$(nproc) && make install && \ cd ../.. && \ diff --git a/pyproject.toml b/pyproject.toml index 7294c8bd400..b3787bc43cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ authors = [ ] description = "OpenMC" dynamic = ["version"] -requires-python = ">=3.11" +requires-python = ">=3.10" license = {file = "LICENSE"} classifiers = [ "Development Status :: 4 - Beta", @@ -21,6 +21,7 @@ classifiers = [ "Topic :: Scientific/Engineering", "Programming Language :: C++", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", From 14ab4d3b6f3d77b73e8bb480782bbe1bdd56483d Mon Sep 17 00:00:00 2001 From: shimwell Date: Wed, 23 Apr 2025 17:35:19 +0200 Subject: [PATCH 110/145] [skip ci] hardcode version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b3787bc43cf..2bdf2701d67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ authors = [ {name = "The OpenMC Development Team", email = "openmc@anl.gov"}, ] description = "OpenMC" -dynamic = ["version"] +version = "0.15.3" requires-python = ">=3.10" license = {file = "LICENSE"} classifiers = [ From c753d1ebedfc9818984445015f5a03a32a5320a0 Mon Sep 17 00:00:00 2001 From: shimwell Date: Fri, 25 Apr 2025 11:44:58 +0200 Subject: [PATCH 111/145] hardcode version --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b3787bc43cf..5026f9713f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["scikit-build-core", "setuptools-scm"] +requires = ["scikit-build-core", "setuptools_scm"] build-backend = "scikit_build_core.build" [project] @@ -65,6 +65,6 @@ build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" wheel.packages = ["openmc"] -sdist.include = ["*.h5"] [tool.setuptools_scm] +fallback_version = "0.15.2" From d2bfdc97735cd1dfb1a247f02cf9185a8a6144bf Mon Sep 17 00:00:00 2001 From: shimwell Date: Fri, 25 Apr 2025 11:46:16 +0200 Subject: [PATCH 112/145] added testing files --- Li.h5 | Bin 0 -> 303096 bytes Li7.h5 | Bin 0 -> 1198568 bytes cross_sections.xml | 5 ++ minimal_test.py | 67 ++++++++++++++++++ small_dagmc_file.h5m | Bin 0 -> 34232 bytes small_um.vtk | 159 +++++++++++++++++++++++++++++++++++++++++++ wheeltest.Dockerfile | 29 ++++++++ 7 files changed, 260 insertions(+) create mode 100644 Li.h5 create mode 100644 Li7.h5 create mode 100644 cross_sections.xml create mode 100644 minimal_test.py create mode 100644 small_dagmc_file.h5m create mode 100644 small_um.vtk create mode 100644 wheeltest.Dockerfile diff --git a/Li.h5 b/Li.h5 new file mode 100644 index 0000000000000000000000000000000000000000..003633cbda3bc3cd180324138d1fd9e8fcda285b GIT binary patch literal 303096 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%0AZ*`QcnH#ODHRb%JekJ-hedurd-*T$k4Tv|| zlJ5s;MTkLjs6ER6_j9scHO`vIKOxuep}Y1w;No>Z_j6_r5HCqBcRA|- zqX&KUObHw;f8J3;)*cahWhb)vY;k?*qHWKf+oHQr&<(|#jySsM`HUPb7i^6S(mLVf zg2}1%{BM>!_0DFlX-A-AayKM<>=A6==gl^zt1E1M$|euxaKW>RMSbk*opE?xdghrxf{wz1 zA>o}IP*i|#xeX%IOrDzJ49}xLuK0sk@bwbL=O%|;ciB(aot*D`Wu+luuS~(tgTOa}8rsJB`{4Dtv~0_>J?PE%;M$0Z z`skiEELG&09vZUU4^1ZUS=e~r)M`B>>ksiez|cj0&*yv_k7?t+m-gpJBefxBvM}!W z5N#}awEorlIa=_YuDHaxyC#BT-aF-U?}pvx>!VKZ)qsqg$KLAA8rWa27IR^j8sx># zvP&85MB=Rz34K@Y#L@<%-LA8DV$a*MRTXDc(O0NeNu5U(TMZ`73UgI~PLgq2m8_AzOW&A^bTxN-E1_;K?%2`rmKg&+m0Px0;y8A z+wpPrTD~2-wqp?AK{odD+fX6jBO&IKB4YZcE9e*~f>+aE&fy>hL?6kXS6L>H`1-EV zL#pMVv-GX`C(o^rT(Q(+y4+?Y?6UG)Gf5U*@&nwiWN*ZZ&d0P)WXV7z@Sb~7lnmtd z9@KfWVgoily1i&}*g7cll)hmvU8aNy9aC%HwjfU67Yv$BTA%-`_ZX|(e{re_Q)LVt<3I0ZAM^<3@#e_6Y z*A>KlJF|e86U*TIF+EFj^Ahay&%T_Jvk<36X1*=VUWm^3A|?&47srVg4@XD+H5WtY zAFNV)HwU7BX{{bcpzf;u+NC{bB4xhRnz?60F+$3yiwJ=RTZahcn@z{_;8P5N)M-#M zS{_-{bt-J+`iplSD}oI<%dWkS7KZ8g&O>Hh7lP*4hyeK*PQN$$vIXJI*kp$8NDD;!|DJ; z%n2ylSQdb;7X~krXb3=nT%*OO0I>=JSX8W7cMg{=$tY zyk0>%(GSB#9u#c4;)7hT^p$J=@`jx24(=syykOkbbelMVnE{t?^St(g(aJI#-eaB^ zQN8$_M~yoUr?IEG6r6y#mooAH~w^-VIu8N06}UVDy$v zuDHMC+9%_guGktNujbEi#@3pFxqi8XoZzpwNr-U7%;?@z0&h8DmdZlkLHiuB{3iFU za8XC_N?Xpbt#^Rz?NB4D;|^GO#$(?@;=VS&{>AxGe)cf%Qsx;j*&g!;q>1Zi*kRQN zosd^jcDS=S-S<|4Ew0|$nU!d03+0oS6i#ik#qKT%6$V!h!?SaV?pUtF*wK}1y{wxJ zmazrb$`n{5dqATBX=`wA5w+c@V1=F+rU?fn9l}+U&7(@wE%79}*Y-duO9+-7Hd9Nt zz$m>HV+9N>ptDXRcfO_t!u8)?ACO{>hQpbo>;=s+`OF=@wb#rb>3ZNW|5h_}np@Lj z2e%mpW+mN8?Qe$t-0z0E6`SIiAayH}o)yr^tV^ydE@P3M8y0urQ_I z)F4A0yyWbmUXZU1;d;ZEO-r@VCH}q8HFHgb@-M$S?4$++2dNs*iByBfr^OiyxOPFr z)HotIR0SsY!z?&MlwnaNBPugY39j6J_HIL!z+WFXDf{+zY?6$Xm7T7L<8jZjcL^%u zr72IS-8Dju|I;q zF4KFS?&l)|@lp%tM8yrzSa*{@B63|*KjN%dKfiHilf6gs&rT??^f0q8w(*IfdKTH2- z>Hoi{{+}4G*rfkQm+Wj_5BL}Lr|aZQ_~+&H*Ui!$Ap>1aE1orv2kjZ1>e^^-3p>!(T8g9esf z!qQ7vdI?J}`LF0Dv|M7{mtftOVBMGaXZIx>cs4elk0ATi-|tKOTlw-uz5d}ZCQ`8Iz3ZmDSdD$Mo+TI{Q|Z3ny2_Xu^|fuW(K zr>jjE!ftu*$LwGWQqoC=Vl=Ja(FHM|tDwuL@yG2GIC7GP30n7rFYOc1cD}!~tJ>pl z{E*tMwpW8N<)qMP)W7LZjKY5gwEarj{)8i?ztZ%FJR$pYR$=RYokZ!w|E%=i=j|4| zI;3454LQOxn69>}q8{NQfw1S^mYoTj&);iTCyCPcYsh)g+TI?SGT7HP=^%7=1yJg+u%XNW&;%}wBalxRHY!~!;z%SDPSQYIM4ls`k zv|Qq>Xe}>jyX5M6WU;h-5&OYfwCDeWE}h07Uzg(?OO6Bdh(}hKc^vr9`TtspelD|D!g%b)L=phT$qs&x|mwCftzw;*!FBPs8O)lSV#%UlqRi`m4`r29@FI z29;xkIV!?KhFMgv4k@GJOR4lF;X&GsITVL;%FMhPuU|wxFQlFqQ2FJDYt8ME>8qI+ zKH(5gcH+Co;V!&v>-$W~2@i0O<`2@&qS9qh>C(d=zc=0)rkhITmrOlR3@_Z*SkZ)V z;^p9z&*P~4?uJJucrUvC>UQ{?Rmo19>#tDpzRh%7ZQGK&xJw{N3<0KXy|uJg6wba# zS*gewPuZPI0!eQg70!ZQQ$_QrZ~^&R=VB0*Bc7B|@fB#~4#6S{Tl}??e6OYGct-K7 zI^6U5>Dc8nDk-|k!tXa$|8ofyE~3H(6kU1YN5v1Tm4D2p!s%2vIsD*}#s~MC`C#DT zBXIN6jqrRe8~c)%r^5Ti-3qbm<^?icXfwTDgC^&V>XuB=kwMX&+e{}(PccPrIfZT0 zN7DH;JeA<4%*={rddPYgHq$|-%c8!2O8A1N26r!ft~Xh+9Ey&7 zkaQI`er}MvVb&v&)lcjmpfLDSq5bA03>Y>wwB|wz(n1ZOfpi$T*FRm-BMW}vbGr8%kc&{B z;^2st1z5RwR-kHF5u~rzuh1D$hRx^ZKDAg-0T z5Ip#BrooQ4_!JPdW`4{E2zW*H^IP)~M;te@ueQp;`m6ceA8Rvl;>x^Iw}}~$R&H21 zQ!@>5vD%%6v8UqoMIn)q>?wGx^Lp(bv1G!IshjMsn@KR;SDEXpo`h>`y0;F=C81)G zbBvFD5{8cGvRD6o5{hEHzokb6&Ky!Vi%fY}@9F2G<;mV$l)#C;my8C9p zazKBvjJhm5-t$q>Kjbk6IRD}0caJMFWe2Kp~WAR%7`vtco= zzJtrr^U}TW*`6iXbG%#CO#31TTwEi>ce?CoI`cuk@q9Z|#Xxd&Tk zAk<7`?KRO%bVI1!z#&=qAa-oP`P_|EK#sEzcMXONY!ci>DsJ=K92GM>T!%*fdl) zng1+qYCX9m_~8<+OUz$kzdIOp3r1C?D_uo}`@HxeeXiq#RN1WU^KM{iWymi6bs-ou zD$vPv%S}iI=w><$>xh2w=s13J@K7M zw{d#bkbVR8?_kQdwdbFA2}fwby0mF0!Xb50<@FHZ2uMvBzP03d1deYR?a;S-Bo-}l z&Yfo-3Att6MHt1Aa9#ANdaGI#*kpV{=T5kbPPrTMtr*d`rESC^`XU-1QuCc+>SNGL z_hq!VMjRr2mOqr~e-A3^L2vKBNkHN}&Xg-W4`EZe;C#Jc5-biV8Y*$6pjS>z@!@%C z5Z1XG#<4dOL&_ucvv#1FE(`+-I94NsRkDQdG9+gOsGW@Va zh$X?!(z4Lj>(CI;}>&6&Viy8+`RgA-2f$Q?C^zOm$rktdO^?hVrvE3VW;~~b{AG>$| z%_9iRT|Y~8LNcZ;JycYwnS%V{7aPSBQ!&-A)II)mIxL1Tcs#>0k+n>`;v-uQmT`8U zb#^Ne+w~=V zGHW+->#q(&@9S}qvKjZ_IC$#WsCCIGRjE|k&6WP1V^aa^x4q`9k*P%FE01|AY^!ko zMwp;bYBkPOMo;c0{|pNpZksK{??*>3hCJop;@kWO(%K=7w4|W*9w91X1%*l!_F|~~ z&5s5zL$%TEkmhb;3AE{W!@B1X_P0 z*SQ#N`X8g|X5pX70p@isdR@JaXz@>$my~m~7Bb>z`3qF} zM3!SkmDjRA^KJeDr&0B7>F4eH3l#Z>{sIHE1<%R?qobYPfqIJI$a$V=H(&d`KkI<@U~9J$w!8TDEjE} zw@$QmI{uktSZp?lG~e69_RixUrZS-M$M^l@50d+SG9*y>GVjNF>b8Z{vXGn%-T5MrmS8P^ID1U@PppZ8Wc!|8d-ZlX?18 ze?KH|QRfdCeFlpq-tLmCKZ}vis~q|g$hRF!t@Y1h$bus$<|YL|)ZblVqqH9m`a0S5 zec*#VvLfQIulYb=(7X@?D8)7M!V&|OlMbx;N5^T48Q7kd(+NK#kFq$~~LC{q% z`1Lt8rQ35aRJ|E)qV>rO!|uG;bWy+?b|Zxq2giHklclDrm6{I@eICT$1-`I;E~cw< z!v`}$o+$5M?2WSMB^%!_^g@yE>bsZVh13^bFS$5RB7NZXQGK_#V?$Bg&3gxqq4=bl z+hdQTsMfaKJdDE?f-~}7%OyHt)qLaW+Ifz+<~r)S41runy~BGvazLf^laC?RwirD8 z=AN$BHmI62zW%wD4OFb}NPQS#gAQ>zN_n9oW8H9_=>=3 z`Ddbz5q=3rq$-Vtr5VJH63z|pZHkRv3Y%1I4`Ped$3qzw2eG)P%UV-66UaXo9W~S1 z80>n1`H4&SBhK%_)o$)as5yDBG=|^)bMcj|plrr}p5)7V%QmxqEP?+q#c3<@!(@8^|Bwu8(!EeM2Ae=))mM zGU;%z9^}FYZ|kY7hYbUVUS0M^7gPKNYM-0xVw}y?WpOif;kLk2E}UN%?}Utj^)FXM;OwcxYn4XSLHC`f1`C$K=_X zVjAeGQU7?3m^wbMUN^{Tv>HC`&ro)i+yyzk149qa-Gx_H<0r0tt%~Cl(k`32sGv^$ zjom#bWvpX2oOd^I2YOv{8jv?`2MP|0-$@YM0Y~=Ra;p-RP;)uhVy2%G7Ctwv6V%=g zqwPBBbCzsJ*MQ*jqX<0r;)HJ(4@KDRe{MJCrUG|W<}hZ)L75jsjziH9FOA`-blcrx!l~D)rlJL~p)yxEwZ6YiOo7&c3OD~oM=ped&WYVSMI=F3jSlg69rwLlGw{6tIlQ@Y9AKA2^ z*5zZ?O9DMz>tfVRH1H;)v(95#b(F`Cu6$#<6V?Lj`FsYd!Zd5~hp>-3kj9(7%Ro{I zt5XMbe_yl>>PJ@D8}(3xQpLakl|>3jj+(IZeA-qF+3GnvICU#QpO|p@`mNY>cZ8re zpDgsQsz!Nnw_k_*yuHnI zUP^<_{Ft0HflHtEPU^pIEh_8x4IOE^2FTiAU$=cV^EsyGa9es2^LjvgdXd*amR|I2 zGp*kfS-=0LBX!y1Crz8P#{!Y)6Som!mXiqOn8pqO$zKxT=XR5aJ zA{FX<6is!<>qTF;gG|dg8h>2g2?~)d{O8C!yPvdP6v4!Q`a7`j>l|ony@>fdUt8^7 zo*EtLQaZZb)A_cAEd8IQ|FiUemj2(-`aesqu;dC$uCU}vN6D4;^va+aEWNU=Io_WT z|L>iXHktD?^*i^Uq~Cc>Cu{vDw1tkOk#1M?{VCc`TL^W($%`tiJ^AFgh$Wvo^1J+M zc`@t%{1gH5O!wqE+D|CG|Id6cujStIzw3u5YcVA~Df-*;W16*sOsC28p;>wbORr$* z6)e4?qx1?|ys+*ouF@;mVV=^x+^rJq?J6r}i| zN%dEnEx(W79Z|~P0zXY!6Mm0e?Mb{r%eS`t?(kE3V@Pu;^vX?hM5`anes?5RlKqk{ zN0SOWO174x@l4;TRi;FMpNbIL(mFpGDr_J}#xuY7tA>AdzdOw1Wy|`=mv$KciQk>J z&WkX&v-ZXh-qmFLq3u8Ys_lkV?;qm;^Y}qaxgbhT(YgM*{&{46N&h??QeT(rbbpm! z^YwJ}_xn@uTmAEFr5Hlnscs4XsDB>Kwd9vbYNhZo&r9fiAF<73>e}WHBh~z?CUZKMd_phxC7w9!{oDYW4?1hJ%{@sgU6a%0566g;^BR{sT&=aHE~y z#=oZ&(tZVMsq&wOH@OYsuA=4RQ4#I&Z zM?29}`AKN>B1E_nYWDZi~a$3yz7DQ~mBWPVS>NvsGb^DSxiQ$+jMA^Dlw>{o}b z7qed)+Kwn`U@ibt29-tZND_6pPEw2Pfa=Hx2BTv(^C!74^!LzX?|@w z=yukEiryJhpNHgQ0_0R5x#wa{&AhlJJs-n(k0o1qc{aB7f2}PtBO5vu^OjAo$imFr z&jnNRvM@_cEkbxeHl81@bys%E#xn1s8bzrb@a$aq%6{!*?6vD$$$laiee#1nuU*dv zeAas3_b))*0M3SW6N?~{U|;dRrWm9B4!GQSR*FZyMGf|X75GrhUU%SB73!?!Zp`q> zLPPhz)~6L@V5j80nU@cxBg`hlUGY>J#y`?_knNm?1um-D4gRS(u5Y->!8R4kqI5aO zpH4*viighbk_H9&UhX%%(%^VusNs3ZbO=w_?epSP2KqB5onEy%3!-&V+t149AgRoB z;i$A+e0=fpk+S;}c+DOXvh`vi$|A>>rzaF+sR_KrEy@smdYOOa=SuWkJX)`F&NI^g zOiC>l*Hl*7ThwBZU%|MN9?zg__9^b9dL>pQ4Um1es0{Ng_rLgfp%}Nu)I{;`E5y<_ zC*@qdo}gk&w+qQ(xrBY0RkfmH9*{NIKSvY*ob>Gn>` zQ3hkXg7-|hvlrl9aJ&8h;YX#*bYYFFlcF(c^Lho5h8f6~=aRPKMCl zl^c(hq{1XP@nqM<8PN6<5qcS%g|IhLPVc8bM(K;IpCSl8zTsb`wIikg8>*vA4PuI5 zH%ad0iI*iS-KEWtQ)RH^cy?eCs@KVB3JvnO!c!ywA`} z^_e#iC@{Uxxxenf^!3)*tuv$G8+6!*eO?T@5?+KPuE$~R=!E<=i3vEA>LQ;0{vm=E zjP5>EG6~Xrv3dNPQt-ac{Ark78YX(~^NW0z0jCA^^Q^41(etqT_BS%Qa1;r2deMd8 z(`81d*gi!VIQYzkxGNoB7tkE+9U5}3RPcmooivKtNBo*69eeYZSlQ2}t^rEdlBP;ZW zaDchLN>Fr5Y$MwR&4!NlPeSfvurXw)0(gT-^Y(Oq42dAaSy3daQ0X{rNq;7EI#DVt zV^78#Q0c@dzbAA$W>%5Rl?sXN?R&`VBGb|1;D4?Gu`2XaIlwGmIjPbDsrEw` z-qH7{nf<&}946Z#E$0ec$uOrai9%FGWRAB^XF`R&+{t*l9g9)@fX9)=< zo(fm!lkxOEP{`ia=?bVY!-$OMr|M@wh3RtZEUA2~Nu=j7ydJId6Fp6a#i)3i@9iOd zpMst!c4CkCG^aA4@gJPyQX^}~PY!rgzRc_TE$4r}&(DkFPr9cgv6HNIdwgU) z|KA)a8q;O&mOweYp5SjXaJ&=paxZ#0=n)g-YLw#_3rpAI@4t`jazteoMkw0cz zZ8NT#90234(FX?1K8=?v{nJklpR_9gJbiY>$+HLIfPYG=rrbG5 z#0q9kQo02Gh}oNmyIz8~q9V7+`U@D@)%rmJ?>Vd)Z~Uaw(R1i*%B$8t>>NHPBS&$< zc}&T9effdf1>^_Z6`6kVB6@At@YkIa1op~Z_M7T2!TxfPNLmU`Se z=0&`hJ4&igkXImHFWQyU@FV~kyH%p{-ui$sa)wVsA0Kp&ovR+c;1mS*%AP*X?v7qn zv$76PKMwtf8--g5+~l_Wezf^9yjvP0EaU77tDFJG$8S3$B5HL{D*{gjTa)(Ay!wS-s$PVSY-RENrk$odBD$GDW(gFa?@2u z<8<&jh_iV8Z5?n95VpPZUK`uq4OlZ+P#e1kBnB^Y)Ivy~=M^eLwczbXOa$dP24w?s(zcd z1?KZ=3d@Q%L+WwY~#00kg99tQi!w4sPZK14Oi>iG6|+ zh4Jxg5c?v3?*z^@koc5eoiIlVYX{Y`Eg&!{R{nC#b4iHLp6Rwib_M2|m%U<0tiS>G z(q+0!R$#!^9+{%UmLjLeTix1V3G}?xPu7b-lTQ_M*DYI&sQmq*oSusy-h1Wj=O-6o z@fCgy$rnddCqdbYcMA|5#UpPRJ)hc#V=#OIDjPk8;B$Oz*#==-^z6QAZ;+xJrj8%* z{)CM$3?BAT+M#g{FH#39?n^j_89KfK+}F<%_TLveT<|^vfyuiR4_-Qp;=5;;b{};P zJI;pojxjh7K4a_0141sMEbyH46~iD%pSm(^#GYXIoG-ua`qvf6XPwLD&JIS1;vSVZ z3c;8t{lL&rHW=Md%^LLD|WnGz5B7SE2@KTg=G-vB4(H?E#!(>Y5vo~`Z~kX zu+YDoyd#b%gf@gYJ7BseL+iD<1Kb?hyVtnbp?o)^t5CcR{whxtxV+OEyAE!hI{UU2 zuZEHbv_)rdvSoFJ4avJ_~I2ot!w1%L08oZsf?^HOEHlN%6Ki z=HOY-KS_R)IW}8l>s)(ohRi!r`)qESVMTwwge9BIFnVJ6Vl6H+xG8aZZpbx-e^H-X z={AJ?Nd6>ODrySZ>02)h?_ml*aS^A4j|XwYlTR+!;UJvd)!wsBI*5m%E0Mq20Ln{{<*TGM?2`9kaACJ6fvJ0;Cco0f`mO=tA4K?UUHu+Nyyr8TxpNO*_nj=R z`&1tRyB`@Huhz$al>$91ef3ep=Jl3gs*h!tB|@gz>tR>e;Kxa7dML2$_TV;wFrQ?i zPWVg7nUU=Hbhi#J>WGJKBydKW{*~^hwK4p4{yC-9S`apT#HPGd6YPKOxc)*y6HDLg zPCFmE8$0sY)x;m|#HGC^<^8VhgzCgN$&9NzF=*Lf<5LmJL_4ZqK1x9us!;=d1`#M( z{3v-N;kTgJE?{%6-*#*=txtbhsfa3e5k1ZRig+tqaO@P}=j2u7K_iL1a;P4o> zEx2C2Ut#KcS-d|qXvyf3|=8ka5&tN2I9-kewi^9bcVHY?YF;nZL#Mc|diZl4F(Nn!u|zZ8~pN@2}i zolYVIn)!|$DD1iteP0{O7B5->@u`&s73RyReqD>U&ebu`kK5BPH4Vu57d z?C;8fw)9JmJ+0^E9j#yfi+T~Q0sa)d$mJ*LMeD^WXqKWAUb`6ua5UgoX!S9-q0!mo3nJ-x`whNTyMorAyk)3)>?QELC3 zroQ9#qJK-?ML3cz{MV9qj!gWgzXJ=u&Ve@9iHlr%|19~yk`FBTz>*Kl@}WIFkJF8%=e0HG`V->+z5V$D>O}R=(YIWG()tqP z7;Am$NBTiq`WEv&f%fE6tv^dX{Rsbmmv`FI$0MkFCN!NLt&h`kk-m3A+ewl+L$*gR zs$k~&@l)~gO!r4R+W$dY{spXVk@eH0>OlibKVazxEd79`A290&w0vOQA7I@dVBH`1 z9q$kPTl;AR=gFDJ&(ZIEev*Dy;78V)mV+$(HV(9>w{e^!`O3O)@@@S5-BQu^Mwsu@ zx7Zu`cm1kDsdw{3ZRagi!h`O@F~vN>1Kr-LLB?efW24 zzduS(i`|8e^}Ev6dRiT&@AKaN`Z&hY|5^G!OaEu-|1ABVb$@_$f8fu#KhU0@W)(ut z8~A^8!ozy+m*xQT{*@p_4L>!{r-}Q0{I!|ALW;61cuMK2R@yU4-z7JQVLy=9q*LeAK%seM)cEvv(GLN?o35ZMo z&(wo#Z}flqd$#z|vhHFx@9?s4Jezr{Honh8lpR&jrM?X$&#y8;o1Hs5l|uEdMtVV#_Z zKgH}x)}Jr2G5h0VFec6Y%x$4`6K@s-jF6o12qPBNX@5x1#md^3d~fv1nEEG!@!9+M z*i7zdZKI-m%Fd-r<`e^ZRzz15D$UoM5s z{TDqJN|s~a;}`e4rdFVI)v45?1yyi=#C=4?uNq~u>#Vy3K1KO^1G~;=o?%g- zHK>lrSIs=b+&}+2^(Zj0o%3v|JZ=uMV_&^*8>F*drFfk+g{|(D&mtansD2_7t#R5O zUDk?9oMAX%lA_4q@a2xUb5JAg5}y;w<}6r!FVP7*bkp@;sypN0=0&gWym!Xq2S*y* zp1WXG9Os>eKv$$#d=@`7^$0G>vc-Prb`;)uM#efhN1^Mvs_QV$V}zeFlPCxNV;JyU z*I#|WF}xot6FF?8ZNdf%$cF&N|=%_@I)6blTsZcco96nu)$G9J|&#TAuDrv`W& z1xJYMsw~l{(&(|4+rWO2y2+T3!vhS+jCTyv z{0M7;Ua86%#u`pYJ!uoKK_K_DibLb&9AWTjr_@AG2V@*B4w-e*0Yay0rkY6GV{YYy zQVv;L4%g9;DjfM#0DAF>`G&gTq!vl>HEtFMphH~`jOJu`FCVQDk$KW_GMbG#`o zy$uYAj5r7*n_&XSISxX3^1WTBW|_dWhfL4%#r9 zK$C4(mU;}@2YuVheqrW&@IF3&rtqFUIB%Eha!Y>?R-N(ev-yE8e1tnM*3#5PtH$0^#zb>F>Ypw=9ra|Dfkvq+ZPOTSk387BF#uSudv7;iQ<>(dc!yj+(vG z=V_SN?OOcse7QdKll+!3j&GLw7yOp>Xk{Of){ms_lIC5#sPEF=I+j#AsZWVAeMeUC z&)@)af0dxgPHMeA^0WMw@lt}oz@&Rq$+TSXqQViTWV|5tKr^*Qi7v-YK&ya?y)gAEl}Pb>*Vev!5v!PyVF&VjUCz>F>b8Z{q;Vo*2uX7|Wj6?`BVo z!C>`kR=;NT>))$iTZ%}}ZyeQ=xOAG3!JzLMkmz)id@dEXzUg^lxMCAVm+buFy|(ls z=KcKk^dkQEEWPO4W?H{zsu7%i^!)?o^K32lDgIr1 zp8O2He=C_~m&yAx7g(g-(nw?`1TeyzWHRTWYu3UX9)AstRgU z1VfDe@sE%^huN7ypNBM{_(hlNMTH|elYFGlam7>e=pPmS8@=3e?y;lod9pRN0p{^Q zq8s@=G$|goHy%i^k?Hw=Bc8KJ`F0L4j|YO(s|8fQrgQpz?01DElQ+QlY0{eTd*p9V z;tg63N-HSpsVV3xZ5LkHln*^GbL>j?tB~eW=$_gf(dq}Y{jLzIAJgR&P+>;**78=g z3mI;e+1~>E)bFGLWI8&(Ix5V|`}Oz#menuu^H;au#XPRI%#XgD2mBNJU2UziFt@Yz z#t*9=Wc#7#3BN=mVO6rjIKVu9&{B?{l2dd+zpkCHENZ-1UqV#I^rfek@Q>R0D(FRi2@`U9Lgmlg&gl6? z0XLbtwwXYw=3gEEqis81Do)RgFs&;5zW1W*uRfPh_O{x#^F`Jz0;D0V6p;45a=+QW z7y15Es+Q>yx7kx_LiAzqd1j z=WNVJujma0NhW!S}#2b~yu5cNRTxnw5z;va4N>)Mi3a z=IV2?)GUPY9e4_(9E@|S)Dt?Civ*F$hw|R#!~TBAnS*5o@a>i=WMp0h>jsO-Th^2y z`Sgcb0|+}(k_XNo9e=0-k)KDea;Yyzcvk_jV;@RTFMZ!uU7`q?w{JZ z%*ccJG;_Z00y*es5PEa%fGpfQ%Q1s5JssY=ZoT)Ol-6PSknM#2PxGJtz6{0@jZPa> zGH&6HDuont2D>U)4}aKAKom@MV2FDj!S6_I@%t4v=Z!fW*OLI4ry_U30o0 zCg)f^=rlF}XY_(Z4XXnXF(;sGV_5*YUKqSgq9FhQawGF+5y<|=YT_j002plPw7+|> zKa?Xkn$I8Vk6D`~`U^Lr@OlO5L_Z7{c~G$FiVt$V(pRqe%Nug8JGhs;@q%$z({17e zW(Hio&GXs|Mk~u~c#nBvMD^lx9yRVboW`E!Qg8war~H$KrJX=e~6*FG7~bj8*Hc{P8AGq%j6mtN-{>AxGe)cf% zQsx;j*&g!;q>1Zi*kRQNosd^jcDS=S-S<|4Ew0|$nU!d03+0oS6i#ik#qKT%6$V!h z!?SaV?pUtF*wK}1y{wxJmazrb$`n{5dqCyX$T8O7-XdzdQNap5FH92-N;-tACYwi< zrd#4kbg%7!QkD=bJ8Y(wZh=vHE5-^KSU_i;M(%t~3xw;xy*?nt91VvvN7)OSWAd3h zd~2_nLDKcWVg9XV=rp&c#|~~Y49rTpliHuKhsFJFs9Uiqj!7;l9QV)^mdY{QUB{au z(}_ptKtEHkf9CMgBGBHqm+-Ek2jO8EJ@Apc31PpjHba5H=dzkX#@$R%?3K5=p2rwR zmd*{}aWTRcZjO2dXCsV0d+6b*XNH)p;y-iA1_M;pTrXO=&;UF;mY*C%V5RpPt+E?> z7{ycMzgb=nnlA+s))H8lQgCXJp$=Yh_E0a#*M@MtVa%qbTIdr0Ug(;+CPMj_UmbQ* z1A>E8jpszF!Q<27j0Ie~AYy795ge)lllx&7oFU4vsFD$t8KwkRZa;gsp-SMdkDHWz zdpkBs#>&c0SH$tSXW6?174h-X@e|z%%$DaFc(POunG<-^L|4jTi^aLw2`l8V)z(aZ z$$MFtyzO-mcgmL135ZJx}-Zk%4%rg>$0f2579i$sZB9uCafMH7t~!-zdr2 z+NZx^qtf*J@B8u{ZRe{WB}#`;IF`cyx}7gaYMq3hZ;^U2%gz_|`B=cj0cO3J*2_eh z*4yayxQ?2=)B9}9>wEtXcD^F|A71k>*!kl4pZg$ULrDEdhGKAg>sT`UWO`Ai@5l=N z8605luM!m56@$rkL35#_?R?SwHIR=iC!Q*=W!<+6qZeV3N?n(%0Vg3yNLeD*6hX@m zy4|+)^KL{s4u+b7qEh45aDO6UTiR{ma?GiWo}r zxnMYn?a76pkz_hrem60l_3w}20JB`+q$#Jy3p&`*=LnhYV2O#7?U3%jDpc5N5g9K; zRYXRrbvhF&?6szKJ9eY`0i7Rnzo6-?o6tHx{)uE*>@O1O^?pv_*6Bp4u#5;9&rj7) za9-D;Jr$ObZ==6ieC-nkxqDgzpS+zwWq09msjdP%q`XXf?W z7J2)9cCb8u(s@j;5#Ptp_W1p$Js-7e!bhoNYUtx`Kfa_@)EdCD&4`1UP5!v@kHS1rQY|~ z6-9ttPmV;$W*O&Wj*;MKT0o7$)6ML+pVdWy^j8s$bB5s)CG4Z2EMKCua$*dYZ?qK6 zh=~FF4Nh!&7XxcO$-A2g6y%@L+np;GBRSt2Oj#O>o-@WD%vWl`(2augij`xrXVQq_ zuhn9qdr5S@*tS@hUOzmXPoV|Jmh}zeB*J47c(#$S@Q$xmwU;%%bJIp=r+MTc^6 zSlosCrhbk#o9?214EM+a&byf9CF^;+G78(GhTU@yj>1%rDKnl}MPXw1H^*fxi1@P8 zdD2Uxa3h(K-?@7f3Y7{Mk4}oj+2fmJhx$k2j^+ZRP?Jc6HxO%#1Zt)!+3r+}L?_)< zKHS?PacqM2ya~f2(OL4E)^P4f2+lQd<|A;ro%5$j0THl#`I_-yR|LuuR|t6!sP%vB zeRm*N-~azhMH;+IR$8yNv}mf-Q%hRXLdi-**`usvuk4i(QIygUB_p9!qJ)f>{jz7J zCGFqk-owZ3EA@Wo{d=pIKRoWauXE2m=XuZbdCv2B&w1R0aUaSAQowb7^Izp^$spIB z`abX4ZE$?0Sm%qO_8tB3T}HRz7BdGY+`k1J{6l3VlWxI9WuM%I7``c8BRxej5vrI+ zUr^^sgmMS3kOLUnFA~s+W=nv}73Z0qV&Y+qU5d2N`#5-cI3#<5Qye&24qIx#9tXU( zW9+AR-GoSakrVI4ZbDJX_@E2-W8wX7_nZeou~6f&?E~wCSg_h;E7mkV7QR|;+~>j; z3+&@gN3^=%fahNnI1*fLKstAu-gykKt;lB$m~sP-G|zohG3o~R@6)fz!_e@{{3k+5 z*J1HVIsOg7*I@x4ebO2Xwd0G*vNNcHivR2@_szf ziHg;#ofwgc$Gux)dhSO<`_}%iczJK@r^xf;zWmGd`S|>c;a~n~Ge^9=z4@1lgnxyk z@~i#Jf6p(9nAx9xQD{H;MR6qgqvycD?@ORJyGV`)^ko<6ix_tC`;z{>f9=gK8WHg% z)cS#I7x|a;r(F!`C%c$Ul0SM54E!+(F#J!3|H<$_2ZsOIq0tO|W#}tIUk8T1z9rT- z_Qo${pfA@M@AVz1Zt<`)LljFw_dl z;PMP13hT=*()Tdz;?Kzacgst*i&Ub4G}8XE{^G$V?`P}Y@B8oaVDro3dLTozAL$p` zD9l8`HI0dhsWS)uzk46?-`_9iXEP9auq_CAAvr`4>2$fC_9UCIM}%1ach7X2?L^&Fe>@WBtRZNkd@;n z>=e4uzs-Y<`Xj=>KVO$2m_RI0Q#z46Ui{a1uq{aP?@@Uyf#gC{{k`lzxt%|o{!t$6 zV4`3|deWW#yFAzp2k|G7&Hlf2CigSMgB^DS&mDpWbc*EvUiOQR(fa{ZEQ6&*yoU zyz%=s678!eo>vWVA9TMc;(RwhdvEQ+&%Yq#+1;;4$t=5`e&jjPj+SJ_+UzMM?-5^o zLs!4S&sUM;+I{~HY0kE<0vu6)M11Qlgq*+a*KreVo43b3PY!<3LD1eUXI#GB?MM9e z`1vk*LR{DtU5e$1El4hx9uNu$xqDb15XA1HFq^AL+5A%SkN`>jt77O@OC+ zli#=RJ(r5-9;Xg3hpSSal@plhU^nm8r6G>0X`5RSlKX^i&mx(LmR4 z;$XE+#qd{v+&igh6>vQ$obQrW6)XsTccbQDHGJ4BqBPI78n)8R7u>hc2hVLq9~M5w zct~B*(czn-hrRUNbc%`a#GUG@MjHMY!e17~CW||1R z%t+1$>gX#aALrBH)YcZUG>l)J+1ZibvY`?-Kh)#cbh;X9)&|`1_N;-Lgsj-=pEaa;pj9r9vvsewZsiZ0HNvnaY!_-|?*Vn*}WEq>GuX5n8 zg-xTL+dPGOA#Iaei}PW}iK9ybI0|81oyC}x!9`%REi2OJKnZAh<|~h0Mh9cI-Ods( ztKjYBdvf|oSbKGch76rs12=`{EEd{X1ID!`C0o|lz@s}Zn?l}I1N+tDW-pFx2v;l= z9a5JA_ayH4sue$lNqoBdCS%W|ggrW^+_n%bc^-ILpDluyg$GXWz z8LvOL04qPO#9Jhy22zd&E|tirfutbU(E(R#fXkKYvwuSkuyW_56urxY3zEXz+R0B~ z*x2-#%$qsj#`c_7&EYAyMlK0!+mH`ShArC^FI5OdlBTjBl!`#{mSFYG=n9xeamfu& zu7=^A8EPOhGi$@`rM1Akex<9RR4uH$>oklyyB4C3yA;Qi)j(igN5yJjU6L)Iz~OYr z+ZkXj#r+8U*S^~xz4{4^jePty(lrNU1mwrjg`dKOh40*3SLOrdp+UnNkwVx!;uZVm z@*-&D8(%W{dId-iFXh_JR|99FmA0yku7wemRj<@f*Mj`=Q&+|B)Pht=#D$cwTF{RY zmot;Cg)O{~GukR^pvpV`y_ms0sAgq7C0m#dUrQ@f-s(Mqm*$rD?8an6Jo}_6$3Nsi zL_Z z^#mf6D-x)1UbsvTwpnH_2_Yte9+(UHSS{)3n za}gevf$5WdRby*p4Ph_QD2wbK8pp8ninFEX4X+^bb)Q!Wvktf)m=4EOyeH&fdb%nn zJHRB4JWrxfrgs|36j0Awz`Eb93RHu9)4oWP=R*{VpWN!2Rn{r+d866$A*NN(d{J~R z%eHUx37;GxP%|qYQs_15oGWR-G~%LkNqGabC60LUIDsU!BQkrNY3{eC*-DAyF{R>A359 z#{}RQV!rm|j5KiAtv5u$z6dIg-eIbCs{xPMZ|AUvW8ddEs&qJZK@;ds*{!WMy#+9% z{8g3r+xr9$a!kCQ;sl>4t4GET3x>Uy<)(eny8s7QKVGcM69Yr`Y`c6r;TFW!H=KWN zkp@EZqNaSgRRAXs%u8Uw>?Wn)P19WMdKk53n*A#FCdgH{+Pa3l1@>&wSapT%IT+oV zHfx#04M1gxrUwYnnK(w+1VhP;4G-E1&cj%nR0&R> zD0uks%X9xvv7i>ZQ;b7D1(MiIo7q?&g7_qf#Mh_uVVuBW(OH_x>TS>9kd%g%{FQI(aY%w|{TxsPu|)<>JLL4>_8y&aZfh;U z=}1A?xLPNm##)WJW8)2_hbmO(hMt1<*Sf(hd1pb@uW-)IwhOS9ZK2?BgKJ>?ZhnNi zUK|V!`JA9?iSYu4iwmkn<$&Fu?VFQ}3gLwG#VMRmD&eV*?5SCp-TGKN!`M5s4n}9s zdtLsn0d)K)y*ZNJ1Q~my#dub>KupYZrm5l2;5xJ3>!DY>>phYZ*Twrh5_`w1t*WZ8 zVxUj?hF_X^?~CFj2$7{ken0*$fkNqcC(!YS@^Rrw$~Xe25GX+4LIPJ3xQRe%0#yk_ z{H*pwdL$)M;rSTr@FQlmgh&?ftL6D|H5ub5e*}N31jQ-2x*`= zB8qqLn&R<}Rw5rBmu7s2qNns2DI@`MTpIDrrI6ltq41d`y6_(&;l@4-J(goxJrUDWZg)52tWqeD(%vdMf&A+8PIl`i-VS7a#tj5tKz=34?^n!LnJ{ zF5LD1?K>3d=D5E8=yxdSR(O8le<**(`M=0EB=4Jw5*@+!u34u32ZvoI@sI~4u3Pn_T8=j7R!y#JKn zd)p^Q){nl%7fB~v{zxzX6!|gQiA$ij@uh*VuSib6dVKj8?IN{5?P53zAYtEA`zL?+ zc*{iiwAe>m9T|4<@5r+^yGWi7^ko;-+!%K8@5ujmxu!R}NOA3{mjl->(nR~yE{64! zU6dio|99zc{oRh<>>}C!>B}x!cr)x`e?P1La{0a4MP9Gp#V)4%;4SGNKf1r{q7F&^ z|K&dPU##1aAslOtUQ>XCseBb{c#ebSvxO5{uR6nw(X*dTZ1N_)OBV_P5~qys`J9LS z2Zsk0(js9q_v*_rhp&L#dI=*9qbne=jbBdg&SeP8czk!W+GVgaN?lm3atSV;(V3>X zI3u*;eA3$DQDT^vh2& zN1cFU@EEOz@lNpaO4?TGR7aS#d&cx!9Y=U3bWxj4z!99(ue8)QJHTx574|;n4&b>< zAZO+r2jKHO!8_);J!DAbd^zE64<@&ylx-K-gO5!35_Kkf$PSz-Aot1+>IWT(zoume z9(VJ0O>DCTs^MCVF@d(wI>_R-!)RN`-JOt_WoHAY>*DV{Y_^7y{BaY`sawODQ^l8t zIaooU-KW&KqpYy+Cf*E+akYfid)J#>onr}mb;3rdO|yho5Il(4+5+Y~rP%RYIu6$x z9Tm;8%%RxR!XsmbIk<@(7Nqze1F4WJr#bwN!N^zYLvl7AgK&G^n#0qNfqBtW@3`@1 zpcH$hD!APg#wd#~b;8hPoz0$29wzYe?(P|;xyEpKzWea99An60=N~Nf!3cE33LlF2 zABCWyD{m<~909-CiJVpTN8nlz-OPXV5g2^>>dQ^%^darbl!L8XD`oZ5ON$hkB7(4{|8dMSC>dv`Lw-dI^Mysmj?2&*h?Kgii=JyaH$p9Gt@OqYT9hNh~tG-=?J5Uw!A zFl>9e+I!dCkjcwtt^aBl46!+>unWVDEo|9icJGA7FD4VFSnU9yNxQZm*xt1skD-qY zePrn4e@7pW37Fr0eaQhlUg_aC3{8pNr zJDeLspP@d<4dxrW8LD4&h9NYa8T42uF#a$~Q{bxua1C4Wb$6y6*l#^ID8JMe%r+M+ z654GIrlzhLM!T#5ip?!{w_AZ|6ATWtw}5Gh0S>QCEWrQd7P>!%jVI05%RV=QPvz`W zb(GB@o^Q4B2n;RbhYemOYYb{%o7EG-VfjAs zF+v?EB&D<~D-0$rd_>W)Bt4gPpok4qWMuSnz2`oBVV=$BB1gJ7| zNXhy+!KNY6tuk~+DB@~dlsdx^IOT+$_b55Qh|7zGqO$Gby2ZX}wfS~Xkv8%`grptt z*PXD|$hU=QhFfM%HL?Z$-CCuqb!;K|NLwsdt_^%WQ8>+&-v;JixIK2~4Qtruef$Jf z-Wr%zJ|C{iX$?HI?AuSrSi>>ScN6@ot>EOg4VAMVWAWUB_c)matf0_?TmSfID;WBj zHAELf*Rvyq4o|RzQ+8=QPXaAqeO7CM5{55ib)w8!ETB51Z2K2(bMV=?@*KC98OU+6 zeo^u?gXtITAD@0^3iH*%mu-+Xf~M!ORa@5?0k`VrAU+HmL*MGw-86)0+*RTG6b(V= z)zplg7*^)ePxG1T!>dulHRY8Ac3)O@ z$$s#E@T}-C|9<#*)jwbuhDD0pJVCVzP&k`6Pk5^W$k|4&$k?I)^3K*rHoTVwi?)#$ zp0mh;U)z>rDHsl3GUEK`GcvHY*48s?zcgs=j;E%i?(T}avh8ozSX-?HUtLF-`rWgI z#pfa3P|_WqzK#a-Ue9g&}`VUUj&z zC%BIBn0cty11=7oucd_HQ0+ZW_KtH0(Z&yNT!*=V&HHss+jyP9e8L{Xxz0}T>YcUP zrd1A5E0A|aTGb9dNWRsKue1T?bz@!GK3aj*R0*!Oc~;OCGDE^_iUpk3jZJBuYyrW| zn)i)jjzempp4;JbAXu<0vOLJV)d!>VD)E^a`~15+)KNEZ zJ&+;VkMs*|2<$%|YFZe+{;B86=Wo}`_s)Yl9IG?hzaXitVXURCsjj3!G=w6G4*n71 z>p};0?W<;u#pQ+WD@ddz<9gZ?nHW6%k8b`OUEICz;osq*rX}L?*CAxs*LXmS$MaKv zBbhUr^5YU9j|cq3r8rFD@sL8>%^b2zdyo5O(pa&uInyn=GJwh#{rp# zTKpESm&o4g5NY?@_<1yXq?4Xgk3z8ol{lf8*|R(cA|3GfsQ?VcZf z%U>`Odq}8%7-}hN>*=Xrd?YFaRl)cBTW{}K$o;IZ@q;%7?>}hY1!!c%%O#H&|1}I~so&3sxAxEZ z|D!zA5`;+5rswYT-{qm!xr09m$sP}c+|N+lM<)Z%*4p)GB)g7&{Q=@#MkOOY!d8Nx zxTT9f7V+95Uggw`(Dkve%aZXcX$0SFPVyP-?B~4nWJ{k8!s^82a$P6anpdZj9hBut z#Rf+Zajz7>d5#|umBV_xn~2}Z{D7z(h_9JW)GM1n)V^$jZ?~$C za=Lk>@hfWx{$hG^8-E88ba#8D*ylzEy?Bspbn491_)j;x?uWNG4mwzQIj=k*_@;A+ z`xgL4u8R@qmJs#mZZFR7TuYp9=;FJ^+uzN*hSv+Vd!W=8@nLqONUp%ToUQdRMfs~; zKs3f5_^$Ha!IM=m!fuuYZy_C8(p&5o@>PIp2NCOwQYcfOe3MJ41a3+;L#rr$T68(xO0hxr*eD) z%w2Vng=KL8MDAA96sjqN^~Lv3N3>u(#F=G5hb2m3pW^yY#=|OLs&Bb?6MH4NHa#hl zTTu<(dOKc6Mb^T#iZRW*;_Kjj_BJbV$rlhg?9B7Q+07t6Yk|$>vkf5fLE*~!%vyLH z5aS=bxf;qQAKJjZyAmEBZ5=aIvI6$GN>fd8OF`TzJ<923F?e4TrypvkflC}^(WaAy zFev=fSFeBqSk9HOkDa*yDq{?FqHgBH;kSZ+y@|{RBN)RnyfPoG?yUC`G%A4ItZ!GH z#`t+JP_kCrt)oFlHKx*vU`bdY`<09msG9Q5z;Hv^fU7UkcpOoGL-q~hQC&9U(lFy2 zAaR3RH8kihs8n#JewE6Ea3(#Ycd^;P!#37!hvQRNnk2YNcX|ONzgK&7{45QYXdaH@ zDk=uOoMQ8}uS&tPB0KzHK{-66@yU*rr^Drhm~m5fR)UH#Thw~XDsbOoFYzR?8ircQ z=3c`1WwnO*HB_n8!RZC!7$t8#m_`)@ynEP)@ns$ty;ji-ZLEveUgZClXH;(VowUG_ zH({pKCm)*+4`5dOM0!|SE=Y`CaV2zqF=Sld5Wila5{9k16||662UFdA*4<`MP@WjQqT2(WC|#x_^35VZ?O~eN^57{CZD4NcLk{Hx8{n~4m2Hc+ft?E`Db3$v1$BN(^uO9I z;c(rW^||jXK_!t-T7H5BET-5+PMdce5;HXlto!xYS5fuc@OO`Qo$`k1}E z{<9G=uC&5PisDc4cB1(30!LER{uaL`x(`CMY^g8&SsqMkR?qns z?iVw7Fwyg6U{48<{o<~89Vy<1;y1r)_KtWk$??5ze!OqvNFBO^>hUXiFkR#S|M6h* zKE?I*M|m&>3-SEO9`$^hjMVQg0kXb|6Ad=X!TSYj|F7o3#N+-$D1O8Z{2t?Phmk&} z5NY}o{CotF&tfcIFO)BWNT-j(&&Lt@SP6bjl#k4}nNH*z^`vKc!bDnz)P5rSe-4n{ zBiFk-e*R;8qRWYvb=%9n`9y{PA)n|QmR$pmPt-4u=w}5u_Vu2?p$N~1#=-ww2VzvH zUnM}cuPFXZBl-`z`LEuOf!o)i6n^3cyiGmroG6i2Y{Ab968QvQ^vowiq>Wzo?8iEU z9w7Tl)(h0m?Bbr~wG(OHGWiDp7}=6@w8wSj#MHarM722ej+VikDo{L81Xkf z^XU+2_cr`IDy}c=YkibDQ2@e!@V+Gw_vOTq%h*{mIS$^vuIA_XL?e-7_=|b-jA%b6 z&%WgSr~KaAduXzL^fkVOl;iSej4yvm&*|CD-o_VU!oH&1zj}Q67wuwXf7-<>{bU#2 zN%BX}fq~zbKyP-DJRj)GF2+?e?Be$&{d@n~n_ZM7=98%P1J^D}KI%`qc)6eKVgyP4 z=s7U(`x5BQE|UG9zU*Rl1H&$UU(&z#uf5qtHNt;JtslU4v2-BX#T1hK(Q{zn_a)Gq zT_nf1`m&1+&lq;``;z{>f9=gKS`hJ3)cS#I7Zpe2J-mP7i&y(;zDOg|uf7->QezJ?LB>AJ~z`*ZI0L87* zdq=ddg!LWX3qpv?`?8C1?F_s4eM$e`zmn}Dm1u4h>HTtl@rjV%XLqmn`FHt5C?9Y= zkRjTS^b0Ml>_jRNbM23(TS~p=qq(eUSv?mdSJ^H=1=*L^vz3$=P;S=E}z6_{C zRI#t|fd32r{HQX0Ij=9A@mwG_4nZuQ47Z7tW?yrPW*PgQty0DKf))X z^A*>txURdPnOoP19tUJT5kEqYk-beJ()2<2iW#(ShW9gmpB{z%Pl8Guhx~GgGK6Rg!oR=1Rqe`;j2HhkJ`ov`{K=0N>1z~o&*wzW_ot&01yBkqHd0v9zJ}K;YZhF@PlI%MA^#_QL0+o#R+oSW}@>JkC5nl(5 z;Lkw39VtW_m6t;7U(P0wMj+bXkMT!z{xuNzEl-GIZT6Is_e}&}No{iQi}Uw4FRdif zMO{25v+cQyvfkZI#>+Ts%JNp}TT1yf(WfX8EQVJkPf+WT`I!zQqdDC#@(0=jm;Hk6O#2 z!Y=78iwzx?Za8>RH>DEe4R?5SZf-S>D1Z*OnW4yXgs+4&a-1vG&5+;MA` zPks)cZ(R_#)op^0EhS-}1?s^s%g;+mwFVRmYd5`KSq0TPZhtGPXey1o1R{Gz6bWaYGDtBAHlq$`Niz2IpB6=zrcyB zd2skxgvLl_8cgI9D^1fYfy=c#Q|pIRfUC%{x4FudFr_jw&R@A2+Dp{uRod6Ww!Lwe z?iAF++_6Dcq3C& z7qb_q9{Zm?)(8?=Z>JpJ-2~G2RA%g#ZH9B}IFg+Aw?N2>@p1B6&)}Zq>kq=mpTl_S z%BEexWc{U3{_FKiQn*+8;Ghg#RF_)n?y3gtoLrx)Z|H*6{p{jFW=Fu1<(9b7WfM@~ zJDz`*#S$hiW#Tu;vIc(h!;w~Xwy^V>(ABBzj=;iF;5mG`GaStnoxNSp6{-YNR~b;< z;NTr`Pw!}V;FSNuXL`#6ENingSJ`6x?Q_@?oUeO9U8wRsqdM$+v0SNPLEsA(4}H91 zrul-8SY-L|HXk@KesE&p=-1nX|Rh7pZ8b@Z)%%6BcT&8(hW0n`pTXn`KDaZ@9aE4#5u=9dv zVTBJ}=$;tgO4T8abWe!>((pwd!*EUMwJT{@eU*G4M$33$_WVhVD26+e9NLfHa);^9 zn@`VP?gokHm9Bg|<^s}e3egKO{Ca4T$h7;;pg32eUh=#HywRugCwe#l%RBi(Ck%DR ze|lyy-468h52QKLY$2pPE7lT2o-(yVJ15(~{X9FFrAgR#W$#$5zC^bIKJjVyWSp$v z&A9Uc@ky4Db;oUUrjR9k@UJ)Ce#ipu(=V$XV?Pe(SAI}c6EFv0-anL?%?!L8+>>^X zG=pZ%T~jl!o5FLdm}bIwV_=n8RXma17`E?e}-GzQb*m9brnF3++}-09f3# z3ck)33Z3Cb48`1qI0vhqfoh{ShEH_PLiiBRCcbND!F`nY5-tp#B%c5AAK-{-x{*`w4G+(Zn|aRO8)Rp0%jaC^ z4ZC+fqTXrn0?CW-nM}@mfiHF4mB>Y2aH+oh3{SZy(5Qi*YfgE>4d&$=FD&;2o=ujD zjfEZ%Gv;;Ow$mQ)rS9>EcP`j>0QZd9>c`^&R;TXW6O42RzNWz=WcIiNT~yacDbWpR zW8$(~Q(YnVcF2_CY!}E|q8DgHb%A*mB9Ehx9d{@#lOD=en z6X+SVo}bL@1ovMGuI#-QfU)_d6}sN`aA50h?F~Hkz;bVzul{8_*syEs zjl@fKU|nO7RwftG;aj0TH_wp=;yq?!juH!d@IrZhtYy3^YdAZ@JMHr4e=#{3eqf72X3F?F@dG(@MOc5{pa-6A%4Yuo$Pp3I27@^Krm7jmXyam zOS`BFGI#DT+O_HcEXZ1H`>{nC>INr1NWyTn$=>P_qxZx5W9HJf$CbcZC1Z~ohI=?} zt{M4N0TO*>CtTE#hn2?H6ptO)*A+iv=m|ql7<$sTp5#2gw@Y%k4usmCiii)gfH(C| zN6VeHhl16930Ge`gVg!)Z7<^7;p^zr!OijRu-H3o({_5p4QZ3~7ua`L zEdoyEM#y==?hU@R5*ViwyK;RT{4k16>ZJRrEmei#2r50E&$gzbxn2kfs5@iyJy z3Kyf+C|p110{n(if#Dbm+)Qp>}58O9`h{qd*&6AB_tFyzfysGgsXS;;lW;R{w2lucUw>GQ(fILpXrEu z7`pv@UUyNDUpEh&E+uNIeDM2u`bE*` z1s$J=i*!+j zUHrbJfA3#=vx`Q=`Y6=;fom7}*Yu}djOnL%Q8r2b=s7U($0We;gBgA>!w>G;4`%2I zLr)lb(zl*4;zj?Rcu}2`+E2%e$m{w0@{8KHGW?<+n`!-?xq9=9+==}lsMQ14FOpo} zpMFtlKlw!sB>AJ~z`*ZI0Igd?`;O3lU&;==7laU(_hlEOb~5bZ_a*&%|4O!tRHC^N zr2S?6#d}TO&(^))_uu8cZr_FLfeg`pq+f^-p#ONU#orD@-fPL-xV)GMc^MIDKk1(K zB!sX>M7BR3y7xW)JG|FaS^RnE5R&g}JfQBu^Hcx$C-r9vfIJ@X6Jm%X^cqR!_u;+v zdx8^7Qc=@7@!S2%|BUxqZ7;4@ab0&oGqho0Y`fC?cH#`9_U1gjn+kanS+sN8{Ij%V$lTPd?t6u_4*ClbE_DIWu&9 z?Ca0;uKT5CbezcVy6@53r}^fWr6r3<`|IU%st~cp$A!7Ho)qBce#i8o|~;no7+YolHeD9Q&L>m$Gr|5VN&qAKUL}OJ zORStW`0NNlQvvYpl@>k6s{eEsqMivFYLj`}l&;?tJ4=03{}ST}-i-HqHd zcqSP!Xyd{saJ+n1*d1CP4F90ombbnbo-L8rx%ILFUTW^v^!!i-n(Z?O)y=Mhc#W}K zWv3f~_bC6><KQ`;tEr@Q9;N#890KMz}@6&X0q3)2Ob#y`jj8Xi&ZuszG zu*|e0R;T&k4h#t!d+U> z#mXK~^Xv)k4no#M`uq2mb5_vQ?}mF5NlOhUtWUbzFefAfbK4?W>%bv{-7t``)I z3#Ti)d4uMlj4O|4`9PB@Cv(vfjMrMXP5-K}53IlaKbaB28;%@W73 zNTs#>xv&>3n;s@_o8<`+P8Z&c!SJ-?5-a*bPl%VWla{1G!@6PVIUhH< z!-B*5mxq?Q!B{2HT8YyqU}0OcwypgMkkx0~wFW~mRxSSU#SYN)DKuemialHnT77O7 zhEBA%>nCrug?R~)Y(s8hJl9XsYdNP`gZC8^?Y9T4KqYA3Si@PCkS?@p)%9QtkTMlY z+cMY!o`=oN5PN72qLZ)QJ2J`~^CB+y* zWSJVmZWzP0rVH{LG2|$A%vgT@D9kJqmL78OD9GmoUwWW=6jWymh}L--0{{9oUPeO< zL3OUHk1U4EbX)B+j_boa%Yad{Zs|ectnvGWujqD;Q$yw*==D83ZUI{1SMy%~MVOYE z1pZffuVpmx`Bf`XPuve?@Lm(*U;s%1WIwpet0MXl%8uf1ziPIQcy!6}yly_+Z{tQC z4hE{nFXX+Z*l_Rp|HgaGs*6kfM|rQQhIoEq^k5kHM@fLJui`}Oqjb77xARPY@m}j_ z;rDST?$;gX{W0Ea^qsA4J^z;Xy5ozONYDAT=4c5C&cePeA>8#Hiw<7;?FvVfGz?WJ zeeuzE2*ajOdcg5sJLutZjxfNnuXwi6Q9K|1zq1Q4{{2A`Aln5LCru~%4-&<%UN=bQ zy=L{pdmz$ZK_V>~fS(s6DnbqKnNOTZtDVQs_Z@tPxxZbe2PTc;u3xy$-OV^YaNdgQ2@ff z&wHI>gx8D}g@8LtCdX^L?d{L;Uia6&G_@l?C(pj*{ipq&mozf#y|WSIG`HN0yX^@Q z%F9M`8wJ7&dcuA&3}4#~Uf!m73O?F@+CudYfdevOY*EufLE6>4RgdB5 z(B;i87=~8X-Q1TL0>d4j3qL#_0?G+lu9{{cU{?`UdEPh#jtMS5XpNT=Ct|$UHTNy% zarnd9OOtpmo%Msf#5XJ%3;iJeoT%!-oRe_1P1Wgz$w^q57IWv*ypvE;<1$I(f-l5A zKU5XH&KDlPT=#<3?gMu;w>)*X^MOXAyla=o_&|DlSWe4RZ>VU?C{s@HhH(eDGo(el zAs|P~=nxkF*?%;1(gZaxD0`?melEt3z2UWi#>kzXz+rNcX~%UB&_283pqr=%eD(8o zsyONntfN0&Tg~PUTJ4iOf_AyVpe$3NtlO>-jzuzNM7u%-(|gV8i!P8X`C)Q`yE81m zqq`t4{{$T8);O&qegcM`kFI-??F4>q<=aMM=yhY<&7&SpaAtl%z+M9<@RZofb1K9U zbi>};sM$C|tJ=ZTJs6HyH2kl`!wwKo6cl!~z#c^A*2GT1khz-AJdw*DZt7k)YA&&b zA=%d4nvFIvzRGEPdxH&(&Cx3HHn)K$ams@wd#zxylhe)d+pK^dbF8vm!V03Av}2O( zEFk5Gp1H1=1yt7OG#$cl!%QY>+3jO+S99aIK{PY4EWZ?f&eQ~EE(m7gmobJx+3TWb z?KlcGp({RL3^4@h(NE>v=NrIc-Faukw(G%(CG&&sIO;;gqA)96Hf{K8E3d@nk=n4^ zZuJ*kV=dU3Qu{d3>ku4{pSO31`5{=Pw`1|+V~4=@i8#+i%Y*Qup0noQ)PulwIL3^M z;RxI7!fhW9KuhlRk4ef0AmY=c=F=FyIH$+)C3`;@WIer*GI&1(?0a*d>6s$&euF|` z=mA3y7m}Uz!C;{^&U{@cRrn_0|S3d0t`Qy;U_cvWJbJ*5jSPTO*=*mM!e|Hju(;NfA-}UrT8-Z zq92=S{hqmc^NVDN_vfh91J^HVcNvI&Q4~r3=s7U(`x59aUPNBs(wAMN1v2d7_a*&% z|Js{f)FIYKq1F#vyGRY{PrG=tpW;R7B>AJ~z`!4q03%++h!-*9MT~e6BVNRa7j=vn zjCj$X9WNrU=kLoeYK>s{ML#yv`aN^?<`+2-`$15v2d-blAJU(G(Y=21i|8czqvycD z?@Iu!TSNPf5dTp-u`eiuxV$gB7;%MR7r!s*-}_gxU8EAt4I%9>>o4AG@_x4N{l5P$ z?{(`{Tn}W3_9Oj58-@Fi_d0#%kj{JJ_a|;o`F6it@4TzSv5V0DMM-T9V=Zk>btMf{ zk|;X(M~Lsk97I9;A;qKc`l9>l5NY@5p7zA=a?f`Cqe}b+7kBS_{C9Y-d1G<;>kzW* zYdqk+j_0TT2C`-};pZhl9uN45BBBVrMkW3}yw?$&9efZJ3bpe;`u8*TcLa73vV*&n z_8V#_8K@i(TGv?=nwKfw!1XE)-GG8-Ze1sO9FTdh9SA)}_lY9X*>QNe_quWi62G4hJ-NdMzZVZ*B|u7dtFQLO4A5LHJ}kZ z2@M1y{#;aE3z5Hpz#4+znx5Rozt8Q?TN=Tuos%rZJ~uk(#e-y{Q)i~ef4WKJr%)V} zvI+wT~t&6`J=hv%l*k#Zl@|iYqI(E=lPZJ z`uOMjE~8sOLgbp?l;Mrg#(hs|(#|?)`D@t}o0e)&H-Tvjsw!c`{oI_yHFOw!+T^PV zy$qDjZl6*7p#&!G<-3xmR}8+@30bq(7D4J$zGbPJG^n%QCF=gF5F$# z`=>_IpiyDz=rf@-_+Z>#c+#T?n9d)4X$#VpQ*zR?kg*YExFCiyNl=$ zxWH25?B;<}PoxPrqUVG3fI^WUQaD3_FBRUc;AH-gmIF0|>;l&Wl|lZ76%VhCs)fZ; zmu5$KG!y-``??eSO9N>x39yB|k!j_`hY+-C%g8Z>Iq>S7#u>VP0r+2L(F@pC3~$(c zKhBFS13Q~#*d=tF|JJM$g!B?c)ZU@ua$daZ7?>1z!Z~hL1s@GUJ}@2+ttM)mP>Iva!43{2{YI1oZX&A%{I`rQ`=ckl%eNyDiuc5~@|l z&DrY*n|8$q*u6RlE^ZTPyPQr!SSHVj(c4bK`F5Aa1`&+!NPM34-cVmiNhx=#zw+g7Hz`5?=U9(HkV{Sm>_;yx?e*-VDQWUa%@%`n>ikPuOfPB|7Ax z2gnArx3$W7K(PGb`l^v0P<>p4c{qy)aPc{)EVOrr^~tTXY`(a`H117~IYMrbf62F@ z$=4MoJ(BtGa*Qj;)$H>ek0JNjCwJ+OT;TZL@sy>PTwu$>vgWYc&hTvKI+65HXP7Qx z@h}!cXYQ42O{`A92G{mgO^r@4@3sy_5ktj^qYL-Wb%KMRUXQ!`!U2qhnWyaeU=N$M ziZ55bw+ArW7C6(z9@Z+C-sKF$c&nRDj5R!L!G6>1!c`cmFOK$mxZN5&ie?PH_}&W2 zZm7)+#qjVr%d=(UEWt2;OnS7X1~%dzy%yQB z|Bwy@jmR~;Ag2R*ahVR=FnnpcFW^Fy1{_{K`5w=74X_srEQp?_0X8%BP0Yus!)DVv zUT!PZK-17RMg_w*XGam0zf>XQi>Ziu^8vUoG{j3lN4e8}nCQ!`?yy7I9QvI|p&)yL zL4vNyy^>b#EpkBP$48OuR_3z}a^rsH>QB`(1IUQ( zE&;M1jQ1W2rJWRC!+S4<@~dX+i1(Tt&+F#H{WfmYU%b~}*UA2WsN zCGQzUDPXtG^Ev&Iyn{~+P~>UD!;-fPNhya%HB z0zZ)!e~X_NBr3w&-ZP&lkyiYGpU3}GC^Cc|pz_Fif!Z1Ov}bvAB26j4&!c&AHoa%Q zb|TGNji09y^=qi@nQv4bo)&Dt5skls%)>gbK=qR$(ndq^^F(odLSO56yq`Oukpp95SKsWDfAHU zACu^9e4!Hd6$#>3k1zk8UCgHSr(I0wvbJdCKoa{o#K&7EBDRFRy(P*2=SpMbX2j1K z@$=t3e%_(wjDF7O=YK*!XY9BAGxpnJCM{&>Jl)kDwyl@Iz5m{uUqp@v^yL?Y z)G+*_j%V zUHrbJfA3#=vx|~M{2aA@;Mzq>^FXwV5hVGe=fJ=plK{hyX86&6f*;N3=Zt>-C-ign z1Gg5{vK@qRNlJz(R>vXC#OCwnQMOPX8=iJR@dRi@l&`28;|}A#avkv4;10)DjSMfd z^#Ju6MWa6(5V0D0rNek9k#?!r}aSM;b0F?nCm`x>N8hJhRcbid9Ltk zS;%sC3|EbhFbiTo0fE$qf;@IkAoBD{+As`jqLgl!^d^?DFWV?#{q7BRw zTxcugYYn+7rmHx)tzgB%vU?rt$3K>=d`F#c0cFOMg7hbt!{W=1e+hCQ18%e74SANP zAZM0wU=xO0OZGYNh?v3{m#@lJ|%6lSZW2kbd{ z6eOyOhE2gx)zaZmcC#TIop?X)thpg52yWec0z;<_%x^z0Gk_VwZ!K$r^kFvV-J6j& z^w7SNWPH@_S`SW2qkSvAAsX}1_5XLeBfiv|UqoKt(wAS9-Nx{Xkd*&K?9DGyBi2VD znG9UNsNq?E`bCNT6fa64$sauj27X@xz1cs!5^N?a7(d@@P|QOD!Hvk{Xy`MzW%%S_Sn z{%|7Ut6WiyAIKR=#XrmPgHOtv;uoj;!KD>3QH{&|VDy>E4t_UJ!qeb9w?(^8!o#*K ztVCZBFJI;zD&PxuUR@S^f5Zpg#cRKKU+WEC%jv5Eo3MDmn28_$Qt^V2)qECDOFhBA z`e^0UYD0k zwK>D)z%#?g?{fyxIfrk7CguaafFS7 zKqq#wBh*g+>XmG24@0JTK1tWNhmitM9g1P@$NE}(Gg~lyeOmtZd|S96KYV*EhCyou z#b~D1pxNpZS^L5Y91gK9odZ`X5$D#6rM22?jVct_mRJK7yM<-hQm-tqv;+APggww~ZRhb_VRx);=iD&I4z z^M+wusbN9j3l*rhBw^zo-|dJ#~T_)X3@-_ctKpId0AtY7tC9A z#wRJr3$}2EU#_t8f@fic4_)YMIOU&P3g5OX;^)gd>=;3ctFLr zCo!TJ?o4uMKYq&{rax~!J$tzuB%W8g^6{7pNV6$KFU0Wcp-Cds?mL6xT#0(g^A7Mv zpU$7?;Q%b}OYy|~ZES;Lt- z7OOAOt$Rd_a7XC1l-k+ngz62_O9Hjkh1Nfcx~zYRA}*!}*mTRMiB` z0hsp>Wo9!2F9-Le-6PGQS##Ia%qV*1dRUlcM7-$#Vc9e-@j!N~RdNPz4Y zQHiGck@lDM7wH-+!0)x?wo32Qozak$xdU)BfYV&K{7w*PGZ|M8PzjL71Ad|%5rkf& zX8k_A*G2?mBo#HS6TjWB-1~P2euVd0W)!Yhab0&oGq6O&AcJgi*;~CIRyJfvj8uVW-fI1}^V)#DL_z7UlfDT}S%r$Nl|$==uFA z_@lhnqJ%&Y?{#ZR zZcJ9J&7M;7zKU2cMeE|J#;=Hie51x0Lacd2Jc~~7QP&aamaaG#o*&(>CHX1FW-YU< zAvrU2eeCPcHN^cYlT$PPAA8pU*VN9%ixU+UH}1N5;=uL9d2r*#jS~=5Km}xI86rcb zf@LT;!S%$=Qy&5jaDxL8S+XpuI=snSk`n#@F+3egUG}Zb0Sztt)y|-tQJT!ystSs$_5|eHOB; zBn8IaZ2B?J6+K9gN0Rsf>HiEygj%%Gx>x_ey!qB=p6Z3eqJIu@WrjY7x35mk z+PU%txKACJcO;ers*Uq|3~ZDIoC0Rph^}04ebD}1s{#3t=dk|ST)9`cAMxwmWB68P z$eL@=Pw%wzpfBN2Y}h`q-~A}iXqW2RYefvW`KW$)zBeAuFx8DFZchZuLxa>)JEp*m zMCa)Zro05zsG0k;yg4v^^uu-=?bBdZ(BSU>=%vHrEnCg+&dh+}M|4{}8JG!uM~rIa z-8>5x-D!Pk;cFi6ciO2wob$Z?J)GNL-7p89X8CD6pU8!gbAm@l*yX~V*BLk6vhqOb zz?~ouqXN*%F-^I-s}Q;eOdQ;A6}A5}7sXWKwSru_*@YszDDA2wKZEOyw}ut9-j}la@6=+RK{YD%+-bom}^X#F|q|?7 z=uhnMyGeq3)OPdZ<<;X4pNJLX<7GAY!-xMIe|UTUl@iAv9`*w4_BTqh;uqP?X&>pE8>QzEfy?ijnjTh1^w6u z_XC2P)P6zqEFCIXA5#&fm4_oq-jm2q5G<#J(`tb7nYexOlLgDE;a5)BQSy;u1ld`I*ac}-Unws&4U$3Z@SV)xS|NlCb zC)aOq&FuOAYps8|!p`?m`-iCUC42<3KRv$GKOZX7SlIZYf$^1CrMAbHUx$mbqr{1e zp<=?tAd3CTbD(AQEI^-oqR%}^^0_D4e`)`fWdG$@?;c+`Qv-s#xHes2t_6z|ilhC` z*urj;%U?$va)tbtYIpTdxk1B4N-C!rdtmU|5nV%Pv*D(Ve$2(ryz`giCohPIbcgjO zv0LA6_5hnz(~56?^nj$td%yd<=ABo4Abaz>zZXQ?f1TnxlK1<VR}P{*Cr=7ckqUf-POX!weSY1j{6=tHS`8n;=Y8Ol6^4Q zVoUI#f_>0=ZDHKgSNq_y&QsqGhxUPVkk{X*Wq7}1JoSJzD{L>Yt#%l{H3Q#89QS}U zTQ0K;PbONnb!)Bb0ZXskXwr6`2b3^uQ^TBj`l{xRw$gWp=Z9Uw^?9;=A=h!BIvZGD z^i&5O*#mLAGJ?h)-UEuhuSQxgc7qAI3R%*;bEGM=FE%xbaRKSHk#8P9cY&*%&(Hc# zaDma%yVaDMI>Ls(KPz1Q-~dH$$2Rok$w6VoYdvq=d;Vrr1VjHFezy@5aOr-nG~cw(qz5yeixlE`IR;>sFWzSi1D+vtQZk zx~O_Ht-4uC*t&>?<4Hto$z2ykjTYy+=%$#~MNt&{ljlIosx2T47pd`2QMgz-jmE{Q zEnT;-3d2P{TBJsT+k@R|- zUT;hCdi$#BKTYAmCYqHY^?q54~ zaJjt?%$+*rb#DhBSktOUml&Ru*^nF6+{p)C1)pm2o+k@s0_{&a`#`7558qsL@qtBA zXPaHyfI)?gRgPu->w4jt|JsUy$tf#Ty>l56)W<<_+^g99-5>LKqj&s0OCgXAkB>#jPvQL@+0>IyJN{9!2b`LxOl-xIR_)r_ z2K97uK{u|%#kCD0L4hRii-9^eRxSLF)}E;_>XFYUQ|lpSD8AKyQR$T+}l%VX99 zc=AR@aVyU4oiJg2ABullITw(Lc$)b+W&R z@JK0YqxqB{o=k{Z7jf3n>!Kf-ch!~eP}fCFtXKl&e3`iT!>Q-l_~(6pEq}QD2GkGK zu>Pcfm2cwX<%y3!JV7G)!>zHs$hk>>oDSC&#FHqDN7$_OUhvO7{u=&p)y?R67-Gwd z8V^)AqVmjo|D@`t0jT4FJT?Ot_iJL6y2BqHUM)UY{24u3gWG@9!d*T_OApJe-5`qhJ%nDv9_g>HOi; zakVNx6bFAe)z3tYAM7p2e+X}aL^uiE$Xc@ib^IXfQ+bS2h^qgI zMB_&T%+1DNSX1mzZ4~LR2}X4b|EYS`G+kZ(@F}=r!XM60|0sVr*BCtsm1^;ab1hJ5 zPKAQ16`yMV1L46YH4~m+K7Tm6k{PPt*zrYVNm3|EM`0O&Wmt`Q#1VgZ0p<_qV*cHj*P2Bc_d;2Rj`a!tay2w{i;G+4+dZL9TC0<% zH}tRI6Tj(OMkIb8aJwtoiTJ}`RPc!xow`4Jv@@SioJVRN!^*8bpLpHUhww@BrNd!4 zl_mxpu-VyZ1gljVG<|*6=%`T|bncMS)9X+gq<!pc?r`xEWe*NAO%+JTin(vG7&zW z-~A<^{R=oBWP5eNg?K2id$!>6xj1lC8n%PeI1bMD*cIO5ZY=B^vFIPAo3XHFj@!O9 zA7Y{XM|kGo8V6n6?KbzE8xP(wp@~iRB!Jtc7X`8pJgdmN6AI60w!_nOu-{+r7h0NsUj$e4~ za4Ayhxj`-s(!Q*{CQ+d4h)^ZLT!medP1NANA z&YsBv(`|65bXGXoNeIy@YmsPSTbW@);yk^)MUJQ z%NCxXob-edJHs806gV!HpWqJjeE)3uZM-|IP4n}znBfLz0w$|p`O6jLO#=>|i{1N~Qbp-d}H6deiz=x&v6~bfIP0ZOp%cVFdtr>q%WQ+*QTx7h;mP3kA)!iPrf`x`x~;3RDSSwt z*`_H^_KDoE-&E5CwmxeWa`BEaJXq0D{?A0CvT@G3&oSLeW&N~_Cmi)x(ogxaw)w+b zqZ={)!18zH4|l?Gks{nqv<{~E!?8JNL9qaJ9ZY!b6e;mF5`U|$**f8wpvLp~e7Ke4 zmtx`%w|;k2{XgRmSF%Ivq3ZI7t2(0cN|fhFC+mj=sQpz1tIe@RenG5I+x+3Azxr9D z`-I{9@#DPJrh0@uj|aj-Z~x#uqh=ucUNsk1xLt7o*mQ6BqAPpe-3Wh{b9qslNvhK(T+#YOBAc zh2bJ~J|GGg6Fg~LtiN6){PzG1@qCilMsjhHxmTRHcw0=k7*4T2c@DI!o(1UhWb}Em z-|;*d@m|_LY5%1ClRhs_pBJzBdGRq^jq-gHk)dnL<=srZa#^;YLfE>98vhivE-Lb) z*F|Kks*h4wyvPa1&xuVWcU=_bEs5(Q4#ocDInc6d3kbtS>iaEGxG4P>jf+)Vx^7<; zhKqjq{V361a&b}PfH-mSu9)IQr4;*<=RnJbodj_?d*q@d)vj82Zq~nyobDWa?9SQn(B>s!vksv5a`ycIp z|B?S$v%YIq#J!O}^3M5KbMcH32F5XM(es=zOpI^&+$qYgLKn?3p`j_~5FN4}4ViUog&z1Mf zD>54K+9t)Qd~UIMc|K~ms=+2ReS^)qnwzj93}y1+rzGLgA?G1j*j`e&RzI8$yDo?) z;TVs8>gILm%fFiUQY8#M4?}E2QR9KiO;ny)hip!(Qhf_h#{+r%RSxdgq^7#VdnrA! zX}MBNqFTAE3I0}x_mUlo`c+WHUC7L>B17NDX^d#h}#e2z#M5Q?u3aVCos{Iebc`wnuxR_^>gC*g+ zBrS=;G#wnwADIn^PqGl_SH#IetIG@NDc5LetHIUhxkN1q02s9c|4uR@7Mi! zT5uXA87>^$IDu=AJwJ_9Zl#s2Zfx zHU(a(s4k1nN`&ZV8qHRWegP9&%Jtoz7!RF>oDJyAi38^&uNzoTjDwQ3sry4qV<95I zW%TgYaWLciqknX4;vimeN`^Bt9$X4iv$mJS!|?CigCkqMfOVOUCzI6@;g#z~*M*Cc zA;jak>-vMKFsxI9hef#@Fmz{1sYIv4KyS-qM@MBspN}VBcspjp$P4;sTd&BebNY}T zjU@2{(tmj|?3tfqqdo3`QqDe^z!}fs%eN=H+NmdlPWtWs@n-2TUrFQ33zKZPzL0al zzil3T=`z#S(7pg}-Lh-ZqeW%j$5_|TJM=yTLCicmwSugBFn77P_K=V#(7I9EHIFr- zA)xutZd$gnpjPU8wC~IW_^w!*x8Exf3g>RH9ltLb7F?W_u$jk0I%~7fGVOsJh_!w4 zI*SdU71k`qhrRX zzL{C~^=YMjePmY44bb(5rfHb%4me@H^XqI`dq@pDc~@Iw7i{uR9hc4fUB0g0J7~Ml zV8ix_GAC2)-9dM;lyRdZ4|scv@n!fSPq==r<;1l^yr464(9JKWy&x{6$G%Qyyg(&z z`tGB4i99z)2d;SD3==bo()U0=& zaLvm)*n=nk9vsm-!p;-6%)aaq{Fevpo3d+D&S!TR>fU#w4Nn>tXWL*nVQiGdp33;t2a;`|KckoyElV9c^LUh?ILNU2WiV(u5M`P-{pr>v`C?yA_N& z@7!9k<96t1*_<0=V*#rzA8OCy$+=0ZoH~uSfOf9m=R_VbgMiLw*@ryM;MkSH4)b}k zWWuy?JuIjgwwfzA0?$aX;v|l_{tz&YiuBCtYSVe*bk0 z@Am<^>n&=uJgSBA-{%rf_ok>BwGirB?|{vYe4w{m&w0odM&$^86F;D3{jdNP7sx17g#CwD zp|;NrPs;Tb<`1?Ov@i>a5874YL>x^{_HfgKtYO{FdWqCk@utvG;>ty>8 zLtN+5*h#3>QZlT_YIe~SHUR$KioEesc_^8rz~7?n-qV*T|Z;k=hRcs@yNBe}S! zb059f7teh0zL;<^jADQC9B5g!1%%-ub^Rj>7rFT~E>>;nx_wpHe9;=OpNaO8i;L11 z#W`OT7cM4H>`$HpEvvSGFkGa@w?yG0;|-0ARa?4lUloRnJ~%!~w3l35boyJIxEL;` z`C<{p{^U8(vT6$m!$oR5UlcCNeV}o%YD?GctHN+G0KX3++Dk4jYLti*7vsc)i_-5= ztBL(-Su+dJye>4a%YVe{QtqfX)bAxf*q{bybeE21yXioy_8q=v{IdmY??)vzu-pnZ zO|Gl3&YOdJmmRUko7g~)(Ngjzk#-<&wehTNwmmHRd)UQ3t(>7rlQ@s&V|T;0N6HEd zjNBky@zz8W<{sE^TgAic5*ymD`PRkax;xlpMQ)yG?*VRuT88Yt;tAPDweGR9y`Wi# zTPF^~KCq71>v_5FKG-|`Y-;lldtukm39Tlj?1ch295ms^UeLZ{Gq}OYy-;i$((1#p zz2KJ8^4h{Fdm-H~vj4MWFR%~4sBE~&3+{XM?6ba;7v#!BCRjc7grG-ODY=oJFl6Gf zy*Cbf!kqRe&%bo=gu)Z?5w08$ke!pRw<+8ME`8&ETf>tlH!qtqA%WLk&3zG<)ZF3a z{HK?dd2-PWr_vqQ+0gG*zOTaAJ#g)m=7rDOU13>E^-Cjo^1EKo@qO>_293eD){55wcXi~B!-i0T(bo)|h-OmAxjJ5ANC)k5uYGj}dPj*Vt(OcAOC)|&5P#b;2 z4vyWno^+053td$D-cxh2g?C*~9SFW*1Ch7)%ziY?20rc2F zTCX$E3ZU`Yrj1)#f~OPv#u6Dz$ltuU&!a0A@QOKob4WKckXDyElF-+fgEZ)2Y?0atN*mRyDKJUa}(EddGQ*HXw_JLM6i_bZM`&*+`fg5+jK;Os7 zPkFNOig$xc-m>BE=jQhP8@q$I?V7m>tJ&~ZJ5GPyo_k=Z*&b8fGrOTtf?`#5*q`!vC3O*-lx%!r_ zF7MSmY#73O#ZUhz?^Qw@^dwXfEhny@Ixit{pM=h+G^gSLk&|2%8MXL9IPVqW5h)A} zFw$`^w9F5EbaYx^@mFrB-gOfml~Z;o;)zNRMUCNvqVg|7%h*Rwzljdzkyl+h{Q5yC z>(H@2!C$W8atwx(*6QTx4TIp!o9MY~Wy34@sZc!$6}(jFKIxc8D+|Y!xrpAXK|U_` z3g;7ko+7dHYoT_ARkR=Rd_BYM5zVi~Ghz%YHyiV`+T?g|Ymos5R^ETR$R-0`UkXtid@loZ9H#Wsj>~|KS0p{+RUfMLL{&eW^oU&ve+=!AvD*cp5w&T_F9YEeHJlKkbclOo1*J zbjK)cPlSHwhL`%u!~=7-xp6yo3@}`yPwtpm2ru?YZTMq<- z-xZt2@$hcV#*_EQ#zC7|r}r*;91F=VYCZJ=W5I5_eaAk@v2Z14_^4)U;vk{hu)Ckf z#Y0nzc2kUoCqS1uI-`BnU%>Z^V~tLXNP<@vdz74CngT6azwf9g&w;I%-``&JEe+;2 zaGBwwmH|@@=A3D>Hw&8WH(=Gs0{K_K(%cyMb|DoH7>t2O8(-q) z1jE%=*{53t--nS6XKTmCMS|(u1pC-l&%r0_=*hHMaggV*N;L_jWCA9nYd9u|x4)pCeLFT+$8g$#-!v3aSI%w%hu_NR%KsI938CG}( z40FW)9}zS=iDG ztGx1H|K#144S76wd8KBDd#o#jeA^ax+!xe+eIic3+&(lPtBooY$4l6lheA?1~z6-o)%qV1M9AJS+=ITHH>07ob5Yg z2V8sT_xaV}9gw5ty8eW^B@EXvJe-+r4n03djm`PWsu(Y27;2cuMw%DDlw%mIUvIq5 z#JKW#Z5$^rP7pJBo??f|x;EyjScV=sp4Xe*8FZ^?0u);Rf>ic{O;iM*SS`)z$zFiQ~QU?~Uvn z-WN$x@ob*~s2ss>;s>;>9~PkE0*RAyvHuV&)b_anD({uN67s`}`2tQGjz#&3xFO2Z z1k35*w9^bhKeopGfYe9r7er5vykLFOf1tFy0+J-YUpiQ@9CHXtD=Q+&#O;$EAy`fc zr`1NGd@}y3%@QnUjnjT}P(HD{C@E?m&n#R4kw3nVC!qm)kE~j8QlhMCYP^=e|D$HS zR}U*{B^DB;`TxI8<#%!FUo(6D|61!`uCQ}y)czrAd`#v`_0NaOG!{0#s9=00 zR;lgr<=5e&h79s;@!;YUG2x;g#s1_u(6VX^2*X9{d_WW~h7Y50v1&`#?W@9YQ3KB> ziT09`$HpEvvSGFkGare?;LT=T90JtG0CAzA6kCS$O?Sw3l35 zRQw`|xEMvTKY0$ctl9#?a8Z>K-x7t3rQ>K^tlH9b`>HTpWaIcK(Ozn+q5e*+(qC#fHtJ)2ID;n+>lQ&b=|{y*tdC z`P$0)PfwWq@XwYhyx%(=oIEY@CQrWD7dmTMJ11WYf&RWx>jJejGFCf9-~MQ?+gI?ZxrZ zZH=};ORbAhqj^$&`=s;U9ZjLre1+G2BTZn?%*eiNd9wA$G47jVjG^V}UCBMQjX|mD zIn%c1(C?6zjS#eb#cSUoLx!)|=B5ipp6S|N53J$BDK!nJr*@F$G2QG$gahcT){M~S z$$|sHOJ-egfJoL}FOYVC`D2{_2`sgTs17Sjrtzd)(`K2yjO^gNj($e3Zgz0}joG!d zu6B@g!1A%)5F0o&&vA*fpEbbFWF>u`966-dE!&M&aPZwXnbpOX&@})38KY0;75i+3 zt&6Dd^F^(TWM|UrqUz1G>Sifn>mq-=AB1Qvx$7b}h;v<(ET(l4Lj|>(*q@fwvjBN- zP4*p;^N(_Kkv;uzHKK4ad>)O9)w6irEJejdCRQ_yvcF7RyjRryZ2bMczn1q(Ru%OF zHLO4BU*hMz3YSRUD;;bvvTu@&(*X+w@gxZ2QQho4HP?#2@A230UMVd_&%+QmRn&N( zv>26V)?79E8+E_})bT(b>lB6iHBqtd@Ls7@i^qgNE>%7^Rvq3e>m{gP1rY;c9>t0z z-i1I>t}8lVi~PouD5DyM(c z&!SeLCs8Uu8A0_k8HQ?&cqmBwh$PRGq`Tn^5>JZKMy+6xg5^>;?-eRmfO(|2nD;6Z z^IN5b-g;O@gq0GC$|Z!3dpY0LTR%E-USoFg?g0q)LxUnj)};MHYRNNSrnxTyC%xW~0P&~}{MLFGU^I4Nv+y*n@gGVTw~ z&S{bemRiybw+YFh@NlK}n`fyoc+DUg_jYLzvE`IWz_)aGt+vV2rAa2#6+Mujk^jka z;`1!Q=)yf+-&}{0lNIG{H6Ox9?Q7qpEk@qycAa_a`Gpro+O)oXsU2GN8Y~1AU9v8PIyRU;EeL znGo7Y)zR2D3!JXLelp!G8V*Vsw;Z5(!M@2tK|mhdPCDR%ytKyFyHxg zwyZs*2A;gDt+5L>`KOM{ZpVhM-#ci#&tSv$i83cs?A<|kv6OKm-h2DEw-{fBAM%9j z=UPr&%X_cinK|g@m(yMl7t&*2r!!ul5;%SO_e)-|sHbj0@2g&*vmjhcIo1oF3^^ZW z@W2Z`@9%VZ15b`E=-fSjf*16Acw=hTJ5RXgWgYCnlYbA6=pA9_30r1g_6YvV1M}p$ z!%+9W8*M(jgJF^OwT(yIL47d0VV^=b2!-?4l4IQ9?HIqYY@VFh&EN8Ht6gxA8KKz8 z!3D-Ye|onWPi8KabDezI5tfe73W|?)fXk2VCw4ru6NV^`uphS14x-mtOl;rL7RHT8 zxtG$_20kZEC}9q@h7_}&hmE^i!Km}jtra_NhmMxbxiK~tu-fvW_AH*9o3zTQ(|8ML z=lXq4}nTL%*q5Yk!XaC{vBWSs{bkmd!efaLy z!ougCJ&Za9!KSKgcwQW!@@WAZX5IQrHtdQ!^l|8Z|3s)KSifz5uQ1#bW_H{)Hj*dh zpT%UHRO0>aQakqndRgvprs+_9O`dFOu>9$Yu53`w{q)YQ*&f*WajMjOx!qvZeYxr2 z-7fI9#7<|{L?_4^7;|jddI$KV`hIh8+D>RZwX<8x&$eLOXI_U7Lu}!LU;lZQy{*A_ zOJG=jFKalGzxh7v@(#EaZ?xxCmIX-3IX&v|%mOa0(>!7mWdRFDdwo4%$%5!D?N3Z@ z&Vtd;GV{MSW5M`_je4K|XbN1LF}I%SnS#UECstQ@(rH-WH%68*uue@--O$Sz9A@k} z9NN3wK4F@{dXvhKD5|Y-xnwX14)Go2W?<|joMLect^=A$Ab3M~aKKwY1b^X37RxEG%8^Jdqz^GEoosBtzv zPfg{xqPX~|E_c-W&-kcV`l!EFmye2Vgvu+`&SRi!kuVET`>P6Wzs5%77et-f=A+`j zr;}#1XGk*^sBhKWWV(*gh6%h>*`G3FWDCZ~?|48XctP63|2}%pr?swZpj0s;{l7Z-NWR@)|+fQIUkC$Oa5XxCKg+a)!<*&Bl766oa9P z@rRV-?#1=^AW5Qn2?tP`lw%x3X(nzr6SvQYqKC3SDyMMz!gdiX7lhLZy9NC?3ikt2AGKc) zR8-t5Sf3hBvsfsf;IN8?U^zpaW^YINOx!*VYr%3(IPGtX^2z+se~)0fD4Z^GNBP9= zqNJ$(VH0r$ME*FRT9g&Sh$3Rr@|r8Z2T;QA0cyslCa&MJPcW{TJw@5OzFZeJzEk^$ zsPTnij_gm5FZIQ91oad)zW88#C8cY7eED^_$Z!`YF1{dvNd_4?h{b9qsXUWK6#Lh# zw)$II7%o!h1EO$IZU>Ev_1BAp^GpWd`6RK8^@adF~ef|zho+KQep65p$d6o!k` z^^YiARNP79VomH`*UAc;FNWjwGtpOaanZj!;!_jPI$B(~$h4zzk@#Lsq%d5h#ZofhKtmAz9?MOaHDat zCU&oDWrg8lDSjVB^p#*-Ocf_Ca>ay;s;)FH65p$dBynr<-jSSt(eXg`^uv{j!bLeR z8W(F~_qtY=ii=FFpe*(yqOZ94RH*N>`TKo-EuV_UUepiNu)?H&k&S9n`24#R{(WTf za+}B>e_t-&7_IXWdJ}tBeqXML->19|*aChpgyrnQg>~BpE$el;4YsZhsN{`{!&JU|?LDpWrcHGYKqBL5-t1WEN9y4^o!0qXccP)-Bm6sc8m z`BZeKN+O?15XJuFIS@(utL)Lbh5tmqAC=YRQyGD8K+X&E(?80m!aRnaMEEb|Q|XHJ zAn_z7o)@qL3@DmU1r_IFUX@JDtHKFYaP0UZvLp%fs>EXcl&H{cH+{PdO}QI7e%>?p zRo^b-dw~DKDV>a-&q7=JTka z>sf&An*(cQ)y7;2&%^vGg@D>wab6tXw*X5?Yd_)R;L90}GC0x0iXf`t-H2mL3gB9# z!jxNob758xdxqh0o?T>;G~TLaK-*#cJhQ zxP4M9a>UjINSNa1JFiDP4BNWFyc=|0p+yS# z4&3`!Nka~_AG^3TVR9Nsdiw>s4TC%v;%^Mb&?fh$omh1fnD*0KC>TD5u79<0yK?b4 zJf3qm&@Vb3-1|%p?=d|I+M6)hMQc;xZBWA~yL}v39jCe9wWKw~Suii{pY^ zhR%p$=UjLlyFKu(avrdn2QPfuARoFW47`=DSODzNi*wHD6~b75-Rqqbsk}py-~MN> z?k!erZU{&15BUclwuW~(&)cj%?g(*{d_pc3?}nwPx_x*Z#D?!}e2?S@vtg8%A177D z9TWx(K4LV&9ZK?Udp4Ql0WJZ)Pws5;04-1~h~>#8;ZOVdUGjv6vB|4Xt9wDu2=fzu zJh{hr`0=}oyx^Z@=Hah-{2bN?4n_N~_Jk!f_GQiE$w^Jdo40J?3Cc-N7_l?l;Yfkw zV)+TY-&yhfv*ow(?yxq^&&y(l8=MK4tbXM$SCBUiICzpL2VQ@7_q?VHd@L!I?x*Pt z8n&4cWC6^FS0`!TXMz8d8A?{6ESS67so7YbT=G7M zeP{GG=zDk5$mufMpm)^1FI{*txP3^dQkW^6WRz~}YHSK0l4rJQ%9DK}H|#gnG=Z(p zT7_J^V+;>gbd>)ykcTu?^*q{pv|!S>by=NAB)JJmTPcLaR=y(`Qyu#OICP%L?~9qv+}#~si>Vtv!o&nv}k=w^Qj1qJ9LUzfVw^< zaWe+?BT|mU#Z*bgPfBvWof>E3pHr_K&k+}&O3`5L|BO#X`ft=@e>J>-?!(6SRD&YVtQ&Fm@4-u30Wu>IoH{vm37VP8k~r^lE2;yHqP3L9VKF}{-0wLQN4 zI$V@)QntS2G24j+7hj5LzqmEU{^U8(vT6$m!$sh!LqHrt-5QdA?c)loHEQ+FWv1&`#?W@9Y(Fwl~BHBwXE{1C&4;K$E zz7i8IawzsE&w-XzTY$u^$$Lj~exMY;7xcql7ln)daWpPgZRxswm5Pf@tgavB{j#|D zD5&qV`TKo-EgwZuJn9E(Sbx&L82D|C`1mLS@Ofy#H=mW?m;YXT6eX~Wl5fB#=qNyJA<=cAyGtNi&<T;G>}WnW*tYEgks}**7T> zPC_@b)+|6BKM2YdVVoj2l3YFtRtDPNN;E?nQO64ggGE&RPbA@wBjbWfTGhBt`m0|? z)#d&ZW&XpPR+o=r6mBEoqu{51l#e1H6FrI2U&=?(4eLSTNdX0@6@uPe`+O9bZ$fN* z6r-6gLx=&LDkh;zpY&X*yk?@>S6!7)_5s?FFgqV0bhPu+@Xup$s#!FvemG~ zutI3qdG;~??YSVgJiev%>TFoCN5*c-#|&6%{IJmfa~fO)++30I4Vu2xh%XV7pIB1f8Ld*D59B3MSvw6}!0mc;m zF=oJr7m#=`vXR-KWccIz_Y>1wzJ!PSNBelYzJ$7>haj|(=fvl$u)G~^({f@coXBU{ zUY_*?!e+hWewh^mCC1I)UUp9aw{u^H%k@bH#*}Hhdarm1+b6YXCf7X;2K^nc;jl3s z3Ro$dZWw03Xor*i*RRcl%q6=|pP8No#kb-urFv(>2#?|`mx{CD?n3>7KDTnf=;`S$ z#;#m|;H#T%uFQot?=+jfY@7$%V?uQLT*`yEr3FK;ZODhKlM1hH?OgyP2md|1%a}rF zvBaYHe)U%{GtqTo_8n?}Vle889yDKqc=-}&`-<1Tb&ZdLi{lkV7)a6jl;)!l99QTR zu>f^_O4dhgO5Cd=E=Ioilaicor^ea%=hQ35bHv3*F?ia#|BR2qrx>j#s>??aP=d-U z{iOZruS=!{sQpz1tD%hjh-f7)J_^Pg9M?ePkMmJ5qEP^qO-x!| zGc{h%-iDux9gb@|^0s6o!k` z^^YiARBcA%Vtw`{VYtY}>t|vc$;CyMiX`HqvNVm0#P@0GBT1-N z7%s}Stt+_5{R>6v#Dk0P#Dt566#GkpFZ~W}Bynr<-jSRiaKi5e{cs~i;i6J!8W(?u z=lNf?fr^Vv+z>^|`(<(QQBdD!^Y{DwT0RQvE~p=il!D+^Dlu!Mhq^2dEkAguNSNZd!%I6ov!AC*$ zGg0FQw=eRa|36Aesu$7iuC4{B;|D=GYm8H*9?9jS2ycphKZ9t7G@_0dzZ)M#0>%F1 zIS@(ut78AUh5tmqAC>S!0iqQ2_QPTVbkd9qOnZ~NtfhTEOS)8w*YaZ4G!W_L26=^w1- z!O>}8a?tSNglCr?KFB>HUTS zyW&9Q(P;PiR`C$UdJt*tn*c}0r%$(bPJ}gE_n%dKkPN51;%9L$yoA!nD#l&pI8ayg z5a?En%6t^-+Qf{#cK;?M#lBzCF!eDcII1$34Pqe4=B0xA_ypME9KPh)-6XKLjJmx1 zeJW&nJ?!Vp<-m;1jtVk=ro+VUBQ-{i%YcCaE7f-l&VCM&v-erC=0%< z3b)#FHyZ-(waZTT%7IeXixVzub0I0a*M*Wlb76^gXGh=6Txf8?wD^cu9;lw35&`q_ zft70cVo=Kh7~QG~S9)L}r1Vc#C|>#sg5IhaUA$eHkD{*VLGvYumoK5^+R{x^GW6lQ zTMG-Hd-gEu6a<^9vf+7gfXb%@Y?yWHFWImw?$F1f`~4H4o?!j9{k_6)Png+p*Vss& zlz$eJaZ}?Ic zTLQ!Kds)Mg{LS}Smv_Lec%wb9vMfMK&goHyXBKd2o#qjnC<|CH+Ux59OBO_LX@6pJ za~6z#mYM&x84JcYY}EVwM^oV1jJfqp&lDWSKC!yOlTO0|zcI3mfpuzv>V{s%;4ov) z;n3bjgf9t?GlZ{(jKd^N@I#m+XhX^irbm3=JgF=vs;zOkWH3lMzLa68@gj|7@s6@{ zTXGCteUo)Yh6cQlM|t?N^0_T36tN&YT||=CiB!ppfRaWDNGV2>{~OWVSB~e1i;qHY)%yR8k3#-W zw5q8tABFN*R9@-l%ujz?LM=e;uPRuNs8ND(3UTpKut%W#1mOGe_4R1+TQ0( z<)e_Fi~O)+zJSw)^HIJcZiwpNzk1%LL0=8@!NDX4r@|vmfdj7tQn(6%l@yN&1N}LTtC>Cjf35W|SJ-}W zYX1;5z64A{_9xGy{#mkqYb3Kzqt)3{i*rR(-pVYsM)=aWQx$;CzKd~xDpo|tekh+=>89B5g!1%%-ub^Rj> z7df+OT&&vCb^EF?Tx8+(Gtpjhagj4g5^*t#Vt?`+Xj!!dgyEtpCB7vJ7fV%XT&&vC zb^EF?Tx8?;DA8VWaZ!1SIB~H+O!Gx9#s1_u(6VX^2*X8cJYN(p$}XjGv1&`#?W@9Y z(I3ALBHBwXE-DQ|9xk5uE}z7Ni;N|x)x`d^teyo(+?u?1B%&;c7(TV)#lL z7prISx><^fi%hI$80G!4xcDfj@3Z;)eSR$;h3sn757e;!q<@ufg5~8&@%G-9{Yl~d zwdCbCkw5;voEzSxyk@~SpOxR2|6Y6)I@n%Be>P4Bs0-pr5XPf&73u$Yd$^VGe(qnx zN1>#Jo`)f}y{Pd(NfVW4($A`1T7Wtp$YU!+;eJhwQg`?$5=JBBWfIlOWliw6tj7=> z6vjtky%zPWpo+VYnOjAMzy~THg+K1cOGXcQ4U`tB>|Y5c{;Xnz%8~jE zahh#X_4of(l|+1$bUq5|xXPa&RX)EU4n7L1pNSejSR0W4kbRR9;Ush;Ys~`G@q?h8 z?0P|5kzhWGPLjw+p+m7h^?{TA8m1%ooT%mMTe`Y@6hpCL$azbCTCRL<(1r$YikFSS4H`5kABv^%Iy+ z)jk(Wo+oK{XPiOeNl{x+D_Eppxg_UcNoK`)ReWBy084IYEGxJFFzL)ti}n|0q?vO< z_f6TgDd+QxP{il(Jk(}yS;iw=J}fkKi;G+4Ti;M8t<}lX8~OvfLl~6Ra<1D$fKh8g zX39k4`~=XuZsIA|C>8v=3{C0VBn{_hqGAnl@bx@=y%1lQ)b>_BXMDhUMAZGHLTLH5 z-Kujsd62P)v3rAR4ovpTO;Ym71heCQ{a%=)!}-2<#x+060ofI;)%&}oLKOG1|2w5* z$lbqY?Vv@8a9U+xY1^j>&_9Ib{P{&Z_-jn*|5PC!yvDogJ-8DGgWC9in{*-$mc&m_ z>zNb>&rG_S-DAZA3|2i<*fjxGhKGOaq4@%~_sYEfy>$}6kZW5G^-F;k!RMXcAAJdX zPuzdGU}73bT6>9yBT4K}{D;Aq*QB8JnBLdHhWqNJ=8lKZ{%(1Yq{gJ4d!vc>1j@3XU{Yk5vQ`M&HZ#RW$2!m6`TQTAM__I zK9LDcZ>mLl?aqRd*cR`=ARF40>U3;rl>=QmXAZgT#f8{=S8p9yoD2Cg&oKV5$b&{3 z#@hcCm=8NXk2Q>xE(E)gTF*?jzM}ZMizfZAVGur?Yj_hDz68_9r+=_IeDB`@kIHGxFK@;1j{Mo zw1$tMAFJVhKO#}HNH66Bm2|iOMUSiK|O_yFHDTDq;zeMFTV~KowV=_Uo5y- zEGArJQS48i11+nzfG}L7&Id%{qMr+mi&a~?ZeJCKi%NJtNwk+-T=W@?JX}2U#kXR@ zMK;C$eTlOV{nI!f;U)ub+wbl8cK<`jUu?{uKL@=RnJ< zEg%dRsqrmQxESR{<6_m8uG?3I;i3+Xj}q-A7Z=qG#EFaV#57+Fqu8H32U=Eb0b#gE zjpvKPMecqY7pt~(-M%Ue7p?L8AfmnG;v&mXoVeJ4Z2YffKJ^5O{mFBnWz`lSaclD4 zk(|RQ!tVwB@YhA*qMt8~i&a~?ZeOM1A``3YLwUa}E?y7n`)vMxpI^)C!SzG^Kn?3p z`d9g(D_)-Xcs+_FlGj7|D6$uMnWcl%PR9lDgnb01v03ZA_|?1~vZs*!4YB1#jR&$P zQF&&)e^T|+0Mzk79-F}*_iJL6y2I-sJqztQVG`BKW##=!!g-a-dJMrqVZ0t{f1!RA zRB;zFbF0V@_(0|Lu*UtE+{YiM!%w4nEB4KtKxu)>{*_?j&&)tnj?|}u(>g&_fB#=q zNyJA<=k=hDtNi&<<#Qn7;Ps&TnW*tY^(^uqvTsr%oP=&@j;Z$gw2O&YOP5c1ye_Vr`zGVa+ z_c32V6d>M^7|h%8q7u(XISojI4Diu!YZvw~3siY`Yiq{^`}_q#J?!&=M-tLN!I8>; zK=dmJm25o-4+URd7`oXr>-#G>8E`04{cRq+3pc-a!6^sUyl8B<@l_@?+V;6=!M$`y zxiG$PZz=~$X0`s<-7FOv^f4>7Oicot?N5(S2z~({E@YogiqklUIUT?Uq+-puMJer{2tod9HWX;QkCn z^LE?}xX{Wv=&W}pOv;>S=dG6o8k*g%7RzNrf$WKr;UBWWZxP$qH8}^ebT7VR`*Pv9 zbfdjKkOgJuXfx6-HP^&j^N4l9Xh->+Ux;`540SpX6*rO(oa8H$de!YMaVAF zc89{ifOZWd*wAEO_?h$D-GJLHF#dSKZfI_j{Bn=G3%ng<@h0N36ZrnqA@N3IM^N#J z*|#!oCtSVw?wa~5JDA?OxJ&6N8|b*;t^N|8WI~Zr+od+({jKZh7wT4UMppN$yowc! zDK2?nKf?+J=bzVWbJ!eC$89j4)Y}}a>@*#6dYMDdBOMPXZQceuJ|r6?oZborGd;C0 z^CWA=&Uw8;OyJ3?BXJIe#vrw5RjXdnM)-L$7_|QN`S};Y@5bxF!SRYB45Vm%O7nUM zjw^JESb(}dC2=z+O5BUY#Z<``e^Qe3?bJ9M|D1Z|c#gPuJ+fSM{xe<=_I0$LAbbg; z;z|BtsJzlo+MoWqWLkjQUsbRgO4yHxR<+IRLHcWHF!Db+d_R8twR(IMGjId>{k$4{ z6vKXwk7AzgdWqwskiCiQtcd%&C|qFNLFEa46F;D3{jdNP7fAe475fjdLT&Hoqw-O( zlaL>h`9cs*C!}D1#trf32$qY&>7sN&Kjz*LEJy7ZL{F8wg5?ZxntdPTljyWYgkU)* zoc4c&@|n1OtVqFfemET#h4RVx8IoH{vm37kqbxmr^lE2;yHqP3L9SnFusz~ zwLQN4LR`EoPFySz(>WUH2Q)4c->ZofhKtnsfGAv4d_v=5P3&IR$_m59a6F$R`bsb^ zUJ)lQeh?EbG9S~pNPMp*QW!2$*FU0gQ6-wj#hTc?u9X#riyXXuCi+S)F0!9XA}%UD zqj8b=-j7K7eSdv^-%s!N*gnweX7M>EaDQvGDsba&80h;r`6*8}Uh!^l$y+x3{oLHX ze`9y>wp}wfVKp26YRBoX+j9>LHQQsVduBH@N-*rt33LIoPqLc_es_Wn&BlFS^2h-k z=l<0oHrXC5XUB~kw!{uBEZiQl7TWo++~tk3!bzIZq{((N;A;;wnm}59SdGfQyBE#mIW`C%}Msy zxD^ua=*l}ogXy0%C&#$K zhO^gZ7&h1goEW|9!?(G?t%hrExgXpOcfa?$o%_rMLMQKPGsM{mUcP(Yx4VlY?3tW( zH0SG1nA-Ww+JQVd+TL=r^O2pPsC!UqM{8TSyC(VBdxkAU7CVn-^JMz5MJ_`PcfjEE z$DZ!btYFbbIpsb)xohs^UV%F-p!JtdeV2Kf!>qib`2%@U<79XByW?5lTB5xzts|$EI@x#P}t-44zS!aZ03xTU2raG{p@I&-Ec><32jibE)hO1p zgY=G{Gk5VMEV^G}*2xCCPw?G-{kAn^Ig;rgZXUa`q6==s1dfB7HVK-jv7`hH8)x=7muTNHIc$_k@`Mg6fUwdXVn?+fz7Hx`A9ig`3Hit8CkLcLU6Wa384 zQ}&mMi;s%BpN+rY_t)}KvGP$rP{aC@{zZsJ#K=c=5uI-r-1$^_znpMBl(OGBA)D<~ z4K|tS8*J9q+=LZjD3cFACCT}AvL7-E+l$<{6sP503E~Me7mrFmb@#gSW&Xa$)(jaQ zTY$d0wyv>>k?vYk6I}y+21AzT2FMeX%atbfC6ZU-{~AMz(Wu-9sN;d(8)Sb&{4G)A z!T;F1@_?AWFFp~oI8GRaed+cy$gR(*)7102RcMy zebTR~{>rl-RoEQ$UrGt7YQJQD@HeZ+(EcfHKdMwQ?pGn%ccDEs`vB_$cRwnP_xOBz zAAM3b|A>#%=;6hAPOOWff{+{tM(C6EN3R!8${EG*aZ*j;g`)3A#f__y@lnqFMS1K; z#q~2;@gwmQ_Q(Gpr4-(scm-rwfEzz3%DE7nqNgkFepKF9+CD1jg=x7qIY8eh>63AR3$6G|(*2s~LArmAnC#z_M)sjf zCHqh%pZ~Sp)R!mc@fnHd*J-H^E#Kn)`Fg=qZP&bxA;%-nSG#vRebCb@=Uuk$Y;fxP z$@7n=c&>W(el__%7~t0iQy0lTR5wXEitIxbOUn1N_oWi=4e#AySrSYHmCJpO5K=Jzobnso?Nect6c9G*1iOv5iv;hW8X zRUw~~VA0i+Gs|^C=c!D(dvMt!7=EPs#!mwtK+7i^Uyj~%4_26*@*CGY9(=Cv3|?M8 z4%*kS-WlW=3wmFzm;cm^h0#tW7o69M1*evEf1a5Z3%4gWayu%BgWEd}`<%NJ2QiBu zm1%rA9_*4&RloM-9!!3hF!ey}1E^&&$Hr9f7^cj5H1CB+B9!QIc}v4lPvG{{wmT~v zehPx^cG30Il3{eKh+;QRJO^ddhxRbiZ-~Fr{w5H-s${g>r}HT=nQu1SxKTLR@9$Im zPSx8msg8S?$R`SP#s!L^uib@5byYg1_{2k`=Vz@$;`{LR;-gb7zCMJVM>I;>yn76X zr}pV`ZfqjFi{Iz7q(>5btF-xU)rL=?eED9DsuX_;UC-N(nVa+!%APcu9q#=McCA}b zVfesgNY}h)TvGEn4Bs}t_n3s|U=d?laoXDy=y3DR?YU)NK;oS@)=w6{1mE7w__oc{ z;QHyz1G*z#LvPitPm}s_`A%?MLNQ9KWv+6BY3Ml;4kvK2ct>Ex?_h()VUs#E)og`d-Y89{58^ z_qXA`XOrwxlktvb7&9x0pEB=t!> zGaYt47gF|aijPyf%aXGAHFRHmDhs|JRq9sEuSsMzDd&4seexbPfBR9%i!bh4Hh=bH zDOZFG()i-s{vj*A1XRNI=i^J!bS7!>#em=|wMt>fm%oRLu9=wkl1NqgB?}7|zsV_& z#+ze*R^$1CR0~MMMecY&7A}TW<8e`{k&D0=(s0q7j3=oH6c-o0V)43rB30#=EG%67 zDkoeF=GdRrc)lRj0@84iJO7b|i}AI1T$F0$BJhPYTy!GyXKDh)#YLw$Ma0Djj{WI# z;AQR>kcNxg_gk`XQCyG5#oR5e+}}#WMGx|RlxnZIxM&tHPh9*ir}1JU$Nuy=@G^G` zNW(?$`+QlrsMeUr#oR5e+}}#WML)70M7393T-3WKPh2cb3G0QtA4LYo{`5KUGItBm z_ttdXk>(F*G{ZROM^2Z8i($=qT+H3l%Ka@D7llOK5YGCty!NBuu4ha5K7V&V3N>Ba z56p@Fw13frUHR=tkx25P*(;wp-+%sF`%zdDdr{tm2Pp^WvGF9B;E{6oqP%POxA&va zYm1+U6KSHXc%auB*B9npCBCK-S%4c4bck*dq+e52m1jSSfbm)T`ABwZz#8TUf3wEj z6bGg4N8!>2_p1&B!b$i>7McaP@q>DuS_d|+{O$cH=xbdn3(jv1E{{j*Y!Bzgi+^oD z3QLatxeuIb6Vj3WoVfLhS~+WMAl!>l?9)NYuv|thX_`aa?XzmmS-xje5%wQ`LicWxguPU_I{GvKV-!h zjlS6ae0(XI&Ll0q1Q2|sRw?ZG^7nAj@`pTeF_XUFDP$g)pbw9W)c5iurQsrXJRl1f zbq4adm>;_gii?Y4g~Ua@p*${9-^-7bhKteV)A~J z>Z`c8=rr(PSi#i`4fDBKdvy|D}ER1p+(c z!c2RnFNeSfHoc?Du7Le|2eRpn45DUXhPj_JCPKcc1bp9HXA~Z1g*dO&;{yVUHoczlbPiA zLil#`_Ev5`xwbE1UY9k_u)p0(;a=m#P~4_^*Girqu%@l3*X^Fmpk=dDEzAD!fCkk@ z_?LUR6w*>I_;h`-6dF~GxHxX%QqW%4$+!MBH)!$jTBUKP-JsfHn~|SSxxt{;b*)exWt+d%~F&A1} zI&FLQd^Xhm7TGD~hf8)pL}=qrVxgM{Z@;TO-_!D76f^R%gUW2fUp zE@?b(YG>&@Z&eo0o5ln08QA_#r17%if%i0AUsxE*^4Cx}3vlCs4$(l5^lPe+^6WF= zJq7bmgjBU(GC%m6bw2H%()O81oR0fdNcLUm$SwN->jQV63ALH{e0m=}QZ}1~kJISk z!Ff)si=u*%9B`e-zFq(+M=Zd{x#uZrS(1la_E+BQ*s0c5lbjq;`YcMyL4P^$mi#_E zwKJ7;Sx9od{N>@&>rhFrCk@YOo(?yzO2$Vy^B1$89KC*F?K8pkGg*Pip9z*T@P%v(aN`ag52td*vvho9mVM@* zeW2qs?)X`ff1Y!kCa--awna`tS@Q4kY&q%6Sg zuO>u$@5Su#M`7J$|Bxb2qAPxH24M=zqF1TXWjUq{v@rKZ~#6|?Ji5oT7RrYE%S+M;& zr1!;UbZvT)KU&6ew{rUJ(G@VIWd@(2ZO081Z@#XK~qMilzaQWb3 z_J*{D%%= z2#)>fbKqs}7LbOE-1(0zToiBNaWQvGEBCk3aM6RzpQ-kWi;I4i@*FS93l|eP_NUK* zm$_R&8ZL6*Z^^<%H9sB~bGNi|e=7|a{mA=Ks=eakqPdkkaZyE1d1)CO`_t#Z%iJv> z4HvoZ^JU?p(4WV}+%2u#-%7*95V9UbwO3qR)EFyIT&y4`T-4Z&TTSiH%e+~DzPG09 zj+8g0vk%+Tk6cC;F2?WYaWQWeSI$~oToe*DBRT8K^2*ocu4ha5K7Th~R~U%L(yytC%9F3Fh4MJF{)E5&(|`HF-z@y5I4CV& z*XuC8i)8hmj@;-S*^-;D8$$Xqy-y-33y$OK(&(Xo2$$Jclaz$yquwc8k6zE5lwHo` ze!k>Nit$O3&!m|7y4<)b86V}$1Ic=F^m!ImzAo3#WW^7U6WD(!Z&ES5gl}bGS%4cq zD9Q;5PSN`)ZoaN}UG-l|usxg`FaEWBT^El1>2sixY7==0CdP#5d*2*A(c(Jb{6}e4!NIXUX`~z)83?kl760tJkxf6mS_67xRA8ZL&UBZOv;hb_&ANf zk%{bj8KkWB6d$K{mnCJbn^h$jpt9h3reW7g{km2Ft4TTMM+M6>l@~u&a3z2CWGPpK z3(|OC-2NdezUbV*_UGeE(R3zh@g%M@qv* z?)*m@HiF1m2+PoD!XbGHC}Z%x-7X`ZPUSr_ypr^~`cgJd2T zbGNi|f6K*1AyHSKv%V~^JX7v^wuJBVck@g=p5uOCPV}e!izaT!FVEEWI$keluYBfQ zFaNjlOcRN{C=Wv|1=~;O1shNFp5d}`_oBRO$K{F1`*&f3)3E)WNE2nngW#9AzA*19 z@impm0^E3@Lv%AC{hF$(M0utyaXyETs`g9f2Y>UDXPWT}_p6ZXyU>wa_5s!hZl0;| zH9nu>tqCdHzQxCB^zh?6C)Pz#K}ZgGe_&rPjFb~U;p5!%6tyhL!%@sUQ*K<9jE{2W zFJwJA>K}!bXUg?6S@AZDB8dOc%NF)JJvYx( ztvdEYI$qEtWwV<2xE^VUunxPP2`SqO*?w$E`T@Njw_i{_!&KPUOC@DBReYSzr{l}B z>j^60valkNqA(s*Fp{vj*Ac$L8Z%*Pj*CRfS|(&CE_!B?tu zVaJ!hhl}wgv4_hC7ggoN19RorpFRg(=FI}Sx~)gdTxAF1bx+2xzv>DH_nKRJ+*u4s zYkSPveQgQYj<&kyfMnX1Q$u_3Lb)t>)Xs+e?1_B|eY+OicWZTTUd$rAg|g^!%LV?c4SoFfkYnYfn#H zVbFdae7&^3cKy!tpoXD#`|$@Bzz!Res#gxU!Tqu&_8bXxgZ)isG~b5go%&4;2I;xM zh^L-jqnf+H-S#i`)j+b^>v;dodW)bz{~^5>ZeIw`J}tDgMl$_$Pph~luE1pKRWZ0W zA1coo{_)4zx!L`QZwGIWf8Rg2{f}Fg)(`3Noc)j8zXgKvBRBt?(X=O6R;;_Aqt-02 zZsh1baNjI&-e_}h{DE0uJX)p9v1^N<=6=uj*RL;vPQJm;p-A4X|7_es<$iaRfIDkaZ(k-YK-y*c)$ z&w-b@TR<8va^HW-!o{#^JTB&LY32S_8ZMfX_vci5#l=N6HATe5V2=IibKqs}7LbOE z-1RM4xENoH$Hm+&t=!*A!$l{uK1#J$TwL^%D=wCh(|hy?j{WI#;AQR>kcNxg^?X^l zD6YrjV(yk!?r){xq6guFQ0)~L7xmTUIbN(RCtOVA*q=TJUgmBAx^7K*M|7Ww48jZY zBd5#4#el{-v^gsnAZ{tBsTzhr*!H!u54SnA?_6_R}yI&#ZC z!1}=5XTpQ@V~V%Iq#W4_UzbJ?wdT0Yy4Y_8A^qGQ*Q3|dA!QT&+|Q?{D~gol;VR}n z6Wq8e86V}$U(E7j`aBD3p9!v?$%-H5ZLt5)ya`3|6TY2=V*zgbpeQFMI7RQGxcf|a zka)rNaBjT#*Y=q(X`MT+Q*Hd(=3b9JzoH`lyL~1i$@@G@mZ`aZCW&v#wa-Kt8Hb38 z_BihF`%JK$fiGlRfE#z{c-WRRo~7d>v+Ohf>;v6rf;)beZD^oajZ zD-`xRJ$Ii8r$N{c>3G4LltYH#<9eha9_H+N!K55Hg6+oVc2b`Luy4yPhp6d-TS~g`|Dv{n+(fN!iZ~AE)uxZ#27J1SzLl;N#TpvZSnavx?*b zR2F=n3BA&|Wge_1<(wZCY@Z2v)G#(hYf5?h289lN6`S?;aok?1J z@gn$2ty0+W_|(UU>t8KKyu*`d)sdG+gA)e`MjJ&Oja)^J8~qt1Ar`!^r%Z>Z`c8 z7@?53s5OAcMe2L`k_IB%HtySz5GaNxX68s!QJD5Gnz$jqJX3vR{JRY7mCu~(<^NWmX)v)D>0A)ehU=i5Om1JaCkEtegDRr>bK`*yv4fTkyB{l0o~f1@{@qZv$L9xs^O9#8 zVTS?Ui@o$rokNh)8{}X)ke)xx$vLrS5W!i<(XQR!%xDJ)pV|(N#dJw z<(cX@W9`L6dmMN8JX4l4@P%v(aN`ag4@Yvwvvj;`mVM@*eV}=!-0`y{|19S?O&)os zNDIqrnoj>&o~h6U_t(7Und;BQ_4WVE{QTJpY5{J4H6ePq&cJ>_)hg^fQ#`L$6~q%D zNDRfhOi^4=JB!OY=dnyBUzm{JKd1G$zlWYdz6d7ytF#_BpH;0G)=X;})|1vVAZ1IA z{?rctnxweLZMS58nzwx2enc?|UgjZRSO3rQb$e+}R=9j!zggH{!scKpYaZ@3AJ?OC z@L%&EzCH4_02g2B{4SCB550R~^BuVPy24FtoHHS1+s*j69%+dFR(3s0Qg-!a`>_k@ z2NXBC{etQlzkq!`fh#Tx7hy@?ONiar^|ah^S$`?1Pui!pmR(Pel+D(Y`lO!O4t6~k zQuf}3k5jwLlCstx%aaRGS@3+_Ffz|{Vl^q}JhNc=y7J0PbDftzd$N=(!Ubu3I&S}v z6<-1tWBc>*rD!^nwD@8`@ReGnu;a_$!$rOF*u&+6i|TUX(|L33PoD!XbGLvrT;z@i zWZ`0%2ak)nTUxolm4=JvWIRc=S6p0F^OPqps>ul#gE{u6&w-bDv%p{cUGHBF;_p|O zzst`3U3qSq{+_%vNqvOmw36h_@n^t~^q)+u1ZUZj5!qR@bI}ZtT1?vhYPm5GtvwugPzuv!OKd!%U z%hLRY9+&Mu3pX5aND7$@!%z0BcKWk33@Lqgq*J;xj7p#Va@(wV(9-;c;~BjLVB4|D z_hU!qXZwj_oX52nw@mFMP0F@kNB?c6Zsl#@(dv#n`~s)Ik#x5jpIltB?eq_SZ(wXZ zwOf{kk(Hc(NeQk{yy4o5Tb5=wdR(^soElbjw6M0wwpZbnu^!2hvh>95{LK#M@eyfu zp!!LZ()AYGKJ_@B@r=o;k##?(i9_udJx&8E>6y~zMcntFvgSqc8~Aw+SToiI%6v44SeGa_L-2&2Zk-NSn3m3&(cwEfg(#rj!VbA#l^)` zx#D7JIlV7R@^dRMceQZ1l zCU`{5TI9vw-mgP12tNmQcgX@##`ZjTxMPDw}Oy-);fmk z(d!wIvgL`~&;RXG3h_~r&#ajHb#UXVWPFq}4^$reb#VPmR{U@}jQxk^O(=wu@Qo}q z3vlBHMLD%#Hm)e{ejO$XxnGAR$Nt<0PWx-f5%zQ9)+=h||8BpI2=YG9l4bIo;}R2r zDyosy&awh6fuoI$v-LD*fd-mR;u)pEuk%$@aHJ>c!U8Jk#c8>$z>Hk4{IBcTIZU&j z>f~r|HOuAK2K^+&VpGym*EcHTN?{4B{o&pA$$(|#SUwmbj3{W?5O4;rjZ2 zW`6!`1+@UTznTy|^oSo(wF-N`4%%PEC$ax&ko!sIRe9TIqCaV%q@U+upNWotw$Fq^ zX$OVdXF@F$+gXS7cUkktj4)iE;y3jJUKR}taB+c-8cm4*P%9MnIz4xv2@etWLpojv zCgsRzd|Zz-#4nazFM^a)vwt^;}8W?;1WX zB<*v$$*$*3$|1M$aTGJJF+X-!wz|@AF`mqyslJMfi&`tOhs$RkEiYWuyTjum z^}YN^X}HLJza;_tWe^3sRCx2Efkl%MB9 z)&>2@jb-7YP9l$s@_I&!a9u7g3Q41dob_dS<(YEVvn70=znf?3l!W_%Inkf?FZt)0 zModw}JktnbFUrFZld{G$HlAoDu;Z&D^a**k@o(pudZ%FfI}xR1#RKnTTwf?pBkOIO+Es zOFu{A zUY@DbXKZJ$3@l~MA1%M(dKAB@AMmnhSb&QQbY2on{D)ehu-ECid8Xnr_!qb7ctNWy zF6)=aQjau5ts=Xg9x0nu#>c52n~;7$ugC2dRL_9#*#Bw0NKzJO;^TBa9j3y*Zz?IP zsp8{8(!ThT?0SMy22Y5Wyxvg?_UvaJ?APVFvB%33!oMJ_;P!ShVx_u*VsssX-m z&iPTn@=WEGPi6KMKSx=1+dpK*7Z(BcXWB2>ci~IQZUJfWMdK&CUlw+J z`Fpr%noO*aM7y-kBf!%Oce1t(r{6Sj3=p13XF^7 zeY$+cixuRAi>@5|)91j;+$|st7rFBvS-2Qbn#aZ5Ev?+&O2b71GJmGpD=sejDI_j> zbL>x_121#8fHYj>zTc9Ci(wUbT+H3l%Kfc0Tr?-|N2&ITi;MAc#l?zp8ZQQO>`$Kq zFLSqmG+gAq&zFUZ@l|+S%-zz;{jD@ybRz3PRC~q6MUB)*dn(oU+!HC@;ax(SDYL<77K4dwL}U`r(fx z=3x}e{#6>iTG(FnzUHLtQiqKvuGMk*k8Z9+C;#m{Q$c-fe-lSjCD=AN&Y4BgkGc~D)`&9@vAo}gG-2S+ErcR_EQ@r&i;RR^C(ucy%jm-U)q$vsa|%aS}C#r!=}Zd{d&k8u0j!he0Fk zKa@AAsD8t@yI>aJ#t({e@dT&nRTVeSRAWEpaj`v|J6`|S@=Wy_=8o%B8;{1h*Q3v` zsL1~=&(wsx&$DEin(Jqh_@-QWrU7IeA|~47xWng}vYdf0WLtn6cj$Q7j5D64<6X1t zGym)Z%`@eWpC$QcImc;o$}@HKKlR_`nVPr6aU-vJrcP~eef>W(KYzA@T7cVMO{gBk zk7!X|d8T2_vHvCNVkwzdsBph$8n1`#o6#CeS@Xw; zcDNqJZ|VoUEE*Qz;sTwQXpwk9tx(wO^xQmC^B&j_>3G4Fl>JQbaXr!yr{3&(-lQDT zm+i;Fq#w}har*_;Q=ditbn-Vq8a)7a31d?G+anQ{{?_mE?qrsT}*$=fKO{Eg%gSx$_@cxTs;w z<6`cXR_<@5;bH)pKU3`$7Z=sMaNdBBs`5(~);wBXxF|5<=h3VOmdAoLT;#srl7)*p zy?9*Aqsf)BnlxMtBkxD4(u#|VI&#IuDsmbxYMJu5NPRCqQW`FD-{;H1MT7o4F6PJX z%2rnzF2!mK6_d zN8tLxf-1JE~9*$z>nR4T*WPFq}e?cC3 zrd&Uh6+Z$jvHwusq@wx_-|m80fEz#P{M3Np6uqkA=9&7D-wR-SICs4MujQF~bL>x_ z1C>-8v6XV+Kh>|G^1sV7^&sOCOIFjlekO@;%9UrTVT1ipOti;whtD%*IRjtFwg5No z(D85xXFN;CyJp#E{@DkbXUZKvOY+Zhj??6nXX+AoS z`T4UI)B@c8YC`m|wPTMz3Ommf=aZ=lw2I*yMx4ZNUnwq#Nm=7GKCVOR>5<<*rS-VK zhpJENd6WEAT92F0YC`G>CSW~jJsnau;pqRbK3g zzV2jaCxy$`^{~hO65xQPta-T06kLzS!GG0{_;$(10$hBh^ScP*KlHAJ&3EAD>#8kc z{PbU3u}0ZJqLGPg(XZD&I@v({cNUtoY(J1KXdEFGa<3*m_EfFFFKYY3;&}FMkgg zGvtbkRprE|bLH5dJ_larZUJey$Q=*J!o`3&JTB&LY32S_8ZH`;@g&t=adA;?4Sq8s zpYfu+@-MtO_NUK*m$_R&8ZL6@KeBK!%$3K*+%2u#-%7(pb25LX+AA(DYAGZx26OCB zp93#*w}3QU)(`DgefESO8xm#Mfzvbehkf`g&Szne{zAkq?Tf+DGyZO4}HMk#`6a8ub zl7GIg3Bhgl%4g2?a_RYE|HbdZnykh4qPz(wQubQU#uM+=xUAg0DDT?+?R;G=Z)|@j z(nMMDKx-qeFU-42d`%^?05=}!5Z!`Fzox1xPrj}h!CxU&?U&3C{^liL*K!l?S0UMV zp(D5K1FR3+--Y!c{g~oyFeyiF!PlkHLu~^tvo7{qK}bJu$Mxv-bV%7`NABm-(-lQZ z@|hGfUzZzKCF7%UDdT7VlrD9VWmPSNWtZoaNl zp5C+kYx%k+KDpyM?XP~@a<509Ur~|&UB0d>@iR-7sdJ7?OaxiKv6R)$vS<$wM;jYw z>uJsc4KyIYV*-O;=hJTTQcbbU>B!dR;oM zpc0))Z^e=-f|9?c*c2z|d#o@r4iS^uIPUQIx-8@Ig=`CO;|?7U+j7RU)E~{V&-}9w z*?DW6@v|iVEax~)PWigRr;-0%zOIu$jvJQ5z_`B_6a3`-QEPkc!}TdD7_6=E>nn3w zftN~c0oq@KiI%oRdac2JAg}jiw7H!urtn8;-3n~gBJ8rivBWU}Rth>?cWS#D(3Men1o?ijQ zX*Iz(>#RU+;b>zq*~;1Z|HNr>Un(T$m;QDBRO|869mZQZOd}O?#CdvRwxm5b`@pXc z($?!U_Fy|}k$x|09+`Ro*QYqnz6)Pcb_-B^pz(lun?CU$s()dx*VBA{9dd)n*Vqqf z|4Xfl@hO8G*CX{TwefLU&x4c$8sX#Ak0VJxp!K-@g6bK0g?--)Qr3#V$Ep7Rs+6^U zMtS*E7ChfnF9=)2k4_BRKHuvJ&GALsN}wJ`cD;uv?Y_5w?3m{uz$Y)hoo652G#ea z5AN4l#h^#o&MQoR3JiMaoLIEyiojrwrrUdFmB3)sGv9-6%moIX*O#>0&`@AtHzi!J zaq3U7U3aPRHjkh1ZSBfZBb)z(sKgT|#B(#@ekc8SpZFhOTi@Pgw)GDX-L})TP5%y6 z%>{!>uKEsVSLu&0-sC$>+A?$N&IaE>x7fIO#VdaY{u#f+PejZgXpcSkws z#q9V7`2uCK*$<3GcLb3K22 zD*YM4)35k94f+J(-==&^9`p&+Zp264%KQlRf~VT93Hk_v@HV!o79Zh$@t`oTsvn`} zfe}#yZhwHMKSF-IU-ki(c~>(1*!lxph`6!EJn=p3+_Ec zZ>^TmZ(zjg!`C7wyn%-2v=dGU-oV5r6K8MP_8J~68KBXHc?~+NLn>N6NrSTQ?Nmj} z(qKx@H`_`v2-8VF{1O@;KCTwq{UyZuzta5_{{nVd z*1KKD@CEG7ob6uXWGXbSb=T;tNh-v*=@dIBF$LN;JZ7LdF9mAW?vXyWP70{M|52yp z<>ydmzuTgq$zKBsBa&5U88vt*!;Lqv&EA{ zC?8Q}>@%N4SkgZs?zMR$tS~CqJD@}&_@D7QI>aFX+)7RTq;~%?jJcWE(ZBCwShIAR z?wp86&@V#E?t|$gSlO=9FgMXdSlg%Tg=1qLLYi4$)7Yd3uz!yF>9La@K+0tM8N0vU zhjTT)z3zdeQR5ArDt);R?J`%rf0TY7ss%0@JN?sri11Qty;qFBzv1-0V#<9uld+~^ z$(Z}#)lEOx=HPv(^|Dq##`yd2X=7;b5ApY4g?;zqwG8ipdBe2!#ZSh=kTqd<#pB|k z&%v|%%U6kqLwB}*YH~FWj@e8PtvoLdnr@oAb4R;4=n$XmA1IE6ZLf?o_fL)m|HYpc zl>cxS8o#+H{JP*S)F0WW{^81Z;b%8(!&N~s&}8xOVP{6gKZ7iHWV5TTtrN&sxuK+=Ox! z7q$%=a}&Bw+}o}B=NsTrWz3_pYj4210i`WeTi<|UiK`mjx_cdld6jW)JnuS$-P_vn ze&g$~CEOtOW&AY|1a4E<783a8Lw%-@V|CQ{q+FbkMTqyYW}y zVX2ATcZW;hu^L59c*DrPjGI};? z?G|(yN|!jXzU!dNaP>;5=8iuufs;zP2WJjk0{^)|;^@(rAhBF|pUIUk!H1D|CiT2| z5jvXoTiDp+B8)Bbd~jTki=Zkp^c3em6YB zK-m1;_kDfBp!A9ZuB|GDLGrrO>f?gXgUkE@i!!^PhaLwFHov-e4r)iXxbt}0IfyCM z;haz9bFiuZw}H=&p9OE9D$CtQo`tb(YM$?{dKRME-b!3QCKRk*w0f_>*h`%XgR$vrQ}jz0;LL-*VoUh^baEbVr~ zHRc3-7?q)|?R5fX)!o0XZod!&<&O46E1oXj$#hVfb_`?eS&D!?1CM+9b6$hk>~ms(vCP81782J<~rd z7)G!D?svp97z~P!(GDFN4Au|KZtv0#hM3yx9&brK1kd+;KFKUU1Uja1ea_uG2tE$m zXH08z5IR~n-wB(7An8ZaTy51Lcz+?`wdt%ta2_*B?cJvX@RV7u<~-{Fw9{DDt4r|% zuzBQ)p4ZpzhhT?AUIC5w!(Q`tYR+f&LEl<@EhbtQ04*1% z&$!w#0DP9acXxfd7rwSGm43==FNngcKkV3TFZ{e*NjUh!9w<}cljg*LJ)o`wj=e4S zKzWVV2{&u(fn_zm%npz9hwvudi&xp?4@+nF9nh$jKSV7MdRE@I8*~pi{3zFTH*DM2 zq`7t6F0fqa8#;gHF4&^c>-w%PyFj42yk}JLT_C((x8c1_JK^zcW8Vv{cY?!#ySnkw zJHVq+hsKL$?*Mzp#9jK0cEG+-@0Tr!^#fQoC{}g3AFQyvK00oSAGGdsvb}G0KRBj4 z=7Q78?NHh9SUKBnU#Jw^!ohB+FFbtHcw`wf zUpU|0^wUT~U+7vaU}m$Xz5ur!%DQK4gKa-`eM@<7gCi50EUwmh8$5lLaCBbMR%o?a zwT=4ntsuH`u;lU%Tfyi{vcWBHAF#aG|5Q~~A6TDwqtBu(TVQapvp4+OZGpg!i~3Z* zyBYSao&I^7%VwDNB-8q>^JYk~ykWh_dNYW&nXhUwY%{12IzIenr_G?fy{fQ5@y#%! z*|ZN=*LlN;@4isFsW-$1My{K7WfSyo*!7jK^(HVppYWqu=}j;!v}fA2BO5`qvTagx zi;eKA@p}786*fW-)4C12T-*R7jI|FryKI1W7vHKcX|(~Y>$P5I{CYji^0YbRabP{v zTRAzrvHf~@;q!Hr8APtv9P|9=ByBq}zDDon3b&R8xxx8MA){ z?073$ZPZ}}IR03s+WP!*(5uosIi=5Xu-5Q&{*>SeZUc4?{V>xLn2irimsIhD&xR|{ z4L`mNdeoiSso{ua@b>=OEjx-W13mG=i^l6bAawG55LQk1 za^KU7!DV*;=ALa9L-%8)8+|;n2&@`)?)5xwAv{?&=)7%JBp*I1G2PP@^n$vHAMRKH z3orInowa&C*u}PKQ)|;aXl!PcasAj_@T`30&eY^NaJk-g*E5agz@WBIbwo2}!`J68 zOD^v+3vPTqwcMzQ3ye1rzF9PNCRjxu4_$X-29)#jTi5*R4A_`-|L}-0GoV!k8{#!psrSXslq<35VgZ zKzG=N_KVD6Y}tgEZ9&6eO@d8|`1Mej`)TTcmFtJXkl9w3PR0&_>HQjPaA`gSJ|q+y zR^4kboQX->Tf6vRFe&{rbI0I8aHCwKhy^DG!o4*nL18)rq3fwV1~wB0z`V8_Tn2`k zL06Sa+LOANf!n2$!ddJ4!$#kb`IAoegHaPL8k)T83mVnT=hs}>2b^sBRxUlXH;g~1 z-r0A0FR1SB<-DuEDNHhLY!)-s1fp)(+?}4Df9@+BS>rUXT8=3Yaqa!>$AMjy)m5%Ui?6RcA z%R7MGs&S7--D?Mi(CL~_{dQnF!Sz-Xowm?LbHm5Zz1zUC#ZOwcsn{Ak&xnuDDBTKf zYfL!Nx3L~P_q?2VvVk7-K5I2=a5W^obg#E7qX!SH4z0~dZVBGW_D3taw}d8^>&707 z(1mR_<_6P)TfnS04SnLeH;0b4UFN*gZwlpysZ@X5uL(GpUAfA@LkCuS)!(zeZDXi1 zyX^FRI*nlUOe+t)o(;jErB}08r?p{|PdDFQC$wSC_6jG}_G?3notF<>-KGue_Udjh zcGrflha&454%UXwb8a_T^1T7vS-k4SouLgNEl}gIwNHImJ>!k1`S*IzXtmLqKF0OH z=-Qbf+dd27x~s11q9#Hxtg*Y4W?&s?VCo#-`9K}G`(p3NS^L6qOb(r71 zOvv|{>Tqyns8!q*H8_xDdb0j1HTW@PK<(G>OF>($qpek-6llJ92##ku1uC85j3Iu02(OF)KtjlR7NO2EeDRdsIZm4LAo+$R>-C;__bJ_dGts|tO# zTwAs$NELL}EUUhzsVck(writTT@~ybj=SXdpg6qUJZexy-{K$`ci2U}L2+0Vs9Qy_ zy%?z1-{;wTaWUAJe0cWW2F0LW!_L?4e^Y@*_3qE8c~k{%dd;v3?V$qVYJFF@CJEqC z?aQYE7Yd+vo3EGsrwKr%_`M_AO$4B?x~A2W13ww7q@bA6{+Wz@-OFnRPS0cpGmC6Y zNBv+bU41dk*z-GMZ<-u4WY%{EDxIl44 z%)54d#!jsJg{cxAq1MqagW2SfRC!|a4935Bhx_TL(;2(Ch67p;NN27!-lW&_&1c5H zWN2*A^3P1wHbXBpiu%ly(pDE%(n@E_%u{Xgc33)dvt2?Uc&9UipJ_~SZu*7UIOEF? z=d)j#5jWb`4(a)WY2CN#3BA;x%;gs)%4YOYfm+%|UlwT=12}MVeQZK82#<2=l(`q# zZ=&1nBL`IA_yFCbhm(FXm0P^FX_WMxc`~|B&>htN=_f;@6Wr68+BJ8?j%fCYsducy z$k%m0FilHtA8s+|9n;iy?&G!7-!d`ZU9FzZea$p}(9CJYj~C3-Qx#*LR7_#w-j?&e z&@`DzZMDlOc;Qo~frhDIWceq|Jda8HKZhqW-&)QLx!v*+Q?Yrac{Z638U2JAbw(sS zWTIjl9|8gMTa| zxbE_EP}f+-*6w22wm0rFmQ4nxTnWF+=v=E2a@OK5^Un6E$MK99CV0Qw>BY}u7{|1R zX#-+nn5Gf7adj`oFaxipEPHS?hRIxTv2<8)4D+#yWvP)nW0+U_eiZ+_E{2JV*8kCL zW(;#}TvV5_BVw426)c-|?ia)KcwHgUzgrBm<-`8x3C&`dH(!ijSJ#YTm@SKf1_@%A zwSKjat$Z2Hl#VnR)8k$=GjDU%inz{P)qD6;2(TwiQ zo+-<{qZzN=lXVh3qnY#$?+>+|7tM^mF{8sW$7sf4SA|*I?W39V8CzW*Sw%CAR@4); z9vsb78}oSUUXy6Xc}rODGCiZ2Cj+)D9o{{fDL%6Hf@58xnRPX19~s>`nrZMbHo2ru zG;?%oo9e-}qZz}|UVVmFjz-Vv^@3vR(Mq-oGxBViejFAn6JIzUKHc_ylS{{R1{-VV|d3bS@qqko0g&| z#^jCp^yb&1nCb2l;?l#Sn1Dqw3oeC3F?Xv!OYZSAz_uX^88={!{{laV3TOGx0tb63rD~~89p^re*C=Lt=XG12&yQl>zU`E@cTN=3iE&G}b%|o! zSKKPrbb1t1Z}mBgK!+$Mbj_hqUE3&TkZ$+rV5=zRjb0nQHY3q}wj0iRIwFdR+cJ4k zS2LtfsH#)9K1h!%#v8st6w|Ja=Ee?Pq8L3pooUD0L@{1d?KV3$j$)>)+0~+ksLBNW9j_;BIePx?(ug6L`+os2BwyKMa-?txwotB z5iu^G0;i|%7BTZ`p4jkxr-+HOn)Gqr4iU3l+gxXipNMfz))EH#ikP-DoPYf5i`=a&#v#oL`*w} z;Z9$X)TtY)@pQ0=sWkLwncDqD%#zog+wScpVkRytvC1DwVP93F&ZZ)!O4T=d>$-}V zz}TDf2O#OY`|trXB+DAMAOEVAh>33)TH$+35fgoW^tEqDmY6bslVKwflUcs+h&}a1 z%olxIH=i0v?=f9onN<}r?`(okekd?l9{6Z#whb+BomY{-SpFkNT&Pfv3EYbjAUM)INkm@lA?ibUPrU! zG;#UQNs)|U+x4I95+fPCtu-FnB5D2p;rh?3Cg*`k(q1J7^IQIXCUFe@`nlxP0xPiSuk9dPDT=Y)iaq*veuz$HR z(s0p?_z!JP;p1YK2Me-)Ws~v<6H~E23SMEkxyA6RNr;~ywqO0&3Gow7CC!X(f%pkC z?;Yy=2=Nor!a6qSh4=}TCK$&UA%23EL5A5*#82p}8y?mP@e^8pPn`P_@e@Wri737X z@e|7L=yj_O;wO~5)bsLs#82?MSaJ72#7~&1(RolR;wLPa7&>ho;wNa`w5aEd_z5#I zUmvkR{Djj>-QNCK`5h+fH!t^H=R4Fgnq=&Q_z5o?hPVDv={tP395{C_;wKz^Q@4yL z=^MD09DDEPj&ESoZ_|~_h@bFl84mFi+}w05A`w5~*E&ApCs=lUGcpMA6MAWjZs;I> z!q8@w=kG)O1i#7cUadg8-FVSh~8!l8(tFtcU)wE>8q(D%XlBTLPNw)Sh?BgY$D<(+_62dHUjYzQu`V=U4i%sSI3oX`V{dKcI;TNXgT61 zls9d$z7OIj9IyKA#v8;>Fl(P&`Yqxoc-Z)k8ie=>cKX&1=MX<(om0Kli9O!K%R|G= zoqoOpZ2x!Qn`YAk5I>>Z{&M|{ev08jQi+QD5I+IiTMWHZE*({^E`~(yYC*3NKLM}b zzJ)mh7rtqP_z4r2Z4gBuenPttwUmR1pKwSm^W<8@Pk80pPOB~ACpb9t>2Hqs2}@4| z&Af*A329|oS00M^2`1WM+anP_;nMJt7hfTMLXCCDL~jv4!LXrv?K_B{(D>&Ymp6!? z@bQ$kmKNeCH0`Qe;^&D}cmn!gKOlaB#njhBrXzmBdy{IPDkj6(c`uU|Dv z3lKlS*t_Shy@;RiP5q*iI^rh;Z&JDV1o0C(S!=gSNBo4uM-6XQK>UQE#~xStCVmE$ zPPq?Sj`#_0mYwgg3GovS_q}78f%pl5Zj(;wR|rxzHdH@e|-x8%KBj~C2}ub< z^%4<3Vfci4dtM-Zg2kx*)psL)!tvwN&h$n6g!L*ze+Upi!6E!|w{3`@P_|FV4rjzq zxVB={!&iu(p!Rjh^|^?j;PN1Gdl2F$L?wtD-$DEYuhK!@BN0DA|EgoyHpENVz0db1 zAldYUe)TelpHOpUYf&uXC)k!)66k>V2?y&2YWN|3LemjdM5Pfwq3pm7BY#HUhZ&I% zR#_l^g1w>e{X4`@FczQRkcRjPCSLv%H4#5ye&s{Mew>JhxeFG5eu?-A&Rbn?s3Cqr z>{$ypyg&Uq;wQW_ zpLhNV;wN->oe&#@_z7#q$FKjHGAdl#Y*Kf$JbgU1{6BSG`_g5j?aKS8&ysc8koPuS3J z!GK4IpKv7lm|igACp2(BBL0N<2{y*FmN!TI1aqU}6A}g!l<|;X7ZXA$~%Y8sVVd&pL1o;wLnI>v5fknmtAQgs|7+Z}dg{1o!uwdk#nZggRaC>GVMSgm*0$h4(@H zgv#khj~XI=!mJi?YwjU_LeJ>cUBVGRVc_cd#u130;5&JN%U;A!Sa!?)yDs7GjY77bvzlZnt=k zoY;1v2jVBpPP*;B2JsV0Z*1%3a_I~R>YE3rB7Q=JSFLxvLHq>ss?Cm_Mf`+Pn^twa zgZK#t2DMbTLi~hcw^lTmgZK$GS2S((6!8b{qoQOk%*tr*Z0VlgNUCH+Gjzi3*sk?)p$6?9PtzO^qYO|CE_Qf z+mt*Ri}(pfGrKjrh4=}Ljb8Yv8ITh&@{SEvL@mu{J6NJ zSVhE7cd!0+hmq7f4MwRDT#3O#f%}hJ} z?TDWcS1Vm>D&i-!Z`F5?5#lG{{^bkNO*SRmMEry~0TFY35I>=vZ}^poh@bHDVc3zf zh@T)jRdvTG#80pk8{BD*_z7b}OO0QG_z4GRd^1%;{DjL%pLDelKjG8ZK#TeRho4Zd zOy3tb5I>>W=$FSUBYwh^_pLvK6Ao_oS=J2k6Cyf(t5Om16B>+Ma;p>K zCv+ILeAraPPe|z9V2nHBCk)bm|XH#7{7)7vj1E@e>@xD?4pN{Di&ZZ%^KV_z8R4EbjCO@e@GLseDDm zPpGz4yYwr>PuSb{%E)?%pK$%OwzCNF6BasX-h74l3H3v5mbOOx1otvAXZIm~g2w&2 z&$l3cg3I(aCN{tE6FydNX*C-06Gm3{OYDaD2_@T{|Iq^R6UsGOxAOUK{Di&G_25Uu zPq1>Ewqq&cCv*{>pF9fj6YR=qtZnogKjCF%v&x2upD<|G(?D0mPY?!aA;!{D*u8UT z*Aj@I;4s)aWeMUZXsgE9RYUxQp_5yhy+!C-~mIQmrlGCoCS`cv1MN8Bq7zDc>o9 zGvMTRi{|Cm&VV)JtFJIeyal^ygJ2foEtvFnpYss$7D~)nys0JPE!e157+(+Z7M!kB zAJ7x=7COYG*f&SK1Ya6hVxJ9vRz|!9;hV&#V#HhU zPk7Vw2;wbNJ#r2#f_Mw_CmmSy9Pt+Xb*o=B zLA(X`**`BFN4y1#xQ@LRBHluSKm!d&2IL5cnhZWZ9;D&-ooaK z7q8bqyaoR&`y3JwZ^5I{{O{!uZ(+*17YlbG-a`4Q)yE!3yoFtMTP`#~yoFuGJ(%x^ zw@~R`TwMX;E!;Kx9KQ@>quwLl!pm1R_T5Ijh1apqJxvgA!F6PK$0mrkpjUkA zlLv^mu(@~76^V$qFw|(Z#!bXq*jg)brXk`jWSqM)e=p)K7`etemwGc4MtJI&&PTk3 zvfgW_M9`P2+O+5X5c&Hf^yL~9rrHdJ8YMtme5%CuKg}%^pL%fB)A8H)yhIk9d zEy@{HMZARwhwl|s5pSW~kk5015pThx|D?A*h_?{5djG9Eh__H<^#PZeh_}#Tm>IJh z@fNmUS~~m`;w>z+FXht&@fPNENOL@dcnf1L&6si(@fPM6t5V$y@fN(wm#lIS@fND2 zRjWP#@fI%rFn-ek@fHpTOuu1^cncr;>zj>3yahXtHK*++bcUI=kG9A_yam4_jbD95 zyoH4BDYw=l-a7N)LuWV#~W!qChq zk|2;wa)7;b!YKH@Fxf6JVYMZ5*OX5D(#?${K-yhhhYx$qXQPyLbJ z2JsdGn;D;f{Tpu~&`;+oU~owu+vuJiIN-omKqm5x38jkn+)Sf+}~Sn0fl zng;hAGZAk=XH~d*7H`2cp_-%iZ@h)5staEh`#-z|N6!m&PX5MQ&`^6H*e4IX1%uUA zv)1OqThO+g?osA9-a^%S8#?v*jknNTyYZ|CdEhM!YyEuMp8vyJn3dq(w(M`bg-QQo z@6H2iO8-BAmuTPYEhJ?Lm6D}MPeLM8+BYpKMQPVUM1)e>Bx@y7*0PpF6rxR=79va9 zL}^vZ?|r-Xewjwh%x}#1J2UxX&Yas_&Ux;0o_p_kzn;&LH@LS9ZehyZ+t-x8;}&8k z9I5H}f4BwS9v0@y-*F3$V)s>-e&rVUY{v#{`i5I@Y7CZd{)SsP(7J45)py*&Ez{jc zbAE$cc%vs@ar7H*K|f*XrP}Yf1y61HT?1}mz%2~8g#ouP;1&kl!jIho3$<1OZDKMb zE$N`w4WeHcfxi6Xx$o|G)TAWgZkMi8zZ>jA%;9P!FbN=J* z)L)(}Ov_X0JN)P8xqsDoC(A;u0P*)4@7(*eKmC0eSbo0+`g1OQ>xT5#@A+t-j`Uag zv->^$dHXI?%$^+2hFjoUz4U_-+`@|j>1uwsg~*3CY7gKR1nj4!&Zg8=DA>><4Y#0r zX1wD*xCLLG$!o>n7OW>IiI&1GgtJdQy#;Q;fBoi3UDcmSI7{smC%6TnfQ8+Xa0{qj zaQ7bE!tg0MZyezkk_J~su7X<_IcI}3fm^Vc>*DzgZh_13tp5|Zg_O

7H;4dsZta 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 + + + + diff --git a/minimal_test.py b/minimal_test.py new file mode 100644 index 00000000000..a737d2886be --- /dev/null +++ b/minimal_test.py @@ -0,0 +1,67 @@ +import openmc + +openmc.config['cross_sections'] = 'cross_sections.xml' + +mat1 = openmc.Material(name='mat1') +mat1.add_nuclide('Li7', 0.95) +mat1.set_density('g/cm3', 1.0) + +materials = openmc.Materials([mat1]) + +bound_dag_univ = openmc.DAGMCUniverse(filename='small_dagmc_file.h5m').bounded_universe() +my_geometry = openmc.Geometry(root=bound_dag_univ) + +umesh = openmc.UnstructuredMesh(filename='small_um.vtk', library='moab') +umesh.id = 1 + +mesh_filter = openmc.MeshFilter(umesh) + +# Create flux mesh tally to score alpha production +mesh_tally = openmc.Tally(tally_id=1, name='alpha_production_on_mesh') # note the tally_id is specified +mesh_tally.filters = [mesh_filter] +mesh_tally.scores = ['(n,Xa)'] # where X is a wild card + + +tallies = openmc.Tallies([mesh_tally]) + + +my_source = openmc.IndependentSource() +my_source.space = openmc.stats.Point((0.4, 0, 0.4)) + + +settings = openmc.Settings() +settings.run_mode = 'fixed source' +settings.batches = 3 +settings.particles = 1000 +settings.source = my_source +settings.photon_transport=True + +my_model = openmc.Model( + materials=materials, + geometry=my_geometry, + settings=settings, + tallies=tallies +) + +statepoint_file = my_model.run() + +statepoint = openmc.StatePoint(statepoint_file) + +my_tally = statepoint.get_tally(name='alpha_production_on_mesh') + +umesh_from_sp = statepoint.meshes[1] # note to self we can add a function to openmc to get the mesh by type or name + +# needed to trigger internal mesh data loading with openmc v0.15, fixed on dev +# note to self we can add a function to openmc to get this automated when writting to vtk +centroids = umesh_from_sp.centroids +mesh_vols = umesh_from_sp.volumes + + +umesh_from_sp.write_data_to_vtk( + datasets={'mean': my_tally.mean.flatten()}, + filename = "shape_alpha_production_on_mesh.vtu", +) +umesh_from_sp.write_data_to_vtk( + datasets={'mean': my_tally.mean.flatten()}, + filename = "shape_alpha_production_on_mesh.vtk", +) \ No newline at end of file diff --git a/small_dagmc_file.h5m b/small_dagmc_file.h5m new file mode 100644 index 0000000000000000000000000000000000000000..b060ce228ef814d166cceb9f2434d5e850776b46 GIT binary patch literal 34232 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 literal 0 HcmV?d00001 diff --git a/small_um.vtk b/small_um.vtk new file mode 100644 index 00000000000..9acdf3e486a --- /dev/null +++ b/small_um.vtk @@ -0,0 +1,159 @@ +# vtk DataFile Version 2.0 +made_with_cad_to_dagmc_package, Created by Gmsh 4.13.1 +ASCII +DATASET UNSTRUCTURED_GRID +POINTS 14 double +-0.5 -0.5 0.5 +-0.5 -0.5 -0.5 +-0.5 0.5 0.5 +-0.5 0.5 -0.5 +0.5 -0.5 0.5 +0.5 -0.5 -0.5 +0.5 0.5 0.5 +0.5 0.5 -0.5 +-0.5 0 0 +0.5 0 0 +0 -0.5 0 +0 0.5 0 +0 0 -0.5 +0 0 0.5 + +CELLS 68 268 +1 0 +1 1 +1 2 +1 3 +1 4 +1 5 +1 6 +1 7 +2 1 0 +2 0 2 +2 3 2 +2 1 3 +2 5 4 +2 4 6 +2 7 6 +2 5 7 +2 1 5 +2 0 4 +2 3 7 +2 2 6 +3 1 0 8 +3 8 0 2 +3 8 3 1 +3 2 3 8 +3 5 9 4 +3 9 6 4 +3 9 5 7 +3 6 9 7 +3 0 1 10 +3 10 4 0 +3 10 1 5 +3 5 4 10 +3 2 11 3 +3 11 2 6 +3 11 7 3 +3 7 11 6 +3 12 1 3 +3 5 1 12 +3 3 7 12 +3 12 7 5 +3 13 2 0 +3 4 13 0 +3 2 13 6 +3 13 4 6 +4 10 12 8 9 +4 12 11 8 9 +4 13 8 11 9 +4 8 13 10 9 +4 13 0 10 4 +4 3 1 12 8 +4 12 3 11 7 +4 8 11 3 2 +4 13 2 8 0 +4 1 8 0 10 +4 11 2 13 6 +4 10 1 12 5 +4 6 4 13 9 +4 7 6 11 9 +4 9 4 10 5 +4 9 12 7 5 +4 11 3 12 8 +4 8 1 12 10 +4 2 8 11 13 +4 8 13 0 10 +4 4 10 13 9 +4 13 11 6 9 +4 11 12 7 9 +4 9 10 12 5 + +CELL_TYPES 68 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile new file mode 100644 index 00000000000..9975d631f23 --- /dev/null +++ b/wheeltest.Dockerfile @@ -0,0 +1,29 @@ + + + +FROM ubuntu:24.04 + +ARG python_version=3.12 +ENV python_version_no_dot=${python_version//./} + +RUN apt update -y && apt upgrade -y && \ + apt install -y software-properties-common && \ + add-apt-repository ppa:deadsnakes/ppa && \ + apt update -y && \ + apt install -y python${python_version} python${python_version}-venv python3-pip + +RUN apt install libhdf5-dev -y + +RUN python${python_version} -m venv openmc_venv +ENV PATH=/openmc_venv/bin:$PATH +COPY wheelhouse/openmc-0.15.1.dev0-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl . +RUN python${python_version} -m pip install openmc-0.15.1.dev0-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl[vtk] +RUN python${python_version} -c "import openmc.lib" +COPY minimal_test.py . +COPY small_dagmc_file.h5m . +COPY cross_sections.xml . +COPY Li.h5 . +COPY Li7.h5 . +COPY small_um.vtk . +RUN apt install libxrender1 -y +RUN python${python_version} minimal_test.py \ No newline at end of file From 280f717a3f41e9f402fd4222d9a83b54c8879063 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 4 Jun 2025 14:39:55 +0200 Subject: [PATCH 113/145] [skip ci] generic openmc version --- wheeltest.Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile index 9975d631f23..d053cb4492e 100644 --- a/wheeltest.Dockerfile +++ b/wheeltest.Dockerfile @@ -3,7 +3,10 @@ FROM ubuntu:24.04 -ARG python_version=3.12 +# ARG openmc_version=0.15.1.dev0 +ARG openmc_version=0.15.3 +ARG python_version + ENV python_version_no_dot=${python_version//./} RUN apt update -y && apt upgrade -y && \ @@ -16,8 +19,8 @@ RUN apt install libhdf5-dev -y RUN python${python_version} -m venv openmc_venv ENV PATH=/openmc_venv/bin:$PATH -COPY wheelhouse/openmc-0.15.1.dev0-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl . -RUN python${python_version} -m pip install openmc-0.15.1.dev0-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl[vtk] +COPY wheelhouse/openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl . +RUN python${python_version} -m pip install openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl[vtk] RUN python${python_version} -c "import openmc.lib" COPY minimal_test.py . COPY small_dagmc_file.h5m . From 77abef50cedc10c32ae46c14830d9be802f7287c Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Wed, 4 Jun 2025 14:47:02 +0200 Subject: [PATCH 114/145] [skip ci] adding python dev --- wheeltest.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile index d053cb4492e..30dee0a5edc 100644 --- a/wheeltest.Dockerfile +++ b/wheeltest.Dockerfile @@ -13,7 +13,7 @@ RUN apt update -y && apt upgrade -y && \ apt install -y software-properties-common && \ add-apt-repository ppa:deadsnakes/ppa && \ apt update -y && \ - apt install -y python${python_version} python${python_version}-venv python3-pip + apt install -y python${python_version} python${python_version}-venv python3-pip python${python_version}-dev RUN apt install libhdf5-dev -y From 586a16ca6df1a522e152788080ce3e16b5660868 Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Fri, 18 Jul 2025 13:58:27 +0200 Subject: [PATCH 115/145] returned to python 3.11+ --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 17988187eee..869882b8f69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ authors = [ ] description = "OpenMC" version = "0.15.3" -requires-python = ">=3.10" +requires-python = ">=3.11" license = {file = "LICENSE"} classifiers = [ "Development Status :: 4 - Beta", @@ -21,7 +21,6 @@ classifiers = [ "Topic :: Scientific/Engineering", "Programming Language :: C++", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", From 6cf0eac20578463a6d5aea3be55774488015211e Mon Sep 17 00:00:00 2001 From: Jon Shimwell Date: Thu, 31 Jul 2025 11:53:41 +0200 Subject: [PATCH 116/145] [skip ci] pkg now on pypi --- manylinux.Dockerfile | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index 51f9ab99e59..2e712643534 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -2,8 +2,8 @@ # Dockerfile for building the OpenMC project with support for various dependencies # and configurations. This Dockerfile allows you to build OpenMC with support # for GCC or OpenMPI compilers, along with several libraries like NJOY2016, HDF5, -# NetCDF, MOAB, EMBREE, Double Down, DAGMC, NCrystal, PyBind11, Xtensor, Vectfit, -# libMesh, and MCPL. Each of these dependencies is installed from their respective +# NetCDF, MOAB, EMBREE, Double Down, DAGMC, PyBind11, Xtensor, Vectfit and +# libMesh. Each of these dependencies is installed from their respective # repositories and tags. # The build process is split into stages: @@ -41,8 +41,6 @@ ARG OPENMC_ENABLE_PROFILE="OFF" ARG OPENMC_ENABLE_COVERAGE="OFF" ARG OPENMC_USE_DAGMC="ON" ARG OPENMC_USE_LIBMESH="ON" -ARG OPENMC_USE_MCPL="ON" -ARG OPENMC_USE_NCRYSTAL="OFF" ARG OPENMC_USE_UWUW="OFF" # Configure dependencies tags @@ -58,12 +56,10 @@ ARG MOAB_TAG="5.5.0" ARG EMBREE_TAG="v4.3.3" ARG DD_TAG="v1.1.0" ARG DAGMC_TAG="v3.2.4" -ARG NCrystal_TAG="v3.9.7" ARG PYBIND_TAG="v2.13.6" ARG XTENSOR_PYTHON_TAG="0.27.0" ARG VECTFIT_TAG="master" ARG LIBMESH_TAG="v1.7.7" -ARG MCPL_TAG="v1.6.2" # Base stage @@ -316,16 +312,6 @@ RUN git clone --depth 1 -b ${DAGMC_TAG} https://github.com/svalinn/DAGMC.git dag # cd ../.. && \ # rm -rf libmesh -# Build and install MCPL -# ARG MCPL_TAG -# RUN git clone --depth 1 -b ${MCPL_TAG} https://github.com/mctools/mcpl.git mcpl && \ -# cd mcpl && \ -# mkdir build && cd build && \ -# cmake .. \ -# -DCMAKE_INSTALL_PREFIX=/usr && \ -# make -j$(nproc) && make install && \ -# cd ../.. && \ -# rm -rf mcpl # Download and extract HDF5 data # RUN wget -q -O - https://anl.box.com/shared/static/teaup95cqv8s9nn56hfn7ku8mmelr95p.xz | tar -C $HOME -xJ @@ -391,8 +377,6 @@ ARG OPENMC_ENABLE_PROFILE ARG OPENMC_ENABLE_COVERAGE ARG OPENMC_USE_DAGMC ARG OPENMC_USE_LIBMESH -ARG OPENMC_USE_MCPL -ARG OPENMC_USE_NCRYSTAL ARG OPENMC_USE_UWUW # Copy OpenMC source to docker image @@ -406,8 +390,6 @@ RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] & -DOPENMC_ENABLE_COVERAGE=${OPENMC_ENABLE_COVERAGE}; \ -DOPENMC_USE_DAGMC=${OPENMC_USE_DAGMC}; \ # -DOPENMC_USE_LIBMESH=${OPENMC_USE_LIBMESH}; \ - # -DOPENMC_USE_MCPL=${OPENMC_USE_MCPL}; \ - # -DOPENMC_USE_NCRYSTAL=${OPENMC_USE_NCRYSTAL}; \ -DOPENMC_USE_UWUW=${OPENMC_USE_UWUW}" && \ cd $HOME/openmc && \ python -m build . -w From 3031e19a573a995e26ad9247704c7de35c79b1a5 Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 5 Aug 2025 15:11:51 +0200 Subject: [PATCH 117/145] Revert "Fix Weight Window Infinite Loop Bug (#3457)" This reverts commit 7c6aaf7204163464d13e14a4547b48269a70c3d1. --- include/openmc/particle_data.h | 2 +- src/particle.cpp | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/include/openmc/particle_data.h b/include/openmc/particle_data.h index ec393845f81..3d603dd2979 100644 --- a/include/openmc/particle_data.h +++ b/include/openmc/particle_data.h @@ -47,7 +47,7 @@ struct SourceSite { double time {0.0}; double wgt {1.0}; int delayed_group {0}; - int surf_id {SURFACE_NONE}; + int surf_id {0}; ParticleType particle; // Extra attributes that don't show up in source written to file diff --git a/src/particle.cpp b/src/particle.cpp index 118b084b04e..3f4cb8eef0c 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -104,14 +104,6 @@ void Particle::split(double wgt) bank.u = u(); bank.E = settings::run_CE ? E() : g(); bank.time = time(); - - // Convert signed index to a singed surface ID - if (surface() == SURFACE_NONE) { - bank.surf_id = SURFACE_NONE; - } else { - int surf_id = model::surfaces[surface_index()]->id_; - bank.surf_id = (surface() > 0) ? surf_id : -surf_id; - } } void Particle::from_source(const SourceSite* src) @@ -148,12 +140,6 @@ void Particle::from_source(const SourceSite* src) time() = src->time; time_last() = src->time; parent_nuclide() = src->parent_nuclide; - - // Convert signed surface ID to signed index - if (src->surf_id != SURFACE_NONE) { - int index_plus_one = model::surface_map[std::abs(src->surf_id)] + 1; - surface() = (src->surf_id > 0) ? index_plus_one : -index_plus_one; - } } void Particle::event_calculate_xs() From 3eec63e15c04b1a1b9be777ad941981be06a4e1f Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 5 Aug 2025 16:35:05 +0200 Subject: [PATCH 118/145] no py 3.10 --- manylinux.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index 2e712643534..e4a6a58ec14 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -32,7 +32,7 @@ ARG MANYLINUX_IMAGE=manylinux_2_28_x86_64 ARG COMPILER="gcc" # Configure Python ABI to use -ARG Python_ABI="cp310-cp310" +ARG Python_ABI="cp312-cp312" # OpenMC options ARG OPENMC_USE_OPENMP="ON" From bc1c74a6ccdb712dbf649f6730763fd8b7ea61b1 Mon Sep 17 00:00:00 2001 From: shimwell Date: Wed, 6 Aug 2025 12:54:00 +0200 Subject: [PATCH 119/145] added space --- make_wheels.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 make_wheels.sh diff --git a/make_wheels.sh b/make_wheels.sh new file mode 100644 index 00000000000..633eef66f04 --- /dev/null +++ b/make_wheels.sh @@ -0,0 +1,31 @@ +set -e + +# delete old images +docker rmi openmc_wheel:python3.11 -f +docker rmi openmc_wheel:python3.12 -f +docker rmi openmc_wheel:python3.13 -f + +# build manylinux image +docker build -t openmc -f manylinux.Dockerfile . +docker build --no-cache --build-arg Python_ABI=cp311-cp311 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.11 -f manylinux.Dockerfile . +docker build --no-cache --build-arg Python_ABI=cp312-cp312 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.12 -f manylinux.Dockerfile . +docker build --no-cache --build-arg Python_ABI=cp313-cp313 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.13 -f manylinux.Dockerfile . + +rm -rf wheelhouse +mkdir wheelhouse + +docker create --name openmc_wheel_container_3.11 openmc_wheel:python3.11 +docker cp openmc_wheel_container_3.11:/root/openmc/dist/. wheelhouse +docker rm openmc_wheel_container_3.11 + +docker create --name openmc_wheel_container_3.12 openmc_wheel:python3.12 +docker cp openmc_wheel_container_3.12:/root/openmc/dist/. wheelhouse +docker rm openmc_wheel_container_3.12 + +docker create --name openmc_wheel_container_3.13 openmc_wheel:python3.13 +docker cp openmc_wheel_container_3.13:/root/openmc/dist/. wheelhouse +docker rm openmc_wheel_container_3.13 + +docker build -f wheeltest.Dockerfile --build-arg python_version=3.11 . +docker build -f wheeltest.Dockerfile --build-arg python_version=3.12 . +docker build -f wheeltest.Dockerfile --build-arg python_version=3.13 . \ No newline at end of file From b95aebf1cab3ff97d29832841953eb80b813d3e9 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 30 Oct 2025 17:10:19 +0100 Subject: [PATCH 120/145] added py 14 --- make_wheels.sh | 10 +++++++++- wheeltest.Dockerfile | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/make_wheels.sh b/make_wheels.sh index 633eef66f04..e6f2cfa98b8 100644 --- a/make_wheels.sh +++ b/make_wheels.sh @@ -4,12 +4,15 @@ set -e docker rmi openmc_wheel:python3.11 -f docker rmi openmc_wheel:python3.12 -f docker rmi openmc_wheel:python3.13 -f +docker rmi openmc_wheel:python3.14 -f # build manylinux image docker build -t openmc -f manylinux.Dockerfile . + docker build --no-cache --build-arg Python_ABI=cp311-cp311 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.11 -f manylinux.Dockerfile . docker build --no-cache --build-arg Python_ABI=cp312-cp312 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.12 -f manylinux.Dockerfile . docker build --no-cache --build-arg Python_ABI=cp313-cp313 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.13 -f manylinux.Dockerfile . +docker build --no-cache --build-arg Python_ABI=cp314-cp314 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.14 -f manylinux.Dockerfile . rm -rf wheelhouse mkdir wheelhouse @@ -26,6 +29,11 @@ docker create --name openmc_wheel_container_3.13 openmc_wheel:python3.13 docker cp openmc_wheel_container_3.13:/root/openmc/dist/. wheelhouse docker rm openmc_wheel_container_3.13 +docker create --name openmc_wheel_container_3.14 openmc_wheel:python3.14 +docker cp openmc_wheel_container_3.14:/root/openmc/dist/. wheelhouse +docker rm openmc_wheel_container_3.14 + docker build -f wheeltest.Dockerfile --build-arg python_version=3.11 . docker build -f wheeltest.Dockerfile --build-arg python_version=3.12 . -docker build -f wheeltest.Dockerfile --build-arg python_version=3.13 . \ No newline at end of file +docker build -f wheeltest.Dockerfile --build-arg python_version=3.13 . +docker build -f wheeltest.Dockerfile --build-arg python_version=3.14 . \ No newline at end of file diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile index 30dee0a5edc..e162e0b2250 100644 --- a/wheeltest.Dockerfile +++ b/wheeltest.Dockerfile @@ -20,7 +20,7 @@ RUN apt install libhdf5-dev -y RUN python${python_version} -m venv openmc_venv ENV PATH=/openmc_venv/bin:$PATH COPY wheelhouse/openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl . -RUN python${python_version} -m pip install openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl[vtk] +RUN python${python_version} -m pip install openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl RUN python${python_version} -c "import openmc.lib" COPY minimal_test.py . COPY small_dagmc_file.h5m . From 8a6c727ad17d68d27d778430cbf1fc890a7c7469 Mon Sep 17 00:00:00 2001 From: shimwell Date: Fri, 31 Oct 2025 13:47:24 +0100 Subject: [PATCH 121/145] removed vtk --- manylinux.Dockerfile | 2 +- minimal_test.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manylinux.Dockerfile b/manylinux.Dockerfile index e4a6a58ec14..71850f5d373 100644 --- a/manylinux.Dockerfile +++ b/manylinux.Dockerfile @@ -396,7 +396,7 @@ RUN export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_MPI=$([ ${COMPILER} == 'openmpi' ] & # Install OpenMC wheel RUN python -m pip install \ - "$(echo $HOME/openmc/dist/*.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci,vtk]" + "$(echo $HOME/openmc/dist/*.whl)[$([ ${COMPILER} == 'openmpi' ] && echo 'depletion-mpi,')test,ci]" # Test OpenMC # RUN cd $HOME/openmc && \ diff --git a/minimal_test.py b/minimal_test.py index a737d2886be..48efa2e9531 100644 --- a/minimal_test.py +++ b/minimal_test.py @@ -56,12 +56,12 @@ centroids = umesh_from_sp.centroids mesh_vols = umesh_from_sp.volumes - -umesh_from_sp.write_data_to_vtk( - datasets={'mean': my_tally.mean.flatten()}, - filename = "shape_alpha_production_on_mesh.vtu", -) -umesh_from_sp.write_data_to_vtk( - datasets={'mean': my_tally.mean.flatten()}, - filename = "shape_alpha_production_on_mesh.vtk", -) \ No newline at end of file +#TODO bring back once we have hdfvtk support in openmc +# umesh_from_sp.write_data_to_vtk( +# datasets={'mean': my_tally.mean.flatten()}, +# filename = "shape_alpha_production_on_mesh.vtu", +# ) +# umesh_from_sp.write_data_to_vtk( +# datasets={'mean': my_tally.mean.flatten()}, +# filename = "shape_alpha_production_on_mesh.vtk", +# ) \ No newline at end of file From c7d822190b96db22c3334ef37bcd42848f9c1c3f Mon Sep 17 00:00:00 2001 From: shimwell Date: Fri, 7 Nov 2025 14:18:25 +0100 Subject: [PATCH 122/145] using vtkhdf --- minimal_test.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/minimal_test.py b/minimal_test.py index 48efa2e9531..3eb724b4af6 100644 --- a/minimal_test.py +++ b/minimal_test.py @@ -56,12 +56,13 @@ centroids = umesh_from_sp.centroids mesh_vols = umesh_from_sp.volumes -#TODO bring back once we have hdfvtk support in openmc -# umesh_from_sp.write_data_to_vtk( -# datasets={'mean': my_tally.mean.flatten()}, -# filename = "shape_alpha_production_on_mesh.vtu", -# ) +umesh_from_sp.write_data_to_vtk( + datasets={'mean': my_tally.mean.flatten()}, + filename = "shape_alpha_production_on_mesh.vtkhdf", +) +# vtk and vtk are not used as package does not have optional vtk dependency # umesh_from_sp.write_data_to_vtk( # datasets={'mean': my_tally.mean.flatten()}, # filename = "shape_alpha_production_on_mesh.vtk", +# filename = "shape_alpha_production_on_mesh.vtu", # ) \ No newline at end of file From a0d7f8e20dc5348b895e49f2dc70a18a45dc87f4 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 10:01:30 +0100 Subject: [PATCH 123/145] added github actions --- .github/workflows/build-wheels-linux.yml | 68 +++++++++++++++++++++++ .github/workflows/build-wheels-macos.yml | 71 ++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 .github/workflows/build-wheels-linux.yml create mode 100644 .github/workflows/build-wheels-macos.yml diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml new file mode 100644 index 00000000000..f177bf6b811 --- /dev/null +++ b/.github/workflows/build-wheels-linux.yml @@ -0,0 +1,68 @@ +name: Build Linux Wheels + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11", "3.12", "3.13"] + include: + - python-version: "3.11" + python-abi: "cp311-cp311" + - python-version: "3.12" + python-abi: "cp312-cp312" + - python-version: "3.13" + python-abi: "cp313-cp313" + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build wheel in Docker + run: | + docker build --no-cache \ + --build-arg Python_ABI=${{ matrix.python-abi }} \ + --build-arg OPENMC_USE_DAGMC=ON \ + -t openmc_wheel:python${{ matrix.python-version }} \ + -f manylinux.Dockerfile . + + - name: Extract wheel from container + run: | + mkdir -p wheelhouse + docker create --name wheel_container openmc_wheel:python${{ matrix.python-version }} + docker cp wheel_container:/root/openmc/dist/. wheelhouse + docker rm wheel_container + ls -la wheelhouse/ + + - name: Upload wheel + uses: actions/upload-artifact@v4 + with: + name: linux-wheel-${{ matrix.python-version }} + path: wheelhouse/*manylinux*.whl + + test: + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11", "3.12", "3.13"] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download wheels + uses: actions/download-artifact@v4 + with: + path: wheelhouse + merge-multiple: true + + - name: Test wheel + run: | + docker build \ + -f wheeltest.Dockerfile \ + --build-arg python_version=${{ matrix.python-version }} \ + . diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml new file mode 100644 index 00000000000..999aa036caf --- /dev/null +++ b/.github/workflows/build-wheels-macos.yml @@ -0,0 +1,71 @@ +name: Build macOS ARM Wheels + +on: + workflow_dispatch: + +jobs: + build: + runs-on: macos-14 + strategy: + matrix: + python-version: ["3.11", "3.12", "3.13"] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install system dependencies + run: | + brew install hdf5 cmake + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Python build tools + run: | + pip install build delocate + + - name: Build wheel + run: | + export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=OFF;-DOPENMC_USE_LIBMESH=OFF;-DOPENMC_USE_MPI=OFF;-DHDF5_ROOT=$(brew --prefix hdf5)" + python -m build . -w + + - name: Repair wheel + run: | + delocate-wheel -w wheelhouse dist/openmc-*.whl + ls -la wheelhouse/ + + - name: Upload wheel + uses: actions/upload-artifact@v4 + with: + name: macos-arm-wheel-${{ matrix.python-version }} + path: wheelhouse/*.whl + + test: + needs: build + runs-on: macos-14 + strategy: + matrix: + python-version: ["3.11", "3.12", "3.13"] + + steps: + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Download wheel + uses: actions/download-artifact@v4 + with: + name: macos-arm-wheel-${{ matrix.python-version }} + path: wheelhouse + + - name: Test wheel + run: | + python -m venv test_env + source test_env/bin/activate + pip install wheelhouse/openmc-*.whl + python -c "import openmc.lib; print('openmc.lib imported successfully')" + openmc --version From 9ecfda36748d4b75ed0307f4920aa7bc37d34b98 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 10:11:06 +0100 Subject: [PATCH 124/145] trigger on push --- .github/workflows/build-wheels-linux.yml | 1 + .github/workflows/build-wheels-macos.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index f177bf6b811..70e6f44df10 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -1,6 +1,7 @@ name: Build Linux Wheels on: + push: workflow_dispatch: jobs: diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 999aa036caf..fd080a12e0d 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -1,6 +1,7 @@ name: Build macOS ARM Wheels on: + push: workflow_dispatch: jobs: From 7f41a3f0d435689fdfa16a530c97821f8b4e8bf7 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 10:30:33 +0100 Subject: [PATCH 125/145] remove mpi for mac --- .github/workflows/build-wheels-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index fd080a12e0d..2fed1da411a 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -30,7 +30,7 @@ jobs: - name: Build wheel run: | - export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=OFF;-DOPENMC_USE_LIBMESH=OFF;-DOPENMC_USE_MPI=OFF;-DHDF5_ROOT=$(brew --prefix hdf5)" + export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=OFF;-DOPENMC_USE_LIBMESH=OFF;-DOPENMC_USE_MPI=OFF;-DOPENMC_USE_OPENMP=OFF;-DHDF5_ROOT=$(brew --prefix hdf5)" python -m build . -w - name: Repair wheel From 403e599e14d90f8ac8c77288f46cd7709d08ce2b Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 10:58:39 +0100 Subject: [PATCH 126/145] adding dag to mac --- .github/workflows/build-wheels-macos.yml | 43 ++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 2fed1da411a..32a20ac9ec3 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -4,6 +4,11 @@ on: push: workflow_dispatch: +env: + MOAB_TAG: "5.5.0" + DAGMC_TAG: "v3.2.4" + DEP_PREFIX: /usr/local/openmc_deps + jobs: build: runs-on: macos-14 @@ -17,7 +22,41 @@ jobs: - name: Install system dependencies run: | - brew install hdf5 cmake + brew install hdf5 cmake netcdf + + - name: Build MOAB + run: | + git clone --depth 1 -b ${{ env.MOAB_TAG }} https://bitbucket.org/fathomteam/moab.git + cd moab + mkdir build && cd build + cmake .. \ + -DCMAKE_INSTALL_PREFIX=${{ env.DEP_PREFIX }} \ + -DENABLE_MPI=OFF \ + -DENABLE_HDF5=ON \ + -DHDF5_ROOT=$(brew --prefix hdf5) \ + -DENABLE_NETCDF=ON \ + -DNETCDF_ROOT=$(brew --prefix netcdf) \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_BLASLAPACK=OFF \ + -DENABLE_PYMOAB=OFF + make -j$(sysctl -n hw.ncpu) + make install + + - name: Build DAGMC + run: | + git clone --depth 1 -b ${{ env.DAGMC_TAG }} https://github.com/svalinn/DAGMC.git + cd DAGMC + mkdir build && cd build + cmake .. \ + -DCMAKE_INSTALL_PREFIX=${{ env.DEP_PREFIX }} \ + -DMOAB_DIR=${{ env.DEP_PREFIX }} \ + -DDOUBLE_DOWN=OFF \ + -DBUILD_TALLY=ON \ + -DBUILD_UWUW=ON \ + -DBUILD_STATIC_LIBS=OFF \ + -DBUILD_RPATH=OFF + make -j$(sysctl -n hw.ncpu) + make install - name: Set up Python uses: actions/setup-python@v5 @@ -30,7 +69,7 @@ jobs: - name: Build wheel run: | - export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=OFF;-DOPENMC_USE_LIBMESH=OFF;-DOPENMC_USE_MPI=OFF;-DOPENMC_USE_OPENMP=OFF;-DHDF5_ROOT=$(brew --prefix hdf5)" + export SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=ON;-DOPENMC_USE_LIBMESH=OFF;-DOPENMC_USE_MPI=OFF;-DOPENMC_USE_OPENMP=OFF;-DHDF5_ROOT=$(brew --prefix hdf5);-DCMAKE_PREFIX_PATH=${{ env.DEP_PREFIX }}" python -m build . -w - name: Repair wheel From 019b2f131bd1f36d2b28aff3940a1a1443e2fdd9 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:06:03 +0100 Subject: [PATCH 127/145] added version --- wheeltest.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile index e162e0b2250..3372e9069a7 100644 --- a/wheeltest.Dockerfile +++ b/wheeltest.Dockerfile @@ -29,4 +29,5 @@ COPY Li.h5 . COPY Li7.h5 . COPY small_um.vtk . RUN apt install libxrender1 -y +RUN openmc --version || echo "openmc --version exit code: $?" RUN python${python_version} minimal_test.py \ No newline at end of file From 149350998512c52158822e076922499ac6501a82 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:09:39 +0100 Subject: [PATCH 128/145] pinned cmake as moab is not compatible with newer cmake versions --- .github/workflows/build-wheels-macos.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 32a20ac9ec3..c92fcbaa8b6 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -22,7 +22,8 @@ jobs: - name: Install system dependencies run: | - brew install hdf5 cmake netcdf + brew install hdf5 netcdf + pip install cmake==3.31.6 - name: Build MOAB run: | From 4a95e6bac44a51c3b0d4375385ab5c8b416cecab Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:14:40 +0100 Subject: [PATCH 129/145] moab 5.6.0 perhaps better? --- .github/workflows/build-wheels-macos.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index c92fcbaa8b6..04fc4863bcd 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: env: - MOAB_TAG: "5.5.0" + MOAB_TAG: "5.6.0" DAGMC_TAG: "v3.2.4" DEP_PREFIX: /usr/local/openmc_deps @@ -23,7 +23,7 @@ jobs: - name: Install system dependencies run: | brew install hdf5 netcdf - pip install cmake==3.31.6 + pip install cmake - name: Build MOAB run: | From 4534f07d9c72ede44ef852f9a24c488a4f34bb8a Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:17:35 +0100 Subject: [PATCH 130/145] remove fortran --- .github/workflows/build-wheels-macos.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 04fc4863bcd..135b0b3172a 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -33,6 +33,7 @@ jobs: cmake .. \ -DCMAKE_INSTALL_PREFIX=${{ env.DEP_PREFIX }} \ -DENABLE_MPI=OFF \ + -DENABLE_FORTRAN=OFF \ -DENABLE_HDF5=ON \ -DHDF5_ROOT=$(brew --prefix hdf5) \ -DENABLE_NETCDF=ON \ From 715295fbf4410fa435a285428e5ba63cbee36031 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:29:53 +0100 Subject: [PATCH 131/145] moab compile again being fussy --- .github/workflows/build-wheels-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 135b0b3172a..e74426d90b7 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -37,7 +37,7 @@ jobs: -DENABLE_HDF5=ON \ -DHDF5_ROOT=$(brew --prefix hdf5) \ -DENABLE_NETCDF=ON \ - -DNETCDF_ROOT=$(brew --prefix netcdf) \ + -DNETCDF_DIR=$(brew --prefix netcdf) \ -DBUILD_SHARED_LIBS=ON \ -DENABLE_BLASLAPACK=OFF \ -DENABLE_PYMOAB=OFF From 108c8551c7383f34b1100eaffc12d2694c3250da Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 11:55:26 +0100 Subject: [PATCH 132/145] netcdf moab finding --- .github/workflows/build-wheels-macos.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index e74426d90b7..8f3a02628f4 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -37,7 +37,6 @@ jobs: -DENABLE_HDF5=ON \ -DHDF5_ROOT=$(brew --prefix hdf5) \ -DENABLE_NETCDF=ON \ - -DNETCDF_DIR=$(brew --prefix netcdf) \ -DBUILD_SHARED_LIBS=ON \ -DENABLE_BLASLAPACK=OFF \ -DENABLE_PYMOAB=OFF From 8ffb775f1ef42e167d3797a01f5078425048b46c Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 12:19:47 +0100 Subject: [PATCH 133/145] removed netcdf --- .github/workflows/build-wheels-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 8f3a02628f4..9924eb8e963 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -36,7 +36,7 @@ jobs: -DENABLE_FORTRAN=OFF \ -DENABLE_HDF5=ON \ -DHDF5_ROOT=$(brew --prefix hdf5) \ - -DENABLE_NETCDF=ON \ + -DENABLE_NETCDF=OFF \ -DBUILD_SHARED_LIBS=ON \ -DENABLE_BLASLAPACK=OFF \ -DENABLE_PYMOAB=OFF From 32874eab561c74787d4450776dce67634f67f755 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 13:01:48 +0100 Subject: [PATCH 134/145] fixing moab compile (again) --- .github/workflows/build-wheels-macos.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 9924eb8e963..cbde4c95b19 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -27,6 +27,7 @@ jobs: - name: Build MOAB run: | + sudo mkdir -p ${{ env.DEP_PREFIX }} git clone --depth 1 -b ${{ env.MOAB_TAG }} https://bitbucket.org/fathomteam/moab.git cd moab mkdir build && cd build @@ -41,7 +42,7 @@ jobs: -DENABLE_BLASLAPACK=OFF \ -DENABLE_PYMOAB=OFF make -j$(sysctl -n hw.ncpu) - make install + sudo make install - name: Build DAGMC run: | @@ -57,7 +58,7 @@ jobs: -DBUILD_STATIC_LIBS=OFF \ -DBUILD_RPATH=OFF make -j$(sysctl -n hw.ncpu) - make install + sudo make install - name: Set up Python uses: actions/setup-python@v5 From ec8486a64d47ef2a28414f423a0557e063ed31a5 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 14:03:19 +0100 Subject: [PATCH 135/145] added eigen --- .github/workflows/build-wheels-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index cbde4c95b19..138a22ffee1 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -22,7 +22,7 @@ jobs: - name: Install system dependencies run: | - brew install hdf5 netcdf + brew install hdf5 netcdf eigen pip install cmake - name: Build MOAB From 6232293c7d1e4dfd77a5975f5f1aa75061b90aa3 Mon Sep 17 00:00:00 2001 From: shimwell Date: Thu, 26 Feb 2026 14:07:42 +0100 Subject: [PATCH 136/145] simpler dag build --- .github/workflows/build-wheels-macos.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 138a22ffee1..e12211d5b81 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -53,8 +53,8 @@ jobs: -DCMAKE_INSTALL_PREFIX=${{ env.DEP_PREFIX }} \ -DMOAB_DIR=${{ env.DEP_PREFIX }} \ -DDOUBLE_DOWN=OFF \ - -DBUILD_TALLY=ON \ - -DBUILD_UWUW=ON \ + -DBUILD_TALLY=OFF \ + -DBUILD_UWUW=OFF \ -DBUILD_STATIC_LIBS=OFF \ -DBUILD_RPATH=OFF make -j$(sysctl -n hw.ncpu) From 1e1546b91483812e197c4f0aa946f5935b5f3137 Mon Sep 17 00:00:00 2001 From: shimwell Date: Sat, 28 Feb 2026 10:08:47 +0100 Subject: [PATCH 137/145] moving docker to action --- .github/workflows/build-wheels-linux.yml | 45 ++++++++---------------- pyproject.toml | 14 ++++++++ wheeltest.Dockerfile | 2 -- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index 70e6f44df10..224dca7da5a 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -7,42 +7,24 @@ on: jobs: build: runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13"] - include: - - python-version: "3.11" - python-abi: "cp311-cp311" - - python-version: "3.12" - python-abi: "cp312-cp312" - - python-version: "3.13" - python-abi: "cp313-cp313" + timeout-minutes: 120 steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 # needed for setuptools_scm - - name: Build wheel in Docker - run: | - docker build --no-cache \ - --build-arg Python_ABI=${{ matrix.python-abi }} \ - --build-arg OPENMC_USE_DAGMC=ON \ - -t openmc_wheel:python${{ matrix.python-version }} \ - -f manylinux.Dockerfile . - - - name: Extract wheel from container - run: | - mkdir -p wheelhouse - docker create --name wheel_container openmc_wheel:python${{ matrix.python-version }} - docker cp wheel_container:/root/openmc/dist/. wheelhouse - docker rm wheel_container - ls -la wheelhouse/ + - name: Build wheels with cibuildwheel + uses: pypa/cibuildwheel@v2.22 + env: + CIBW_PLATFORM: linux - - name: Upload wheel + - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: linux-wheel-${{ matrix.python-version }} - path: wheelhouse/*manylinux*.whl + name: linux-wheels + path: wheelhouse/*.whl test: needs: build @@ -58,10 +40,13 @@ jobs: - name: Download wheels uses: actions/download-artifact@v4 with: + name: linux-wheels path: wheelhouse - merge-multiple: true - - name: Test wheel + - name: List wheels + run: ls -la wheelhouse/ + + - name: Test wheel in Docker run: | docker build \ -f wheeltest.Dockerfile \ diff --git a/pyproject.toml b/pyproject.toml index 7b2018324b1..843e15fc082 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,3 +73,17 @@ wheel.packages = ["openmc"] [tool.setuptools_scm] fallback_version = "0.15.2" + +# --------------------------------------------------------------------------- +# cibuildwheel +# --------------------------------------------------------------------------- +[tool.cibuildwheel] +build = ["cp311-manylinux_x86_64", "cp312-manylinux_x86_64", "cp313-manylinux_x86_64"] +skip = ["*-musllinux*"] + +[tool.cibuildwheel.linux] +manylinux-x86_64-image = "manylinux_2_28" +before-all = "bash {project}/tools/ci/cibw_before_all_linux.sh" +environment = { SKBUILD_CMAKE_ARGS="-DOPENMC_USE_DAGMC=ON;-DOPENMC_USE_OPENMP=ON;-DOPENMC_USE_MPI=OFF;-DOPENMC_USE_UWUW=OFF;-DOPENMC_USE_LIBMESH=OFF" } +repair-wheel-command = "auditwheel repair -w {dest_dir} {wheel}" +test-command = "openmc --version && python -c \"import openmc; import openmc.lib\"" diff --git a/wheeltest.Dockerfile b/wheeltest.Dockerfile index 3372e9069a7..78f4c7b1b33 100644 --- a/wheeltest.Dockerfile +++ b/wheeltest.Dockerfile @@ -15,8 +15,6 @@ RUN apt update -y && apt upgrade -y && \ apt update -y && \ apt install -y python${python_version} python${python_version}-venv python3-pip python${python_version}-dev -RUN apt install libhdf5-dev -y - RUN python${python_version} -m venv openmc_venv ENV PATH=/openmc_venv/bin:$PATH COPY wheelhouse/openmc-${openmc_version}-cp${python_version_no_dot}-cp${python_version_no_dot}-manylinux_2_28_x86_64.whl . From be085c91605256452e55936e00be5a6f2f5330b7 Mon Sep 17 00:00:00 2001 From: shimwell Date: Sat, 28 Feb 2026 10:09:18 +0100 Subject: [PATCH 138/145] added before docker --- tools/ci/cibw_before_all_linux.sh | 155 ++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100755 tools/ci/cibw_before_all_linux.sh diff --git a/tools/ci/cibw_before_all_linux.sh b/tools/ci/cibw_before_all_linux.sh new file mode 100755 index 00000000000..88c1eb89e3c --- /dev/null +++ b/tools/ci/cibw_before_all_linux.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# Build all native dependencies for OpenMC wheels inside the manylinux container. +# This script is called by cibuildwheel's before-all hook. +set -ex + +# --------------------------------------------------------------------------- +# System packages +# --------------------------------------------------------------------------- +yum install -y epel-release +yum config-manager --enable epel +yum install -y \ + wget git gcc gcc-c++ gcc-gfortran make \ + zlib-devel curl-devel eigen3-devel lapack-devel \ + libpng-devel pugixml-devel fmt-devel + +# Ensure a recent cmake +pipx uninstall cmake 2>/dev/null || true +pipx install cmake==3.31.6 + +export CC=gcc +export CXX=g++ +export FC=gfortran + +NPROC=$(nproc) + +# --------------------------------------------------------------------------- +# HDF5 +# --------------------------------------------------------------------------- +cd /tmp +git clone --depth 1 -b hdf5_1.14.4.3 https://github.com/HDFGroup/hdf5.git +cd hdf5 && mkdir build && cd build +cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DHDF5_ENABLE_PARALLEL=OFF \ + -DHDF5_BUILD_HL_LIB=ON \ + -DBUILD_SHARED_LIBS=ON +make -j"$NPROC" && make install +cd /tmp && rm -rf hdf5 + +# --------------------------------------------------------------------------- +# NetCDF +# --------------------------------------------------------------------------- +git clone --depth 1 -b v4.9.3 https://github.com/Unidata/netcdf-c.git +cd netcdf-c && mkdir build && cd build +cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_DAP=ON \ + -DENABLE_TESTS=OFF +make -j"$NPROC" && make install +cd /tmp && rm -rf netcdf-c + +# --------------------------------------------------------------------------- +# MOAB +# --------------------------------------------------------------------------- +git clone --depth 1 -b 5.5.0 https://bitbucket.org/fathomteam/moab.git +cd moab && mkdir build && cd build +cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_MPI=OFF \ + -DENABLE_HDF5=ON \ + -DHDF5_ROOT=/usr \ + -DENABLE_NETCDF=ON \ + -DNETCDF_ROOT=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DENABLE_BLASLAPACK=OFF \ + -DENABLE_PYMOAB=OFF +make -j"$NPROC" && make install +cd /tmp && rm -rf moab + +# --------------------------------------------------------------------------- +# gsl-lite (header-only) +# --------------------------------------------------------------------------- +git clone --depth 1 -b v0.41.0 https://github.com/gsl-lite/gsl-lite.git +cd gsl-lite && mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make install +cd /tmp && rm -rf gsl-lite + +# --------------------------------------------------------------------------- +# xtl +# --------------------------------------------------------------------------- +git clone --depth 1 -b 0.7.7 https://github.com/xtensor-stack/xtl.git +cd xtl && mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make install +cd /tmp && rm -rf xtl + +# --------------------------------------------------------------------------- +# xtensor +# --------------------------------------------------------------------------- +git clone --depth 1 -b 0.25.0 https://github.com/xtensor-stack/xtensor.git +cd xtensor && mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make install +cd /tmp && rm -rf xtensor + +# --------------------------------------------------------------------------- +# xtensor-blas +# --------------------------------------------------------------------------- +git clone --depth 1 -b 0.21.0 https://github.com/xtensor-stack/xtensor-blas.git +cd xtensor-blas && mkdir build && cd build +cmake .. +make install +cd /tmp && rm -rf xtensor-blas + +# --------------------------------------------------------------------------- +# Catch2 +# --------------------------------------------------------------------------- +git clone --depth 1 -b v3.7.1 https://github.com/catchorg/Catch2.git +cd Catch2 && mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make -j"$NPROC" && make install +cd /tmp && rm -rf Catch2 + +# --------------------------------------------------------------------------- +# Embree +# --------------------------------------------------------------------------- +git clone --depth 1 -b v4.3.3 https://github.com/embree/embree.git +cd embree && mkdir build && cd build +cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DEMBREE_TASKING_SYSTEM=INTERNAL \ + -DEMBREE_ISPC_SUPPORT=OFF \ + -DEMBREE_TUTORIALS=OFF +make -j"$NPROC" && make install +cd /tmp && rm -rf embree + +# --------------------------------------------------------------------------- +# Double-Down +# --------------------------------------------------------------------------- +git clone --depth 1 -b v1.1.0 https://github.com/pshriwise/double-down.git +cd double-down && mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make -j"$NPROC" && make install +cd /tmp && rm -rf double-down + +# --------------------------------------------------------------------------- +# DAGMC +# --------------------------------------------------------------------------- +git clone --depth 1 -b v3.2.4 https://github.com/svalinn/DAGMC.git +cd DAGMC && mkdir build && cd build +cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMOAB_DIR=/usr \ + -Ddd_ROOT=/usr \ + -DBUILD_TALLY=ON \ + -DBUILD_UWUW=ON \ + -DDOUBLE_DOWN=ON \ + -DBUILD_STATIC_LIBS=OFF \ + -DBUILD_RPATH=OFF +make -j"$NPROC" && make install +cd /tmp && rm -rf DAGMC + +echo "All dependencies built successfully." From cabd7ce6fc0359a69a8e76b803d048198e382b8d Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 3 Mar 2026 17:57:26 +0100 Subject: [PATCH 139/145] merge conflict solved --- pyproject.toml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 27baba52a4a..51b6627950d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,23 +64,12 @@ Documentation = "https://docs.openmc.org" Repository = "https://github.com/openmc-dev/openmc" Issues = "https://github.com/openmc-dev/openmc/issues" -<<<<<<< HEAD # Scikit-Build Configuration [tool.scikit-build] build.verbose = true logging.level = "INFO" wheel.install-dir = "openmc" wheel.packages = ["openmc"] -======= -[tool.setuptools.packages.find] -include = ['openmc*'] -exclude = ['tests*'] - -[tool.setuptools.package-data] -"openmc.data.dose" = ["**/*.txt"] -"openmc.data" = ["*.txt", "*.DAT", "*.json", "*.h5"] -"openmc.lib" = ["libopenmc.dylib", "libopenmc.so"] ->>>>>>> develop [tool.setuptools_scm] fallback_version = "0.15.2" From b3407069b4c18a1d3cd2663fbb9fef67ad61a01e Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 3 Mar 2026 18:27:21 +0100 Subject: [PATCH 140/145] python 3.12 or above --- .github/workflows/build-wheels-linux.yml | 2 +- .github/workflows/build-wheels-macos.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index 224dca7da5a..f8a336df224 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.12", "3.13", "3.14"] steps: - name: Checkout diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index e12211d5b81..90d4453e800 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -14,7 +14,7 @@ jobs: runs-on: macos-14 strategy: matrix: - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.12", "3.13", "3.14"] steps: - name: Checkout @@ -90,7 +90,7 @@ jobs: runs-on: macos-14 strategy: matrix: - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.12", "3.13", "3.14"] steps: - name: Set up Python From f1326fb76a758dba3edcdb7b7c72d63a273acb64 Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 3 Mar 2026 19:08:50 +0100 Subject: [PATCH 141/145] no py 3.14 linux --- .github/workflows/build-wheels-linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index f8a336df224..3822423e7d4 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13"] steps: - name: Checkout From 6704e4786a743611baac5d693943f67f7479ee47 Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 17 Mar 2026 11:30:53 +0100 Subject: [PATCH 142/145] py3.12 --- make_wheels.sh | 9 +-------- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/make_wheels.sh b/make_wheels.sh index e6f2cfa98b8..126230fa6e6 100644 --- a/make_wheels.sh +++ b/make_wheels.sh @@ -1,7 +1,6 @@ set -e # delete old images -docker rmi openmc_wheel:python3.11 -f docker rmi openmc_wheel:python3.12 -f docker rmi openmc_wheel:python3.13 -f docker rmi openmc_wheel:python3.14 -f @@ -9,7 +8,6 @@ docker rmi openmc_wheel:python3.14 -f # build manylinux image docker build -t openmc -f manylinux.Dockerfile . -docker build --no-cache --build-arg Python_ABI=cp311-cp311 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.11 -f manylinux.Dockerfile . docker build --no-cache --build-arg Python_ABI=cp312-cp312 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.12 -f manylinux.Dockerfile . docker build --no-cache --build-arg Python_ABI=cp313-cp313 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.13 -f manylinux.Dockerfile . docker build --no-cache --build-arg Python_ABI=cp314-cp314 --build-arg=OPENMC_USE_DAGMC=ON -t openmc_wheel:python3.14 -f manylinux.Dockerfile . @@ -17,10 +15,6 @@ docker build --no-cache --build-arg Python_ABI=cp314-cp314 --build-arg=OPENMC_US rm -rf wheelhouse mkdir wheelhouse -docker create --name openmc_wheel_container_3.11 openmc_wheel:python3.11 -docker cp openmc_wheel_container_3.11:/root/openmc/dist/. wheelhouse -docker rm openmc_wheel_container_3.11 - docker create --name openmc_wheel_container_3.12 openmc_wheel:python3.12 docker cp openmc_wheel_container_3.12:/root/openmc/dist/. wheelhouse docker rm openmc_wheel_container_3.12 @@ -33,7 +27,6 @@ docker create --name openmc_wheel_container_3.14 openmc_wheel:python3.14 docker cp openmc_wheel_container_3.14:/root/openmc/dist/. wheelhouse docker rm openmc_wheel_container_3.14 -docker build -f wheeltest.Dockerfile --build-arg python_version=3.11 . docker build -f wheeltest.Dockerfile --build-arg python_version=3.12 . docker build -f wheeltest.Dockerfile --build-arg python_version=3.13 . -docker build -f wheeltest.Dockerfile --build-arg python_version=3.14 . \ No newline at end of file +docker build -f wheeltest.Dockerfile --build-arg python_version=3.14 . diff --git a/pyproject.toml b/pyproject.toml index 51b6627950d..dc5d27ab84c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,7 @@ fallback_version = "0.15.2" # cibuildwheel # --------------------------------------------------------------------------- [tool.cibuildwheel] -build = ["cp311-manylinux_x86_64", "cp312-manylinux_x86_64", "cp313-manylinux_x86_64"] +build = ["cp312-manylinux_x86_64", "cp313-manylinux_x86_64"] skip = ["*-musllinux*"] [tool.cibuildwheel.linux] From 3a5350fc1f38f72b77352901e717645352168d4c Mon Sep 17 00:00:00 2001 From: shimwell Date: Tue, 17 Mar 2026 12:18:52 +0100 Subject: [PATCH 143/145] py3.14 --- .github/workflows/build-wheels-linux.yml | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index 3822423e7d4..f8a336df224 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.12", "3.13"] + python-version: ["3.12", "3.13", "3.14"] steps: - name: Checkout diff --git a/pyproject.toml b/pyproject.toml index dc5d27ab84c..5c562b5a942 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,7 @@ fallback_version = "0.15.2" # cibuildwheel # --------------------------------------------------------------------------- [tool.cibuildwheel] -build = ["cp312-manylinux_x86_64", "cp313-manylinux_x86_64"] +build = ["cp312-manylinux_x86_64", "cp313-manylinux_x86_64", "cp314-manylinux_x86_64"] skip = ["*-musllinux*"] [tool.cibuildwheel.linux] From 04345024e264c44cf08cb52da3ec9ea5040126cd Mon Sep 17 00:00:00 2001 From: shimwell Date: Sun, 5 Apr 2026 01:49:25 +0200 Subject: [PATCH 144/145] added zlib to ci --- .github/workflows/build-wheels-macos.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 90d4453e800..b41bfd3452c 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -22,7 +22,7 @@ jobs: - name: Install system dependencies run: | - brew install hdf5 netcdf eigen + brew install hdf5 netcdf eigen zlib pip install cmake - name: Build MOAB @@ -56,7 +56,8 @@ jobs: -DBUILD_TALLY=OFF \ -DBUILD_UWUW=OFF \ -DBUILD_STATIC_LIBS=OFF \ - -DBUILD_RPATH=OFF + -DBUILD_RPATH=OFF \ + -DCMAKE_PREFIX_PATH=$(brew --prefix zlib) make -j$(sysctl -n hw.ncpu) sudo make install From 1875d8fe8cd83035927e7021bf33d2a77bdd5c84 Mon Sep 17 00:00:00 2001 From: shimwell Date: Sun, 5 Apr 2026 21:46:04 +0200 Subject: [PATCH 145/145] updated cibuildwheel --- .github/workflows/build-wheels-linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index f8a336df224..1bd3c9ea6cd 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -16,7 +16,7 @@ jobs: fetch-depth: 0 # needed for setuptools_scm - name: Build wheels with cibuildwheel - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v3.4.1 env: CIBW_PLATFORM: linux