habana-pyhlml 1.22.2.32__py3-none-any.whl

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.
@@ -0,0 +1,38 @@
1
+ Signature-Version: 1.0
2
+ Created-By: SignFile 4.0.176 (Intel Corporation)
3
+ SHA-256-Digest-Manifest: Twxvi9j2ycr6dYuXjYBrEb7XSH/u12ZHQ+qm+bJ94y4=
4
+
5
+ Name: habana_pyhlml-1.22.2.32.dist-info/LICENSE
6
+ SHA-256-Digest: BVsqYZSmW/vrnKo/K4pTgQ7bnFphVFd7Ltw4Wr4nj2s=
7
+
8
+ Name: habana_pyhlml-1.22.2.32.dist-info/METADATA
9
+ SHA-256-Digest: BVdIuRFLp6e1cd3rThq5HXsl9ywNOFFPirwYQv/a69s=
10
+
11
+ Name: habana_pyhlml-1.22.2.32.dist-info/RECORD
12
+ SHA-256-Digest: zWYnxtY3W8fKzPJHkSlqvCjdDLbr9e9AmybMuJUiDoQ=
13
+
14
+ Name: habana_pyhlml-1.22.2.32.dist-info/WHEEL
15
+ SHA-256-Digest: +uU2szFgY3RpDObafmmuD152Ox8pwYEKW2cVvydjBlw=
16
+
17
+ Name: habana_pyhlml-1.22.2.32.dist-info/top_level.txt
18
+ SHA-256-Digest: j+U7HHaWai3mHU8qXMu8M1ZDCmCV3fujGN+AN8C6oWk=
19
+
20
+ Name: pyhlml/__init__.py
21
+ SHA-256-Digest: qlTptYeqf4nh4j163t7IYpK392tVi71wCvJ7b6NqX40=
22
+
23
+ Name: pyhlml/hlml_error.py
24
+ SHA-256-Digest: LZhA4cAWI+bRaI7DqWPpEZ62UK3dCOeexUTezWuIpT4=
25
+
26
+ Name: pyhlml/hlml_lib.py
27
+ SHA-256-Digest: K7Wpklstmcih9yNWAsumX3HBTgJ+gZxZLJt7RxtvW3U=
28
+
29
+ Name: pyhlml/hlml_types.py
30
+ SHA-256-Digest: mj9hwiGMM90EmyhlzlUgZ6BOvWk6fYLfmR5Uzcv6Nts=
31
+
32
+ Name: pyhlml/main.py
33
+ SHA-256-Digest: 7lBupO0YVk0Y2pWXdr13qz0mMeiR2rLigrzqUoOQcMU=
34
+
35
+ Name: pyhlml/pyhlml_types_generated.py
36
+ SHA-256-Digest: CcLYSTXiOt1CCpJ4aw3/lD5KveEap5sPRWgCwJfTcew=
37
+
38
+
META-INF/MANIFEST.MF ADDED
@@ -0,0 +1,36 @@
1
+ Manifest-Version: 1.0
2
+
3
+ Name: habana_pyhlml-1.22.2.32.dist-info/LICENSE
4
+ SHA-256-Digest: /J8fTEtZF8y69onNU5/EAdOn0AC9RM2uHPh/q36+5bc=
5
+
6
+ Name: habana_pyhlml-1.22.2.32.dist-info/METADATA
7
+ SHA-256-Digest: atUspqH/3m8vs87UgK1+y+slM4p+iRtMR/WqP2+Dtww=
8
+
9
+ Name: habana_pyhlml-1.22.2.32.dist-info/RECORD
10
+ SHA-256-Digest: aWmdy0z7Anzdov4c1ofbLWDuUfZwvMKdD7LXaLTIAAo=
11
+
12
+ Name: habana_pyhlml-1.22.2.32.dist-info/WHEEL
13
+ SHA-256-Digest: 2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO/i5m4cOimbo=
14
+
15
+ Name: habana_pyhlml-1.22.2.32.dist-info/top_level.txt
16
+ SHA-256-Digest: 0jXJHTTotoeuyzpI1dcVr0mzCVB0NKY7LyCF4OwoMZU=
17
+
18
+ Name: pyhlml/__init__.py
19
+ SHA-256-Digest: VjbHqSSypSMmVK7UTxuCyOs/AE8HhTXX9EGr6NbaQNk=
20
+
21
+ Name: pyhlml/hlml_error.py
22
+ SHA-256-Digest: GQulGXf+jX38jEASXF22qJ0yL8eC57vUo8s9lVI7q/E=
23
+
24
+ Name: pyhlml/hlml_lib.py
25
+ SHA-256-Digest: JiHRLl3vpAozhCSs9eJC8xlhIMxR2wNVZdmahjlgDfc=
26
+
27
+ Name: pyhlml/hlml_types.py
28
+ SHA-256-Digest: tCBdYvLofCuRIcPtFSeVsgksx1iCWTeuXYN/plddjP8=
29
+
30
+ Name: pyhlml/main.py
31
+ SHA-256-Digest: eVZvk2XRRk61+YsdvzFGzicS49MeFokt6W+smaQD0HY=
32
+
33
+ Name: pyhlml/pyhlml_types_generated.py
34
+ SHA-256-Digest: Oua3nPBYs3LPtiz38CTk0rm1b+RaMnyutWD+bzsPAPs=
35
+
36
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 HabanaAI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,66 @@
1
+ Metadata-Version: 2.1
2
+ Name: habana-pyhlml
3
+ Version: 1.22.2.32
4
+ Summary: Python3 wrapper for the HLML library.
5
+ Home-page: UNKNOWN
6
+ Author: HabanaAI
7
+ Author-email: "support@habana.ai"
8
+ License: MIT
9
+ Platform: UNKNOWN
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Operating System :: POSIX :: Linux
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+
16
+ # pyhlml
17
+ Python3 wrapper for the HLML library
18
+
19
+ ## Getting Started
20
+
21
+ The pyhlml library is an python API wrapper for the Synapse HLML library, documented here: https://docs.habana.ai/en/latest/API_Reference_Guides/HLML_API_Reference.html
22
+
23
+ ### Requirements
24
+
25
+ - Python3
26
+ - Habana-enabled device ( inc. Drivers/Firmware )
27
+ - Synapse version 1.0.1-81 or later
28
+
29
+ ### Install - PIP
30
+
31
+ ```bash
32
+ $ pip3 install -e git+https://github.com/HabanaAI/pyhlml.git#egg=pyhlml
33
+ ```
34
+
35
+ ### Basic Usage
36
+
37
+ ```python3
38
+ import pyhlml
39
+
40
+ # Initialize the library
41
+ pyhlml.hlmlInit()
42
+
43
+ # Get total number of devices in the system
44
+ device_count = pyhlml.hlmlDeviceGetCount()
45
+
46
+ # For each device print utilization
47
+ for i in range(device_count):
48
+ device = pyhlml.hlmlDeviceGetHandleByIndex(i)
49
+ print(f"Device {i} Utilization: {pyhlml.hlmlDeviceGetUtilizationRates(device)}
50
+
51
+ # Shutdown
52
+ pyhlml.hlmlShutdown()
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Versions
58
+
59
+ This wrapper shadows the synapse release versions and uses the scheme
60
+
61
+ $release-$build
62
+
63
+ where release is the synapse release and build is the build of this repo ( 0 indexed ).
64
+
65
+
66
+
@@ -0,0 +1,11 @@
1
+ pyhlml/__init__.py,sha256=VjbHqSSypSMmVK7UTxuCyOs_AE8HhTXX9EGr6NbaQNk,25
2
+ pyhlml/hlml_error.py,sha256=GQulGXf-jX38jEASXF22qJ0yL8eC57vUo8s9lVI7q_E,2113
3
+ pyhlml/hlml_lib.py,sha256=JiHRLl3vpAozhCSs9eJC8xlhIMxR2wNVZdmahjlgDfc,1430
4
+ pyhlml/hlml_types.py,sha256=tCBdYvLofCuRIcPtFSeVsgksx1iCWTeuXYN_plddjP8,13985
5
+ pyhlml/main.py,sha256=eVZvk2XRRk61-YsdvzFGzicS49MeFokt6W-smaQD0HY,35851
6
+ pyhlml/pyhlml_types_generated.py,sha256=Oua3nPBYs3LPtiz38CTk0rm1b-RaMnyutWD-bzsPAPs,7008
7
+ habana_pyhlml-1.22.2.32.dist-info/LICENSE,sha256=_J8fTEtZF8y69onNU5_EAdOn0AC9RM2uHPh_q36-5bc,1065
8
+ habana_pyhlml-1.22.2.32.dist-info/METADATA,sha256=atUspqH_3m8vs87UgK1-y-slM4p-iRtMR_WqP2-Dtww,1456
9
+ habana_pyhlml-1.22.2.32.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
10
+ habana_pyhlml-1.22.2.32.dist-info/top_level.txt,sha256=0jXJHTTotoeuyzpI1dcVr0mzCVB0NKY7LyCF4OwoMZU,7
11
+ habana_pyhlml-1.22.2.32.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.38.4)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ pyhlml
pyhlml/__init__.py ADDED
@@ -0,0 +1 @@
1
+ from pyhlml.main import *
pyhlml/hlml_error.py ADDED
@@ -0,0 +1,50 @@
1
+ from string import capwords
2
+ from sys import modules
3
+
4
+ import pyhlml.hlml_types as hlml_t
5
+
6
+ def ErrorsAsClass():
7
+ this_module = modules[__name__]
8
+ names = [x for x in dir(hlml_t.HLML_RETURN) if x.startswith("HLML_ERROR")]
9
+ for err in names:
10
+ class_name = "HLMLError_" + capwords(err.replace("HLML_ERROR_", ""), "_").replace("_", "")
11
+ err_v = getattr(hlml_t.HLML_RETURN, err)
12
+ def gen_new(val):
13
+ def new(typ):
14
+ obj = HLMLError.__new__(typ, val)
15
+ return obj
16
+ return new
17
+ new_class = type(class_name, (HLMLError,), {'__new__': gen_new(err_v)})
18
+ new_class.__module__ = __name__
19
+ setattr(this_module, class_name, new_class)
20
+ HLMLError._cMap[err_v] = new_class
21
+
22
+ class HLMLError(Exception):
23
+ _cMap = {}
24
+ _errcodes = {
25
+ hlml_t.HLML_RETURN.HLML_ERROR_UNINITIALIZED : "Lib not initialized",
26
+ hlml_t.HLML_RETURN.HLML_ERROR_INVALID_ARGUMENT : "Invalid argument",
27
+ hlml_t.HLML_RETURN.HLML_ERROR_NOT_SUPPORTED : "Not supported",
28
+ hlml_t.HLML_RETURN.HLML_ERROR_ALREADY_INITIALIZED : "Libhlml already initialized",
29
+ hlml_t.HLML_RETURN.HLML_ERROR_NOT_FOUND : "Not found",
30
+ hlml_t.HLML_RETURN.HLML_ERROR_INSUFFICIENT_SIZE : "Insufficient size",
31
+ hlml_t.HLML_RETURN.HLML_ERROR_DRIVER_NOT_LOADED : "Driver not loaded",
32
+ hlml_t.HLML_RETURN.HLML_ERROR_TIMEOUT : "Timeout",
33
+ hlml_t.HLML_RETURN.HLML_ERROR_AIP_IS_LOST : "AIP Lost",
34
+ hlml_t.HLML_RETURN.HLML_ERROR_MEMORY : "Memory error",
35
+ hlml_t.HLML_RETURN.HLML_ERROR_NO_DATA : "No Data",
36
+ hlml_t.HLML_RETURN.HLML_ERROR_UNKNOWN : "Unknown"
37
+ }
38
+
39
+ def __new__(typ, value):
40
+ if typ == HLMLError:
41
+ typ = HLMLError._cMap.get(value, typ)
42
+ obj = Exception.__new__(typ)
43
+ obj.value = value
44
+ return obj
45
+
46
+ def __str__(self):
47
+ return f"HLML Error with code {self.value}"
48
+
49
+ def __eq__(self, other):
50
+ return self.value == other.value
pyhlml/hlml_lib.py ADDED
@@ -0,0 +1,49 @@
1
+ import ctypes
2
+
3
+ from threading import Lock
4
+
5
+ from pyhlml.hlml_error import HLMLError
6
+ from pyhlml.hlml_types import HLML_RETURN
7
+
8
+ class LibHLML:
9
+ def __init__(self, path="/usr/lib/habanalabs/libhlml.so"):
10
+ self.default_path = path
11
+ self.lib = None
12
+ self.lib_load_lock = Lock()
13
+ self.func_ptr_cache = dict()
14
+ self.ref_count = 0 # INC on init DEC on dest
15
+
16
+ self._load_lib()
17
+
18
+ def _load_lib(self):
19
+ with self.lib_load_lock:
20
+ try:
21
+ self.lib = ctypes.CDLL(self.default_path)
22
+ except Exception as e:
23
+ print("Failed to load libhlml")
24
+ raise HLMLError(HLML_RETURN.HLML_ERROR_UNINITIALIZED)
25
+
26
+ def inc_ref(self):
27
+ with self.lib_load_lock:
28
+ self.ref_count += 1
29
+
30
+ def dec_ref(self):
31
+ if self.ref_count > 0:
32
+ with self.lib_load_lock:
33
+ self.ref_count -= 1
34
+
35
+ def get_func_ptr(self, name):
36
+ if self.lib == None:
37
+ raise HLMLError(HLML_RETURN.HLML_ERROR_UNINITIALIZED)
38
+
39
+ if name in self.func_ptr_cache:
40
+ return self.func_ptr_cache[name]
41
+
42
+ with self.lib_load_lock:
43
+ try:
44
+ self.func_ptr_cache[name] = getattr(self.lib, name)
45
+ return self.func_ptr_cache[name]
46
+ except Exception as e:
47
+ raise HLMLError(HLML_RETURN.HLML_ERROR_INVALID_ARGUMENT)
48
+
49
+
pyhlml/hlml_types.py ADDED
@@ -0,0 +1,284 @@
1
+ """
2
+ Python bindings for HLML types
3
+ """
4
+ import warnings
5
+ warnings.warn(
6
+ "pyhlml.hlml_types is deprecated and will be removed in a future release. "
7
+ "Please use pyhlml.pyhlml_types_generated directly.",
8
+ DeprecationWarning,
9
+ stacklevel=2 # Level 2 to point to the import statement in the user's code
10
+ )
11
+
12
+ import ctypes
13
+
14
+ import pyhlml.pyhlml_types_generated as newpy
15
+
16
+ class HLML_DEVICE:
17
+ TYPE = ctypes.c_void_p
18
+
19
+ class HLML_DEFINE:
20
+ PCI_DOMAIN_LEN = newpy.HLML_DEFINES.PCI_DOMAIN_LEN
21
+ PCI_ADDR_LEN = newpy.HLML_DEFINES.PCI_ADDR_LEN
22
+ PCI_LINK_INFO_LEN = newpy.HLML_DEFINES.PCI_LINK_INFO_LEN
23
+ HL_FIELD_MAX_SIZE = newpy.HLML_DEFINES.HL_FIELD_MAX_SIZE
24
+ PORTS_ARR_SIZE = newpy.HLML_DEFINES.PORTS_ARR_SIZE
25
+ HLML_DEVICE_ROW_RPL_MAX = newpy.HLML_DEFINES.HLML_DEVICE_ROW_RPL_MAX
26
+ HLML_DEVICE_MAC_MAX_ADDRESSES = newpy.HLML_DEFINES.HLML_DEVICE_MAC_MAX_ADDRESSES
27
+ HLML_EVENT_ECC_ERR = newpy.HLML_DEFINES.HLML_EVENT_ECC_ERR
28
+ HLML_EVENT_ECC_DERR = newpy.HLML_DEFINES.HLML_EVENT_ECC_DERR
29
+ HLML_EVENT_CRITICAL_ERR = newpy.HLML_DEFINES.HLML_EVENT_CRITICAL_ERR
30
+ HLML_EVENT_CLOCK_RATE = newpy.HLML_DEFINES.HLML_EVENT_CLOCK_RATE
31
+ HLML_EVENT_DRAM_ERR = newpy.HLML_DEFINES.HLML_EVENT_DRAM_ERR
32
+ HLML_EVENT_DRAM_DERR = newpy.HLML_DEFINES.HLML_EVENT_DRAM_DERR
33
+ HLML_EVENT_ECC_SERR = newpy.HLML_DEFINES.HLML_EVENT_ECC_SERR
34
+ HLML_EVENT_DRAM_SERR = newpy.HLML_DEFINES.HLML_EVENT_DRAM_SERR
35
+ HLML_CLOCKS_THROTTLE_REASON_POWER = newpy.HLML_DEFINES.HLML_CLOCKS_THROTTLE_REASON_POWER
36
+ HLML_CLOCKS_THROTTLE_REASON_THERMAL = newpy.HLML_DEFINES.HLML_CLOCKS_THROTTLE_REASON_THERMAL
37
+ HLML_AFFINITY_SCOPE_NODE = newpy.HLML_DEFINES.HLML_AFFINITY_SCOPE_NODE
38
+ HLML_AFFINITY_SCOPE_SOCKET = newpy.HLML_DEFINES.HLML_AFFINITY_SCOPE_SOCKET
39
+
40
+ class COMMON_DEFINE:
41
+ VERSION_MAX_LEN = 128
42
+ ETHER_ADDR_LEN = 6
43
+ HABANA_LINK_CNT_MAX_NUM = 256
44
+ STATUS_MAX_LEN = 30
45
+
46
+ # Duplicate values from "defines" class, kept for legacy reasons
47
+ class HLML_AFFINITY_SCOPE:
48
+ TYPE = ctypes.c_uint
49
+ HLML_AFFINITY_SCOPE_NODE = newpy.HLML_DEFINES.HLML_AFFINITY_SCOPE_NODE
50
+ HLML_AFFINITY_SCOPE_SOCKET = newpy.HLML_DEFINES.HLML_AFFINITY_SCOPE_SOCKET
51
+
52
+ class HLML_RETURN:
53
+ TYPE = ctypes.c_uint
54
+ HLML_SUCCESS = newpy.HLML_RETURN.HLML_SUCCESS
55
+ HLML_ERROR_UNINITIALIZED = newpy.HLML_RETURN.HLML_ERROR_UNINITIALIZED
56
+ HLML_ERROR_INVALID_ARGUMENT = newpy.HLML_RETURN.HLML_ERROR_INVALID_ARGUMENT
57
+ HLML_ERROR_NOT_SUPPORTED = newpy.HLML_RETURN.HLML_ERROR_NOT_SUPPORTED
58
+ HLML_ERROR_ALREADY_INITIALIZED = newpy.HLML_RETURN.HLML_ERROR_ALREADY_INITIALIZED
59
+ HLML_ERROR_NOT_FOUND = newpy.HLML_RETURN.HLML_ERROR_NOT_FOUND
60
+ HLML_ERROR_INSUFFICIENT_SIZE = newpy.HLML_RETURN.HLML_ERROR_INSUFFICIENT_SIZE
61
+ HLML_ERROR_DRIVER_NOT_LOADED = newpy.HLML_RETURN.HLML_ERROR_DRIVER_NOT_LOADED
62
+ HLML_ERROR_TIMEOUT = newpy.HLML_RETURN.HLML_ERROR_TIMEOUT
63
+ HLML_ERROR_AIP_IS_LOST = newpy.HLML_RETURN.HLML_ERROR_AIP_IS_LOST
64
+ HLML_ERROR_MEMORY = newpy.HLML_RETURN.HLML_ERROR_MEMORY
65
+ HLML_ERROR_NO_DATA = newpy.HLML_RETURN.HLML_ERROR_NO_DATA
66
+ HLML_ERROR_UNKNOWN = newpy.HLML_RETURN.HLML_ERROR_UNKNOWN
67
+
68
+ class HLML_CLOCK_TYPE:
69
+ TYPE = ctypes.c_uint
70
+ HLML_CLOCK_SOC = newpy.HLML_CLOCK_TYPE.HLML_CLOCK_SOC
71
+ HLML_CLOCK_IC = newpy.HLML_CLOCK_TYPE.HLML_CLOCK_IC
72
+ HLML_CLOCK_MME = newpy.HLML_CLOCK_TYPE.HLML_CLOCK_MME
73
+ HLML_CLOCK_TPC = newpy.HLML_CLOCK_TYPE.HLML_CLOCK_TPC
74
+ HLML_CLOCK_COUNT = newpy.HLML_CLOCK_TYPE.HLML_CLOCK_COUNT
75
+
76
+ class HLML_TEMP_SENS:
77
+ TYPE = ctypes.c_uint
78
+ HLML_TEMPERATURE_ON_AIP = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_ON_AIP
79
+ HLML_TEMPERATURE_ON_BOARD = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_ON_BOARD
80
+ HLML_TEMPERATURE_OTHER = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_OTHER
81
+ HLML_TEMPERATURE_HBM = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_HBM
82
+ HLML_TEMPERATURE_VRM = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_VRM
83
+ HLML_TEMPERATURE_CTEMP = newpy.HLML_TEMPERATURE_SENSORS.HLML_TEMPERATURE_CTEMP
84
+
85
+ class HLML_TEMP_THRESH:
86
+ TYPE = ctypes.c_uint
87
+ HLML_TEMPERATURE_THRESHOLD_SHUTDOWN = newpy.HLML_TEMPERATURE_THRESHOLDS.HLML_TEMPERATURE_THRESHOLD_SHUTDOWN
88
+ HLML_TEMPERATURE_THRESHOLD_SLOWDOWN = newpy.HLML_TEMPERATURE_THRESHOLDS.HLML_TEMPERATURE_THRESHOLD_SLOWDOWN
89
+ HLML_TEMPERATURE_THRESHOLD_MEM_MAX = newpy.HLML_TEMPERATURE_THRESHOLDS.HLML_TEMPERATURE_THRESHOLD_MEM_MAX
90
+ HLML_TEMPERATURE_THRESHOLD_GPU_MAX = newpy.HLML_TEMPERATURE_THRESHOLDS.HLML_TEMPERATURE_THRESHOLD_GPU_MAX
91
+ HLML_TEMPERATURE_THRESHOLD_COUNT = newpy.HLML_TEMPERATURE_THRESHOLDS.HLML_TEMPERATURE_THRESHOLD_COUNT
92
+
93
+ class HLML_ENABLE_STATE:
94
+ TYPE = ctypes.c_uint
95
+ HLML_FEATURE_DISABLED = newpy.HLML_ENABLE_STATE.HLML_FEATURE_DISABLED
96
+ HLML_FEATURE_ENABLED = newpy.HLML_ENABLE_STATE.HLML_FEATURE_ENABLED
97
+
98
+ class HLML_P_STATES:
99
+ TYPE = ctypes.c_uint
100
+ HLML_PSTATE_0 = newpy.HLML_P_STATES.HLML_PSTATE_0
101
+ HLML_PSTATE_1 = newpy.HLML_P_STATES.HLML_PSTATE_1
102
+ HLML_PSTATE_2 = newpy.HLML_P_STATES.HLML_PSTATE_2
103
+ HLML_PSTATE_3 = newpy.HLML_P_STATES.HLML_PSTATE_3
104
+ HLML_PSTATE_4 = newpy.HLML_P_STATES.HLML_PSTATE_4
105
+ HLML_PSTATE_5 = newpy.HLML_P_STATES.HLML_PSTATE_5
106
+ HLML_PSTATE_6 = newpy.HLML_P_STATES.HLML_PSTATE_6
107
+ HLML_PSTATE_7 = newpy.HLML_P_STATES.HLML_PSTATE_7
108
+ HLML_PSTATE_8 = newpy.HLML_P_STATES.HLML_PSTATE_8
109
+ HLML_PSTATE_9 = newpy.HLML_P_STATES.HLML_PSTATE_9
110
+ HLML_PSTATE_10 = newpy.HLML_P_STATES.HLML_PSTATE_10
111
+ HLML_PSTATE_11 = newpy.HLML_P_STATES.HLML_PSTATE_11
112
+ HLML_PSTATE_12 = newpy.HLML_P_STATES.HLML_PSTATE_12
113
+ HLML_PSTATE_13 = newpy.HLML_P_STATES.HLML_PSTATE_13
114
+ HLML_PSTATE_14 = newpy.HLML_P_STATES.HLML_PSTATE_14
115
+ HLML_PSTATE_15 = newpy.HLML_P_STATES.HLML_PSTATE_15
116
+ HLML_PSTATE_SENTINEL = newpy.HLML_P_STATES.HLML_PSTATE_SENTINEL
117
+ HLML_PSTATE_UNKNOWN = newpy.HLML_P_STATES.HLML_PSTATE_UNKNOWN
118
+
119
+ HLML_PSTATE_NUM_SUPPORTED = newpy.HLML_P_STATES.HLML_PSTATE_SENTINEL
120
+
121
+ class HLML_MEMORY_ERROR:
122
+ TYPE = ctypes.c_uint
123
+ HLML_MEMORY_ERROR_TYPE_CORRECTED = newpy.HLML_MEMORY_ERROR_TYPE.HLML_MEMORY_ERROR_TYPE_CORRECTED
124
+ HLML_MEMORY_ERROR_TYPE_UNCORRECTED = newpy.HLML_MEMORY_ERROR_TYPE.HLML_MEMORY_ERROR_TYPE_UNCORRECTED
125
+ HLML_MEMORY_ERROR_TYPE_COUNT = newpy.HLML_MEMORY_ERROR_TYPE.HLML_MEMORY_ERROR_TYPE_COUNT
126
+
127
+ class HLML_MEMORY_LOCATION:
128
+ TYPE = ctypes.c_uint
129
+ HLML_MEMORY_LOCATION_SRAM = newpy.HLML_MEMORY_LOCATION_TYPE.HLML_MEMORY_LOCATION_SRAM
130
+ HLML_MEMORY_LOCATION_DRAM = newpy.HLML_MEMORY_LOCATION_TYPE.HLML_MEMORY_LOCATION_DRAM
131
+ HLML_MEMORY_LOCATION_ALL = newpy.HLML_MEMORY_LOCATION_TYPE.HLML_MEMORY_LOCATION_ALL
132
+ HLML_MEMORY_LOCATION_COUNT = newpy.HLML_MEMORY_LOCATION_TYPE.HLML_MEMORY_LOCATION_COUNT
133
+
134
+ class HLML_ECC_COUNTER:
135
+ TYPE = ctypes.c_uint
136
+ HLML_VOLATILE_ECC = newpy.HLML_ECC_COUNTER_TYPE.HLML_VOLATILE_ECC
137
+ HLML_AGGREGATE_ECC = newpy.HLML_ECC_COUNTER_TYPE.HLML_AGGREGATE_ECC
138
+ HLML_ECC_COUNTER_TYPE_COUNT = newpy.HLML_ECC_COUNTER_TYPE.HLML_ECC_COUNTER_TYPE_COUNT
139
+
140
+ class HLML_PCIE_UTIL_COUNTER:
141
+ TYPE = ctypes.c_uint
142
+ HLML_PCIE_UTIL_TX_BYTES = newpy.HLML_PCIE_UTIL_COUNTER.HLML_PCIE_UTIL_TX_BYTES
143
+ HLML_PCIE_UTIL_RX_BYTES = newpy.HLML_PCIE_UTIL_COUNTER.HLML_PCIE_UTIL_RX_BYTES
144
+ HLML_PCIE_UTIL_COUNT = newpy.HLML_PCIE_UTIL_COUNTER.HLML_PCIE_UTIL_COUNT
145
+
146
+ class HLML_EVENT_SET:
147
+ TYPE = ctypes.c_void_p
148
+
149
+ class HLML_ROW_REPLACEMENT_CAUSE:
150
+ TYPE = ctypes.c_uint
151
+ HLML_ROW_REPLACEMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS = newpy.HLML_ROW_REPLACEMENT_CAUSE.HLML_ROW_REPLACEMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS
152
+ HLML_ROW_REPLACEMENT_CAUSE_DOUBLE_BIT_ECC_ERROR = newpy.HLML_ROW_REPLACEMENT_CAUSE.HLML_ROW_REPLACEMENT_CAUSE_DOUBLE_BIT_ECC_ERROR
153
+ HLML_ROW_REPLACEMENT_CAUSE_COUNT = newpy.HLML_ROW_REPLACEMENT_CAUSE.HLML_ROW_REPLACEMENT_CAUSE_COUNT
154
+
155
+ class HLML_PERF_POLICY:
156
+ TYPE = ctypes.c_uint
157
+ HLML_PERF_POLICY_POWER = newpy.HLML_PERF_POLICY_TYPE.HLML_PERF_POLICY_POWER
158
+ HLML_PERF_POLICY_THERMAL = newpy.HLML_PERF_POLICY_TYPE.HLML_PERF_POLICY_THERMAL
159
+ HLML_PERF_POLICY_COUNT = newpy.HLML_PERF_POLICY_TYPE.HLML_PERF_POLICY_COUNT
160
+
161
+ # Legacy
162
+ class _struct_c_hlml_unit(ctypes.Structure):
163
+ pass # opaque handle
164
+
165
+ # Legacy
166
+ class HLML_UNIT:
167
+ TYPE = _struct_c_hlml_unit
168
+
169
+ class _PrintS(ctypes.Structure):
170
+ """
171
+ Produces nicer __str__ output than ctypes.Structure.
172
+
173
+ e.g. instead of:
174
+
175
+ > print str(obj)
176
+ <class_name object at 0x7fdf82fef9e0>
177
+
178
+ this class will print...
179
+
180
+ > print str(obj)
181
+ class_name(field_name: formatted_value, field_name: formatted_value)
182
+ _fmt_ dictionary of <str _field_ name> -> <str format>
183
+
184
+ Default formatting string for all fields can be set with key "<default>" like:
185
+ _fmt_ = {"<default>" : "%d MHz"} # e.g all values are numbers in MHz.
186
+
187
+ If not set it's assumed to be just "%s"
188
+
189
+ e.g. class that has _field_ 'hex_value', c_uint could be formatted with
190
+ _fmt_ = {"hex_value" : "%08X"}
191
+ to produce nicer output.
192
+ """
193
+ _fmt_ = {}
194
+ def __str__(self):
195
+ result = []
196
+ for x in self._fields_:
197
+ key = x[0]
198
+ value = getattr(self, key)
199
+ fmt = "%s"
200
+ if key in self._fmt_:
201
+ fmt = self._fmt_[key]
202
+ elif "<default>" in self._fmt_:
203
+ fmt = self._fmt_["<default>"]
204
+ result.append(("%s: " + fmt) % (key, value))
205
+ return self.__class__.__name__ + "(" + ", ".join(result) + ")"
206
+
207
+ class c_hlml_pci_cap(_PrintS):
208
+ _fields_ = newpy.c_hlml_pci_cap._fields_
209
+
210
+ class c_hlml_pci_info(_PrintS):
211
+ _fields_ = newpy.c_hlml_pci_info._fields_
212
+
213
+ class c_hlml_utilization(_PrintS):
214
+ _fields_ = newpy.c_hlml_utilization._fields_
215
+
216
+ class c_hlml_process_utilization(_PrintS):
217
+ _fields_ = newpy.c_hlml_process_utilization_sample._fields_
218
+
219
+ class c_hlml_memory(_PrintS):
220
+ _fields_ = newpy.c_hlml_memory._fields_
221
+
222
+ class c_hlml_pcb_info(_PrintS):
223
+ _fields_ = newpy.c_hlml_pcb_info._fields_
224
+
225
+ class c_hlml_event_data(_PrintS):
226
+ _fields_ = newpy.c_hlml_event_data._fields_
227
+
228
+ class c_hlml_mac_info(_PrintS):
229
+ _fields_ = newpy.c_hlml_mac_info._fields_
230
+
231
+ class c_hlml_nic_stats_info(_PrintS):
232
+ _fields_ = newpy.c_hlml_nic_stats_info._fields_
233
+
234
+ def __init__(self, port: int, num_of_counters: int = None):
235
+ num_of_counters = num_of_counters or COMMON_DEFINE.HABANA_LINK_CNT_MAX_NUM
236
+ self.port = port
237
+
238
+ str_buf_size = num_of_counters * 32
239
+ self.str_buf = ctypes.cast(ctypes.create_string_buffer(str_buf_size), ctypes.POINTER(ctypes.c_char))
240
+
241
+ val_buf_size = num_of_counters * ctypes.sizeof(ctypes.c_uint64)
242
+ self.val_buf = (ctypes.c_uint64 * val_buf_size)()
243
+
244
+ self.num_of_counters_out = (ctypes.c_uint32 * 1)()
245
+
246
+ class c_hlml_violation_time(_PrintS):
247
+ _fields_ = newpy.c_hlml_violation_time._fields_
248
+
249
+ class c_hlml_row_address(_PrintS):
250
+ _fields_ = newpy.c_hlml_row_address._fields_
251
+
252
+ # Legacy
253
+ class hlml_ecc_mode(_PrintS):
254
+ _fields_ = [("current", ctypes.c_uint),
255
+ ("pending", ctypes.c_uint)
256
+ ]
257
+
258
+ ## Alternative object
259
+ # Allows the object to be printed
260
+ # Allows mismatched types to be assigned
261
+ # - like None when the Structure variant requires c_uint
262
+
263
+ class hlml_friendly_obj(object):
264
+ def __init__(self, dic):
265
+ for x in dic:
266
+ setattr(self, x, dic[x])
267
+ def __str__(self):
268
+ return self.__dict__.__str__()
269
+
270
+ def hlml_struct_to_friendly(struct):
271
+ dic = {}
272
+ for x in struct._fields_:
273
+ key = x[0]
274
+ value = getattr(struct, key)
275
+ dic[key] = value
276
+ obj = hlml_friendly_obj(dic)
277
+ return obj
278
+
279
+ def hlml_friendly_to_struct(obj, model):
280
+ for x in model._fields_:
281
+ key = x[0]
282
+ value = obj.__dict__[key]
283
+ setattr(model, key, value)
284
+ return model