da4ml 0.1.0__py3-none-any.whl → 0.1.2__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.

Potentially problematic release.


This version of da4ml might be problematic. Click here for more details.

da4ml/_version.py CHANGED
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '0.1.0'
16
- __version_tuple__ = version_tuple = (0, 1, 0)
20
+ __version__ = version = '0.1.2'
21
+ __version_tuple__ = version_tuple = (0, 1, 2)
da4ml/cmvm/__init__.py CHANGED
@@ -24,7 +24,7 @@ _ = fn_from_kernel(
24
24
  symmetrics=symmetrics,
25
25
  depths=depths,
26
26
  n_beams=1,
27
- dc=0,
27
+ dc=None,
28
28
  n_inp_max=-1,
29
29
  n_out_max=-1,
30
30
  codegen_backend=PyCodegenBackend(),
da4ml/cmvm/api.py CHANGED
@@ -45,7 +45,7 @@ def fn_from_kernel(
45
45
  n_beams : int, optional
46
46
  Number of beams to use in beam search. Defaults to 1. (Currently disabled!)
47
47
  dc : int | None, optional
48
- Delay constraint. Not implemented yet. Defaults to None.
48
+ Delay constraint. Not (properly) implemented yet. Defaults to None.
49
49
  n_inp_max : int, optional
50
50
  Number of inputs to process in one block. Defaults to -1 (no limit). Decrease to improve performance, but result will be less optimal.
51
51
  n_out_max : int, optional
da4ml/cmvm/cmvm.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import heapq
2
+ from collections.abc import Sequence
2
3
  from math import ceil
3
4
 
4
5
  import numpy as np
@@ -22,16 +23,6 @@ def extract_pairs(
22
23
  _stat = np.zeros((d_in, d_in, n_bit, 2), dtype=np.int64)
23
24
  process_locs = np.zeros((d_in, d_out), dtype=np.bool_)
24
25
 
25
- if dc is not None:
26
- depths = np.zeros(d_in, dtype=np.int64)
27
- for pos in range(d_in):
28
- depths[pos] = precisions[pos]._depth
29
- depth_min = np.min(depths)
30
- mask = depths <= depth_min + dc
31
- if np.count_nonzero(mask) >= 2:
32
- for n in range(d_out):
33
- process_locs[:, n] = mask
34
-
35
26
  if updated is not None:
36
27
  for i in range(len(updated)):
37
28
  pos = updated[i]
@@ -43,6 +34,16 @@ def extract_pairs(
43
34
  if np.any(csd[pos][n]) and precisions[pos].b != 0:
44
35
  process_locs[pos, n] = True
45
36
 
37
+ if dc is not None:
38
+ depths = np.zeros(d_in, dtype=np.int64)
39
+ for pos in range(d_in):
40
+ depths[pos] = precisions[pos]._depth
41
+ depth_min = np.min(depths)
42
+ mask = depths <= depth_min + dc
43
+ if np.count_nonzero(mask) >= 2:
44
+ for n in range(d_out):
45
+ process_locs[:, n] &= mask
46
+
46
47
  args: list[tuple[int, int, int]] = []
47
48
  for pos0 in range(d_in):
48
49
  for pos1 in range(d_in):
@@ -100,11 +101,11 @@ def init_var(
100
101
 
101
102
  @njit
102
103
  def init_vars(
103
- ks: list[bool],
104
- bs: list[int],
105
- is_: list[int],
106
- symmetrics: list[bool],
107
- depths: list[int],
104
+ ks: tuple[bool, ...],
105
+ bs: tuple[int, ...],
106
+ is_: tuple[int, ...],
107
+ symmetrics: tuple[bool, ...],
108
+ depths: tuple[int, ...],
108
109
  ):
109
110
  n = len(ks)
110
111
  vars_ = []
@@ -116,11 +117,11 @@ def init_vars(
116
117
  @njit
117
118
  def init_state(
118
119
  kernel: np.ndarray,
119
- signs: list[bool],
120
- bits: list[int],
121
- int_bits: list[int],
122
- symmetrics: list[bool],
123
- depths: list[int],
120
+ signs: tuple[bool, ...],
121
+ bits: tuple[int, ...],
122
+ int_bits: tuple[int, ...],
123
+ symmetrics: tuple[bool, ...],
124
+ depths: tuple[int, ...],
124
125
  ):
125
126
  assert kernel.ndim == 2
126
127
  assert len(signs) == len(bits) == len(int_bits) == len(symmetrics) == len(depths) == kernel.shape[0]
@@ -261,11 +262,11 @@ def cmvm_cse(state: DAState, progress=None, beams: int = 1, dc=None):
261
262
  @njit
262
263
  def compile_kernel_mono(
263
264
  kernel: np.ndarray,
264
- signs: list[bool],
265
- bits: list[int],
266
- int_bits: list[int],
267
- symmetrics: list[bool],
268
- depths: list[int],
265
+ signs: tuple[bool, ...],
266
+ bits: tuple[int, ...],
267
+ int_bits: tuple[int, ...],
268
+ symmetrics: tuple[bool, ...],
269
+ depths: tuple[int, ...],
269
270
  n_beams: int = 1,
270
271
  dc: int | None = None,
271
272
  ):
@@ -274,14 +275,13 @@ def compile_kernel_mono(
274
275
  return _state
275
276
 
276
277
 
277
- # @njit(cache=True)
278
278
  def compile_kernel(
279
279
  kernel: np.ndarray,
280
- signs: list[bool],
281
- bits: list[int],
282
- int_bits: list[int],
283
- symmetrics: list[bool],
284
- depths: list[int],
280
+ signs: Sequence[bool],
281
+ bits: Sequence[int],
282
+ int_bits: Sequence[int],
283
+ symmetrics: Sequence[bool],
284
+ depths: Sequence[int],
285
285
  n_beams: int = 1,
286
286
  dc: int | None = None,
287
287
  n_inp_max: int = -1,
@@ -315,11 +315,11 @@ def compile_kernel(
315
315
 
316
316
  # unify input type to prevent recompilation
317
317
  _kernel = np.ascontiguousarray(_kernel)
318
- _signs = [bool(v) for v in _signs]
319
- _bits = [int(v) for v in _bits]
320
- _int_bits = [int(v) for v in _int_bits]
321
- _symmetrics = [bool(v) for v in _symmetrics]
322
- _depths = [int(v) for v in _depths]
318
+ _signs = tuple(bool(v) for v in _signs)
319
+ _bits = tuple(int(v) for v in _bits)
320
+ _int_bits = tuple(int(v) for v in _int_bits)
321
+ _symmetrics = tuple(bool(v) for v in _symmetrics)
322
+ _depths = tuple(int(v) for v in _depths)
323
323
  try:
324
324
  states[i][j] = compile_kernel_mono(_kernel, _signs, _bits, _int_bits, _symmetrics, _depths, n_beams, dc)
325
325
  except AssertionError:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: da4ml
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Digital Arithmetic for Machine Learning
5
5
  Author-email: Chang Sun <chsun@cern.ch>
6
6
  License: GNU Lesser General Public License v3 (LGPLv3)
@@ -17,6 +17,9 @@ Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Python: >=3.10
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
+ Requires-Dist: llvmlite>=0.43
21
+ Requires-Dist: numba>=0.60
22
+ Dynamic: license-file
20
23
 
21
24
  # da4ml: Distributed Arithmetic for Machine Learning
22
25
 
@@ -1,9 +1,9 @@
1
1
  da4ml/__init__.py,sha256=kkpf91aU4n9MMsX63Me90mo_0JSQyU3N-vhgTIrjkT0,437
2
- da4ml/_version.py,sha256=IMl2Pr_Sy4LVRKy_Sm4CdwUl1Gryous6ncL96EMYsnM,411
3
- da4ml/cmvm/__init__.py,sha256=fgeQr2Tbg4rqEix3OJwm5z0o6WJxkvLCkqJKcjBxBSI,845
4
- da4ml/cmvm/api.py,sha256=jA1PBkZqi12Wa8G7V3dIyGzuNePdCpf9juJoOb-dutM,3450
2
+ da4ml/_version.py,sha256=bSmADqydH8nBu-J4lG8UVuR7hnU_zcwhnSav2oQ0W0A,511
3
+ da4ml/cmvm/__init__.py,sha256=UUnJxtZGQpqVWKT_djuPr7CqyiWlUrmKoyAvH7f4-q8,848
4
+ da4ml/cmvm/api.py,sha256=G7YZ1n32EaYzsahSUwB-0vvRZt1Q11idShhn735vDCM,3461
5
5
  da4ml/cmvm/balanced_reduction.py,sha256=fDKaRIY4WkRo3s5dGWeWmylDgjMD-hr1-tpdwu7EL6Y,1533
6
- da4ml/cmvm/cmvm.py,sha256=s2hMPaDPk_1bjmoPnnjjnMXmxvlSZUoiubDQpMc8wyE,10536
6
+ da4ml/cmvm/cmvm.py,sha256=4RN6sKLNxybHZcBoUkw4MBluLZoEhAArutt8BE5NCNE,10689
7
7
  da4ml/cmvm/codegen.py,sha256=w_1xR36Oxwb-1XivFwjQ_n2uRw-abjwzjOhwARg_93k,6088
8
8
  da4ml/cmvm/csd.py,sha256=k-9k0CigqnvyrgtXzBvKLZ32FdwWUE_EhAlXkK6Mlxk,1988
9
9
  da4ml/cmvm/fixed_variable.py,sha256=APPT2EN7hOwjHIaD5JdOpd7riGUpmtXUJ6QaAnE1cjw,5753
@@ -11,8 +11,8 @@ da4ml/cmvm/graph_compile.py,sha256=bODuY7DAi-9L-ZleAzK0szZDrEH4Ljq2ocINUHXD588,3
11
11
  da4ml/cmvm/nb_fixed_precision.py,sha256=M2bnflNNOGLgUsI0QGlF2noT5ZJD-2bU2dZ3lw8GZvM,2457
12
12
  da4ml/cmvm/scoring.py,sha256=EUREpoyQHUe-vpRat_JjRD73uQhD0dOhnG2D3opazwQ,1375
13
13
  da4ml/cmvm/utils.py,sha256=Svp82TOtpNOtKfXlCkijq7DBSbMEqyWoY2PAYVhXXQY,288
14
- da4ml-0.1.0.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
15
- da4ml-0.1.0.dist-info/METADATA,sha256=r6-o6o3W3Qr8IXjj1roJNWeLGghIuhdxBC6aKHqIUdo,5428
16
- da4ml-0.1.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
17
- da4ml-0.1.0.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
18
- da4ml-0.1.0.dist-info/RECORD,,
14
+ da4ml-0.1.2.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
15
+ da4ml-0.1.2.dist-info/METADATA,sha256=YirD1SJdRbYNKdbY68TWtacjfs-bUrcWIbQBdoIIaYw,5507
16
+ da4ml-0.1.2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
17
+ da4ml-0.1.2.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
18
+ da4ml-0.1.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5