Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
2a439b4
updates for using cmakeupdates
sjunges Jun 1, 2025
c94cecd
Merge branch 'setup' into scikit
sjunges Jun 1, 2025
22d7b51
version and rpath
sjunges Jun 2, 2025
95304a4
for fetch, storm has gspn, dft, pars, etc.
sjunges Jun 3, 2025
c295c19
add cibuldwheel example
lukovdm Jun 3, 2025
55aa1fc
new pybind version
lukovdm Jun 3, 2025
b22248f
disable patch pybind
lukovdm Jun 3, 2025
679f399
add dependecy installs to linux wheel
lukovdm Jun 3, 2025
3f72b84
fix dep in wheel
lukovdm Jun 3, 2025
76400d4
test
lukovdm Jun 3, 2025
320bc56
test
lukovdm Jun 3, 2025
9b43d41
disable patch pybind
lukovdm Jun 3, 2025
25d62de
add macos deps
lukovdm Jun 3, 2025
6b374b2
better linux and macos setup
lukovdm Jun 3, 2025
166b152
make before all linux executable
lukovdm Jun 3, 2025
a569f8e
fix xcode issues and use old boost
lukovdm Jun 3, 2025
97ca9d8
fix macos xcode version
lukovdm Jun 3, 2025
3ba9235
fix xcode again and change repair wheel for linux
lukovdm Jun 4, 2025
7553edd
fix macos-arm hopefully
lukovdm Jun 4, 2025
7b29574
fix macos
lukovdm Jun 4, 2025
fd87cda
change xcode version on arm
lukovdm Jun 4, 2025
b794de5
remove compat again from macos
lukovdm Jun 4, 2025
b4c3b2a
fix portable
lukovdm Jun 4, 2025
14f38f4
change xcode repair command
lukovdm Jun 4, 2025
064d386
add cmake portable args and move to pyproject.toml
lukovdm Jun 4, 2025
63c1ba0
remove universal arch
lukovdm Jun 4, 2025
e01ecc4
change python version
lukovdm Jun 5, 2025
4aa7697
debug repair wheel info
lukovdm Jun 5, 2025
5c9076d
better debug
lukovdm Jun 5, 2025
2451d5f
better debug linux
lukovdm Jun 6, 2025
007da3b
also run repair
lukovdm Jun 6, 2025
9cd8dd2
update storm version for fetch
sjunges Jun 6, 2025
61c9058
updates rpath
sjunges Jun 6, 2025
81b068e
Merge branch 'scikit' of github.com:sjunges/stormpy into cibuildwheel
lukovdm Jun 6, 2025
ca71e7f
Merge pull request #1 from lukovdm/cibuildwheel
sjunges Jun 6, 2025
59c1175
update rpaths
sjunges Jun 6, 2025
1392502
Merge branch 'scikit' of https://github.com/sjunges/stormpy into scikit
sjunges Jun 6, 2025
8b66a2a
update storm version to one without binaries
sjunges Jun 6, 2025
8ac3e2c
Merge branch 'master' into scikit
sjunges Jun 6, 2025
a418583
new storm version
sjunges Jun 6, 2025
f1903f3
Merge branch 'scikit' of https://github.com/sjunges/stormpy into scikit
sjunges Jun 6, 2025
29d55a8
some updates after a succesful run
sjunges Jun 6, 2025
4745894
only x86, reduce python versions to build quicker
sjunges Jun 6, 2025
cfc2931
update xcode version to 15.4
sjunges Jun 6, 2025
e8f999b
also use another macosx version for arm
sjunges Jun 6, 2025
5e6ed29
skip musl on linux for now
sjunges Jun 7, 2025
0378680
fix
sjunges Jun 7, 2025
5ff6f02
dependency vars
sjunges Jun 7, 2025
1a89e53
skip musl in toml file
sjunges Jun 7, 2025
4ea6af2
macosx target updated
sjunges Jun 7, 2025
d858f88
allow spot, always fetch
sjunges Jun 9, 2025
0037d39
use newest storm
sjunges Jun 9, 2025
105ad7d
test wheel in distros
lukovdm Jun 10, 2025
10b5742
correct docker testing of wheels
lukovdm Jun 10, 2025
0012936
fix matrix distro
lukovdm Jun 10, 2025
cdc6f7b
change distros
lukovdm Jun 11, 2025
0189eaa
Allow Storm system version, storm dir hint and reverted to old pybind…
volkm Jun 12, 2025
ca92bbf
Small changes in wheelpypi CI
volkm Jun 12, 2025
f9c6750
Use pybind version 2.12.1
volkm Jun 12, 2025
112bfa4
Add numpy as dependency to tests
volkm Jun 12, 2025
7d07cbb
Merge pull request #2 from lukovdm/cibuildwheel
sjunges Jun 14, 2025
59af011
better todo message
sjunges Jun 14, 2025
db2d839
Merge branch 'scikit' of https://github.com/sjunges/stormpy into scikit
sjunges Jun 14, 2025
7c4a2e9
Run wheelpyip tests weekly
volkm Jun 16, 2025
4048267
Updated Dockerfiles
volkm Jun 16, 2025
473e933
ALLOW_STORM_SYSTEM=ON
volkm Jun 16, 2025
07840d0
Consistent naming in buildtest
volkm Jun 16, 2025
f3baf1d
CI tests for fetching Storm
volkm Jun 16, 2025
0a0dab5
Wheel tests for macOS
volkm Jun 16, 2025
fcbcd1e
Set correct deploy target in wheelpypi
volkm Jun 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/Dockerfile.fetch
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Base Dockerfile for using stormpy
###################################
# The Docker image can be built by executing:
# docker build -t yourusername/stormpy .
# A different Linux base image can be set from the commandline with:
# --build-arg BASE_IMAGE=<new_base_image>

