pyhw 0.11.10__tar.gz → 0.12.0__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 (129) hide show
  1. {pyhw-0.11.10/src/pyhw.egg-info → pyhw-0.12.0}/PKG-INFO +2 -2
  2. {pyhw-0.11.10 → pyhw-0.12.0}/pyproject.toml +2 -2
  3. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/__init__.py +1 -1
  4. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/macos.py +8 -6
  5. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/macos.py +1 -1
  6. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/macos.py +19 -2
  7. pyhw-0.12.0/src/pyhw/library/lib/iokitGPULib.dylib +0 -0
  8. pyhw-0.12.0/src/pyhw/library/lib/iokitHostLib.dylib +0 -0
  9. pyhw-0.12.0/src/pyhw/library/test/iokitHostLibTest.py +13 -0
  10. {pyhw-0.11.10 → pyhw-0.12.0/src/pyhw.egg-info}/PKG-INFO +2 -2
  11. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw.egg-info/SOURCES.txt +2 -0
  12. pyhw-0.12.0/src/pyhw.egg-info/requires.txt +1 -0
  13. pyhw-0.11.10/src/pyhw/library/lib/iokitGPULib.dylib +0 -0
  14. pyhw-0.11.10/src/pyhw.egg-info/requires.txt +0 -1
  15. {pyhw-0.11.10 → pyhw-0.12.0}/LICENSE +0 -0
  16. {pyhw-0.11.10 → pyhw-0.12.0}/README.md +0 -0
  17. {pyhw-0.11.10 → pyhw-0.12.0}/setup.cfg +0 -0
  18. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/__main__.py +0 -0
  19. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/__init__.py +0 -0
  20. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/backendBase.py +0 -0
  21. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/__init__.py +0 -0
  22. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/bsd.py +0 -0
  23. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/cpuBase.py +0 -0
  24. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/cpuInfo.py +0 -0
  25. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/linux.py +0 -0
  26. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/cpu/windows.py +0 -0
  27. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/__init__.py +0 -0
  28. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/bsd.py +0 -0
  29. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/gpuBase.py +0 -0
  30. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/gpuInfo.py +0 -0
  31. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/linux.py +0 -0
  32. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/gpu/windows.py +0 -0
  33. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/__init__.py +0 -0
  34. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/bsd.py +0 -0
  35. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/hostBase.py +0 -0
  36. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/hostInfo.py +0 -0
  37. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/linux.py +0 -0
  38. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/host/windows.py +0 -0
  39. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/kernel/__init__.py +0 -0
  40. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/kernel/kernelBase.py +0 -0
  41. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/kernel/kernelInfo.py +0 -0
  42. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/kernel/unix.py +0 -0
  43. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/kernel/windows.py +0 -0
  44. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/__init__.py +0 -0
  45. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/bsd.py +0 -0
  46. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/linux.py +0 -0
  47. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/macos.py +0 -0
  48. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/memoryBase.py +0 -0
  49. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/memoryInfo.py +0 -0
  50. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/memory/windows.py +0 -0
  51. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/metal/t.py +0 -0
  52. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/__init__.py +0 -0
  53. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/bsd.py +0 -0
  54. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/linux.py +0 -0
  55. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/macos.py +0 -0
  56. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/nicBase.py +0 -0
  57. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/nicInfo.py +0 -0
  58. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/nic/windows.py +0 -0
  59. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/__init__.py +0 -0
  60. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/bsd.py +0 -0
  61. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/linux.py +0 -0
  62. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/macos.py +0 -0
  63. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/npuBase.py +0 -0
  64. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/npuInfo.py +0 -0
  65. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/npu/windows.py +0 -0
  66. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/__init__.py +0 -0
  67. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/bsd.py +0 -0
  68. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/linux.py +0 -0
  69. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/macos.py +0 -0
  70. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/osBase.py +0 -0
  71. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/osInfo.py +0 -0
  72. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/os/windows.py +0 -0
  73. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/shell/__init__.py +0 -0
  74. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/shell/shellBase.py +0 -0
  75. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/shell/shellInfo.py +0 -0
  76. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/shell/unix.py +0 -0
  77. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/shell/windows.py +0 -0
  78. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/title/__init__.py +0 -0
  79. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/title/titleBase.py +0 -0
  80. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/title/titleInfo.py +0 -0
  81. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/title/unix.py +0 -0
  82. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/title/windows.py +0 -0
  83. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/__init__.py +0 -0
  84. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/bsd.py +0 -0
  85. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/linux.py +0 -0
  86. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/macos.py +0 -0
  87. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/uptimeBase.py +0 -0
  88. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/uptimeInfo.py +0 -0
  89. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/backend/uptime/windows.py +0 -0
  90. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/__init__.py +0 -0
  91. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/color/__init__.py +0 -0
  92. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/color/colorConfig.py +0 -0
  93. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/color/colorSet.py +0 -0
  94. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/color/colorUtil.py +0 -0
  95. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/frontendBase.py +0 -0
  96. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/__init__.py +0 -0
  97. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/alpine.pyhw +0 -0
  98. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/arch.pyhw +0 -0
  99. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/armbian.pyhw +0 -0
  100. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/centos.pyhw +0 -0
  101. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/debian.pyhw +0 -0
  102. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/fedora.pyhw +0 -0
  103. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/fedora_small.pyhw +0 -0
  104. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/freebsd.pyhw +0 -0
  105. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/kali.pyhw +0 -0
  106. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/linux.pyhw +0 -0
  107. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/linuxmint.pyhw +0 -0
  108. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/macOS.pyhw +0 -0
  109. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/opensuse-leap.pyhw +0 -0
  110. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/opensuse-tumbleweed.pyhw +0 -0
  111. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/raspbian.pyhw +0 -0
  112. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/rhel.pyhw +0 -0
  113. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/ubuntu.pyhw +0 -0
  114. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/ubuntu_small.pyhw +0 -0
  115. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/windows_10.pyhw +0 -0
  116. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/windows_11.pyhw +0 -0
  117. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/windows_2025.pyhw +0 -0
  118. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/ascii/windows_old.pyhw +0 -0
  119. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/frontend/logo/logoBase.py +0 -0
  120. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwException/__init__.py +0 -0
  121. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwException/pyhwException.py +0 -0
  122. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwUtil/__init__.py +0 -0
  123. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwUtil/cliUtil.py +0 -0
  124. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwUtil/pyhwUtil.py +0 -0
  125. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw/pyhwUtil/sysctlUtil.py +0 -0
  126. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw.egg-info/dependency_links.txt +0 -0
  127. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw.egg-info/entry_points.txt +0 -0
  128. {pyhw-0.11.10 → pyhw-0.12.0}/src/pyhw.egg-info/top_level.txt +0 -0
  129. {pyhw-0.11.10 → pyhw-0.12.0}/test/test_cliUtil.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyhw
