mt-metadata 0.3.7__py2.py3-none-any.whl → 0.3.9__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mt-metadata might be problematic. Click here for more details.
- mt_metadata/__init__.py +1 -1
- mt_metadata/data/transfer_functions/test.edi +28 -28
- mt_metadata/timeseries/stationxml/xml_channel_mt_channel.py +16 -3
- mt_metadata/transfer_functions/core.py +19 -12
- mt_metadata/transfer_functions/io/edi/edi.py +18 -7
- mt_metadata/transfer_functions/processing/aurora/decimation_level.py +5 -5
- mt_metadata/transfer_functions/processing/fourier_coefficients/decimation.py +10 -9
- mt_metadata/transfer_functions/tf/standards/transfer_function.json +1 -1
- mt_metadata/utils/list_dict.py +19 -12
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/METADATA +11 -3
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/RECORD +15 -15
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/AUTHORS.rst +0 -0
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/LICENSE +0 -0
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/WHEEL +0 -0
- {mt_metadata-0.3.7.dist-info → mt_metadata-0.3.9.dist-info}/top_level.txt +0 -0
mt_metadata/__init__.py
CHANGED
|
@@ -39,7 +39,7 @@ you should only have to changes these dictionaries.
|
|
|
39
39
|
|
|
40
40
|
__author__ = """Jared Peacock"""
|
|
41
41
|
__email__ = "jpeacock@usgs.gov"
|
|
42
|
-
__version__ = "0.3.
|
|
42
|
+
__version__ = "0.3.9"
|
|
43
43
|
|
|
44
44
|
# =============================================================================
|
|
45
45
|
# Imports
|
|
@@ -191,20 +191,20 @@
|
|
|
191
191
|
4.200000e-04 3.400000e-04
|
|
192
192
|
>!****IMPEDANCE ROTATION ANGLES****!
|
|
193
193
|
>ZROT // 80
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
194
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
195
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
196
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
197
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
198
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
199
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
200
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
201
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
202
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
203
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
204
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
205
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
206
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
207
|
+
5.000000e+00 5.000000e+00
|
|
208
208
|
>!****IMPEDANCES****!
|
|
209
209
|
>ZXXR ROT=ZROT // 80
|
|
210
210
|
-2.476323e-02 -3.056975e-02 -3.186906e-02 -2.062529e-02 -1.577238e-02 -6.750678e-03
|
|
@@ -388,20 +388,20 @@
|
|
|
388
388
|
3.180702e-03 3.179844e-03
|
|
389
389
|
>!****TIPPER ROTATION ANGLES****!
|
|
390
390
|
>TROT // 80
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
391
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
392
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
393
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
394
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
395
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
396
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
397
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
398
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
399
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
400
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
401
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
402
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
403
|
+
5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00 5.000000e+00
|
|
404
|
+
5.000000e+00 5.000000e+00
|
|
405
405
|
>!****TIPPER****!
|
|
406
406
|
>TXR.EXP ROT=TROT // 80
|
|
407
407
|
-2.867413e+02 -2.586491e+02 -2.495227e+02 -2.326995e+02 -2.074678e+02 -1.833140e+02
|
|
@@ -592,6 +592,7 @@ class XMLChannelMTChannel(BaseTranslator):
|
|
|
592
592
|
:return:
|
|
593
593
|
"""
|
|
594
594
|
original_sensor_type = sensor.type
|
|
595
|
+
original_sensor_description = sensor.description
|
|
595
596
|
# set sensor_type to be a string if it is None
|
|
596
597
|
if original_sensor_type is None:
|
|
597
598
|
sensor_type = "" # make a string
|
|
@@ -600,16 +601,28 @@ class XMLChannelMTChannel(BaseTranslator):
|
|
|
600
601
|
else:
|
|
601
602
|
sensor_type = copy.deepcopy(original_sensor_type)
|
|
602
603
|
|
|
604
|
+
if original_sensor_description is None:
|
|
605
|
+
sensor_description = "" # make a string
|
|
606
|
+
else:
|
|
607
|
+
sensor_description = copy.deepcopy(original_sensor_type)
|
|
608
|
+
|
|
609
|
+
|
|
603
610
|
if sensor_type.lower() in self.understood_sensor_types:
|
|
604
611
|
return sensor_type
|
|
605
612
|
else:
|
|
606
613
|
self.logger.warning(f" sensor {sensor} type {sensor.type} not in {self.understood_sensor_types}")
|
|
607
614
|
|
|
608
615
|
# Try handling Bartington FGM at Earthscope ... this is a place holder for handling non-standard cases
|
|
609
|
-
if
|
|
610
|
-
sensor_type = "magnetometer"
|
|
611
|
-
elif sensor_type.lower() == "bartington":
|
|
616
|
+
if sensor_type.lower() == "bartington":
|
|
612
617
|
sensor_type = "magnetometer"
|
|
618
|
+
if not sensor_type:
|
|
619
|
+
if sensor_description == "Bartington 3-Axis Fluxgate Sensor":
|
|
620
|
+
sensor_type = "magnetometer"
|
|
621
|
+
if sensor_description:
|
|
622
|
+
if ("bf-4" in sensor_description.lower()) & ("schlumberger" in sensor_description.lower()): # BSL-NCEDC
|
|
623
|
+
sensor_type = "magnetometer"
|
|
624
|
+
elif ("electric" in sensor_description.lower()) & ("dipole" in sensor_description.lower()): # BSL-NCEDC
|
|
625
|
+
sensor_type = "dipole"
|
|
613
626
|
|
|
614
627
|
|
|
615
628
|
# reset sensor_type to None it it was not handled
|
|
@@ -274,7 +274,7 @@ class TF:
|
|
|
274
274
|
)
|
|
275
275
|
self.logger.error(msg)
|
|
276
276
|
raise TypeError(msg)
|
|
277
|
-
return run_metadata
|
|
277
|
+
return run_metadata
|
|
278
278
|
|
|
279
279
|
def _validate_station_metadata(self, station_metadata):
|
|
280
280
|
"""
|
|
@@ -298,7 +298,7 @@ class TF:
|
|
|
298
298
|
)
|
|
299
299
|
self.logger.error(msg)
|
|
300
300
|
raise TypeError(msg)
|
|
301
|
-
return station_metadata
|
|
301
|
+
return station_metadata
|
|
302
302
|
|
|
303
303
|
def _validate_survey_metadata(self, survey_metadata):
|
|
304
304
|
"""
|
|
@@ -328,7 +328,7 @@ class TF:
|
|
|
328
328
|
)
|
|
329
329
|
self.logger.error(msg)
|
|
330
330
|
raise TypeError(msg)
|
|
331
|
-
return survey_metadata
|
|
331
|
+
return survey_metadata
|
|
332
332
|
|
|
333
333
|
### Properties ------------------------------------------------------------
|
|
334
334
|
@property
|
|
@@ -375,7 +375,9 @@ class TF:
|
|
|
375
375
|
"""
|
|
376
376
|
|
|
377
377
|
if station_metadata is not None:
|
|
378
|
-
station_metadata = self._validate_station_metadata(
|
|
378
|
+
station_metadata = self._validate_station_metadata(
|
|
379
|
+
station_metadata
|
|
380
|
+
)
|
|
379
381
|
|
|
380
382
|
runs = ListDict()
|
|
381
383
|
if self.run_metadata.id not in ["0", 0, None]:
|
|
@@ -1475,9 +1477,8 @@ class TF:
|
|
|
1475
1477
|
"""
|
|
1476
1478
|
self.station_metadata.id = validate_name(station_name)
|
|
1477
1479
|
if self.station_metadata.runs[0].id is None:
|
|
1478
|
-
r = self.station_metadata.runs
|
|
1480
|
+
r = self.station_metadata.runs.pop(None)
|
|
1479
1481
|
r.id = f"{self.station_metadata.id}a"
|
|
1480
|
-
self.station_metadata.runs.remove(None)
|
|
1481
1482
|
self.station_metadata.runs.append(r)
|
|
1482
1483
|
|
|
1483
1484
|
@property
|
|
@@ -1872,9 +1873,13 @@ class TF:
|
|
|
1872
1873
|
edi_obj.t = self.tipper.data
|
|
1873
1874
|
edi_obj.t_err = self.tipper_error.data
|
|
1874
1875
|
edi_obj.frequency = 1.0 / self.period
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1876
|
+
|
|
1877
|
+
if isinstance(self._rotation_angle, (int, float)):
|
|
1878
|
+
edi_obj.rotation_angle = np.repeat(
|
|
1879
|
+
self._rotation_angle, self.period.size
|
|
1880
|
+
)
|
|
1881
|
+
else:
|
|
1882
|
+
edi_obj.rotation_angle = self._rotation_angle
|
|
1878
1883
|
|
|
1879
1884
|
# fill from survey metadata
|
|
1880
1885
|
edi_obj.survey_metadata = self.survey_metadata
|
|
@@ -1939,6 +1944,7 @@ class TF:
|
|
|
1939
1944
|
"transfer_function_error": "tf_err",
|
|
1940
1945
|
"survey_metadata": "survey_metadata",
|
|
1941
1946
|
"station_metadata": "station_metadata",
|
|
1947
|
+
"_rotation_angle": "rotation_angle",
|
|
1942
1948
|
}
|
|
1943
1949
|
)
|
|
1944
1950
|
else:
|
|
@@ -1951,6 +1957,7 @@ class TF:
|
|
|
1951
1957
|
"tipper_error": "t_err",
|
|
1952
1958
|
"survey_metadata": "survey_metadata",
|
|
1953
1959
|
"station_metadata": "station_metadata",
|
|
1960
|
+
"_rotation_angle": "rotation_angle",
|
|
1954
1961
|
}
|
|
1955
1962
|
)
|
|
1956
1963
|
for tf_key, edi_key in k_dict.items():
|
|
@@ -2164,9 +2171,9 @@ class TF:
|
|
|
2164
2171
|
"""
|
|
2165
2172
|
zmm_kwargs = {}
|
|
2166
2173
|
zmm_kwargs["channel_nomenclature"] = self.channel_nomenclature
|
|
2167
|
-
zmm_kwargs[
|
|
2168
|
-
|
|
2169
|
-
|
|
2174
|
+
zmm_kwargs["inverse_channel_nomenclature"] = (
|
|
2175
|
+
self.inverse_channel_nomenclature
|
|
2176
|
+
)
|
|
2170
2177
|
if hasattr(self, "decimation_dict"):
|
|
2171
2178
|
zmm_kwargs["decimation_dict"] = self.decimation_dict
|
|
2172
2179
|
zmm_obj = ZMM(**zmm_kwargs)
|
|
@@ -252,6 +252,22 @@ class EDI(object):
|
|
|
252
252
|
return 1.0 / self.frequency
|
|
253
253
|
return None
|
|
254
254
|
|
|
255
|
+
def _assert_descending_frequency(self):
|
|
256
|
+
"""
|
|
257
|
+
Assert that the transfer function is ordered from high frequency to low
|
|
258
|
+
frequency.
|
|
259
|
+
|
|
260
|
+
"""
|
|
261
|
+
if self.frequency[0] < self.frequency[1]:
|
|
262
|
+
self.logger.debug(
|
|
263
|
+
"Ordered arrays to be arranged from high to low frequency"
|
|
264
|
+
)
|
|
265
|
+
self.frequency = self.frequency[::-1]
|
|
266
|
+
self.z = self.z[::-1]
|
|
267
|
+
self.z_err = self.z_err[::-1]
|
|
268
|
+
self.t = self.t[::-1]
|
|
269
|
+
self.t_err = self.t_err[::-1]
|
|
270
|
+
|
|
255
271
|
def read(self, fn=None, get_elevation=False):
|
|
256
272
|
"""
|
|
257
273
|
Read in an edi file and fill attributes of each section's classes.
|
|
@@ -456,13 +472,8 @@ class EDI(object):
|
|
|
456
472
|
except KeyError as error:
|
|
457
473
|
self.logger.debug(error)
|
|
458
474
|
# check for order of frequency, we want high togit low
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
"Ordered arrays to be arranged from high to low frequency"
|
|
462
|
-
)
|
|
463
|
-
self.frequency = self.frequency[::-1]
|
|
464
|
-
self.z = self.z[::-1]
|
|
465
|
-
self.z_err = self.z_err[::-1]
|
|
475
|
+
self._assert_descending_frequency()
|
|
476
|
+
|
|
466
477
|
try:
|
|
467
478
|
self.rotation_angle = np.array(data_dict["zrot"])
|
|
468
479
|
except KeyError:
|
|
@@ -31,7 +31,7 @@ attr_dict.add_dict(get_schema("estimator", SCHEMA_FN_PATHS), "estimator")
|
|
|
31
31
|
# =============================================================================
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
def df_from_bands(band_list):
|
|
34
|
+
def df_from_bands(band_list: list) -> pd.DataFrame:
|
|
35
35
|
"""
|
|
36
36
|
Utility function that transforms a list of bands into a dataframe
|
|
37
37
|
|
|
@@ -70,13 +70,13 @@ def df_from_bands(band_list):
|
|
|
70
70
|
out_df.reset_index(inplace=True, drop=True)
|
|
71
71
|
return out_df
|
|
72
72
|
|
|
73
|
-
def get_fft_harmonics(samples_per_window, sample_rate):
|
|
73
|
+
def get_fft_harmonics(samples_per_window: int, sample_rate: float) -> np.ndarray:
|
|
74
74
|
"""
|
|
75
75
|
Works for odd and even number of points.
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
Development notes:
|
|
78
|
+
Could be modified with kwargs to support one_sided, two_sided, ignore_dc
|
|
79
|
+
ignore_nyquist, and etc. Consider taking FrequencyBands as an argument.
|
|
80
80
|
|
|
81
81
|
Parameters
|
|
82
82
|
----------
|
|
@@ -319,6 +319,7 @@ class Decimation(Base):
|
|
|
319
319
|
required_channels = decimation_level.reference_channels
|
|
320
320
|
else:
|
|
321
321
|
required_channels = decimation_level.local_channels
|
|
322
|
+
|
|
322
323
|
try:
|
|
323
324
|
assert set(required_channels).issubset(self.channels_estimated)
|
|
324
325
|
except AssertionError:
|
|
@@ -326,7 +327,7 @@ class Decimation(Base):
|
|
|
326
327
|
f"required_channels for processing {required_channels} not available"
|
|
327
328
|
f"-- fc channels estimated are {self.channels_estimated}"
|
|
328
329
|
)
|
|
329
|
-
self.logger.
|
|
330
|
+
self.logger.info(msg)
|
|
330
331
|
return False
|
|
331
332
|
|
|
332
333
|
# anti_alias_filter
|
|
@@ -356,7 +357,7 @@ class Decimation(Base):
|
|
|
356
357
|
f"Sample rates do not agree: fc {self.sample_rate_decimation} differs from "
|
|
357
358
|
f"processing config {decimation_level.decimation.sample_rate}"
|
|
358
359
|
)
|
|
359
|
-
self.logger.
|
|
360
|
+
self.logger.info(msg)
|
|
360
361
|
return False
|
|
361
362
|
|
|
362
363
|
# method (fft, wavelet, etc.)
|
|
@@ -367,7 +368,7 @@ class Decimation(Base):
|
|
|
367
368
|
"Transform methods do not agree "
|
|
368
369
|
f"{self.method} != {decimation_level.method}"
|
|
369
370
|
)
|
|
370
|
-
self.logger.
|
|
371
|
+
self.logger.info(msg)
|
|
371
372
|
return False
|
|
372
373
|
|
|
373
374
|
# prewhitening_type
|
|
@@ -378,7 +379,7 @@ class Decimation(Base):
|
|
|
378
379
|
"prewhitening_type does not agree "
|
|
379
380
|
f"{self.prewhitening_type} != {decimation_level.prewhitening_type}"
|
|
380
381
|
)
|
|
381
|
-
self.logger.
|
|
382
|
+
self.logger.info(msg)
|
|
382
383
|
return False
|
|
383
384
|
|
|
384
385
|
# recoloring
|
|
@@ -389,7 +390,7 @@ class Decimation(Base):
|
|
|
389
390
|
"recoloring does not agree "
|
|
390
391
|
f"{self.recoloring} != {decimation_level.recoloring}"
|
|
391
392
|
)
|
|
392
|
-
self.logger.
|
|
393
|
+
self.logger.info(msg)
|
|
393
394
|
return False
|
|
394
395
|
|
|
395
396
|
# pre_fft_detrend_type
|
|
@@ -403,7 +404,7 @@ class Decimation(Base):
|
|
|
403
404
|
"pre_fft_detrend_type does not agree "
|
|
404
405
|
f"{self.pre_fft_detrend_type} != {decimation_level.pre_fft_detrend_type}"
|
|
405
406
|
)
|
|
406
|
-
self.logger.
|
|
407
|
+
self.logger.info(msg)
|
|
407
408
|
return False
|
|
408
409
|
|
|
409
410
|
# min_num_stft_windows
|
|
@@ -417,7 +418,7 @@ class Decimation(Base):
|
|
|
417
418
|
"min_num_stft_windows do not agree "
|
|
418
419
|
f"{self.min_num_stft_windows} != {decimation_level.min_num_stft_windows}"
|
|
419
420
|
)
|
|
420
|
-
self.logger.
|
|
421
|
+
self.logger.info(msg)
|
|
421
422
|
return False
|
|
422
423
|
|
|
423
424
|
# window
|
|
@@ -427,7 +428,7 @@ class Decimation(Base):
|
|
|
427
428
|
msg = "window does not agree: "
|
|
428
429
|
msg = f"{msg} FC Group: {self.window} "
|
|
429
430
|
msg = f"{msg} Processing Config {decimation_level.window}"
|
|
430
|
-
self.logger.
|
|
431
|
+
self.logger.info(msg)
|
|
431
432
|
return False
|
|
432
433
|
|
|
433
434
|
if -1 in self.harmonic_indices:
|
|
@@ -444,7 +445,7 @@ class Decimation(Base):
|
|
|
444
445
|
f"Processing FC indices {processing_set} is not contained "
|
|
445
446
|
f"in FC indices {fcdec_group_set}"
|
|
446
447
|
)
|
|
447
|
-
self.logger.
|
|
448
|
+
self.logger.info(msg)
|
|
448
449
|
return False
|
|
449
450
|
|
|
450
451
|
# No checks were failed the FCDecimation supports the processing config
|
mt_metadata/utils/list_dict.py
CHANGED
|
@@ -44,18 +44,14 @@ class ListDict:
|
|
|
44
44
|
|
|
45
45
|
def _get_key_from_index(self, index):
|
|
46
46
|
try:
|
|
47
|
-
return next(
|
|
48
|
-
key for ii, key in enumerate(self._home) if ii == index
|
|
49
|
-
)
|
|
47
|
+
return next(key for ii, key in enumerate(self._home) if ii == index)
|
|
50
48
|
|
|
51
49
|
except StopIteration:
|
|
52
50
|
raise KeyError(f"Could not find {index}")
|
|
53
51
|
|
|
54
52
|
def _get_index_from_key(self, key):
|
|
55
53
|
try:
|
|
56
|
-
return next(
|
|
57
|
-
index for index, k in enumerate(self._home) if k == key
|
|
58
|
-
)
|
|
54
|
+
return next(index for index, k in enumerate(self._home) if k == key)
|
|
59
55
|
|
|
60
56
|
except StopIteration:
|
|
61
57
|
raise KeyError(f"Could not find {key}")
|
|
@@ -75,9 +71,7 @@ class ListDict:
|
|
|
75
71
|
elif hasattr(obj, "component"):
|
|
76
72
|
return obj.component
|
|
77
73
|
else:
|
|
78
|
-
raise TypeError(
|
|
79
|
-
"could not identify an appropriate key from object"
|
|
80
|
-
)
|
|
74
|
+
raise TypeError("could not identify an appropriate key from object")
|
|
81
75
|
|
|
82
76
|
def __deepcopy__(self, memodict={}):
|
|
83
77
|
"""
|
|
@@ -230,9 +224,7 @@ class ListDict:
|
|
|
230
224
|
raise (KeyError("Could not find None in keys."))
|
|
231
225
|
|
|
232
226
|
else:
|
|
233
|
-
raise TypeError(
|
|
234
|
-
"could not identify an appropriate key from object"
|
|
235
|
-
)
|
|
227
|
+
raise TypeError("could not identify an appropriate key from object")
|
|
236
228
|
|
|
237
229
|
def extend(self, other, skip_keys=[]):
|
|
238
230
|
"""
|
|
@@ -282,3 +274,18 @@ class ListDict:
|
|
|
282
274
|
)
|
|
283
275
|
|
|
284
276
|
self._home.update(other)
|
|
277
|
+
|
|
278
|
+
def pop(self, key):
|
|
279
|
+
"""
|
|
280
|
+
pop item off of dictionary. The key must be verbatim
|
|
281
|
+
|
|
282
|
+
:param key: key of item to be popped off of dictionary
|
|
283
|
+
:type key: string
|
|
284
|
+
:return: item popped
|
|
285
|
+
|
|
286
|
+
"""
|
|
287
|
+
|
|
288
|
+
if key in self.keys():
|
|
289
|
+
return dict([self._home.popitem(key)])
|
|
290
|
+
else:
|
|
291
|
+
raise KeyError(f"{key} is not in ListDict keys.")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mt-metadata
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.9
|
|
4
4
|
Summary: Metadata for magnetotelluric data
|
|
5
5
|
Home-page: https://github.com/kujaku11/mt_metadata
|
|
6
6
|
Author: Jared Peacock
|
|
@@ -28,7 +28,7 @@ Requires-Dist: matplotlib
|
|
|
28
28
|
Requires-Dist: xarray
|
|
29
29
|
Requires-Dist: loguru
|
|
30
30
|
|
|
31
|
-
# mt_metadata version 0.3.
|
|
31
|
+
# mt_metadata version 0.3.9
|
|
32
32
|
Standard MT metadata
|
|
33
33
|
|
|
34
34
|
[](https://pypi.python.org/pypi/mt-metadata)
|
|
@@ -58,7 +58,7 @@ MT Metadata is a project led by [IRIS-PASSCAL MT Software working group](https:/
|
|
|
58
58
|
|
|
59
59
|
Most people will be using the transfer functions, but a lot of that metadata comes from the time series metadata. This module supports both and has tried to make them more or less seamless to reduce complication.
|
|
60
60
|
|
|
61
|
-
* **Version**: 0.3.
|
|
61
|
+
* **Version**: 0.3.9
|
|
62
62
|
* **Free software**: MIT license
|
|
63
63
|
* **Documentation**: https://mt-metadata.readthedocs.io.
|
|
64
64
|
* **Examples**: Click the `Binder` badge above and Jupyter Notebook examples are in **mt_metadata/examples/notebooks** and **docs/source/notebooks**
|
|
@@ -426,3 +426,11 @@ History
|
|
|
426
426
|
* Patches by @kkappler in https://github.com/kujaku11/mt_metadata/pull/221
|
|
427
427
|
* Patches by @kkappler in https://github.com/kujaku11/mt_metadata/pull/223
|
|
428
428
|
* Bump version: 0.3.6 → 0.3.7 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/225
|
|
429
|
+
|
|
430
|
+
0.3.8 (2024-09-30)
|
|
431
|
+
----------------------
|
|
432
|
+
|
|
433
|
+
* Add pop to ListDict by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/226
|
|
434
|
+
* Fix EDI Tipper flip by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/228
|
|
435
|
+
* Patches by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/227
|
|
436
|
+
* Bump version: 0.3.7 → 0.3.8 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/229
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
mt_metadata/__init__.py,sha256=
|
|
1
|
+
mt_metadata/__init__.py,sha256=rniaK_gb2gC3hJD9xr80nup-of5W9KxDFkcpAqGhJl4,5588
|
|
2
2
|
mt_metadata/base/__init__.py,sha256=bylCGBoJkeytxeQgMnuqivqFAvbyNE5htvP-3yu1GEY,184
|
|
3
3
|
mt_metadata/base/helpers.py,sha256=_SbJC8zDFmjQrmGbb6jBkqkWtaItNHyb8PREdPm5nl8,19798
|
|
4
4
|
mt_metadata/base/metadata.py,sha256=obOFdU6FPf2o-SbdxOxZ60LvzbI6Cp-bbRXw8KdkBao,27145
|
|
@@ -20,7 +20,7 @@ mt_metadata/data/transfer_functions/NMX20.xml,sha256=gof0okuJnXl2KFqazR5FcSHq6pM
|
|
|
20
20
|
mt_metadata/data/transfer_functions/PHXTest01.edi,sha256=TGLZRiwfO5OPdhzfcI9QCMnOkncBK3Wi_3zQf0KzqlA,61145
|
|
21
21
|
mt_metadata/data/transfer_functions/__init__.py,sha256=fsW8De_Dhrjp55R12F2RH5M6QHoPO3Qf51yR3AFWztg,26
|
|
22
22
|
mt_metadata/data/transfer_functions/example.xml,sha256=fZ42a-_H8C9AoZebhtiiFm5sjX625_c_Dn3Q0BWFWb4,31883
|
|
23
|
-
mt_metadata/data/transfer_functions/test.edi,sha256=
|
|
23
|
+
mt_metadata/data/transfer_functions/test.edi,sha256=WISk9dJ0Ky8y4CutiX3nK6ylxprKWGPzqMD5B6nyBXc,32990
|
|
24
24
|
mt_metadata/data/transfer_functions/tf_avg.avg,sha256=lHmdFvSKvRdlK95APWt37FCnqIUXeDi2KT_QsK3BJeg,13326
|
|
25
25
|
mt_metadata/data/transfer_functions/tf_avg_newer.avg,sha256=ntH2offELj0fdiK-pYFU6M89rVw4tWEGnibwdD3TBS8,38811
|
|
26
26
|
mt_metadata/data/transfer_functions/tf_avg_tipper.avg,sha256=UrvMNQibr_SvXg4kGGTBlPw3nlTd7ybmXaUUC157uOY,39033
|
|
@@ -123,7 +123,7 @@ mt_metadata/timeseries/standards/timing_system.json,sha256=ikVKrlfzm6wIPvDcL_Ih6
|
|
|
123
123
|
mt_metadata/timeseries/stationxml/__init__.py,sha256=zTL0jn2j7KZTF4i-k40RpXcvW_XzdG1WqieC39284Lc,525
|
|
124
124
|
mt_metadata/timeseries/stationxml/fdsn_tools.py,sha256=6H1hZCxf5-skNSjPazMS_wKu4oB3LF_jTqq4xRfpRAw,9487
|
|
125
125
|
mt_metadata/timeseries/stationxml/utils.py,sha256=16617e6snyrsNjletGbw-gLYQ2vt-7VfYPokz6dakts,7257
|
|
126
|
-
mt_metadata/timeseries/stationxml/xml_channel_mt_channel.py,sha256=
|
|
126
|
+
mt_metadata/timeseries/stationxml/xml_channel_mt_channel.py,sha256=aTQ_PRya-un51NHKXuTUfMyR5dShE3_XLfBo__N4-Nw,22781
|
|
127
127
|
mt_metadata/timeseries/stationxml/xml_equipment_mt_run.py,sha256=yRPk6lhnzkpgARe6lQkU_-vZrTDDmIIeRCTI9Wig9XY,5151
|
|
128
128
|
mt_metadata/timeseries/stationxml/xml_inventory_mt_experiment.py,sha256=M_k6rENVd9eHv92QNkcd7Yua9bnwYZtjKj9mpjKhkEs,14085
|
|
129
129
|
mt_metadata/timeseries/stationxml/xml_network_mt_survey.py,sha256=RciEmnFGb8kMf1mA1lLn9d0R7WiOW2BeoV1bDB-eJuU,7124
|
|
@@ -131,11 +131,11 @@ mt_metadata/timeseries/stationxml/xml_station_mt_station.py,sha256=pelvkiQios4gz
|
|
|
131
131
|
mt_metadata/timeseries/tools/__init__.py,sha256=loPgjYnajbOX2rQTlLBh79cG2eaUNpI3KaCjp7SB4ik,78
|
|
132
132
|
mt_metadata/timeseries/tools/from_many_mt_files.py,sha256=rtx5NAPBUmOgrMXUT-YJxznqfI1qdRkS4B2SWjrU_1c,14405
|
|
133
133
|
mt_metadata/transfer_functions/__init__.py,sha256=7F_9sev0KlRfswx_H0j8-1PJs-ZTpD04qwjYh1jst8w,1288
|
|
134
|
-
mt_metadata/transfer_functions/core.py,sha256=
|
|
134
|
+
mt_metadata/transfer_functions/core.py,sha256=Vd-5oLlxUonW3FRHbYsCydrOT5zAjdsKMdKZnsbUy8Y,80865
|
|
135
135
|
mt_metadata/transfer_functions/io/__init__.py,sha256=8DKEQZrpF0RK_MTjR0_w0UQfgVf9VwuJrzy7eann1N8,215
|
|
136
136
|
mt_metadata/transfer_functions/io/tools.py,sha256=xatyc0RN8-KKS1PmpjATDAOHln9HIEP-iNAN0Njjyv4,6024
|
|
137
137
|
mt_metadata/transfer_functions/io/edi/__init__.py,sha256=5pgyFFwRezvlxxcsSQsvCmeShJe97TdY6F37T7FiNWA,61
|
|
138
|
-
mt_metadata/transfer_functions/io/edi/edi.py,sha256=
|
|
138
|
+
mt_metadata/transfer_functions/io/edi/edi.py,sha256=BQdiZNiXRdQ9-95HhhWDNK4zHyUTSFRcHXSJr4h6Q8I,54099
|
|
139
139
|
mt_metadata/transfer_functions/io/edi/metadata/__init__.py,sha256=ndXcOh7eN4adnXS7fAtvZg6i4K_gY3VT7zbNzeGjsaM,395
|
|
140
140
|
mt_metadata/transfer_functions/io/edi/metadata/data_section.py,sha256=RhelbBN83LhRvItlVrBKuQoFLBaPonENp0KyIkW79X0,7751
|
|
141
141
|
mt_metadata/transfer_functions/io/edi/metadata/define_measurement.py,sha256=AQfJQSTVs-iOuEyiCnBFjMwqgowD0dkL2Bp5mSAhQ8s,16318
|
|
@@ -280,7 +280,7 @@ mt_metadata/transfer_functions/processing/aurora/band.py,sha256=mNDkpJQbf7F7aF-F
|
|
|
280
280
|
mt_metadata/transfer_functions/processing/aurora/channel.py,sha256=TZHfy-XgrijdNVd4Sjbq3tjORFsJNZIzwa4_J7tDOHM,773
|
|
281
281
|
mt_metadata/transfer_functions/processing/aurora/channel_nomenclature.py,sha256=Y7rQTH3YsTB8KFIMk6vQZWFrRKQWlnwoQNZOZjZImbk,3038
|
|
282
282
|
mt_metadata/transfer_functions/processing/aurora/decimation.py,sha256=AF7vdU-Q7W4yfnJoPDbhDqgxJTtHiLCLEUDLBEzfmFM,785
|
|
283
|
-
mt_metadata/transfer_functions/processing/aurora/decimation_level.py,sha256
|
|
283
|
+
mt_metadata/transfer_functions/processing/aurora/decimation_level.py,sha256=-DgKDCypO1qoqYsck-FNGrduF41can3xqRLsKeIVYeA,10700
|
|
284
284
|
mt_metadata/transfer_functions/processing/aurora/estimator.py,sha256=9I2Rs3guO7sc9HEpLbYI8nYZfQ7IayosKvsrE6etBac,781
|
|
285
285
|
mt_metadata/transfer_functions/processing/aurora/processing.py,sha256=BCKXGu_iVValVyE0EbsR9_gYkwv0I4GxS61AqXUtc8s,10320
|
|
286
286
|
mt_metadata/transfer_functions/processing/aurora/regression.py,sha256=NIgivJx11-ZVsVfQgdIODfsPeyMPmhRXA6bSNiarA8c,783
|
|
@@ -304,7 +304,7 @@ mt_metadata/transfer_functions/processing/aurora/standards/station.json,sha256=k
|
|
|
304
304
|
mt_metadata/transfer_functions/processing/aurora/standards/stations.json,sha256=-ZAipnSnZ3IT4fUgsHt9xUTA_yPA_lN3i9p4nHfZcrs,276
|
|
305
305
|
mt_metadata/transfer_functions/processing/aurora/standards/window.json,sha256=cZ1qYCcIfWwIqYHgqNIlaNjiYcY7G216tIsyteQXZLM,1892
|
|
306
306
|
mt_metadata/transfer_functions/processing/fourier_coefficients/__init__.py,sha256=Ay7nGOU1xTeZVTsNWnFoR9085DAcO4NbEf0d8uWgz_0,134
|
|
307
|
-
mt_metadata/transfer_functions/processing/fourier_coefficients/decimation.py,sha256=
|
|
307
|
+
mt_metadata/transfer_functions/processing/fourier_coefficients/decimation.py,sha256=Y8jXmHCEVAeXTVUfZji9PMZ_J5DAovaCjuZbjlnZsJs,15654
|
|
308
308
|
mt_metadata/transfer_functions/processing/fourier_coefficients/fc.py,sha256=bN3S_0uoMqXDcJcw_7oYN3YQqsWITD2UX0aRcgdY7fw,10450
|
|
309
309
|
mt_metadata/transfer_functions/processing/fourier_coefficients/fc_channel.py,sha256=HFFo2XoqaKJOae3mtRSMZ80_AZ6wDx0KKq3oBfIbJKg,926
|
|
310
310
|
mt_metadata/transfer_functions/processing/fourier_coefficients/standards/__init__.py,sha256=Y3rdyXKOgxbSh9FQxQCCplsbqxwWmFIGm6yZG1cj0Uw,135
|
|
@@ -322,17 +322,17 @@ mt_metadata/transfer_functions/tf/standards/comment.json,sha256=E9_GO681t7OZTOct
|
|
|
322
322
|
mt_metadata/transfer_functions/tf/standards/station.json,sha256=KbxDe8QRWEmBxyWJKcFaAjFjdSzzpRQSCniHgLMqy9c,2972
|
|
323
323
|
mt_metadata/transfer_functions/tf/standards/statistical_estimate.json,sha256=BT_SF6naRCX_LH6uNtGI9tZqxcFir5-0tdf6lp6K3JM,1917
|
|
324
324
|
mt_metadata/transfer_functions/tf/standards/survey.json,sha256=4AX3-n8j8QwLkXF7G4J3QRKOCHIa4DjdnA-W99c2ck0,3426
|
|
325
|
-
mt_metadata/transfer_functions/tf/standards/transfer_function.json,sha256=
|
|
325
|
+
mt_metadata/transfer_functions/tf/standards/transfer_function.json,sha256=QnLg3DfSTVZL8W_2ecpRkPTAvQqVi4KrKr6DUiSE2XM,3219
|
|
326
326
|
mt_metadata/utils/__init__.py,sha256=5TWhar2ujJY_pYkwDdggX8jU9CFXcxc9jX1yXc8TqJs,35
|
|
327
327
|
mt_metadata/utils/exceptions.py,sha256=PKWdjKfR95NJ-Rgx3rzu9Qmdj0thVHjcmEvHoC9HuBE,462
|
|
328
|
-
mt_metadata/utils/list_dict.py,sha256=
|
|
328
|
+
mt_metadata/utils/list_dict.py,sha256=sazYtq8spfN9l6iGrqsfKCdUFAMXq6iV8cq3m8UlS-Q,7945
|
|
329
329
|
mt_metadata/utils/mttime.py,sha256=v71TCPjtoY_0GTsJ39WCD8kwIZDNzE679m96a3QGgPE,18725
|
|
330
330
|
mt_metadata/utils/summarize.py,sha256=KisJt2PWz1-_FOBH8NQtidgxjdWPAbIDwPzEB197uhs,4109
|
|
331
331
|
mt_metadata/utils/units.py,sha256=OdALLmytoPvjJ8rYf7QsGq1b8nrNt85A8wUhjqRyTOo,6405
|
|
332
332
|
mt_metadata/utils/validators.py,sha256=jQf0VBtfT5GMXlEUI5Hg1zILqSir9Ra4Moi4dL54KeM,16380
|
|
333
|
-
mt_metadata-0.3.
|
|
334
|
-
mt_metadata-0.3.
|
|
335
|
-
mt_metadata-0.3.
|
|
336
|
-
mt_metadata-0.3.
|
|
337
|
-
mt_metadata-0.3.
|
|
338
|
-
mt_metadata-0.3.
|
|
333
|
+
mt_metadata-0.3.9.dist-info/AUTHORS.rst,sha256=3RKy4std2XZQLNF6xYIiA8S5A0bBPqNO7ypJsuEhiN8,706
|
|
334
|
+
mt_metadata-0.3.9.dist-info/LICENSE,sha256=P33RkFPriIBxsgZtVzSn9KxYa2K7Am42OwMV0h_m5e0,1080
|
|
335
|
+
mt_metadata-0.3.9.dist-info/METADATA,sha256=-ksqp_LJNRIEojqz_X0vZHvqHJnaot3T9mlS_kGQ_zc,20842
|
|
336
|
+
mt_metadata-0.3.9.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
337
|
+
mt_metadata-0.3.9.dist-info/top_level.txt,sha256=fxe_q_GEd9h6iR3050ZnrhSfxUSO5pR8u65souS4RWM,12
|
|
338
|
+
mt_metadata-0.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|