pyhw 0.12.2__tar.gz → 0.12.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. {pyhw-0.12.2/src/pyhw.egg-info → pyhw-0.12.4}/PKG-INFO +7 -1
  2. {pyhw-0.12.2 → pyhw-0.12.4}/README.md +6 -0
  3. {pyhw-0.12.2 → pyhw-0.12.4}/pyproject.toml +2 -2
  4. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/__init__.py +1 -1
  5. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/__init__.py +1 -0
  6. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/linux.py +0 -2
  7. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/windows.py +0 -3
  8. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/bsd.py +0 -1
  9. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/linux.py +38 -4
  10. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/windows.py +0 -4
  11. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/bsd.py +0 -1
  12. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/hostInfo.py +0 -1
  13. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/kernel/unix.py +0 -1
  14. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/kernel/windows.py +0 -4
  15. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/bsd.py +0 -1
  16. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/linux.py +0 -1
  17. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/windows.py +0 -7
  18. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/bsd.py +0 -1
  19. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/linux.py +0 -2
  20. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/macos.py +0 -2
  21. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/windows.py +0 -6
  22. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/__init__.py +1 -2
  23. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/macos.py +1 -3
  24. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/npuInfo.py +0 -2
  25. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/windows.py +0 -2
  26. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/__init__.py +1 -0
  27. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/bsd.py +0 -1
  28. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/linux.py +0 -3
  29. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/macos.py +0 -1
  30. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/windows.py +0 -1
  31. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/shell/__init__.py +1 -0
  32. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/shell/unix.py +0 -10
  33. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/shell/windows.py +0 -3
  34. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/title/__init__.py +1 -0
  35. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/title/unix.py +0 -5
  36. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/title/windows.py +0 -3
  37. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/__init__.py +1 -0
  38. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/bsd.py +0 -1
  39. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/linux.py +0 -3
  40. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/macos.py +0 -1
  41. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/windows.py +0 -2
  42. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/__init__.py +1 -0
  43. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/color/__init__.py +1 -0
  44. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/frontendBase.py +0 -3
  45. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/__init__.py +1 -0
  46. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/logoBase.py +0 -1
  47. pyhw-0.12.4/src/pyhw/library/lib/nvmlGPULib_amd64.so +0 -0
  48. pyhw-0.12.4/src/pyhw/library/lib/nvmlGPULib_arm64.so +0 -0
  49. pyhw-0.12.4/src/pyhw/library/test/nvmlGPULibTest.py +25 -0
  50. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwException/__init__.py +1 -0
  51. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwUtil/__init__.py +1 -0
  52. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwUtil/cliUtil.py +0 -2
  53. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwUtil/pyhwUtil.py +5 -1
  54. {pyhw-0.12.2 → pyhw-0.12.4/src/pyhw.egg-info}/PKG-INFO +7 -1
  55. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw.egg-info/SOURCES.txt +3 -1
  56. pyhw-0.12.2/src/pyhw/backend/metal/t.py +0 -19
  57. {pyhw-0.12.2 → pyhw-0.12.4}/LICENSE +0 -0
  58. {pyhw-0.12.2 → pyhw-0.12.4}/setup.cfg +0 -0
  59. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/__main__.py +0 -0
  60. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/backendBase.py +0 -0
  61. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/__init__.py +0 -0
  62. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/bsd.py +0 -0
  63. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/cpuBase.py +0 -0
  64. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/cpuInfo.py +0 -0
  65. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/cpu/macos.py +0 -0
  66. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/__init__.py +0 -0
  67. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/gpuBase.py +0 -0
  68. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/gpuInfo.py +0 -0
  69. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/gpu/macos.py +0 -0
  70. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/__init__.py +0 -0
  71. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/hostBase.py +0 -0
  72. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/linux.py +0 -0
  73. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/macos.py +0 -0
  74. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/host/windows.py +0 -0
  75. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/kernel/__init__.py +0 -0
  76. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/kernel/kernelBase.py +0 -0
  77. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/kernel/kernelInfo.py +0 -0
  78. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/__init__.py +0 -0
  79. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/macos.py +0 -0
  80. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/memoryBase.py +0 -0
  81. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/memory/memoryInfo.py +0 -0
  82. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/__init__.py +0 -0
  83. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/nicBase.py +0 -0
  84. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/nic/nicInfo.py +0 -0
  85. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/bsd.py +0 -0
  86. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/linux.py +0 -0
  87. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/npu/npuBase.py +0 -0
  88. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/osBase.py +0 -0
  89. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/os/osInfo.py +0 -0
  90. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/shell/shellBase.py +0 -0
  91. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/shell/shellInfo.py +0 -0
  92. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/title/titleBase.py +0 -0
  93. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/title/titleInfo.py +0 -0
  94. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/uptimeBase.py +0 -0
  95. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/backend/uptime/uptimeInfo.py +0 -0
  96. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/color/colorConfig.py +0 -0
  97. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/color/colorSet.py +0 -0
  98. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/color/colorUtil.py +0 -0
  99. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/alpine.pyhw +0 -0
  100. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/arch.pyhw +0 -0
  101. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/armbian.pyhw +0 -0
  102. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/centos.pyhw +0 -0
  103. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/debian.pyhw +0 -0
  104. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/fedora.pyhw +0 -0
  105. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/fedora_small.pyhw +0 -0
  106. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/freebsd.pyhw +0 -0
  107. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/kali.pyhw +0 -0
  108. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/linux.pyhw +0 -0
  109. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/linuxmint.pyhw +0 -0
  110. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/macOS.pyhw +0 -0
  111. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/opensuse-leap.pyhw +0 -0
  112. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/opensuse-tumbleweed.pyhw +0 -0
  113. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/raspbian.pyhw +0 -0
  114. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/rhel.pyhw +0 -0
  115. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/ubuntu.pyhw +0 -0
  116. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/ubuntu_small.pyhw +0 -0
  117. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/windows_10.pyhw +0 -0
  118. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/windows_11.pyhw +0 -0
  119. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/windows_2025.pyhw +0 -0
  120. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/frontend/logo/ascii/windows_old.pyhw +0 -0
  121. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/library/lib/iokitGPULib.dylib +0 -0
  122. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/library/lib/iokitHostLib.dylib +0 -0
  123. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/library/test/iokitHostLibTest.py +0 -0
  124. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwException/pyhwException.py +0 -0
  125. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw/pyhwUtil/sysctlUtil.py +0 -0
  126. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw.egg-info/dependency_links.txt +0 -0
  127. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw.egg-info/entry_points.txt +0 -0
  128. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw.egg-info/requires.txt +0 -0
  129. {pyhw-0.12.2 → pyhw-0.12.4}/src/pyhw.egg-info/top_level.txt +0 -0
  130. {pyhw-0.12.2 → pyhw-0.12.4}/test/test_cliUtil.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyhw
