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
58
59
60
61
62
63
64
|
``mdpoly`` or 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.
.. code:: py
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 = }")
# Expressions can be easily reparametrized
w = Parameter("w")
q = p.replace(y, w).replace(k, k ** 2) # createas a copy
print(f"{q = }")
# 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-ish.
.. code:: py
from mdpoly import Variable, MatrixVariable
from mdpoly.types import Shape
x = Variable("x")
V = MatrixVariable("V", Shape.column(3))
print(x.shape, V.shape)
z = x + V # error
scalar = V.T @ V # no error (TODO)
|