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
9e0d6e50
Commit
9e0d6e50
authored
May 09, 2022
by
Wilson Jallet
🎬
Browse files
Fix for dynamic (1, N) block Refs
* stride reversed also in this case * add test for (1,n) and (n,1) blocks
parent
6b652d7a
Pipeline
#18575
canceled with stage
in 0 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
include/eigenpy/numpy-allocator.hpp
View file @
9e0d6e50
...
...
@@ -70,11 +70,12 @@ 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
npy_int
R
=
(
npy_int
)
mat
.
rows
();
const
bool
reverse_strides
=
MatType
::
IsRowMajor
||
(
R
==
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 @
9e0d6e50
...
...
@@ -39,16 +39,16 @@ def test(mat):
printMatrix
(
mat
)
mat0
=
mat
.
copy
()
mat_as_C_order
=
np
.
array
(
mat
,
order
=
"F"
)
for
i
,
rowsize
in
([
0
,
3
],
[
1
,
1
]):
print
(
"taking block [{}:{}, {}:{}]"
.
format
(
i
,
rowsize
+
i
,
0
,
2
))
B
=
getBlock
(
mat_as_C_order
,
i
,
0
,
rowsize
,
2
)
lhs
=
mat_as_C_order
[
i
:
rowsize
+
i
,
:
2
]
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
)
assert
np
.
array_equal
(
lhs
,
B
.
reshape
(
rowsize
,
colsize
)
)
B
[:]
=
1.0
rhs
=
np
.
ones
((
rowsize
,
2
))
assert
np
.
array_equal
(
mat_as_C_order
[
i
:
rowsize
+
i
,
:
2
],
rhs
)
rhs
=
np
.
ones
((
rowsize
,
colsize
))
assert
np
.
array_equal
(
mat_as_C_order
[
i
:
rowsize
+
i
,
:
colsize
],
rhs
)
mat_as_C_order
[:,
:]
=
mat0
...
...
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