3
- Version: 0.12.2
3
+ Version: 0.12.4
4
4
  Summary: PyHw, a neofetch-like command line tool for fetching system information but written mostly in python.
5
5
  Author: Xiao Ran
6
6
  Maintainer-email: Xiao Ran <xiaoran.007@icloud.com>
@@ -127,6 +127,12 @@ Make sure the following Python build tools are already installed.
127
127
  * build
128
128
  * twine
129
129
 
130
+ Newer versions of twine requires the following dependencies are up to date:
131
+ * setuptools
132
+ * build
133
+ * twine
134
+ * packaging
135
+
130
136
  ### 4.3 Build package
131
137
  clone the project, and run:
132
138
  ```shell
@@ -108,6 +108,12 @@ Make sure the following Python build tools are already installed.
108
108
  * build
109
109
  * twine
110
110
 
111
+ Newer versions of twine requires the following dependencies are up to date:
112
+ * setuptools
113
+ * build
114
+ * twine
115
+ * packaging
116
+
111
117
  ### 4.3 Build package
112
118
  clone the project, and run:
113
119
  ```shell
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyhw"
7
- version = "0.12.2"
7
+ version = "0.12.4"
8
8
  description = "PyHw, a neofetch-like command line tool for fetching system information but written mostly in python."
9
9
  keywords = ["neofetch", "system information", "command line tool", "python", "hardware information", "fastfetch", "fetching"]
