depthtensor 2.4.0__tar.gz → 2.4.2__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 (26) hide show
  1. {depthtensor-2.4.0 → depthtensor-2.4.2}/PKG-INFO +5 -5
  2. {depthtensor-2.4.0 → depthtensor-2.4.2}/README.md +4 -4
  3. {depthtensor-2.4.0 → depthtensor-2.4.2}/pyproject.toml +3 -3
  4. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/__init__.py +1 -1
  5. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/comparison.py +67 -67
  6. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/creation.py +24 -26
  7. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/diff.py +63 -48
  8. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/elementwise.py +160 -152
  9. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/reduction.py +32 -32
  10. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/random/generator.py +28 -26
  11. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/utils.py +31 -46
  12. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/autodiff.py +5 -7
  13. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/tensor.py +87 -99
  14. depthtensor-2.4.2/src/DepthTensor/typing.py +95 -0
  15. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/depthtensor.egg-info/PKG-INFO +5 -5
  16. depthtensor-2.4.0/src/DepthTensor/typing.py +0 -121
  17. {depthtensor-2.4.0 → depthtensor-2.4.2}/LICENSE +0 -0
  18. {depthtensor-2.4.0 → depthtensor-2.4.2}/setup.cfg +0 -0
  19. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/__init__.py +0 -0
  20. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/exceptions.py +0 -0
  21. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/ops/__init__.py +0 -0
  22. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/DepthTensor/_core/random/__init__.py +0 -0
  23. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/depthtensor.egg-info/SOURCES.txt +0 -0
  24. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/depthtensor.egg-info/dependency_links.txt +0 -0
  25. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/depthtensor.egg-info/requires.txt +0 -0
  26. {depthtensor-2.4.0 → depthtensor-2.4.2}/src/depthtensor.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: depthtensor
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: A Hardware-Accelerated Tensor Computation and Autograd Engine
5
5
  Author-email: Le Hong Ha <lehahong1310@gmail.com>
6
6
  License: MIT License
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
 
41
41
  # DepthTensor: A Hardware-Accelerated Tensor Computation and Autograd Engine
42
42
 
43
- **DepthTensor** is a light-weight, high-performance library for reverse-mode automatic differentiation (AD). It is useful in building the mathematical foundation of deep learning frameworks, with the use of a `Tensor` object which dynamically builds computational graphs and computes gradients using **Vector-Jacobian Products (VJP)**, generalized for tensors of abritrary rank.
43
+ **DepthTensor** is a light-weight, high-performance library for reverse-mode automatic differentiation (AD). It is useful in building the mathematical foundation of deep learning frameworks, with the use of a `Tensor` object which dynamically builds computational graphs and computes gradients using **Vector-Jacobian Products (VJP)**, generalized for tensors of arbitrary rank.
44
44
 
