Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
Plio
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
aflab
astrogeology
Plio
Commits
3307cc8d
Commit
3307cc8d
authored
8 years ago
by
Jay
Browse files
Options
Downloads
Patches
Plain Diff
Rollsback the move from dataframe to graph cnet
parent
ee4b1af9
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
plio/io/io_controlnetwork.py
+17
-21
17 additions, 21 deletions
plio/io/io_controlnetwork.py
plio/io/tests/test_io_controlnetwork.py
+29
-25
29 additions, 25 deletions
plio/io/tests/test_io_controlnetwork.py
with
46 additions
and
46 deletions
plio/io/io_controlnetwork.py
+
17
−
21
View file @
3307cc8d
...
@@ -145,7 +145,7 @@ class IsisStore(object):
...
@@ -145,7 +145,7 @@ class IsisStore(object):
self
.
_path
=
path
self
.
_path
=
path
if
not
mode
:
if
not
mode
:
mode
=
'
wb
'
# pragma: no cover
mode
=
'
a
'
# pragma: no cover
self
.
_mode
=
mode
self
.
_mode
=
mode
self
.
_handle
=
None
self
.
_handle
=
None
...
@@ -170,13 +170,13 @@ class IsisStore(object):
...
@@ -170,13 +170,13 @@ class IsisStore(object):
self
.
_handle
.
seek
(
offset
)
self
.
_handle
.
seek
(
offset
)
self
.
_handle
.
write
(
data
)
self
.
_handle
.
write
(
data
)
def
create_points
(
self
,
graphs
,
pointid_prefix
,
pointid_suffix
):
def
create_points
(
self
,
obj
,
pointid_prefix
,
pointid_suffix
):
"""
"""
Step through a control network (C) and return protocol buffer point objects
Step through a control network (C) and return protocol buffer point objects
Parameters
Parameters
----------
----------
graphs
: list
obj
: list
of iterable objects (dataframes) with the appropriate
of iterable objects (dataframes) with the appropriate
attributes: point_id, point_type, serial, measure_type, x, y required.
attributes: point_id, point_type, serial, measure_type, x, y required.
The entries in the list must support grouping by the point_id attribute.
The entries in the list must support grouping by the point_id attribute.
...
@@ -197,21 +197,20 @@ class IsisStore(object):
...
@@ -197,21 +197,20 @@ class IsisStore(object):
# TODO: Rewrite using apply syntax for performance
# TODO: Rewrite using apply syntax for performance
point_sizes
=
[]
point_sizes
=
[]
point_messages
=
[]
point_messages
=
[]
for
graph
in
graphs
:
for
df
in
obj
:
for
i
,
control_point_id
in
enumerate
(
graph
.
point_nodes
):
for
i
,
g
in
df
.
groupby
(
'
point_id
'
):
control_point
=
graph
.
node
[
control_point_id
]
point_spec
=
cnf
.
ControlPointFileEntryV0002
()
point_spec
=
cnf
.
ControlPointFileEntryV0002
()
point_spec
.
id
=
_set_pid
(
control_point
[
'
pointid
'
])
point_spec
.
id
=
_set_pid
(
self
.
pointid
)
for
attr
,
attrtype
in
self
.
point_attrs
:
for
attr
,
attrtype
in
self
.
point_attrs
:
if
attr
in
control_point
.
keys
()
:
if
attr
in
g
.
columns
:
# As per protobuf docs for assigning to a repeated field.
# As per protobuf docs for assigning to a repeated field.
if
attr
==
'
aprioriCovar
'
:
if
attr
==
'
aprioriCovar
'
:
arr
=
control_point
[
'
aprioriCovar
'
]
arr
=
g
.
iloc
[
0
]
[
'
aprioriCovar
'
]
point_spec
.
aprioriCovar
.
extend
(
arr
.
ravel
().
tolist
())
point_spec
.
aprioriCovar
.
extend
(
arr
.
ravel
().
tolist
())
else
:
else
:
# The third argument casts the value to the correct type
setattr
(
point_spec
,
attr
,
attrtype
(
g
.
iloc
[
0
][
attr
]))
setattr
(
point_spec
,
attr
,
attrtype
(
control_point
[
attr
]))
point_spec
.
type
=
int
(
g
.
point_type
.
iat
[
0
])
point_spec
.
type
=
int
(
control_point
.
get
(
'
point_type
'
,
2
))
# The reference index should always be the image with the lowest index
# The reference index should always be the image with the lowest index
point_spec
.
referenceIndex
=
0
point_spec
.
referenceIndex
=
0
...
@@ -219,19 +218,16 @@ class IsisStore(object):
...
@@ -219,19 +218,16 @@ class IsisStore(object):
# A single extend call is cheaper than many add calls to pack points
# A single extend call is cheaper than many add calls to pack points
measure_iterable
=
[]
measure_iterable
=
[]
for
j
,
control_measure_id
in
graph
.
edges
(
control_point_id
):
for
node_id
,
m
in
g
.
iterrows
():
control_measure
=
graph
.
node
[
control_measure_id
]
if
control_measure
[
'
node_type
'
]
!=
'
correspondence
'
:
continue
measure_spec
=
point_spec
.
Measure
()
measure_spec
=
point_spec
.
Measure
()
# For all of the attributes, set if they are an dict accessible attr of the obj.
# For all of the attributes, set if they are an dict accessible attr of the obj.
for
attr
,
attrtype
in
self
.
measure_attrs
:
for
attr
,
attrtype
in
self
.
measure_attrs
:
if
attr
in
control_measure
.
keys
():
setattr
(
measure_spec
,
attr
,
attrtype
(
control_measure
[
attr
]))
measure_spec
.
type
=
int
(
control_measure
[
'
measure_type
'
])
if
attr
in
g
.
columns
:
measure_spec
.
line
=
float
(
control_measure
[
'
y
'
])
setattr
(
measure_spec
,
attr
,
attrtype
(
m
[
attr
]))
measure_spec
.
sample
=
float
(
control_measure
[
'
x
'
])
measure_spec
.
type
=
int
(
m
.
measure_type
)
measure_spec
.
line
=
m
.
y
measure_spec
.
sample
=
m
.
x
measure_iterable
.
append
(
measure_spec
)
measure_iterable
.
append
(
measure_spec
)
self
.
nmeasures
+=
1
self
.
nmeasures
+=
1
point_spec
.
measures
.
extend
(
measure_iterable
)
point_spec
.
measures
.
extend
(
measure_iterable
)
...
...
This diff is collapsed.
Click to expand it.
plio/io/tests/test_io_controlnetwork.py
+
29
−
25
View file @
3307cc8d
...
@@ -3,7 +3,6 @@ import sys
...
@@ -3,7 +3,6 @@ import sys
import
unittest
import
unittest
from
time
import
strftime
,
gmtime
from
time
import
strftime
,
gmtime
import
networkx
as
nx
import
pandas
as
pd
import
pandas
as
pd
import
pvl
import
pvl
...
@@ -24,35 +23,40 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
...
@@ -24,35 +23,40 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
cls
.
serials
=
[
'
APOLLO15/METRIC/{}
'
.
format
(
i
)
for
i
in
serial_times
.
values
()]
cls
.
serials
=
[
'
APOLLO15/METRIC/{}
'
.
format
(
i
)
for
i
in
serial_times
.
values
()]
columns
=
[
'
point_id
'
,
'
point_type
'
,
'
serialnumber
'
,
'
measure_type
'
,
'
x
'
,
'
y
'
,
'
node_id
'
]
columns
=
[
'
point_id
'
,
'
point_type
'
,
'
serialnumber
'
,
'
measure_type
'
,
'
x
'
,
'
y
'
,
'
node_id
'
]
G
=
nx
.
Graph
()
data
=
[]
G
.
add_node
(
0
,
node_type
=
'
image
'
)
G
.
add_node
(
1
,
node_type
=
'
image
'
)
G
.
add_edge
(
0
,
1
)
G
.
point_nodes
=
[]
for
i
in
range
(
cls
.
npts
):
for
i
in
range
(
cls
.
npts
):
i
+=
1
data
.
append
((
i
,
2
,
cls
.
serials
[
0
],
2
,
0
,
0
,
0
))
G
.
point_nodes
.
append
(
i
*
100
)
data
.
append
((
i
,
2
,
cls
.
serials
[
1
],
2
,
0
,
0
,
1
))
G
.
add_node
(
i
*
100
,
node_type
=
'
point
'
,
pointid
=
i
*
100
,
subpixel
=
False
)
G
.
add_edge
(
i
*
100
,
0
)
G
.
add_edge
(
i
*
100
,
1
)
# Add a single correspondence
G
.
add_node
(
i
*
1000
,
x
=
i
*
.
5
,
y
=
i
*
.
5
,
id
=
i
*
1000
,
node_type
=
'
correspondence
'
,
measure_type
=
2
,
serialnumber
=
cls
.
serials
[
0
])
G
.
add_edge
(
i
*
1000
,
i
*
100
)
# Add a second correspondence
G
.
add_node
(
i
*
2000
,
x
=
i
*
.
5
,
y
=
i
*
.
5
,
id
=
i
*
2000
,
node_type
=
'
correspondence
'
,
measure_type
=
2
,
serialnumber
=
cls
.
serials
[
1
])
G
.
add_edge
(
i
*
2000
,
i
*
100
)
dfs
=
[
pd
.
DataFrame
(
data
,
columns
=
columns
)]
cls
.
creation_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
cls
.
creation_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
cls
.
modified_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
cls
.
modified_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
io_controlnetwork
.
to_isis
(
'
test.net
'
,
[
G
]
,
mode
=
'
wb
'
,
targetname
=
'
Moon
'
)
io_controlnetwork
.
to_isis
(
'
test.net
'
,
dfs
,
mode
=
'
wb
'
,
targetname
=
'
Moon
'
)
cls
.
header_message_size
=
78
cls
.
header_message_size
=
78
cls
.
point_start_byte
=
65614
# 66949
cls
.
point_start_byte
=
65614
# 66949
def
test_create_buffer_header
(
self
):
def
test_create_buffer_header
(
self
):
self
.
npts
=
5
serial_times
=
{
295
:
'
1971-07-31T01:24:11.754
'
,
296
:
'
1971-07-31T01:24:36.970
'
}
self
.
serials
=
[
'
APOLLO15/METRIC/{}
'
.
format
(
i
)
for
i
in
serial_times
.
values
()]
columns
=
[
'
point_id
'
,
'
point_type
'
,
'
serialnumber
'
,
'
measure_type
'
,
'
x
'
,
'
y
'
,
'
node_id
'
]
data
=
[]
for
i
in
range
(
self
.
npts
):
data
.
append
((
i
,
2
,
self
.
serials
[
0
],
2
,
0
,
0
,
0
))
data
.
append
((
i
,
2
,
self
.
serials
[
1
],
2
,
0
,
0
,
1
))
dfs
=
[
pd
.
DataFrame
(
data
,
columns
=
columns
)]
self
.
creation_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
self
.
modified_date
=
strftime
(
"
%Y-%m-%d %H:%M:%S
"
,
gmtime
())
io_controlnetwork
.
to_isis
(
'
test.net
'
,
dfs
,
mode
=
'
wb
'
,
targetname
=
'
Moon
'
)
self
.
header_message_size
=
78
self
.
header_message_size
=
78
self
.
point_start_byte
=
661
0
4
# 66949
self
.
point_start_byte
=
6
5
614
# 66949
with
open
(
'
test.net
'
,
'
rb
'
)
as
f
:
with
open
(
'
test.net
'
,
'
rb
'
)
as
f
:
f
.
seek
(
io_controlnetwork
.
HEADERSTARTBYTE
)
f
.
seek
(
io_controlnetwork
.
HEADERSTARTBYTE
)
...
@@ -69,16 +73,17 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
...
@@ -69,16 +73,17 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
self
.
assertEqual
(
'
None
'
,
header_protocol
.
description
)
self
.
assertEqual
(
'
None
'
,
header_protocol
.
description
)
self
.
assertEqual
(
self
.
modified_date
,
header_protocol
.
lastModified
)
self
.
assertEqual
(
self
.
modified_date
,
header_protocol
.
lastModified
)
#Repeating
#Repeating
self
.
assertEqual
([
13
7
]
*
self
.
npts
,
header_protocol
.
pointMessageSizes
)
self
.
assertEqual
([
13
5
]
*
self
.
npts
,
header_protocol
.
pointMessageSizes
)
def
test_create_point
(
self
):
def
test_create_point
(
self
):
with
open
(
'
test.net
'
,
'
rb
'
)
as
f
:
with
open
(
'
test.net
'
,
'
rb
'
)
as
f
:
f
.
seek
(
self
.
point_start_byte
)
f
.
seek
(
self
.
point_start_byte
)
for
i
,
length
in
enumerate
(
5
*
[
13
7
]
):
for
i
,
length
in
enumerate
([
13
5
]
*
self
.
npts
):
point_protocol
=
cnf
.
ControlPointFileEntryV0002
()
point_protocol
=
cnf
.
ControlPointFileEntryV0002
()
raw_point
=
f
.
read
(
length
)
raw_point
=
f
.
read
(
length
)
point_protocol
.
ParseFromString
(
raw_point
)
point_protocol
.
ParseFromString
(
raw_point
)
self
.
assertEqual
(
str
(
(
i
+
1
)
*
100
),
point_protocol
.
id
)
self
.
assertEqual
(
str
(
i
),
point_protocol
.
id
)
self
.
assertEqual
(
2
,
point_protocol
.
type
)
self
.
assertEqual
(
2
,
point_protocol
.
type
)
for
m
in
point_protocol
.
measures
:
for
m
in
point_protocol
.
measures
:
self
.
assertTrue
(
m
.
serialnumber
in
self
.
serials
)
self
.
assertTrue
(
m
.
serialnumber
in
self
.
serials
)
...
@@ -94,12 +99,11 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
...
@@ -94,12 +99,11 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
self
.
assertEqual
(
10
,
mpoints
)
self
.
assertEqual
(
10
,
mpoints
)
points_bytes
=
find_in_dict
(
pvl_header
,
'
PointsBytes
'
)
points_bytes
=
find_in_dict
(
pvl_header
,
'
PointsBytes
'
)
self
.
assertEqual
(
6
8
5
,
points_bytes
)
self
.
assertEqual
(
6
7
5
,
points_bytes
)
points_start_byte
=
find_in_dict
(
pvl_header
,
'
PointsStartByte
'
)
points_start_byte
=
find_in_dict
(
pvl_header
,
'
PointsStartByte
'
)
self
.
assertEqual
(
self
.
point_start_byte
,
points_start_byte
)
self
.
assertEqual
(
self
.
point_start_byte
,
points_start_byte
)
@classmethod
@classmethod
def
tearDownClass
(
cls
):
def
tearDownClass
(
cls
):
#os.remove('test.net')
os
.
remove
(
'
test.net
'
)
pass
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