Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Jonas Plewinski
pystencils
Commits
7df37e9f
Commit
7df37e9f
authored
Sep 26, 2018
by
Martin Bauer
Browse files
Generation of packing kernels
parent
66023ebf
Changes
1
Hide whitespace changes
Inline
Side-by-side
utils.py
View file @
7df37e9f
...
...
@@ -111,6 +111,7 @@ class LinearEquationSystem:
self
.
_matrix
=
sp
.
zeros
(
size
,
size
+
1
)
self
.
unknowns
=
unknowns
self
.
next_zero_row
=
0
self
.
_reduced
=
True
def
copy
(
self
):
"""Returns a copy of the equation system."""
...
...
@@ -135,6 +136,7 @@ class LinearEquationSystem:
if
rest
.
atoms
(
sp
.
Symbol
):
raise
ValueError
(
"Not a linear equation in the unknowns"
)
self
.
_matrix
[
zero_row_idx
,
-
1
]
=
-
rest
self
.
_reduced
=
False
def
add_equations
(
self
,
linear_equations
):
"""Add a sequence of equations. For details see `add_equation`. """
...
...
@@ -148,18 +150,28 @@ class LinearEquationSystem:
self
.
_resize_if_necessary
()
self
.
_matrix
[
self
.
next_zero_row
,
unknown_idx
]
=
1
self
.
next_zero_row
+=
1
self
.
_reduced
=
False
def
reduce
(
self
):
"""Brings the system in reduced row echelon form."""
if
self
.
_reduced
:
return
self
.
_matrix
=
self
.
_matrix
.
rref
()[
0
]
self
.
_update_next_zero_row
()
self
.
_reduced
=
True
@
property
def
matrix
(
self
):
"""Return a matrix that represents the equation system.
Has one column more than unknowns for the affine part."""
self
.
reduce
()
return
self
.
_matrix
@
property
def
rank
(
self
):
self
.
reduce
()
return
self
.
next_zero_row
def
solution_structure
(
self
):
"""Returns either 'multiple', 'none' or 'single' to indicate how many solutions the system has."""
self
.
reduce
()
...
...
@@ -198,4 +210,9 @@ class LinearEquationSystem:
if
any
(
e
!=
0
for
e
in
self
.
_matrix
.
row
(
row_to_check
)):
break
result
-=
1
self
.
next_zero_row
=
result
\ No newline at end of file
self
.
next_zero_row
=
result
def
find_unique_solutions_with_zeros
(
system
:
LinearEquationSystem
):
if
not
system
.
solution_structure
()
!=
'multiple'
:
raise
ValueError
(
"Function works only for underdetermined systems"
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment