diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index b49ab4d..5ace460 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,8 +4,3 @@ updates:
directory: "/"
schedule:
interval: "weekly"
-
- - package-ecosystem: "pip"
- directory: "/tests"
- schedule:
- interval: "weekly"
diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index d5e5e37..51311bf 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -22,10 +22,6 @@ on:
type: string
default: ''
required: false
- deps-kind:
- type: string
- default: ''
- required: false
cache-build:
type: boolean
default: true
@@ -56,15 +52,6 @@ on:
default: ''
required: false
description: Build this OpenFOAM Git branch
- deps-kind:
- type: choice
- required: false
- description: Bundle dependencies in this manner
- options:
- - ''
- - standalone
- - bundled
- - homebrew
cache-build:
type: boolean
default: true
@@ -73,92 +60,44 @@ on:
env:
MAKE_VARS: >
- ${{ inputs.openfoam-version != '' && format('OPENFOAM_VERSION={0}', inputs.openfoam-version) || '' }}
+ ${{ inputs.openfoam-version != '' && format('OPENFOAM_VERSION={0} OPENFOAM_TARBALL_URL=https://raw.githubusercontent.com/gerlero/openfoam-tarballs/refs/heads/main/OpenFOAM-v{0}.tgz', inputs.openfoam-version) || '' }}
${{ inputs.app-version != '' && format('APP_VERSION={0}', inputs.app-version) || '' }}
${{ inputs.app-name != '' && format('APP_NAME={0}', inputs.app-name) || '' }}
${{ inputs.openfoam-git-branch != '' && format('OPENFOAM_GIT_BRANCH={0}', inputs.openfoam-git-branch) || '' }}
- ${{ inputs.deps-kind != '' && format('DEPS_KIND={0}', inputs.deps-kind) || '' }}
OPENFOAM: ${{ inputs.openfoam-version || inputs.openfoam-git-branch }}
jobs:
- deps:
+ build:
runs-on: ${{ inputs.build-os }}
- outputs:
- deps-key: ${{ steps.keys.outputs.deps-key }}
- build-key: ${{ steps.keys.outputs.build-key }}
steps:
- - name: Use Xcode Command Line Tools
- run: sudo xcode-select --switch /Library/Developer/CommandLineTools
- name: Checkout
uses: actions/checkout@v4
+ - name: Set up Pixi
+ uses: prefix-dev/setup-pixi@v0.8.14
- name: Prepare caching
run: |
- make deps --dry-run ${{ env.MAKE_VARS }} > make_deps.txt
- make build --dry-run ${{ env.MAKE_VARS }} > make_build.txt
- brew update
- brew bundle list | xargs -I {} sh -c 'brew info {} | head -n 1' > brew_versions.txt
- brew deps --union $(brew bundle list) | xargs -I {} sh -c 'brew info {} | head -n 1' >> brew_versions.txt
- sort -u -o brew_versions.txt brew_versions.txt
- cat brew_versions.txt
- - name: Generate caching keys
- id: keys
- run: |
- deps_key="build-${{ env.OPENFOAM }}-${{ inputs.build-os }}-${{ hashFiles('make_deps.txt', 'Brewfile', 'scripts/bundle_deps.py', 'brew_versions.txt') }}"
- build_key="$deps_key-${{ hashFiles('make_build.txt', 'scripts/configure.sh', 'scripts/relativize_install_names.py') }}"
- echo "deps-key=$deps_key" >> "$GITHUB_OUTPUT"
- echo "build-key=$build_key" >> "$GITHUB_OUTPUT"
- - name: Look up cached deps
+ pixi run make build --dry-run ${{ env.MAKE_VARS }} > make_build.txt
+ - name: Restore cached build
id: cache
uses: actions/cache/restore@v4
with:
path: build/*.sparsebundle
- key: ${{ steps.keys.outputs.build-key }}
- restore-keys: ${{ steps.keys.outputs.deps-key }}
- lookup-only: true
- - name: Make deps
- if: steps.cache.outputs.cache-matched-key == ''
- run: |
- make deps ${{ env.MAKE_VARS }}
- - name: Save deps to cache
- if: steps.cache.outputs.cache-matched-key == ''
- uses: actions/cache/save@v4
- with:
- path: build/*.sparsebundle
- key: ${{ steps.keys.outputs.deps-key }}
-
- build:
- needs: deps
- runs-on: ${{ inputs.build-os }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Restore cached build or deps
- id: cache
- uses: actions/cache/restore@v4
- with:
- path: build/*.sparsebundle
- key: ${{ needs.deps.outputs.build-key }}
- restore-keys: |
- ${{ needs.deps.outputs.deps-key }}
- fail-on-cache-miss: true
+ key: build-${{ env.OPENFOAM }}-${{ runner.arch }}-${{ hashFiles('make_build.txt', 'pixi.lock', 'configure.sh') }}
- name: Build
if: steps.cache.outputs.cache-hit != 'true'
run: |
- hdiutil attach build/*.sparsebundle
- make --touch deps ${{ env.MAKE_VARS }}
- make build ${{ env.MAKE_VARS }}
+ pixi run make build ${{ env.MAKE_VARS }}
- name: Save build to cache
if: steps.cache.outputs.cache-hit != 'true' && inputs.cache-build
uses: actions/cache/save@v4
with:
path: build/*.sparsebundle
- key: ${{ needs.deps.outputs.build-key }}
+ key: ${{ steps.cache.outputs.cache-primary-key }}
- name: Make app
run: |
- hdiutil attach build/*.sparsebundle
- make --touch build ${{ env.MAKE_VARS }}
- make zip ${{ env.MAKE_VARS }}
+ touch -c build/*.sparsebundle
+ pixi run make zip ${{ env.MAKE_VARS }}
- name: Upload app artifact
uses: actions/upload-artifact@v4
with:
@@ -170,9 +109,8 @@ jobs:
needs: build
strategy:
matrix:
- os: [macos-12, macos-13, macos-14, macos-15]
+ os: [macos-13, macos-14, macos-15]
exclude:
- - os: ${{ inputs.build-os == 'macos-14' && 'macos-12' || ''}}
- os: ${{ inputs.build-os == 'macos-14' && 'macos-13' || ''}}
- os: ${{ inputs.build-os != 'macos-14' && 'macos-14' || ''}}
- os: ${{ inputs.build-os != 'macos-14' && 'macos-15' || ''}}
@@ -181,15 +119,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.x'
- cache: pip
- - name: Install Homebrew dependencies
- if: inputs.deps-kind == 'homebrew'
- run: |
- brew bundle
+ - name: Set up Pixi
+ uses: prefix-dev/setup-pixi@v0.8.14
- name: Download app artifact
uses: actions/download-artifact@v4
with:
@@ -201,6 +132,6 @@ jobs:
working-directory: build
- name: Test
run: |
- make test ${{ env.MAKE_VARS }}
+ pixi run make test ${{ env.MAKE_VARS }}
env:
PRTE_MCA_rmaps_default_mapping_policy: ':oversubscribe'
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1607181..a803576 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,8 +7,6 @@ on:
pull_request:
branches:
- main
- schedule:
- - cron: '0 6 * * 5'
workflow_call:
inputs:
app-version:
@@ -16,15 +14,6 @@ on:
required: true
workflow_dispatch:
inputs:
- deps-kind:
- type: choice
- required: false
- description: Bundle dependencies in this manner
- options:
- - ''
- - standalone
- - bundled
- - homebrew
cache-build:
type: boolean
default: true
@@ -35,13 +24,12 @@ jobs:
ci:
strategy:
matrix:
- build-os: [macos-14, macos-12]
- openfoam-version: [2406, 2312]
+ build-os: [macos-14, macos-13]
+ openfoam-version: [2506, 2412]
fail-fast: false
uses: ./.github/workflows/build-test.yml
with:
build-os: ${{ matrix.build-os }}
openfoam-version: ${{ matrix.openfoam-version }}
app-version: ${{ inputs.app-version }}
- deps-kind: ${{ inputs.deps-kind }}
cache-build: ${{ github.event_name == 'workflow_dispatch' && inputs.cache-build || github.event_name != 'workflow_dispatch' }}
diff --git a/.github/workflows/openfoam-dev-branches.yml b/.github/workflows/openfoam-dev-branches.yml
index a49c95a..4521104 100644
--- a/.github/workflows/openfoam-dev-branches.yml
+++ b/.github/workflows/openfoam-dev-branches.yml
@@ -4,22 +4,12 @@ on:
schedule:
- cron: '0 6 * * 5'
workflow_dispatch:
- inputs:
- deps-kind:
- type: choice
- required: false
- description: Bundle dependencies in this manner
- options:
- - ''
- - standalone
- - bundled
- - homebrew
jobs:
openfoam-dev-branch:
strategy:
matrix:
- build-os: [macos-14, macos-12]
+ build-os: [macos-14, macos-13]
openfoam-git-branch: [master, develop]
fail-fast: false
uses: ./.github/workflows/build-test.yml
@@ -28,5 +18,4 @@ jobs:
app-name: OpenFOAM-${{ matrix.openfoam-git-branch }}
app-version: ${{ matrix.openfoam-git-branch }}
openfoam-git-branch: ${{ matrix.openfoam-git-branch }}
- deps-kind: ${{ inputs.deps-kind }}
cache-build: false
diff --git a/.github/workflows/update-lockfiles.yml b/.github/workflows/update-lockfiles.yml
new file mode 100644
index 0000000..6a18d0e
--- /dev/null
+++ b/.github/workflows/update-lockfiles.yml
@@ -0,0 +1,36 @@
+name: Update lockfiles
+
+permissions:
+ contents: write
+ pull-requests: write
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: 0 5 1 * *
+
+jobs:
+ pixi-update:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up pixi
+ uses: prefix-dev/setup-pixi@v0.8.14
+ with:
+ run-install: false
+ - name: Update lockfiles
+ run: |
+ set -o pipefail
+ pixi update --json | pixi exec pixi-diff-to-markdown >> diff.md
+ - name: Create pull request
+ uses: peter-evans/create-pull-request@v7
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ commit-message: Update pixi lockfile
+ title: Update pixi lockfile
+ body-path: diff.md
+ branch: update-pixi
+ base: main
+ labels: pixi
+ delete-branch: true
+ add-paths: pixi.lock
diff --git a/.gitignore b/.gitignore
index 00dfb09..fbe76e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
/build
-Brewfile.lock.json
*.tgz
+.pixi
+/environment.tar
+__pycache__
.DS_Store
-venv
diff --git a/Brewfile b/Brewfile
deleted file mode 100644
index 43847fa..0000000
--- a/Brewfile
+++ /dev/null
@@ -1,17 +0,0 @@
-# Required dependencies
-brew "open-mpi"
-brew "libomp"
-
-# Optional dependencies (enabled by default)
-brew "boost"
-brew "cgal"
-brew "fftw"
-brew "kahip"
-brew "metis"
-brew "scotch"
-
-# Optional dependencies (uncomment to enable)
-# brew "adios2"
-
-# Optional tools
-brew "bash"
diff --git a/Contents/Info.plist b/Contents/Info.plist
deleted file mode 100644
index e28ff69..0000000
--- a/Contents/Info.plist
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- CFBundleExecutable
- launch
- CFBundleIconFile
- icon.icns
- CFBundleVersion
- {{app_version}}-{{deps_kind}}-{{arch}}
- CFBundleShortVersionString
- {{app_version}}
-
-
diff --git a/Contents/MacOS/bashrc b/Contents/MacOS/bashrc
deleted file mode 120000
index 194e31c..0000000
--- a/Contents/MacOS/bashrc
+++ /dev/null
@@ -1 +0,0 @@
-../Resources/etc/bashrc
\ No newline at end of file
diff --git a/Contents/MacOS/openfoam b/Contents/MacOS/openfoam
deleted file mode 120000
index 4887b1b..0000000
--- a/Contents/MacOS/openfoam
+++ /dev/null
@@ -1 +0,0 @@
-../Resources/etc/openfoam
\ No newline at end of file
diff --git a/Contents/Resources/etc/openfoam b/Contents/Resources/etc/openfoam
index 0d28a2e..e648e28 100755
--- a/Contents/Resources/etc/openfoam
+++ b/Contents/Resources/etc/openfoam
@@ -10,7 +10,7 @@ if [ $# -eq 0 ]; then
echo " ( ) | °°° $app_name.app °°° " 1>&2
echo " ( ) ( ) | " 1>&2
echo " ( ) | Native OpenFOAM for macOS " 1>&2
- echo " | {{APP_HOMEPAGE}} " 1>&2
+ echo " | {{app_homepage}} " 1>&2
echo "---------------------------------------------------------------------------" 1>&2
"$app_bundle/Contents/Resources/volume" mount 1>&2
@@ -25,4 +25,4 @@ volume=$("$app_bundle/Contents/Resources/volume" -show-prefix)
# Keep the volume directory open in this process (prevents accidental ejection)
exec {fd}<"$volume"
-PATH="$volume/usr/opt/bash/bin${PATH+:$PATH}" exec bash "$volume/etc/openfoam" "$@"
+PATH="$volume/env/bin${PATH+:$PATH}" exec bash "$volume/etc/openfoam" "$@"
diff --git a/Makefile b/Makefile
index 6dc92ed..2bd4476 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
# Build configuration
SHELL = /bin/bash
-OPENFOAM_VERSION = 2406
+OPENFOAM_VERSION = 2506
APP_NAME = OpenFOAM-v$(OPENFOAM_VERSION)
ifeq ($(OPENFOAM_VERSION),2112)
@@ -16,7 +16,6 @@ OPENFOAM_GIT_REPO_URL = https://develop.openfoam.com/Development/openfoam.git
OPENFOAM_GIT_BRANCH =
VOLUME_FILESYSTEM = 'Case-sensitive APFS'
WMAKE_NJOBS =
-DEPS_KIND = standalone
DMG_FORMAT = UDRO
APP_HOMEPAGE = https://github.com/gerlero/openfoam-app
APP_VERSION =
@@ -31,23 +30,11 @@ volume = /Volumes/$(APP_NAME)
# Build targets
-app: | $(volume)
- $(MAKE) build/$(APP_NAME).app
- [ ! -d $(volume) ] || hdiutil detach $(volume)
-build: | $(volume)
- $(MAKE) $(volume)/platforms
- [ ! -d $(volume) ] || hdiutil detach $(volume)
-deps: | $(volume)
- $(MAKE) $(volume)/Brewfile.lock.json
- [ ! -d $(volume) ] || hdiutil detach $(volume)
+app: build/$(APP_NAME).app
+build: build/$(APP_NAME)-build.sparsebundle
fetch-source: $(openfoam_tarball)
-zip: | $(volume)
- $(MAKE) build/$(DIST_NAME).zip
- [ ! -d $(volume) ] || hdiutil detach $(volume)
-
-install: | $(volume)
- $(MAKE) $(INSTALL_DIR)/$(APP_NAME).app
- [ ! -d $(volume) ] || hdiutil detach $(volume)
+zip: build/$(DIST_NAME).zip
+install: $(INSTALL_DIR)/$(APP_NAME).app
# Build rules
@@ -55,15 +42,12 @@ volume_id_file = $(volume)/.vol_id
app_contents = \
build/$(APP_NAME).app/Contents/Info.plist \
- build/$(APP_NAME).app/Contents/MacOS/launch \
build/$(APP_NAME).app/Contents/Resources/etc/openfoam \
build/$(APP_NAME).app/Contents/Resources/etc/bashrc \
build/$(APP_NAME).app/Contents/Resources/LICENSE \
build/$(APP_NAME).app/Contents/Resources/icon.icns \
build/$(APP_NAME).app/Contents/Resources/volume \
- build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg \
- build/$(APP_NAME).app/Contents/MacOS/openfoam \
- build/$(APP_NAME).app/Contents/MacOS/bashrc
+ build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg
$(INSTALL_DIR)/$(APP_NAME).app: build/$(APP_NAME).app
cp -r build/$(APP_NAME).app $(INSTALL_DIR)/
@@ -73,21 +57,26 @@ build/$(DIST_NAME).zip: build/$(APP_NAME).app
shasum -a 256 build/$(DIST_NAME).zip
build/$(APP_NAME).app: $(app_contents)
+ xattr -c -r $@
+ codesign --force --deep --sign - $@
-build/$(APP_NAME).app/Contents/Info.plist: Contents/Info.plist | build/$(APP_NAME).app/Contents/MacOS/launch build/$(APP_NAME).app/Contents/Resources/icon.icns
- mkdir -p build/$(APP_NAME).app/Contents
- cp Contents/Info.plist build/$(APP_NAME).app/Contents/
- sed -i '' "s|{{app_version}}|$(APP_VERSION)|g" build/$(APP_NAME).app/Contents/Info.plist
- sed -i '' "s|{{deps_kind}}|$(DEPS_KIND)|g" build/$(APP_NAME).app/Contents/Info.plist
- sed -i '' "s|{{arch}}|$(shell uname -m)|g" build/$(APP_NAME).app/Contents/Info.plist
-
-build/$(APP_NAME).app/Contents/Resources/etc/openfoam: Contents/Resources/etc/openfoam | build/$(APP_NAME).app/Contents/Resources/volume
+build/$(APP_NAME).app/Contents/Info.plist:
+ rm -rf build/$(APP_NAME).app
+ mkdir -p build
+ osacompile -o build/$(APP_NAME).app launch.applescript
+ plutil -replace CFBundleDevelopmentRegion -string "en" $@
+ plutil -insert CFBundleVersion -string "$(APP_VERSION)-$(DEPENDENCIES_KIND)-$(shell uname -m)" $@
+ plutil -insert CFBundleShortVersionString -string "$(APP_VERSION)" $@
+ plutil -replace CFBundleIconFile -string "icon.icns" $@
+ rm build/$(APP_NAME).app/Contents/Resources/applet.icns
+
+build/$(APP_NAME).app/Contents/Resources/etc/openfoam: Contents/Resources/etc/openfoam | build/$(APP_NAME).app/Contents/Info.plist
mkdir -p build/$(APP_NAME).app/Contents/Resources/etc
cp Contents/Resources/etc/openfoam build/$(APP_NAME).app/Contents/Resources/etc/
sed -i '' "s|{{app_name}}|$(APP_NAME)|g" build/$(APP_NAME).app/Contents/Resources/etc/openfoam
sed -i '' "s|{{app_homepage}}|$(APP_HOMEPAGE)|g" build/$(APP_NAME).app/Contents/Resources/etc/openfoam
-build/$(APP_NAME).app/Contents/Resources/volume: Contents/Resources/volume build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg
+build/$(APP_NAME).app/Contents/Resources/volume: Contents/Resources/volume build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg | build/$(APP_NAME).app/Contents/Info.plist
mkdir -p build/$(APP_NAME).app/Contents/Resources
cp Contents/Resources/volume build/$(APP_NAME).app/Contents/Resources/
[ ! -d $(volume) ] || hdiutil detach $(volume)
@@ -97,7 +86,7 @@ build/$(APP_NAME).app/Contents/Resources/volume: Contents/Resources/volume build
sed -i '' "s|{{volume_id}}|$$(cat $(volume_id_file))|g" build/$(APP_NAME).app/Contents/Resources/volume
hdiutil detach $(volume)
-build/$(APP_NAME).app/Contents/Resources/LICENSE: LICENSE
+build/$(APP_NAME).app/Contents/Resources/LICENSE: LICENSE | build/$(APP_NAME).app/Contents/Info.plist
mkdir -p build/$(APP_NAME).app/Contents/Resources
cp LICENSE build/$(APP_NAME).app/Contents/Resources/
@@ -105,7 +94,7 @@ build/$(APP_NAME).app/Contents/%: Contents/%
mkdir -p $(@D)
cp -a $< $@
-build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg: $(volume)/platforms Contents/Resources/icon.icns
+build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg: build/$(APP_NAME)-build.sparsebundle Contents/Resources/icon.icns
[ ! -d $(volume) ] || hdiutil detach $(volume)
rm -f build/$(APP_NAME)-build.sparsebundle.shadow
hdiutil attach \
@@ -116,10 +105,6 @@ build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg: $(volume)/platforms Co
SetFile -a C $(volume)
uuidgen > $(volume_id_file)
cat $(volume_id_file)
- rm -rf $(volume)/homebrew
- [ -L $(volume)/usr ] || rm -f $(volume)/usr/bin/brew
- rm $(volume)/Brewfile
- rm $(volume)/Brewfile.lock.json
rm -rf $(volume)/build
rm -rf $(volume)/**/.git
rm -f $(volume)/**/.DS_Store
@@ -135,16 +120,17 @@ build/$(APP_NAME).app/Contents/Resources/$(APP_NAME).dmg: $(volume)/platforms Co
hdiutil detach $(volume)
rm build/$(APP_NAME)-build.sparsebundle.shadow
-$(volume)/platforms: $(volume)/etc/prefs.sh $(volume)/Brewfile.lock.json scripts/relativize_install_names.py
- cd $(volume) \
- && source etc/bashrc \
- && foamSystemCheck \
- && ( ./Allwmake -j $(WMAKE_NJOBS) -s -q -k || true ) \
- && ./Allwmake -j $(WMAKE_NJOBS) -s
- cd $(volume) && "$(CURDIR)/scripts/relativize_install_names.py"
-
-$(volume)/etc/prefs.sh: $(openfoam_tarball) scripts/configure.sh | $(volume)
- rm -rf $(volume)/etc
+build/$(APP_NAME)-build.sparsebundle: $(openfoam_tarball) environment.tar configure.sh
+ [ ! -d $(volume) ] || hdiutil detach $(volume)
+ rm -f build/$(APP_NAME)-build.sparsebundle.shadow
+ mkdir -p build
+ hdiutil create \
+ -size 50g \
+ -fs $(VOLUME_FILESYSTEM) \
+ -volname $(APP_NAME) \
+ build/$(APP_NAME)-build.sparsebundle \
+ -ov
+ hdiutil attach build/$(APP_NAME)-build.sparsebundle
ifdef openfoam_tarball
tar -xzf $(openfoam_tarball) --strip-components 1 -C $(volume)
else ifdef OPENFOAM_GIT_BRANCH
@@ -154,47 +140,18 @@ else ifdef OPENFOAM_GIT_BRANCH
git -C $(volume) pull origin $(OPENFOAM_GIT_BRANCH)
git -C $(volume) submodule update --init --recursive
endif
- cd $(volume) && "$(CURDIR)/scripts/configure.sh"
-
-$(volume)/Brewfile.lock.json: $(volume)/Brewfile | $(volume)/usr
-ifeq ($(DEPS_KIND),standalone)
- HOMEBREW_RELOCATABLE_INSTALL_NAMES=1 $(volume)/usr/bin/brew bundle --file $(volume)/Brewfile --cleanup --verbose
- $(volume)/usr/bin/brew list --versions
-else
- brew bundle --file $(volume)/Brewfile --no-upgrade
-endif
-ifeq ($(DEPS_KIND),bundled)
- rm -rf $(volume)/usr
- cd $(volume) && "$(CURDIR)/scripts/bundle_deps.py"
-endif
-
-$(volume)/usr: | $(volume)
-ifeq ($(DEPS_KIND),standalone)
- git clone https://github.com/Homebrew/brew $(volume)/homebrew
- mkdir -p $(volume)/usr/bin
- ln -s ../../homebrew/bin/brew $(volume)/usr/bin/
-else ifeq ($(DEPS_KIND),homebrew)
- ln -s $(shell brew --prefix) $(volume)/usr
-else ifeq ($(DEPS_KIND),bundled)
- mkdir $(volume)/usr
-else
- $(error Invalid value for DEPS_KIND)
-endif
-
-$(volume)/Brewfile: Brewfile | $(volume)
- cp Brewfile $(volume)/
-
-$(volume): | build/$(APP_NAME)-build.sparsebundle
- hdiutil attach build/$(APP_NAME)-build.sparsebundle
+ pixi-unpack --output-directory $(volume) environment.tar
+ rm -f $(volume)/activate.sh
+ cd $(volume) && "$(CURDIR)/configure.sh"
+ cd $(volume) \
+ && source etc/bashrc \
+ && foamSystemCheck \
+ && ( ./Allwmake -j $(WMAKE_NJOBS) -s -q -k || true ) \
+ && ./Allwmake -j $(WMAKE_NJOBS) -s
+ hdiutil detach $(volume)
-build/$(APP_NAME)-build.sparsebundle:
- mkdir -p build
- hdiutil create \
- -size 50g \
- -fs $(VOLUME_FILESYSTEM) \
- -volname $(APP_NAME) \
- build/$(APP_NAME)-build.sparsebundle \
- -ov
+environment.tar: pixi.lock
+ pixi-pack --environment openfoam
$(openfoam_tarball): | $(openfoam_tarball).sha256
curl -L -o $(openfoam_tarball) $(OPENFOAM_TARBALL_URL)
@@ -205,14 +162,11 @@ $(openfoam_tarball).sha256:
# Non-build targets and rules
-test: | tests/venv
- tests/venv/bin/pip install -r tests/requirements.txt
- build/$(APP_NAME).app/Contents/Resources/etc/openfoam -c tests/venv/bin/pytest
+test:
+ [ ! -d $(volume) ] || hdiutil detach $(volume)
+ build/$(APP_NAME).app/Contents/Resources/etc/openfoam pytest
build/$(APP_NAME).app/Contents/Resources/volume eject && [ ! -d $(volume) ]
-tests/venv:
- python3 -m venv tests/venv
-
clean-app:
[ ! -d $(volume) ] || hdiutil detach $(volume)
rm -rf build/$(APP_NAME).app build/$(APP_NAME)-build.sparsebundle.shadow
@@ -223,13 +177,12 @@ clean-build: clean-app
rmdir build || true
clean: clean-build
- rm -f $(openfoam_tarball) Brewfile.lock.json
- rm -rf tests/venv
+ rm -f $(openfoam_tarball) environment.tar
uninstall:
rm -rf $(INSTALL_DIR)/$(APP_NAME).app
# Set special targets
.PHONY: app build deps fetch-source zip install test clean-app clean-build clean uninstall
-.SECONDARY: $(volume) $(openfoam_tarball)
+.SECONDARY: $(openfoam_tarball) environment.tar
.DELETE_ON_ERROR:
diff --git a/README.md b/README.md
index c2a4115..adc5c78 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,9 @@
# **OpenFOAM.app**: OpenFOAM for macOS
+| 🎉 [OpenFOAM v2506 is now available!](#-install) |
+| ---- |
+
**Native OpenFOAM as a Mac app**, with binaries compiled from the [OpenFOAM source code](https://develop.openfoam.com/Development/openfoam/-/blob/master/doc/Build.md). Intel and Apple silicon variants.
[](https://github.com/gerlero/openfoam-app/actions/workflows/ci.yml)
@@ -15,7 +18,7 @@
* An Apple silicon or Intel Mac
* A recent version of macOS
* Apple silicon: macOS 14 Sonoma or later
- * Intel: macOS 12 Monterey or later
+ * Intel: macOS 13 Ventura or later
* _Running an older version of macOS? [See here](#i-have-an-older-version-of-macos-and-cannot-upgrade-to-a-supported-version-what-can-i-do)_
@@ -29,25 +32,25 @@
* Or, choose the OpenFOAM version(s) you want:
- * **OpenFOAM v2406**
+ * **OpenFOAM v2506**
* Install with [Homebrew](https://brew.sh):
```sh
- brew install --no-quarantine gerlero/openfoam/openfoam@2406
+ brew install --no-quarantine gerlero/openfoam/openfoam@2506
```
- * Manual download: [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2406-app-arm64.zip) | [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2406-app-x86_64.zip)
+ * Manual download: [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2506-app-arm64.zip) | [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2506-app-x86_64.zip)
- * **OpenFOAM v2312**
+ * **OpenFOAM v2412**
* Install with [Homebrew](https://brew.sh):
```sh
- brew install --no-quarantine gerlero/openfoam/openfoam@2312
+ brew install --no-quarantine gerlero/openfoam/openfoam@2412
```
- * Manual download: [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2312-app-arm64.zip) | [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2312-app-x86_64.zip)
+ * Manual download: [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2412-app-arm64.zip) | [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/latest/download/openfoam2412-app-x86_64.zip)
* _Need an older version of OpenFOAM? [See here](#can-i-get-an-older-version-of-openfoam)_
@@ -68,7 +71,7 @@ openfoam
If you did not install with Homebrew, you can get the same by invoking the following command (replace the path and app name as needed):
```sh
-/Applications/OpenFOAM-v2406.app/Contents/Resources/etc/openfoam
+/Applications/OpenFOAM-v2506.app/Contents/Resources/etc/openfoam
```
@@ -118,6 +121,8 @@ If you cannot upgrade to a newer macOS, you still have a few alternatives:
* Apple silicon — last release tested with macOS 12 Monterey: [**OpenFOAM.app** 1.8.5](https://github.com/gerlero/openfoam-app/releases/tag/v1.8.5) ([⬇️ OpenFOAM v2206](https://github.com/gerlero/openfoam-app/releases/download/v1.8.5/openfoam2206-app-standalone-arm64.zip), [⬇️ OpenFOAM v2112](https://github.com/gerlero/openfoam-app/releases/download/v1.8.5/openfoam2112-app-standalone-arm64.zip))
+ * Intel — last release tested with macOS 12 Monterey: [**OpenFOAM.app** 2.0.0](https://github.com/gerlero/openfoam-app/releases/tag/v2.0.0) ([⬇️ OpenFOAM v2406](https://github.com/gerlero/openfoam-app/releases/download/v2.0.0/openfoam2406-app-x86_64.zip), [⬇️ OpenFOAM v2312](https://github.com/gerlero/openfoam-app/releases/download/v2.0.0/openfoam2312-app-x86_64.zip))
+
* Intel — last release tested with macOS 11 Big Sur: [**OpenFOAM.app** 1.11.1](https://github.com/gerlero/openfoam-app/releases/tag/v1.11.1) ([⬇️ OpenFOAM v2306](https://github.com/gerlero/openfoam-app/releases/download/v1.11.1/openfoam2306-app-x86_64.zip), [⬇️ OpenFOAM v2212](https://github.com/gerlero/openfoam-app/releases/download/v1.11.1/openfoam2212-app-x86_64.zip))
* Intel — last release tested with macOS 10.15 Catalina: [**OpenFOAM.app** 1.8.5](https://github.com/gerlero/openfoam-app/releases/tag/v1.8.5) ([⬇️ OpenFOAM v2206](https://github.com/gerlero/openfoam-app/releases/download/v1.8.5/openfoam2206-app-standalone-x86_64.zip), [⬇️ OpenFOAM v2112](https://github.com/gerlero/openfoam-app/releases/download/v1.8.5/openfoam2112-app-standalone-x86_64.zip))
@@ -132,6 +137,16 @@ If you need an older version of OpenFOAM, you can:
* Use an older release of **OpenFOAM.app** (note that these apps are no longer updated):
+ * [**OpenFOAM-v2406.app** 2.1.0](https://github.com/gerlero/openfoam-app/releases/tag/v2.1.0)
+ * Homebrew: `brew install --no-quarantine gerlero/openfoam/openfoam@2406`
+ * [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/download/v2.1.0/openfoam22406-app-arm64.zip): tested with macOS 14 Sonoma and macOS 15 Sequoia
+ * [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/download/v2.1.0/openfoam2406-app-x86_64.zip): tested with macOS 13 Ventura
+
+ * [**OpenFOAM-v2312.app** 2.0.0](https://github.com/gerlero/openfoam-app/releases/tag/v2.0.0)
+ * Homebrew: `brew install --no-quarantine gerlero/openfoam/openfoam@2312`
+ * [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/download/v2.0.0/openfoam2312-app-arm64.zip): tested with macOS 14 Sonoma and macOS 15 Sequoia
+ * [⬇️ Intel](https://github.com/gerlero/openfoam-app/releases/download/v2.0.0/openfoam2312-app-x86_64.zip): tested with macOS 12 Monterey and macOS 13 Ventura
+
* [**OpenFOAM-v2306.app** 1.13.1](https://github.com/gerlero/openfoam-app/releases/tag/v1.13.1)
* Homebrew: `brew install --no-quarantine gerlero/openfoam/openfoam@2306`
* [⬇️ Apple silicon](https://github.com/gerlero/openfoam-app/releases/download/v1.13.1/openfoam2306-app-arm64.zip): tested with macOS 14 Sonoma
@@ -172,10 +187,10 @@ If you need to, building an **OpenFOAM.app** entirely from source is easy as clo
```sh
git clone https://github.com/gerlero/openfoam-app.git
cd openfoam-app
-make
+pixi run make
```
-The Xcode Command Line Tools are required. See the available configuration variables and alternative targets for `make` in the [`Makefile`](Makefile). Note that the compilation of OpenFOAM and the necessary dependencies from source may take a while.
+[Pixi](https://pixi.sh/) and the Xcode Command Line Tools are required. See the available configuration variables and alternative targets for `make` in the [`Makefile`](Makefile). Note that the compilation of OpenFOAM from source may take a while.
## 📄 Legal notices
diff --git a/scripts/configure.sh b/configure.sh
similarity index 50%
rename from scripts/configure.sh
rename to configure.sh
index d01435e..8d3c586 100755
--- a/scripts/configure.sh
+++ b/configure.sh
@@ -7,68 +7,71 @@
bin/tools/foamConfigurePaths \
-system-compiler Clang \
-openmpi \
- -adios-path '$WM_PROJECT_DIR/usr/opt/adios2' \
- -boost-path '$WM_PROJECT_DIR/usr/opt/boost' \
- -cgal-path '$WM_PROJECT_DIR/usr/opt/cgal' \
- -fftw-path '$WM_PROJECT_DIR/usr/opt/fftw' \
- -kahip-path '$WM_PROJECT_DIR/usr/opt/kahip' \
- -metis-path '$WM_PROJECT_DIR/usr/opt/metis' \
- -scotch-path '$WM_PROJECT_DIR/usr/opt/scotch'
+ -adios-path '$WM_PROJECT_DIR/env' \
+ -boost-path '$WM_PROJECT_DIR/env' \
+ -cgal-path '$WM_PROJECT_DIR/env' \
+ -fftw-path '$WM_PROJECT_DIR/env' \
+ -kahip-path '$WM_PROJECT_DIR/env' \
+ -metis-path '$WM_PROJECT_DIR/env' \
+ -scotch-path '$WM_PROJECT_DIR/env'
+
+if [ $(bin/foamEtcFile -show-api) -lt 2506 ]; then
+ sed -i '' 's|# export GMP_ARCH_PATH=...|export GMP_ARCH_PATH="$WM_PROJECT_DIR/env"|' etc/config.sh/CGAL
+ sed -i '' 's|# setenv GMP_ARCH_PATH ...|setenv GMP_ARCH_PATH "$WM_PROJECT_DIR/env"|' etc/config.csh/CGAL
+
+ sed -i '' 's|# export MPFR_ARCH_PATH=...|export MPFR_ARCH_PATH="$WM_PROJECT_DIR/env"|' etc/config.sh/CGAL
+ sed -i '' 's|# setenv MPFR_ARCH_PATH ...|setenv MPFR_ARCH_PATH "$WM_PROJECT_DIR/env"|' etc/config.csh/CGAL
+else
+ bin/tools/foamConfigurePaths \
+ -gmp-path '$WM_PROJECT_DIR/env' \
+ -mpfr-path '$WM_PROJECT_DIR/env'
+fi
# Set path to the MPI install
-MPI_PATH='$WM_PROJECT_DIR/usr/opt/open-mpi'
-
echo 'export FOAM_MPI=openmpi' >> etc/config.sh/prefs.openmpi
echo 'setenv FOAM_MPI openmpi' >> etc/config.csh/prefs.openmpi
-echo "export MPI_ARCH_PATH=\"$MPI_PATH\"" >> etc/config.sh/prefs.openmpi
-echo "setenv MPI_ARCH_PATH \"$MPI_PATH\"" >> etc/config.csh/prefs.openmpi
-
-
-# Set paths of GMP and MPFR (dependencies of CGAL)
-GMP_PATH='$WM_PROJECT_DIR/usr/opt/gmp'
-MPFR_PATH='$WM_PROJECT_DIR/usr/opt/mpfr'
-
-sed -i '' "s|\# export GMP_ARCH_PATH=...|export GMP_ARCH_PATH=\"$GMP_PATH\"|" etc/config.sh/CGAL
-sed -i '' "s|\# setenv GMP_ARCH_PATH ...|setenv GMP_ARCH_PATH \"$GMP_PATH\"|" etc/config.csh/CGAL
-
-sed -i '' "s|\# export MPFR_ARCH_PATH=...|export MPFR_ARCH_PATH=\"$MPFR_PATH\"|" etc/config.sh/CGAL
-sed -i '' "s|\# setenv MPFR_ARCH_PATH ...|setenv MPFR_ARCH_PATH \"$MPFR_PATH\"|" etc/config.csh/CGAL
+echo 'export MPI_ARCH_PATH="$WM_PROJECT_DIR/env"' >> etc/config.sh/prefs.openmpi
+echo 'setenv MPI_ARCH_PATH "$WM_PROJECT_DIR/env"' >> etc/config.csh/prefs.openmpi
# OpenMP support
-OPENMP_PATH='$WM_PROJECT_DIR/usr/opt/libomp'
-
if [ $(bin/foamEtcFile -show-api) -lt 2212 ]; then
- echo "export CPATH=\"$OPENMP_PATH/include\${CPATH+:\$CPATH}\"" >> etc/prefs.sh
- echo "setenv CPATH \"$OPENMP_PATH/include\`[ \${?CPATH} == 1 ] && echo \":\${CPATH}\"\`\"" >> etc/prefs.csh
+ echo 'export CPATH="$WM_PROJECT_DIR/env/include${CPATH+:$CPATH}"' >> etc/prefs.sh
+ echo 'setenv CPATH "$WM_PROJECT_DIR/env/include`[ ${?CPATH} == 1 ] && echo ":${CPATH}"`"' >> etc/prefs.csh
- echo "export LIBRARY_PATH=\"$OPENMP_PATH/lib\${LIBRARY_PATH+:\$LIBRARY_PATH}\"" >> etc/prefs.sh
- echo "setenv LIBRARY_PATH \"$OPENMP_PATH/lib\`[ \${?LIBRARY_PATH} == 1 ] && echo \":\${LIBRARY_PATH}\"\`\"" >> etc/prefs.csh
+ echo 'export LIBRARY_PATH="$WM_PROJECT_DIR/env/lib${LIBRARY_PATH+:$LIBRARY_PATH}"' >> etc/prefs.sh
+ echo 'setenv LIBRARY_PATH "$WM_PROJECT_DIR/env/lib`[ ${?LIBRARY_PATH} == 1 ] && echo ":${LIBRARY_PATH}"`"' >> etc/prefs.csh
else
- echo "export FOAM_EXTRA_CFLAGS=\"-I$OPENMP_PATH/include \$FOAM_EXTRA_CFLAGS\"" >> etc/prefs.sh
- echo "setenv FOAM_EXTRA_CFLAGS \"-I$OPENMP_PATH/include \$FOAM_EXTRA_CFLAGS\"" >> etc/prefs.csh
+ echo 'export FOAM_EXTRA_CFLAGS="-I$WM_PROJECT_DIR/env/include $FOAM_EXTRA_CFLAGS"' >> etc/prefs.sh
+ echo 'setenv FOAM_EXTRA_CFLAGS "-I$WM_PROJECT_DIR/env/include $FOAM_EXTRA_CFLAGS"' >> etc/prefs.csh
- echo "export FOAM_EXTRA_CXXFLAGS=\"-I$OPENMP_PATH/include \$FOAM_EXTRA_CXXFLAGS\"" >> etc/prefs.sh
- echo "setenv FOAM_EXTRA_CXXFLAGS \"-I$OPENMP_PATH/include \$FOAM_EXTRA_CXXFLAGS\"" >> etc/prefs.csh
+ echo 'export FOAM_EXTRA_CXXFLAGS="-I$WM_PROJECT_DIR/env/include $FOAM_EXTRA_CXXFLAGS"' >> etc/prefs.sh
+ echo 'setenv FOAM_EXTRA_CXXFLAGS "-I$WM_PROJECT_DIR/env/include $FOAM_EXTRA_CXXFLAGS"' >> etc/prefs.csh
- echo "export FOAM_EXTRA_LDFLAGS=\"-L$OPENMP_PATH/lib \$FOAM_EXTRA_LDFLAGS\"" >> etc/prefs.sh
- echo "setenv FOAM_EXTRA_LDFLAGS \"-L$OPENMP_PATH/lib \$FOAM_EXTRA_LDFLAGS\"" >> etc/prefs.csh
+ echo 'export FOAM_EXTRA_LDFLAGS="-L$WM_PROJECT_DIR/env/lib $FOAM_EXTRA_LDFLAGS"' >> etc/prefs.sh
+ echo 'setenv FOAM_EXTRA_LDFLAGS "-L$WM_PROJECT_DIR/env/lib $FOAM_EXTRA_LDFLAGS"' >> etc/prefs.csh
fi
# Use bundled Bash
-BASH_PATH='$WM_PROJECT_DIR/usr/opt/bash'
+echo 'export PATH="$WM_PROJECT_DIR/env/bin${PATH+:$PATH}"' >> etc/prefs.sh
+echo 'setenv PATH $WM_PROJECT_DIR/env/bin:$PATH' >> etc/prefs.csh
-echo "export PATH=\"$BASH_PATH/bin\${PATH+:\$PATH}\"" >> etc/prefs.sh
-echo "setenv PATH $BASH_PATH/bin:\$PATH" >> etc/prefs.csh
+echo 'export MANPATH="$WM_PROJECT_DIR/env/share/man${MANPATH+:$MANPATH}:"' >> etc/prefs.sh
+echo 'setenv MANPATH "$WM_PROJECT_DIR/env/share/man`[ ${?MANPATH} == 1 ] && echo ":${MANPATH}"`"' >> etc/prefs.csh
-echo "export MANPATH=\"$BASH_PATH/share/man\${MANPATH+:\$MANPATH}:\"" >> etc/prefs.sh
-echo "setenv MANPATH $BASH_PATH/share/man\`[ \${?MANPATH} == 1 ] && echo \":\${MANPATH}\"\`:" >> etc/prefs.csh
+echo 'export INFOPATH="$WM_PROJECT_DIR/envshare/info:${INFOPATH:-}"' >> etc/prefs.sh
+echo 'setenv INFOPATH "$WM_PROJECT_DIR/env/share/info`[ ${?INFOPATH} == 1 ] && echo ":${INFOPATH}"`"' >> etc/prefs.csh
-echo "export INFOPATH=\"$BASH_PATH/share/info:\${INFOPATH:-}\"" >> etc/prefs.sh
-echo "setenv INFOPATH $BASH_PATH/share/info\`[ \${?INFOPATH} == 1 ] && echo \":\${INFOPATH}\"\`" >> etc/prefs.csh
+
+# Set RPATH to find bundled libraries
+if [ $(bin/foamEtcFile -show-api) -lt 2506 ]; then
+ echo 'PROJECT_RPATH += -rpath @loader_path/../../../env/lib' >> wmake/rules/darwin64Clang/rpath
+else
+ echo 'PROJECT_RPATH += -rpath @loader_path/../../../env/lib' >> wmake/rules/darwin64/rpath
+fi
# Disable floating point exception trapping when on Apple silicon
@@ -88,7 +91,7 @@ echo "setenv INFOPATH $BASH_PATH/share/info\`[ \${?INFOPATH} == 1 ] && echo \":\
# Backport of https://develop.openfoam.com/Development/openfoam/-/issues/2555
-[ $(bin/foamEtcFile -show-api) -ge 2212 ] || patch src/meshTools/triSurface/triSurfaceTools/geompack/geompack.C <
# include
@@ -126,26 +129,3 @@ EOF
# Backport of https://develop.openfoam.com/Development/openfoam/-/issues/3098
[ $(bin/foamEtcFile -show-api) -gt 2312 ] || sed -i '' 's|_foamAddLib "$FOAM_USER_LIBBIN:$FOAM_SITE_LIBBIN"|_foamAddLib "$FOAM_SITE_LIBBIN"\n_foamAddLib "$FOAM_USER_LIBBIN"|' etc/config.sh/setup
[ $(bin/foamEtcFile -show-api) -gt 2312 ] || sed -i '' 's|_foamAddLib "$FOAM_USER_LIBBIN:$FOAM_SITE_LIBBIN"|_foamAddLib "$FOAM_SITE_LIBBIN"\n_foamAddLib "$FOAM_USER_LIBBIN"|' etc/config.csh/setup
-
-
-# Compatibility with CGAL 6 (https://develop.openfoam.com/Development/openfoam/-/issues/3234)
-sed -i '' 's|c++14|c++17|' wmake/rules/General/Clang/c++
-patch src/OpenFOAM/db/IOstreams/memory/ISpanStream.H <= 201703L
- //- Construct (shallow copy) from std::string_view content
- explicit ispanstream(std::string_view s)
-- {
-+ :
- buffer_type(const_cast(s.data()), s.size()),
-- stream_type(static_cast(this));
-- }
-+ stream_type(static_cast(this))
-+ {}
- #endif
-
- //- Construct (shallow copy) from span character content
-EOF
-sed -i '' 's|boost::optional|std::optional|' applications/utilities/preProcessing/viewFactorsGen/viewFactorsGen.C
-sed -i '' 's|boost::optional|std::optional|' applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
-sed -i '' 's|boost::get|std::get_if|' applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C
diff --git a/images/screenshot.png b/images/screenshot.png
index e25baea..aa83f9c 100644
Binary files a/images/screenshot.png and b/images/screenshot.png differ
diff --git a/Contents/MacOS/launch b/launch.applescript
similarity index 63%
rename from Contents/MacOS/launch
rename to launch.applescript
index 60a2708..e58ea6e 100755
--- a/Contents/MacOS/launch
+++ b/launch.applescript
@@ -1,6 +1,6 @@
#!/usr/bin/osascript
-set openfoam to (path to me as text) & "::..:Resources:etc:openfoam"
+set openfoam to (path to me as text) & "Contents:Resources:etc:openfoam"
tell application "Terminal"
do script (quoted form of POSIX path of openfoam)
diff --git a/pixi.lock b/pixi.lock
new file mode 100644
index 0000000..ea623ed
--- /dev/null
+++ b/pixi.lock
@@ -0,0 +1,1586 @@
+version: 6
+environments:
+ default:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ packages:
+ osx-64:
+ - conda: https://conda.anaconda.org/conda-forge/noarch/aioshutil-1.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/foamlib-1.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-32_h7f60823_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-32_hff6cab4_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-20.1.7-hf95d169_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.0-h240833e_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-14_2_0_h51e75f0_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-14.2.0-h51e75f0_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-32_h236ab99_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_hbf64a52_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.2-he7d56d0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-20.1.7-ha54dae1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.1-py313hc518a0f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.0-hc426f3f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pixi-pack-0.7.1-hffa81eb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pixi-unpack-0.7.1-hffa81eb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-asyncio-cooperative-0.37.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.5-hc3a4c56_102_cp313.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/noarch/aioshutil-1.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/foamlib-1.0.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-32_h10e41b3_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-32_hb3479ef_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.7-ha82da77_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-32_hc9a63f6_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_hf332438_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.2-h6fb428d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.7-hdb05f8b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.1-py313h41a2e72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixi-pack-0.7.1-h2b2570c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixi-unpack-0.7.1-h2b2570c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-asyncio-cooperative-0.37.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.5-hf3f3da0_102_cp313.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
+ openfoam:
+ channels:
+ - url: https://conda.anaconda.org/conda-forge/
+ packages:
+ osx-64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/bash-5.2.37-h9edc32d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/blas-2.132-blis.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/blas-devel-3.9.0-32_hcc04dd8_blis.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/blis-0.9.0-hec52a4b_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/cgal-cpp-5.6.1-hda30369_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h1c7c39f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.10-nompi_h292e606_110.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-32_hcc31c3a_blis.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.86.0-hf0da243_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-devel-1.86.0-h20888b2_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-headers-1.86.0-h694c41f_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-32_h1b39828_blis.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-20.1.7-hf95d169_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libfabric-2.2.0-h694c41f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libfabric1-2.2.0-h6e16a3a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-14_2_0_h51e75f0_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-14.2.0-h51e75f0_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwloc-2.11.2-default_h4cdd727_1001.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h4b5e92a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-12_h8d7f381_netlib.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-12_hf157144_netlib.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libpmix-5.0.8-h2a508f7_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.6-h7a28ce2_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.13.8-h93c44a6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-20.1.7-ha54dae1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/mpi-1.0-openmpi.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/openmpi-5.0.8-h442dfbe_100.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.0-hc426f3f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/scotch-7.0.6-h40132e6_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda
+ osx-arm64:
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bash-5.2.37-h5b2bd6a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blas-2.132-accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blas-devel-3.9.0-32_h55bc449_accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cgal-cpp-5.6.1-h5f86f28_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h1995070_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-32_h504e6c8_accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.86.0-hc9fb7c5_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-devel-1.86.0-hf450f58_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-headers-1.86.0-hce30654_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-32_h8d39bcd_accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.7-ha82da77_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfabric-2.2.0-hce30654_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfabric1-2.2.0-h5505292_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwloc-2.11.2-default_hbce5d74_1001.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-32_h3c9cff3_accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapacke-3.9.0-32_h09be921_accelerate.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpmix-5.0.8-h6500a5a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.6-he56f69b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h52572c6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.7-hdb05f8b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpi-1.0-openmpi.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openmpi-5.0.8-hc9a84be_100.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scotch-7.0.6-hc1c4572_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda
+packages:
+- conda: https://conda.anaconda.org/conda-forge/noarch/aioshutil-1.5-pyhd8ed1ab_0.conda
+ sha256: 4d36789511c589a1f3933de3ac3c3b62db7323f6ffd492a4d04558f454392c1c
+ md5: 6c562696bdb74a8149442779d5469dd2
+ depends:
+ - python >=3.8
+ - typing-extensions
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 10324
+ timestamp: 1721492522583
+- conda: https://conda.anaconda.org/conda-forge/osx-64/bash-5.2.37-h9edc32d_0.conda
+ sha256: 02d11f98143dbecc3537cc608874e3c39f10c91ab245a9922efd69e5f706e9d5
+ md5: 5c516db7e9e4b1677f9cf478bade02cd
+ depends:
+ - readline
+ - __osx >=10.13
+ - readline >=8.2,<9.0a0
+ license: GPL-3.0-or-later
+ license_family: GPL
+ size: 1754182
+ timestamp: 1748631221509
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bash-5.2.37-h5b2bd6a_0.conda
+ sha256: 9addc6fab5b01dc2d4bc58b15cf7df2352a2cbd4c2344c70f2de70243c60e548
+ md5: dd8fe1def8c4aecf00ec21ee96c74863
+ depends:
+ - readline
+ - __osx >=11.0
+ - readline >=8.2,<9.0a0
+ license: GPL-3.0-or-later
+ license_family: GPL
+ size: 1715546
+ timestamp: 1748631203521
+- conda: https://conda.anaconda.org/conda-forge/osx-64/blas-2.132-blis.conda
+ build_number: 32
+ sha256: 5ed4782833f5e927873d3cf0abbc817dcc080eaa688e659234559fb3b3318989
+ md5: e0a5ac23f85d5f17cb2b15f3f5e0dc5e
+ depends:
+ - blas-devel 3.9.0 32*_blis
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17538
+ timestamp: 1750389065757
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/blas-2.132-accelerate.conda
+ build_number: 32
+ sha256: 66d4fbc0cf0cb230413c10945e468237204830a99db27730de67d64d24fab54f
+ md5: da80137181edcb8cd6a3d3dc17e8bc02
+ depends:
+ - blas-devel 3.9.0 32*_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17671
+ timestamp: 1750389130022
+- conda: https://conda.anaconda.org/conda-forge/osx-64/blas-devel-3.9.0-32_hcc04dd8_blis.conda
+ build_number: 32
+ sha256: 0140ff2340a4247b3e6333444459b14885352de44e18f002ed966d5b3feb3103
+ md5: 880c685e49d4e78ec478bffc47ddfb82
+ depends:
+ - blis 0.9.0.*
+ - libblas 3.9.0 32_hcc31c3a_blis
+ - libcblas 3.9.0 32_h1b39828_blis
+ - liblapack 3.9.0 *_netlib
+ - liblapacke 3.9.0 *_netlib
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17099
+ timestamp: 1750389029782
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/blas-devel-3.9.0-32_h55bc449_accelerate.conda
+ build_number: 32
+ sha256: a1b7b5d4d239fd47d6dcf10d6d8d89fb211282c0214f2067e57e1f0609caaf93
+ md5: f4d5f572ee79d1cfb960f47ca5e5d679
+ depends:
+ - libblas 3.9.0 32_h504e6c8_accelerate
+ - libcblas 3.9.0 32_h8d39bcd_accelerate
+ - liblapack 3.9.0 32_h3c9cff3_accelerate
+ - liblapacke 3.9.0 32_h09be921_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17028
+ timestamp: 1750389100055
+- conda: https://conda.anaconda.org/conda-forge/osx-64/blis-0.9.0-hec52a4b_2.conda
+ sha256: 709d70079d8b629cc6a9f96c52e818546ffe67fe97c7e09b2264611f19551934
+ md5: 2bbab6245067770bc4e9652a3e60de86
+ depends:
+ - __osx >=10.9
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 1346304
+ timestamp: 1713878136186
+- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
+ sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5
+ md5: 7ed4301d437b59045be7e051a0308211
+ depends:
+ - __osx >=10.13
+ license: bzip2-1.0.6
+ license_family: BSD
+ size: 134188
+ timestamp: 1720974491916
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
+ sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91
+ md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab
+ depends:
+ - __osx >=11.0
+ license: bzip2-1.0.6
+ license_family: BSD
+ size: 122909
+ timestamp: 1720974522888
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-hbd8a1cb_0.conda
+ sha256: 7cfec9804c84844ea544d98bda1d9121672b66ff7149141b8415ca42dfcd44f6
+ md5: 72525f07d72806e3b639ad4504c30ce5
+ depends:
+ - __unix
+ license: ISC
+ size: 151069
+ timestamp: 1749990087500
+- conda: https://conda.anaconda.org/conda-forge/osx-64/cgal-cpp-5.6.1-hda30369_2.conda
+ sha256: 7d71b03c35085fe49bed127afad8a014e83299ca7e45df9f962e939a5833f5a2
+ md5: 6f188e0300be78871bbcb7880013108c
+ depends:
+ - __osx >=10.13
+ - eigen
+ - libboost >=1.86.0,<1.87.0a0
+ - libboost-devel
+ - libcxx >=16
+ - mpfr >=4.2.1,<5.0a0
+ license: GPL3/LGPL3
+ size: 5769810
+ timestamp: 1724406156034
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cgal-cpp-5.6.1-h5f86f28_2.conda
+ sha256: 7499a25eadef31d6ffed5f11f757236a26088abeeb7b3ec972ba34335c0fb0a0
+ md5: ab750c243bc955a87a5c3b751bd7632e
+ depends:
+ - __osx >=11.0
+ - eigen
+ - libboost >=1.86.0,<1.87.0a0
+ - libboost-devel
+ - libcxx >=16
+ - mpfr >=4.2.1,<5.0a0
+ license: GPL3/LGPL3
+ size: 5770597
+ timestamp: 1724406149482
+- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
+ md5: 962b9857ee8e7018c22f2776ffa0b2d7
+ depends:
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 27011
+ timestamp: 1733218222191
+- conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-h1c7c39f_0.conda
+ sha256: 187c0677e0cdcdc39aed716687a6290dd5b7f52b49eedaef2ed76be6cd0a5a3d
+ md5: 5b2cfc277e3d42d84a2a648825761156
+ depends:
+ - libcxx >=15.0.7
+ license: MPL-2.0
+ license_family: MOZILLA
+ size: 1090184
+ timestamp: 1690272503232
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h1995070_0.conda
+ sha256: c20b3677b16d8907343fce68e7c437184fef7f5ed0a765c104b775f8a485c5c9
+ md5: 3691ea3ff568ba38826389bafc717909
+ depends:
+ - libcxx >=15.0.7
+ license: MPL-2.0
+ license_family: MOZILLA
+ size: 1087751
+ timestamp: 1690275869049
+- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda
+ sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca
+ md5: 72e42d28960d875c7654614f8b50939a
+ depends:
+ - python >=3.9
+ - typing_extensions >=4.6.0
+ license: MIT and PSF-2.0
+ size: 21284
+ timestamp: 1746947398083
+- conda: https://conda.anaconda.org/conda-forge/osx-64/fftw-3.3.10-nompi_h292e606_110.conda
+ sha256: 6f5c64debf2d51f10522d4080b043ec4dc9825a770a4d38c96fa7bf6432b4769
+ md5: e05219cbabb20b406ff0803a3e552419
+ depends:
+ - __osx >=10.13
+ - libcxx >=16
+ - libgfortran >=5
+ - libgfortran5 >=12.3.0
+ - libgfortran5 >=13.2.0
+ - llvm-openmp >=16.0.6
+ license: GPL-2.0-or-later
+ license_family: GPL
+ size: 1801806
+ timestamp: 1717758400349
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fftw-3.3.10-nompi_h6637ab6_110.conda
+ sha256: ba72f1d9384584c774d4e58ff3174818a20687f817e5edde3e0d23edff88fd72
+ md5: 622f99e8f4820c2ca1b208a3bb6ed5e6
+ depends:
+ - __osx >=11.0
+ - libcxx >=16
+ - libgfortran >=5
+ - libgfortran5 >=12.3.0
+ - libgfortran5 >=13.2.0
+ - llvm-openmp >=16.0.6
+ license: GPL-2.0-or-later
+ license_family: GPL
+ size: 763281
+ timestamp: 1717758160882
+- conda: https://conda.anaconda.org/conda-forge/noarch/foamlib-1.0.0-pyhd8ed1ab_0.conda
+ sha256: 771c985b33f87ade26429ed5c3b64fc5026dc0a2cd335fff7d0bd1ab07e7e897
+ md5: c34af39587af076165b77df784861228
+ depends:
+ - aioshutil >=1,<2
+ - numpy >=1,<3
+ - pyparsing >=3.1.2,<4
+ - python >=3.9
+ - rich >=13,<15
+ - typing_extensions >=4,<5
+ license: GPL-3.0-or-later
+ license_family: GPL
+ size: 43735
+ timestamp: 1747523333028
+- conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda
+ sha256: 75aa5e7a875afdcf4903b7dc98577672a3dc17b528ac217b915f9528f93c85fc
+ md5: 427101d13f19c4974552a4e5b072eef1
+ depends:
+ - __osx >=10.13
+ - libcxx >=16
+ license: GPL-2.0-or-later OR LGPL-3.0-or-later
+ size: 428919
+ timestamp: 1718981041839
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda
+ sha256: 76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd
+ md5: eed7278dfbab727b56f2c0b64330814b
+ depends:
+ - __osx >=11.0
+ - libcxx >=16
+ license: GPL-2.0-or-later OR LGPL-3.0-or-later
+ size: 365188
+ timestamp: 1718981343258
+- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda
+ sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7
+ md5: d68d48a3060eb5abdc1cdc8e2a3a5966
+ depends:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 11761697
+ timestamp: 1720853679409
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
+ sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620
+ md5: 5eb22c1d7b3fc4abb50d92d621583137
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ size: 11857802
+ timestamp: 1720853997952
+- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
+ sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca
+ md5: 6837f3eff7dcea42ecd714ce1ac2b108
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 11474
+ timestamp: 1733223232820
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-32_h7f60823_openblas.conda
+ build_number: 32
+ sha256: e441fcc46858a9a073e4344c80e267aee3b95ec01b02e37205c36be79eec0694
+ md5: 0f7197e3b4ecfa8aa24a371c3eaabb8a
+ depends:
+ - libopenblas >=0.3.30,<0.3.31.0a0
+ - libopenblas >=0.3.30,<1.0a0
+ constrains:
+ - liblapack 3.9.0 32*_openblas
+ - blas 2.132 openblas
+ - mkl <2025
+ - liblapacke 3.9.0 32*_openblas
+ - libcblas 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17571
+ timestamp: 1750389030403
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-32_hcc31c3a_blis.conda
+ build_number: 32
+ sha256: 24ecd5f9a1e5df0d238c1b8c6e7d07f07aebc6fb0d14ebbd0494c0836e70c09a
+ md5: 43555fd7d5834632ec978a56e2ebfb29
+ depends:
+ - blis >=0.9.0,<0.9.1.0a0
+ constrains:
+ - mkl <2025
+ - libcblas 3.9.0 32*_blis
+ - blas 2.132 blis
+ track_features:
+ - blas_blis
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17401
+ timestamp: 1750389009870
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-32_h10e41b3_openblas.conda
+ build_number: 32
+ sha256: 2775472dd81d43dc20804b484028560bfecd5ab4779e39f1fb95684da3ff2029
+ md5: d4a1732d2b330c9d5d4be16438a0ac78
+ depends:
+ - libopenblas >=0.3.30,<0.3.31.0a0
+ - libopenblas >=0.3.30,<1.0a0
+ constrains:
+ - blas 2.132 openblas
+ - liblapack 3.9.0 32*_openblas
+ - mkl <2025
+ - libcblas 3.9.0 32*_openblas
+ - liblapacke 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17520
+ timestamp: 1750388963178
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-32_h504e6c8_accelerate.conda
+ build_number: 32
+ sha256: 7bac579856ed6fe52bc14de3235488df1c63469342fe083efdc6efbc58a2723b
+ md5: a786e7c40ac4ba20d00dd9199771cd05
+ depends:
+ - __osx >=11.0
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ constrains:
+ - blas 2.132 accelerate
+ - liblapacke 3.9.0 32*_accelerate
+ - mkl <2025
+ - libcblas 3.9.0 32*_accelerate
+ - liblapack 3.9.0 32*_accelerate
+ track_features:
+ - blas_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2583579
+ timestamp: 1750389052515
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-1.86.0-hf0da243_3.conda
+ sha256: 7758971337b07d1f4fd0c55eed4bfb06e3c0512a7e4549c648a01383926c1fcd
+ md5: 1e25fad7b2c160cd3b9b52f3507eb272
+ depends:
+ - __osx >=10.13
+ - bzip2 >=1.0.8,<2.0a0
+ - icu >=75.1,<76.0a0
+ - libcxx >=18
+ - liblzma >=5.6.3,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 2134033
+ timestamp: 1733503407177
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-1.86.0-hc9fb7c5_3.conda
+ sha256: 793da2d2f7e2e14ed34549e3085771eefcc13ee6e06de2409a681ff0a545e905
+ md5: 722715e61d51bcc7bd74f7a2b133f0d7
+ depends:
+ - __osx >=11.0
+ - bzip2 >=1.0.8,<2.0a0
+ - icu >=75.1,<76.0a0
+ - libcxx >=18
+ - liblzma >=5.6.3,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - zstd >=1.5.6,<1.6.0a0
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 1937185
+ timestamp: 1733503730683
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-devel-1.86.0-h20888b2_3.conda
+ sha256: 297427f9edce4b04847d13bfaa2401326d69b351290bf7f61565844a503c7fc8
+ md5: f4386c067b2bcd09be47d4092cf4c81d
+ depends:
+ - libboost 1.86.0 hf0da243_3
+ - libboost-headers 1.86.0 h694c41f_3
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 38825
+ timestamp: 1733503676067
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-devel-1.86.0-hf450f58_3.conda
+ sha256: 785fec14fff95b87b1ef1e947367255cb54e8a580c67a9544ef51cf44399d638
+ md5: b5ee687fa1ca8cb36149519a9e14541c
+ depends:
+ - libboost 1.86.0 hc9fb7c5_3
+ - libboost-headers 1.86.0 hce30654_3
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 37678
+ timestamp: 1733503973845
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libboost-headers-1.86.0-h694c41f_3.conda
+ sha256: 9e441c92ad0ff786cae47f6a66fb60fc0d146c69386e4f6f5b7ecdda89db878f
+ md5: 7f26ba01ef422fd27abfdc98ceb104f0
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 14151060
+ timestamp: 1733503490599
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-headers-1.86.0-hce30654_3.conda
+ sha256: b5287d295bb3ee2f074f8bfede7c021f220ecee681da3843d8e537a51aad83f2
+ md5: 81b1cfe069c865273f8809ade3e80bf8
+ constrains:
+ - boost-cpp <0.0a0
+ license: BSL-1.0
+ size: 14139980
+ timestamp: 1733503796088
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-32_h1b39828_blis.conda
+ build_number: 32
+ sha256: cbaf92be703413d467d25c60f662564e2602024a833ba01fe739e956d0631ffb
+ md5: 607e88701ec3898da9dba7d18a9e35d0
+ depends:
+ - libblas 3.9.0 32_hcc31c3a_blis
+ constrains:
+ - blas 2.132 blis
+ track_features:
+ - blas_blis
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17393
+ timestamp: 1750389019976
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-32_hff6cab4_openblas.conda
+ build_number: 32
+ sha256: 745f6dd420389809c333734df6edc99d75caa3633e4778158c7549c6844af440
+ md5: 2c1e774d4546cf542eaee5781eb8940b
+ depends:
+ - libblas 3.9.0 32_h7f60823_openblas
+ constrains:
+ - blas 2.132 openblas
+ - liblapack 3.9.0 32*_openblas
+ - liblapacke 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17574
+ timestamp: 1750389040732
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-32_h8d39bcd_accelerate.conda
+ build_number: 32
+ sha256: 57174e02791df3b33f80afcc55978f80278efda9c0133632abfe889d465e4875
+ md5: 09c14f32d516bd4abac28d4bc51a5d87
+ depends:
+ - libblas 3.9.0 32_h504e6c8_accelerate
+ constrains:
+ - blas 2.132 accelerate
+ - liblapack 3.9.0 32*_accelerate
+ - liblapacke 3.9.0 32*_accelerate
+ track_features:
+ - blas_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17490
+ timestamp: 1750389072576
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-32_hb3479ef_openblas.conda
+ build_number: 32
+ sha256: 25d46ace14c3ac45d4aa18b5f7a0d3d30cec422297e900f8b97a66334232061c
+ md5: d8e8ba717ae863b13a7495221f2b5a71
+ depends:
+ - libblas 3.9.0 32_h10e41b3_openblas
+ constrains:
+ - blas 2.132 openblas
+ - liblapack 3.9.0 32*_openblas
+ - liblapacke 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17485
+ timestamp: 1750388970626
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-20.1.7-hf95d169_0.conda
+ sha256: f6e088a2e0e702a4908d1fc9f1a17b080bdcf63e1f8a9cb35dd158fc1d1eb2f5
+ md5: 8b47ade37d4e75417b4e993179c09f5d
+ depends:
+ - __osx >=10.13
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ size: 562573
+ timestamp: 1749846921724
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.7-ha82da77_0.conda
+ sha256: a3fd34773f1252a4f089e74a075ff5f0f6b878aede097e83a405f35687c36f24
+ md5: 881de227abdddbe596239fa9e82eb3ab
+ depends:
+ - __osx >=11.0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ size: 567189
+ timestamp: 1749847129529
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda
+ sha256: e0bd9af2a29f8dd74309c0ae4f17a7c2b8c4b89f875ff1d6540c941eefbd07fb
+ md5: e38e467e577bd193a7d5de7c2c540b04
+ depends:
+ - openssl >=3.1.1,<4.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 372661
+ timestamp: 1685726378869
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda
+ sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7
+ md5: 1a109764bff3bdc7bdd84088347d71dc
+ depends:
+ - openssl >=3.1.1,<4.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 368167
+ timestamp: 1685726248899
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.0-h240833e_0.conda
+ sha256: 976f2e23ad2bb2b8e92c99bfa2ead3ad557b17a129b170f7e2dfcf233193dd7e
+ md5: 026d0a1056ba2a3dbbea6d4b08188676
+ depends:
+ - __osx >=10.13
+ constrains:
+ - expat 2.7.0.*
+ license: MIT
+ license_family: MIT
+ size: 71894
+ timestamp: 1743431912423
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda
+ sha256: ee550e44765a7bbcb2a0216c063dcd53ac914a7be5386dd0554bd06e6be61840
+ md5: 6934bbb74380e045741eb8637641a65b
+ depends:
+ - __osx >=11.0
+ constrains:
+ - expat 2.7.0.*
+ license: MIT
+ license_family: MIT
+ size: 65714
+ timestamp: 1743431789879
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libfabric-2.2.0-h694c41f_0.conda
+ sha256: 3fc31ad30fce09c40cb4ae2969f57796100114ef668bb056ca0437ee8693070e
+ md5: e3b18c0040b8bcec7a09de6750bd1399
+ depends:
+ - libfabric1 2.2.0 h6e16a3a_0
+ license: BSD-2-Clause OR GPL-2.0-only
+ license_family: BSD
+ size: 14149
+ timestamp: 1751278494551
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfabric-2.2.0-hce30654_0.conda
+ sha256: 4794160d94dc1aac6946f65d887fe187efad0f880ca7e7a890048bb16e5a3fe9
+ md5: a7b9ab9125299c08dc9561b9e551d058
+ depends:
+ - libfabric1 2.2.0 h5505292_0
+ license: BSD-2-Clause OR GPL-2.0-only
+ license_family: BSD
+ size: 14175
+ timestamp: 1751278650863
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libfabric1-2.2.0-h6e16a3a_0.conda
+ sha256: 12dc705c02eeb6051c0479adaa7215a262c0e02dde1388e43912b7eebc4b501f
+ md5: ce330e3ef16970f22e123c5743dcd7a0
+ depends:
+ - __osx >=10.13
+ license: BSD-2-Clause OR GPL-2.0-only
+ license_family: BSD
+ size: 361964
+ timestamp: 1751278493329
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfabric1-2.2.0-h5505292_0.conda
+ sha256: 56b1ee3643eff9a73acf0053955edf93db240cec93102d7537b475d9de82aaba
+ md5: e290471d23f56b5fffcee2244fcac2da
+ depends:
+ - __osx >=11.0
+ license: BSD-2-Clause OR GPL-2.0-only
+ license_family: BSD
+ size: 330314
+ timestamp: 1751278648826
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda
+ sha256: 6394b1bc67c64a21a5cc73d1736d1d4193a64515152e861785c44d2cfc49edf3
+ md5: 4ca9ea59839a9ca8df84170fab4ceb41
+ depends:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ size: 51216
+ timestamp: 1743434595269
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda
+ sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60
+ md5: c215a60c2935b517dcda8cad4705734d
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ size: 39839
+ timestamp: 1743434670405
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-14_2_0_h51e75f0_103.conda
+ sha256: 124dcd89508bd16f562d9d3ce6a906336a7f18e963cd14f2877431adee14028e
+ md5: 090b3c9ae1282c8f9b394ac9e4773b10
+ depends:
+ - libgfortran5 14.2.0 h51e75f0_103
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 156202
+ timestamp: 1743862427451
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda
+ sha256: 8628746a8ecd311f1c0d14bb4f527c18686251538f7164982ccbe3b772de58b5
+ md5: 044a210bc1d5b8367857755665157413
+ depends:
+ - libgfortran5 14.2.0 h6c33f7e_103
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 156291
+ timestamp: 1743863532821
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-14.2.0-h51e75f0_103.conda
+ sha256: d2ac5e09587e5b21b7bb5795d24f33257e44320749c125448611211088ef8795
+ md5: 6183f7e9cd1e7ba20118ff0ca20a05e5
+ depends:
+ - llvm-openmp >=8.0.0
+ constrains:
+ - libgfortran 5.0.0 14_2_0_*_103
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 1225013
+ timestamp: 1743862382377
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda
+ sha256: 8599453990bd3a449013f5fa3d72302f1c68f0680622d419c3f751ff49f01f17
+ md5: 69806c1e957069f1d515830dcc9f6cbb
+ depends:
+ - llvm-openmp >=8.0.0
+ constrains:
+ - libgfortran 5.0.0 14_2_0_*_103
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ size: 806566
+ timestamp: 1743863491726
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libhwloc-2.11.2-default_h4cdd727_1001.conda
+ sha256: 989917281abf762b7e7a2b5968db2b6b0e89f46e704042ab8ec61a66951e0e0b
+ md5: 52bbb10ac083c563d00df035c94f9a63
+ depends:
+ - __osx >=10.13
+ - libcxx >=18
+ - libxml2 >=2.13.4,<2.14.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2359326
+ timestamp: 1731375067281
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwloc-2.11.2-default_hbce5d74_1001.conda
+ sha256: dcac7144ad93cf3f276ec14c5553aa34de07443a9b1db6b3cd8d2e117b173c40
+ md5: ff6438cf47cff4899ae9900bf9253c41
+ depends:
+ - __osx >=11.0
+ - libcxx >=18
+ - libxml2 >=2.13.4,<2.14.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2332319
+ timestamp: 1731375088576
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h4b5e92a_1.conda
+ sha256: c2a9c65a245c7bcb8c17c94dd716dad2d42b7c98e0c17cc5553a5c60242c4dda
+ md5: 6283140d7b2b55b6b095af939b71b13f
+ depends:
+ - __osx >=10.13
+ license: LGPL-2.1-only
+ size: 669052
+ timestamp: 1740128415026
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-hfe07756_1.conda
+ sha256: d30780d24bf3a30b4f116fca74dedb4199b34d500fe6c52cced5f8cc1e926f03
+ md5: 450e6bdc0c7d986acf7b8443dce87111
+ depends:
+ - __osx >=11.0
+ license: LGPL-2.1-only
+ size: 681804
+ timestamp: 1740128227484
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-12_h8d7f381_netlib.conda
+ build_number: 12
+ sha256: a6b86e216788a405dd5c1c716a0ab054b019f0ecbafc4c94b4e1a064f15635c8
+ md5: 2f01a380d335ee7559d1314eabf950d3
+ depends:
+ - __osx >=10.13
+ - libblas 3.9.0.*
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - libgfortran5 >=14.2.0
+ track_features:
+ - blas_netlib
+ - blas_netlib_2
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2630711
+ timestamp: 1745847577808
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-32_h236ab99_openblas.conda
+ build_number: 32
+ sha256: 1e26450b80525b3f656e9c75fd26a10ebaa1d339fe4ca9c7affbebd9acbeac03
+ md5: ccdca0c0730ad795e064d81dbe540723
+ depends:
+ - libblas 3.9.0 32_h7f60823_openblas
+ constrains:
+ - blas 2.132 openblas
+ - liblapacke 3.9.0 32*_openblas
+ - libcblas 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17553
+ timestamp: 1750389051033
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-32_h3c9cff3_accelerate.conda
+ build_number: 32
+ sha256: 33678b227fad46dd33b46113b85a74ce2daa8a09e1ca32bbba402eae30a4d5c2
+ md5: a811139fe73e262d677e6b76ababa1ca
+ depends:
+ - libblas 3.9.0 32_h504e6c8_accelerate
+ constrains:
+ - libcblas 3.9.0 32*_accelerate
+ - blas 2.132 accelerate
+ - liblapacke 3.9.0 32*_accelerate
+ track_features:
+ - blas_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17491
+ timestamp: 1750389082887
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-32_hc9a63f6_openblas.conda
+ build_number: 32
+ sha256: 5e1cfa3581d1dec6b07a75084ff6cfa4b4465c646c6884a71c78a28543f83b61
+ md5: bf9ead3fa92fd75ad473c6a1d255ffcb
+ depends:
+ - libblas 3.9.0 32_h10e41b3_openblas
+ constrains:
+ - blas 2.132 openblas
+ - libcblas 3.9.0 32*_openblas
+ - liblapacke 3.9.0 32*_openblas
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17507
+ timestamp: 1750388977861
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapacke-3.9.0-12_hf157144_netlib.conda
+ build_number: 12
+ sha256: d69ddc6ac127896fb2a737d3f709ac7b85f1afd36222581a33b34c5b9b98860e
+ md5: d7a9628ce1de7e95f5cc4389fd723a4c
+ depends:
+ - __osx >=10.13
+ - libblas 3.9.0.*
+ - libcblas 3.9.0.*
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - libgfortran5 >=14.2.0
+ - liblapack 3.9.0.*
+ track_features:
+ - blas_netlib
+ - blas_netlib_2
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 365900
+ timestamp: 1745847597324
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapacke-3.9.0-32_h09be921_accelerate.conda
+ build_number: 32
+ sha256: 3971dbbd9a161808520cc9ae7e81220345e573833292cc71955fec107511298d
+ md5: 5e5251f7613230dced77d1abb7dc095d
+ depends:
+ - libblas 3.9.0 32_h504e6c8_accelerate
+ - libcblas 3.9.0 32_h8d39bcd_accelerate
+ - liblapack 3.9.0 32_h3c9cff3_accelerate
+ constrains:
+ - blas 2.132 accelerate
+ track_features:
+ - blas_accelerate
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 17516
+ timestamp: 1750389096687
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda
+ sha256: 7e22fd1bdb8bf4c2be93de2d4e718db5c548aa082af47a7430eb23192de6bb36
+ md5: 8468beea04b9065b9807fc8b9cdc5894
+ depends:
+ - __osx >=10.13
+ constrains:
+ - xz 5.8.1.*
+ license: 0BSD
+ size: 104826
+ timestamp: 1749230155443
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda
+ sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285
+ md5: d6df911d4564d77c4374b02552cb17d1
+ depends:
+ - __osx >=11.0
+ constrains:
+ - xz 5.8.1.*
+ license: 0BSD
+ size: 92286
+ timestamp: 1749230283517
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda
+ sha256: 98299c73c7a93cd4f5ff8bb7f43cd80389f08b5a27a296d806bdef7841cc9b9e
+ md5: 18b81186a6adb43f000ad19ed7b70381
+ depends:
+ - __osx >=10.13
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 77667
+ timestamp: 1748393757154
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda
+ sha256: 0a1875fc1642324ebd6c4ac864604f3f18f57fbcf558a8264f6ced028a3c75b2
+ md5: 85ccccb47823dd9f7a99d2c7f530342f
+ depends:
+ - __osx >=11.0
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 71829
+ timestamp: 1748393749336
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_hbf64a52_0.conda
+ sha256: 933eb95a778657649a66b0e3cf638d591283159954c5e92b3918d67347ed47a1
+ md5: 29c54869a3c7d33b6a0add39c5a325fe
+ depends:
+ - __osx >=10.13
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - llvm-openmp >=18.1.8
+ constrains:
+ - openblas >=0.3.30,<0.3.31.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6179547
+ timestamp: 1750380498501
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_hf332438_0.conda
+ sha256: 501c8c64f1a6e6b671e49835e6c483bc25f0e7147f3eb4bbb19a4c3673dcaf28
+ md5: 5d7dbaa423b4c253c476c24784286e4b
+ depends:
+ - __osx >=11.0
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - llvm-openmp >=18.1.8
+ constrains:
+ - openblas >=0.3.30,<0.3.31.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 4163399
+ timestamp: 1750378829050
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libpmix-5.0.8-h2a508f7_0.conda
+ sha256: f2bab20573da94e14833a399e1a396dd5b16abf7f6defb204006ec8201f17133
+ md5: 2806372714a26992d34ebbdc35f956fe
+ depends:
+ - __osx >=10.13
+ - libevent >=2.1.12,<2.1.13.0a0
+ - libhwloc >=2.11.2,<2.11.3.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 589258
+ timestamp: 1746901782821
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpmix-5.0.8-h6500a5a_0.conda
+ sha256: e7e90a617fb8ba88dbb88d50cb51df14e7585259dba3ea7d737197a1532d37b7
+ md5: 797a85a082ec87c4dfa817cb29e34b6b
+ depends:
+ - __osx >=11.0
+ - libevent >=2.1.12,<2.1.13.0a0
+ - libhwloc >=2.11.2,<2.11.3.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 532413
+ timestamp: 1746901806284
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.6-h7a28ce2_1.conda
+ sha256: 69fc6e4ce84838595f7627c3c00e34039cfebf85678a3c547369c66eeefe25fc
+ md5: 8cc5332625e508f011cb8cfbf6242c17
+ depends:
+ - __osx >=10.13
+ - bzip2 >=1.0.8,<2.0a0
+ - libgfortran >=5
+ - libgfortran5 >=13.2.0
+ - liblzma >=5.6.3,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: CECILL-C
+ size: 292800
+ timestamp: 1737537133224
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.6-he56f69b_1.conda
+ sha256: b616a5943501e35f32699b5f29d4216a3a94bfca87b9ae30feda89a9fa5c2f7a
+ md5: 291ffb6a18b7e35bf42a317cc6856348
+ depends:
+ - __osx >=11.0
+ - bzip2 >=1.0.8,<2.0a0
+ - libgfortran >=5
+ - libgfortran5 >=13.2.0
+ - liblzma >=5.6.3,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: CECILL-C
+ size: 273604
+ timestamp: 1737537249207
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.2-he7d56d0_0.conda
+ sha256: bd3ab15e14d7e88851c962034d97519a135d86f79f88b3237fbfb34194c114cb
+ md5: 678284738efc450afcf90f70365f7318
+ depends:
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
+ license: Unlicense
+ size: 980106
+ timestamp: 1751135725501
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.2-h6fb428d_0.conda
+ sha256: 6b51a9e7366d6cd26e50d1d0646331d457999ebb88af258f06a74f075e95bf68
+ md5: b2dc1707166040e738df2d514f8a1d22
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: Unlicense
+ size: 901519
+ timestamp: 1751135765345
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.13.8-h93c44a6_0.conda
+ sha256: 4b29663164d7beb9a9066ddcb8578fc67fe0e9b40f7553ea6255cd6619d24205
+ md5: e42a93a31cbc6826620144343d42f472
+ depends:
+ - __osx >=10.13
+ - icu >=75.1,<76.0a0
+ - libiconv >=1.18,<2.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: MIT
+ license_family: MIT
+ size: 609197
+ timestamp: 1746634704204
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.8-h52572c6_0.conda
+ sha256: 13eb825eddce93761d965da3edaf3a42d868c61ece7d9cf21f7e2a13087c2abe
+ md5: d7884c7af8af5a729353374c189aede8
+ depends:
+ - __osx >=11.0
+ - icu >=75.1,<76.0a0
+ - libiconv >=1.18,<2.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ license: MIT
+ license_family: MIT
+ size: 583068
+ timestamp: 1746634531197
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
+ sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09
+ md5: 003a54a4e32b02f7355b50a837e699da
+ depends:
+ - __osx >=10.13
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ size: 57133
+ timestamp: 1727963183990
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
+ sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b
+ md5: 369964e85dc26bfe78f41399b366c435
+ depends:
+ - __osx >=11.0
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ size: 46438
+ timestamp: 1727963202283
+- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-20.1.7-ha54dae1_0.conda
+ sha256: 18d3b64965c1f5f7cd24a140b3e4f49191dd579cc8ca6d3db220830caf8aae3d
+ md5: e240159643214102dc88395c4ecee9cf
+ depends:
+ - __osx >=10.13
+ constrains:
+ - openmp 20.1.7|20.1.7.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ size: 306443
+ timestamp: 1749892271445
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.7-hdb05f8b_0.conda
+ sha256: e7d95b50a90cdc9e0fc38bc37f493a61b9d08164114b562bbd9ff0034f45eca2
+ md5: 741e1da0a0798d32e13e3724f2ca2dcf
+ depends:
+ - __osx >=11.0
+ constrains:
+ - openmp 20.1.7|20.1.7.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ size: 281996
+ timestamp: 1749892286735
+- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda
+ sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a
+ md5: fee3164ac23dfca50cfcc8b85ddefb81
+ depends:
+ - mdurl >=0.1,<1
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 64430
+ timestamp: 1733250550053
+- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
+ sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7
+ md5: 592132998493b3ff25fd7479396e8351
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 14465
+ timestamp: 1733255681319
+- conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda
+ sha256: dddb6721dff05b8dfb654c532725330231fcb81ff1e27d885ee0cdcc9fccf1c4
+ md5: d511e58aaaabfc23136880d9956fa7a6
+ depends:
+ - __osx >=10.13
+ - gmp >=6.3.0,<7.0a0
+ license: LGPL-3.0-only
+ license_family: LGPL
+ size: 373396
+ timestamp: 1725746891597
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda
+ sha256: 4463e4e2aba7668e37a1b8532859191b4477a6f3602a5d6b4d64ad4c4baaeac5
+ md5: 4e4ea852d54cc2b869842de5044662fb
+ depends:
+ - __osx >=11.0
+ - gmp >=6.3.0,<7.0a0
+ license: LGPL-3.0-only
+ license_family: LGPL
+ size: 345517
+ timestamp: 1725746730583
+- conda: https://conda.anaconda.org/conda-forge/osx-64/mpi-1.0-openmpi.tar.bz2
+ sha256: 1326b28195e8808cebc18a593f84c5cbd606826a150dd7e0365f11b86238b5df
+ md5: 8c3bc725bf4d10fc6e56031f7543771f
+ license: BSD 3-clause
+ size: 4394
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpi-1.0-openmpi.tar.bz2
+ sha256: 7051ff40ca1208c06db24f8bf5cf72ee7ad03891e7fd365c3f7a4190938ae83a
+ md5: cb269c879b1ac5e5ab62a3c17528c40f
+ license: BSD 3-clause
+ size: 4294
+ timestamp: 1605464601195
+- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda
+ sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9
+ md5: ced34dd9929f491ca6dab6a2927aff25
+ depends:
+ - __osx >=10.13
+ license: X11 AND BSD-3-Clause
+ size: 822259
+ timestamp: 1738196181298
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
+ sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733
+ md5: 068d497125e4bf8a66bf707254fff5ae
+ depends:
+ - __osx >=11.0
+ license: X11 AND BSD-3-Clause
+ size: 797030
+ timestamp: 1738196177597
+- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.1-py313hc518a0f_0.conda
+ sha256: a3a4c28b173227f32d99776212798b822deeef3907f87badc76b74931b27ed72
+ md5: 1bd9317ab52825bc8fa33a32ccc17935
+ depends:
+ - __osx >=10.13
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=18
+ - liblapack >=3.9.0,<4.0a0
+ - python >=3.13,<3.14.0a0
+ - python_abi 3.13.* *_cp313
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 7602309
+ timestamp: 1751342608687
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.1-py313h41a2e72_0.conda
+ sha256: 35346fa9da0a6a8776d4235469c1513b116d2ba3844802da00d5e821bb3e9828
+ md5: 3ed1eeb92906e8653c7346854c32dc6e
+ depends:
+ - __osx >=11.0
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=18
+ - liblapack >=3.9.0,<4.0a0
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
+ - python_abi 3.13.* *_cp313
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6567388
+ timestamp: 1751342678109
+- conda: https://conda.anaconda.org/conda-forge/osx-64/openmpi-5.0.8-h442dfbe_100.conda
+ sha256: 33f53b28c3bd992d97269d58a771150a241e850ecc5ced0b9621b5b5d1b91cbe
+ md5: e6d65e6c735f119f7c8fcdf671d00c3c
+ depends:
+ - __osx >=10.13
+ - libcxx >=18
+ - libevent >=2.1.12,<2.1.13.0a0
+ - libfabric
+ - libfabric1 >=1.14.0
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - libgfortran5 >=14.2.0
+ - libhwloc >=2.11.2,<2.11.3.0a0
+ - libpmix >=5.0.8,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - mpi 1.0 openmpi
+ constrains:
+ - libprrte ==0.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2566988
+ timestamp: 1748705118521
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openmpi-5.0.8-hc9a84be_100.conda
+ sha256: 286c3da1493d43feed2ab6806477706bce5b6343f2d706dcfcc7a4be91c1933d
+ md5: bc87585958dd4adcbd93f0726c153c7b
+ depends:
+ - __osx >=11.0
+ - libcxx >=18
+ - libevent >=2.1.12,<2.1.13.0a0
+ - libfabric
+ - libfabric1 >=1.14.0
+ - libgfortran 5.*
+ - libgfortran5 >=13.3.0
+ - libgfortran5 >=14.2.0
+ - libhwloc >=2.11.2,<2.11.3.0a0
+ - libpmix >=5.0.8,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - mpi 1.0 openmpi
+ constrains:
+ - libprrte ==0.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 2349281
+ timestamp: 1748704985121
+- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.5.0-hc426f3f_1.conda
+ sha256: bcac94cb82a458b4e3164da8d9bced08cc8c3da2bc3bd7330711a3689c1464a5
+ md5: 919faa07b9647beb99a0e7404596a465
+ depends:
+ - __osx >=10.13
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ size: 2739181
+ timestamp: 1746224401118
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_1.conda
+ sha256: 73d366c1597a10bcd5f3604b5f0734b31c23225536e03782c6a13f9be9d01bff
+ md5: 5c7aef00ef60738a14e0e612cfc5bcde
+ depends:
+ - __osx >=11.0
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ size: 3064197
+ timestamp: 1746223530698
+- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
+ sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991
+ md5: 58335b26c38bf4a20f399384c33cbcf9
+ depends:
+ - python >=3.8
+ - python
+ license: Apache-2.0
+ license_family: APACHE
+ size: 62477
+ timestamp: 1745345660407
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pixi-pack-0.7.1-hffa81eb_0.conda
+ sha256: 745c3b0cc08bb62978ca19b950a7133bc4836e7bcdcde4085c427d24a7f07e9c
+ md5: c9c7946408cd9b507134891cd5cea78a
+ depends:
+ - __osx >=10.13
+ - openssl >=3.5.0,<4.0a0
+ constrains:
+ - __osx >=10.13
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 4055006
+ timestamp: 1751015348578
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixi-pack-0.7.1-h2b2570c_0.conda
+ sha256: c21345d869cc8aafc61dee6347bd8e0726ede859bb359f3d0902cb6b27995e37
+ md5: f1572b4748bcaf5789d4b6c04c9373a5
+ depends:
+ - __osx >=11.0
+ - openssl >=3.5.0,<4.0a0
+ constrains:
+ - __osx >=11.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 4091428
+ timestamp: 1751015410632
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pixi-unpack-0.7.1-hffa81eb_0.conda
+ sha256: 3b453bd5f34d3f47fdb27b0d05feb2143a35cdb6bf3b65d7c586bbe9d0f2dc27
+ md5: 80906e99a9d2d89118fec2146810ee45
+ depends:
+ - __osx >=10.13
+ - openssl >=3.5.0,<4.0a0
+ constrains:
+ - __osx >=10.13
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 3905794
+ timestamp: 1751015348578
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixi-unpack-0.7.1-h2b2570c_0.conda
+ sha256: d68bd1ba30132e1b75b4bbe6a9686af6cfb0d9c81995cabedeccac9a6ea86edd
+ md5: 3de0b54adae5fa0d45f159014cfd6dac
+ depends:
+ - __osx >=11.0
+ - openssl >=3.5.0,<4.0a0
+ constrains:
+ - __osx >=11.0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 3887860
+ timestamp: 1751015410631
+- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda
+ sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc
+ md5: 7da7ccd349dbf6487a7778579d2bb971
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 24246
+ timestamp: 1747339794916
+- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
+ sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a
+ md5: 6b6ece66ebcae2d5f326c77ef2c5a066
+ depends:
+ - python >=3.9
+ license: BSD-2-Clause
+ license_family: BSD
+ size: 889287
+ timestamp: 1750615908735
+- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda
+ sha256: b92afb79b52fcf395fd220b29e0dd3297610f2059afac45298d44e00fcbf23b6
+ md5: 513d3c262ee49b54a8fec85c5bc99764
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 95988
+ timestamp: 1743089832359
+- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda
+ sha256: 93e267e4ec35353e81df707938a6527d5eb55c97bf54c3b87229b69523afb59d
+ md5: a49c2283f24696a7b30367b7346a0144
+ depends:
+ - colorama >=0.4
+ - exceptiongroup >=1
+ - iniconfig >=1
+ - packaging >=20
+ - pluggy >=1.5,<2
+ - pygments >=2.7.2
+ - python >=3.9
+ - tomli >=1
+ constrains:
+ - pytest-faulthandler >=2
+ license: MIT
+ license_family: MIT
+ size: 276562
+ timestamp: 1750239526127
+- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-asyncio-cooperative-0.37.0-pyhd8ed1ab_0.conda
+ sha256: f9a717b72e5058acac7029ef4c87a3f8d0c7a8f863709683cf43f9eebc2cfa4f
+ md5: 16e23a1ae321fc74cb4a2bd5826b060e
+ depends:
+ - pytest
+ - python >=3.7
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 14317
+ timestamp: 1724014353378
+- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.5-hc3a4c56_102_cp313.conda
+ build_number: 102
+ sha256: 8b2f14010eb0baf04ed1eb3908c9e184cd14512c4d64c43f313251b90e75b345
+ md5: afa9492a7d31f6f7189ca8f08aceadac
+ depends:
+ - __osx >=10.13
+ - bzip2 >=1.0.8,<2.0a0
+ - libexpat >=2.7.0,<3.0a0
+ - libffi >=3.4.6,<3.5.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libmpdec >=4.0.0,<5.0a0
+ - libsqlite >=3.50.1,<4.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - ncurses >=6.5,<7.0a0
+ - openssl >=3.5.0,<4.0a0
+ - python_abi 3.13.* *_cp313
+ - readline >=8.2,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ license: Python-2.0
+ size: 13955531
+ timestamp: 1750063132430
+ python_site_packages_path: lib/python3.13/site-packages
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.5-hf3f3da0_102_cp313.conda
+ build_number: 102
+ sha256: ee1b09fb5563be8509bb9b29b2b436a0af75488b5f1fa6bcd93fe0fba597d13f
+ md5: 123b7f04e7b8d6fc206cf2d3466f8a4b
+ depends:
+ - __osx >=11.0
+ - bzip2 >=1.0.8,<2.0a0
+ - libexpat >=2.7.0,<3.0a0
+ - libffi >=3.4.6,<3.5.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libmpdec >=4.0.0,<5.0a0
+ - libsqlite >=3.50.1,<4.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - ncurses >=6.5,<7.0a0
+ - openssl >=3.5.0,<4.0a0
+ - python_abi 3.13.* *_cp313
+ - readline >=8.2,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ license: Python-2.0
+ size: 12931515
+ timestamp: 1750062475020
+ python_site_packages_path: lib/python3.13/site-packages
+- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda
+ build_number: 7
+ sha256: 0595134584589064f56e67d3de1d8fcbb673a972946bce25fb593fb092fdcd97
+ md5: e84b44e6300f1703cb25d29120c5b1d8
+ constrains:
+ - python 3.13.* *_cp313
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 6988
+ timestamp: 1745258852285
+- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda
+ sha256: 53017e80453c4c1d97aaf78369040418dea14cf8f46a2fa999f31bd70b36c877
+ md5: 342570f8e02f2f022147a7f841475784
+ depends:
+ - ncurses >=6.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ size: 256712
+ timestamp: 1740379577668
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda
+ sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34
+ md5: 63ef3f6e6d6d5c589e64f11263dc5676
+ depends:
+ - ncurses >=6.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ size: 252359
+ timestamp: 1740379663071
+- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda
+ sha256: d10e2b66a557ec6296844e04686db87818b0df87d73c06388f2332fda3f7d2d5
+ md5: 202f08242192ce3ed8bdb439ba40c0fe
+ depends:
+ - markdown-it-py >=2.2.0
+ - pygments >=2.13.0,<3.0.0
+ - python >=3.9
+ - typing_extensions >=4.0.0,<5.0.0
+ - python
+ license: MIT
+ license_family: MIT
+ size: 200323
+ timestamp: 1743371105291
+- conda: https://conda.anaconda.org/conda-forge/osx-64/scotch-7.0.6-h40132e6_1.conda
+ sha256: 4aa1c7c0e204c5bca2ac5182ccd0c7daef596947675bb94f9f40b53f6880f758
+ md5: b27c6557f9770700b323d33375cb5e3d
+ depends:
+ - libscotch 7.0.6 h7a28ce2_1
+ license: CECILL-C
+ size: 73534
+ timestamp: 1737537275388
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scotch-7.0.6-hc1c4572_1.conda
+ sha256: c421e67cd3a181260ab5c00516d998298aa9f83fc94a5bc02b3411bebf07f332
+ md5: 46252b1112d47b6f3631b77682f285ed
+ depends:
+ - libscotch 7.0.6 he56f69b_1
+ license: CECILL-C
+ size: 76008
+ timestamp: 1737537359259
+- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda
+ sha256: b24468006a96b71a5f4372205ea7ec4b399b0f2a543541e86f883de54cd623fc
+ md5: 9864891a6946c2fe037c02fca7392ab4
+ depends:
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
+ license: TCL
+ license_family: BSD
+ size: 3259809
+ timestamp: 1748387843735
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda
+ sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e
+ md5: 7362396c170252e7b7b0c8fb37fe9c78
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: TCL
+ license_family: BSD
+ size: 3125538
+ timestamp: 1748388189063
+- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
+ sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e
+ md5: ac944244f1fed2eb49bae07193ae8215
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ size: 19167
+ timestamp: 1733256819729
+- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.14.0-h32cad80_0.conda
+ sha256: b8cabfa54432b0f124c0af6b6facdf8110892914fa841ac2e80ab65ac52c1ba4
+ md5: a1cdd40fc962e2f7944bc19e01c7e584
+ depends:
+ - typing_extensions ==4.14.0 pyhe01879c_0
+ license: PSF-2.0
+ license_family: PSF
+ size: 90310
+ timestamp: 1748959427551
+- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.0-pyhe01879c_0.conda
+ sha256: 8561db52f278c5716b436da6d4ee5521712a49e8f3c70fcae5350f5ebb4be41c
+ md5: 2adcd9bb86f656d3d43bf84af59a1faf
+ depends:
+ - python >=3.9
+ - python
+ license: PSF-2.0
+ license_family: PSF
+ size: 50978
+ timestamp: 1748959427551
+- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
+ sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192
+ md5: 4222072737ccff51314b5ece9c7d6f5a
+ license: LicenseRef-Public-Domain
+ size: 122968
+ timestamp: 1742727099393
+- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda
+ sha256: c171c43d0c47eed45085112cb00c8c7d4f0caa5a32d47f2daca727e45fb98dca
+ md5: cd60a4a5a8d6a476b30d8aa4bb49251a
+ depends:
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 485754
+ timestamp: 1742433356230
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda
+ sha256: 0d02046f57f7a1a3feae3e9d1aa2113788311f3cf37a3244c71e61a93177ba67
+ md5: e6f69c7bcccdefa417f056fa593b40f0
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ size: 399979
+ timestamp: 1742433432699
diff --git a/pixi.toml b/pixi.toml
new file mode 100644
index 0000000..fa1ab71
--- /dev/null
+++ b/pixi.toml
@@ -0,0 +1,33 @@
+[project]
+authors = ["Gabriel S. Gerlero "]
+channels = ["conda-forge"]
+description = "Native OpenFOAM for macOS"
+name = "openfoam-app"
+platforms = ["osx-arm64", "osx-64"]
+
+[system-requirements]
+macos = "11"
+
+[dependencies]
+pixi-pack = ">=0.7.0"
+pixi-unpack = ">=0.7.0"
+pytest = ">=8.3.3"
+pytest-asyncio-cooperative = ">=0.37.0"
+foamlib = ">=0.6.6"
+
+[feature.openfoam.dependencies]
+llvm-openmp = ">=19.1.1"
+openmpi = ">=5.0.5"
+fftw = ">=3.3.10"
+scotch = ">=7.0.5"
+cgal-cpp = ">=5.6.1,<6"
+bash = ">=5.2.21"
+
+[feature.openfoam.target.osx-64.dependencies]
+blas = { version = ">=2.128,<3", build = "blis" }
+
+[feature.openfoam.target.osx-arm64.dependencies]
+blas = { version = ">=2.128,<3", build = "accelerate" }
+
+[environments]
+openfoam = {features = ["openfoam"], no-default-feature = true}
diff --git a/scripts/bundle_deps.py b/scripts/bundle_deps.py
deleted file mode 100755
index 3eb5803..0000000
--- a/scripts/bundle_deps.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python3
-"""
-Copy Homebrew dependencies installed with Homebrew Bundle.
-"""
-import subprocess
-import shutil
-
-from pathlib import Path
-
-import macho
-
-SRC_PREFIX = Path(subprocess.run(["brew", "--prefix"], stdout=subprocess.PIPE, text=True, check=True).stdout.strip())
-
-def bundle_list():
- return subprocess.run(["brew", "bundle", "list"], stdout=subprocess.PIPE, text=True, check=True).stdout.splitlines()
-
-def deps(*formulae, union=False):
- cmd = ["brew", "deps"]
- if union:
- cmd.append("--union")
- return subprocess.run([*cmd, *formulae], stdout=subprocess.PIPE, text=True, check=True).stdout.splitlines()
-
-def copy_installed_formula(formula, dst_prefix, *, relative_install_names=False):
- dst_prefix = Path(dst_prefix)
-
- _, _, name = formula.rpartition("/")
-
- src_opt = SRC_PREFIX / "opt" / name
- dst_opt = dst_prefix / "opt" / name
-
- src_cellar = SRC_PREFIX / "Cellar" / name
- dst_cellar = dst_prefix / "Cellar" / name
-
- shutil.copytree(src_cellar, dst_cellar)
-
- dst_opt.parent.mkdir(exist_ok=True)
- shutil.copy(src_opt, dst_opt, follow_symlinks=False)
-
- # Relocate binaries
- for file in dst_cellar.rglob("*"):
- if not file.is_file():
- continue
- if (file.suffix == ".dylib" or file.suffix == ".so"):
- macho.change_dylib_id(file, dst_opt.absolute() / Path(*file.relative_to(dst_cellar).parts[1:]))
- if (file.suffix == "" or file.suffix == ".dylib" or file.suffix == ".so"):
- for install_name in macho.get_install_names(file):
- if install_name.is_absolute() and install_name.is_relative_to(SRC_PREFIX):
- if install_name.is_relative_to(SRC_PREFIX):
- new_install_name = dst_prefix.absolute() / install_name.relative_to(SRC_PREFIX)
- macho.change_install_name(file, install_name, new_install_name, relative=relative_install_names)
-
-
-dst_prefix = Path("usr")
-formulae = bundle_list()
-
-for formula in formulae:
- print(f"Bundling {formula}")
- copy_installed_formula(formula, dst_prefix, relative_install_names=True)
-
-for formula in deps(*formulae, union=True):
- if formula not in formulae:
- print(f"Bundling {formula} (indirect dependency)")
- copy_installed_formula(formula, dst_prefix, relative_install_names=True)
diff --git a/scripts/macho.py b/scripts/macho.py
deleted file mode 100644
index 8d21651..0000000
--- a/scripts/macho.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-Utility functions for working with macOS Mach-O files.
-"""
-import subprocess
-import platform
-import sys
-
-if sys.version_info < (3, 12):
- import os
-
-from pathlib import Path
-
-def _codesign(file):
- subprocess.run(["codesign", "--sign", "-", "--force", "--preserve-metadata=entitlements,requirements,flags,runtime", file], check=True)
-
-def change_dylib_id(lib, id):
- subprocess.run(["install_name_tool", "-id", id, lib], check=True)
- if platform.machine() == "arm64":
- _codesign(lib)
-
-def get_install_names(file):
- otool_stdout = subprocess.run(["otool", "-L", file], stdout=subprocess.PIPE, text=True, check=True).stdout
- install_names = [Path(line.rpartition(" (compatibility version ")[0].strip()) for line in otool_stdout.splitlines()[1:]]
- return install_names
-
-def change_install_name(file, old_install_name, new_install_name, *, relative=False):
- file = Path(file).absolute()
- if relative:
- new_install_name = Path(new_install_name)
- assert new_install_name.is_absolute()
- if sys.version_info >= (3, 12):
- new_install_name = new_install_name.relative_to(file.parent, walk_up=True)
- else: # No walk_up parameter in Python < 3.12
- new_install_name = Path(os.path.relpath(new_install_name, start=file.parent))
- new_install_name = "@loader_path" / new_install_name
- subprocess.run(["install_name_tool", "-change", old_install_name, new_install_name, file], check=True)
- if platform.machine() == "arm64":
- _codesign(file)
diff --git a/scripts/relativize_install_names.py b/scripts/relativize_install_names.py
deleted file mode 100755
index 5875cf6..0000000
--- a/scripts/relativize_install_names.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python3
-"""
-Replace absolute references to dylibs in OpenFOAM binaries with relative references.
-"""
-
-import subprocess
-
-from pathlib import Path
-
-import macho
-
-def relativize_install_names(file, lib_dirs):
- for install_name in macho.get_install_names(file):
- if install_name.is_absolute():
- for lib_dir,new_lib_dir in lib_dirs.items():
- lib_dir = lib_dir.absolute()
- if install_name.is_relative_to(lib_dir):
- new_install_name = new_lib_dir.absolute() / install_name.relative_to(lib_dir)
- macho.change_install_name(file, install_name, new_install_name, relative=True)
- break
-
-# Replace references to dependencies
-lib_dirs = {Path("usr").resolve(): Path("usr")} # In case "usr" is a symlink
-
-# Replace references to OpenFOAM libraries if necessary
-OPENFOAM_VERSION = int(subprocess.run(["bin/foamEtcFile", "-show-api"], stdout=subprocess.PIPE, text=True, check=True).stdout)
-if OPENFOAM_VERSION < 2312:
- # References are already relative in OpenFOAM >= 2312
- # See https://develop.openfoam.com/Development/openfoam/-/issues/2948
- LIB_DIR, = list(Path("platforms").glob("*/lib"))
- MPI_LIB_DIR, = list(Path("platforms").glob("*/lib/*mpi*"))
- DUMMY_LIB_DIR, = list(Path("platforms").glob("*/lib/dummy"))
- lib_dirs[DUMMY_LIB_DIR] = MPI_LIB_DIR # Replace references to dummy MPI libraries with the actual MPI libraries
- lib_dirs[LIB_DIR] = LIB_DIR
-
-
-for lib in Path("platforms").glob("*/lib/**/*.dylib"):
- relativize_install_names(lib, lib_dirs)
-
-for bin in Path("platforms").glob("*/bin/*"):
- relativize_install_names(bin, lib_dirs)
diff --git a/sources/OpenFOAM-v2412.tgz.sha256 b/sources/OpenFOAM-v2412.tgz.sha256
new file mode 100644
index 0000000..e7e5824
--- /dev/null
+++ b/sources/OpenFOAM-v2412.tgz.sha256
@@ -0,0 +1 @@
+c353930105c39b75dac7fa7cfbfc346390caa633a868130fd8c9816ef5f732cd sources/OpenFOAM-v2412.tgz
diff --git a/sources/OpenFOAM-v2506.tgz.sha256 b/sources/OpenFOAM-v2506.tgz.sha256
new file mode 100644
index 0000000..e0e564f
--- /dev/null
+++ b/sources/OpenFOAM-v2506.tgz.sha256
@@ -0,0 +1 @@
+63d26f48ae7ee9a7806a0ceb339ef8a0ba485a4714d54fbfb31e78e1a4849965 sources/OpenFOAM-v2506.tgz
diff --git a/tests/requirements.txt b/tests/requirements.txt
deleted file mode 100644
index f96574f..0000000
--- a/tests/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-pytest>=7,<7.3
-pytest-asyncio-cooperative>=0.37.0,<0.38
-foamlib>=0.6.0,<0.7.0
diff --git a/tests/test_basic.py b/tests/test_basic.py
index 5da3a50..10711dd 100644
--- a/tests/test_basic.py
+++ b/tests/test_basic.py
@@ -6,10 +6,11 @@
from foamlib import AsyncFoamCase
@pytest.fixture
-async def pitz_case(tmp_path):
+async def pitz():
case = AsyncFoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "incompressible" / "simpleFoam" / "pitzDaily")
- return await case.clone(tmp_path / case.name)
+ async with case.clone() as clone:
+ yield clone
@pytest.mark.asyncio_cooperative
-async def test_pitz(pitz_case):
- await pitz_case.run()
+async def test_pitz(pitz):
+ await pitz.run()
diff --git a/tests/test_foamy.py b/tests/test_foamy.py
index 3bb5aab..7566893 100644
--- a/tests/test_foamy.py
+++ b/tests/test_foamy.py
@@ -6,9 +6,10 @@
from foamlib import AsyncFoamCase
@pytest.fixture
-async def blob(tmp_path):
+async def blob():
case = AsyncFoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "mesh" / "foamyHexMesh" / "blob")
- return await case.clone(tmp_path / case.name)
+ async with case.clone() as clone:
+ yield clone
@pytest.mark.parametrize("parallel", [False, True])
@pytest.mark.asyncio_cooperative
diff --git a/tests/test_parallel.py b/tests/test_parallel.py
index b9894cb..e0e5093 100644
--- a/tests/test_parallel.py
+++ b/tests/test_parallel.py
@@ -6,9 +6,10 @@
from foamlib import AsyncFoamCase
@pytest.fixture
-async def flange(tmp_path):
+async def flange():
case = AsyncFoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "basic" / "laplacianFoam" / "flange")
- return await case.clone(tmp_path / case.name)
+ async with case.clone() as clone:
+ yield clone
@pytest.mark.asyncio_cooperative
async def test_serial(flange):
diff --git a/tests/test_regression.py b/tests/test_regression.py
index 7ec5a08..d4eb76e 100644
--- a/tests/test_regression.py
+++ b/tests/test_regression.py
@@ -7,9 +7,10 @@
from foamlib import AsyncFoamCase
@pytest.fixture
-async def step(tmp_path):
+async def step():
case = AsyncFoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "incompressible" / "simpleFoam" / "backwardFacingStep2D")
- return await case.clone(tmp_path / case.name)
+ async with case.clone() as clone:
+ yield clone
@pytest.mark.asyncio_cooperative
async def test_step(step):