aboutsummaryrefslogtreecommitdiffstats
path: root/README.rst
blob: c361e58e1e68756d4cd0c8d1d6f4dedc40aac8a9 (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
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)
                    monomial_str += f"{var}^{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)