Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
fslpy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Michiel Cottaar
fslpy
Commits
ecc8602b
Commit
ecc8602b
authored
7 years ago
by
Paul McCarthy
Browse files
Options
Downloads
Patches
Plain Diff
ImageWrapper unit tests now test threaded access
parent
05f701c6
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
tests/test_imagewrapper.py
+40
-11
40 additions, 11 deletions
tests/test_imagewrapper.py
with
40 additions
and
11 deletions
tests/test_imagewrapper.py
+
40
−
11
View file @
ecc8602b
...
@@ -9,6 +9,7 @@ from __future__ import print_function
...
@@ -9,6 +9,7 @@ from __future__ import print_function
import
collections
import
collections
import
random
import
random
import
time
import
itertools
as
it
import
itertools
as
it
import
numpy
as
np
import
numpy
as
np
import
nibabel
as
nib
import
nibabel
as
nib
...
@@ -192,6 +193,7 @@ def applyCoverage(wrapper, coverage):
...
@@ -192,6 +193,7 @@ def applyCoverage(wrapper, coverage):
sliceobjs
.
append
(
vol
)
sliceobjs
.
append
(
vol
)
wrapper
[
tuple
(
sliceobjs
)]
wrapper
[
tuple
(
sliceobjs
)]
_ImageWraper_busy_wait
(
wrapper
)
# Check that the image wrapper
# Check that the image wrapper
# has covered what we just told
# has covered what we just told
...
@@ -557,7 +559,16 @@ def test_calcExpansion(niters):
...
@@ -557,7 +559,16 @@ def test_calcExpansion(niters):
_test_expansion
(
coverage
,
slices
,
vols
,
exps
)
_test_expansion
(
coverage
,
slices
,
vols
,
exps
)
def
test_ImageWrapper_read
(
niters
,
seed
):
def
_ImageWraper_busy_wait
(
wrapper
,
v
=
0
):
tt
=
wrapper
.
getTaskThread
()
if
tt
is
not
None
:
tt
.
waitUntilIdle
()
def
test_ImageWrapper_read_threaded
(
niters
,
seed
):
_test_ImageWrapper_read
(
niters
,
seed
,
True
)
def
test_ImageWrapper_read_unthreaded
(
niters
,
seed
):
_test_ImageWrapper_read
(
niters
,
seed
,
False
)
def
_test_ImageWrapper_read
(
niters
,
seed
,
threaded
):
for
_
in
range
(
niters
):
for
_
in
range
(
niters
):
...
@@ -581,7 +592,9 @@ def test_ImageWrapper_read(niters, seed):
...
@@ -581,7 +592,9 @@ def test_ImageWrapper_read(niters, seed):
np
.
max
(
data
[...,
vol
])))
np
.
max
(
data
[...,
vol
])))
img
=
nib
.
Nifti1Image
(
data
,
np
.
eye
(
4
))
img
=
nib
.
Nifti1Image
(
data
,
np
.
eye
(
4
))
wrapper
=
imagewrap
.
ImageWrapper
(
img
,
loadData
=
False
)
wrapper
=
imagewrap
.
ImageWrapper
(
img
,
loadData
=
False
,
threaded
=
threaded
)
# We're going to access data volumes
# We're going to access data volumes
# through the image wrapper with a
# through the image wrapper with a
...
@@ -604,6 +617,8 @@ def test_ImageWrapper_read(niters, seed):
...
@@ -604,6 +617,8 @@ def test_ImageWrapper_read(niters, seed):
if
len
(
data
.
shape
)
>=
3
:
wrapper
[...,
vol
]
if
len
(
data
.
shape
)
>=
3
:
wrapper
[...,
vol
]
else
:
wrapper
[:,
vol
,
0
]
else
:
wrapper
[:,
vol
,
0
]
_ImageWraper_busy_wait
(
wrapper
,
vol
)
# The current known data range
# The current known data range
# should be the min/max of
# should be the min/max of
# all acccessed volumes so far
# all acccessed volumes so far
...
@@ -615,8 +630,11 @@ def test_ImageWrapper_read(niters, seed):
...
@@ -615,8 +630,11 @@ def test_ImageWrapper_read(niters, seed):
if
j
<
nvols
-
1
:
assert
not
wrapper
.
covered
if
j
<
nvols
-
1
:
assert
not
wrapper
.
covered
else
:
assert
wrapper
.
covered
else
:
assert
wrapper
.
covered
def
test_ImageWrapper_write_out_threaded
(
niters
,
seed
):
def
test_ImageWrapper_write_out
(
niters
,
seed
):
_test_ImageWrapper_write_out
(
niters
,
seed
,
True
)
def
test_ImageWrapper_write_out_unthreaded
(
niters
,
seed
):
_test_ImageWrapper_write_out
(
niters
,
seed
,
False
)
def
_test_ImageWrapper_write_out
(
niters
,
seed
,
threaded
):
# This is HORRIBLE
# This is HORRIBLE
loop
=
0
loop
=
0
...
@@ -644,7 +662,7 @@ def test_ImageWrapper_write_out(niters, seed):
...
@@ -644,7 +662,7 @@ def test_ImageWrapper_write_out(niters, seed):
cov
=
random_coverage
(
shape
,
vol_limit
=
1
)
cov
=
random_coverage
(
shape
,
vol_limit
=
1
)
img
=
nib
.
Nifti1Image
(
data
,
np
.
eye
(
4
))
img
=
nib
.
Nifti1Image
(
data
,
np
.
eye
(
4
))
wrapper
=
imagewrap
.
ImageWrapper
(
img
)
wrapper
=
imagewrap
.
ImageWrapper
(
img
,
threaded
=
threaded
)
applyCoverage
(
wrapper
,
cov
)
applyCoverage
(
wrapper
,
cov
)
clo
,
chi
=
wrapper
.
dataRange
clo
,
chi
=
wrapper
.
dataRange
...
@@ -725,6 +743,7 @@ def test_ImageWrapper_write_out(niters, seed):
...
@@ -725,6 +743,7 @@ def test_ImageWrapper_write_out(niters, seed):
oldCov
=
wrapper
.
coverage
(
0
)
oldCov
=
wrapper
.
coverage
(
0
)
wrapper
[
tuple
(
sliceobjs
)]
=
newData
wrapper
[
tuple
(
sliceobjs
)]
=
newData
_ImageWraper_busy_wait
(
wrapper
)
expLo
,
expHi
=
coverageDataRange
(
img
.
get_data
(),
cov
,
slices
)
expLo
,
expHi
=
coverageDataRange
(
img
.
get_data
(),
cov
,
slices
)
newLo
,
newHi
=
wrapper
.
dataRange
newLo
,
newHi
=
wrapper
.
dataRange
...
@@ -750,8 +769,12 @@ def test_ImageWrapper_write_out(niters, seed):
...
@@ -750,8 +769,12 @@ def test_ImageWrapper_write_out(niters, seed):
assert
np
.
isclose
(
newHi
,
expHi
)
assert
np
.
isclose
(
newHi
,
expHi
)
# print('--------------')
# print('--------------')
def
test_ImageWrapper_write_in_overlap
(
niters
,
seed
):
def
test_ImageWrapper_write_in_overlap_threaded
(
niters
,
seed
):
_test_ImageWrapper_write_in_overlap
(
niters
,
seed
,
True
)
def
test_ImageWrapper_write_in_overlap_unthreaded
(
niters
,
seed
):
_test_ImageWrapper_write_in_overlap
(
niters
,
seed
,
False
)
def
_test_ImageWrapper_write_in_overlap
(
niters
,
seed
,
threaded
):
# Generate a bunch of random coverages
# Generate a bunch of random coverages
for
_
in
range
(
niters
):
for
_
in
range
(
niters
):
...
@@ -814,7 +837,7 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
...
@@ -814,7 +837,7 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
rhi
=
rlo
rhi
=
rlo
img
=
nib
.
Nifti1Image
(
np
.
copy
(
data
),
np
.
eye
(
4
))
img
=
nib
.
Nifti1Image
(
np
.
copy
(
data
),
np
.
eye
(
4
))
wrapper
=
imagewrap
.
ImageWrapper
(
img
)
wrapper
=
imagewrap
.
ImageWrapper
(
img
,
threaded
=
threaded
)
applyCoverage
(
wrapper
,
cov
)
applyCoverage
(
wrapper
,
cov
)
newData
=
np
.
linspace
(
rlo
,
rhi
,
np
.
prod
(
sliceshape
))
newData
=
np
.
linspace
(
rlo
,
rhi
,
np
.
prod
(
sliceshape
))
...
@@ -840,6 +863,7 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
...
@@ -840,6 +863,7 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
expHi
=
expData
[
expCovSlice
].
max
()
expHi
=
expData
[
expCovSlice
].
max
()
wrapper
[
tuple
(
sliceobjs
)]
=
newData
wrapper
[
tuple
(
sliceobjs
)]
=
newData
_ImageWraper_busy_wait
(
wrapper
)
newCov
=
wrapper
.
coverage
(
0
)
newCov
=
wrapper
.
coverage
(
0
)
newLo
,
newHi
=
wrapper
.
dataRange
newLo
,
newHi
=
wrapper
.
dataRange
...
@@ -856,8 +880,12 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
...
@@ -856,8 +880,12 @@ def test_ImageWrapper_write_in_overlap(niters, seed):
assert
np
.
isclose
(
newLo
,
expLo
)
assert
np
.
isclose
(
newLo
,
expLo
)
assert
np
.
isclose
(
newHi
,
expHi
)
assert
np
.
isclose
(
newHi
,
expHi
)
def
test_ImageWrapper_write_different_volume
(
niters
,
seed
):
def
test_ImageWrapper_write_different_volume_threaded
(
niters
,
seed
):
_test_ImageWrapper_write_different_volume
(
niters
,
seed
,
True
)
def
test_ImageWrapper_write_different_volume_unthreaded
(
niters
,
seed
):
_test_ImageWrapper_write_different_volume
(
niters
,
seed
,
False
)
def
_test_ImageWrapper_write_different_volume
(
niters
,
seed
,
threaded
):
for
_
in
range
(
niters
):
for
_
in
range
(
niters
):
...
@@ -977,7 +1005,7 @@ def test_ImageWrapper_write_different_volume(niters, seed):
...
@@ -977,7 +1005,7 @@ def test_ImageWrapper_write_different_volume(niters, seed):
for
rlo
,
rhi
,
(
elo
,
ehi
)
in
zip
(
loRanges
,
hiRanges
,
expected
):
for
rlo
,
rhi
,
(
elo
,
ehi
)
in
zip
(
loRanges
,
hiRanges
,
expected
):
img
=
nib
.
Nifti1Image
(
np
.
copy
(
data
),
np
.
eye
(
4
))
img
=
nib
.
Nifti1Image
(
np
.
copy
(
data
),
np
.
eye
(
4
))
wrapper
=
imagewrap
.
ImageWrapper
(
img
)
wrapper
=
imagewrap
.
ImageWrapper
(
img
,
threaded
=
threaded
)
applyCoverage
(
wrapper
,
cov
)
applyCoverage
(
wrapper
,
cov
)
oldLo
,
oldHi
=
wrapper
.
dataRange
oldLo
,
oldHi
=
wrapper
.
dataRange
...
@@ -990,6 +1018,7 @@ def test_ImageWrapper_write_different_volume(niters, seed):
...
@@ -990,6 +1018,7 @@ def test_ImageWrapper_write_different_volume(niters, seed):
ehi
=
max
(
newData
.
max
(),
oldHi
)
ehi
=
max
(
newData
.
max
(),
oldHi
)
wrapper
[
tuple
(
sliceobjs
)]
=
newData
wrapper
[
tuple
(
sliceobjs
)]
=
newData
_ImageWraper_busy_wait
(
wrapper
)
newLo
,
newHi
=
wrapper
.
dataRange
newLo
,
newHi
=
wrapper
.
dataRange
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment