Skip to content

Commit 95da75f

Browse files
Make boltztrap optional (#517)
* make boltztrap2 optional with ifermi deps * raise error in fermi surface plotting if no ifermi * remove bolztrap from deps * unpin lychee url check ver * move ifermi import check to init * pin dash<4 * pin dash<5 * add note about dash pin
1 parent 6c1acca commit 95da75f

7 files changed

Lines changed: 219 additions & 270 deletions

File tree

.github/workflows/url-check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
uses: actions/checkout@v3
1515

1616
- name: Check for broken links
17-
uses: lycheeverse/lychee-action@v2.0.2
17+
uses: lycheeverse/lychee-action@v2
1818
with:
1919
# --exclude-loopback ensures we don't check localhost URLs
2020
args: --exclude-loopback './**/*.md' './**/*.rst'

crystal_toolkit/components/fermi_surface.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import typing
4-
from importlib import import_module
54

65
import matplotlib.pyplot as plt
76
from dash import Input, Output
@@ -14,6 +13,11 @@
1413
from ifermi.surface import FermiSurface
1514
from plotly.graph_objects import Figure
1615

16+
try:
17+
import ifermi.plot as fermi_module
18+
except ImportError:
19+
fermi_module = None
20+
1721

1822
class FermiSurfaceComponent(MPComponent):
1923
"""Component to display FermiSurface objects generated from ifermi.
@@ -31,6 +35,11 @@ def __init__(
3135
id: str | None = None,
3236
**kwargs,
3337
) -> None:
38+
if fermi_module is None:
39+
raise ImportError(
40+
"`ifermi` must be installed to use the Fermi "
41+
"surface `crystal_toolkit` component."
42+
)
3443
super().__init__(id=id, default_data=fermi_surface, **kwargs)
3544

3645
@staticmethod
@@ -44,7 +53,6 @@ def get_figure(fermi_surface: FermiSurface, **kwargs) -> Figure:
4453
Returns:
4554
A plotly Figure object.
4655
"""
47-
fermi_module = import_module("ifermi.plot")
4856
plotter = fermi_module.FermiSurfacePlotter(fermi_surface)
4957
fig = plotter.get_plot(plot_type="plotly", **kwargs)
5058

pyproject.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ authors = [{ name = "Matt Horton", email = "mkhorton@lbl.gov" }]
1212

1313
dependencies = [
1414
"dash-mp-components>=0.5.1rc5,<0.5.2",
15-
"dash>=2.11.0",
15+
"dash>=2.11.0,<4.0.0", # Issue in dash==4.0.0 with multi-select drop down: https://community.plotly.com/t/multi-select-dropdown-options-do-not-update-correct-when-labels-have-html-component-in-dash-4-0-0/96495
1616
"flask-caching",
1717
"frozendict",
1818
"mp-api",
@@ -23,14 +23,17 @@ dependencies = [
2323
"shapely",
2424
"webcolors",
2525
"ipython",
26-
"boltztrap2<25.11.1", # compilation issue when installing via pip
2726
]
2827

2928
[project.optional-dependencies]
3029
server = ["dash-extensions", "gunicorn[gevent]", "habanero", "hiphive", "redis"]
3130
robocrys = ["robocrys"]
3231
temdiff = ["py4DSTEM>=0.13.11"]
33-
fermi = ["ifermi", "pyfftw"]
32+
fermi = [
33+
"ifermi",
34+
"pyfftw",
35+
"boltztrap2<25.11.1", # compilation issue when installing via pip
36+
]
3437
phonon = ["phonopy"]
3538
vtk = ["dash-vtk"]
3639
localenv = ["dscribe"]

requirements/ubuntu-latest_py3.11.txt

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,69 +6,59 @@
66
#
77
annotated-types==0.7.0
88
# via pydantic
9-
ase==3.27.0
10-
# via boltztrap2
119
asttokens==3.0.1
1210
# via stack-data
13-
bibtexparser==1.4.3
11+
bibtexparser==1.4.4
1412
# via pymatgen
1513
blake3==1.0.8
1614
# via emmet-core
1715
blinker==1.9.0
1816
# via flask
19-
boltztrap2==25.3.1
20-
# via crystal_toolkit (pyproject.toml)
21-
boto3==1.42.33
17+
boto3==1.42.68
2218
# via mp-api
23-
botocore==1.42.33
19+
botocore==1.42.68
2420
# via
2521
# boto3
2622
# s3transfer
2723
cachelib==0.13.0
2824
# via flask-caching
29-
certifi==2026.1.4
30-
# via
31-
# netcdf4
32-
# requests
33-
cftime==1.6.5
34-
# via netcdf4
35-
charset-normalizer==3.4.4
25+
certifi==2026.2.25
26+
# via requests
27+
charset-normalizer==3.4.5
3628
# via requests
3729
click==8.3.1
3830
# via flask
3931
contourpy==1.3.3
4032
# via matplotlib
4133
cycler==0.12.1
4234
# via matplotlib
43-
cython==3.2.4
44-
# via boltztrap2
4535
dash==3.4.0
4636
# via crystal_toolkit (pyproject.toml)
4737
dash-mp-components==0.5.1rc5
4838
# via crystal_toolkit (pyproject.toml)
4939
decorator==5.2.1
5040
# via ipython
51-
emmet-core==0.86.2
41+
emmet-core==0.86.3
5242
# via mp-api
5343
executing==2.2.1
5444
# via stack-data
55-
flask==3.1.2
45+
flask==3.1.3
5646
# via
5747
# dash
5848
# flask-caching
5949
flask-caching==2.3.1
6050
# via crystal_toolkit (pyproject.toml)
61-
fonttools==4.61.1
51+
fonttools==4.62.1
6252
# via matplotlib
6353
frozendict==2.4.7
6454
# via crystal_toolkit (pyproject.toml)
6555
idna==3.11
6656
# via requests
67-
imageio==2.37.2
57+
imageio==2.37.3
6858
# via scikit-image
6959
importlib-metadata==8.7.1
7060
# via dash
71-
ipython==9.9.0
61+
ipython==9.10.0
7262
# via crystal_toolkit (pyproject.toml)
7363
ipython-pygments-lexers==1.1.1
7464
# via ipython
@@ -86,55 +76,44 @@ joblib==1.5.3
8676
# via
8777
# pymatgen
8878
# scikit-learn
89-
kiwisolver==1.4.9
79+
kiwisolver==1.5.0
9080
# via matplotlib
9181
latexcodec==3.0.1
9282
# via pybtex
93-
lazy-loader==0.4
83+
lazy-loader==0.5
9484
# via scikit-image
9585
markupsafe==3.0.3
9686
# via
9787
# flask
9888
# jinja2
9989
# werkzeug
10090
matplotlib==3.10.8
101-
# via
102-
# ase
103-
# boltztrap2
104-
# pymatgen
91+
# via pymatgen
10592
matplotlib-inline==0.2.1
10693
# via ipython
107-
monty==2025.3.3
94+
monty==2026.2.18
10895
# via
10996
# emmet-core
11097
# mp-api
11198
# pymatgen
112-
mp-api==0.45.15
99+
mp-api==0.46.0
113100
# via crystal_toolkit (pyproject.toml)
114101
mpmath==1.3.0
115102
# via sympy
116-
msgpack==1.1.2
117-
# via mp-api
118-
narwhals==2.15.0
103+
narwhals==2.18.0
119104
# via plotly
120105
nest-asyncio==1.6.0
121106
# via dash
122-
netcdf4==1.7.4
123-
# via boltztrap2
124107
networkx==3.6.1
125108
# via
126109
# pymatgen
127110
# scikit-image
128-
numpy==2.4.1
111+
numpy==2.4.3
129112
# via
130-
# ase
131-
# boltztrap2
132-
# cftime
133113
# contourpy
134114
# imageio
135115
# matplotlib
136116
# monty
137-
# netcdf4
138117
# pandas
139118
# pymatgen
140119
# pymatgen-io-validation
@@ -144,7 +123,7 @@ numpy==2.4.1
144123
# shapely
145124
# spglib
146125
# tifffile
147-
orjson==3.11.5
126+
orjson==3.11.7
148127
# via
149128
# mp-api
150129
# pymatgen
@@ -156,18 +135,18 @@ packaging==26.0
156135
# scikit-image
157136
palettable==3.3.3
158137
# via pymatgen
159-
pandas==3.0.0
138+
pandas==3.0.1
160139
# via pymatgen
161-
parso==0.8.5
140+
parso==0.8.6
162141
# via jedi
163142
pexpect==4.9.0
164143
# via ipython
165-
pillow==12.1.0
144+
pillow==12.1.1
166145
# via
167146
# imageio
168147
# matplotlib
169148
# scikit-image
170-
plotly==6.5.2
149+
plotly==6.6.0
171150
# via
172151
# dash
173152
# pymatgen
@@ -186,7 +165,7 @@ pydantic==2.12.5
186165
# pymatgen-io-validation
187166
pydantic-core==2.41.5
188167
# via pydantic
189-
pydantic-settings==2.12.0
168+
pydantic-settings==2.13.1
190169
# via
191170
# crystal_toolkit (pyproject.toml)
192171
# emmet-core
@@ -212,7 +191,7 @@ python-dateutil==2.9.0.post0
212191
# botocore
213192
# matplotlib
214193
# pandas
215-
python-dotenv==1.2.1
194+
python-dotenv==1.2.2
216195
# via pydantic-settings
217196
pyyaml==6.0.3
218197
# via pybtex
@@ -234,34 +213,28 @@ scikit-image==0.26.0
234213
# via crystal_toolkit (pyproject.toml)
235214
scikit-learn==1.8.0
236215
# via crystal_toolkit (pyproject.toml)
237-
scipy==1.17.0
216+
scipy==1.17.1
238217
# via
239-
# ase
240-
# boltztrap2
241218
# pymatgen
242219
# scikit-image
243220
# scikit-learn
244221
shapely==2.1.2
245222
# via crystal_toolkit (pyproject.toml)
246223
six==1.17.0
247224
# via python-dateutil
248-
smart-open==7.5.0
249-
# via mp-api
250225
spglib==2.7.0
251-
# via
252-
# boltztrap2
253-
# pymatgen
226+
# via pymatgen
254227
stack-data==0.6.3
255228
# via ipython
256229
sympy==1.14.0
257230
# via pymatgen
258-
tabulate==0.9.0
231+
tabulate==0.10.0
259232
# via pymatgen
260233
threadpoolctl==3.6.0
261234
# via scikit-learn
262-
tifffile==2026.1.14
235+
tifffile==2026.3.3
263236
# via scikit-image
264-
tqdm==4.67.1
237+
tqdm==4.67.3
265238
# via pymatgen
266239
traitlets==5.14.3
267240
# via
@@ -288,16 +261,14 @@ urllib3==2.6.3
288261
# via
289262
# botocore
290263
# requests
291-
wcwidth==0.3.1
264+
wcwidth==0.6.0
292265
# via prompt-toolkit
293266
webcolors==25.10.0
294267
# via crystal_toolkit (pyproject.toml)
295-
werkzeug==3.1.5
268+
werkzeug==3.1.6
296269
# via
297270
# dash
298271
# flask
299-
wrapt==2.0.1
300-
# via smart-open
301272
zipp==3.23.0
302273
# via importlib-metadata
303274

0 commit comments

Comments
 (0)