Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
LISA Instrument
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Admin message
Gitlab has been updated. More info
here
and
there
.
Show more breadcrumbs
LISA Simulation
LISA Instrument
Commits
e6531e6e
Commit
e6531e6e
authored
4 years ago
by
Jean-Baptiste Bayle
Browse files
Options
Downloads
Patches
Plain Diff
Add `adjacent()`, `distant()`, and `for_each_mosa()` methods
parent
acf339eb
No related branches found
No related tags found
1 merge request
!30
Resolve "Define arithmetics and transformations on containers"
Pipeline
#108502
passed
4 years ago
Stage: test
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
lisainstrument/containers.py
+18
-13
18 additions, 13 deletions
lisainstrument/containers.py
tests/test_containers.py
+62
-21
62 additions, 21 deletions
tests/test_containers.py
with
80 additions
and
34 deletions
lisainstrument/containers.py
+
18
−
13
View file @
e6531e6e
...
@@ -209,14 +209,14 @@ class ForEachSC(ForEachObject):
...
@@ -209,14 +209,14 @@ class ForEachSC(ForEachObject):
return
[
'
1
'
,
'
2
'
,
'
3
'
]
return
[
'
1
'
,
'
2
'
,
'
3
'
]
@staticmethod
@staticmethod
def
distant_left
(
sc
):
def
distant_left
_sc
(
sc
):
"""
Return index of distant rleftspacecraft.
"""
"""
Return index of distant rleftspacecraft.
"""
if
sc
not
in
ForEachSC
.
indices
():
if
sc
not
in
ForEachSC
.
indices
():
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
return
f
'
{
int
(
sc
)
%
3
+
1
}
'
return
f
'
{
int
(
sc
)
%
3
+
1
}
'
@staticmethod
@staticmethod
def
distant_right
(
sc
):
def
distant_right
_sc
(
sc
):
"""
Return index of distant right spacecraft.
"""
"""
Return index of distant right spacecraft.
"""
if
sc
not
in
ForEachSC
.
indices
():
if
sc
not
in
ForEachSC
.
indices
():
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
...
@@ -227,14 +227,18 @@ class ForEachSC(ForEachObject):
...
@@ -227,14 +227,18 @@ class ForEachSC(ForEachObject):
"""
Return index of left MOSA.
"""
"""
Return index of left MOSA.
"""
if
sc
not
in
ForEachSC
.
indices
():
if
sc
not
in
ForEachSC
.
indices
():
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
return
f
'
{
sc
}{
ForEachSC
.
distant_left
(
sc
)
}
'
return
f
'
{
sc
}{
ForEachSC
.
distant_left
_sc
(
sc
)
}
'
@staticmethod
@staticmethod
def
right_mosa
(
sc
):
def
right_mosa
(
sc
):
"""
Return index of right MOSA.
"""
"""
Return index of right MOSA.
"""
if
sc
not
in
ForEachSC
.
indices
():
if
sc
not
in
ForEachSC
.
indices
():
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
raise
ValueError
(
f
"
invalid spacecraft index
'
{
sc
}
'"
)
return
f
'
{
sc
}{
ForEachSC
.
distant_right
(
sc
)
}
'
return
f
'
{
sc
}{
ForEachSC
.
distant_right_sc
(
sc
)
}
'
def
for_each_mosa
(
self
):
"""
Return a ForEachMOSA instance by sharing the spacecraft values on both MOSAs.
"""
return
ForEachMOSA
(
lambda
mosa
:
self
[
ForEachMOSA
.
sc
(
mosa
)])
class
ForEachMOSA
(
ForEachObject
):
class
ForEachMOSA
(
ForEachObject
):
...
@@ -244,20 +248,13 @@ class ForEachMOSA(ForEachObject):
...
@@ -244,20 +248,13 @@ class ForEachMOSA(ForEachObject):
def
indices
(
cls
):
def
indices
(
cls
):
return
[
'
12
'
,
'
23
'
,
'
31
'
,
'
13
'
,
'
32
'
,
'
21
'
]
return
[
'
12
'
,
'
23
'
,
'
31
'
,
'
13
'
,
'
32
'
,
'
21
'
]
def
__init__
(
self
,
values
):
"""
Initialize from a `ForEachSC` instance or rely on super
'
s implementation.
"""
if
isinstance
(
values
,
ForEachSC
):
super
().
__init__
(
lambda
mosa
:
values
[
ForEachMOSA
.
sc
(
mosa
)])
else
:
super
().
__init__
(
values
)
@staticmethod
@staticmethod
def
sc
(
mosa
):
def
sc
(
mosa
):
"""
Return index of spacecraft hosting MOSA.
"""
"""
Return index of spacecraft hosting MOSA.
"""
return
f
'
{
mosa
[
0
]
}
'
return
f
'
{
mosa
[
0
]
}
'
@staticmethod
@staticmethod
def
distant
(
mosa
):
def
distant
_mosa
(
mosa
):
"""
Return index of distant MOSA.
"""
Return index of distant MOSA.
In practive, we invert the indices to swap emitter and receiver.
In practive, we invert the indices to swap emitter and receiver.
...
@@ -267,7 +264,7 @@ class ForEachMOSA(ForEachObject):
...
@@ -267,7 +264,7 @@ class ForEachMOSA(ForEachObject):
return
f
'
{
mosa
[
1
]
}{
mosa
[
0
]
}
'
return
f
'
{
mosa
[
1
]
}{
mosa
[
0
]
}
'
@staticmethod
@staticmethod
def
adjacent
(
mosa
):
def
adjacent
_mosa
(
mosa
):
"""
Return index of adjacent MOSA.
"""
Return index of adjacent MOSA.
In practice, we replace the second index by the only unused spacecraft index.
In practice, we replace the second index by the only unused spacecraft index.
...
@@ -278,3 +275,11 @@ class ForEachMOSA(ForEachObject):
...
@@ -278,3 +275,11 @@ class ForEachMOSA(ForEachObject):
if
len
(
unused
)
!=
1
:
if
len
(
unused
)
!=
1
:
raise
RuntimeError
(
f
"
cannot find adjacent MOSA for
'
{
mosa
}
'"
)
raise
RuntimeError
(
f
"
cannot find adjacent MOSA for
'
{
mosa
}
'"
)
return
f
'
{
mosa
[
0
]
}{
unused
[
0
]
}
'
return
f
'
{
mosa
[
0
]
}{
unused
[
0
]
}
'
def
distant
(
self
):
"""
Return a ForEachMOSA instance for distant MOSAs.
"""
return
ForEachMOSA
(
lambda
mosa
:
self
[
ForEachMOSA
.
distant_mosa
(
mosa
)])
def
adjacent
(
self
):
"""
Return a ForEachMOSA instance for adjacent MOSAs.
"""
return
ForEachMOSA
(
lambda
mosa
:
self
[
ForEachMOSA
.
adjacent_mosa
(
mosa
)])
This diff is collapsed.
Click to expand it.
tests/test_containers.py
+
62
−
21
View file @
e6531e6e
...
@@ -307,13 +307,13 @@ def test_sc_indices():
...
@@ -307,13 +307,13 @@ def test_sc_indices():
assert
ForEachSC
.
indices
()
==
[
'
1
'
,
'
2
'
,
'
3
'
]
assert
ForEachSC
.
indices
()
==
[
'
1
'
,
'
2
'
,
'
3
'
]
assert
ForEachSC
.
distant_left
(
'
1
'
)
==
'
2
'
assert
ForEachSC
.
distant_left
_sc
(
'
1
'
)
==
'
2
'
assert
ForEachSC
.
distant_left
(
'
2
'
)
==
'
3
'
assert
ForEachSC
.
distant_left
_sc
(
'
2
'
)
==
'
3
'
assert
ForEachSC
.
distant_left
(
'
3
'
)
==
'
1
'
assert
ForEachSC
.
distant_left
_sc
(
'
3
'
)
==
'
1
'
assert
ForEachSC
.
distant_right
(
'
1
'
)
==
'
3
'
assert
ForEachSC
.
distant_right
_sc
(
'
1
'
)
==
'
3
'
assert
ForEachSC
.
distant_right
(
'
2
'
)
==
'
1
'
assert
ForEachSC
.
distant_right
_sc
(
'
2
'
)
==
'
1
'
assert
ForEachSC
.
distant_right
(
'
3
'
)
==
'
2
'
assert
ForEachSC
.
distant_right
_sc
(
'
3
'
)
==
'
2
'
assert
ForEachSC
.
left_mosa
(
'
1
'
)
==
'
12
'
assert
ForEachSC
.
left_mosa
(
'
1
'
)
==
'
12
'
assert
ForEachSC
.
left_mosa
(
'
2
'
)
==
'
23
'
assert
ForEachSC
.
left_mosa
(
'
2
'
)
==
'
23
'
...
@@ -336,32 +336,73 @@ def test_mosa_indices():
...
@@ -336,32 +336,73 @@ def test_mosa_indices():
assert
ForEachMOSA
.
sc
(
'
32
'
)
==
'
3
'
assert
ForEachMOSA
.
sc
(
'
32
'
)
==
'
3
'
assert
ForEachMOSA
.
sc
(
'
21
'
)
==
'
2
'
assert
ForEachMOSA
.
sc
(
'
21
'
)
==
'
2
'
assert
ForEachMOSA
.
distant
(
'
12
'
)
==
'
21
'
assert
ForEachMOSA
.
distant
_mosa
(
'
12
'
)
==
'
21
'
assert
ForEachMOSA
.
distant
(
'
23
'
)
==
'
32
'
assert
ForEachMOSA
.
distant
_mosa
(
'
23
'
)
==
'
32
'
assert
ForEachMOSA
.
distant
(
'
31
'
)
==
'
13
'
assert
ForEachMOSA
.
distant
_mosa
(
'
31
'
)
==
'
13
'
assert
ForEachMOSA
.
distant
(
'
13
'
)
==
'
31
'
assert
ForEachMOSA
.
distant
_mosa
(
'
13
'
)
==
'
31
'
assert
ForEachMOSA
.
distant
(
'
32
'
)
==
'
23
'
assert
ForEachMOSA
.
distant
_mosa
(
'
32
'
)
==
'
23
'
assert
ForEachMOSA
.
distant
(
'
21
'
)
==
'
12
'
assert
ForEachMOSA
.
distant
_mosa
(
'
21
'
)
==
'
12
'
assert
ForEachMOSA
.
adjacent
(
'
12
'
)
==
'
13
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
12
'
)
==
'
13
'
assert
ForEachMOSA
.
adjacent
(
'
23
'
)
==
'
21
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
23
'
)
==
'
21
'
assert
ForEachMOSA
.
adjacent
(
'
31
'
)
==
'
32
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
31
'
)
==
'
32
'
assert
ForEachMOSA
.
adjacent
(
'
13
'
)
==
'
12
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
13
'
)
==
'
12
'
assert
ForEachMOSA
.
adjacent
(
'
32
'
)
==
'
31
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
32
'
)
==
'
31
'
assert
ForEachMOSA
.
adjacent
(
'
21
'
)
==
'
23
'
assert
ForEachMOSA
.
adjacent
_mosa
(
'
21
'
)
==
'
23
'
def
test_init_mosa_with_sc
():
"""
Test one can initialize ForEachMOSA from ForEachSC.
"""
def
test_foreachsc_to_foreachmosa
():
"""
Test that one can turn a ForEachSC instance to a ForEachMOSA instance.
"""
my_sc
=
ForEachSC
(
lambda
sc
:
10
*
int
(
sc
))
my_sc
=
ForEachSC
(
lambda
sc
:
10
*
int
(
sc
))
assert
my_sc
[
'
1
'
]
==
10
assert
my_sc
[
'
1
'
]
==
10
assert
my_sc
[
'
2
'
]
==
20
assert
my_sc
[
'
2
'
]
==
20
assert
my_sc
[
'
3
'
]
==
30
assert
my_sc
[
'
3
'
]
==
30
my_mosa
=
ForEachMOSA
(
my_sc
)
my_mosa
=
my_sc
.
for_each_mosa
(
)
assert
my_mosa
[
'
12
'
]
==
10
assert
my_mosa
[
'
12
'
]
==
10
assert
my_mosa
[
'
13
'
]
==
10
assert
my_mosa
[
'
13
'
]
==
10
assert
my_mosa
[
'
21
'
]
==
20
assert
my_mosa
[
'
21
'
]
==
20
assert
my_mosa
[
'
23
'
]
==
20
assert
my_mosa
[
'
23
'
]
==
20
assert
my_mosa
[
'
31
'
]
==
30
assert
my_mosa
[
'
31
'
]
==
30
assert
my_mosa
[
'
32
'
]
==
30
assert
my_mosa
[
'
32
'
]
==
30
def
test_foreachmosa_distant
():
"""
Test that one can generate a ForEachMOSA instant for distant MOSAs.
"""
my_mosa
=
ForEachMOSA
(
int
)
assert
my_mosa
[
'
12
'
]
==
12
assert
my_mosa
[
'
13
'
]
==
13
assert
my_mosa
[
'
21
'
]
==
21
assert
my_mosa
[
'
23
'
]
==
23
assert
my_mosa
[
'
31
'
]
==
31
assert
my_mosa
[
'
32
'
]
==
32
distant_mosa
=
my_mosa
.
distant
()
assert
distant_mosa
[
'
12
'
]
==
21
assert
distant_mosa
[
'
13
'
]
==
31
assert
distant_mosa
[
'
21
'
]
==
12
assert
distant_mosa
[
'
23
'
]
==
32
assert
distant_mosa
[
'
31
'
]
==
13
assert
distant_mosa
[
'
32
'
]
==
23
def
test_foreachmosa_adjacent
():
"""
Test that one can generate a ForEachMOSA instant for adjacent MOSAs.
"""
my_mosa
=
ForEachMOSA
(
int
)
assert
my_mosa
[
'
12
'
]
==
12
assert
my_mosa
[
'
13
'
]
==
13
assert
my_mosa
[
'
21
'
]
==
21
assert
my_mosa
[
'
23
'
]
==
23
assert
my_mosa
[
'
31
'
]
==
31
assert
my_mosa
[
'
32
'
]
==
32
adjacent_mosa
=
my_mosa
.
adjacent
()
assert
adjacent_mosa
[
'
12
'
]
==
13
assert
adjacent_mosa
[
'
13
'
]
==
12
assert
adjacent_mosa
[
'
21
'
]
==
23
assert
adjacent_mosa
[
'
23
'
]
==
21
assert
adjacent_mosa
[
'
31
'
]
==
32
assert
adjacent_mosa
[
'
32
'
]
==
31
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