Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
pyMOR
pymor
Commits
206cda03
Commit
206cda03
authored
Sep 23, 2021
by
Stephan Rave
Browse files
[ListVectorSpace] introduce vector_type and make make_array smarter
parent
12a8f0a6
Pipeline
#102015
passed with stages
in 52 minutes and 1 second
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/pymor/bindings/fenics.py
View file @
206cda03
...
...
@@ -126,7 +126,8 @@ if config.HAVE_FENICS:
class
FenicsVectorSpace
(
ComplexifiedListVectorSpace
):
complexified_vector_type
=
ComplexifiedFenicsVector
real_vector_type
=
FenicsVector
vector_type
=
ComplexifiedFenicsVector
def
__init__
(
self
,
V
,
id
=
'STATE'
):
self
.
__auto_init
(
locals
())
...
...
src/pymor/bindings/ngsolve.py
View file @
206cda03
...
...
@@ -68,7 +68,8 @@ if config.HAVE_NGSOLVE:
class
NGSolveVectorSpace
(
ComplexifiedListVectorSpace
):
complexified_vector_type
=
ComplexifiedNGSolveVector
real_vector_type
=
NGSolveVector
vector_type
=
ComplexifiedNGSolveVector
def
__init__
(
self
,
V
,
id
=
'STATE'
):
self
.
__auto_init
(
locals
())
...
...
src/pymor/operators/list.py
View file @
206cda03
...
...
@@ -93,7 +93,7 @@ class LinearComplexifiedListVectorArrayOperatorBase(ListVectorArrayOperatorBase)
imag_part
=
self
.
_real_apply_one_vector
(
u
.
imag_part
,
mu
=
mu
,
prepare_data
=
prepare_data
)
else
:
imag_part
=
None
return
self
.
range
.
complexified_
vector_type
(
real_part
,
imag_part
)
return
self
.
range
.
vector_type
(
real_part
,
imag_part
)
def
_apply_inverse_one_vector
(
self
,
v
,
mu
=
None
,
initial_guess
=
None
,
least_squares
=
False
,
prepare_data
=
None
):
real_part
=
self
.
_real_apply_inverse_one_vector
(
v
.
real_part
,
mu
=
mu
,
...
...
@@ -109,7 +109,7 @@ class LinearComplexifiedListVectorArrayOperatorBase(ListVectorArrayOperatorBase)
prepare_data
=
prepare_data
)
else
:
imag_part
=
None
return
self
.
source
.
complexified_
vector_type
(
real_part
,
imag_part
)
return
self
.
source
.
vector_type
(
real_part
,
imag_part
)
def
_apply_adjoint_one_vector
(
self
,
v
,
mu
=
None
,
prepare_data
=
None
):
real_part
=
self
.
_real_apply_adjoint_one_vector
(
v
.
real_part
,
mu
=
mu
,
prepare_data
=
prepare_data
)
...
...
@@ -117,7 +117,7 @@ class LinearComplexifiedListVectorArrayOperatorBase(ListVectorArrayOperatorBase)
imag_part
=
self
.
_real_apply_adjoint_one_vector
(
v
.
imag_part
,
mu
=
mu
,
prepare_data
=
prepare_data
)
else
:
imag_part
=
None
return
self
.
source
.
complexified_
vector_type
(
real_part
,
imag_part
)
return
self
.
source
.
vector_type
(
real_part
,
imag_part
)
def
_apply_inverse_adjoint_one_vector
(
self
,
u
,
mu
=
None
,
initial_guess
=
None
,
least_squares
=
False
,
prepare_data
=
None
):
real_part
=
self
.
_real_apply_inverse_adjoint_one_vector
(
u
.
real_part
,
mu
=
mu
,
...
...
@@ -134,7 +134,7 @@ class LinearComplexifiedListVectorArrayOperatorBase(ListVectorArrayOperatorBase)
prepare_data
=
prepare_data
)
else
:
imag_part
=
None
return
self
.
range
.
complexified_
vector_type
(
real_part
,
imag_part
)
return
self
.
range
.
vector_type
(
real_part
,
imag_part
)
class
NumpyListVectorArrayMatrixOperator
(
ListVectorArrayOperatorBase
,
NumpyMatrixOperator
):
...
...
src/pymor/vectorarrays/list.py
View file @
206cda03
...
...
@@ -548,6 +548,7 @@ class ListVectorSpace(VectorSpace):
"""|VectorSpace| of |ListVectorArrays|."""
dim
=
None
vector_type
=
Vector
@
abstractmethod
def
zero_vector
(
self
):
...
...
@@ -606,7 +607,7 @@ class ListVectorSpace(VectorSpace):
@
make_array
.
instancemethod
def
make_array
(
self
,
obj
):
""":noindex:"""
return
ListVectorArray
([
v
if
isinstance
(
v
,
Vector
)
else
self
.
make_vector
(
v
)
for
v
in
obj
],
self
)
return
ListVectorArray
([
v
if
isinstance
(
v
,
self
.
vector_type
)
else
self
.
make_vector
(
v
)
for
v
in
obj
],
self
)
@
classinstancemethod
def
from_numpy
(
cls
,
data
,
id
=
None
,
ensure_copy
=
False
):
...
...
@@ -620,34 +621,38 @@ class ListVectorSpace(VectorSpace):
class
ComplexifiedListVectorSpace
(
ListVectorSpace
):
complexified_vector_type
=
ComplexifiedVector
real_vector_type
=
Vector
vector_type
=
ComplexifiedVector
@
abstractmethod
def
real_zero_vector
(
self
):
pass
def
zero_vector
(
self
):
return
self
.
complexified_
vector_type
(
self
.
real_zero_vector
(),
None
)
return
self
.
vector_type
(
self
.
real_zero_vector
(),
None
)
def
real_full_vector
(
self
,
value
):
return
self
.
real_vector_from_numpy
(
np
.
full
(
self
.
dim
,
value
))
def
full_vector
(
self
,
value
):
return
self
.
complexified_
vector_type
(
self
.
real_full_vector
(
value
),
None
)
return
self
.
vector_type
(
self
.
real_full_vector
(
value
),
None
)
def
real_random_vector
(
self
,
distribution
,
random_state
,
**
kwargs
):
values
=
_create_random_values
(
self
.
dim
,
distribution
,
random_state
,
**
kwargs
)
return
self
.
real_vector_from_numpy
(
values
)
def
random_vector
(
self
,
distribution
,
random_state
,
**
kwargs
):
return
self
.
complexified_
vector_type
(
self
.
real_random_vector
(
distribution
,
random_state
,
**
kwargs
),
None
)
return
self
.
vector_type
(
self
.
real_random_vector
(
distribution
,
random_state
,
**
kwargs
),
None
)
@
abstractmethod
def
real_make_vector
(
self
,
obj
):
pass
def
make_vector
(
self
,
obj
):
return
self
.
complexified_vector_type
(
self
.
real_make_vector
(
obj
),
None
)
if
isinstance
(
obj
,
self
.
real_vector_type
):
return
self
.
vector_type
(
obj
,
None
)
else
:
return
self
.
vector_type
(
self
.
real_make_vector
(
obj
),
None
)
def
real_vector_from_numpy
(
self
,
data
,
ensure_copy
=
False
):
raise
NotImplementedError
...
...
@@ -659,11 +664,13 @@ class ComplexifiedListVectorSpace(ListVectorSpace):
else
:
real_part
=
self
.
real_vector_from_numpy
(
data
,
ensure_copy
=
ensure_copy
)
imag_part
=
None
return
self
.
complexified_
vector_type
(
real_part
,
imag_part
)
return
self
.
vector_type
(
real_part
,
imag_part
)
class
NumpyListVectorSpace
(
ListVectorSpace
):
vector_type
=
NumpyVector
def
__init__
(
self
,
dim
,
id
=
None
):
self
.
dim
=
dim
self
.
id
=
id
...
...
René Fritze
@r_milk01
mentioned in commit
dad70b20
·
Sep 23, 2021
mentioned in commit
dad70b20
mentioned in commit dad70b207ac3d85abf8e9f9fa76e9c115dee8873
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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