10
10
  authors = [
@@ -33,7 +33,7 @@ package-dir = {"" = "src"}
33
33
  include-package-data = true
34
34
 
35
35
  [tool.setuptools.package-data]
36
- "pyhw" = ["frontend/logo/ascii/*.pyhw", "library/lib/*.dylib"]
36
+ "pyhw" = ["frontend/logo/ascii/*.pyhw", "library/lib/*.dylib", "library/lib/*.so"]
37
37
 
38
38
  [project.scripts]
39
39
  pyhw = "pyhw.__main__:main"
@@ -1,2 +1,2 @@
1
- __version__ = '0.12.2'
1
+ __version__ = '0.12.4'
2
2
  __author__ = 'xiaoran007'
@@ -1,3 +1,4 @@
1
1
  from .backendBase import Data
2
2
 
3
+
3
4
  __all__ = ["Data"]
@@ -78,5 +78,3 @@ class CPUDetectLinux:
78
78
  self.__cpuInfo.model = f"Cvitek {model}"
79
79
  else:
80
80
  pass
81
-
82
-
@@ -1,5 +1,3 @@
1
- import re
2
- import os
3
1
  import subprocess
4
2
  from .cpuInfo import CPUInfo
5
3
  import json
@@ -45,4 +43,3 @@ class CPUDetectWindows:
45
43
  self.__cpuInfo.model = self.__cpuInfo.model.replace("(R)", "")
46
44
  self.__cpuInfo.model = self.__cpuInfo.model.replace("(TM)", "")
47
45
  self.__cpuInfo.model = self.__cpuInfo.model.replace("CPU ", "")
48
-
@@ -4,4 +4,3 @@ from .linux import GPUDetectLinux
4
4
  class GPUDetectBSD(GPUDetectLinux):
5
5
  def __init__(self):
6
6
  super().__init__()
7
-
@@ -1,13 +1,15 @@
1
- import subprocess
2
1
  from .gpuInfo import GPUInfo
3
2
  from ..cpu import CPUDetect
4
3
  from ...pyhwUtil import getArch
4
+ from pathlib import Path
5
5
  import pypci
6
+ import ctypes
6
7
 
7
8
 
8
9
  class GPUDetectLinux:
9
10
  def __init__(self):
10
11
  self.__gpuInfo = GPUInfo()
12
+ self.__arch = self.__setArch()
11
13
 
12
14
  def getGPUInfo(self):
13
15
  self.__getGPUInfo()
@@ -19,14 +21,39 @@ class GPUDetectLinux:
19
21
  if len(gpu_devices) == 0:
20
22
  self.__handleNonePciDevices()
21
23
  else:
24
+ core_map = dict()
22
25
  for device in gpu_devices:
26
+ record_cores = core_map.get(device.device_id, 0)
27
+ if record_cores != 0:
28
+ pass
29
+ else:
30
+ cores = self.__getGPUInfoNvidia(device)
31
+ core_map[device.device_id] = cores
32
+ for device in gpu_devices:
33
+ core = core_map.get(device.device_id, 0)
34
+ if core == 0:
35
+ core_print = ""
36
+ else:
37
+ core_print = f"({core} Cores)"
23
38
  if device.subsystem_device_name != "":
24
- device_name = f"{device.vendor_name} {device.device_name} ({device.subsystem_device_name})"
39
+ device_name = f"{device.vendor_name} {device.device_name} [{device.subsystem_device_name}] {core_print}"
25
40
  else:
26
- device_name = f"{device.vendor_name} {device.device_name}"
41
+ device_name = f"{device.vendor_name} {device.device_name} {core_print}"
27
42
  self.__gpuInfo.gpus.append(self.__gpuNameClean(device_name))
28
43
  self.__gpuInfo.number += 1
29
44
 
45
+ def __getGPUInfoNvidia(self, device):
46
+ try:
47
+ package_root = Path(__file__).resolve().parent.parent.parent
48
+ lib = ctypes.CDLL(f"{package_root}/library/lib/nvmlGPULib_{self.__arch}.so")
49
+ lib.GetGPUCoreCountByPciBusId.argtypes = [ctypes.c_char_p]
50
+ lib.GetGPUCoreCountByPciBusId.restype = ctypes.c_uint
51
+ cores = lib.GetGPUCoreCountByPciBusId(f'00000000:{device.bus}'.encode())
52
+ return cores
53
+ except Exception as e:
54
+ print(f"An error occurred while getting GPU info using nvml: {e}")
55
+ return 0
56
+
30
57
  def __handleNonePciDevices(self):
31
58
  # if detector can't find any VGA/Display/3D GPUs, assume the host is a sbc device, this function is a placeholder for a more advanced method.
32
59
  if getArch() in ["aarch64", "arm32", "riscv64"]:
@@ -41,6 +68,13 @@ class GPUDetectLinux:
41
68
  gpu_name_clean = gpu_name.replace("Corporation ", "")
42
69
  return gpu_name_clean
43
70
 
71
+ @staticmethod
72
+ def __setArch():
73
+ arch = getArch()
74
+ if arch == "aarch64":
75
+ return "arm64"
76
+ elif arch == "x86_64":
77
+ return "amd64"
78
+
44
79
  def __sortGPUList(self):
45
80
  self.__gpuInfo.gpus.sort()
46
-
@@ -1,7 +1,4 @@
1
- import subprocess
2
1
  from .gpuInfo import GPUInfo
3
- from ..cpu import CPUDetect
4
- from ...pyhwUtil import getArch
5
2
  import pypci
6
3
 
7
4
 
@@ -38,4 +35,3 @@ class GPUDetectWindows:
38
35
 
39
36
  def __sortGPUList(self):
40
37
  self.__gpuInfo.gpus.sort()
41
-
@@ -10,4 +10,3 @@ class HostDetectBSD(HostDetectLinux):
10
10
  self._hostInfo.version = ""
11
11
  self._hostInfo.model = self._hostInfo.name + " " + self._hostInfo.version
12
12
  return self._hostInfo
13
-
@@ -19,4 +19,3 @@ class HostInfo:
19
19
  self.serial = ""
20
20
  self.uuid = ""
21
21
  self.vendor = ""
22
-
@@ -33,4 +33,3 @@ class KernelDetectUnix:
33
33
  self.__kernelInfo.machine = result.stdout.strip()
34
34
  except subprocess.SubprocessError:
35
35
  pass
36
-
@@ -1,8 +1,4 @@
1
- """
2
- In dev.
3
- """
4
1
  from .kernelInfo import KernelInfo
5
- from ...pyhwException import BackendException
6
2
  import platform
7
3
  import winreg
8
4
 
@@ -22,4 +22,3 @@ class MemoryDetectBSD(MemoryDetectLinux):
22
22
  self.__physical_memory = sysctlGetInt("hw.physmem")
23
23
  self.__free_pages = sysctlGetInt("vm.stats.vm.v_free_count")
24
24
  self.__free_memory = self.__free_pages * self.__page_size
25
-
@@ -21,4 +21,3 @@ class MemoryDetectLinux:
21
21
  self._memoryInfo.used = round(self._memoryInfo.total - self._memoryInfo.available, 2)
22
22
  except FileNotFoundError:
23
23
  pass
24
-
@@ -27,10 +27,3 @@ class MemoryDetectWindows:
27
27
  self._memoryInfo.total = round(total_memory, 2)
28
28
  self._memoryInfo.available = round(free_memory, 2)
29
29
  self._memoryInfo.used = round(used_memory, 2)
30
-
31
-
32
-
33
-
34
-
35
-
36
-
@@ -4,4 +4,3 @@ from .linux import NICDetectLinux
4
4
  class NICDetectBSD(NICDetectLinux):
5
5
  def __init__(self):
6
6
  NICDetectLinux.__init__(self)
7
-
@@ -1,7 +1,5 @@
1
1
  import subprocess
2
2
  from .nicInfo import NICInfo
3
- from ...pyhwUtil import getArch
4
- from ...pyhwException import BackendException
5
3
  import pypci
6
4
  import os
7
5
 
@@ -23,5 +23,3 @@ class NICDetectMacOS:
23
23
  def __handleError(self):
24
24
  self.__nicInfo.nics.append("en0")
25
25
  self.__nicInfo.number = 1
26
-
27
-
@@ -1,9 +1,5 @@
1
- import subprocess
2
1
  from .nicInfo import NICInfo
3
- from ...pyhwUtil import getArch
4
- from ...pyhwException import BackendException
5
2
  import pypci
6
- import os
7
3
 
8
4
 
9
5
  class NICDetectWindows:
@@ -40,5 +36,3 @@ class NICDetectWindows:
40
36
 
41
37
  def _sortNICList(self):
42
38
  return self._nicInfo.nics.sort()
43
-
44
-
@@ -1,5 +1,4 @@
1
1
  from .npuBase import NPUDetect
2
2
 
3
- __all__ = ['NPUDetect']
4
-
5
3
 
4
+ __all__ = ['NPUDetect']
@@ -1,7 +1,5 @@
1
1
  from .npuInfo import NPUInfo
2
2
  from ...pyhwUtil import getArch, getOS
3
- import json
4
- import subprocess
5
3
  from ..cpu import CPUDetect
6
4
 
7
5
 
@@ -57,9 +55,9 @@ class NPUDetectMacOS:
57
55
  "Apple M3": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]",
