Skip to content

Commit b7a235a

Browse files
committed
Organize python package and add example
1 parent e7e8c8f commit b7a235a

File tree

9 files changed

+192
-1
lines changed

9 files changed

+192
-1
lines changed

Pysrc/tensorium/__init__.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,26 @@
1-
from .tensorium import *
1+
"""Python interface to the Tensorium C++ bindings."""
2+
from __future__ import annotations
3+
4+
from . import tensorium as _C
5+
6+
from . import vectors
7+
from . import matrices
8+
from . import tensors
9+
10+
# Re-export commonly used classes
11+
Vector = vectors.Vector
12+
Vectord = vectors.Vectord
13+
Matrix = matrices.Matrix
14+
Tensor2d = tensors.Tensor2d
15+
Tensor4d = tensors.Tensor4d
16+
17+
__all__ = [
18+
"Vector",
19+
"Vectord",
20+
"Matrix",
21+
"Tensor2d",
22+
"Tensor4d",
23+
"vectors",
24+
"matrices",
25+
"tensors",
26+
]

Pysrc/tensorium/matrices.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from __future__ import annotations
2+
3+
from . import tensorium as _C
4+
5+
Matrix = _C.Matrix
6+
7+
8+
def add(a: Matrix, b: Matrix) -> Matrix:
9+
"""Add two matrices."""
10+
return _C.tns.add_mat(a, b)
11+
12+
13+
def sub(a: Matrix, b: Matrix) -> Matrix:
14+
"""Subtract matrix b from a."""
15+
return _C.tns.sub_mat(a, b)
16+
17+
18+
def mul(a: Matrix, b: Matrix) -> Matrix:
19+
"""Matrix multiplication."""
20+
return _C.tns.mul(a, b)
21+
22+
__all__ = ["Matrix", "add", "sub", "mul"]

Pysrc/tensorium/matrices.pyi

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from .tensorium import Matrix
2+
3+
4+
def add(a: Matrix, b: Matrix) -> Matrix: ...
5+
6+
def sub(a: Matrix, b: Matrix) -> Matrix: ...
7+
8+
def mul(a: Matrix, b: Matrix) -> Matrix: ...
9+
10+
__all__: list[str]

Pysrc/tensorium/tensorium.pyi

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from typing import List, Tuple
2+
3+
class Vector:
4+
def __init__(self, data: List[float]) -> None: ...
5+
def __len__(self) -> int: ...
6+
def __getitem__(self, idx: int) -> float: ...
7+
def print(self) -> None: ...
8+
9+
class Vectord(Vector):
10+
...
11+
12+
class Matrix:
13+
rows: int
14+
cols: int
15+
def __init__(self, rows: int, cols: int) -> None: ...
16+
def fill(self, values: List[List[float]]) -> None: ...
17+
def print(self) -> None: ...
18+
def __getitem__(self, idx: Tuple[int, int]) -> float: ...
19+
def __setitem__(self, idx: Tuple[int, int], val: float) -> None: ...
20+
21+
class tns:
22+
@staticmethod
23+
def add_vec(a: Vector, b: Vector) -> Vector: ...
24+
@staticmethod
25+
def sub_vec(a: Vector, b: Vector) -> Vector: ...
26+
@staticmethod
27+
def scl_vec(a: Vector, f: float) -> Vector: ...
28+
@staticmethod
29+
def dot_vec(a: Vector, b: Vector) -> float: ...
30+
@staticmethod
31+
def add_mat(a: Matrix, b: Matrix) -> Matrix: ...
32+
@staticmethod
33+
def sub_mat(a: Matrix, b: Matrix) -> Matrix: ...
34+
@staticmethod
35+
def mul(a: Matrix, b: Matrix) -> Matrix: ...
36+
37+
Tensor2d = None
38+
Tensor4d = None

Pysrc/tensorium/tensors.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from __future__ import annotations
2+
3+
from . import tensorium as _C
4+
5+
Tensor2d = _C.tns.Tensor2d
6+
Tensor4d = _C.tns.Tensor4d
7+
8+
9+
def contract(t: Tensor4d, i: int, j: int):
10+
"""Contract a rank-4 tensor along axes (i, j)."""
11+
return _C.tns.contract_tensor(t, i, j)
12+
13+
__all__ = [
14+
"Tensor2d",
15+
"Tensor4d",
16+
"contract",
17+
]

Pysrc/tensorium/tensors.pyi

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from .tensorium import tns
2+
3+
Tensor2d = tns.Tensor2d
4+
Tensor4d = tns.Tensor4d
5+
6+
def contract(t: Tensor4d, i: int, j: int): ...
7+
8+
__all__: list[str]

Pysrc/tensorium/vectors.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from __future__ import annotations
2+
from typing import List
3+
4+
from . import tensorium as _C
5+
6+
Vector = _C.Vector
7+
Vectord = _C.Vectord
8+
9+
10+
def add(a: Vector, b: Vector) -> Vector:
11+
"""Add two vectors elementwise."""
12+
return _C.tns.add_vec(a, b)
13+
14+
15+
def sub(a: Vector, b: Vector) -> Vector:
16+
"""Subtract vector b from a."""
17+
return _C.tns.sub_vec(a, b)
18+
19+
20+
def scale(a: Vector, factor: float) -> Vector:
21+
"""Scale vector by a scalar."""
22+
return _C.tns.scl_vec(a, factor)
23+
24+
25+
def dot(a: Vector, b: Vector) -> float:
26+
"""Dot product between two vectors."""
27+
return _C.tns.dot_vec(a, b)
28+
29+
30+
__all__ = [
31+
"Vector",
32+
"Vectord",
33+
"add",
34+
"sub",
35+
"scale",
36+
"dot",
37+
]

Pysrc/tensorium/vectors.pyi

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from typing import List
2+
from .tensorium import Vector, Vectord
3+
4+
5+
def add(a: Vector, b: Vector) -> Vector: ...
6+
7+
def sub(a: Vector, b: Vector) -> Vector: ...
8+
9+
def scale(a: Vector, factor: float) -> Vector: ...
10+
11+
def dot(a: Vector, b: Vector) -> float: ...
12+
13+
__all__: list[str]

examples/basic_usage.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""Basic usage example for tensorium Python bindings."""
2+
from tensorium.vectors import Vector, add as add_vec, dot
3+
from tensorium.matrices import Matrix, add as add_mat
4+
5+
6+
def main() -> None:
7+
v1 = Vector([1.0, 2.0, 3.0])
8+
v2 = Vector([4.0, 5.0, 6.0])
9+
print("v1 + v2 =", add_vec(v1, v2))
10+
print("dot(v1, v2) =", dot(v1, v2))
11+
12+
m1 = Matrix(2, 2)
13+
m1.fill([[1.0, 2.0], [3.0, 4.0]])
14+
m2 = Matrix(2, 2)
15+
m2.fill([[5.0, 6.0], [7.0, 8.0]])
16+
print("m1 + m2 =")
17+
add_mat(m1, m2).print()
18+
19+
20+
if __name__ == "__main__":
21+
main()

0 commit comments

Comments
 (0)