45
45
  > **Note**: This is the core autograd and tensor computation engine. For the full deep learning framework, refer to [DepthML](https://github.com/l-h-ha/DepthML).
46
46
 
@@ -82,7 +82,7 @@ All gradients are aggregated from all gradient downstreams.
82
82
 
83
83
  ## 2. Architecture and System Design
84
84
 
85
- ### 2.1. The differentiable Primitive (`Tensor`)
85
+ ### 2.1. The Differentiable Primitive (`Tensor`)
86
86
 
87
87
  The `Tensor` class acts like a node in the Directed Acyclic Graph (DAG).
88
88
 
@@ -109,13 +109,13 @@ a, b = dt.Tensor([1], device="gpu"), dt.Tensor(
109
109
  [100], device="gpu"
110
110
  )
111
111
 
112
- # 2. Optimization Loop
112
+ # Optimization Loop
113
113
  lr = 0.001
114
114
  for i in range(500):
115
115
  # Rosenbrock: f(x,y) = (a-x)^2 + b(y-x^2)^2
116
116
  loss = (a - x) ** 2 + b * (y - x**2) ** 2
117
117
 
118
- # Backpward pass
118
+ # Backward pass
119
119
  dt.differentiate(loss)
120
120
 
121
121
  # Gradient Descent
@@ -1,6 +1,6 @@
1
1
  # DepthTensor: A Hardware-Accelerated Tensor Computation and Autograd Engine
2
2
 
3
- **DepthTensor** is a light-weight, high-performance library for reverse-mode automatic differentiation (AD). It is useful in building the mathematical foundation of deep learning frameworks, with the use of a `Tensor` object which dynamically builds computational graphs and computes gradients using **Vector-Jacobian Products (VJP)**, generalized for tensors of abritrary rank.
3
+ **DepthTensor** is a light-weight, high-performance library for reverse-mode automatic differentiation (AD). It is useful in building the mathematical foundation of deep learning frameworks, with the use of a `Tensor` object which dynamically builds computational graphs and computes gradients using **Vector-Jacobian Products (VJP)**, generalized for tensors of arbitrary rank.
4
4
 
5
5
  > **Note**: This is the core autograd and tensor computation engine. For the full deep learning framework, refer to [DepthML](https://github.com/l-h-ha/DepthML).
6
6
 
@@ -42,7 +42,7 @@ All gradients are aggregated from all gradient downstreams.
42
42
 
43
43
  ## 2. Architecture and System Design
44
44
 
45
- ### 2.1. The differentiable Primitive (`Tensor`)
45
+ ### 2.1. The Differentiable Primitive (`Tensor`)
46
46
 
47
47
  The `Tensor` class acts like a node in the Directed Acyclic Graph (DAG).
48
48
 
@@ -69,13 +69,13 @@ a, b = dt.Tensor([1], device="gpu"), dt.Tensor(
69
69
  [100], device="gpu"
70
70
  )
71
71
 
72
- # 2. Optimization Loop
72
+ # Optimization Loop
73
73
  lr = 0.001
74
74
  for i in range(500):
75
75
  # Rosenbrock: f(x,y) = (a-x)^2 + b(y-x^2)^2
76
76
  loss = (a - x) ** 2 + b * (y - x**2) ** 2
77
77
 
78
- # Backpward pass
78
+ # Backward pass
79
79
  dt.differentiate(loss)
80
80
 
81
81
  # Gradient Descent
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "depthtensor"
7
- version = "2.4.0"
7
+ version = "2.4.2"
8
8
  description = "A Hardware-Accelerated Tensor Computation and Autograd Engine"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -13,8 +13,8 @@ authors = [
13
13
  license = { file = "LICENSE" }
14
14
  classifiers = [
15
15
  "Programming Language :: Python :: 3",
16
- "Topic :: Scientific/Engineering :: Artificial Intelligence", # Fixed
17
- "License :: OSI Approved :: MIT License", # Fixed
16
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
17
+ "License :: OSI Approved :: MIT License",
18
18
  "Operating System :: OS Independent"
19
19
  ]
20
20
  requires-python = ">=3.8"
@@ -6,4 +6,4 @@ from ._core.ops import *
6
6
  from ._core.exceptions import *
7
7
  from ._core import random
8
8
 
9
- __version__ = "2.4.0"
9
+ __version__ = "2.4.2"
@@ -1,12 +1,12 @@
1
- from typing import Union, Optional, Tuple, overload
1
+ from typing import overload, Union, Tuple
2
2
 
3
3
  from ...typing import (
4
- TensorLike,
5
- DeviceLike,
6
- NDArrayLikeBool,
4
+ TensorType,
5
+ Device,
6
+ TensorDataBool,
7
7
  Casting,
8
8
  Order,
9
- OperandLike,
9
+ TensorLike,
10
10
  )
11
11
 
12
12
  from ..exceptions import (
@@ -16,7 +16,7 @@ from ..exceptions import (
16
16
  DEVICE_MISMATCH_MSG,
17
17
  )
18
18
 
19
- from ..utils import to_xp_array, get_device, get_two_operand_op_device
19
+ from ..utils import to_tensordata, get_device, get_two_operand_op_device
20
20
 
21
21
  import numpy as np
22
22
 
@@ -32,35 +32,35 @@ except (ImportError, ModuleNotFoundError):
32
32
 
33
33
  @overload
34
34
  def where(
35
- condition: OperandLike,
35
+ condition: TensorLike,
36
36
  /,
37
37
  *,
38
- device: DeviceLike = "cpu",
38
+ device: Device = "cpu",
39
39
  requires_grad: bool = False,
40
- ) -> Tuple[TensorLike, ...]: ...
40
+ ) -> Tuple[TensorType, ...]: ...
41
41
 
42
42
 
43
43
  @overload
44
44
  def where(
45
- condition: OperandLike,
46
- x: Optional[OperandLike],
47
- y: Optional[OperandLike],
45
+ condition: TensorLike,
46
+ x: TensorLike | None,
47
+ y: TensorLike | None,
48
48
  /,
49
49
  *,
50
- device: DeviceLike = "cpu",
50
+ device: Device = "cpu",
51
51
  requires_grad: bool = False,
52
- ) -> TensorLike: ...
52
+ ) -> TensorType: ...
53
53
 
54
54
 
55
55
  def where(
56
- condition: OperandLike,
57
- x: Optional[OperandLike] = None,
58
- y: Optional[OperandLike] = None,
56
+ condition: TensorLike,
57
+ x: TensorLike | None = None,
58
+ y: TensorLike | None = None,
59
59
  /,
60
60
  *,
61
- device: Optional[DeviceLike] = None,
61
+ device: Device | None = None,
62
62
  requires_grad: bool = False,
63
- ) -> Union[Tuple[TensorLike, ...], TensorLike]:
63
+ ) -> Union[tuple[TensorType, ...], TensorType]:
64
64
  from ...tensor import Tensor
65
65
 
66
66
  if device is None:
@@ -68,9 +68,9 @@ def where(
68
68
 
69
69
  # * One parameter overload
70
70
  if (x is None) and (y is None):
71
- data = to_xp_array(condition, device=device)
71
+ data = to_tensordata(condition, device=device)
72
72
  if device == "cpu":
73
- result = np.where(data)
73
+ result = np.where(data) # type: ignore
74
74
  else:
75
75
  if cp is None:
76
76
  raise CuPyNotFound(CUPY_NOT_FOUND_MSG)
@@ -85,9 +85,9 @@ def where(
85
85
  ):
86
86
  raise DeviceMismatch(DEVICE_MISMATCH_MSG)
87
87
 
88
- data = to_xp_array(condition, device=device)
89
- x_data = to_xp_array(x, device=device)
90
- y_data = to_xp_array(y, device=device)
88
+ data = to_tensordata(condition, device=device)
89
+ x_data = to_tensordata(x, device=device)
90
+ y_data = to_tensordata(y, device=device)
91
91
  if device == "cpu":
92
92
  result = np.where(data, x_data, y_data)
93
93
  else:
@@ -105,24 +105,24 @@ def where(
105
105
 
106
106
 
107
107
  def wrapper_2in_1out(
108
- x1: OperandLike,
109
- x2: OperandLike,
108
+ x1: TensorLike,
109
+ x2: TensorLike,
110
110
  /,
111
- out: Optional[NDArrayLikeBool] = None,
111
+ out: TensorDataBool | None = None,
112
112
  *,
113
113
  func_name: str,
114
- device: Optional[DeviceLike] = None,
115
- where: Union[bool, NDArrayLikeBool] = True,
114
+ device: Device | None = None,
115
+ where: TensorDataBool | bool = True,
116
116
  casting: Casting = "same_kind",
117
117
  order: Order = "K",
118
118
  dtype: None = None,
119
119
  subok: bool = True,
120
- ) -> TensorLike:
120
+ ) -> TensorType:
121
121
  from ...tensor import Tensor
122
122
 
123
123
  op_device = get_two_operand_op_device(x1, x2, device)
124
124
 
125
- x1, x2 = to_xp_array(x1, device=op_device), to_xp_array(x2, device=op_device)
125
+ x1, x2 = to_tensordata(x1, device=op_device), to_tensordata(x2, device=op_device)
126
126
  if op_device == "cpu":
127
127
  y = getattr(np, func_name)(
128
128
  x1,
@@ -142,18 +142,18 @@ def wrapper_2in_1out(
142
142
 
143
143
 
144
144
  def equal(
145
- x1: OperandLike,
146
- x2: OperandLike,
145
+ x1: TensorLike,
146
+ x2: TensorLike,
147
147
  /,
148
- out: Optional[NDArrayLikeBool] = None,
148
+ out: TensorDataBool | None = None,
149
149
  *,
150
- device: Optional[DeviceLike] = None,
151
- where: Union[bool, NDArrayLikeBool] = True,
150
+ device: Device | None = None,
151
+ where: TensorDataBool | bool = True,
152
152
  casting: Casting = "same_kind",
153
153
  order: Order = "K",
154
154
  dtype: None = None,
155
155
  subok: bool = True,
156
- ) -> TensorLike:
156
+ ) -> TensorType:
157
157
  return wrapper_2in_1out(
158
158
  x1,
159
159
  x2,
@@ -169,18 +169,18 @@ def equal(
169
169
 
170
170
 
171
171
  def not_equal(
172
- x1: OperandLike,
173
- x2: OperandLike,
172
+ x1: TensorLike,
173
+ x2: TensorLike,
174
174
  /,
175
- out: Optional[NDArrayLikeBool] = None,
175
+ out: TensorDataBool | None = None,
176
176
  *,
177
- device: Optional[DeviceLike] = None,
178
- where: Union[bool, NDArrayLikeBool] = True,
177
+ device: Device | None = None,
178
+ where: TensorDataBool | bool = True,
179
179
  casting: Casting = "same_kind",
180
180
  order: Order = "K",
181
181
  dtype: None = None,
182
182
  subok: bool = True,
183
- ) -> TensorLike:
183
+ ) -> TensorType:
184
184
  return wrapper_2in_1out(
185
185
  x1,
186
186
  x2,
@@ -196,18 +196,18 @@ def not_equal(
196
196
 
197
197
 
198
198
  def greater(
199
- x1: OperandLike,
200
- x2: OperandLike,
199
+ x1: TensorLike,
200
+ x2: TensorLike,
201
201
  /,
202
- out: Optional[NDArrayLikeBool] = None,
202
+ out: TensorDataBool | None = None,
203
203
  *,
204
- device: Optional[DeviceLike] = None,
205
- where: Union[bool, NDArrayLikeBool] = True,
204
+ device: Device | None = None,
205
+ where: TensorDataBool | bool = True,
206
206
  casting: Casting = "same_kind",
207
207
  order: Order = "K",
208
208
  dtype: None = None,
209
209
  subok: bool = True,
210
- ) -> TensorLike:
210
+ ) -> TensorType:
211
211
  return wrapper_2in_1out(
212
212
  x1,
213
213
  x2,
@@ -223,18 +223,18 @@ def greater(
223
223
 
224
224
 
225
225
  def greater_equal(
226
- x1: OperandLike,
227
- x2: OperandLike,
226
+ x1: TensorLike,
227
+ x2: TensorLike,
228
228
  /,
229
- out: Optional[NDArrayLikeBool] = None,
229
+ out: TensorDataBool | None = None,
230
230
  *,
231
- device: Optional[DeviceLike] = None,
232
- where: Union[bool, NDArrayLikeBool] = True,
231
+ device: Device | None = None,
232
+ where: TensorDataBool | bool = True,
233
233
  casting: Casting = "same_kind",
234
234
  order: Order = "K",
235
235
  dtype: None = None,
236
236
  subok: bool = True,
237
- ) -> TensorLike:
237
+ ) -> TensorType:
238
238
  return wrapper_2in_1out(
239
239
  x1,
240
240
  x2,
@@ -250,18 +250,18 @@ def greater_equal(
250
250
 
251
251
 
252
252
  def less(
253
- x1: OperandLike,
254
- x2: OperandLike,
253
+ x1: TensorLike,
254
+ x2: TensorLike,
255
255
  /,
256
- out: Optional[NDArrayLikeBool] = None,
256
+ out: TensorDataBool | None = None,
257
257
  *,
258
- device: Optional[DeviceLike] = None,
259
- where: Union[bool, NDArrayLikeBool] = True,
258
+ device: Device | None = None,
259
+ where: TensorDataBool | bool = True,
260
260
  casting: Casting = "same_kind",
261
261
  order: Order = "K",
262
262
  dtype: None = None,
263
263
  subok: bool = True,
264
- ) -> TensorLike:
264
+ ) -> TensorType:
265
265
  return wrapper_2in_1out(
266
266
  x1,
267
267
  x2,
@@ -277,18 +277,18 @@ def less(
277
277
 
278
278
 
279
279
  def less_equal(
280
- x1: OperandLike,
281
- x2: OperandLike,
280
+ x1: TensorLike,
281
+ x2: TensorLike,
282
282
  /,
283
- out: Optional[NDArrayLikeBool] = None,
283
+ out: TensorDataBool | None = None,
284
284
  *,
285
- device: Optional[DeviceLike] = None,
286
- where: Union[bool, NDArrayLikeBool] = True,
285
+ device: Device | None = None,
286
+ where: TensorDataBool | bool = True,
287
287
  casting: Casting = "same_kind",
288
288
  order: Order = "K",
289
289
  dtype: None = None,
290
290
  subok: bool = True,
291
- ) -> TensorLike:
291
+ ) -> TensorType:
292
292
  return wrapper_2in_1out(
293
293
  x1,
294
294
  x2,
@@ -1,19 +1,17 @@
1
- from typing import Optional, Literal, Union
1
+ from typing import Literal
2
2
 
3
3
  from ...typing import (
4
+ TensorType,
4
5
  TensorLike,
5
6
  DTypeLike,
6
7
  Order,
7
- AxisLike,
8
- OperandLike,
9
- DeviceLike,
10
- ShapeLike,
11
- NDArrayLike,
8
+ Axis,
9
+ Device,
10
+ Shape,
12
11
  )
13
12
 
14
13
  from ..exceptions import CuPyNotFound, CUPY_NOT_FOUND_MSG
15
-
16
- from ..utils import to_xp_array, get_device
14
+ from ..utils import to_tensordata, get_device
17
15
 
18
16
  import numpy as np
19
17
 
@@ -28,23 +26,23 @@ except (ImportError, ModuleNotFoundError):
28
26
 
29
27
 
30
28
  def zeros_like(
31
- a: OperandLike,
29
+ a: TensorLike,
32
30
  /,
33
31
  *,
34
- device: Optional[DeviceLike] = None,
32
+ device: Device | None = None,
35
33
  requires_grad: bool = False,
36
- dtype: Optional[DTypeLike] = None,
34
+ dtype: DTypeLike | None = None,
37
35
  order: Order = "K",
38
36
  subok: bool = True,
39
- shape: Optional[AxisLike] = None,
40
- ) -> TensorLike:
37
+ shape: Axis | None = None,
38
+ ) -> TensorType:
41
39
  from ...tensor import Tensor
42
40
 
43
41
  if device is None:
44
42
  device_op = get_device(a)
45
43
  else:
46
44
  device_op = device
47
- a = to_xp_array(a)
45
+ a = to_tensordata(a)
48
46
  if device_op == "cpu":
49
47
  y = np.zeros_like(a, dtype=dtype, order=order, subok=subok, shape=shape)
50
48
  else:
@@ -55,23 +53,23 @@ def zeros_like(
55
53
 
56
54
 
57
55
  def ones_like(
58
- a: OperandLike,
56
+ a: TensorLike,
59
57
  /,
60
58
  *,
61
- device: Optional[DeviceLike] = None,
59
+ device: Device | None = None,
62
60
  requires_grad: bool = False,
63
- dtype: Optional[DTypeLike] = None,
61
+ dtype: DTypeLike | None = None,
64
62
  order: Order = "K",
65
63
  subok: bool = True,
66
- shape: Optional[AxisLike] = None,
67
- ) -> TensorLike:
64
+ shape: Axis | None = None,
65
+ ) -> TensorType:
68
66
  from ...tensor import Tensor
69
67
 
70
68
  if device is None:
71
69
  device_op = get_device(a)
72
70
  else:
73
71
  device_op = device
74
- a = to_xp_array(a)
72
+ a = to_tensordata(a)
75
73
  if device_op == "cpu":
76
74
  y = np.ones_like(a, dtype=dtype, order=order, subok=subok, shape=shape)
77
75
  else:
@@ -82,13 +80,13 @@ def ones_like(
82
80
 
83
81
 
84
82
  def zeros(
85
- shape: ShapeLike,
83
+ shape: Shape,
86
84
  dtype: DTypeLike = float,
87
85
  order: Literal["C", "F"] = "C",
88
86
  *,
89
- device: DeviceLike = "cpu",
87
+ device: Device = "cpu",
90
88
  requires_grad: bool = False,
91
- ) -> TensorLike:
89
+ ) -> TensorType:
92
90
  from ...tensor import Tensor
93
91
 
94
92
  if device == "cpu":
@@ -101,13 +99,13 @@ def zeros(
101
99
 
102
100
 
103
101
  def ones(
104
- shape: ShapeLike,
102
+ shape: Shape,
105
103
  dtype: DTypeLike = float,
106
104
  order: Literal["C", "F"] = "C",
107
105
  *,
108
- device: DeviceLike = "cpu",
106
+ device: Device = "cpu",
109
107
  requires_grad: bool = False,
110
- ) -> TensorLike:
108
+ ) -> TensorType:
111
109
  from ...tensor import Tensor
112
110
 
113
111
  if device == "cpu":