CUQIpy plugin for FEniCS
Project description
CUQIpy-FEniCS
CUQIpy-FEniCS is a plugin for CUQIpy software package. It provides an interface between FEniCS PDE models and CUQIpy modules.
Installation
First install FEniCS, we recommend using Anaconda from the available installation options. Then install CUQIpy-FEniCS with pip:
pip install cuqipy-fenics
If CUQIpy is not installed, it will be installed automatically. We provide additional information about FEniCS installation, below, in case the above approach was problematic.
Quickstart
import numpy as np
import matplotlib.pyplot as plt
import cuqi
import cuqipy_fenics
# Load a fenics forward model and data from testproblem library
model, y_data, info = cuqipy_fenics.testproblem.FEniCSDiffusion1D.get_components(
dim=20,
endpoint=1,
exactSolution='smooth_step',
mapping='exponential',
SNR=10000,
left_bc=0,
right_bc=8
)
# Set up Bayesian model
x = cuqi.distribution.GMRF(np.zeros(model.domain_dim),
25, 1, 'zero', geometry=model.domain_geometry)
# y ~ N(model(x), 0.01^2)
y = cuqi.distribution.Gaussian(mean=model(x), cov=0.05**2)
# Set up Bayesian Problem object
BP = cuqi.problem.BayesianProblem(y, x).set_data(y=y_data)
# Sample from the posterior
samples = BP.sample_posterior(5000)
# Analyze the samples
samples.burnthin(1000).plot_ci(95, plot_par=True,
exact=info.exactSolution, linestyle='-', marker='.')
For more examples, see the demos folder.
More on using and installing FEniCS
FEniCS on Google Colaboratory
If you do not wish to install FEniCS on your machine or you have difficulty doing so, one option is to install FEniCS on Google Colaboratory (Colab) Jupyter Notebook service. We show below how to achieve this using FEM on Colab packages. First open a notebook in Google Colab (an introduction to Colab can be found here) and write in a cell:
try:
import dolfin
except ImportError:
!wget "https://fem-on-colab.github.io/releases/fenics-install.sh" -O "/tmp/fenics-install.sh" && bash "/tmp/fenics-install.sh"
import dolfin
Then in a following cell use pip
to install cuqipy-fenics
as follows:
!pip install cuqipy-fenics
Test that you can import cuqi
and cuqipy_fenics
import cuqi
import cuqipy_fenics
Create a Docker image for FEniCS
Here is another approach of installing FEniCS that could be useful in some cases (e.g. MAC M1 machines). We create a Docker image that contains a conda environment for FEniCS.
Run the following command lines to create a directory named, for example,
my_dir
.
mkdir my_dir
cd my_dir
In my_dir
, run the following command lines to create the files needed for the
Docker image and to pull a base image continuumio/miniconda3
.
touch Dockerfile
touch environment.yml
docker pull continuumio/miniconda3
Edit the file Dockerfile
you just created to have the following lines:
# Define base image
FROM continuumio/miniconda3
# Set working directory for the project
WORKDIR /app
# Create Conda environment from the YAML file
COPY environment.yml .
RUN conda env create -f environment.yml
Edit the file environment.yml
you just created to have the following lines
name: env
channels:
- conda-forge
dependencies:
- python=3.10
- fenics
- pip
- pip:
# works for regular pip packages
- cuqipy-fenics
(consider also python=3.8
if python=3.10
turn out to be problematic)
Build the docker image, named my_image
for example, by running the following command inside my_dir
(this might take a little while):
docker build -t my_image .
Run the docker image:
docker run --entrypoint=/bin/bash -it -p 127.0.0.1:8090:8000 -v $(pwd):/app -w /app my_image
Inside the Docker container, activate the conda environment and run python:
conda activate env
python
Run the following python commands to make sure FEniCS
and cuqipy-fenics
are
installed
import fenics
import cuqi
import cuqipy_fenics
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for CUQIpy-FEniCS-0.4.0.post0.dev57.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bc6977bc39ca3f05a6c5038525e857d5e5ceb8359d98ad3f5a37a940dfc5cd2 |
|
MD5 | 57adc103ed9d9f938418a388b7bf1487 |
|
BLAKE2b-256 | 7f26e009e28ad783fe399e5c01b3c3d718bfb9bf6d5282b6117b8f8789b3b83b |
Hashes for CUQIpy_FEniCS-0.4.0.post0.dev57-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef95cbb96976d20d8c0e81250b9da820027d22428505865a99fcf9f91ad4005f |
|
MD5 | cf3012c3620421302d7cade60ab53830 |
|
BLAKE2b-256 | 1ea5b72b7886400b3d020a48f10c49c25cafda13735647302ea76a4a170b4de1 |