58
56
  "Apple M3 Pro": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]",
59
57
  "Apple M3 Max": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]",
58
+ "Apple M3 Ultra": "Apple Neural Engine 32 Cores (3nm) [SOC Integrated]",
60
59
  "Apple M4": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]",
61
60
  "Apple M4 Pro": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]",
62
61
  "Apple M4 Max": "Apple Neural Engine 16 Cores (3nm) [SOC Integrated]"
63
62
  }
64
63
  return npu.get(model_name, "Not Found")
65
-
@@ -6,5 +6,3 @@ class NPUInfo:
6
6
  def __init__(self):
7
7
  self.number = 0
8
8
  self.npus = []
9
-
10
-
@@ -36,5 +36,3 @@ class NPUDetectWindows:
36
36
 
37
37
  def _sortNPUList(self):
38
38
  self._npuInfo.npus.sort()
39
-
40
-
@@ -1,3 +1,4 @@
1
1
  from .osBase import OSDetect
2
2
 
3
+
3
4
  __all__ = ['OSDetect']
@@ -4,4 +4,3 @@ from .linux import OSDetectLinux
4
4
  class OSDetectBSD(OSDetectLinux):
5
5
  def __init__(self):
6
6
  OSDetectLinux.__init__(self)
7
-
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  from .osInfo import OSInfo
5
2
 