# Set base image
ARG BASE_IMAGE=movesrwth/storm:stable
FROM $BASE_IMAGE
LABEL org.opencontainers.image.authors="dev@stormchecker.org"


# Configuration arguments
#########################
# The arguments can be set from the commandline with:
# --build-arg <arg_name>=<value>

# CMake build type
ARG build_type=Release
# Additional arguments for compiling stormpy
ARG setup_args=""
# Optional support to install for stormpy, such as '[test,doc]'
ARG options=""
# Number of threads to use for parallel compilation
ARG no_threads=2


# Install dependencies
######################
RUN apt-get update -qq
RUN apt-get install -y --no-install-recommends \
python3 \
python3-venv


# Set-up virtual environment
############################
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"


# Build stormpy
###############
RUN mkdir /opt/stormpy
WORKDIR /opt/stormpy

# Copy the content of the current local stormpy repository into the Docker image
COPY . .

# Build stormpy
RUN pip install -v \
--config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=$no_threads \
--config-settings=cmake.build-type=$build_type \
$setup_args .$options
2 changes: 1 addition & 1 deletion .github/workflows/Dockerfile.stable
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# Set Storm base image
ARG STORM_BASE=movesrwth/storm:stable
FROM $STORM_BASE
MAINTAINER Matthias Volk <m.volk@utwente.nl>
LABEL org.opencontainers.image.authors="dev@stormchecker.org"


# Configuration arguments
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/before-all-linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash

# Inspired by build process of spead2

set -e -u

