Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
33fc9c5
Merge remote-tracking branch 'upstream/main' into main
HKaras Dec 5, 2022
a4a5001
Merge branch 'JeschkeLab:main' into main
HKaras Mar 11, 2023
8ae74cf
Merge remote-tracking branch 'upstream/main' into main
HKaras May 22, 2023
bd3f25b
Merge branch 'JeschkeLab:main' into main
HKaras Aug 1, 2023
ff53ac1
Merge branch 'JeschkeLab:main' into main
HKaras Aug 9, 2023
108a62a
Merge branch 'JeschkeLab:main' into main
HKaras Aug 10, 2023
2546b42
Push patch into V1.1 (#467)
HKaras Nov 3, 2023
59a6584
Removes katex and others (#471)
HKaras Apr 14, 2024
e5cb1e2
Dipolarkernal speedup (#473)
HKaras Jun 12, 2024
5668946
Adding support for scipy 1.14 and tests for Python 3.12 (#474)
HKaras Jul 1, 2024
6a0b992
Numpy2 support (#479)
HKaras Jul 2, 2024
19a491f
Regparam grid bug fix (#477)
HKaras Jul 15, 2024
564c9ae
Merge branch 'main' of https://github.com/HKaras/DeerLab
HKaras Jul 31, 2024
523b3aa
Merge branch 'main' of https://github.com/HKaras/DeerLab
HKaras Jul 31, 2024
e2acd3c
Merge remote-tracking branch 'origin/main'
HKaras Jan 4, 2026
32d5a0d
show_config_function
HKaras Jan 4, 2026
2820a51
show_config
HKaras Jan 4, 2026
5f3d544
Auto stash before merge of "main" and "upstream/main"
HKaras Jan 4, 2026
1a85a31
Merge branch 'main' into show_config_function
HKaras Jan 4, 2026
b3d5fbb
Test show config
HKaras Jan 4, 2026
653fa3b
Merge branch 'main' into show_config_function
HKaras Jan 6, 2026
7c06730
Fixed for Python <3.13
HKaras Jan 6, 2026
2fe7d34
Merge remote-tracking branch 'origin/show_config_function' into show_…
HKaras Jan 6, 2026
ce5001b
Change to platform
HKaras Jan 6, 2026
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
87 changes: 87 additions & 0 deletions deerlab/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -955,3 +955,90 @@ def choleskycovmat(Q,cholfactors):

return Σ
# ----------------------------------------------------------------------------------


def _config():
import importlib
import sys
import os
import platform
config = {}

# Versions
config['python_version'] = sys.version.split()[0]
module = importlib.import_module('deerlab')
version = getattr(module,'__version__', 'unknown')
config['deerlab_version'] = version

cpu_cores = os.process_cpu_count() if hasattr(os, 'process_cpu_count') else os.cpu_count()
operating_system = sys.platform

config['cpu_cores'] = cpu_cores
config['operating_system'] = operating_system
config['operating_system_version'] = platform.release()
config['platform'] = platform.machine()

# NNLS backendss
nnls_backends ={}
for nnls_backend in ['numpy','scipy','cvxopt','quadprog']:
print(f'Testing backend: {nnls_backend}')
state = importlib.util.find_spec(nnls_backend) is not None
if state:
module = importlib.import_module(nnls_backend)
version = getattr(module,'__version__', 'unknown')
nnls_backends[nnls_backend] = (True, version)
else:
nnls_backends[nnls_backend] = (False, None)
config['nnls_backends'] = nnls_backends

## BLAS linking
import numpy as np
config['numpy'] = {'version': np.__version__}
blas_info = np.__config__.CONFIG['Build Dependencies']['blas']
lapack_info = np.__config__.CONFIG['Build Dependencies']['lapack']
config['numpy']['BLAS'] = blas_info['name']
config['numpy']['LAPACK'] = lapack_info['name']

import scipy
config['scipy'] = {'version': scipy.__version__}
scipy_blas_info = scipy.__config__.CONFIG['Build Dependencies']['blas']
scipy_lapack_info = scipy.__config__.CONFIG['Build Dependencies']['lapack']
config['scipy']['BLAS'] = scipy_blas_info['name']
config['scipy']['LAPACK'] = scipy_lapack_info['name']

return config

def show_config(mode='stdout'):
"""
Shows the current configuration of DeerLab, including the current machine infomation and the libaries that DeerLab is built upon.

Notes
-----
On Python < 3.13, the CPU core count is estimated using `os.cpu_count()`, which may not always be accurate. On Python >= 3.13, `os.process_cpu_count()` is used for a more accurate count.

Parameters
----------
mode : str, optional
Indicates how to display the config information. ‘stdout’ prints to console, ‘dicts’ returns a dictionary of the configuration.

Returns
-------
config : dict, optional
If `mode` is set to 'dicts', returns a dictionary containing the configuration information.
"""
CONFIG = _config()
if mode == 'stdout':
try: # Non-standard library, check import
import yaml

print(yaml.dump(CONFIG))
except ModuleNotFoundError:
import warnings
import json

warnings.warn("Install `pyyaml` for better output", stacklevel=1)
print(json.dumps(CONFIG, indent=2))
elif mode == 'dicts':
return CONFIG
else:
raise ValueError("Invalid mode. Use 'stdout' or 'dicts'.")
1 change: 1 addition & 0 deletions docsrc/source/reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,4 @@ Reference Index
ovl
der_snr
formatted_table
show_config
20 changes: 20 additions & 0 deletions test/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,23 @@ def test_sophegrid():
assert np.allclose(phi, np.array([0]),rtol=1e-4)
assert np.allclose(theta, np.array([0]),rtol=1e-4)
assert np.allclose(weights*4*np.pi, np.array([12.5664]),rtol=1e-4)

def test_config():
from deerlab.utils import show_config

config_dict = show_config(mode='dicts')

assert 'python_version' in config_dict
assert 'deerlab_version' in config_dict
assert 'cpu_cores' in config_dict
assert 'operating_system' in config_dict
assert 'operating_system_version' in config_dict

assert 'version' in config_dict['numpy']
assert 'BLAS' in config_dict['numpy']
assert 'LAPACK' in config_dict['numpy']
assert 'version' in config_dict['scipy']
assert 'BLAS' in config_dict['scipy']
assert 'LAPACK' in config_dict['scipy']

show_config()