6
3
 
@@ -51,4 +51,3 @@ class OSDetectMacOS:
51
51
  version_name = macOSVersionMap.get(major, "")
52
52
  if version_name != "":
53
53
  self.__VersionName = version_name
54
-
@@ -1,5 +1,4 @@
1
1
  from .osInfo import OSInfo
2
- from ...pyhwException import BackendException
3
2
  import platform
4
3
  import winreg
5
4
 
@@ -1,3 +1,4 @@
1
1
  from .shellBase import ShellDetect
2
2
 
3
+
3
4
  __all__ = ['ShellDetect']
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  from ...pyhwUtil import getDocker
5
2
  from .shellInfo import ShellInfo
6
3
  import os
@@ -57,10 +54,3 @@ class ShellDetectUnix:
57
54
  self.__shellInfo.version = result.stdout.strip()
58
55
  except subprocess.SubprocessError:
59
56
  pass
60
-
61
-
62
-
63
-
64
-
65
-
66
-
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  from ...pyhwException import BackendException
5
2
  from .shellInfo import ShellInfo
6
3
  import json
@@ -1,3 +1,4 @@
1
1
  from .titleBase import TitleDetect
2
2
 
3
+
3
4
  __all__ = ["TitleDetect"]
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  import subprocess
5
2
  from .titleInfo import TitleInfo
6
3
 
@@ -22,5 +19,3 @@ class TitleDetectUnix:
22
19
  self.__titleInfo.title = f"{self.__titleInfo.username}@{self.__titleInfo.hostname}"
23
20
  except Exception as e:
24
21
  pass
25
-
26
-
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  from .titleInfo import TitleInfo
5
2
  import getpass
6
3
  import platform
@@ -1,3 +1,4 @@
1
1
  from .uptimeBase import UptimeDetect
2
2
 