sccache_version=0.10.0
boost_version=1.88.0
boost_version_under=${boost_version//./_}
ginac_version=1.8.9

dnf install -y boost-devel cln-devel gmp-devel glpk-devel hwloc-devel z3-devel xerces-c-devel eigen3-devel # missing ginac and boost

cd /tmp

# Install sccache
curl -fsSLO https://github.com/mozilla/sccache/releases/download/v${sccache_version}/sccache-v${sccache_version}-$(arch)-unknown-linux-musl.tar.gz
tar -zxf sccache-v${sccache_version}-$(arch)-unknown-linux-musl.tar.gz
cp sccache-v${sccache_version}-$(arch)-unknown-linux-musl/sccache /usr/bin

## Install boost
#curl -fsSLO https://archives.boost.io/release/${boost_version}/source/boost_${boost_version_under}.tar.bz2
#tar -jxf boost_${boost_version_under}.tar.bz2
## Quick-n-dirty approach (much faster than doing the install, which copies thousands of files)
#ln -s /tmp/boost_${boost_version_under}/boost /usr/include/boost

# Install ginac

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why can we not use the ginac package from the package manager?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably can, but the general advice seems to be to not use brew (and similar things hold for other package managers).

https://cibuildwheel.pypa.io/en/stable/faq/#missing-dependencies

I think having the ability to build a version from source is probably good in terms of flexibility here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, so we should try to not rely on homebrew. In this case, I suggest that we also try to build cln manually, and maybe some other libraries if needed.

curl -fsSLO https://www.ginac.de/ginac-${ginac_version}.tar.bz2
tar -jxf ginac-${ginac_version}.tar.bz2
cd ginac-${ginac_version}
export CXXFLAGS="-Wall -O2"
./configure
make
make install
215 changes: 183 additions & 32 deletions .github/workflows/buildtest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,53 +19,85 @@ env:

jobs:
indepthTests:
name: Indepth Tests (${{ matrix.buildType.name }}, ${{ matrix.configuration.name }})
name: Indepth Tests (${{ matrix.build_type.name }}, ${{ matrix.config.name }})
runs-on: ubuntu-latest
strategy:
matrix:
buildType:
- {name: "Debug", dockerTag: "ci-debug", stormTag: "ci-debug", buildArgs: "Debug", setupArgs: "--config-settings=cmake.build-type='Debug'"}
- {name: "Release", dockerTag: "ci", stormTag: "ci", buildArgs: "Release", setupArgs: ""}
configuration:
- {name: "all libraries", disableFlags: "", optionalLibs: "[numpy,plot,test]", testOpt: ""}
- {name: "no libraries", disableFlags: "--config-settings=cmake.define.USE_STORM_DFT=OFF --config-settings=cmake.define.USE_STORM_GSPN=OFF --config-settings=cmake.define.USE_STORM_PARS=OFF --config-settings=cmake.define.USE_STORM_POMDP=OFF --config-settings=cmake.define.USE_PARSER=OFF", optionalLibs: "[test]", testOpt: "tests"}
build_type:
- {name: "Debug",
storm_base: "ci-debug",
build_args: "Debug",
}
- {name: "Release",
storm_base: "ci",
build_args: "Release",
}
config:
- {name: "all libraries",
setup_args: "",
optional_libs: "[numpy,plot,test]",
test_opt: ""
}
- {name: "no libraries",
setup_args: "--config-settings=cmake.define=USE_STORM_DFT=OFF --config-settings=cmake.define.USE_STORM_GSPN=OFF --config-settings=cmake.define.USE_STORM_PARS=OFF --config-settings=cmake.define.USE_STORM_POMDP=OFF --config-settings=cmake.define.USE_PARSER=OFF",
optional_libs: "[test]",
test_opt: "tests"
}
steps:
- name: Git clone
uses: actions/checkout@v4
- name: Build stormpy from Dockerfile
run: docker build -t movesrwth/stormpy:${{ matrix.buildType.dockerTag }} . --build-arg STORM_BASE=movesrwth/storm:${{ matrix.buildType.stormTag }} --build-arg build_type=${{ matrix.buildType.buildArgs }} --build-arg setup_args="${{ matrix.buildType.setupArgs }} ${{ matrix.configuration.disableFlags }}" --build-arg options=${{ matrix.configuration.optionalLibs }} --build-arg no_threads=${NR_JOBS}
run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.name }} \
--build-arg setup_args="${{ matrix.config.setup_args }}" \
--build-arg options=${{ matrix.config.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:${{ matrix.buildType.dockerTag }}
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest ${{ matrix.configuration.testOpt }}"
run: docker exec ci bash -c "cd /opt/stormpy; pytest ${{ matrix.config.test_opt }}"


stableTest:
name: Test on stable (${{ matrix.buildType.name }})
stableTests:
name: Test on stable (${{ matrix.build_type.name }})
runs-on: ubuntu-latest
strategy:
matrix:
buildType:
- {name: "Debug", dockerTag: "ci-debug", stormTag: "stable-debug", buildArgs: "Debug", setupArgs: "--config-settings=cmake.build-type='Debug'", optionalLibs: "[test,plot]"}
- {name: "Release", dockerTag: "ci", stormTag: "stable", buildArgs: "Release", setupArgs: "", optionalLibs: "[test,plot]"}

build_type:
- {name: "Debug",
storm_base: "stable-debug",
build_type: "Debug",
setup_args: "",
optional_libs: "[test,plot]"
}
- {name: "Release",
storm_base: "stable",
build_type: "Release",
setup_args: "",
optional_libs: "[test,plot]"
}
# Allow failures of stable versions as new features might have been added
steps:
- name: Git clone
uses: actions/checkout@v4
- name: Replace Dockerfile
run: cp .github/workflows/Dockerfile.stable Dockerfile
- name: Build dependencies
run: docker build -t movesrwth/stormpy:${{ matrix.buildType.dockerTag }} . --build-arg STORM_BASE=movesrwth/storm:${{ matrix.buildType.stormTag }} --build-arg build_type=${{ matrix.buildType.buildArgs }} --build-arg no_threads=${NR_JOBS}

run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.build_type }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:${{ matrix.buildType.dockerTag }}
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Build stormpy
# Build stormpy explicitly to catch exit code
id: build_stormpy
shell: bash {0} // Deactivate fast-fail to handle exit code for incompatibility
run: |
docker exec ci bash -c "cd /opt/stormpy; pip install -v --config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} --config-settings=cmake.define.CARLPARSER_DIR_HINT=/opt/carl-parser/build/ ${{ matrix.buildType.setupArgs }} .${{ matrix.buildType.optionalLibs }}"
docker exec ci bash -c "cd /opt/stormpy; pip install -v --config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} --config-settings=cmake.build-type=${{ matrix.build_type.build_type }} --config-settings=cmake.define.CARLPARSER_DIR_HINT=/opt/carl-parser/build/ ${{ matrix.build_type.setup_args }} .${{ matrix.build_type.optional_libs }}"
status=$?
if [ $status -eq 1 ]; then
# Warn about possible incompatibility but do not handle as failure
Expand All @@ -81,21 +113,140 @@ jobs:
run: docker exec ci bash -c "cd /opt/stormpy; pytest"


linuxTests:
name: Linux Test (Fetch, ${{ matrix.config.name }})
runs-on: ubuntu-latest
strategy:
matrix:
config:
- {name: "Debian 12, Debug",
base_image: "movesrwth/storm-basesystem:debian-12",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]",
test_opt: ""
}
- {name: "Ubuntu 24.04, Debug",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]",
test_opt: ""
}
- {name: "Ubuntu 24.04, Debug, only Storm core",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.USE_STORM_DFT=OFF --config-settings=cmake.define.USE_STORM_GSPN=OFF --config-settings=cmake.define.USE_STORM_PARS=OFF --config-settings=cmake.define.USE_STORM_POMDP=OFF --config-settings=cmake.define.USE_PARSER=OFF",
optional_libs: "[test]",
test_opt: "tests"
}
- {name: "Ubuntu 24.04, Release",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]",
test_opt: ""
}
steps:
- name: Git clone
uses: actions/checkout@v4
- name: Replace Dockerfile
run: cp .github/workflows/Dockerfile.fetch Dockerfile
- name: Build stormpy
run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg BASE_IMAGE=${{ matrix.config.base_image }} \
--build-arg build_type=${{ matrix.config.build_type }} \
--build-arg setup_args="${{ matrix.config.setup_args }}" \
--build-arg options=${{ matrix.config.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest ${{ matrix.config.test_opt }}"


macTests:
name: Mac Tests (Fetch, ${{ matrix.config.name }})
strategy:
matrix:
config:
- {name: "XCode 14.3, Intel, Debug",
distro: "macos-13",
xcode: "14.3",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]"
}
- {name: "XCode 15.4, ARM, Debug",
distro: "macos-14",
xcode: "15.4",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]"
}
- {name: "XCode 16.3, ARM, Debug",
distro: "macos-15",
xcode: "16.3",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF",
optional_libs: "[test,plot]"
}
runs-on: ${{ matrix.config.distro }}
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.config.xcode }}
- name: Git clone
uses: actions/checkout@v4
- name: Install dependencies
# cmake and gmp and python3 are already installed
run: |
brew update
brew install automake boost cln ginac glpk hwloc xerces-c z3
- name: Build stormpy
run: |
pip install -v \
--config-settings=cmake.build-type=${{ matrix.config.build_type }} \
--config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} \
${{ matrix.config.setup_args }} .${{ matrix.config.optional_libs }}
- name: Run tests
run: pytest


