Skip to content

Commit

Permalink
Log much more information about FiPy environment (#990)
Browse files Browse the repository at this point in the history
Remove obsolete vitals module (svn, really???)
  • Loading branch information
guyer committed Jan 22, 2024
1 parent 9239820 commit 957e472
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 205 deletions.
26 changes: 23 additions & 3 deletions fipy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,29 @@ def _excepthook(*args):
__version__ = get_versions()['version']
del get_versions

from fipy.tools.logging import package_info
_log.info(package_info())
del package_info

from fipy.tools.logging import environment

_fipy_environment = {
"argv": sys.argv,
"environ": dict(os.environ),
"platform": environment.platform_info(),
"package": environment.package_info()
}

if _log.isEnabledFor(logging.DEBUG):
try:
_fipy_environment["conda"] = environment.conda_info()
except:
pass

try:
_fipy_environment["pip"] = environment.pip_info()
except:
pass

_log.debug(json.dumps(_fipy_environment))


from fipy.boundaryConditions import *
from fipy.meshes import *
Expand Down
2 changes: 1 addition & 1 deletion fipy/tests/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ def _test_args(self):
yield "examples.test._suite"

def printPackageInfo(self):
from fipy.tools.logging import package_info
from fipy.tools.logging.environment import package_info

packages = package_info()

Expand Down
2 changes: 0 additions & 2 deletions fipy/tools/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
from fipy.tools import vector
from .dimensions.physicalField import PhysicalField
from fipy.tools.numerix import *
from fipy.tools.vitals import Vitals
from fipy.tools.sharedtempfile import SharedTemporaryFile

__all__ = ["serialComm",
Expand All @@ -66,7 +65,6 @@
"numerix",
"vector",
"PhysicalField",
"Vitals",
"serial",
"parallel",
"SharedTemporaryFile"]
Expand Down
60 changes: 0 additions & 60 deletions fipy/tools/logging/__init__.py
Original file line number Diff line number Diff line change
@@ -1,60 +0,0 @@
import sys

def package_info():
"""Return dictionary of versions for FiPy dependencies."""

packages = {}

packages['python'] = sys.version.replace('\n', '| ')

for pkg in ['fipy', 'numpy', 'pysparse', 'scipy', 'matplotlib', 'mpi4py', 'petsc4py', 'pyamgx']:
try:
mod = __import__(pkg)

packages[pkg] = mod.__version__
except ImportError as e:
packages[pkg] = 'not installed'

except Exception as e:
packages[pkg] = 'version check failed: {}'.format(e)

## PyTrilinos
try:
import PyTrilinos
packages['PyTrilinos'] = PyTrilinos.version()
except ImportError as e:
packages['PyTrilinos'] = 'not installed'
except Exception as e:
packages['PyTrilinos'] = 'version check failed: {}'.format(e)

## Mayavi uses a non-standard approach for storing its version number.
try:
from mayavi.__version__ import __version__ as mayaviversion
packages['mayavi'] = mayaviversion
except ImportError as e:
try:
from enthought.mayavi.__version__ import __version__ as mayaviversion
packages['mayavi'] = mayaviversion
except ImportError as e:
packages['mayavi'] = 'not installed'
except Exception as e:
packages['mayavi'] = 'version check failed: {}'.format(e)

## Gmsh version
try:
from fipy.meshes.gmshMesh import gmshVersion
gmshversion = gmshVersion()
if gmshversion is None:
packages['gmsh'] = 'not installed'
else:
packages['gmsh'] = gmshversion
except Exception as e:
packages['gmsh'] = 'version check failed: {}'.format(e)

try:
from fipy.solvers import solver_suite
packages['solver'] = solver_suite
except Exception as e:
packages['solver'] = str(e)

return packages
139 changes: 139 additions & 0 deletions fipy/tools/logging/environment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import json
import platform
import subprocess
import sys

__all__ = ["conda_info", "pip_info", "package_info", "platform_info"]

def conda_info(conda="conda"):
"""Collect information about conda environment.
Parameters
----------
conda : str
Name of conda executable (default: "conda").
Returns
-------
dict
Result of `conda info` and `conda env export` for active conda
environment.
"""
info = {}
p = subprocess.Popen([conda, "info", "--json"], stdout=subprocess.PIPE)
stdout, _ = p.communicate()
stdout = stdout.decode('ascii')

info["conda_info"] = json.loads(stdout)
p = subprocess.Popen([conda, "env", "export",
"--name", info["conda_info"]["active_prefix_name"],
"--json"],
stdout=subprocess.PIPE)
stdout, _ = p.communicate()
stdout = stdout.decode('ascii')
info["conda_env"] = json.loads(stdout)

return info

def pip_info(python="python"):
"""Collect information about pip environment.
Parameters
----------
python : str
Name of Python executable (default: "python").
Returns
-------
list of dict
Result of `pip list --format json`.
"""
info = {}
p = subprocess.Popen([python, "-m", "pip", "list", "--format", "json"], stdout=subprocess.PIPE)
stdout, _ = p.communicate()
stdout = stdout.decode('ascii')

return json.loads(stdout)

def package_info():
"""Collect information about installed packages FiPy uses.
Returns
-------
dict
Versions of important Python packages.
"""
packages = {}

packages['python'] = sys.version #.replace('\n', '| ')

for pkg in ['fipy', 'numpy', 'pysparse', 'scipy', 'matplotlib', 'mpi4py', 'petsc4py', 'pyamgx']:
try:
mod = __import__(pkg)

packages[pkg] = mod.__version__
except ImportError as e:
packages[pkg] = 'not installed'

except Exception as e:
packages[pkg] = 'version check failed: {}'.format(e)

## PyTrilinos
try:
import PyTrilinos
packages['PyTrilinos'] = PyTrilinos.version()
except ImportError as e:
packages['PyTrilinos'] = 'not installed'
except Exception as e:
packages['PyTrilinos'] = 'version check failed: {}'.format(e)

## Mayavi uses a non-standard approach for storing its version number.
try:
from mayavi.__version__ import __version__ as mayaviversion
packages['mayavi'] = mayaviversion
except ImportError as e:
try:
from enthought.mayavi.__version__ import __version__ as mayaviversion
packages['mayavi'] = mayaviversion
except ImportError as e:
packages['mayavi'] = 'not installed'
except Exception as e:
packages['mayavi'] = 'version check failed: {}'.format(e)

## Gmsh version
try:
from fipy.meshes.gmshMesh import gmshVersion
gmshversion = gmshVersion()
if gmshversion is None:
packages['gmsh'] = 'not installed'
else:
packages['gmsh'] = gmshversion
except Exception as e:
packages['gmsh'] = 'version check failed: {}'.format(e)

try:
from fipy.solvers import solver_suite
packages['solver'] = solver_suite
except Exception as e:
packages['solver'] = str(e)

return packages

def platform_info():
"""Collect information about platform Python is running in.
Returns
-------
dict
Data extracted from `platform` package.
"""
return {
"architecture": platform.architecture(),
"machine": platform.machine(),
"node": platform.node(),
"platform": platform.platform(),
"processor": platform.processor(),
"release": platform.release(),
"system": platform.system(),
"version": platform.version()
}
139 changes: 0 additions & 139 deletions fipy/tools/vitals.py

This file was deleted.

0 comments on commit 957e472

Please sign in to comment.