3
+
3
4
  __all__ = ['UptimeDetect']
@@ -4,4 +4,3 @@ from .macos import UptimeDetectMacOS
4
4
  class UptimeDetectBSD(UptimeDetectMacOS):
5
5
  def __init__(self):
6
6
  UptimeDetectMacOS.__init__(self)
7
-
@@ -1,6 +1,3 @@
1
- """
2
- In dev.
3
- """
4
1
  from .uptimeInfo import UptimeInfo
5
2
 
6
3
 
@@ -37,4 +37,3 @@ class UptimeDetectMacOS:
37
37
  else:
38
38
  return
39
39
  self._now = int(subprocess.check_output(["date", "+%s"]).decode().strip())
40
-
@@ -45,5 +45,3 @@ class UptimeDetectWindows:
45
45
  self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes} mins {secs} secs"
46
46
  else:
47
47
  raise BackendException("Error while getting system uptime")
48
-
49
-
@@ -1,3 +1,4 @@
1
1
  from .frontendBase import Printer
2
2
 
3
+
3
4
  __all__ = ['Printer']
@@ -2,4 +2,5 @@ from .colorSet import ColorSet
2
2
  from .colorConfig import ColorConfigSet
3
3
  from .colorUtil import colorPrefix, colorSuffix
4
4
 
5
+
5
6
  __all__ = ["ColorSet", "ColorConfigSet", "colorPrefix", "colorSuffix"]
@@ -52,7 +52,6 @@ class Printer:
52
52
  else:
53
53
  pass
54
54
 
55
-
56
55
  @staticmethod
57
56
  def __getColumns() -> int:
58
57
  if getOS() == "linux":
@@ -105,5 +104,3 @@ class Printer:
105
104
  print(data_line)
106
105
  raise BackendException("Invalid data format")
107
106
  self.__processed_data_lines.append(colorPrefix(ColorSet.COLOR_MODE_BOLD) + colorPrefix(keys_color) + name + ": " + colorSuffix() + value)
108
-
109
-
@@ -1,3 +1,4 @@
1
1
  from .logoBase import Logo
2
2
 
3
+
3
4
  __all__ = ["Logo"]
@@ -19,4 +19,3 @@ class Logo:
19
19
  self.__logo_ascii = f.read()
20
20
  except FileNotFoundError:
21
21
  raise LogoNotFoundException(f"Logo for {self.__logo_os} not found.")
22
-
@@ -0,0 +1,25 @@
1
+ import ctypes
2
+ import pypci
3
+
4
+
5
+ def main():
6
+ lib = ctypes.CDLL(f"../lib/nvmlGPULib_amd64.so")
7
+ lib.GetGPUCoreCount.argtypes = [ctypes.c_uint]
8
+ lib.GetGPUCoreCount.restype = ctypes.c_uint
9
+ cuda_cores = lib.GetGPUCoreCount(0)
10
+ print("CUDA Cores:", cuda_cores)
11
+ lib.GetGPUCoreCountByPciBusId.argtypes = [ctypes.c_char_p]
12
+ lib.GetGPUCoreCountByPciBusId.restype = ctypes.c_uint
13
+ pci_bus_id = b"00000000:99:00.0"
14
+ cuda_cores = lib.GetGPUCoreCountByPciBusId(pci_bus_id)
15
+ print("CUDA Cores by PCI Bus ID:", cuda_cores)
16
+
17
+ gpu_devices = pypci.PCI().FindAllVGA()
18
+ for gpu in gpu_devices:
19
+ print(f"id: {gpu.bus}")
20
+ print(f"cuda cores: {lib.GetGPUCoreCountByPciBusId(f'00000000:{gpu.bus}'.encode())}")
21
+
22
+
23
+
24
+ if __name__ == "__main__":
25
+ main()
@@ -1,3 +1,4 @@
1
1
  from .pyhwException import OSUnsupportedException, BackendException, GPUNotFoundException, LogoNotFoundException
2
2
 
3
+
3
4
  __all__ = ["OSUnsupportedException", "BackendException", "GPUNotFoundException", "LogoNotFoundException"]
