From 730edd3ae5fc8c6511a896e270f5af70ff81378f Mon Sep 17 00:00:00 2001 From: Bob Myhill Date: Thu, 28 Nov 2024 19:37:16 +0000 Subject: [PATCH] make pycddlib optional --- burnman/classes/polytope.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/burnman/classes/polytope.py b/burnman/classes/polytope.py index c0dcf393..730d48e5 100644 --- a/burnman/classes/polytope.py +++ b/burnman/classes/polytope.py @@ -11,19 +11,28 @@ from scipy.spatial import Delaunay from scipy.special import comb from copy import copy -import cdd as cdd_float from .material import cached_property from ..utils.math import independent_row_indices +# Try to import pycddlib. +# First, try separating the imports into float and +# fractional, then fall back to only using the float +# representation, and finally don't import anything +# (limiting functionality) try: + cdd_float = importlib.import_module("cdd") cdd_fraction = importlib.import_module("cdd.gmp") cdd_gmp_loaded = True except ImportError: - cdd_fraction = importlib.import_module("cdd") - cdd_gmp_loaded = False + try: + cdd_float = importlib.import_module("cdd") + cdd_fraction = importlib.import_module("cdd") + cdd_gmp_loaded = False + except ImportError: + cdd_float = None class SimplexGrid(object): @@ -140,6 +149,11 @@ def __init__( dependent endmembers are defined. :type independent_endmember_occupancies: numpy.array (2D) or None """ + if cdd_float is None: + raise ImportError( + "You need to install pycddlib to create a MaterialPolytope object." + ) + if equalities.dtype != inequalities.dtype: raise Exception( f"The equalities and inequalities arrays should have the same type ({equalities.dtype} != {inequalities.dtype})."