hscredit.utils.misc 源代码

"""杂项工具.

提供各种辅助函数。
"""

import os
import re
import sys
import types
import random
import numpy as np
import pandas as pd
import importlib.util


[文档] def trapz(y, x=None, dx=1.0, axis=-1): """梯形法则数值积分(跨 NumPy 版本兼容). NumPy 2.0 起将 ``np.trapz`` 重命名为 ``np.trapezoid``,旧名在 2.0 中弃用、 在更高版本中移除。本函数按版本自动选择可用实现,保证在新旧 NumPy 下行为一致。 :param y: 被积函数值数组 :param x: 采样点坐标,可选 :param dx: 采样间隔(x 未提供时使用),默认 1.0 :param axis: 积分所沿的轴,默认 -1 :return: 积分结果 **参考样例** >>> import numpy as np >>> from hscredit.utils import trapz >>> trapz([0, 1, 1], [0, 0.5, 1.0]) 0.75 """ _impl = getattr(np, "trapezoid", None) or getattr(np, "trapz", None) if _impl is None: # 极端情况下兜底 raise AttributeError("当前 NumPy 既无 trapezoid 也无 trapz") return _impl(y, x=x, dx=dx, axis=axis)
[文档] def round_float(num, decimal: int = 4): """调整数值分箱的上下界小数点精度,如未超出精度保持原样输出。 :param num: 分箱的上界或者下界 :param decimal: 小数点保留的精度 :return: 精度调整后的数值 **参考样例** >>> round_float(3.14159265, decimal=4) 3.1416 """ if decimal is None: return num if isinstance(decimal, (bool, np.bool_)) or not isinstance(decimal, (int, np.integer)) or int(decimal) < 0: raise ValueError("decimal 必须是大于等于 0 的整数") if pd.isna(num) or isinstance(num, (bool, np.bool_)): return num if isinstance(num, (int, np.integer)): return int(num) if isinstance(num, (float, np.floating)): return round(float(num), int(decimal)) return num
[文档] def reload(module_name): """在jupyter中强制重载模块,忽略所有缓存 :param module_name: 模块名称 :return: 重新导入的模块 **参考样例** >>> import hscredit.utils.misc >>> hscredit.utils.misc.reload('hscredit.utils.misc') <module 'hscredit.utils.misc' from '...'> """ if module_name in sys.modules: # 获取旧模块 old_module = sys.modules[module_name] # 删除模块的所有子模块 submodules = [name for name in sys.modules if name.startswith(f"{module_name}.")] for submodule in submodules: del sys.modules[submodule] # 删除主模块 del sys.modules[module_name] # 清除可能存在的 .pyc 缓存 import py_compile try: if hasattr(old_module, '__file__') and old_module.__file__: pyc_file = old_module.__file__ + 'c' if os.path.exists(pyc_file): os.remove(pyc_file) except Exception: pass # 重新导入 return importlib.import_module(module_name)