@@ -2,4 +2,5 @@ from .pyhwUtil import getOS, getArch, getDocker, getWSL, createDataString, selec
2
2
  from .sysctlUtil import sysctlGetString, sysctlGetInt
3
3
  from .cliUtil import ReleaseChecker
4
4
 
5
+
5
6
  __all__ = ["getOS", "getArch", "getDocker", "getWSL", "createDataString", "selectOSLogo", "sysctlGetString", "sysctlGetInt", "ReleaseChecker"]
@@ -73,5 +73,3 @@ class ReleaseChecker:
73
73
  print(f" pipx upgrade {self.PACKAGE_NAME}")
74
74
  else:
75
75
  print(f" pip install -U {self.PACKAGE_NAME}")
76
-
77
-
@@ -26,7 +26,7 @@ def getOS():
26
26
  def getArch():
27
27
  """
28
28
  Get the machine architecture.
29
- :return: str, value in [x86_64, x86, aarch64, arm32, riscv64].
29
+ :return: str, value in [x86_64, x86, aarch64, arm32, riscv64, s390x, ppc64le].
30
30
  """
31
31
  arch = platform.machine()
32
32
  if arch == "x86_64" or arch == "AMD64" or arch == "amd64":
@@ -39,6 +39,10 @@ def getArch():
39
39
  return "arm32"
40
40
  elif arch == "riscv64":
41
41
  return "riscv64"
42
+ elif arch == "s390x":
43
+ return "s390x"
44
+ elif arch == "ppc64le":
45
+ return "ppc64le"
42
46
  else:
43
47
  return "unknown"
44
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyhw
3
- Version: 0.12.2
3
+ Version: 0.12.4
4
4
  Summary: PyHw, a neofetch-like command line tool for fetching system information but written mostly in python.
5
5
  Author: Xiao Ran
6
6
  Maintainer-email: Xiao Ran <xiaoran.007@icloud.com>
@@ -127,6 +127,12 @@ Make sure the following Python build tools are already installed.
127
127
  * build
128
128
  * twine
129
129
 
130
+ Newer versions of twine requires the following dependencies are up to date:
131
+ * setuptools
132
+ * build
133
+ * twine
134
+ * packaging
135
+
130
136
  ### 4.3 Build package
131
137
  clone the project, and run:
132
138
  ```shell
@@ -44,7 +44,6 @@ src/pyhw/backend/memory/macos.py
44
44
  src/pyhw/backend/memory/memoryBase.py
45
45
  src/pyhw/backend/memory/memoryInfo.py
46
46
  src/pyhw/backend/memory/windows.py
47
- src/pyhw/backend/metal/t.py
48
47
  src/pyhw/backend/nic/__init__.py
49
48
  src/pyhw/backend/nic/bsd.py
50
49
  src/pyhw/backend/nic/linux.py
@@ -115,7 +114,10 @@ src/pyhw/frontend/logo/ascii/windows_2025.pyhw
115
114
  src/pyhw/frontend/logo/ascii/windows_old.pyhw
116
115
  src/pyhw/library/lib/iokitGPULib.dylib
117
116
  src/pyhw/library/lib/iokitHostLib.dylib
117
+ src/pyhw/library/lib/nvmlGPULib_amd64.so
118
+ src/pyhw/library/lib/nvmlGPULib_arm64.so
118
119
  src/pyhw/library/test/iokitHostLibTest.py
120
+ src/pyhw/library/test/nvmlGPULibTest.py
119
121
  src/pyhw/pyhwException/__init__.py
120
122
  src/pyhw/pyhwException/pyhwException.py
121
123
  src/pyhw/pyhwUtil/__init__.py
@@ -1,19 +0,0 @@
1
- import ctypes
2
-
3
-
4
- mylib = ctypes.CDLL('./metalGPULib.dylib')
5
-
6
- mylib.backend_init.argtypes = []
7
- mylib.backend_init.restype = None
8
-
9
- mylib.get_default_device_name.argtypes = []
10
- mylib.get_default_device_name.restype = ctypes.c_char_p
11
-
12
-
13
- # Call the function
14
- mylib.backend_init()
15
- device_name = mylib.get_default_device_name()
16
-
17
- # Print the result
18
- print(f"Device Name: {device_name.decode('utf-8')}")
19
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes