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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import polymatrix.expression.init
from polymatrix.utils.getstacklines import get_stack_lines
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
def diff(
expression: ExpressionBaseMixin,
variables: ExpressionBaseMixin,
introduce_derivatives: bool = None,
) -> ExpressionBaseMixin:
if not isinstance(variables, ExpressionBaseMixin):
variables=polymatrix.expression.init.init_from_expr(variables)
if introduce_derivatives is None:
introduce_derivatives = False
return polymatrix.expression.impl.DerivativeExprImpl(
underlying=expression,
variables=variables,
introduce_derivatives=introduce_derivatives,
stack=get_stack_lines(),
)
def filter_(
underlying: ExpressionBaseMixin,
predicator: ExpressionBaseMixin,
inverse: bool = None,
) -> ExpressionBaseMixin:
if inverse is None:
inverse = False
return polymatrix.expression.impl.FilterExprImpl(
underlying=underlying,
predicator=predicator,
inverse=inverse,
)
def integrate(
expression: ExpressionBaseMixin,
variables: ExpressionBaseMixin,
from_: tuple[float, ...],
to: tuple[float, ...],
) -> ExpressionBaseMixin:
if not isinstance(variables, ExpressionBaseMixin):
variables=polymatrix.expression.init.init_from_expr(variables)
assert len(from_) == len(to)
return polymatrix.expression.impl.IntegrateExprImpl(
underlying=expression,
variables=variables,
from_=from_,
to=to,
stack=get_stack_lines(),
)
def legendre(
expression: ExpressionBaseMixin,
degrees: tuple[int, ...] = None,
) -> ExpressionBaseMixin:
return polymatrix.expression.impl.LegendreSeriesImpl(
underlying=expression,
degrees=degrees,
stack=get_stack_lines(),
)
def linear_in(
expression: ExpressionBaseMixin,
variables: ExpressionBaseMixin,
monomials: ExpressionBaseMixin = None,
ignore_unmatched: bool = None,
) -> ExpressionBaseMixin:
if monomials is None:
monomials = linear_monomials(
expression=expression,
variables=variables,
)
return polymatrix.expression.impl.LinearInExprImpl(
underlying=expression,
monomials=monomials,
variables=variables,
ignore_unmatched = ignore_unmatched,
)
def linear_monomials(
expression: ExpressionBaseMixin,
variables: ExpressionBaseMixin,
) -> ExpressionBaseMixin:
return polymatrix.expression.impl.LinearMonomialsExprImpl(
underlying=expression,
variables=variables,
)
def degree(
underlying: ExpressionBaseMixin,
):
return polymatrix.expression.impl.DegreeExprImpl(
underlying=underlying,
stack=get_stack_lines(),
)
|