3
- Version: 0.11.10
3
+ Version: 0.12.0
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>
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
14
14
  Requires-Python: >=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: pypci-ng>=0.2.1
17
+ Requires-Dist: pypci-ng>=0.2.2
18
18
 
19
19
  # PyHw
20
20
  [![Downloads](https://static.pepy.tech/badge/pyhw)](https://pepy.tech/project/pyhw)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyhw"
7
- version = "0.11.10"
7
+ version = "0.12.0"
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 = [
@@ -17,7 +17,7 @@ readme = "README.md"
17
17
  license = {text = "BSD-3-Clause"}
18
18
  requires-python = ">=3.9"
19
19
  dependencies = [
20
- "pypci-ng>=0.2.1"
20
+ "pypci-ng>=0.2.2"
21
21
  ]
22
22
  classifiers = [
23
23
  "Development Status :: 4 - Beta",
@@ -1,2 +1,2 @@
1
- __version__ = '0.11.10'
1
+ __version__ = '0.12.0'
2
2
  __author__ = 'xiaoran007'
@@ -52,11 +52,12 @@ class CPUDetectMacOS:
52
52
 
53
53
  def __AppleSiliconBaseFrequency(self):
54
54
  # see https://en.wikipedia.org/wiki/Apple_silicon#M_series for more details.
55
+ # https://eclecticlight.co/2025/01/20/what-are-cpu-core-frequencies-in-apple-silicon-macs/
55
56
  freq = {
56
- "Apple M1": "2.30 GHz",
57
- "Apple M1 Pro": "2.32 GHz",
58
- "Apple M1 Max": "2.32 GHz",
59
- "Apple M1 Ultra": "2.32 GHz",
57
+ "Apple M1": "3.20 GHz",
58
+ "Apple M1 Pro": "3.23 GHz",
59
+ "Apple M1 Max": "3.23 GHz",
60
+ "Apple M1 Ultra": "3.23 GHz",
60
61
  "Apple M2": "3.50 GHz",
61
62
  "Apple M2 Pro": "3.50 GHz",
62
63
  "Apple M2 Max": "3.69 GHz",
@@ -64,8 +65,9 @@ class CPUDetectMacOS:
64
65
  "Apple M3": "4.05 GHz",
65
66
  "Apple M3 Pro": "4.05 GHz",
66
67
  "Apple M3 Max": "4.05 GHz",
68
+ "Apple M3 Ultra": "4.05 GHz", # Need more info
67
69
  "Apple M4": "4.40 GHz",
68
- "Apple M4 Pro": "4.40 GHz",
69
- "Apple M4 Max": "4.40 GHz"
70
+ "Apple M4 Pro": "4.51 GHz",
71
+ "Apple M4 Max": "4.51 GHz"
70
72
  }
71
73
  self.__cpuInfo.frequency = freq.get(self.__cpuInfo.model, "Unknown")
@@ -31,7 +31,7 @@ class GPUDetectMacOS:
31
31
  return
32
32
 
33
33
  for gpu in gpus:
34
- self.__gpuInfo.gpus.append(f'{gpu.get("sppci_model")} ({gpu.get("sppci_cores")} cores) [SOC Integrated]')
34
+ self.__gpuInfo.gpus.append(f'{gpu.get("sppci_model")} ({gpu.get("sppci_cores")} Cores) [SOC Integrated]')
35
35
 
36
36
  def __getGPUIntel(self):
37
37
  if self.__getGPUIOKit():
@@ -3,6 +3,8 @@
3
3
  """
4
4
  from .hostInfo import HostInfo
5
5
  from ...pyhwUtil import sysctlGetString
6
+ import ctypes
7
+ from pathlib import Path
6
8
 
7
9
 
8
10
  class HostDetectMacOS:
@@ -11,10 +13,25 @@ class HostDetectMacOS:
11
13
  self.__HWModel = ""
12
14
 
13
15
  def getHostInfo(self):
14
- self.__getHWModel()
15
- self.__hostInfo.model = self.__handleMacName(self.__HWModel)
16
+ if not self.__getHostInfoIOKit():
17
+ # if IOKit fails, fallback to sysctl
18
+ self.__getHWModel()
19
+ self.__hostInfo.model = self.__handleMacName(self.__HWModel)
16
20
  return self.__hostInfo
17
21
 
22
+ def __getHostInfoIOKit(self):
23
+ try:
24
+ package_root = Path(__file__).resolve().parent.parent.parent
25
+ lib = ctypes.CDLL(f"{package_root}/library/lib/iokitHostLib.dylib")
26
+ lib.getHostInfo.restype = ctypes.c_char_p
27
+ host_info = lib.getHostInfo()
28
+ product_name = host_info.decode('utf-8').split("; ")
29
+ self.__hostInfo.model = product_name[0]
30
+ return True
31
+ except Exception as e:
32
+ # print(f"An error occurred while getting GPU info using IOKit: {e}")
33
+ return False
34
+
18
35
  def __getHWModel(self):
19
36
  self.__HWModel = sysctlGetString("hw.model")
20
37
 
@@ -0,0 +1,13 @@
1
+ import ctypes
2
+
3
+
4
+ def main():
5
+ lib = ctypes.CDLL(f"../lib/iokitHostLib.dylib")
6
+ lib.getHostInfo.restype = ctypes.c_char_p
7
+ host_info = lib.getHostInfo()
8
+ print(host_info)
9
+ # gpus = host_info.decode('utf-8').split("; ")
10
+
11
+
12
+ if __name__ == "__main__":
13
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyhw
3
- Version: 0.11.10
3
+ Version: 0.12.0
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>
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
14
14
  Requires-Python: >=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: pypci-ng>=0.2.1
17
+ Requires-Dist: pypci-ng>=0.2.2
18
18
 
19
19
  # PyHw
20
20
  [![Downloads](https://static.pepy.tech/badge/pyhw)](https://pepy.tech/project/pyhw)
@@ -114,6 +114,8 @@ src/pyhw/frontend/logo/ascii/windows_11.pyhw
114
114
  src/pyhw/frontend/logo/ascii/windows_2025.pyhw
115
115
  src/pyhw/frontend/logo/ascii/windows_old.pyhw
116
116
  src/pyhw/library/lib/iokitGPULib.dylib
117
+ src/pyhw/library/lib/iokitHostLib.dylib
118
+ src/pyhw/library/test/iokitHostLibTest.py
117
119
  src/pyhw/pyhwException/__init__.py
118
120
  src/pyhw/pyhwException/pyhwException.py
119
121
  src/pyhw/pyhwUtil/__init__.py
@@ -0,0 +1 @@
1
+ pypci-ng>=0.2.2
@@ -1 +0,0 @@
1
- pypci-ng>=0.2.1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes