Install MPSlib (if not allready installed)


In [1]:
module_name='mpslib'
try:
    __import__(module_name)
    print('%s allready installed. skipping installation.' % module_name)
    exe_folder = ''
        
except ImportError:
    import sys
    is_colab = 'google.colab' in sys.modules
    print (is_colab)
    if is_colab:
        import os
        os.chdir('/content')
        print('%s cannot be loaded. trying to install it.' % module_name)
        !curl -O https://raw.githubusercontent.com/ergosimulation/mpslib/master/install_latest_mpslib.sh
        !sh ./install_latest_mpslib.sh
        os.chdir('/content')
        exe_folder = '/content/mpslib'
    else:
        print('Pleas install MPSlib and scikit-mps from http://github.com/ergosimulation/mpslib/')
    
import sys
is_colab = 'google.colab' in sys.modules
if is_colab:
    exe_folder = '/content/mpslib'
else:
  exe_folder = ''

print("Using MPSlib installed in %s " % exe_folder)


True
mpslib cannot be loaded. trying to install it.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   367  100   367    0     0   2005      0 --:--:-- --:--:-- --:--:--  1994
Cloning into 'mpslib'...
remote: Enumerating objects: 330, done.
remote: Counting objects: 100% (330/330), done.
remote: Compressing objects: 100% (223/223), done.
remote: Total 3384 (delta 224), reused 187 (delta 107), pack-reused 3054
Receiving objects: 100% (3384/3384), 24.42 MiB | 25.64 MiB/s, done.
Resolving deltas: 100% (2362/2362), done.
make -C mpslib
make[1]: Entering directory '/content/mpslib/mpslib'
g++ -o ENESIM.o -I. -O3 -march=native -std=c++11 -c ENESIM.cpp
g++ -o Coords3D.o -I. -O3 -march=native -std=c++11 -c Coords3D.cpp
g++ -o MPSAlgorithm.o -I. -O3 -march=native -std=c++11 -c MPSAlgorithm.cpp
g++ -o Coords4D.o -I. -O3 -march=native -std=c++11 -c Coords4D.cpp
g++ -o IO.o -I. -O3 -march=native -std=c++11 -c IO.cpp
g++ -o SNESIM.o -I. -O3 -march=native -std=c++11 -c SNESIM.cpp
g++ -o Utility.o -I. -O3 -march=native -std=c++11 -c Utility.cpp
ar rsv mpslib.a ENESIM.o Coords3D.o MPSAlgorithm.o Coords4D.o IO.o SNESIM.o Utility.o
ar: creating mpslib.a
a - ENESIM.o
a - Coords3D.o
a - MPSAlgorithm.o
a - Coords4D.o
a - IO.o
a - SNESIM.o
a - Utility.o
make[1]: Leaving directory '/content/mpslib/mpslib'
g++ -O3 -march=native -std=c++11 -Wl,--no-as-needed mps_genesim.cpp ENESIM_GENERAL.cpp mpslib/mpslib.a -o mps_genesim -I mpslib/ -lstdc++ -lpthread
g++ -O3 -march=native -std=c++11 -Wl,--no-as-needed mps_snesim_list.cpp SNESIMList.cpp mpslib/mpslib.a -o mps_snesim_list -I mpslib/ -lstdc++ -lpthread
g++ -O3 -march=native -std=c++11 -Wl,--no-as-needed mps_snesim_tree.cpp SNESIMTree.cpp mpslib/mpslib.a -o mps_snesim_tree -I mpslib/ -lstdc++ -lpthread

Linux
x86_64
Processing /content/mpslib/scikit-mps
Requirement already satisfied: numpy>=1.0.2 in /usr/local/lib/python3.6/dist-packages (from scikit-mps==0.1.0) (1.17.5)
Requirement already satisfied: matplotlib>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from scikit-mps==0.1.0) (3.1.2)
Collecting pyvista>0.21.0
  Downloading https://files.pythonhosted.org/packages/82/8c/c0fdf25b0cf8408e5979e0cec404fc7c945cc262b23efe47d4c9d933d3a6/pyvista-0.23.0.tar.gz (1.2MB)
     |████████████████████████████████| 1.2MB 2.8MB/s 
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.0.0->scikit-mps==0.1.0) (0.10.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.0.0->scikit-mps==0.1.0) (1.1.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.0.0->scikit-mps==0.1.0) (2.6.1)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.0.0->scikit-mps==0.1.0) (2.4.6)
Requirement already satisfied: imageio in /usr/local/lib/python3.6/dist-packages (from pyvista>0.21.0->scikit-mps==0.1.0) (2.4.1)
Collecting appdirs
  Downloading https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Collecting scooby>=0.2.2
  Downloading https://files.pythonhosted.org/packages/00/cc/3b7d955f896f06bd3143129702866ab7fe5ddfc3d1256c4fba3125378392/scooby-0.5.0.tar.gz
