Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Log much more information about FiPy environment #990

Merged
merged 4 commits into from
Jan 22, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions fipy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,20 @@ 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,
"platform": environment.platform_info(),
"package": environment.package_info()
}

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

_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
119 changes: 119 additions & 0 deletions fipy/tools/logging/environment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import json
import platform
import subprocess
import sys

__all__ = ["conda_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 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.

Loading