Skip to content

Commit 57f0064

Browse files
committed
[ENH/CLN!] Make gempy a soft optional dependency for the viewer. Refactor GemPy dependencies and update requirements
Replaces direct imports of GemPy with a dynamic import through `optional_dependencies`. Cleans up unused code, updates version handling, and adjusts requirements files. This improves modularity and simplifies dependency management.
1 parent d02809f commit 57f0064

File tree

7 files changed

+17
-45
lines changed

7 files changed

+17
-45
lines changed

gempy_viewer/API/_plot_LiquidEarth.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
from typing import Optional
22

3-
import gempy
43
from gempy_viewer.optional_dependencies import require_liquid_earth_sdk
54

65

76
def plot_to_liquid_earth(
8-
geo_model: gempy.data.GeoModel, space_name: str,
7+
geo_model: "gempy.data.GeoModel", space_name: str,
98
file_name: str = "gempy_model", user_token: Optional[str] = None, grab_link=True,
109
make_new_space: bool = False
1110
):

gempy_viewer/DEP/_plot.py

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
# sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
2828

2929
from typing import Set, Tuple, Dict, Union
30-
import gempy as _gempy
30+
31+
from gempy_viewer import optional_dependencies
3132
from gempy_viewer.DEP._visualization_2d import PlotData2D, PlotSolution
3233
from gempy_viewer.DEP.visualization_3d import GemPyvtkInteract
3334

@@ -99,6 +100,7 @@ def export_to_vtk(geo_data, path=None, name=None, voxels=True, block=None, surfa
99100
path=path)
100101
if surfaces is True:
101102
geo_data.solutions.compute_all_surfaces()
103+
_gempy = optional_dependencies.require_gempy()
102104
ver, sim = _gempy.get_surfaces(geo_data)
103105
GemPyvtkInteract.export_vtk_surfaces(geo_data, ver, sim, path=path,
104106
name=name)
@@ -387,39 +389,3 @@ def plot_topology(
387389
edge_kwargs=edge_kwargs
388390
)
389391

390-
391-
def plot_ar(geo_model, path=None, project_name=None, api_token=None, secret=None):
392-
""" Create, upload and retrieve tag to visualize the model in AR in rexview
393-
394-
https://www.rexos.org/getting-started/
395-
396-
Args:
397-
geo_model (gempy.Model):
398-
path: Location for rex files. Default cwd
399-
project_name: Name of the project in rexos
400-
api_token: rexos api token
401-
secret: rexos secret
402-
403-
Returns:
404-
gempy.addons.rex_api.Rextag
405-
"""
406-
from gempy.addons.rex_api import upload_to_rexcloud
407-
from gempy.addons.gempy_to_rexfile import write_rex, geomodel_to_rex
408-
if project_name is None:
409-
project_name = geo_model.meta.project_name
410-
411-
if path is None:
412-
path = '/'
413-
414-
rex_bytes = geomodel_to_rex(geo_model)
415-
files_path = write_rex(rex_bytes, path)
416-
project_name_ = project_name
417-
for i in range(40):
418-
try:
419-
tag = upload_to_rexcloud(files_path, project_name=project_name_, api_token=api_token, secret=secret)
420-
break
421-
except ConnectionError:
422-
project_name_ = project_name + str(i)
423-
pass
424-
425-
return tag

gempy_viewer/DEP/visualization_3d.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import pandas as pn
3131
import numpy as np
3232
import sys
33-
import gempy as gp
3433
import warnings
3534

35+
from gempy_viewer import optional_dependencies
3636

3737
warnings.filterwarnings("ignore",
3838
message='.*Conversion of the second argument of issubdtype *.',
@@ -1116,6 +1116,7 @@ def update_surfaces_real_time(self, delete=True):
11161116
if delete is True:
11171117
self.delete_surfaces()
11181118
try:
1119+
gp = optional_dependencies.require_gempy()
11191120
gp.compute_model(self.geo_model, sort_surfaces=False, compute_mesh=True)
11201121
except IndexError:
11211122
print('IndexError: Model not computed. Laking data in some surface')

gempy_viewer/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
from gempy_viewer.modules.plot_3d.vista import GemPyToVista
44
from .API import *
5-
import gempy
65
__all__ = ['plot_2d', 'plot_3d', 'plot_section_traces', 'plot_topology', 'plot_stereonet']
76

87

98
# Assert at least pyton 3.10
109
assert sys.version_info[0] >= 3 and sys.version_info[1] >= 10, "GemPy requires Python 3.10 or higher"
11-
__version__ = gempy.__version__
10+
from ._version import __version__
1211

1312
if __name__ == '__main__':
1413
pass

gempy_viewer/optional_dependencies.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ def require_gempy_plugins():
1212
raise ImportError("The gempy.plugins package is required to run this function.")
1313
return gempy.plugins
1414

15+
def require_gempy():
16+
try:
17+
import gempy
18+
except ImportError:
19+
raise ImportError("The gempy package is required to run this function.")
20+
return gempy
21+
1522

1623
def require_pyvista():
1724
try:

requirements/dev-requirements.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
-r optional_requirements.txt
1+
-r requirements.txt
22

3-
pytest
3+
pytest
4+
gempy

requirements/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
gempy~=2024.2.0
21
matplotlib
32
numpy

0 commit comments

Comments
 (0)