Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stack Of Tasks
eigenpy
Commits
6486d6d8
Unverified
Commit
6486d6d8
authored
May 09, 2022
by
Justin Carpentier
Committed by
GitHub
May 09, 2022
Browse files
Merge pull request #284 from ManifoldFR/devel
Fix for Refs to dynamic (1, N) blocks
parents
1ae74c73
71a329d1
Pipeline
#18580
passed with stage
in 6 minutes and 7 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
include/eigenpy/numpy-allocator.hpp
View file @
6486d6d8
...
...
@@ -70,11 +70,11 @@ struct NumpyAllocator<Eigen::Ref<MatType, Options, Stride> > {
if
(
NumpyType
::
sharedMemory
())
{
const
int
Scalar_type_code
=
Register
::
getTypeCode
<
Scalar
>
();
Eigen
::
DenseIndex
inner_stride
=
MatType
::
IsRowMajor
?
mat
.
outerStride
()
:
mat
.
innerStride
(),
outer_stride
=
MatType
::
IsRowMajor
?
mat
.
innerStride
()
:
mat
.
outerStride
();
const
bool
reverse_strides
=
MatType
::
IsRowMajor
||
(
mat
.
rows
()
==
1
);
Eigen
::
DenseIndex
inner_stride
=
reverse_strides
?
mat
.
outerStride
()
:
mat
.
innerStride
(),
outer_stride
=
reverse_strides
?
mat
.
innerStride
()
:
mat
.
outerStride
();
const
int
elsize
=
call_PyArray_DescrFromType
(
Scalar_type_code
)
->
elsize
;
npy_intp
strides
[
2
]
=
{
elsize
*
inner_stride
,
elsize
*
outer_stride
};
...
...
@@ -135,10 +135,11 @@ struct NumpyAllocator<const Eigen::Ref<const MatType, Options, Stride> > {
if
(
NumpyType
::
sharedMemory
())
{
const
int
Scalar_type_code
=
Register
::
getTypeCode
<
Scalar
>
();
Eigen
::
DenseIndex
inner_stride
=
MatType
::
IsRowMajor
?
mat
.
outerStride
()
:
mat
.
innerStride
(),
outer_stride
=
MatType
::
IsRowMajor
?
mat
.
innerStride
()
:
mat
.
outerStride
();
const
bool
reverse_strides
=
MatType
::
IsRowMajor
||
(
mat
.
rows
()
==
1
);
Eigen
::
DenseIndex
inner_stride
=
reverse_strides
?
mat
.
outerStride
()
:
mat
.
innerStride
(),
outer_stride
=
reverse_strides
?
mat
.
innerStride
()
:
mat
.
outerStride
();
const
int
elsize
=
call_PyArray_DescrFromType
(
Scalar_type_code
)
->
elsize
;
npy_intp
strides
[
2
]
=
{
elsize
*
inner_stride
,
elsize
*
outer_stride
};
...
...
unittest/python/test_eigen_ref.py
View file @
6486d6d8
...
...
@@ -35,17 +35,28 @@ def test(mat):
assert
np
.
all
(
mat
[:
2
,
:
3
]
==
np
.
ones
((
2
,
3
)))
mat
.
fill
(
0.0
)
mat
[:,
:]
=
np
.
arange
(
rows
*
cols
).
reshape
(
rows
,
cols
)
printMatrix
(
mat
)
mat0
=
mat
.
copy
()
mat_as_C_order
=
np
.
array
(
mat
,
order
=
"F"
)
getBlock
(
mat_as_C_order
,
0
,
0
,
3
,
2
)[:,
:]
=
1.0
for
i
,
rowsize
,
colsize
in
([
0
,
3
,
2
],
[
1
,
1
,
2
],
[
0
,
3
,
1
]):
print
(
"taking block [{}:{}, {}:{}]"
.
format
(
i
,
rowsize
+
i
,
0
,
colsize
))
B
=
getBlock
(
mat_as_C_order
,
i
,
0
,
rowsize
,
colsize
)
lhs
=
mat_as_C_order
[
i
:
rowsize
+
i
,
:
colsize
]
print
(
"should be:
\n
{}
\n
got:
\n
{}"
.
format
(
lhs
,
B
))
assert
np
.
array_equal
(
lhs
,
B
.
reshape
(
rowsize
,
colsize
))
B
[:]
=
1.0
rhs
=
np
.
ones
((
rowsize
,
colsize
))
assert
np
.
array_equal
(
mat_as_C_order
[
i
:
rowsize
+
i
,
:
colsize
],
rhs
)
assert
np
.
all
(
mat_as_C_order
[:
3
,
:
2
]
=
=
np
.
ones
((
3
,
2
)))
mat_as_C_order
[:,
:]
=
mat0
mat_as_C_order
[:
3
,
:
2
]
=
0.0
mat_copy
=
mat_as_C_order
.
copy
()
editBlock
(
mat_as_C_order
,
0
,
0
,
3
,
2
)
mat_copy
[:
3
,
:
2
]
=
np
.
arange
(
6
).
reshape
(
3
,
2
)
assert
np
.
a
l
l
(
mat_as_C_order
==
mat_copy
)
assert
np
.
a
rray_equa
l
(
mat_as_C_order
,
mat_copy
)
class
ModifyBlockImpl
(
modify_block
):
def
__init__
(
self
):
...
...
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