mt-metadata 0.3.6__py2.py3-none-any.whl → 0.3.7__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/base/helpers.py +9 -2
- mt_metadata/timeseries/filters/filtered.py +133 -75
- mt_metadata/timeseries/station.py +31 -0
- mt_metadata/timeseries/stationxml/xml_inventory_mt_experiment.py +1 -0
- mt_metadata/transfer_functions/__init__.py +38 -0
- mt_metadata/transfer_functions/io/edi/edi.py +22 -12
- mt_metadata/transfer_functions/io/edi/metadata/define_measurement.py +1 -0
- mt_metadata/transfer_functions/io/edi/metadata/emeasurement.py +4 -2
- mt_metadata/transfer_functions/io/edi/metadata/header.py +3 -1
- mt_metadata/transfer_functions/io/edi/metadata/information.py +13 -6
- mt_metadata/transfer_functions/io/emtfxml/emtfxml.py +8 -2
- mt_metadata/transfer_functions/io/emtfxml/metadata/data.py +1 -1
- mt_metadata/transfer_functions/io/emtfxml/metadata/estimate.py +1 -1
- mt_metadata/transfer_functions/io/emtfxml/metadata/period_range.py +6 -1
- mt_metadata/transfer_functions/io/emtfxml/metadata/provenance.py +6 -2
- mt_metadata/transfer_functions/io/emtfxml/metadata/standards/copyright.json +2 -1
- mt_metadata/transfer_functions/processing/aurora/channel_nomenclature.py +2 -44
- mt_metadata/transfer_functions/processing/aurora/standards/regression.json +46 -1
- mt_metadata/transfer_functions/processing/aurora/station.py +17 -11
- mt_metadata/transfer_functions/processing/aurora/stations.py +4 -4
- mt_metadata/utils/mttime.py +1 -1
- mt_metadata/utils/validators.py +11 -2
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.dist-info}/METADATA +52 -3
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.dist-info}/RECORD +29 -29
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.dist-info}/AUTHORS.rst +0 -0
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.dist-info}/LICENSE +0 -0
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.dist-info}/WHEEL +0 -0
- {mt_metadata-0.3.6.dist-info → mt_metadata-0.3.7.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.7"
|
|
43
43
|
|
|
44
44
|
# =============================================================================
|
|
45
45
|
# Imports
|
mt_metadata/base/helpers.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Created on Wed Dec 23 20:37:52 2020
|
|
4
4
|
|
|
5
|
-
:copyright:
|
|
5
|
+
:copyright:
|
|
6
6
|
Jared Peacock (jpeacock@usgs.gov)
|
|
7
7
|
|
|
8
8
|
:license: MIT
|
|
@@ -637,11 +637,18 @@ def element_to_string(element):
|
|
|
637
637
|
# Helper function to be sure everything is encoded properly
|
|
638
638
|
# =============================================================================
|
|
639
639
|
class NumpyEncoder(json.JSONEncoder):
|
|
640
|
+
|
|
640
641
|
"""
|
|
641
642
|
Need to encode numpy ints and floats for json to work
|
|
642
643
|
"""
|
|
643
644
|
|
|
644
645
|
def default(self, obj):
|
|
646
|
+
"""
|
|
647
|
+
|
|
648
|
+
:param obj:
|
|
649
|
+
:type obj:
|
|
650
|
+
:return:
|
|
651
|
+
"""
|
|
645
652
|
if isinstance(
|
|
646
653
|
obj,
|
|
647
654
|
(
|
|
@@ -659,7 +666,7 @@ class NumpyEncoder(json.JSONEncoder):
|
|
|
659
666
|
),
|
|
660
667
|
):
|
|
661
668
|
return int(obj)
|
|
662
|
-
elif isinstance(obj, (np.
|
|
669
|
+
elif isinstance(obj, (np.float16, np.float32, np.float64)):
|
|
663
670
|
return float(obj)
|
|
664
671
|
elif isinstance(obj, (np.ndarray)):
|
|
665
672
|
if obj.dtype == complex:
|
|
@@ -17,6 +17,7 @@ from mt_metadata.base.helpers import write_lines
|
|
|
17
17
|
from mt_metadata.base import get_schema, Base
|
|
18
18
|
from mt_metadata.timeseries.standards import SCHEMA_FN_PATHS
|
|
19
19
|
from mt_metadata.utils.exceptions import MTSchemaError
|
|
20
|
+
from typing import Optional, Union
|
|
20
21
|
|
|
21
22
|
# =============================================================================
|
|
22
23
|
attr_dict = get_schema("filtered", SCHEMA_FN_PATHS)
|
|
@@ -31,6 +32,14 @@ class Filtered(Base):
|
|
|
31
32
|
__doc__ = write_lines(attr_dict)
|
|
32
33
|
|
|
33
34
|
def __init__(self, **kwargs):
|
|
35
|
+
"""
|
|
36
|
+
Constructor
|
|
37
|
+
|
|
38
|
+
:param kwargs:
|
|
39
|
+
|
|
40
|
+
TODO: Consider not setting self.applied = None, as this has the effect of self._applied = [True,]
|
|
41
|
+
"""
|
|
42
|
+
self._applied_values_map = _applied_values_map()
|
|
34
43
|
self._name = []
|
|
35
44
|
self._applied = []
|
|
36
45
|
self.name = None
|
|
@@ -53,7 +62,7 @@ class Filtered(Base):
|
|
|
53
62
|
elif isinstance(names, list):
|
|
54
63
|
self._name = [ss.strip().lower() for ss in names]
|
|
55
64
|
elif isinstance(names, np.ndarray):
|
|
56
|
-
names = names.astype(np.
|
|
65
|
+
names = names.astype(np.str_)
|
|
57
66
|
self._name = [ss.strip().lower() for ss in names]
|
|
58
67
|
else:
|
|
59
68
|
msg = "names must be a string or list of strings not {0}, type {1}"
|
|
@@ -68,25 +77,52 @@ class Filtered(Base):
|
|
|
68
77
|
self.logger.warning(msg)
|
|
69
78
|
|
|
70
79
|
@property
|
|
71
|
-
def applied(self):
|
|
80
|
+
def applied(self) -> list:
|
|
72
81
|
return self._applied
|
|
73
82
|
|
|
74
83
|
@applied.setter
|
|
75
|
-
def applied(
|
|
84
|
+
def applied(
|
|
85
|
+
self,
|
|
86
|
+
applied: Union[list, str, None, int, tuple, np.ndarray, bool],
|
|
87
|
+
) -> None:
|
|
88
|
+
"""
|
|
89
|
+
Sets the value of the booleans for whether each filter has been applied or not
|
|
90
|
+
|
|
91
|
+
:type applied: Union[list, str, None, int, tuple]
|
|
92
|
+
:param applied: The value to set self._applied.
|
|
93
|
+
|
|
94
|
+
Notes:
|
|
95
|
+
self._applied is a list, but we allow this to be assigned by single values as well,
|
|
96
|
+
such as None, True, 0. Supporting these other values makes the logic a little bit involved.
|
|
97
|
+
If a null value is received, the filters are assumed to be applied.
|
|
98
|
+
If a simple value, such as True, None, 0, etc. is not received, the input argument
|
|
99
|
+
applied (which is iterable) is first converted to `applied_list`.
|
|
100
|
+
The values in `applied_list` are then mapped to booleans.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
"""
|
|
104
|
+
# Handle cases where we did not pass an iterable
|
|
76
105
|
if not hasattr(applied, "__iter__"):
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
106
|
+
self._applied = [self._applied_values_map[applied], ]
|
|
107
|
+
return
|
|
108
|
+
|
|
109
|
+
# the returned type from a hdf5 dataset is a numpy array.
|
|
110
|
+
if isinstance(applied, np.ndarray):
|
|
111
|
+
applied = applied.tolist()
|
|
83
112
|
|
|
84
113
|
#sets an empty list to one default value
|
|
85
114
|
if isinstance(applied, list) and len(applied) == 0:
|
|
86
|
-
self.
|
|
115
|
+
self._applied = [True]
|
|
87
116
|
return
|
|
88
117
|
|
|
118
|
+
# Handle string case
|
|
89
119
|
if isinstance(applied, str):
|
|
120
|
+
# Handle simple strings
|
|
121
|
+
if applied in self._applied_values_map.keys():
|
|
122
|
+
self._applied = [self._applied_values_map[applied], ]
|
|
123
|
+
return
|
|
124
|
+
|
|
125
|
+
# Handle string-lists (e.g. from json)
|
|
90
126
|
if applied.find("[") >= 0:
|
|
91
127
|
applied = applied.replace("[", "").replace("]", "")
|
|
92
128
|
if applied.count(",") > 0:
|
|
@@ -97,44 +133,20 @@ class Filtered(Base):
|
|
|
97
133
|
applied_list = [ss.lower() for ss in applied.split()]
|
|
98
134
|
elif isinstance(applied, list):
|
|
99
135
|
applied_list = applied
|
|
100
|
-
|
|
101
|
-
for i, elt in enumerate(applied_list):
|
|
102
|
-
if elt in ["0", "1",]:
|
|
103
|
-
applied_list[i] = int(applied_list[i])
|
|
104
|
-
# set integers to bools [0,1]--> [False, True]
|
|
105
|
-
for i, elt in enumerate(applied_list):
|
|
106
|
-
if elt in [0, 1,]:
|
|
107
|
-
applied_list[i] = bool(applied_list[i])
|
|
108
|
-
elif isinstance(applied, bool):
|
|
109
|
-
applied_list = [applied]
|
|
110
|
-
# the returned type from a hdf5 dataset is a numpy array.
|
|
111
|
-
elif isinstance(applied, np.ndarray):
|
|
136
|
+
elif isinstance(applied, tuple):
|
|
112
137
|
applied_list = list(applied)
|
|
113
|
-
if applied_list == []:
|
|
114
|
-
applied_list = [True]
|
|
115
138
|
else:
|
|
116
|
-
msg = "applied
|
|
117
|
-
self.logger.error(msg
|
|
118
|
-
raise MTSchemaError(msg
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
elif app_bool.lower() in ["true", "1"]:
|
|
128
|
-
bool_list.append(True)
|
|
129
|
-
else:
|
|
130
|
-
msg = "Filter.applied must be [ True | False ], not {0}"
|
|
131
|
-
self.logger.error(msg.format(app_bool))
|
|
132
|
-
raise MTSchemaError(msg.format(app_bool))
|
|
133
|
-
elif isinstance(app_bool, (bool, np.bool_)):
|
|
134
|
-
bool_list.append(bool(app_bool))
|
|
135
|
-
else:
|
|
136
|
-
msg = "Filter.applied must be [True | False], not {0}"
|
|
137
|
-
self.logger.error(msg.format(app_bool))
|
|
139
|
+
msg = f"Input applied cannot be of type {type(applied)}"
|
|
140
|
+
self.logger.error(msg)
|
|
141
|
+
raise MTSchemaError(msg)
|
|
142
|
+
|
|
143
|
+
# Now we have a simple list -- map to bools
|
|
144
|
+
try:
|
|
145
|
+
bool_list = [self._applied_values_map[x] for x in applied_list]
|
|
146
|
+
except KeyError:
|
|
147
|
+
msg = f"A key in {applied_list} is not mapped to a boolean"
|
|
148
|
+
msg += "\n fix this by adding to _applied_values_map"
|
|
149
|
+
self.logger.error(msg)
|
|
138
150
|
self._applied = bool_list
|
|
139
151
|
|
|
140
152
|
# check for consistency
|
|
@@ -146,36 +158,82 @@ class Filtered(Base):
|
|
|
146
158
|
self.logger.warning(msg)
|
|
147
159
|
|
|
148
160
|
|
|
149
|
-
def _check_consistency(self):
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return True
|
|
165
|
-
elif len(self._applied) > 1:
|
|
166
|
-
if len(self._applied) != len(self._name):
|
|
167
|
-
self.logger.warning(
|
|
168
|
-
"Applied and filter names "
|
|
169
|
-
+ "should be the same length. "
|
|
170
|
-
+ "Appied={0}, names={1}".format(
|
|
171
|
-
len(self._applied), len(self._name)
|
|
172
|
-
)
|
|
173
|
-
)
|
|
174
|
-
return False
|
|
175
|
-
else:
|
|
176
|
-
return True
|
|
177
|
-
elif self._name == [] and len(self._applied) > 0:
|
|
161
|
+
def _check_consistency(self) -> bool:
|
|
162
|
+
"""
|
|
163
|
+
Logic to look for inconstencies in the configuration of the filter names and applied values.
|
|
164
|
+
|
|
165
|
+
In general, list of filter names should be same length as list of applied booleans.
|
|
166
|
+
|
|
167
|
+
Cases:
|
|
168
|
+
The filter has no name -- this could happen on intialization.
|
|
169
|
+
|
|
170
|
+
:return: bool
|
|
171
|
+
True if OK, False if not.
|
|
172
|
+
|
|
173
|
+
"""
|
|
174
|
+
# This inconsistency is ok -- the filter may not have been assigned a name yet
|
|
175
|
+
if self._name == [] and len(self._applied) > 0:
|
|
178
176
|
self.logger.debug("Name probably not yet initialized -- skipping consitency check")
|
|
179
177
|
return True
|
|
178
|
+
|
|
179
|
+
# Otherwise self._name != []
|
|
180
|
+
|
|
181
|
+
# Applied not assigned - this is not OK
|
|
182
|
+
if self._applied is None:
|
|
183
|
+
self.logger.warning("Need to input filter.applied")
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
# Name and applied have same length, 1. This is OK
|
|
187
|
+
if len(self._name) == 1:
|
|
188
|
+
if len(self._applied) == 1:
|
|
189
|
+
return True
|
|
190
|
+
|
|
191
|
+
# Multiple filter names (name not of length 0 or 1)
|
|
192
|
+
if len(self._name) > 1:
|
|
193
|
+
# If only one applied boolean, we allow it.
|
|
194
|
+
# TODO: consider being less tolerant here
|
|
195
|
+
if len(self._applied) == 1:
|
|
196
|
+
msg = f"Assuming all filters have been applied as {self._applied[0]}"
|
|
197
|
+
self.logger.debug(msg)
|
|
198
|
+
self._applied = len(self.name) * [self._applied[0],]
|
|
199
|
+
msg = f"Explicitly set filter applied state to {self._applied[0]}"
|
|
200
|
+
self.logger.debug(msg)
|
|
201
|
+
return True
|
|
202
|
+
elif len(self._applied) > 1:
|
|
203
|
+
# need to check the lists are really the same length
|
|
204
|
+
if len(self._applied) != len(self._name):
|
|
205
|
+
msg = "Applied and filter names should be the same length. "
|
|
206
|
+
msg += f"Appied={len(self._applied)}, names={len(self._name)}"
|
|
207
|
+
self.logger.warning(msg)
|
|
208
|
+
return False
|
|
209
|
+
else:
|
|
210
|
+
return True
|
|
180
211
|
else:
|
|
212
|
+
# Some unknown configuration we have not yet encountered
|
|
213
|
+
msg = "Filter consistency check failed for an unknown reason"
|
|
214
|
+
self.logger.warning(msg)
|
|
181
215
|
return False
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def _applied_values_map(
|
|
219
|
+
treat_null_values_as: Optional[bool] = True
|
|
220
|
+
) -> dict:
|
|
221
|
+
"""
|
|
222
|
+
helper function to simplify logic in applied setter.
|
|
223
|
+
|
|
224
|
+
Notes:
|
|
225
|
+
The logic in the setter was getting quite complicated handling many types.
|
|
226
|
+
A reasonable solution seemed to be to map each of the allowed values to a bool
|
|
227
|
+
via dict and then use this dict when setting applied values.
|
|
228
|
+
|
|
229
|
+
:return: dict
|
|
230
|
+
Mapping of all tolerated single-values for setting applied booleans
|
|
231
|
+
"""
|
|
232
|
+
null_values = [None, "none", "None", "NONE", "null"]
|
|
233
|
+
null_values_map = {x: treat_null_values_as for x in null_values}
|
|
234
|
+
true_values = [True, 1, "1", "True", "true"]
|
|
235
|
+
true_values_map = {x:True for x in true_values}
|
|
236
|
+
false_values = [False, 0, "0", "False", "false"]
|
|
237
|
+
false_values_map = {x:False for x in false_values}
|
|
238
|
+
values_map = {**null_values_map, **true_values_map, **false_values_map}
|
|
239
|
+
return values_map
|
|
@@ -59,6 +59,8 @@ attr_dict.add_dict(get_schema("copyright", SCHEMA_FN_PATHS), None)
|
|
|
59
59
|
attr_dict["release_license"]["required"] = False
|
|
60
60
|
attr_dict.add_dict(get_schema("citation", SCHEMA_FN_PATHS), None, keys=["doi"])
|
|
61
61
|
attr_dict["doi"]["required"] = False
|
|
62
|
+
|
|
63
|
+
|
|
62
64
|
# =============================================================================
|
|
63
65
|
class Station(Base):
|
|
64
66
|
__doc__ = write_lines(attr_dict)
|
|
@@ -316,3 +318,32 @@ class Station(Base):
|
|
|
316
318
|
else:
|
|
317
319
|
if self.time_period.end < max(end):
|
|
318
320
|
self.time_period.end = max(end)
|
|
321
|
+
|
|
322
|
+
def sort_runs_by_time(self, inplace=True, ascending=True):
|
|
323
|
+
"""
|
|
324
|
+
return a list of runs sorted by start time in the order of ascending or
|
|
325
|
+
descending.
|
|
326
|
+
|
|
327
|
+
:param ascending: DESCRIPTION, defaults to True
|
|
328
|
+
:type ascending: TYPE, optional
|
|
329
|
+
:return: DESCRIPTION
|
|
330
|
+
:rtype: TYPE
|
|
331
|
+
|
|
332
|
+
"""
|
|
333
|
+
|
|
334
|
+
run_ids = []
|
|
335
|
+
run_starts = []
|
|
336
|
+
for run_key, run_obj in self.runs.items():
|
|
337
|
+
run_ids.append(run_key)
|
|
338
|
+
run_starts.append(run_obj.time_period.start.split("+")[0])
|
|
339
|
+
|
|
340
|
+
index = np.argsort(np.array(run_starts, dtype=np.datetime64))
|
|
341
|
+
|
|
342
|
+
new_runs = ListDict()
|
|
343
|
+
for ii in index:
|
|
344
|
+
new_runs[run_ids[ii]] = self.runs[run_ids[ii]]
|
|
345
|
+
|
|
346
|
+
if inplace:
|
|
347
|
+
self.runs = new_runs
|
|
348
|
+
else:
|
|
349
|
+
return new_runs
|
|
@@ -174,6 +174,7 @@ class XMLInventoryMTExperiment:
|
|
|
174
174
|
xml_station.site.country = ",".join(
|
|
175
175
|
[str(country) for country in mt_survey.country]
|
|
176
176
|
)
|
|
177
|
+
# need to sort the runs by time
|
|
177
178
|
for mt_run in mt_station.runs:
|
|
178
179
|
xml_station = self.add_run(
|
|
179
180
|
xml_station, mt_run, mt_survey.filters
|
|
@@ -1,3 +1,41 @@
|
|
|
1
|
+
# Define allowed sets of channel labellings
|
|
2
|
+
STANDARD_INPUT_CHANNELS = [
|
|
3
|
+
"hx",
|
|
4
|
+
"hy",
|
|
5
|
+
]
|
|
6
|
+
STANDARD_OUTPUT_CHANNELS = [
|
|
7
|
+
"ex",
|
|
8
|
+
"ey",
|
|
9
|
+
"hz",
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
CHANNEL_MAPS = {
|
|
13
|
+
"default": {"hx": "hx", "hy": "hy", "hz": "hz", "ex": "ex", "ey": "ey"},
|
|
14
|
+
"lemi12": {"hx": "bx", "hy": "by", "hz": "bz", "ex": "e1", "ey": "e2"},
|
|
15
|
+
"lemi34": {"hx": "bx", "hy": "by", "hz": "bz", "ex": "e3", "ey": "e4"},
|
|
16
|
+
"phoenix123": {"hx": "h1", "hy": "h2", "hz": "h3", "ex": "e1", "ey": "e2"},
|
|
17
|
+
"musgraves": {"hx": "bx", "hy": "by", "hz": "bz", "ex": "ex", "ey": "ey"},
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_allowed_channel_names(standard_names):
|
|
22
|
+
"""
|
|
23
|
+
:param standard_names: one of STANDARD_INPUT_NAMES, or STANDARD_OUTPUT_NAMES
|
|
24
|
+
:type standard_names: list
|
|
25
|
+
:return: allowed_names: list of channel names that are supported
|
|
26
|
+
:rtype: list
|
|
27
|
+
"""
|
|
28
|
+
allowed_names = []
|
|
29
|
+
for ch in standard_names:
|
|
30
|
+
for _, channel_map in CHANNEL_MAPS.items():
|
|
31
|
+
allowed_names.append(channel_map[ch])
|
|
32
|
+
allowed_names = list(set(allowed_names))
|
|
33
|
+
return allowed_names
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
ALLOWED_INPUT_CHANNELS = get_allowed_channel_names(STANDARD_INPUT_CHANNELS)
|
|
37
|
+
ALLOWED_OUTPUT_CHANNELS = get_allowed_channel_names(STANDARD_OUTPUT_CHANNELS)
|
|
38
|
+
|
|
1
39
|
from .core import TF
|
|
2
40
|
|
|
3
41
|
__all__ = ["TF"]
|
|
@@ -419,8 +419,7 @@ class EDI(object):
|
|
|
419
419
|
)
|
|
420
420
|
elif key.startswith("t"):
|
|
421
421
|
obj[:, ii, jj] = (
|
|
422
|
-
data_dict[f"{key}r.exp"]
|
|
423
|
-
+ data_dict[f"{key}i.exp"] * 1j
|
|
422
|
+
data_dict[f"{key}r.exp"] + data_dict[f"{key}i.exp"] * 1j
|
|
424
423
|
)
|
|
425
424
|
try:
|
|
426
425
|
error_key = [
|
|
@@ -756,10 +755,8 @@ class EDI(object):
|
|
|
756
755
|
extra_lines.append(
|
|
757
756
|
f"\toriginal_program.date={self.Header.progdate}\n"
|
|
758
757
|
)
|
|
759
|
-
if self.Header.
|
|
760
|
-
extra_lines.append(
|
|
761
|
-
f"\toriginal_file.date={self.Header.filedate}\n"
|
|
762
|
-
)
|
|
758
|
+
if self.Header.filedate != "1980-01-01":
|
|
759
|
+
extra_lines.append(f"\toriginal_file.date={self.Header.filedate}\n")
|
|
763
760
|
header_lines = self.Header.write_header(
|
|
764
761
|
longitude_format=longitude_format, latlon_format=latlon_format
|
|
765
762
|
)
|
|
@@ -907,15 +904,11 @@ class EDI(object):
|
|
|
907
904
|
]
|
|
908
905
|
elif data_key.lower() == "freq":
|
|
909
906
|
block_lines = [
|
|
910
|
-
">{0} // {1:.0f}\n".format(
|
|
911
|
-
data_key.upper(), data_comp_arr.size
|
|
912
|
-
)
|
|
907
|
+
">{0} // {1:.0f}\n".format(data_key.upper(), data_comp_arr.size)
|
|
913
908
|
]
|
|
914
909
|
elif data_key.lower() in ["zrot", "trot"]:
|
|
915
910
|
block_lines = [
|
|
916
|
-
">{0} // {1:.0f}\n".format(
|
|
917
|
-
data_key.upper(), data_comp_arr.size
|
|
918
|
-
)
|
|
911
|
+
">{0} // {1:.0f}\n".format(data_key.upper(), data_comp_arr.size)
|
|
919
912
|
]
|
|
920
913
|
else:
|
|
921
914
|
raise ValueError("Cannot write block for {0}".format(data_key))
|
|
@@ -1039,6 +1032,13 @@ class EDI(object):
|
|
|
1039
1032
|
if survey.summary != None:
|
|
1040
1033
|
self.Info.info_list.append(f"survey.summary = {survey.summary}")
|
|
1041
1034
|
|
|
1035
|
+
for key in survey.to_dict(single=True).keys():
|
|
1036
|
+
if "northwest" in key or "southeast" in key or "time_period" in key:
|
|
1037
|
+
continue
|
|
1038
|
+
value = survey.get_attr_from_name(key)
|
|
1039
|
+
if value != None:
|
|
1040
|
+
self.Info.info_list.append(f"survey.{key} = {value}")
|
|
1041
|
+
|
|
1042
1042
|
@property
|
|
1043
1043
|
def station_metadata(self):
|
|
1044
1044
|
sm = metadata.Station()
|
|
@@ -1192,6 +1192,8 @@ class EDI(object):
|
|
|
1192
1192
|
self.Header.datum = sm.location.datum
|
|
1193
1193
|
self.Header.units = sm.transfer_function.units
|
|
1194
1194
|
self.Header.enddate = sm.time_period.end
|
|
1195
|
+
if sm.geographic_name is not None:
|
|
1196
|
+
self.Header.loc = sm.geographic_name
|
|
1195
1197
|
|
|
1196
1198
|
### write notes
|
|
1197
1199
|
# write comments, which would be anything in the info section from an edi
|
|
@@ -1379,3 +1381,11 @@ class EDI(object):
|
|
|
1379
1381
|
@property
|
|
1380
1382
|
def rrhy_metadata(self):
|
|
1381
1383
|
return self._get_magnetic_metadata("rrhy")
|
|
1384
|
+
|
|
1385
|
+
@property
|
|
1386
|
+
def rrhx_metadata(self):
|
|
1387
|
+
return self._get_magnetic_metadata("rrhx")
|
|
1388
|
+
|
|
1389
|
+
@property
|
|
1390
|
+
def rrhy_metadata(self):
|
|
1391
|
+
return self._get_magnetic_metadata("rrhy")
|
|
@@ -17,6 +17,7 @@ from .standards import SCHEMA_FN_PATHS
|
|
|
17
17
|
# =============================================================================
|
|
18
18
|
attr_dict = get_schema("emeasurement", SCHEMA_FN_PATHS)
|
|
19
19
|
|
|
20
|
+
|
|
20
21
|
# ==============================================================================
|
|
21
22
|
# magnetic measurements
|
|
22
23
|
# ==============================================================================
|
|
@@ -40,8 +41,9 @@ class EMeasurement(Base):
|
|
|
40
41
|
|
|
41
42
|
super().__init__(attr_dict=attr_dict, **kwargs)
|
|
42
43
|
|
|
43
|
-
if self.
|
|
44
|
-
self.
|
|
44
|
+
if self.azm == 0:
|
|
45
|
+
if self.x != 0 or self.x2 != 0 or self.y != 0 or self.y2 != 0:
|
|
46
|
+
self.azm = self.azimuth
|
|
45
47
|
|
|
46
48
|
def __str__(self):
|
|
47
49
|
return "\n".join(
|
|
@@ -213,7 +213,7 @@ class Header(Location):
|
|
|
213
213
|
self,
|
|
214
214
|
longitude_format="LON",
|
|
215
215
|
latlon_format="dms",
|
|
216
|
-
required=
|
|
216
|
+
required=False,
|
|
217
217
|
):
|
|
218
218
|
"""
|
|
219
219
|
Write header information to a list of lines.
|
|
@@ -243,6 +243,8 @@ class Header(Location):
|
|
|
243
243
|
for key, value in self.to_dict(single=True, required=required).items():
|
|
244
244
|
if key in ["x", "x2", "y", "y2", "z", "z2"]:
|
|
245
245
|
continue
|
|
246
|
+
if value in [None, "None"]:
|
|
247
|
+
continue
|
|
246
248
|
if key in ["latitude"]:
|
|
247
249
|
key = "lat"
|
|
248
250
|
elif key in ["longitude"]:
|
|
@@ -10,6 +10,7 @@ Created on Sat Dec 4 14:13:37 2021
|
|
|
10
10
|
from mt_metadata.base import Base
|
|
11
11
|
from mt_metadata.base.helpers import validate_name
|
|
12
12
|
|
|
13
|
+
|
|
13
14
|
# ==============================================================================
|
|
14
15
|
# Info object
|
|
15
16
|
# ==============================================================================
|
|
@@ -444,11 +445,17 @@ class Information(Base):
|
|
|
444
445
|
new_dict[new_key] = value.split()[0]
|
|
445
446
|
elif key.lower().endswith("sen"):
|
|
446
447
|
comp = key.lower().split()[0]
|
|
447
|
-
new_dict[
|
|
448
|
-
|
|
449
|
-
|
|
448
|
+
new_dict[f"{comp}.sensor.manufacturer"] = (
|
|
449
|
+
"Phoenix Geophysics"
|
|
450
|
+
)
|
|
450
451
|
new_dict[f"{comp}.sensor.type"] = "Induction Coil"
|
|
451
452
|
new_dict[new_key] = value
|
|
453
|
+
elif new_key in [
|
|
454
|
+
"survey.time_period.start_date",
|
|
455
|
+
"survey.time_period.end_date",
|
|
456
|
+
]:
|
|
457
|
+
if value.count("-") == 1:
|
|
458
|
+
new_dict[new_key] = value.split("-")[0]
|
|
452
459
|
else:
|
|
453
460
|
new_dict[new_key] = value
|
|
454
461
|
|
|
@@ -461,8 +468,8 @@ class Information(Base):
|
|
|
461
468
|
new_dict[key] = value
|
|
462
469
|
|
|
463
470
|
if processing_parameters != []:
|
|
464
|
-
new_dict[
|
|
465
|
-
|
|
466
|
-
|
|
471
|
+
new_dict["transfer_function.processing_parameters"] = (
|
|
472
|
+
processing_parameters
|
|
473
|
+
)
|
|
467
474
|
|
|
468
475
|
self.info_dict = new_dict
|
|
@@ -358,14 +358,20 @@ class EMTFXML(emtf_xml.EMTF):
|
|
|
358
358
|
if hasattr(value, "to_xml") and callable(getattr(value, "to_xml")):
|
|
359
359
|
if key == "processing_info":
|
|
360
360
|
if skip_field_notes:
|
|
361
|
-
|
|
361
|
+
try:
|
|
362
|
+
value.remote_info._order.remove("field_notes")
|
|
363
|
+
except ValueError:
|
|
364
|
+
self.logger.debug("No field notes to skip.")
|
|
362
365
|
if value.remote_info.site.id in [
|
|
363
366
|
None,
|
|
364
367
|
"",
|
|
365
368
|
"None",
|
|
366
369
|
"none",
|
|
367
370
|
]:
|
|
368
|
-
|
|
371
|
+
try:
|
|
372
|
+
value.remote_info._order.remove("site")
|
|
373
|
+
except ValueError:
|
|
374
|
+
self.logger.debug("No remote field notes to skip.")
|
|
369
375
|
element = value.to_xml()
|
|
370
376
|
if isinstance(element, list):
|
|
371
377
|
for item in element:
|
|
@@ -432,7 +432,7 @@ class TransferFunction(Base):
|
|
|
432
432
|
pass
|
|
433
433
|
|
|
434
434
|
comp_element = et.SubElement(
|
|
435
|
-
period_element, key.replace("_", ".").
|
|
435
|
+
period_element, key.replace("_", ".").upper(), attr_dict
|
|
436
436
|
)
|
|
437
437
|
idx_dict = self.write_dict[key]
|
|
438
438
|
shape = arr.shape
|
|
@@ -20,6 +20,8 @@ from mt_metadata.transfer_functions.io.emtfxml.metadata import helpers
|
|
|
20
20
|
|
|
21
21
|
# =============================================================================
|
|
22
22
|
attr_dict = get_schema("period_range", SCHEMA_FN_PATHS)
|
|
23
|
+
|
|
24
|
+
|
|
23
25
|
# =============================================================================
|
|
24
26
|
class PeriodRange(Base):
|
|
25
27
|
__doc__ = write_lines(attr_dict)
|
|
@@ -45,7 +47,10 @@ class PeriodRange(Base):
|
|
|
45
47
|
|
|
46
48
|
root = et.Element(
|
|
47
49
|
self.__class__.__name__,
|
|
48
|
-
{
|
|
50
|
+
{
|
|
51
|
+
"min": f"{self.min:<16.5E}".strip(),
|
|
52
|
+
"max": f"{self.max:<16.5E}".strip(),
|
|
53
|
+
},
|
|
49
54
|
)
|
|
50
55
|
if string:
|
|
51
56
|
return element_to_string(root)
|
|
@@ -11,7 +11,11 @@ Created on Wed Dec 23 21:30:36 2020
|
|
|
11
11
|
# =============================================================================
|
|
12
12
|
# Imports
|
|
13
13
|
# =============================================================================
|
|
14
|
-
from mt_metadata.base.helpers import
|
|
14
|
+
from mt_metadata.base.helpers import (
|
|
15
|
+
write_lines,
|
|
16
|
+
dict_to_xml,
|
|
17
|
+
element_to_string,
|
|
18
|
+
)
|
|
15
19
|
from mt_metadata.base import get_schema, Base
|
|
16
20
|
from .standards import SCHEMA_FN_PATHS
|
|
17
21
|
from . import Person
|
|
@@ -40,7 +44,7 @@ class Provenance(Base):
|
|
|
40
44
|
|
|
41
45
|
@property
|
|
42
46
|
def create_time(self):
|
|
43
|
-
return self._creation_dt.iso_str
|
|
47
|
+
return self._creation_dt.iso_str.split(".")[0]
|
|
44
48
|
|
|
45
49
|
@create_time.setter
|
|
46
50
|
def create_time(self, dt_str):
|
|
@@ -10,53 +10,11 @@ from mt_metadata.base.helpers import write_lines
|
|
|
10
10
|
from mt_metadata.base import get_schema, Base
|
|
11
11
|
from .standards import SCHEMA_FN_PATHS
|
|
12
12
|
|
|
13
|
+
from mt_metadata.transfer_functions import CHANNEL_MAPS
|
|
14
|
+
|
|
13
15
|
# =============================================================================
|
|
14
16
|
attr_dict = get_schema("channel_nomenclature", SCHEMA_FN_PATHS)
|
|
15
17
|
|
|
16
|
-
# Define allowed sets of channel labellings
|
|
17
|
-
STANDARD_INPUT_NAMES = [
|
|
18
|
-
"hx",
|
|
19
|
-
"hy",
|
|
20
|
-
]
|
|
21
|
-
STANDARD_OUTPUT_NAMES = [
|
|
22
|
-
"ex",
|
|
23
|
-
"ey",
|
|
24
|
-
"hz",
|
|
25
|
-
]
|
|
26
|
-
|
|
27
|
-
def load_channel_maps():
|
|
28
|
-
"""
|
|
29
|
-
:return: Keys are the channel_nomenclature schema keywords.
|
|
30
|
-
Values are dictionaries which map the STANDARD_INPUT_NAMES, \
|
|
31
|
-
STANDARD_OUTPUT_NAMES to the channel names associated with a given
|
|
32
|
-
channel nomenclature
|
|
33
|
-
:rtype: dict
|
|
34
|
-
"""
|
|
35
|
-
import json
|
|
36
|
-
import pathlib
|
|
37
|
-
fn = pathlib.Path(__file__).parent.joinpath("standards", "channel_nomenclatures.json")
|
|
38
|
-
with open(fn) as f:
|
|
39
|
-
channel_maps = json.loads(f.read())
|
|
40
|
-
return channel_maps
|
|
41
|
-
|
|
42
|
-
CHANNEL_MAPS = load_channel_maps()
|
|
43
|
-
|
|
44
|
-
def get_allowed_channel_names(standard_names):
|
|
45
|
-
"""
|
|
46
|
-
:param standard_names: one of STANDARD_INPUT_NAMES, or STANDARD_OUTPUT_NAMES
|
|
47
|
-
:type standard_names: list
|
|
48
|
-
:return: allowed_names: list of channel names that are supported
|
|
49
|
-
:rtype: list
|
|
50
|
-
"""
|
|
51
|
-
allowed_names = []
|
|
52
|
-
for ch in standard_names:
|
|
53
|
-
for _, channel_map in CHANNEL_MAPS.items():
|
|
54
|
-
allowed_names.append(channel_map[ch])
|
|
55
|
-
allowed_names = list(set(allowed_names))
|
|
56
|
-
return allowed_names
|
|
57
|
-
|
|
58
|
-
ALLOWED_INPUT_CHANNELS = get_allowed_channel_names(STANDARD_INPUT_NAMES)
|
|
59
|
-
ALLOWED_OUTPUT_CHANNELS = get_allowed_channel_names(STANDARD_OUTPUT_NAMES)
|
|
60
18
|
|
|
61
19
|
# =============================================================================
|
|
62
20
|
class ChannelNomenclature(Base):
|
|
@@ -31,5 +31,50 @@
|
|
|
31
31
|
"alias": [],
|
|
32
32
|
"example": "2",
|
|
33
33
|
"default": 2
|
|
34
|
+
},
|
|
35
|
+
"r0": {
|
|
36
|
+
"type": "float",
|
|
37
|
+
"required": true,
|
|
38
|
+
"style": "number",
|
|
39
|
+
"units": null,
|
|
40
|
+
"description": "The number of standard deviations where the influence function changes from linear to quadratic",
|
|
41
|
+
"options": [],
|
|
42
|
+
"alias": [],
|
|
43
|
+
"example": "1.4",
|
|
44
|
+
"default": 1.5
|
|
45
|
+
},
|
|
46
|
+
"u0": {
|
|
47
|
+
"type": "float",
|
|
48
|
+
"required": true,
|
|
49
|
+
"style": "number",
|
|
50
|
+
"units": null,
|
|
51
|
+
"description": "Control for redescending Huber regression weights.",
|
|
52
|
+
"options": [],
|
|
53
|
+
"alias": [],
|
|
54
|
+
"example": "2.8",
|
|
55
|
+
"default": 2.8
|
|
56
|
+
},
|
|
57
|
+
"tolerance": {
|
|
58
|
+
"type": "float",
|
|
59
|
+
"required": true,
|
|
60
|
+
"style": "number",
|
|
61
|
+
"units": null,
|
|
62
|
+
"description": "Control for convergence of RME algorithm. Lower means more iterations",
|
|
63
|
+
"options": [],
|
|
64
|
+
"alias": [],
|
|
65
|
+
"example": "0.005",
|
|
66
|
+
"default": 0.005
|
|
67
|
+
},
|
|
68
|
+
"verbosity": {
|
|
69
|
+
"type": "int",
|
|
70
|
+
"required": true,
|
|
71
|
+
"style": "number",
|
|
72
|
+
"units": null,
|
|
73
|
+
"description": "Control for logging messages during regression -- Higher means more messages",
|
|
74
|
+
"options": [0, 1, 2],
|
|
75
|
+
"alias": [],
|
|
76
|
+
"example": "1",
|
|
77
|
+
"default": 0
|
|
78
|
+
|
|
34
79
|
}
|
|
35
|
-
}
|
|
80
|
+
}
|
|
@@ -17,6 +17,8 @@ from .run import Run
|
|
|
17
17
|
|
|
18
18
|
# =============================================================================
|
|
19
19
|
attr_dict = get_schema("station", SCHEMA_FN_PATHS)
|
|
20
|
+
|
|
21
|
+
|
|
20
22
|
# =============================================================================
|
|
21
23
|
class Station(Base):
|
|
22
24
|
__doc__ = write_lines(attr_dict)
|
|
@@ -88,8 +90,8 @@ class Station(Base):
|
|
|
88
90
|
processing
|
|
89
91
|
|
|
90
92
|
[
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
+
"station",
|
|
94
|
+
"run",
|
|
93
95
|
"start",
|
|
94
96
|
"end",
|
|
95
97
|
"mth5_path",
|
|
@@ -106,8 +108,8 @@ class Station(Base):
|
|
|
106
108
|
for run in self.runs:
|
|
107
109
|
for tp in run.time_periods:
|
|
108
110
|
entry = {
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
+
"station": self.id,
|
|
112
|
+
"run": run.id,
|
|
111
113
|
"start": tp.start,
|
|
112
114
|
"end": tp.end,
|
|
113
115
|
"mth5_path": self.mth5_path,
|
|
@@ -130,8 +132,8 @@ class Station(Base):
|
|
|
130
132
|
set a data frame
|
|
131
133
|
|
|
132
134
|
[
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
+
"station",
|
|
136
|
+
"run",
|
|
135
137
|
"start",
|
|
136
138
|
"end",
|
|
137
139
|
"mth5_path",
|
|
@@ -150,15 +152,17 @@ class Station(Base):
|
|
|
150
152
|
|
|
151
153
|
self.runs = []
|
|
152
154
|
|
|
153
|
-
self.id = df.
|
|
155
|
+
self.id = df.station.unique()[0]
|
|
154
156
|
self.mth5_path = df.mth5_path.unique()[0]
|
|
155
157
|
self.remote = df.remote.unique()[0]
|
|
156
158
|
|
|
157
159
|
for entry in df.itertuples():
|
|
158
160
|
try:
|
|
159
|
-
r = self.run_dict[entry.
|
|
161
|
+
r = self.run_dict[entry.run]
|
|
160
162
|
r.time_periods.append(
|
|
161
|
-
TimePeriod(
|
|
163
|
+
TimePeriod(
|
|
164
|
+
start=entry.start.isoformat(), end=entry.end.isoformat()
|
|
165
|
+
)
|
|
162
166
|
)
|
|
163
167
|
|
|
164
168
|
except KeyError:
|
|
@@ -167,7 +171,7 @@ class Station(Base):
|
|
|
167
171
|
else:
|
|
168
172
|
channel_scale_factors = {}
|
|
169
173
|
r = Run(
|
|
170
|
-
id=entry.
|
|
174
|
+
id=entry.run,
|
|
171
175
|
sample_rate=entry.sample_rate,
|
|
172
176
|
input_channels=entry.input_channels,
|
|
173
177
|
output_channels=entry.output_channels,
|
|
@@ -175,6 +179,8 @@ class Station(Base):
|
|
|
175
179
|
)
|
|
176
180
|
|
|
177
181
|
r.time_periods.append(
|
|
178
|
-
TimePeriod(
|
|
182
|
+
TimePeriod(
|
|
183
|
+
start=entry.start.isoformat(), end=entry.end.isoformat()
|
|
184
|
+
)
|
|
179
185
|
)
|
|
180
186
|
self.runs.append(r)
|
|
@@ -117,14 +117,14 @@ class Stations(Base):
|
|
|
117
117
|
|
|
118
118
|
"""
|
|
119
119
|
|
|
120
|
-
station = df[df.remote == False].
|
|
121
|
-
rr_stations = df[df.remote == True].
|
|
120
|
+
station = df[df.remote == False].station.unique()[0]
|
|
121
|
+
rr_stations = df[df.remote == True].station.unique()
|
|
122
122
|
|
|
123
|
-
self.local.from_dataset_dataframe(df[df.
|
|
123
|
+
self.local.from_dataset_dataframe(df[df.station == station])
|
|
124
124
|
|
|
125
125
|
for rr_station in rr_stations:
|
|
126
126
|
rr = Station()
|
|
127
|
-
rr.from_dataset_dataframe(df[df.
|
|
127
|
+
rr.from_dataset_dataframe(df[df.station == rr_station])
|
|
128
128
|
self.add_remote(rr)
|
|
129
129
|
|
|
130
130
|
def to_dataset_dataframe(self):
|
mt_metadata/utils/mttime.py
CHANGED
mt_metadata/utils/validators.py
CHANGED
|
@@ -378,6 +378,15 @@ def validate_default(value_dict):
|
|
|
378
378
|
|
|
379
379
|
def validate_value_type(value, v_type, style=None):
|
|
380
380
|
"""
|
|
381
|
+
|
|
382
|
+
:param value:
|
|
383
|
+
:type value:
|
|
384
|
+
:param v_type:
|
|
385
|
+
:type v_type:
|
|
386
|
+
:param style:
|
|
387
|
+
:type style:
|
|
388
|
+
:return:
|
|
389
|
+
|
|
381
390
|
validate type from standards
|
|
382
391
|
|
|
383
392
|
"""
|
|
@@ -469,7 +478,7 @@ def validate_value_type(value, v_type, style=None):
|
|
|
469
478
|
|
|
470
479
|
# if a number convert to appropriate type
|
|
471
480
|
elif isinstance(
|
|
472
|
-
value, (float, np.
|
|
481
|
+
value, (float, np.float16, np.float32, np.float64)
|
|
473
482
|
):
|
|
474
483
|
if v_type is int:
|
|
475
484
|
return int(value)
|
|
@@ -481,7 +490,7 @@ def validate_value_type(value, v_type, style=None):
|
|
|
481
490
|
elif isinstance(value, Iterable):
|
|
482
491
|
if v_type is str:
|
|
483
492
|
if isinstance(value, np.ndarray):
|
|
484
|
-
value = value.astype(np.
|
|
493
|
+
value = value.astype(np.str_)
|
|
485
494
|
value = [
|
|
486
495
|
f"{v}".replace("'", "").replace('"', "") for v in value
|
|
487
496
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mt-metadata
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.7
|
|
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.7
|
|
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.7
|
|
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**
|
|
@@ -377,3 +377,52 @@ History
|
|
|
377
377
|
-----------------------
|
|
378
378
|
|
|
379
379
|
* update pandas.append to concat
|
|
380
|
+
|
|
381
|
+
0.3.4 ()
|
|
382
|
+
-----------------------
|
|
383
|
+
|
|
384
|
+
* Update HISTORY.rst by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/179
|
|
385
|
+
* Remove filter direction attributes by @kkappler in https://github.com/kujaku11/mt_metadata/pull/181
|
|
386
|
+
* Fix issue 173 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/182
|
|
387
|
+
* Patch 173 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/183
|
|
388
|
+
* Add some common helper functions by @kkappler in https://github.com/kujaku11/mt_metadata/pull/185
|
|
389
|
+
* Bug fix in FC layer by @kkappler in https://github.com/kujaku11/mt_metadata/pull/186
|
|
390
|
+
* Fix mth5 issue 187 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/187
|
|
391
|
+
* bug fixes by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/180
|
|
392
|
+
* updating how a TF is initiated, initialize xarray is expensive by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/188
|
|
393
|
+
* Change default value of `get_elevation` to False by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/191
|
|
394
|
+
* Updating git clone address in the readme by @xandrd in https://github.com/kujaku11/mt_metadata/pull/189
|
|
395
|
+
* Fix how Z-files read/write by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/192
|
|
396
|
+
* Adjust how TF._initialize_transfer_function is setup by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/193
|
|
397
|
+
* Add Ability to store processing configuration in TF by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/196
|
|
398
|
+
* Bump version: 0.3.3 → 0.3.4 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/198
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
0.3.5 ()
|
|
402
|
+
---------------------
|
|
403
|
+
|
|
404
|
+
* Patches by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/200
|
|
405
|
+
* Fix issue #202 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/203
|
|
406
|
+
* Patches by @kkappler in https://github.com/kujaku11/mt_metadata/pull/205
|
|
407
|
+
* Bump version: 0.3.4 → 0.3.5 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/206
|
|
408
|
+
|
|
409
|
+
0.3.6 ()
|
|
410
|
+
---------------------
|
|
411
|
+
|
|
412
|
+
* add method for accessing mag channel names by @kkappler in https://github.com/kujaku11/mt_metadata/pull/210
|
|
413
|
+
* Patches by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/208
|
|
414
|
+
* Fix mth5 issue 207 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/209
|
|
415
|
+
* Minor changes by @kkappler in https://github.com/kujaku11/mt_metadata/pull/211
|
|
416
|
+
* Patches by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/212
|
|
417
|
+
|
|
418
|
+
0.3.7 (2024-08-16)
|
|
419
|
+
---------------------
|
|
420
|
+
|
|
421
|
+
* Minor fixes numpy 2.0 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/213
|
|
422
|
+
* Fix issue 216 by @kkappler in https://github.com/kujaku11/mt_metadata/pull/218
|
|
423
|
+
* Patches by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/219
|
|
424
|
+
* add u0 and r0 as regression parameters by @kkappler in https://github.com/kujaku11/mt_metadata/pull/220
|
|
425
|
+
* Updating EMTF XML and StationXML writers by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/217
|
|
426
|
+
* Patches by @kkappler in https://github.com/kujaku11/mt_metadata/pull/221
|
|
427
|
+
* Patches by @kkappler in https://github.com/kujaku11/mt_metadata/pull/223
|
|
428
|
+
* Bump version: 0.3.6 → 0.3.7 by @kujaku11 in https://github.com/kujaku11/mt_metadata/pull/225
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
mt_metadata/__init__.py,sha256=
|
|
1
|
+
mt_metadata/__init__.py,sha256=Ij-OA6uOFAAYRMgD-lPkuf74v6_J326Orxlg2fKQVbM,5588
|
|
2
2
|
mt_metadata/base/__init__.py,sha256=bylCGBoJkeytxeQgMnuqivqFAvbyNE5htvP-3yu1GEY,184
|
|
3
|
-
mt_metadata/base/helpers.py,sha256=
|
|
3
|
+
mt_metadata/base/helpers.py,sha256=_SbJC8zDFmjQrmGbb6jBkqkWtaItNHyb8PREdPm5nl8,19798
|
|
4
4
|
mt_metadata/base/metadata.py,sha256=obOFdU6FPf2o-SbdxOxZ60LvzbI6Cp-bbRXw8KdkBao,27145
|
|
5
5
|
mt_metadata/base/schema.py,sha256=MvZBvy2elYia5VLRXqOV9x0GIklEWLM4qpTdqo820P4,12842
|
|
6
6
|
mt_metadata/data/__init__.py,sha256=PECwullCdCwKGpd1fkQc1jL8CboaSQfy_Cdm-obl-Y8,217
|
|
@@ -69,7 +69,7 @@ mt_metadata/timeseries/provenance.py,sha256=GyF-VFdPa_EIlRiIO4NDC-emFXbX2DNLOSrs
|
|
|
69
69
|
mt_metadata/timeseries/rating.py,sha256=Kyx9PV4KvKZzUIo9aoOdozU9umh5zFW62nXljZZPSKs,826
|
|
70
70
|
mt_metadata/timeseries/run.py,sha256=iZ5gr7_HXvFAVBN5ONdIotlbKH1wjWy-ySE7vmCgOMY,14009
|
|
71
71
|
mt_metadata/timeseries/software.py,sha256=ziFip_B_Y27x9zRizJJX3mW57JnKh2saNCm-K4hWkLg,1224
|
|
72
|
-
mt_metadata/timeseries/station.py,sha256=
|
|
72
|
+
mt_metadata/timeseries/station.py,sha256=fM6LZVYOjA18y8orPu4R_fV_oIDNqBJNWcD1aS4JoYA,10710
|
|
73
73
|
mt_metadata/timeseries/survey.py,sha256=dTyFnjtmn4tzEjli_cebPeE6kOBTts1Un6HaqzjzpYI,11831
|
|
74
74
|
mt_metadata/timeseries/time_period.py,sha256=eUFucwMY8Gsoi375pwuPlrg-HCBENU6UJ-sR6_SDxe0,1653
|
|
75
75
|
mt_metadata/timeseries/timing_system.py,sha256=3Uvu_Ihk1b1SyPFMKHWCDe1_BUfiVYphpatRP3wwS-s,839
|
|
@@ -77,7 +77,7 @@ mt_metadata/timeseries/filters/__init__.py,sha256=9FaNM3OVQ1dMiAn5JyfSK8QtICqGXH
|
|
|
77
77
|
mt_metadata/timeseries/filters/channel_response.py,sha256=yxPaukC2yyEJFayniSyH2IPNGgE4oDIFMmTp4o3jJ1I,17297
|
|
78
78
|
mt_metadata/timeseries/filters/coefficient_filter.py,sha256=HryPmsFGr-SEkox85DBYc3q8A3M4C_Hmjc-CNvm6e-w,3322
|
|
79
79
|
mt_metadata/timeseries/filters/filter_base.py,sha256=IiPhOkVvJUbdboFxWWeKyj1iKdW1HE061nvBdw6G8TM,12885
|
|
80
|
-
mt_metadata/timeseries/filters/filtered.py,sha256=
|
|
80
|
+
mt_metadata/timeseries/filters/filtered.py,sha256=1Yj85F2To98iIlXDFhs12-YfaB3m94Sd9vJ-r0KZ7q0,9100
|
|
81
81
|
mt_metadata/timeseries/filters/fir_filter.py,sha256=jdjtaZjaTE5a27YlTVEEN-777bXIutjpmqcVLEw6F0o,6767
|
|
82
82
|
mt_metadata/timeseries/filters/frequency_response_table_filter.py,sha256=36GqpOSAr3HhjXxFbtZ5iHMD5cdKa0hGYoPpY7otqa0,7734
|
|
83
83
|
mt_metadata/timeseries/filters/helper_functions.py,sha256=u7YpnkuPiHwEb9Qrk2EyQ6HXofKkDNYLpC3GtlChyAk,4124
|
|
@@ -125,24 +125,24 @@ mt_metadata/timeseries/stationxml/fdsn_tools.py,sha256=6H1hZCxf5-skNSjPazMS_wKu4
|
|
|
125
125
|
mt_metadata/timeseries/stationxml/utils.py,sha256=16617e6snyrsNjletGbw-gLYQ2vt-7VfYPokz6dakts,7257
|
|
126
126
|
mt_metadata/timeseries/stationxml/xml_channel_mt_channel.py,sha256=fQw13j8QAyZQoMJX5xX24nDC0Ub4EVfpOORKTnemLA0,22122
|
|
127
127
|
mt_metadata/timeseries/stationxml/xml_equipment_mt_run.py,sha256=yRPk6lhnzkpgARe6lQkU_-vZrTDDmIIeRCTI9Wig9XY,5151
|
|
128
|
-
mt_metadata/timeseries/stationxml/xml_inventory_mt_experiment.py,sha256=
|
|
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
|
|
130
130
|
mt_metadata/timeseries/stationxml/xml_station_mt_station.py,sha256=pelvkiQios4gz8gHebWY1MPSsfBhfTz6uTgC92Yz9-4,11112
|
|
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
|
-
mt_metadata/transfer_functions/__init__.py,sha256=
|
|
133
|
+
mt_metadata/transfer_functions/__init__.py,sha256=7F_9sev0KlRfswx_H0j8-1PJs-ZTpD04qwjYh1jst8w,1288
|
|
134
134
|
mt_metadata/transfer_functions/core.py,sha256=AmWmH2-k-2W2uGTsaozZkq6p3KURWWgfMHCbEMZiTU8,80641
|
|
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=mFUahyjiIZnh45masDsue4pJkU4FifnZOi4I8rlvXh0,53798
|
|
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
|
-
mt_metadata/transfer_functions/io/edi/metadata/define_measurement.py,sha256=
|
|
142
|
-
mt_metadata/transfer_functions/io/edi/metadata/emeasurement.py,sha256=
|
|
143
|
-
mt_metadata/transfer_functions/io/edi/metadata/header.py,sha256=
|
|
141
|
+
mt_metadata/transfer_functions/io/edi/metadata/define_measurement.py,sha256=AQfJQSTVs-iOuEyiCnBFjMwqgowD0dkL2Bp5mSAhQ8s,16318
|
|
142
|
+
mt_metadata/transfer_functions/io/edi/metadata/emeasurement.py,sha256=IE0FJnVYM-MU0qT_H10wWaeaZJmfCDBr32jtVJMKY8g,3175
|
|
143
|
+
mt_metadata/transfer_functions/io/edi/metadata/header.py,sha256=uECGOQ4qD3LkBtzHbxw67heSFH20lfWlfKk4vj0ME94,9271
|
|
144
144
|
mt_metadata/transfer_functions/io/edi/metadata/hmeasurement.py,sha256=5w3fbcSRasSaSrLq3qm6TJPXgkOIGXrIeclmhh3KMTc,2245
|
|
145
|
-
mt_metadata/transfer_functions/io/edi/metadata/information.py,sha256=
|
|
145
|
+
mt_metadata/transfer_functions/io/edi/metadata/information.py,sha256=BaqNLN4vByGTHHiioMTY6XNG7gEIIzJOshzUNOubyK4,17389
|
|
146
146
|
mt_metadata/transfer_functions/io/edi/metadata/standards/__init__.py,sha256=Y3rdyXKOgxbSh9FQxQCCplsbqxwWmFIGm6yZG1cj0Uw,135
|
|
147
147
|
mt_metadata/transfer_functions/io/edi/metadata/standards/data_section.json,sha256=HmEpRxnJ5HPwXdWjpmDnwReVucPu2Zm1saClauEUP2c,3045
|
|
148
148
|
mt_metadata/transfer_functions/io/edi/metadata/standards/define_measurement.json,sha256=uyiTHtX6UsO_gIQxtRMVExI7-1T73ESkX-LAPScQybU,2572
|
|
@@ -150,14 +150,14 @@ mt_metadata/transfer_functions/io/edi/metadata/standards/emeasurement.json,sha25
|
|
|
150
150
|
mt_metadata/transfer_functions/io/edi/metadata/standards/header.json,sha256=fj0wzxyYB5HmgqpExaiJMWen8vVjRvZh7bWD2PPANt8,6444
|
|
151
151
|
mt_metadata/transfer_functions/io/edi/metadata/standards/hmeasurement.json,sha256=0m7EkHrrWlq8r96aMF1M1NhrtkyYJBgA7gYtnuyj_gY,2450
|
|
152
152
|
mt_metadata/transfer_functions/io/emtfxml/__init__.py,sha256=V5N_vahhWUH8A3R_xd66CMEVM1adcUeG2RqGWrDCBks,73
|
|
153
|
-
mt_metadata/transfer_functions/io/emtfxml/emtfxml.py,sha256=
|
|
153
|
+
mt_metadata/transfer_functions/io/emtfxml/emtfxml.py,sha256=iqjZvfmnp8Ib02MJge4z255iOf56enBzQPP46YzRSq4,53751
|
|
154
154
|
mt_metadata/transfer_functions/io/emtfxml/metadata/__init__.py,sha256=mSVzB8ghPaBJgwVcKJyQ75CJEUF5k0VoZQxkvV01_00,2364
|
|
155
155
|
mt_metadata/transfer_functions/io/emtfxml/metadata/attachment.py,sha256=U_2DxKJHKqZqldq-XHiLbes_UT4u708xgoPAyc0xl5c,2459
|
|
156
156
|
mt_metadata/transfer_functions/io/emtfxml/metadata/channels.py,sha256=FENaOpoElNezd0ESZgk01-KGxHbv6Euhyq8O6YImF-c,889
|
|
157
157
|
mt_metadata/transfer_functions/io/emtfxml/metadata/citation.py,sha256=VN_VmnLJ-FOAnp_i3Ap9tpBUMB6pfaMdlJW8_9hhYHU,1500
|
|
158
158
|
mt_metadata/transfer_functions/io/emtfxml/metadata/comment.py,sha256=DywmSp9-0Z6gAX9UPzkCzSxlXWi6AWZ_s_BGubZslmw,2409
|
|
159
159
|
mt_metadata/transfer_functions/io/emtfxml/metadata/copyright.py,sha256=qNLs4AyIferfT6Q1rftX77UkfRD21WecpKCOx6tbUUg,1802
|
|
160
|
-
mt_metadata/transfer_functions/io/emtfxml/metadata/data.py,sha256=
|
|
160
|
+
mt_metadata/transfer_functions/io/emtfxml/metadata/data.py,sha256=LqAflYpEXeNvcZNYzfp8QwPzkv1Hl_m3sRJrO-vLs7k,14715
|
|
161
161
|
mt_metadata/transfer_functions/io/emtfxml/metadata/data_quality_notes.py,sha256=I2A_4yg_iJXaRl-TuBjwb8E_eweKTQf-zFAv-cLfq_4,2325
|
|
162
162
|
mt_metadata/transfer_functions/io/emtfxml/metadata/data_quality_warnings.py,sha256=t236kiGYXsKQvWba4L-o01xtUuk2M2IjloUlFRRljlQ,1769
|
|
163
163
|
mt_metadata/transfer_functions/io/emtfxml/metadata/data_type.py,sha256=6OVVvjyxb9PScBxkfGsLbJYhwL-KAMLhY-4wphxZtSI,1919
|
|
@@ -166,7 +166,7 @@ mt_metadata/transfer_functions/io/emtfxml/metadata/dipole.py,sha256=U8DrDXh_wDql
|
|
|
166
166
|
mt_metadata/transfer_functions/io/emtfxml/metadata/electric.py,sha256=GiYdILYZowjaejkVvkKFlhyadbynOK2gkCbwBAjCoKE,1952
|
|
167
167
|
mt_metadata/transfer_functions/io/emtfxml/metadata/electrode.py,sha256=7Y5XTQX-30z6rqMJ8BUAWAH9Gg6DkJDIPF-7Awof9eM,1398
|
|
168
168
|
mt_metadata/transfer_functions/io/emtfxml/metadata/emtf.py,sha256=7X9rIF3glRRITpAvs1LbVOsgmeOa5ex_9GQxqGtIMFs,773
|
|
169
|
-
mt_metadata/transfer_functions/io/emtfxml/metadata/estimate.py,sha256=
|
|
169
|
+
mt_metadata/transfer_functions/io/emtfxml/metadata/estimate.py,sha256=BLn1dg7fy3W3nCDaWISClCxrsSlnNpOQCAB6SXgWQZk,2046
|
|
170
170
|
mt_metadata/transfer_functions/io/emtfxml/metadata/external_url.py,sha256=ZA9wCbGBHlbPXaYTvTgMncT9BfNkvQm9w28zuaHVSw4,1172
|
|
171
171
|
mt_metadata/transfer_functions/io/emtfxml/metadata/field_notes.py,sha256=mn4Vz6A57KuPNpU5ZD9lrB_rClzeKSKcjLwOdsVoBlE,1766
|
|
172
172
|
mt_metadata/transfer_functions/io/emtfxml/metadata/helpers.py,sha256=TDEYCLAgdu9Shjhyig14roId1TuaPjjUiX19VPouXuk,4494
|
|
@@ -175,11 +175,11 @@ mt_metadata/transfer_functions/io/emtfxml/metadata/location.py,sha256=MctHGyQt19
|
|
|
175
175
|
mt_metadata/transfer_functions/io/emtfxml/metadata/magnetic.py,sha256=LaSiVNlZ5c-tsvMTxmbPAuATlR0EKT7R7olVGivNmdk,1807
|
|
176
176
|
mt_metadata/transfer_functions/io/emtfxml/metadata/magnetometer.py,sha256=110rVKp3pWvtQkrOJFvp5K28KCPogPra6dGA8M1nzH4,1343
|
|
177
177
|
mt_metadata/transfer_functions/io/emtfxml/metadata/orientation.py,sha256=57Vk4_pa6MrjzU18ifNXTr7GcCFK2w6sxosW7mzp5oI,2493
|
|
178
|
-
mt_metadata/transfer_functions/io/emtfxml/metadata/period_range.py,sha256=
|
|
178
|
+
mt_metadata/transfer_functions/io/emtfxml/metadata/period_range.py,sha256=SE4ZpK2kpDDbtu3pQRWPlLVvd4dUm8zxeYNeDeM87Vg,1709
|
|
179
179
|
mt_metadata/transfer_functions/io/emtfxml/metadata/person.py,sha256=tawfhoVOZ35sjjwEVSDOmL49_1V0n32mHMSfmvtmzjA,830
|
|
180
180
|
mt_metadata/transfer_functions/io/emtfxml/metadata/primary_data.py,sha256=m83_SmZxE_t9CwgPmInv6fUKwbtzr_QQNxr9I6MA0QE,1018
|
|
181
181
|
mt_metadata/transfer_functions/io/emtfxml/metadata/processing_info.py,sha256=5ZO2nMSBliB_ILBbIzk_CpoqP4bOHxEOhOYVJo9f3n8,3208
|
|
182
|
-
mt_metadata/transfer_functions/io/emtfxml/metadata/provenance.py,sha256=
|
|
182
|
+
mt_metadata/transfer_functions/io/emtfxml/metadata/provenance.py,sha256=QkF5NFT1DA2u21iBVR0Bzc5FQtrYsO2-uEvYnnXzJws,2460
|
|
183
183
|
mt_metadata/transfer_functions/io/emtfxml/metadata/remote_info.py,sha256=cx_bvR2Oy2uXnAm20i-AC_cr-xO1WkfncTJz0vtxNPU,2291
|
|
184
184
|
mt_metadata/transfer_functions/io/emtfxml/metadata/remote_ref.py,sha256=DJYXIkGdHCXDHW5eDiDvj6_h1sg4YbbyQnV_wTtNSgQ,1724
|
|
185
185
|
mt_metadata/transfer_functions/io/emtfxml/metadata/run.py,sha256=AtcPoAHn6FPoPitwjXuJGRnjwgvVJBgBIO4wlOGVCT8,4848
|
|
@@ -192,7 +192,7 @@ mt_metadata/transfer_functions/io/emtfxml/metadata/standards/attachment.json,sha
|
|
|
192
192
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/channels.json,sha256=cSc7GIT8GYVxDCETrFOu-HLnaGqRYUA9aWU5ngTD0Jg,565
|
|
193
193
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/citation.json,sha256=L_NXO3zbJGEM31ePsaZCtaV8TjWbrrVNHHY2nalEMMs,2269
|
|
194
194
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/comment.json,sha256=E9_GO681t7OZTOctGrDm7QaujS2VY7HEha76CjY3avo,880
|
|
195
|
-
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/copyright.json,sha256=
|
|
195
|
+
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/copyright.json,sha256=eYj5YnKa6e2bX4GLzdrY3xS8CN7nO6UdcQW4UsUp4RU,2516
|
|
196
196
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/data_quality_notes.json,sha256=VBIMMzIgPFKMNLMQ1YB1m2ysg-IoFmen_LYsCXQqxMo,942
|
|
197
197
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/data_quality_warnings.json,sha256=afT-uIAwKNM5SsumxANsICXOe_Zz_Ttpn9RHK461oRs,273
|
|
198
198
|
mt_metadata/transfer_functions/io/emtfxml/metadata/standards/data_type.json,sha256=wd_8NSn7biExKr8GEOCu95KasmbIzJf3ushAkRkWAuk,2995
|
|
@@ -278,15 +278,15 @@ mt_metadata/transfer_functions/processing/__init__.py,sha256=frcCV1k9oG9oKj3dpUq
|
|
|
278
278
|
mt_metadata/transfer_functions/processing/aurora/__init__.py,sha256=5ALxSEnzNkITVvK4yPCoadLdCv_VNnr3UuvVDOu92Ck,646
|
|
279
279
|
mt_metadata/transfer_functions/processing/aurora/band.py,sha256=mNDkpJQbf7F7aF-FFma2zfUj2foiwNoTNkG-i3pwIUo,8355
|
|
280
280
|
mt_metadata/transfer_functions/processing/aurora/channel.py,sha256=TZHfy-XgrijdNVd4Sjbq3tjORFsJNZIzwa4_J7tDOHM,773
|
|
281
|
-
mt_metadata/transfer_functions/processing/aurora/channel_nomenclature.py,sha256=
|
|
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
283
|
mt_metadata/transfer_functions/processing/aurora/decimation_level.py,sha256=cZhV9BPM7kj3qSDg7HCM2vyV7VW1-jWOTE7ISASKRsA,10657
|
|
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
|
|
287
287
|
mt_metadata/transfer_functions/processing/aurora/run.py,sha256=DxpKHdNRGaE4VPqzVnue9NMF6PPd3kAPHKEkv7t2xzA,4123
|
|
288
|
-
mt_metadata/transfer_functions/processing/aurora/station.py,sha256=
|
|
289
|
-
mt_metadata/transfer_functions/processing/aurora/stations.py,sha256=
|
|
288
|
+
mt_metadata/transfer_functions/processing/aurora/station.py,sha256=TokM12LFlcTnNHaXHId8Lj5Ie1kwmx6dWRkFfAj1SVE,5236
|
|
289
|
+
mt_metadata/transfer_functions/processing/aurora/stations.py,sha256=lbRs80-zL0jmIB7ISVczu61Rt_vxl99cBXJ4gP0TBT8,4552
|
|
290
290
|
mt_metadata/transfer_functions/processing/aurora/window.py,sha256=Z96nK50Fg00KkCKNVC08E-6bCoMe2uF_6agF5rQf9Vo,1210
|
|
291
291
|
mt_metadata/transfer_functions/processing/aurora/standards/__init__.py,sha256=Y3rdyXKOgxbSh9FQxQCCplsbqxwWmFIGm6yZG1cj0Uw,135
|
|
292
292
|
mt_metadata/transfer_functions/processing/aurora/standards/band.json,sha256=duX9-GpjopKdccxgLYfCBhhw2j28oTRmV_mCuN5cl2o,2105
|
|
@@ -298,7 +298,7 @@ mt_metadata/transfer_functions/processing/aurora/standards/decimation.json,sha25
|
|
|
298
298
|
mt_metadata/transfer_functions/processing/aurora/standards/decimation_level.json,sha256=YD6kCi0OmSLBv-v5Vf6L-pEJcLgW7ImA0he7aHJFRhA,4176
|
|
299
299
|
mt_metadata/transfer_functions/processing/aurora/standards/estimator.json,sha256=NPzjnTLuq11xGMYK9F6WGlj-dI2nwWN_jXD-ArJJqy4,628
|
|
300
300
|
mt_metadata/transfer_functions/processing/aurora/standards/processing.json,sha256=UEItryn1KidAsBnXNu3YyqoR2b51N0aSPlJrIDG5cmU,1211
|
|
301
|
-
mt_metadata/transfer_functions/processing/aurora/standards/regression.json,sha256=
|
|
301
|
+
mt_metadata/transfer_functions/processing/aurora/standards/regression.json,sha256=wAME7-4SiTVptXn4spdTAMq9-G6Rtm1Pk9PqMVKSEkE,2186
|
|
302
302
|
mt_metadata/transfer_functions/processing/aurora/standards/run.json,sha256=o4Oe3QrWH7g1r8Z4cRQMk0bTf9Tp02dMLpVPER7QI5I,1423
|
|
303
303
|
mt_metadata/transfer_functions/processing/aurora/standards/station.json,sha256=kVlj3AVKs3rbLPnTZkPPaBoMthpZVJkz4JoO0q4z0us,1173
|
|
304
304
|
mt_metadata/transfer_functions/processing/aurora/standards/stations.json,sha256=-ZAipnSnZ3IT4fUgsHt9xUTA_yPA_lN3i9p4nHfZcrs,276
|
|
@@ -326,13 +326,13 @@ mt_metadata/transfer_functions/tf/standards/transfer_function.json,sha256=yTPACc
|
|
|
326
326
|
mt_metadata/utils/__init__.py,sha256=5TWhar2ujJY_pYkwDdggX8jU9CFXcxc9jX1yXc8TqJs,35
|
|
327
327
|
mt_metadata/utils/exceptions.py,sha256=PKWdjKfR95NJ-Rgx3rzu9Qmdj0thVHjcmEvHoC9HuBE,462
|
|
328
328
|
mt_metadata/utils/list_dict.py,sha256=BguxnQuNPf8aOMwULaaam22L4RUQ3SNzIkLqVh_gUQs,7668
|
|
329
|
-
mt_metadata/utils/mttime.py,sha256=
|
|
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
|
-
mt_metadata/utils/validators.py,sha256=
|
|
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.
|
|
332
|
+
mt_metadata/utils/validators.py,sha256=jQf0VBtfT5GMXlEUI5Hg1zILqSir9Ra4Moi4dL54KeM,16380
|
|
333
|
+
mt_metadata-0.3.7.dist-info/AUTHORS.rst,sha256=3RKy4std2XZQLNF6xYIiA8S5A0bBPqNO7ypJsuEhiN8,706
|
|
334
|
+
mt_metadata-0.3.7.dist-info/LICENSE,sha256=P33RkFPriIBxsgZtVzSn9KxYa2K7Am42OwMV0h_m5e0,1080
|
|
335
|
+
mt_metadata-0.3.7.dist-info/METADATA,sha256=dCuqaycFVp396z1u2LdlwnYTOI36qMNpu5i8sfk8_vI,20438
|
|
336
|
+
mt_metadata-0.3.7.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
337
|
+
mt_metadata-0.3.7.dist-info/top_level.txt,sha256=fxe_q_GEd9h6iR3050ZnrhSfxUSO5pR8u65souS4RWM,12
|
|
338
|
+
mt_metadata-0.3.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|