deploy:
name: Test and Deploy on latest (${{ matrix.buildType.name }})
name: Test and Deploy on latest (${{ matrix.build_type.name }})
runs-on: ubuntu-latest
strategy:
matrix:
buildType:
- {name: "Debug", dockerTag: "ci-debug", stormTag: "ci-debug", buildArgs: "Debug", setupArgs: "--config-settings=cmake.build-type='Debug'", optionalLibs: "[test,plot]"}
- {name: "Release", dockerTag: "ci", stormTag: "ci", buildArgs: "Release", setupArgs: "", optionalLibs: "[test,plot,doc]"}
build_type:
- {name: "Debug",
docker_tag: "ci-debug",
storm_base: "ci-debug",
build_type: "Debug",
setup_args: "",
optional_libs: "[test,plot]"
}
- {name: "Release",
docker_tag: "ci",
storm_base: "ci",
build_type: "Release",
setup_args: "",
optional_libs: "[test,plot,doc]"
}
steps:
- name: Git clone
uses: actions/checkout@v4
- name: Build stormpy from Dockerfile
run: docker build -t movesrwth/stormpy:${{ matrix.buildType.dockerTag }} . --build-arg STORM_BASE=movesrwth/storm:${{ matrix.buildType.stormTag }} --build-arg build_type=${{ matrix.buildType.buildArgs }} --build-arg setup_args=${{ matrix.buildType.setupArgs }} --build-arg options=${{ matrix.buildType.optionalLibs }} --build-arg no_threads=${NR_JOBS}
run: |
docker build -t movesrwth/stormpy:${{ matrix.build_type.docker_tag }} . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.build_type }} \
--build-arg setup_args="${{ matrix.build_type.setup_args }}" \
--build-arg options=${{ matrix.build_type.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:${{ matrix.buildType.dockerTag }}
run: docker run -d -it --name ci movesrwth/stormpy:${{ matrix.build_type.docker_tag }}
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest"

Expand All @@ -107,22 +258,22 @@ jobs:
# Only deploy if using master on original repo (and not for pull requests or forks)
if: github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
run: |
docker commit ci movesrwth/stormpy:${{ matrix.buildType.dockerTag }}
docker push movesrwth/stormpy:${{ matrix.buildType.dockerTag }}
docker commit ci movesrwth/stormpy:${{ matrix.build_type.docker_tag }}
docker push movesrwth/stormpy:${{ matrix.build_type.docker_tag }}

- name: Install documentation dependencies
if: matrix.buildType.name == 'Release'
if: matrix.build_type.name == 'Release'
run: |
docker exec ci apt-get install -qq -y pandoc
- name: Build documentation
if: matrix.buildType.name == 'Release'
if: matrix.build_type.name == 'Release'
run: |
docker exec ci bash -c "cd /opt/stormpy/doc; make html"
docker exec ci rm -r /opt/stormpy/doc/build/html/_sources
docker cp ci:/opt/stormpy/doc/build/html .
- name: Deploy documentation
# Only deploy for release version and using master on original repo (and not for pull requests or forks)
if: matrix.buildType.name == 'Release' && github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
if: matrix.build_type.name == 'Release' && github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -131,7 +282,7 @@ jobs:
notify:
name: Email notification
runs-on: ubuntu-latest
needs: [indepthTests,stableTest, deploy]
needs: [indepthTests, stableTests, linuxTests, macTests, deploy]
# Only run in main repo and even if previous step failed
if: github.repository_owner == 'moves-rwth' && always()
steps:
Expand Down
Loading
Loading