Collecting meshio>=3.3.0
  Downloading https://files.pythonhosted.org/packages/9f/07/cf58a295a06f4b672bfa9b87e7f34fc003d39f7e0f4fa6ae495f631d71dd/meshio-3.3.1-py3-none-any.whl (106kB)
     |████████████████████████████████| 112kB 52.5MB/s 
Collecting vtk
  Downloading https://files.pythonhosted.org/packages/22/f5/30e11e1ad21701e1cd185b046979107930419a74a5602c6b899dc8523fe4/vtk-8.1.2-cp36-cp36m-manylinux1_x86_64.whl (48.9MB)
     |████████████████████████████████| 48.9MB 89kB/s 
Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from cycler>=0.10->matplotlib>=1.0.0->scikit-mps==0.1.0) (1.12.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from kiwisolver>=1.0.1->matplotlib>=1.0.0->scikit-mps==0.1.0) (42.0.2)
Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from imageio->pyvista>0.21.0->scikit-mps==0.1.0) (6.2.2)
Building wheels for collected packages: scikit-mps, pyvista, scooby
  Building wheel for scikit-mps (setup.py) ... done
  Created wheel for scikit-mps: filename=scikit_mps-0.1.0-py2.py3-none-any.whl size=18561 sha256=9a55195b81ea99bd5144753b512210dcab01310a307431b150230dfce0c9c852
  Stored in directory: /root/.cache/pip/wheels/32/2d/e9/0a50b3df75fa8f6d8704e0f8f4a88817ea4d496c448cd1f786
  Building wheel for pyvista (setup.py) ... done
  Created wheel for pyvista: filename=pyvista-0.23.0-cp36-none-any.whl size=1153057 sha256=f8462478e1a303576b06518b5f72cc4f92af20cbbf7772e725920b49c745be86
  Stored in directory: /root/.cache/pip/wheels/f6/d5/ea/3f39a4f3aea78b36fff2648807427586ca77133956ec1203bc
  Building wheel for scooby (setup.py) ... done
  Created wheel for scooby: filename=scooby-0.5.0-cp36-none-any.whl size=12203 sha256=1542cdec3fe5aec7dab954b13a01a6f76add1d2fc5ab148bbfff950ffee2a10f
  Stored in directory: /root/.cache/pip/wheels/41/51/98/624c36ca1b65c4fd3ecdbb072c5ccc2386288b08835dee6813
Successfully built scikit-mps pyvista scooby
Installing collected packages: appdirs, scooby, meshio, vtk, pyvista, scikit-mps
Successfully installed appdirs-1.4.3 meshio-3.3.1 pyvista-0.23.0 scikit-mps-0.1.0 scooby-0.5.0 vtk-8.1.2
Using MPSlib installed in /content/mpslib 

In [0]:
import mpslib as mps
import matplotlib.pyplot as plt
import numpy as np

Select traning image


In [3]:
TI, TI_filename = mps.trainingimages.strebelle(di=2, coarse3d=1)
#TI, TI_filename = mps.trainingimages.checkerboard2()
#TI, TI_filename = mps.trainingimages.rot90()
plt.imshow(TI[:,:,0].T)
#mps.trainingimages.ti_plot_all()


Beginning download of http://www.trainingimages.org/uploads/3/4/7/0/34703305/ti_strebelle.sgems to ti_strebelle.dat
Out[3]:
<matplotlib.image.AxesImage at 0x7f569706c7f0>

Setup MPSlib


In [0]:
O = mps.mpslib(method='mps_snesim_tree',
                    mpslib_exe_folder=exe_folder,
                    verbose_level=-1, debug_level=-1)
#O = mps.mpslib(method='mps_genesim')
O.parameter_filename = 'mps.txt'
O.par['n_real']=39
O.par['n_cond']=36
O.par['template_size']=np.array([[10,5],[10,5],[1,1]])
O.par['origin']=np.array([0,0,0])
O.par['simulation_grid_size']=np.array([40,20,1])

# hard data
O.d_hard = np.array([[ 10, 5, 0, 1],
                       [ 30, 15, 0, 0]])

# soft data
O.d_soft = np.array([[ 10, 15, 0, 0.9, 0.1],
                       [ 30, 5, 0, 0.9, 0.1]])

Run MPSlib


In [5]:
O.ti = TI
# Serial 
#O.run_par()
# Parallel
O.run_parallel()


parallel: using 2 threads to simulate 39 realizations
parallel: with up to 20 relizations per thread
parallel: Using 2 of max 2 threads
__name__ = mpslib.mpslib
Thread:000, nr=20
Thread:001, nr=19
parallel job done. Collecting data from threads
parallel: collected 39 realizations
Out[5]:
[<mpslib.mpslib.mpslib at 0x7f5697746940>,
 <mpslib.mpslib.mpslib at 0x7f5697746c88>]

Plot realizations and E-types


In [6]:
O.plot_reals()
O.plot_etype()