8
8
* Property: European Space Agency (ESA)
9
9
* Developed by: Elecnor Deimos
10
10
* Author: C. Álvaro Arroyo Parejo
11
- * Date: 02-11-2021
11
+ * Date: 21-08-2022
12
12
13
- © Copyright [European Space Agency][2021 ]
13
+ © Copyright [European Space Agency][2022 ]
14
14
All rights reserved
15
15
"""
16
16
19
19
import re
20
20
import pytest
21
21
22
+ import numpy as np
22
23
import requests
23
24
import pandas as pd
24
25
from pandas ._testing import assert_frame_equal , assert_series_equal
25
26
import pandas .api .types as ptypes
26
27
27
- from astroquery .utils .testing_tools import MockResponse
28
+ from astropy .table import Table
29
+ from astropy .time import Time
28
30
29
31
from astroquery .esa .neocc .__init__ import conf
30
32
from astroquery .esa .neocc import lists
38
40
39
41
# Disable warning in pylint related to monkeypath functions
40
42
# pylint: disable=W0613, W0621
43
+ class MockResponse (object ):
44
+
45
+ def __init__ (self , content ):
46
+ self .content = content
47
+
41
48
class MockResponseESANEOCC (MockResponse ):
42
49
"""MockResponse is an object intended to have any of the attributes
43
50
that a normal requests.Response object would have. However, it
@@ -164,9 +171,10 @@ def test_parse_risk(patch_get):
164
171
isinstance (risk_list_special , pd .DataFrame )
165
172
# Assert is not empty
166
173
assert not risk_list .empty and \
167
- risk_list_special .empty
174
+ not risk_list_special .empty
168
175
# Check size of the list (rows, columns)
169
176
assert risk_list .shape == (1216 , 12 )
177
+ assert risk_list_special .shape == (2 , 8 )
170
178
# Assert columns
171
179
risk_columns = ['Object Name' , 'Diameter in m' , '*=Y' ,
172
180
'Date/Time' , 'IP max' , 'PS max' , 'TS' ,
@@ -181,14 +189,20 @@ def test_parse_risk(patch_get):
181
189
'Vel in km/s' , 'IP cum' , 'PS cum' ]
182
190
assert all (ptypes .is_float_dtype (risk_list [cols1 ])\
183
191
for cols1 in float_cols )
192
+ assert all (ptypes .is_float_dtype (risk_list_special [cols1 ])\
193
+ for cols1 in float_cols [1 :4 ])
184
194
# int64
185
195
int_cols = ['TS' , 'First year' , 'Last year' ]
186
196
assert all (ptypes .is_int64_dtype (risk_list [cols2 ])\
187
197
for cols2 in int_cols )
198
+ assert ptypes .is_int64_dtype (risk_list_special ['Diameter in m' ])
188
199
# Object
189
200
object_cols = ['Object Name' , '*=Y' ]
190
201
assert all (ptypes .is_object_dtype (risk_list [cols3 ])\
191
202
for cols3 in object_cols )
203
+ assert all (ptypes .is_object_dtype (risk_list_special [cols3 ])\
204
+ for cols3 in object_cols )
205
+ assert ptypes .is_object_dtype (risk_list_special ['TS' ])
192
206
# Datetime
193
207
assert ptypes .is_datetime64_ns_dtype (
194
208
risk_list ['Date/Time' ])
@@ -487,24 +501,34 @@ def test_parse_impacts(patch_get):
487
501
"""Check data: impacted objects list
488
502
"""
489
503
impact_list = neocc .query_list ("impacted_objects" )
490
- # Assert is a pandas DataFrame
491
- assert isinstance (impact_list , pd . DataFrame )
504
+ # Assert is a astropy.table.Table
505
+ assert isinstance (impact_list , Table )
492
506
# Assert dataframe is not empty, columns names and length
493
- assert not impact_list .empty
494
- # Check size of the list
495
- assert impact_list .shape == (4 , 2 )
496
- # Assert columns data types
497
- # Object
498
- assert ptypes .is_object_dtype (impact_list [0 ])
499
- # Datetime
500
- assert ptypes .is_datetime64_ns_dtype (impact_list [1 ])
501
- # Assert Data frame
502
- impacts_data = pd .DataFrame (data = [['2008TC3' , '2008-10-07 00:00:00' ],
503
- ['2018LA' , '2018-06-02 00:00:00' ],
504
- ['2014AA' , '2014-01-02 00:00:00' ],
505
- ['2019MO' , '2019-06-22 00:00:00' ]])
506
- impacts_data [1 ] = pd .to_datetime (impacts_data [1 ])
507
- assert_frame_equal (impacts_data , impact_list )
507
+ assert len (impact_list ) != 0
508
+ # Check the number of rows
509
+ assert len (impact_list ) == 5
510
+ # Check th number of columns
511
+ assert len (impact_list .columns ) == 6
512
+ # Assert Table
513
+ column_names = ['Object designator' , 'Diameter in m' ,
514
+ 'Impact date/time in UTC' , 'Impact Velocity in km/s' ,
515
+ 'Estimated energy in Mt' , 'Measured energy in Mt' ]
516
+ column_0 = ['2022EB5' , '2019MO' , '2018LA' , '2014AA' , '2008TC3' ]
517
+ column_1 = ['1.9*' , '5*' , '2.8*' , '2.3*' , '3*' ]
518
+ column_2 = Time (['2022-03-11 21:22:00.000' , '2019-06-22 21:30:00.000' ,
519
+ '2018-06-02 16:44:00.000' , '2014-01-02 02:30:00.000' ,
520
+ '2008-10-07 02:45:00.000' ], format = 'iso' , scale = 'utc' )
521
+ column_3 = [18.53 , 16.34 , 16.98 , 11.97 , 11.77 ]
522
+ column_4 = [0.000296 , 0.00382 , 0.00089 , 0.000244 , 0.000677 ]
523
+ column_5 = [0.004 , 0.006 , 0.00098 , np .nan , 0.001 ]
524
+
525
+ assert impact_list .colnames == column_names
526
+ assert (impact_list ['Object designator' ]== column_0 ).all ()
527
+ assert (impact_list ['Diameter in m' ] == column_1 ).all ()
528
+ assert (impact_list ['Impact date/time in UTC' ] == column_2 ).all ()
529
+ assert (impact_list ['Impact Velocity in km/s' ] == column_3 ).all ()
530
+ assert (impact_list ['Estimated energy in Mt' ] == column_4 ).all ()
531
+ assert (impact_list ['Measured energy in Mt' ].data == column_5 ).all ()
508
532
509
533
510
534
def test_parse_catalogues (patch_get ):
@@ -1167,29 +1191,29 @@ def test_tabs_orbit_properties(patch_get):
1167
1191
assert ast1 .epoch , ast2 .epoch == '59400.000000000 MJD'
1168
1192
mag1 = pd .DataFrame ([[18.937 , 0.150 ]], index = ['MAG' ],
1169
1193
columns = ['' , '' ])
1170
- mag2 = pd .DataFrame ([[28.241 , 0.150 ]], index = ['MAG' ],
1194
+ mag2 = pd .DataFrame ([[28.211 , 0.150 ]], index = ['MAG' ],
1171
1195
columns = ['' , '' ])
1172
- assert_frame_equal (ast1 .mag , mag1 )
1173
- assert_frame_equal (ast2 .mag , mag2 )
1196
+ assert_frame_equal (ast1 .mag , mag1 ) and \
1197
+ assert_frame_equal (ast2 .mag , mag2 )
1174
1198
1175
1199
lsp1 = pd .DataFrame ([[1 , 2 , 7 , 2 ]], index = ['LSP' ],
1176
1200
columns = ['model used' , 'number of model parameters' ,
1177
1201
'dimension' , 'list of parameters determined' ])
1178
1202
lsp2 = pd .DataFrame ([[1 , 2 , 8 , 1 , 2 ]], index = ['LSP' ],
1179
1203
columns = ['model used' , 'number of model parameters' ,
1180
1204
'dimension' , 'list of parameters determined' , '' ])
1181
- assert_frame_equal (ast1 .lsp , lsp1 )
1182
- assert_frame_equal (ast2 .lsp , lsp2 )
1205
+ assert_frame_equal (ast1 .lsp , lsp1 ) and \
1206
+ assert_frame_equal (ast2 .lsp , lsp2 )
1183
1207
1184
1208
ngr1 = pd .DataFrame ([[0.0 , - 2.90058798774592e-04 ]], index = ['NGR' ],
1185
1209
columns = ['Area-to-mass ratio in m^2/ton' ,
1186
1210
'Yarkovsky parameter in 1E-10au/day^2' ])
1187
- ngr2 = pd .DataFrame ([[3.92228537753657E -01 , - 5.47745799289690E -02 ]],
1211
+ ngr2 = pd .DataFrame ([[2.37035178629626e -01 , - 1.15784215281726e -02 ]],
1188
1212
index = ['NGR' ],
1189
1213
columns = ['Area-to-mass ratio in m^2/ton' ,
1190
1214
'Yarkovsky parameter in 1E-10au/day^2' ])
1191
- assert_frame_equal (ast1 .ngr , ngr1 )
1192
- assert_frame_equal (ast2 .ngr , ngr2 )
1215
+ assert_frame_equal (ast1 .ngr , ngr1 ) and \
1216
+ assert_frame_equal (ast2 .ngr , ngr2 )
1193
1217
# Check keplerian orbit properties
1194
1218
keplerian_columns = ['a' , 'e' , 'i' , 'long. node' ,
1195
1219
'arg. peric.' , 'mean anomaly' ]
@@ -1210,35 +1234,21 @@ def test_tabs_orbit_properties(patch_get):
1210
1234
assert ast1 .orb_type == 'Aten'
1211
1235
matrix_idx = ['a' , 'e' , 'i' , 'long. node' , 'arg. peric' , 'M' ,
1212
1236
'Yarkovsky parameter' ]
1213
- cov = pd .DataFrame ([[ 7.333454e-21 , - 1.072918e-19 , - 4.176672e-18 ,
1214
- 9.884855e-17 , - 1.661416e-16 , 6.524001e-17 , 1.597276e-16 ],
1215
- [- 1.072918e-19 , 2.019718e-18 , 7.453443e-17 ,
1216
- - 2.218919e-15 , 3.445852e-15 , - 1.246500e-15 , - 1.955611e-15 ],
1217
- [- 4.176672e-18 , 7.453443e-17 , 2.560049e-14 ,
1218
- - 1.198457e-12 , 1.308002e-12 , - 1.641254e-13 , - 2.361241e-13 ],
1219
- [ 9.884855e-17 , - 2.218919e-15 , - 1.198457e-12 ,
1220
- 6.206716e-11 , - 6.634024e-11 , 7.109227e-12 , 1.033311e-11 ],
1221
- [- 1.661416e-16 , 3.445852e-15 , 1.308002e-12 ,
1222
- - 6.634024e-11 , 7.155222e-11 , - 8.205136e-12 , - 1.199513e-11 ],
1223
- [ 6.524001e-17 , - 1.246500e-15 , - 1.641254e-13 ,
1224
- 7.109227e-12 , - 8.205136e-12 , 1.397697e-12 , 2.027096e-12 ],
1225
- [ 1.597276e-16 , - 1.955611e-15 , - 2.361241e-13 ,
1226
- 1.033311e-11 , - 1.199513e-11 , 2.027096e-12 , 5.549616e-12 ]],
1237
+ cov = pd .DataFrame ([[ 7.333454e-21 , - 1.072918e-19 , - 4.176672e-18 , 9.884855e-17 , - 1.661416e-16 , 6.524001e-17 , 1.597276e-16 ],
1238
+ [- 1.072918e-19 , 2.019718e-18 , 7.453443e-17 , - 2.218919e-15 , 3.445852e-15 , - 1.246500e-15 , - 1.955611e-15 ],
1239
+ [- 4.176672e-18 , 7.453443e-17 , 2.560049e-14 , - 1.198457e-12 , 1.308002e-12 , - 1.641254e-13 , - 2.361241e-13 ],
1240
+ [ 9.884855e-17 , - 2.218919e-15 , - 1.198457e-12 , 6.206716e-11 , - 6.634024e-11 , 7.109227e-12 , 1.033311e-11 ],
1241
+ [- 1.661416e-16 , 3.445852e-15 , 1.308002e-12 , - 6.634024e-11 , 7.155222e-11 , - 8.205136e-12 , - 1.199513e-11 ],
1242
+ [ 6.524001e-17 , - 1.246500e-15 , - 1.641254e-13 , 7.109227e-12 , - 8.205136e-12 , 1.397697e-12 , 2.027096e-12 ],
1243
+ [ 1.597276e-16 , - 1.955611e-15 , - 2.361241e-13 , 1.033311e-11 , - 1.199513e-11 , 2.027096e-12 , 5.549616e-12 ]],
1227
1244
index = matrix_idx , columns = matrix_idx )
1228
- cor = pd .DataFrame ([[ 1.000000 , - 0.881591 , - 0.304826 , 0.146516 ,
1229
- - 0.229357 , 0.644397 , 0.791761 ],
1230
- [- 0.881591 , 1.000000 , 0.327784 , - 0.198182 ,
1231
- 0.286642 , - 0.741892 , - 0.584125 ],
1232
- [- 0.304826 , 0.327784 , 1.000000 , - 0.950752 ,
1233
- 0.966435 , - 0.867651 , - 0.626448 ],
1234
- [ 0.146516 , - 0.198182 , - 0.950752 , 1.000000 ,
1235
- - 0.995485 , 0.763282 , 0.556761 ],
1236
- [- 0.229357 , 0.286642 , 0.966435 , - 0.995485 ,
1237
- 1.000000 , - 0.820479 , - 0.601952 ],
1238
- [ 0.644397 , - 0.741892 , - 0.867651 , 0.763282 ,
1239
- - 0.820479 , 1.000000 , 0.727841 ],
1240
- [ 0.791761 , - 0.584125 , - 0.626448 , 0.556761 ,
1241
- - 0.601952 , 0.727841 , 1.000000 ]],
1245
+ cor = pd .DataFrame ([[ 1.000000 , - 0.881591 , - 0.304826 , 0.146516 , - 0.229357 , 0.644397 , 0.791761 ],
1246
+ [- 0.881591 , 1.000000 , 0.327784 , - 0.198182 , 0.286642 , - 0.741892 , - 0.584125 ],
1247
+ [- 0.304826 , 0.327784 , 1.000000 , - 0.950752 , 0.966435 , - 0.867651 , - 0.626448 ],
1248
+ [ 0.146516 , - 0.198182 , - 0.950752 , 1.000000 , - 0.995485 , 0.763282 , 0.556761 ],
1249
+ [- 0.229357 , 0.286642 , 0.966435 , - 0.995485 , 1.000000 , - 0.820479 , - 0.601952 ],
1250
+ [ 0.644397 , - 0.741892 , - 0.867651 , 0.763282 , - 0.820479 , 1.000000 , 0.727841 ],
1251
+ [ 0.791761 , - 0.584125 , - 0.626448 , 0.556761 , - 0.601952 , 0.727841 , 1.000000 ]],
1242
1252
index = matrix_idx , columns = matrix_idx )
1243
1253
assert_frame_equal (ast1 .cov , cov )
1244
1254
assert_frame_equal (ast1 .cor , cor )
@@ -1265,40 +1275,24 @@ def test_tabs_orbit_properties(patch_get):
1265
1275
assert_frame_equal (ast2 .eig , eig )
1266
1276
assert_frame_equal (ast2 .wea , wea )
1267
1277
1268
- cov_equ = pd .DataFrame ([[9.045991e-15 , - 4.310036e-15 , - 3.623923e-15 , 7.951277e-16 ,
1269
- 2.433447e-16 , - 4.077556e-11 , 1.856604e-09 , 1.127419e-10 ],
1270
- [- 4.310036e-15 , 2.852694e-15 , 1.695013e-15 , - 5.107617e-16 ,
1271
- - 1.582486e-16 , 2.134254e-11 , - 8.850409e-10 , - 3.395062e-11 ],
1272
- [- 3.623923e-15 , 1.695013e-15 , 2.002430e-15 , - 3.168327e-16 ,
1273
- - 9.416270e-17 , 1.919931e-11 , - 1.458006e-09 , - 5.214811e-11 ],
1274
- [ 7.951277e-16 , - 5.107617e-16 , - 3.168327e-16 , 1.218404e-16 ,
1275
- 4.220573e-17 , - 3.756840e-12 , 1.121701e-10 , 5.572020e-12 ],
1276
- [ 2.433447e-16 , - 1.582486e-16 , - 9.416270e-17 , 4.220573e-17 ,
1277
- 1.540961e-17 , - 1.111871e-12 , 2.171817e-11 , 1.460839e-12 ],
1278
- [- 4.077556e-11 , 2.134254e-11 , 1.919931e-11 , - 3.756840e-12 ,
1279
- - 1.111871e-12 , 2.057036e-07 , - 1.270112e-05 , - 5.031737e-07 ],
1280
- [ 1.856604e-09 , - 8.850409e-10 , - 1.458006e-09 , 1.121701e-10 ,
1281
- 2.171817e-11 , - 1.270112e-05 , 1.474738e-03 , 3.420817e-05 ],
1282
- [ 1.127419e-10 , - 3.395062e-11 , - 5.214811e-11 , 5.572020e-12 ,
1283
- 1.460839e-12 , - 5.031737e-07 , 3.420817e-05 , 2.020746e-06 ]],
1278
+ cov_equ = pd .DataFrame ([[9.045991e-15 , - 4.310036e-15 , - 3.623923e-15 , 7.951277e-16 , 2.433447e-16 , - 4.077556e-11 , 1.856604e-09 , 1.127419e-10 ],
1279
+ [- 4.310036e-15 , 2.852694e-15 , 1.695013e-15 , - 5.107617e-16 , - 1.582486e-16 , 2.134254e-11 , - 8.850409e-10 , - 3.395062e-11 ],
1280
+ [- 3.623923e-15 , 1.695013e-15 , 2.002430e-15 , - 3.168327e-16 , - 9.416270e-17 , 1.919931e-11 , - 1.458006e-09 , - 5.214811e-11 ],
1281
+ [ 7.951277e-16 , - 5.107617e-16 , - 3.168327e-16 , 1.218404e-16 , 4.220573e-17 , - 3.756840e-12 , 1.121701e-10 , 5.572020e-12 ],
1282
+ [ 2.433447e-16 , - 1.582486e-16 , - 9.416270e-17 , 4.220573e-17 , 1.540961e-17 , - 1.111871e-12 , 2.171817e-11 , 1.460839e-12 ],
1283
+ [- 4.077556e-11 , 2.134254e-11 , 1.919931e-11 , - 3.756840e-12 , - 1.111871e-12 , 2.057036e-07 , - 1.270112e-05 , - 5.031737e-07 ],
1284
+ [ 1.856604e-09 , - 8.850409e-10 , - 1.458006e-09 , 1.121701e-10 , 2.171817e-11 , - 1.270112e-05 , 1.474738e-03 , 3.420817e-05 ],
1285
+ [ 1.127419e-10 , - 3.395062e-11 , - 5.214811e-11 , 5.572020e-12 , 1.460839e-12 , - 5.031737e-07 , 3.420817e-05 , 2.020746e-06 ]],
1284
1286
index = eig_wea_name , columns = eig_wea_name )
1285
1287
assert_frame_equal (ast2 .cov , cov_equ )
1286
- nor = pd .DataFrame ([[1.510392e+24 , 3.010614e+22 , - 2.847190e+22 , - 3.923755e+22 ,
1287
- 7.119194e+22 , 3.165996e+20 , 1.559455e+18 , - 3.200500e+19 ],
1288
- [ 3.010614e+22 , 6.121981e+20 , - 5.623474e+20 , - 7.986576e+20 ,
1289
- 1.446145e+21 , 6.307818e+18 , 3.107870e+16 , - 6.382017e+17 ],
1290
- [- 2.847190e+22 , - 5.623474e+20 , 5.389508e+20 , 7.325948e+20 ,
1291
- - 1.330387e+21 , - 5.969337e+18 , - 2.939908e+16 , 6.032061e+17 ],
1292
- [- 3.923755e+22 , - 7.986576e+20 , 7.325948e+20 , 1.042952e+21 ,
1293
- - 1.888458e+21 , - 8.220830e+18 , - 4.050471e+16 , 8.317909e+17 ],
1294
- [ 7.119194e+22 , 1.446145e+21 , - 1.330387e+21 , - 1.888458e+21 ,
1295
- 3.420540e+21 , 1.491642e+19 , 7.349240e+16 , - 1.509124e+18 ],
1296
- [ 3.165996e+20 , 6.307818e+18 , - 5.969337e+18 , - 8.220830e+18 ,
1297
- 1.491642e+19 , 6.636445e+16 , 3.268853e+14 , - 6.708642e+15 ],
1298
- [ 1.559455e+18 , 3.107870e+16 , - 2.939908e+16 , - 4.050471e+16 ,
1299
- 7.349240e+16 , 3.268853e+14 , 1.610115e+12 , - 3.304453e+13 ],
1300
- [- 3.200500e+19 , - 6.382017e+17 , 6.032061e+17 , 8.317909e+17 ,
1301
- - 1.509124e+18 , - 6.708642e+15 , - 3.304453e+13 , 6.781869e+14 ]],
1288
+ nor = pd .DataFrame ([[1.510392e+24 , 3.010614e+22 , - 2.847190e+22 , - 3.923755e+22 , 7.119194e+22 , 3.165996e+20 , 1.559455e+18 , - 3.200500e+19 ],
1289
+ [ 3.010614e+22 , 6.121981e+20 , - 5.623474e+20 , - 7.986576e+20 , 1.446145e+21 , 6.307818e+18 , 3.107870e+16 , - 6.382017e+17 ],
1290
+ [- 2.847190e+22 , - 5.623474e+20 , 5.389508e+20 , 7.325948e+20 , - 1.330387e+21 , - 5.969337e+18 , - 2.939908e+16 , 6.032061e+17 ],
1291
+ [- 3.923755e+22 , - 7.986576e+20 , 7.325948e+20 , 1.042952e+21 , - 1.888458e+21 , - 8.220830e+18 , - 4.050471e+16 , 8.317909e+17 ],
1292
+ [ 7.119194e+22 , 1.446145e+21 , - 1.330387e+21 , - 1.888458e+21 , 3.420540e+21 , 1.491642e+19 , 7.349240e+16 , - 1.509124e+18 ],
1293
+ [ 3.165996e+20 , 6.307818e+18 , - 5.969337e+18 , - 8.220830e+18 , 1.491642e+19 , 6.636445e+16 , 3.268853e+14 , - 6.708642e+15 ],
1294
+ [ 1.559455e+18 , 3.107870e+16 , - 2.939908e+16 , - 4.050471e+16 , 7.349240e+16 , 3.268853e+14 , 1.610115e+12 , - 3.304453e+13 ],
1295
+ [- 3.200500e+19 , - 6.382017e+17 , 6.032061e+17 , 8.317909e+17 , - 1.509124e+18 , - 6.708642e+15 , - 3.304453e+13 , 6.781869e+14 ]],
1302
1296
index = eig_wea_name , columns = eig_wea_name )
1303
1297
assert_frame_equal (ast2 .nor , nor )
1304
1298
@@ -1320,7 +1314,6 @@ def test_tabs_ephemerides(patch_get):
1320
1314
'2020/09/02 00:00 UTC' , '5 hours' ,
1321
1315
(5 , 26 )]
1322
1316
}
1323
-
1324
1317
# Assert blank file
1325
1318
with pytest .raises (KeyError ):
1326
1319
neocc .query_object (name = 'foo' , tab = 'ephemerides' ,
0 commit comments