ararpy 0.2.2__py3-none-any.whl → 0.2.4__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.
ararpy/smp/table.py CHANGED
@@ -12,6 +12,7 @@
12
12
  import ast
13
13
  import re
14
14
  import copy
15
+ import numpy as np
15
16
  from .. import calc
16
17
  from . import (sample as samples, basic)
17
18
 
@@ -46,13 +47,11 @@ def update_table_data(smp: Sample, only_table: str = None):
46
47
  elif key == '4':
47
48
  data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.DegasValues]
48
49
  elif key == '5':
49
- smp.PublishValues[0] = copy.deepcopy(smp.DegasValues[ 0])
50
- smp.PublishValues[1] = copy.deepcopy(smp.DegasValues[ 8])
51
- smp.PublishValues[2] = copy.deepcopy(smp.DegasValues[10])
52
- smp.PublishValues[3] = copy.deepcopy(smp.DegasValues[20])
53
- smp.PublishValues[4] = copy.deepcopy(smp.DegasValues[24])
54
- smp.PublishValues[5:7] = copy.deepcopy(smp.ApparentAgeValues[2:4])
55
- smp.PublishValues[7:9] = copy.deepcopy(smp.ApparentAgeValues[6:8])
50
+ data = np.array(smp.CorrectedValues)
51
+ data[1:10:2] = np.abs(np.divide(data[1:10:2], data[0:10:2])) * 100
52
+ smp.PublishValues[0:10] = copy.deepcopy(data.tolist())
53
+ smp.PublishValues[10:14] = copy.deepcopy(smp.ApparentAgeValues[0:4])
54
+ smp.PublishValues[14:16] = copy.deepcopy(smp.ApparentAgeValues[6:8])
56
55
  data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.PublishValues]
57
56
  elif key == '6':
58
57
  data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.ApparentAgeValues]
@@ -61,7 +60,10 @@ def update_table_data(smp: Sample, only_table: str = None):
61
60
  elif key == '8':
62
61
  data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.TotalParam]
63
62
  else:
64
- data = [['']]
63
+ raise KeyError(f"Invalid table id")
64
+
65
+ data = _normalize_data(
66
+ data, len(comp.header), smp.Info.experiment.step_num, text_col_indexes=comp.text_indexes)
65
67
 
66
68
  try:
67
69
  params_to_check = {
@@ -95,61 +97,46 @@ def update_handsontable(smp: Sample, data: list, id: str):
95
97
 
96
98
  """
97
99
 
98
- def _normalize_data(a, cols, start_col=0):
99
- if len(a) >= cols:
100
- return a[start_col:cols]
101
- else:
102
- return a[start_col:] + [[''] * len(a[0])] * (cols - len(a))
103
-
104
- def _strToBool(cols):
105
- bools_dict = {
106
- 'true': True, 'false': False, 'True': True, 'False': False, '1': True, '0': False, 'none': False,
107
- }
108
- return [bools_dict.get(str(col).lower(), False) for col in cols]
109
-
110
- def _digitize_data(a):
111
- # pattern = r'^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$'
112
- # return [[ast.literal_eval(str(cell)) if re.fullmatch(pattern, str(cell)) else np.nan if str(cell) == "" else cell for cell in row] for row in a]
113
- return a
114
100
 
115
101
  try:
116
- smp.SequenceName = data[0]
102
+ col3 = _normalize_data(data[0:3], cols=3, rows=len(data[0]), text_col_indexes=[0, 1, 2])
117
103
  except IndexError:
118
- pass
104
+ raise
119
105
 
120
106
  update_all_table = False
121
107
  try:
122
- if data[1] != smp.SequenceValue or data[2] != smp.IsochronMark:
108
+ if col3[0] != smp.SequenceName or col3[1] != smp.SequenceValue or col3[2] != smp.IsochronMark:
123
109
  update_all_table = True
124
- smp.SequenceValue = data[1]
125
- smp.IsochronMark = data[2]
110
+ smp.SequenceName = col3[0]
111
+ smp.SequenceValue = col3[1]
112
+ smp.IsochronMark = col3[2]
126
113
  except IndexError:
127
114
  print(f"Check sequence value / isochron mark failed")
128
- pass
129
-
115
+ raise
116
+ n = len(data[0])
130
117
  if id == '1': # 样品值
131
- data = _normalize_data(data, len(samples.SAMPLE_INTERCEPT_HEADERS), 3)
118
+ data = _normalize_data(data, len(samples.SAMPLE_INTERCEPT_HEADERS), n, 3)
132
119
  smp.SampleIntercept = _digitize_data(data)
133
120
  elif id == '2': # 本底值
134
- data = _normalize_data(data, len(samples.BLANK_INTERCEPT_HEADERS), 3)
121
+ data = _normalize_data(data, len(samples.BLANK_INTERCEPT_HEADERS), n, 3)
135
122
  smp.BlankIntercept = _digitize_data(data)
136
123
  elif id == '3': # 校正值
137
- data = _normalize_data(data, len(samples.CORRECTED_HEADERS), 3)
124
+ data = _normalize_data(data, len(samples.CORRECTED_HEADERS), n, 3)
138
125
  smp.CorrectedValues = _digitize_data(data)
139
126
  elif id == '4': # Degas table
140
- data = _normalize_data(data, len(samples.DEGAS_HEADERS), 3)
127
+ data = _normalize_data(data, len(samples.DEGAS_HEADERS), n, 3)
141
128
  smp.DegasValues = _digitize_data(data)
142
129
  elif id == '5': # 发行表
143
- data = _normalize_data(data, len(samples.PUBLISH_TABLE_HEADERS), 3)
130
+ data = _normalize_data(data, len(samples.PUBLISH_TABLE_HEADERS), n, 3)
144
131
  smp.PublishValues = _digitize_data(data)
145
132
  elif id == '6': # 年龄谱
146
- data = _normalize_data(data, len(samples.SPECTRUM_TABLE_HEADERS), 3)
133
+ data = _normalize_data(data, len(samples.SPECTRUM_TABLE_HEADERS), n, 3)
147
134
  smp.ApparentAgeValues = _digitize_data(data)
148
135
  elif id == '7': # 等时线
149
- data = _normalize_data(data, len(samples.ISOCHRON_TABLE_HEADERS), 3)
136
+ data = _normalize_data(data, len(samples.ISOCHRON_TABLE_HEADERS), n, 3)
150
137
  smp.IsochronValues = _digitize_data(data)
151
138
  elif id == '8': # 总参数
152
- data = _normalize_data(data, len(samples.TOTAL_PARAMS_HEADERS), 3)
139
+ data = _normalize_data(data, len(samples.TOTAL_PARAMS_HEADERS), n, 3)
153
140
  data = _digitize_data(data)
154
141
  data[101: 112] = [_strToBool(i) for i in data[101: 112]]
155
142
  smp.TotalParam = data
@@ -199,4 +186,50 @@ def update_data_from_table(smp: Sample, only_table: str = None):
199
186
  pass
200
187
 
201
188
 
189
+ def _normalize_data(a, cols, rows, start_col=0, start_row=0, text_col_indexes=[]):
190
+ if isinstance(a, np.ndarray):
191
+ a = a.tolist()
192
+ if not isinstance(a, list):
193
+ raise ValueError(f"List required, but {type(a)} given.")
194
+ if len(a) >= cols:
195
+ a = a[start_col:cols]
196
+ else:
197
+ a = a[start_col:] + [[] for j in range(cols - len(a))]
198
+
199
+ def f(_, _i):
200
+ if _i in text_col_indexes:
201
+ if isinstance(_, type(None)):
202
+ return ""
203
+ if isinstance(_, float) and np.isnan(_):
204
+ return ""
205
+ return str(_)
206
+ else:
207
+ if _ in ["", None, np.nan]:
208
+ return np.nan
209
+ elif isinstance(_, str):
210
+ if _.lower() == 'true':
211
+ return 1
212
+ elif _.lower() == 'false':
213
+ return 0
214
+ return float(_)
215
+
216
+ for i in range(cols - start_col):
217
+ if len(a[i]) >= rows:
218
+ a[i] = [f(each, i + start_col) for each in a[i][start_row:rows]]
219
+ else:
220
+ a[i] = [f(each, i + start_col) for each in a[i][start_row:]] + [f("", i + start_col) for j in range(rows - len(a[i]))]
221
+
222
+ return a
223
+
224
+
225
+ def _digitize_data(a):
226
+ # pattern = r'^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$'
227
+ # return [[ast.literal_eval(str(cell)) if re.fullmatch(pattern, str(cell)) else np.nan if str(cell) == "" else cell for cell in row] for row in a]
228
+ return a
229
+
202
230
 
231
+ def _strToBool(cols):
232
+ bools_dict = {
233
+ 'true': True, 'false': False, 'True': True, 'False': False, '1': True, '0': False, 'none': False,
234
+ }
235
+ return [bools_dict.get(str(col).lower(), False) for col in cols]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ararpy
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: A project for Ar-Ar geochronology
5
5
  Home-page: https://github.com/wuyangchn/ararpy.git
6
6
  Author: Yang Wu
@@ -5,13 +5,13 @@ ararpy/Example - Show MDD results.py,sha256=YFkiQual60lyCClsfvivr4REY6waSYuomf0u
5
5
  ararpy/Example - Show all Kfs age spectra.py,sha256=1edPtBpFfS0lC7vLnLu34mDHt_xjbc8ptk6rZ--pf-I,12304
6
6
  ararpy/Example - Show random walk results.py,sha256=8WWvbAI7ySiMR-XwtFe5kTQihW3mcqzL3S7EUZdoxYo,15477
7
7
  ararpy/Example - Tc calculation.py,sha256=sD9pu3IaZ8mBV95rV2wOEhlQUexFNqBUoBqnNMdUBis,19617
8
- ararpy/__init__.py,sha256=wz69XzhfcI0QMPU2QJ8gZoWEsG2vHeSE7b5E7GytwI0,6767
8
+ ararpy/__init__.py,sha256=H-LaMP-KRGnQMY-ocBUgmRe9vohsJqj9gR-O_DZXSp0,5386
9
9
  ararpy/test.py,sha256=4F46-JJ1Ge12HGae0qO44Qc6kiEMHBgn2MsY_5LlHDo,3973
10
10
  ararpy/calc/__init__.py,sha256=kUjRuLE8TLuKOv3i976RnGJoEMj23QBZDu37LWs81U4,322
11
11
  ararpy/calc/age.py,sha256=WOZs70zXiBWDIEhXJLIaNiYTOFJNk0NDbH5e5zCbCks,5435
12
- ararpy/calc/arr.py,sha256=x6z16N2H6QFYAPY11lnPRFZsZfwWu2tSEo87q7M9Ym4,14869
12
+ ararpy/calc/arr.py,sha256=Kiads9ABfcBA3j_e_ZvpQou7tH-voOONoYFN2B8U5ak,15006
13
13
  ararpy/calc/basic.py,sha256=AMQrhkNHhHtiguqTe4GPOYLuV8TEJBXpRJXJAoOwD9w,4634
14
- ararpy/calc/corr.py,sha256=qh77w1uJ98x6b_N-0_u1seWc7YLtCRClpxG6fuYHx-M,21667
14
+ ararpy/calc/corr.py,sha256=e9HGsD1GCS_Kv7X_dFYachBxAJgeKg2GP--fvZHedns,21609
15
15
  ararpy/calc/err.py,sha256=63LtprqjemlIb1QGDst4Ggcv5KMSDHdlAIL-nyQs1eA,2691
16
16
  ararpy/calc/histogram.py,sha256=0GVbDdsjd91KQ1sa2B7NtZ4KGo0XpRIJapgIrzAwQUo,5777
17
17
  ararpy/calc/isochron.py,sha256=ej9G2e68k6yszonWHsLcEubh3TA7eh1upTJP_X0ttAA,5726
@@ -42,32 +42,32 @@ ararpy/examples/sample-default.smp,sha256=YNkoQGgPrsL_fXS7ZHxfRtLQWekCDqT9czS6vB
42
42
  ararpy/files/__init__.py,sha256=l5B5ZQ01WdtvjjN0aMkyAFNgpwANdM_1I0tQbqnRuEY,69
43
43
  ararpy/files/arr_file.py,sha256=pD5MxkAydL7cNq2wmKFUaOU4jHhc3MzTYrwbxZ3f46w,881
44
44
  ararpy/files/basic.py,sha256=k2GXgZjhqSmKvpXQLjsXDksS_ZLvqD7AWW54fXnYvTI,1228
45
- ararpy/files/calc_file.py,sha256=CmZsgUj2t2FnLcCE38pbOqej7M-CbhQs6KMFXE3PbQA,29233
45
+ ararpy/files/calc_file.py,sha256=-CZXmlHVf65hKMLhwp6eSewbxzxywXcnpycoEeLDhZA,29304
46
46
  ararpy/files/new_file.py,sha256=efblARIBROVLWS2w3-98BxLX5VZ8grRpiTkJFtf_rAk,214
47
47
  ararpy/files/raw_file.py,sha256=X2_RjlNOUbdkA9MM2ZMNlZmGL7jc1-eV-Wy-bIu2bb0,20592
48
48
  ararpy/files/xls.py,sha256=DVcZ_yRnc19p-m4leGGjt-YPDpSa2udYKmGyrM0qub0,640
49
49
  ararpy/smp/EXPORT_TO_PDF_DATA_PROPERTIES.py,sha256=baDM437tu6hsPv0uYfod0TREXlPd6kvMBFT1S9ZZlkk,3024
50
50
  ararpy/smp/__init__.py,sha256=k6_fa27UJsQK7K7oC5GYlwMo6l0Xd8af3QtOrZz2XJk,478
51
- ararpy/smp/basic.py,sha256=uJJjQajTzg4X7tg4loTgg8ilvWJqBhZIYmIXY_F-VUQ,28601
51
+ ararpy/smp/basic.py,sha256=MBvUXF1KlKcm-W4WLlIhUQ5AhJQ9lUEwIwSy1NMFiq8,28812
52
52
  ararpy/smp/calculation.py,sha256=4Vg0HNbAGdTVdYIt17WeoKPmrTjmq9EqaP44P8AxT9U,2874
53
53
  ararpy/smp/consts.py,sha256=XIdjdz8cYxspG2jMnoItdlUsxr3hKbNFJjMZJh1bpzw,393
54
- ararpy/smp/corr.py,sha256=FBovb2T-pkrjq1OGVh0znYijQYw3BdRLTqoeHzUDHF4,38049
54
+ ararpy/smp/corr.py,sha256=uZY3P5TLuXK1kwDXWqF6zWHPiEH0Ovsx9L6xonzDYhY,37844
55
55
  ararpy/smp/diffusion_funcs.py,sha256=X6LC1XY-vub5BpAuZMlyA5k3DQcU8Qqf5uukwGjJOxw,186690
56
- ararpy/smp/export.py,sha256=nJhyPtrbOYR30JncePNKR87IpCzVgy4wyo6FZ0kJMEY,120438
56
+ ararpy/smp/export.py,sha256=XnLKjWk4LFqtqXdy2qCUkOLy0vkjMq-X-tE9A545BVE,120439
57
57
  ararpy/smp/info.py,sha256=tpEIjrE4nR-GAYTricBk9gq0LuHh6F1Bt7HPo1rS2HM,497
58
- ararpy/smp/initial.py,sha256=hSDU3nptrECErDDgGcrLB0g7UmcnRshY_rv1YG0jdmw,19270
58
+ ararpy/smp/initial.py,sha256=o3KcEx9nCIVJtdmy6BX_JZ_SjOmzWjAMffdm8JM01Vo,20119
59
59
  ararpy/smp/json.py,sha256=zfJCC_2LCDckqC8Fpu10jEA6Knl3UtKO31I5g4fvsBE,2273
60
- ararpy/smp/plots.py,sha256=hU3VyAyEkR_3enWvMHfuL_Ajjg-cK9f7SUHBKwHkmVQ,32577
60
+ ararpy/smp/plots.py,sha256=SrYlTFUzfcKnUnhVf04dyGx0eJmR2mbjG0VRE8LTJnU,34202
61
61
  ararpy/smp/raw.py,sha256=77J1dEYL4ZSeftp4tyog_Cy1Y5bwHNaLqJK4i4KLOSY,6500
62
- ararpy/smp/sample.py,sha256=tCDCAS_KgJy4qN1nCGWTikZfsBu5EV1giccLI3gRY5g,60066
63
- ararpy/smp/style.py,sha256=kP1YnyAoVbKXfEARsrCiz0lTYipW3xEKqR4vIfuVNe4,8206
64
- ararpy/smp/table.py,sha256=9D1oGlYtoVgRte5lxOWYZbEManyudO5un-t7V6LQ-qg,7351
62
+ ararpy/smp/sample.py,sha256=ICW-Sy1fePQLMJLT8wR4KIK8Ikcc0zzeXBZ55gVxI3s,60478
63
+ ararpy/smp/style.py,sha256=P7pAgBVpUzviJWyMiJXRE_NpzDf3ncNtFmUJHQGNFw0,8446
64
+ ararpy/smp/table.py,sha256=iXJilp0V_kDyuTycjV82fBimuzLmVciAaL_av0zIb5Y,8540
65
65
  ararpy/thermo/__init__.py,sha256=6VBuqTRFl403PVqOuMkVrut0nKaQsAosBmfW91X1dMg,263
66
66
  ararpy/thermo/arrhenius.py,sha256=Ass1ichHfqIAtpv8eLlgrUc1UOb3Urh1qzr1E3gLB4U,233
67
67
  ararpy/thermo/atomic_level_random_walk.py,sha256=ncw9DtxRfS6zlQbLVLNX7WNoO9sX_nSomwAsTH0_O3k,25910
68
68
  ararpy/thermo/basic.py,sha256=JJRZbYmvXlpRAV2FeFPwLhrig4ZhNQmJnWqgOjo-1YQ,11508
69
- ararpy-0.2.2.dist-info/licenses/LICENSE,sha256=cvG5t_C1qY_zUyJI7sNOa7gCArdngNPaOrfujl2LYuc,1085
70
- ararpy-0.2.2.dist-info/METADATA,sha256=wvnw6khN1TWEJEGRbAunuJ3A95geGtqgvmAwCN7wGAc,24726
71
- ararpy-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
- ararpy-0.2.2.dist-info/top_level.txt,sha256=9iTpsPCYuRYq09yQTk9d2lqB8JtTEOmbN-IcGB-K3vY,7
73
- ararpy-0.2.2.dist-info/RECORD,,
69
+ ararpy-0.2.4.dist-info/licenses/LICENSE,sha256=cvG5t_C1qY_zUyJI7sNOa7gCArdngNPaOrfujl2LYuc,1085
70
+ ararpy-0.2.4.dist-info/METADATA,sha256=KaF8mrbZECHMeFN-h3w2r6YA9g6j04ozGPQ13-CoeRc,24726
71
+ ararpy-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
+ ararpy-0.2.4.dist-info/top_level.txt,sha256=9iTpsPCYuRYq09yQTk9d2lqB8JtTEOmbN-IcGB-K3vY,7
73
+ ararpy-0.2.4.dist-info/RECORD,,
File without changes