aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: 7bd2f0cdcfdaa9c41287a393032c7995c6ad2e62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# `mdpoly` Multidimensional Polynomials

Work in progress!

## Quick Start

There is still a big part of the API missing but the snipped below works enough
to give an overview.

```python
from mdpoly import State, Variable, Parameter
from mdpoly.representations import SparseRepr

# Construct an expression
x, y = Variable.from_names("x, y") # or just Variable("x")
k = Parameter("k")

p = (x + 2 * y) ** 3 + y ** 2 + k
print(f"{p = }")

# Make a concrete representation
state = State(parameters={k: 3.14}) # try to replace with empty dict
sparse, state = p.to_repr(SparseRepr, state)

# Look inside the representation
for entry in sparse.entries():
    print(f"at (row, col) = {entry.row, entry.col} there is a polynomial:")
    for term in sparse.terms(entry):
        monomial_str = ""
        for idx in term:
            var = state.from_index(idx.var_idx)
            monomial_str += f"{var.name}^{idx.power} "

        # Get the coefficient
        coeff = sparse.at(entry, term)
        print(" - the monomial", monomial_str, "has coefficient", coeff)

# You can also simply iterate over it
for entry, term, coeff in sparse:
    print(entry, term, coeff)
```

There is some advanced stuff that is still broken but the idea is that it will
work soon (TM)

```
from mdpoly import Variable, MatrixVariable
from mdpoly.types import Shape

x = Variable("x")
V = MatrixVariable("Q", Shape.column(3))

print(x.shape, V.shape)

z = x + V # error
scalar = V.T @ V # no error (TODO)
```