ararpy 0.1.199__py3-none-any.whl → 0.2.2__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.
Files changed (41) hide show
  1. ararpy/Example - Check arr.py +52 -0
  2. ararpy/Example - Granite Cooling History.py +411 -0
  3. ararpy/Example - Plot temperature calibration.py +291 -0
  4. ararpy/Example - Show MDD results.py +561 -0
  5. ararpy/Example - Show all Kfs age spectra.py +344 -0
  6. ararpy/Example - Show random walk results.py +363 -0
  7. ararpy/Example - Tc calculation.py +437 -0
  8. ararpy/__init__.py +3 -4
  9. ararpy/calc/age.py +34 -36
  10. ararpy/calc/arr.py +0 -20
  11. ararpy/calc/basic.py +26 -3
  12. ararpy/calc/corr.py +131 -85
  13. ararpy/calc/jvalue.py +7 -5
  14. ararpy/calc/plot.py +1 -2
  15. ararpy/calc/raw_funcs.py +41 -2
  16. ararpy/calc/regression.py +224 -132
  17. ararpy/files/arr_file.py +2 -1
  18. ararpy/files/basic.py +0 -22
  19. ararpy/files/calc_file.py +107 -84
  20. ararpy/files/raw_file.py +242 -229
  21. ararpy/smp/basic.py +133 -34
  22. ararpy/smp/calculation.py +6 -6
  23. ararpy/smp/corr.py +339 -153
  24. ararpy/smp/diffusion_funcs.py +345 -36
  25. ararpy/smp/export.py +247 -129
  26. ararpy/smp/info.py +2 -2
  27. ararpy/smp/initial.py +93 -45
  28. ararpy/smp/json.py +2 -2
  29. ararpy/smp/plots.py +144 -164
  30. ararpy/smp/raw.py +11 -15
  31. ararpy/smp/sample.py +222 -181
  32. ararpy/smp/style.py +26 -7
  33. ararpy/smp/table.py +42 -33
  34. ararpy/thermo/atomic_level_random_walk.py +56 -48
  35. ararpy/thermo/basic.py +2 -2
  36. {ararpy-0.1.199.dist-info → ararpy-0.2.2.dist-info}/METADATA +10 -1
  37. ararpy-0.2.2.dist-info/RECORD +73 -0
  38. {ararpy-0.1.199.dist-info → ararpy-0.2.2.dist-info}/WHEEL +1 -1
  39. ararpy-0.1.199.dist-info/RECORD +0 -66
  40. {ararpy-0.1.199.dist-info → ararpy-0.2.2.dist-info}/licenses/LICENSE +0 -0
  41. {ararpy-0.1.199.dist-info → ararpy-0.2.2.dist-info}/top_level.txt +0 -0
ararpy/smp/style.py CHANGED
@@ -19,7 +19,7 @@ Sample = samples.Sample
19
19
  Table = samples.Table
20
20
  Plot = samples.Plot
21
21
 
22
- TABLEHEADER = lambda index, sample_type: {
22
+ TABLEHEADER = lambda sample_type, index: {
23
23
  'Unknown': ['',
24
24
  samples.SAMPLE_INTERCEPT_HEADERS, samples.BLANK_INTERCEPT_HEADERS,
25
25
  samples.CORRECTED_HEADERS, samples.DEGAS_HEADERS, samples.PUBLISH_TABLE_HEADERS,
@@ -55,6 +55,7 @@ def set_plot_style(smp: Sample):
55
55
  -------
56
56
 
57
57
  """
58
+
58
59
  # Reset styles
59
60
  initial.initial_plot_styles(smp, except_attrs=['data'])
60
61
  # Auto scale
@@ -64,7 +65,10 @@ def set_plot_style(smp: Sample):
64
65
  # Auto position and contents of texts
65
66
  reset_text(smp)
66
67
  # Set title, which are deleted in initializing
67
- suffix = f"{smp.Info.sample.name} {smp.Info.sample.material}"
68
+ exp_name = smp.Info.experiment.name
69
+ smp_name = smp.Info.sample.name
70
+ name = f"{exp_name} {smp_name}" if str(exp_name).lower().strip() != str(smp_name).lower().strip() else exp_name
71
+ suffix = f"{name} {smp.Info.sample.material}"
68
72
  for figure_id, figure in basic.get_components(smp).items():
69
73
  if isinstance(figure, Plot):
70
74
  if not hasattr(figure, 'title'):
@@ -84,15 +88,28 @@ def reset_plot_scale(smp: Sample, only_figure: str = None):
84
88
  -------
85
89
  tuple of two tuples, (xscale, yscale)
86
90
  """
91
+
92
+
93
+
87
94
  for k, v in basic.get_components(smp).items():
88
95
  if not isinstance(v, Plot):
89
96
  continue
90
97
  if only_figure is not None and k != only_figure:
91
98
  continue
99
+
100
+ try:
101
+ params_to_check = {
102
+ v.name: [
103
+ {'data': v.data, 'dtype': float, 'class': 'k1', },
104
+ ],
105
+ }
106
+ except (IndexError, AttributeError) as e:
107
+ raise ValueError(f"{v.name}, {str(e)}")
108
+ if not basic.validate_params(**params_to_check):
109
+ return
110
+
92
111
  if k == 'figure_1':
93
112
  try:
94
- # data = calc.arr.transpose(
95
- # v.data + v.data + v.set1.data + v.set1.data + v.set2.data + v.set2.data)
96
113
  k0 = calc.arr.transpose(v.data)
97
114
  k1 = calc.arr.transpose(v.set1.data) if len(v.set1.data) != 0 else [[]] * 3
98
115
  k2 = calc.arr.transpose(v.set2.data) if len(v.set2.data) != 0 else [[]] * 3
@@ -109,7 +126,7 @@ def reset_plot_scale(smp: Sample, only_figure: str = None):
109
126
  xscale = calc.plot.get_axis_scale(xlist)
110
127
  yscale = [0, 0.004, 4, 0.001]
111
128
  except (Exception, BaseException):
112
- # print(traceback.format_exc())
129
+ print(traceback.format_exc())
113
130
  continue
114
131
  elif k == 'figure_7':
115
132
  try:
@@ -121,7 +138,7 @@ def reset_plot_scale(smp: Sample, only_figure: str = None):
121
138
  setattr(getattr(v, 'zaxis'), 'max', zscale[1])
122
139
  setattr(getattr(v, 'zaxis'), 'split_number', zscale[2])
123
140
  except (Exception, BaseException):
124
- # print(traceback.format_exc())
141
+ print(traceback.format_exc())
125
142
  continue
126
143
  elif k == 'figure_9':
127
144
  try:
@@ -141,7 +158,7 @@ def reset_plot_scale(smp: Sample, only_figure: str = None):
141
158
  xscale = calc.plot.get_axis_scale(xlist)
142
159
  yscale = calc.plot.get_axis_scale(ylist)
143
160
  except (Exception, BaseException):
144
- # print(traceback.format_exc())
161
+ print(traceback.format_exc())
145
162
  continue
146
163
  setattr(getattr(v, 'xaxis', Plot.Axis()), 'min', xscale[0])
147
164
  setattr(getattr(v, 'xaxis', Plot.Axis()), 'max', xscale[1])
@@ -195,9 +212,11 @@ def set_table_style(sample: Sample):
195
212
  -------
196
213
 
197
214
  """
215
+ std = initial.initial(Sample())
198
216
  for key, comp in basic.get_components(sample).items():
199
217
  if isinstance(comp, Table):
200
218
  comp.header = TABLEHEADER(sample_type=sample.Info.sample.type, index=int(comp.id))
219
+ comp.text_indexes = basic.get_component_byid(std, comp.id).text_indexes
201
220
  comp.set_coltypes()
202
221
  # comp.colcount = len(comp.header)
203
222
  # comp.coltypes = [{'type': 'numeric'}] * (comp.colcount)
ararpy/smp/table.py CHANGED
@@ -38,17 +38,13 @@ def update_table_data(smp: Sample, only_table: str = None):
38
38
  if only_table is not None and key != only_table:
39
39
  continue
40
40
  if key == '1':
41
- data = calc.arr.merge(
42
- smp.SequenceName, smp.SequenceValue, *smp.SampleIntercept)
41
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.SampleIntercept]
43
42
  elif key == '2':
44
- data = calc.arr.merge(
45
- smp.SequenceName, smp.SequenceValue, *smp.BlankIntercept)
43
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.BlankIntercept]
46
44
  elif key == '3':
47
- data = calc.arr.merge(
48
- smp.SequenceName, smp.SequenceValue, *smp.CorrectedValues)
45
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.CorrectedValues]
49
46
  elif key == '4':
50
- data = calc.arr.merge(
51
- smp.SequenceName, smp.SequenceValue, *smp.DegasValues)
47
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.DegasValues]
52
48
  elif key == '5':
53
49
  smp.PublishValues[0] = copy.deepcopy(smp.DegasValues[ 0])
54
50
  smp.PublishValues[1] = copy.deepcopy(smp.DegasValues[ 8])
@@ -57,19 +53,31 @@ def update_table_data(smp: Sample, only_table: str = None):
57
53
  smp.PublishValues[4] = copy.deepcopy(smp.DegasValues[24])
58
54
  smp.PublishValues[5:7] = copy.deepcopy(smp.ApparentAgeValues[2:4])
59
55
  smp.PublishValues[7:9] = copy.deepcopy(smp.ApparentAgeValues[6:8])
60
- data = calc.arr.merge(
61
- smp.SequenceName, smp.SequenceValue, *smp.PublishValues)
56
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.PublishValues]
62
57
  elif key == '6':
63
- data = calc.arr.merge(
64
- smp.SequenceName, smp.SequenceValue, *smp.ApparentAgeValues)
58
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.ApparentAgeValues]
65
59
  elif key == '7':
66
- data = calc.arr.merge(
67
- smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.IsochronValues)
60
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.IsochronValues]
68
61
  elif key == '8':
69
- data = calc.arr.merge(
70
- smp.SequenceName, smp.SequenceValue, *smp.TotalParam)
62
+ data = [smp.SequenceName, smp.SequenceValue, smp.IsochronMark, *smp.TotalParam]
71
63
  else:
72
64
  data = [['']]
65
+
66
+ try:
67
+ params_to_check = {
68
+ comp.name: [
69
+ {'data': [data[i] for i in comp.text_indexes], 'dtype': str, 'class': 'k1', },
70
+ {'data': [data[i] for i in range(len(data)) if i not in comp.text_indexes], 'dtype': float, 'class': 'k1', },
71
+ ],
72
+ 'step num': {'data': len(smp.SequenceName), 'dtype': int,
73
+ 'func': lambda x: x == smp.Info.experiment.step_num >= 0, 'class': 'k2', },
74
+ }
75
+ except (IndexError, AttributeError) as e:
76
+ raise ValueError(f"{type(e).__name__}, {str(e)}")
77
+ if not basic.validate_params(**params_to_check):
78
+ return
79
+
80
+ comp.set_colcount(len(data))
73
81
  # calc.arr.replace(data, pd.isnull, None)
74
82
  setattr(comp, 'data', calc.arr.transpose(data))
75
83
 
@@ -111,42 +119,43 @@ def update_handsontable(smp: Sample, data: list, id: str):
111
119
 
112
120
  update_all_table = False
113
121
  try:
114
- if data[1] != smp.SequenceValue:
122
+ if data[1] != smp.SequenceValue or data[2] != smp.IsochronMark:
115
123
  update_all_table = True
116
124
  smp.SequenceValue = data[1]
125
+ smp.IsochronMark = data[2]
117
126
  except IndexError:
127
+ print(f"Check sequence value / isochron mark failed")
118
128
  pass
119
129
 
120
130
  if id == '1': # 样品值
121
- data = _normalize_data(data, len(samples.SAMPLE_INTERCEPT_HEADERS), 2)
131
+ data = _normalize_data(data, len(samples.SAMPLE_INTERCEPT_HEADERS), 3)
122
132
  smp.SampleIntercept = _digitize_data(data)
123
133
  elif id == '2': # 本底值
124
- data = _normalize_data(data, len(samples.BLANK_INTERCEPT_HEADERS), 2)
134
+ data = _normalize_data(data, len(samples.BLANK_INTERCEPT_HEADERS), 3)
125
135
  smp.BlankIntercept = _digitize_data(data)
126
136
  elif id == '3': # 校正值
127
- data = _normalize_data(data, len(samples.CORRECTED_HEADERS), 2)
137
+ data = _normalize_data(data, len(samples.CORRECTED_HEADERS), 3)
128
138
  smp.CorrectedValues = _digitize_data(data)
129
139
  elif id == '4': # Degas table
130
- data = _normalize_data(data, len(samples.DEGAS_HEADERS), 2)
140
+ data = _normalize_data(data, len(samples.DEGAS_HEADERS), 3)
131
141
  smp.DegasValues = _digitize_data(data)
132
142
  elif id == '5': # 发行表
133
- data = _normalize_data(data, len(samples.PUBLISH_TABLE_HEADERS), 2)
143
+ data = _normalize_data(data, len(samples.PUBLISH_TABLE_HEADERS), 3)
134
144
  smp.PublishValues = _digitize_data(data)
135
145
  elif id == '6': # 年龄谱
136
- data = _normalize_data(data, len(samples.SPECTRUM_TABLE_HEADERS), 2)
146
+ data = _normalize_data(data, len(samples.SPECTRUM_TABLE_HEADERS), 3)
137
147
  smp.ApparentAgeValues = _digitize_data(data)
138
148
  elif id == '7': # 等时线
139
- smp.IsochronMark = _digitize_data(data)[2]
140
149
  data = _normalize_data(data, len(samples.ISOCHRON_TABLE_HEADERS), 3)
141
150
  smp.IsochronValues = _digitize_data(data)
142
- smp.sequence()
143
151
  elif id == '8': # 总参数
144
- data = _normalize_data(data, len(samples.TOTAL_PARAMS_HEADERS), 2)
152
+ data = _normalize_data(data, len(samples.TOTAL_PARAMS_HEADERS), 3)
145
153
  data = _digitize_data(data)
146
154
  data[101: 112] = [_strToBool(i) for i in data[101: 112]]
147
155
  smp.TotalParam = data
148
156
  else:
149
157
  raise ValueError(f"{id = }, The table id is not supported.")
158
+ smp.sequence()
150
159
  if update_all_table:
151
160
  update_table_data(smp)
152
161
  else:
@@ -171,21 +180,21 @@ def update_data_from_table(smp: Sample, only_table: str = None):
171
180
  if only_table is not None and key != only_table:
172
181
  continue
173
182
  if key == '1':
174
- smp.SampleIntercept = calc.arr.transpose(comp.data)[2:]
183
+ smp.SampleIntercept = calc.arr.transpose(comp.data)[3:]
175
184
  elif key == '2':
176
- smp.BlankIntercept = calc.arr.transpose(comp.data)[2:]
185
+ smp.BlankIntercept = calc.arr.transpose(comp.data)[3:]
177
186
  elif key == '3':
178
- smp.CorrectedValues = calc.arr.transpose(comp.data)[2:]
187
+ smp.CorrectedValues = calc.arr.transpose(comp.data)[3:]
179
188
  elif key == '4':
180
- smp.DegasValues = calc.arr.transpose(comp.data)[2:]
189
+ smp.DegasValues = calc.arr.transpose(comp.data)[3:]
181
190
  elif key == '5':
182
- smp.PublishValues = calc.arr.transpose(comp.data)[2:]
191
+ smp.PublishValues = calc.arr.transpose(comp.data)[3:]
183
192
  elif key == '6':
184
- smp.ApparentAgeValues = calc.arr.transpose(comp.data)[2:]
193
+ smp.ApparentAgeValues = calc.arr.transpose(comp.data)[3:]
185
194
  elif key == '7':
186
195
  smp.IsochronValues = calc.arr.transpose(comp.data)[3:]
187
196
  elif key == '8':
188
- smp.TotalParam = calc.arr.transpose(comp.data)[2:]
197
+ smp.TotalParam = calc.arr.transpose(comp.data)[3:]
189
198
  else:
190
199
  pass
191
200
 
@@ -127,8 +127,9 @@ def walker2(pos: np.ndarray, duration, step_length, min_bound, max_bound, time_s
127
127
  :return:
128
128
  """
129
129
 
130
- if len(pos) == 0:
131
- return pos
130
+ # Ar40模拟时不能判断,因为会增加
131
+ # if len(pos) == 0:
132
+ # return pos
132
133
 
133
134
  dimension = pos.shape[-1] if len(pos.shape) > 1 else 1
134
135
 
@@ -141,7 +142,6 @@ def walker2(pos: np.ndarray, duration, step_length, min_bound, max_bound, time_s
141
142
  conditions = np.array([[-50, -50, 50, 50, 1]])
142
143
 
143
144
  for step in range(int(1e16)):
144
-
145
145
  n = parent - int(parent * math.exp(-1 * decay * dt / (3600 * 24 * 365.2425)))
146
146
  # print(f"number of new pos = {n}")
147
147
  parent = parent - n
@@ -288,6 +288,8 @@ class DiffSimulation:
288
288
  self.end_at = 0
289
289
  self.dimension = 3
290
290
 
291
+ self.thermal_log = []
292
+
291
293
  self.size_scale = 1
292
294
  self.length_scale = 1
293
295
 
@@ -373,7 +375,7 @@ class DiffSimulation:
373
375
  boundary_factor = 0.1 ** (k * math.log10(1 + (max(conditions[:, -1]) // 1000)))
374
376
  step_length = self.step_length / np.sqrt(pos.shape[1] if len(pos.shape) > 1 else 1)
375
377
  scale = int(total_steps)
376
- # print(f"调整后: {nsteps_factor = }, gamma = {conditions[0][-1]}, {total_steps = }, {compensation = }, {boundary_factor = }")
378
+ print(f"调整后: {nsteps_factor = }, gamma = {conditions[0][-1]}, {total_steps = }, {compensation = }, {boundary_factor = }")
377
379
 
378
380
  _pos = walker(
379
381
  copy.deepcopy(pos), step_length=step_length, total_nsteps=total_steps,
@@ -437,7 +439,7 @@ class DiffSimulation:
437
439
  self.remained_per_step.append(len(pos))
438
440
  self.released_per_step.append(self.natoms - len(pos))
439
441
 
440
- print(f"{index = } {duration} - {heating_duration = } - {temperature = } - {total_steps = } - conc = {len(pos) / self.natoms * 100:.2f}% - {time.time() - _start:.5f}s")
442
+ print(f"{index = } {duration = }s - {heating_duration = }s - {temperature = }K - {total_steps = } - conc = {len(pos) / self.natoms * 100:.2f}% - {time.time() - _start:.5f}s")
441
443
 
442
444
  self.positions = copy.deepcopy(pos)
443
445
 
@@ -452,6 +454,49 @@ class DiffSimulation:
452
454
  return self.run_sequence(*seq, domains=domains, nsteps_factor=scale, simulating=simulation,
453
455
  epsilon=epsilon, start_time=start_time)
454
456
 
457
+ def demo_init(n, es, fs, di, gs, ds, fr, ss=1):
458
+ demo = DiffSimulation()
459
+ # fs 应从大到小,父空间在前,子空间在后
460
+
461
+ # demo.grain_size = 300
462
+ # demo.size_scale = 0.05
463
+ # demo.atom_density = 1e14 # 原子密度 个/立方厘米
464
+
465
+ demo.dimension = di # dimension, 1 or 3
466
+ demo.size_scale = 1 # size_scale
467
+ demo.grain_size = gs # grain_szie
468
+ demo.frequency = fr # frequency
469
+
470
+ # domains应该从外到内
471
+ domains = []
472
+ for i in range(n-1, 0-1, -1):
473
+ size = int(demo.grain_size * fs[i]) * demo.size_scale
474
+ center = np.zeros(demo.dimension)
475
+ if isinstance(ds, (int, float)) or len(ds) == 1:
476
+ demo.atom_density = ds # atom_density # 原子密度 个/立方厘米
477
+ if i == 2:
478
+ ad = ds * 5 / 4
479
+ else:
480
+ ad = ds
481
+ else:
482
+ ad = ds[i]
483
+ dom = Domain(
484
+ dimension=demo.dimension, atom_density=ad, min_bound=center - size / 2, max_bound=center + size / 2,
485
+ energy=es[i], fraction=fs[i], inclusions=[domains[-1]] if len(domains) >= 1 else []
486
+ )
487
+ domains.append(dom)
488
+ # domains应该从外到内, 上面为了inclusion以及方便不同扩散域设置不同的密度,要按照从小到大的顺序生成,但是后面行走的时候要根据不同条件设置系数,要从外到内
489
+ demo.domains = sorted(domains, key=lambda dom: dom.fraction, reverse=True)
490
+
491
+ demo.setup()
492
+
493
+ a = [f"{dom.fraction = }, {dom.energy = }, {dom.natoms = }, {dom.atom_density = }" for dom in demo.domains]
494
+
495
+ print(
496
+ f"Total Atoms: {demo.natoms}\n" + "\n".join(a)
497
+ )
498
+
499
+ return demo
455
500
 
456
501
  def run(times, temps, statuses, energies, fractions, ndoms: int = 1, grain_szie=275, atom_density=1e10, frequency=1e13,
457
502
  dimension: int = 3, targets: list = None, epsilon: float = 0.001, simulation: bool = False,
@@ -472,43 +517,12 @@ def run(times, temps, statuses, energies, fractions, ndoms: int = 1, grain_szie=
472
517
  :return:
473
518
  """
474
519
 
475
- demo = DiffSimulation()
476
-
477
- def _(n, es, fs):
478
- # fs 应从大到小,父空间在前,子空间在后
479
-
480
- # demo.grain_size = 300
481
- # demo.size_scale = 0.05
482
- # demo.atom_density = 1e14 # 原子密度 个/立方厘米
483
- demo.dimension = dimension
484
-
485
- demo.size_scale = 1
486
- demo.grain_size = grain_szie
487
- demo.atom_density = atom_density # 原子密度 个/立方厘米
488
- demo.frequency = frequency
489
-
490
- # domains应该从外到内
491
- domains = []
492
- for i in range(n-1, 0-1, -1):
493
- size = int(demo.grain_size * fs[i]) * demo.size_scale
494
- center = np.zeros(demo.dimension)
495
- if i == 2:
496
- ad = demo.atom_density * 5 / 4
497
- else:
498
- ad = demo.atom_density
499
- dom = Domain(
500
- dimension=demo.dimension, atom_density=ad, min_bound=center - size / 2, max_bound=center + size / 2,
501
- energy=es[i], fraction=fs[i], inclusions=[domains[-1]] if len(domains) >= 1 else []
502
- )
503
- domains.append(dom)
504
- # domains应该从外到内, 上面为了inclusion以及方便不同扩散域设置不同的密度,要按照从小到大的顺序生成,但是后面行走的时候要根据不同条件设置系数,要从外到内
505
- demo.domains = sorted(domains, key=lambda dom: dom.fraction, reverse=True)
506
-
507
- demo.setup()
508
-
520
+ try:
521
+ # demo.run_persecond(times=times, temperatures=temps, domains=demo.domains, targets=target,
522
+ # epsilon=epsilon, simulation=simulation)
523
+ demo = demo_init(ndoms, energies, fractions, dimension, grain_szie, atom_density, frequency, ss=1)
509
524
  demo.name = f"{file_name}"
510
-
511
- print(f"Total Atoms: {demo.natoms}, atoms in each dom: {[dom.natoms for dom in demo.domains]} filename: {demo.name}")
525
+ demo.thermal_log = list(zip(times, temps))
512
526
 
513
527
  if positions is not None:
514
528
  demo.positions = positions
@@ -516,13 +530,7 @@ def run(times, temps, statuses, energies, fractions, ndoms: int = 1, grain_szie=
516
530
 
517
531
  demo.run_sequence(times=times, temperatures=temps, statuses=statuses, targets=targets, domains=demo.domains,
518
532
  epsilon=epsilon, simulating=simulation, **kwargs)
519
- # demo.run_persecond(times=times, temperatures=temps, domains=demo.domains, targets=target,
520
- # epsilon=epsilon, simulation=simulation)
521
-
522
- return demo
523
-
524
- try:
525
- return _(ndoms, energies, fractions), True
533
+ return demo, True
526
534
  except OverEpsilonError as e:
527
535
  if ignore_error:
528
536
  return demo, False
ararpy/thermo/basic.py CHANGED
@@ -235,7 +235,7 @@ def get_tc(da2, sda2, E, sE, cooling_rate=10, temp_in_celsius=True, temp=None, A
235
235
  R = 8.314 if R is None else R # in J/K mol
236
236
  Tc = 600
237
237
  sTc = 0
238
- Tm = 99999999 if temp is None else temp
238
+ Tm = 9999999999 if temp is None else temp
239
239
  Tm = Tm + 273.15 if temp_in_celsius else Tm
240
240
  cooling_rate = cooling_rate / 1000000
241
241
 
@@ -243,8 +243,8 @@ def get_tc(da2, sda2, E, sE, cooling_rate=10, temp_in_celsius=True, temp=None, A
243
243
  iter_diff = 100
244
244
  while abs(iter_diff) > 0.01 and iter_num < 100:
245
245
  tau = R * Tc ** 2 / (E * cooling_rate)
246
- # new_Tc = (E/R) / log(A * tau * da2)
247
246
  new_Tc = (R / E) * log(A * tau * da2) + 1 / Tm #
247
+ # new_Tc = (R / E) * log(A * tau * da2)
248
248
  d1 = cooling_rate / (A * da2 * Tc ** 2)
249
249
  s1 = d1 ** 2 * sda2 ** 2 # da2
250
250
  d2 = R / E ** 2 * (log(A * tau * da2) + 1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ararpy
3
- Version: 0.1.199
3
+ Version: 0.2.2
4
4
  Summary: A project for Ar-Ar geochronology
5
5
  Home-page: https://github.com/wuyangchn/ararpy.git
6
6
  Author: Yang Wu
@@ -12,6 +12,14 @@ Classifier: Operating System :: OS Independent
12
12
  Requires-Python: >=3.5
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
+ Requires-Dist: chardet
16
+ Requires-Dist: numpy
17
+ Requires-Dist: pandas
18
+ Requires-Dist: parse
19
+ Requires-Dist: scipy
20
+ Requires-Dist: xlrd
21
+ Requires-Dist: XlsxWriter
22
+ Requires-Dist: pdf_maker
15
23
  Dynamic: author
16
24
  Dynamic: author-email
17
25
  Dynamic: classifier
@@ -20,6 +28,7 @@ Dynamic: description-content-type
20
28
  Dynamic: home-page
21
29
  Dynamic: license
22
30
  Dynamic: license-file
31
+ Dynamic: requires-dist
23
32
  Dynamic: requires-python
24
33
  Dynamic: summary
25
34
 
@@ -0,0 +1,73 @@
1
+ ararpy/Example - Check arr.py,sha256=c9HUUZySUXOYk4eCqiPSp124G2sYpFP5zoMl0FXdalE,1709
2
+ ararpy/Example - Granite Cooling History.py,sha256=V4V63RVp1gocOZX0T3OOGOiVhCA1DqrCyJnXgFvEcUs,14917
3
+ ararpy/Example - Plot temperature calibration.py,sha256=8pR-WKqdaIKQTuuSbfwXuxoEkCop4zhmZUMJSARWDOg,10879
4
+ ararpy/Example - Show MDD results.py,sha256=YFkiQual60lyCClsfvivr4REY6waSYuomf0uo5soUHE,22635
5
+ ararpy/Example - Show all Kfs age spectra.py,sha256=1edPtBpFfS0lC7vLnLu34mDHt_xjbc8ptk6rZ--pf-I,12304
6
+ ararpy/Example - Show random walk results.py,sha256=8WWvbAI7ySiMR-XwtFe5kTQihW3mcqzL3S7EUZdoxYo,15477
7
+ ararpy/Example - Tc calculation.py,sha256=sD9pu3IaZ8mBV95rV2wOEhlQUexFNqBUoBqnNMdUBis,19617
8
+ ararpy/__init__.py,sha256=wz69XzhfcI0QMPU2QJ8gZoWEsG2vHeSE7b5E7GytwI0,6767
9
+ ararpy/test.py,sha256=4F46-JJ1Ge12HGae0qO44Qc6kiEMHBgn2MsY_5LlHDo,3973
10
+ ararpy/calc/__init__.py,sha256=kUjRuLE8TLuKOv3i976RnGJoEMj23QBZDu37LWs81U4,322
11
+ ararpy/calc/age.py,sha256=WOZs70zXiBWDIEhXJLIaNiYTOFJNk0NDbH5e5zCbCks,5435
12
+ ararpy/calc/arr.py,sha256=x6z16N2H6QFYAPY11lnPRFZsZfwWu2tSEo87q7M9Ym4,14869
13
+ ararpy/calc/basic.py,sha256=AMQrhkNHhHtiguqTe4GPOYLuV8TEJBXpRJXJAoOwD9w,4634
14
+ ararpy/calc/corr.py,sha256=qh77w1uJ98x6b_N-0_u1seWc7YLtCRClpxG6fuYHx-M,21667
15
+ ararpy/calc/err.py,sha256=63LtprqjemlIb1QGDst4Ggcv5KMSDHdlAIL-nyQs1eA,2691
16
+ ararpy/calc/histogram.py,sha256=0GVbDdsjd91KQ1sa2B7NtZ4KGo0XpRIJapgIrzAwQUo,5777
17
+ ararpy/calc/isochron.py,sha256=ej9G2e68k6yszonWHsLcEubh3TA7eh1upTJP_X0ttAA,5726
18
+ ararpy/calc/jvalue.py,sha256=IJan8dNL4vBblSkBHIguPROb-RJPPEej0CpkXm2osMM,1221
19
+ ararpy/calc/plot.py,sha256=Hdtb-q18xYC8ZJeDKGRauCSbj4_7e6Z8HQs9aYgfvao,2139
20
+ ararpy/calc/raw_funcs.py,sha256=sbuCFNWyzIoBkE4Bvka7i2TofXpJtnm6SzGH9VFLtAw,4144
21
+ ararpy/calc/regression.py,sha256=m2_xJAsQ7mBIbnrmxtSPIQapJH61jkxvXskxN-8f86k,42803
22
+ ararpy/calc/spectra.py,sha256=_Q23eP9necHlaCoHf3_UfW1N3JmVZj5rcWFro8GS-CA,1995
23
+ ararpy/examples/022_VU124-M11a.ahd,sha256=3m0Gd-ZObou3KsnRNFMf77QwzT1Uz3nu3vA33Sqeyng,5414
24
+ ararpy/examples/20WHA0103.age,sha256=cT-a4d7Wt77aotx6v0G47vulY_TZIcZUcaVHB3pqTPM,380416
25
+ ararpy/examples/22WHA0078.xls,sha256=1XAAHmIhuswwZ3toCT-qTLrYzqXNDYWGjDyCTI3xaMY,2611729
26
+ ararpy/examples/22WHA0433.age,sha256=YRM9l5S0cU20eD7en_5iR3a-eZk7btmjcU1Drae2QwM,421888
27
+ ararpy/examples/22WHA0433.arr,sha256=ddfeVEXXw5T4LoIicK1GGxXHjwtpXcuPbO8Oj0Vui04,238259
28
+ ararpy/examples/22WHA0433.full.xls,sha256=bupB_YZxtQKd6hh0MRBCKu7cRtiIhchtjHJ4Tjss_9Q,335872
29
+ ararpy/examples/24WHN0001-51-592.XLS,sha256=hwTNoJf-ZyAVSd3SPNrwhRGO7dVS7brr2Ys-Sf8LbBI,140800
30
+ ararpy/examples/AHD.input-filter,sha256=qJpqULIX-3b7JANzfg1sB61tf8cU2nxoncna8nTWwio,441
31
+ ararpy/examples/ArAr.calc,sha256=i7da0rx-M4l0-j1vXOqsaCw3T8txQNGH3gON70-qmyA,599
32
+ ararpy/examples/ArArCALC.age,sha256=Ft4I9BnWjbqsgn6ACCklioLyhHSKuIlbmqgFwOyb9M0,231936
33
+ ararpy/examples/NGX-600 - Copy.TXT,sha256=EBaQZ6nVbR6R0bqtZVphcfXX2QaoD0R4INeaPMs_UoM,83752
34
+ ararpy/examples/NGX-600.TXT,sha256=RQc5we9kTYetXmsCN8ThFPMhNLN2q82umeszSoCzMJE,81731
35
+ ararpy/examples/NGX-XLS.input-filter,sha256=iyfTLsLHf0h58ePOsNQoBtG6UBLIf7V-zTGioRoWkxA,501
36
+ ararpy/examples/Qtegra-exported-xls.input-filter,sha256=KuD3Dey82ecuKnqNMQqOcY3VXHgKbpE9Yxfl1ZC4_so,441
37
+ ararpy/examples/S01-239.csv,sha256=J_PHT85XCxPd3TEGzBARGwKSkiAzz1nzNbrKUf00GBU,39566
38
+ ararpy/examples/WH01.irra,sha256=Ws78m5p3fD4oybtkOWoAtvFyuLPxpL_A_ueIg2tnhnw,365
39
+ ararpy/examples/WHA.pdf,sha256=iopbptHkWPmYdgihEVDDfv2nm2XE-Q-e7fFnkR44Xh0,178692
40
+ ararpy/examples/raw_example.xls,sha256=ftcSiXRx_7nYnbqJVma1Yl3Yr_iuceAWlEjhJwlAvFM,1929895
41
+ ararpy/examples/sample-default.smp,sha256=YNkoQGgPrsL_fXS7ZHxfRtLQWekCDqT9czS6vBScImk,432
42
+ ararpy/files/__init__.py,sha256=l5B5ZQ01WdtvjjN0aMkyAFNgpwANdM_1I0tQbqnRuEY,69
43
+ ararpy/files/arr_file.py,sha256=pD5MxkAydL7cNq2wmKFUaOU4jHhc3MzTYrwbxZ3f46w,881
44
+ ararpy/files/basic.py,sha256=k2GXgZjhqSmKvpXQLjsXDksS_ZLvqD7AWW54fXnYvTI,1228
45
+ ararpy/files/calc_file.py,sha256=CmZsgUj2t2FnLcCE38pbOqej7M-CbhQs6KMFXE3PbQA,29233
46
+ ararpy/files/new_file.py,sha256=efblARIBROVLWS2w3-98BxLX5VZ8grRpiTkJFtf_rAk,214
47
+ ararpy/files/raw_file.py,sha256=X2_RjlNOUbdkA9MM2ZMNlZmGL7jc1-eV-Wy-bIu2bb0,20592
48
+ ararpy/files/xls.py,sha256=DVcZ_yRnc19p-m4leGGjt-YPDpSa2udYKmGyrM0qub0,640
49
+ ararpy/smp/EXPORT_TO_PDF_DATA_PROPERTIES.py,sha256=baDM437tu6hsPv0uYfod0TREXlPd6kvMBFT1S9ZZlkk,3024
50
+ ararpy/smp/__init__.py,sha256=k6_fa27UJsQK7K7oC5GYlwMo6l0Xd8af3QtOrZz2XJk,478
51
+ ararpy/smp/basic.py,sha256=uJJjQajTzg4X7tg4loTgg8ilvWJqBhZIYmIXY_F-VUQ,28601
52
+ ararpy/smp/calculation.py,sha256=4Vg0HNbAGdTVdYIt17WeoKPmrTjmq9EqaP44P8AxT9U,2874
53
+ ararpy/smp/consts.py,sha256=XIdjdz8cYxspG2jMnoItdlUsxr3hKbNFJjMZJh1bpzw,393
54
+ ararpy/smp/corr.py,sha256=FBovb2T-pkrjq1OGVh0znYijQYw3BdRLTqoeHzUDHF4,38049
55
+ ararpy/smp/diffusion_funcs.py,sha256=X6LC1XY-vub5BpAuZMlyA5k3DQcU8Qqf5uukwGjJOxw,186690
56
+ ararpy/smp/export.py,sha256=nJhyPtrbOYR30JncePNKR87IpCzVgy4wyo6FZ0kJMEY,120438
57
+ ararpy/smp/info.py,sha256=tpEIjrE4nR-GAYTricBk9gq0LuHh6F1Bt7HPo1rS2HM,497
58
+ ararpy/smp/initial.py,sha256=hSDU3nptrECErDDgGcrLB0g7UmcnRshY_rv1YG0jdmw,19270
59
+ ararpy/smp/json.py,sha256=zfJCC_2LCDckqC8Fpu10jEA6Knl3UtKO31I5g4fvsBE,2273
60
+ ararpy/smp/plots.py,sha256=hU3VyAyEkR_3enWvMHfuL_Ajjg-cK9f7SUHBKwHkmVQ,32577
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
65
+ ararpy/thermo/__init__.py,sha256=6VBuqTRFl403PVqOuMkVrut0nKaQsAosBmfW91X1dMg,263
66
+ ararpy/thermo/arrhenius.py,sha256=Ass1ichHfqIAtpv8eLlgrUc1UOb3Urh1qzr1E3gLB4U,233
67
+ ararpy/thermo/atomic_level_random_walk.py,sha256=ncw9DtxRfS6zlQbLVLNX7WNoO9sX_nSomwAsTH0_O3k,25910
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,66 +0,0 @@
1
- ararpy/__init__.py,sha256=pYgGSZqLShU0gpXzw0ACDxxCRJRm2Y78YlZxBAkes00,6858
2
- ararpy/test.py,sha256=4F46-JJ1Ge12HGae0qO44Qc6kiEMHBgn2MsY_5LlHDo,3973
3
- ararpy/calc/__init__.py,sha256=kUjRuLE8TLuKOv3i976RnGJoEMj23QBZDu37LWs81U4,322
4
- ararpy/calc/age.py,sha256=OcStt55LoYW1brs7a5_Ovv1NUSR5uZVQHDVGGmA_Pqg,5784
5
- ararpy/calc/arr.py,sha256=jD1Fd0Cj3xc7NqgnG4cp3VWQWxUlV0qCtPBZZokDG8o,15246
6
- ararpy/calc/basic.py,sha256=uJCCUFaPd9zvfkggrdbFYSGLl2pt7UJ7ENgXanzHy68,4036
7
- ararpy/calc/corr.py,sha256=6hlBlFIM8HyN6CDuWPGqiLpVM88pZJLEuRm8vAyg9ng,18747
8
- ararpy/calc/err.py,sha256=63LtprqjemlIb1QGDst4Ggcv5KMSDHdlAIL-nyQs1eA,2691
9
- ararpy/calc/histogram.py,sha256=0GVbDdsjd91KQ1sa2B7NtZ4KGo0XpRIJapgIrzAwQUo,5777
10
- ararpy/calc/isochron.py,sha256=ej9G2e68k6yszonWHsLcEubh3TA7eh1upTJP_X0ttAA,5726
11
- ararpy/calc/jvalue.py,sha256=OL5zPYU8Pac-wOxUWPCgu3onh2n01xDnhpi2mlUsjJM,1146
12
- ararpy/calc/plot.py,sha256=sUqjKBdAEjFarUoSCLqf8cbUM0rEAdZhmtyXB2K7LkA,2139
13
- ararpy/calc/raw_funcs.py,sha256=UC01lvA6GyZ5FJv43jgoUULAFoLnZJMxeSa0BeVFCAM,2637
14
- ararpy/calc/regression.py,sha256=w5kni6LGqvISvlvbBZnJ3N2c5eQjgkz3bBbj0PXPyGs,40251
15
- ararpy/calc/spectra.py,sha256=_Q23eP9necHlaCoHf3_UfW1N3JmVZj5rcWFro8GS-CA,1995
16
- ararpy/examples/022_VU124-M11a.ahd,sha256=3m0Gd-ZObou3KsnRNFMf77QwzT1Uz3nu3vA33Sqeyng,5414
17
- ararpy/examples/20WHA0103.age,sha256=cT-a4d7Wt77aotx6v0G47vulY_TZIcZUcaVHB3pqTPM,380416
18
- ararpy/examples/22WHA0078.xls,sha256=1XAAHmIhuswwZ3toCT-qTLrYzqXNDYWGjDyCTI3xaMY,2611729
19
- ararpy/examples/22WHA0433.age,sha256=YRM9l5S0cU20eD7en_5iR3a-eZk7btmjcU1Drae2QwM,421888
20
- ararpy/examples/22WHA0433.arr,sha256=ddfeVEXXw5T4LoIicK1GGxXHjwtpXcuPbO8Oj0Vui04,238259
21
- ararpy/examples/22WHA0433.full.xls,sha256=bupB_YZxtQKd6hh0MRBCKu7cRtiIhchtjHJ4Tjss_9Q,335872
22
- ararpy/examples/24WHN0001-51-592.XLS,sha256=hwTNoJf-ZyAVSd3SPNrwhRGO7dVS7brr2Ys-Sf8LbBI,140800
23
- ararpy/examples/AHD.input-filter,sha256=qJpqULIX-3b7JANzfg1sB61tf8cU2nxoncna8nTWwio,441
24
- ararpy/examples/ArAr.calc,sha256=i7da0rx-M4l0-j1vXOqsaCw3T8txQNGH3gON70-qmyA,599
25
- ararpy/examples/ArArCALC.age,sha256=Ft4I9BnWjbqsgn6ACCklioLyhHSKuIlbmqgFwOyb9M0,231936
26
- ararpy/examples/NGX-600 - Copy.TXT,sha256=EBaQZ6nVbR6R0bqtZVphcfXX2QaoD0R4INeaPMs_UoM,83752
27
- ararpy/examples/NGX-600.TXT,sha256=RQc5we9kTYetXmsCN8ThFPMhNLN2q82umeszSoCzMJE,81731
28
- ararpy/examples/NGX-XLS.input-filter,sha256=iyfTLsLHf0h58ePOsNQoBtG6UBLIf7V-zTGioRoWkxA,501
29
- ararpy/examples/Qtegra-exported-xls.input-filter,sha256=KuD3Dey82ecuKnqNMQqOcY3VXHgKbpE9Yxfl1ZC4_so,441
30
- ararpy/examples/S01-239.csv,sha256=J_PHT85XCxPd3TEGzBARGwKSkiAzz1nzNbrKUf00GBU,39566
31
- ararpy/examples/WH01.irra,sha256=Ws78m5p3fD4oybtkOWoAtvFyuLPxpL_A_ueIg2tnhnw,365
32
- ararpy/examples/WHA.pdf,sha256=iopbptHkWPmYdgihEVDDfv2nm2XE-Q-e7fFnkR44Xh0,178692
33
- ararpy/examples/raw_example.xls,sha256=ftcSiXRx_7nYnbqJVma1Yl3Yr_iuceAWlEjhJwlAvFM,1929895
34
- ararpy/examples/sample-default.smp,sha256=YNkoQGgPrsL_fXS7ZHxfRtLQWekCDqT9czS6vBScImk,432
35
- ararpy/files/__init__.py,sha256=l5B5ZQ01WdtvjjN0aMkyAFNgpwANdM_1I0tQbqnRuEY,69
36
- ararpy/files/arr_file.py,sha256=KqksGlEA6nmMQofTgi7v45flscQZVtefxaNCKrV3Am4,837
37
- ararpy/files/basic.py,sha256=nc7Hgo_qLSkdmtKzZmd5SQ8Jy0dhW46ly4gh-oisUDs,2095
38
- ararpy/files/calc_file.py,sha256=nqv_VfbOzz8ejcnjNoHJafGiYldhYSOLusUGtuZ8jR0,28207
39
- ararpy/files/new_file.py,sha256=efblARIBROVLWS2w3-98BxLX5VZ8grRpiTkJFtf_rAk,214
40
- ararpy/files/raw_file.py,sha256=5hnZMS7r78lA0ZXrBEN5SWVurQyl0QsHOI9rJz5BQv8,22302
41
- ararpy/files/xls.py,sha256=DVcZ_yRnc19p-m4leGGjt-YPDpSa2udYKmGyrM0qub0,640
42
- ararpy/smp/EXPORT_TO_PDF_DATA_PROPERTIES.py,sha256=baDM437tu6hsPv0uYfod0TREXlPd6kvMBFT1S9ZZlkk,3024
43
- ararpy/smp/__init__.py,sha256=k6_fa27UJsQK7K7oC5GYlwMo6l0Xd8af3QtOrZz2XJk,478
44
- ararpy/smp/basic.py,sha256=slRu3VnnQ4zCaA5GFqcd_N_Pby1_8lIsvhhLhHIJ7As,24821
45
- ararpy/smp/calculation.py,sha256=LCFJWjLVLEKEQ5b7RFUIxsMahEzgLdodW4kCYXV5Z34,2919
46
- ararpy/smp/consts.py,sha256=XIdjdz8cYxspG2jMnoItdlUsxr3hKbNFJjMZJh1bpzw,393
47
- ararpy/smp/corr.py,sha256=s1t8VCM7M8WnwfIxWNIRva4ofGJPEPYpKxlb25skH8E,26515
48
- ararpy/smp/diffusion_funcs.py,sha256=4-PMMIZWzjk2HOYYWNgSp4GmApygp1MmOxJ2g3xrqWc,175049
49
- ararpy/smp/export.py,sha256=s89L5B1aHoCeJIjcw6nXA6NtV0j_5XXaWnOETWnomCs,115043
50
- ararpy/smp/info.py,sha256=iKUELm-BuUduDlJKC1d8tKKNHbwwbNmhUg2pi6bcBvA,489
51
- ararpy/smp/initial.py,sha256=VSNku2fYD1xGkpHxMqnSJCAhSQawfsDCdqYCxtDJryQ,17196
52
- ararpy/smp/json.py,sha256=BTZCjVN0aj9epc700nwkYEYMKN2lHBYo-pLmtnz5oHY,2300
53
- ararpy/smp/plots.py,sha256=Grx4GY2kh5KtvAwUV1iIDvQNQSrQd7IaliQ4cT6w01Y,33637
54
- ararpy/smp/raw.py,sha256=51n-rrbW2FqeZHQyevuG7iObPLGvIBzTe414QDVM1FE,6523
55
- ararpy/smp/sample.py,sha256=ZOrQt3Ilm6tJbQCwh_btoZOXdkCngZFHCt10Nh0UmpI,57727
56
- ararpy/smp/style.py,sha256=gCJ3F_vHnetrfbzEt-KgG5clRfosvJ00RJg6tN53QsQ,7678
57
- ararpy/smp/table.py,sha256=9bNAOqAIOc0nSC3LNeqjJKUYSJSM28Ji3o9VimwMU8A,6645
58
- ararpy/thermo/__init__.py,sha256=6VBuqTRFl403PVqOuMkVrut0nKaQsAosBmfW91X1dMg,263
59
- ararpy/thermo/arrhenius.py,sha256=Ass1ichHfqIAtpv8eLlgrUc1UOb3Urh1qzr1E3gLB4U,233
60
- ararpy/thermo/atomic_level_random_walk.py,sha256=Q97zfe2h2RaxADkoBAqd0uEiP16BFOajrTmXHMkL2EQ,25502
61
- ararpy/thermo/basic.py,sha256=nBGHI9uK7VdJwThwBIOcKAzdnYqPyQseFoY6s4zKizk,11504
62
- ararpy-0.1.199.dist-info/licenses/LICENSE,sha256=cvG5t_C1qY_zUyJI7sNOa7gCArdngNPaOrfujl2LYuc,1085
63
- ararpy-0.1.199.dist-info/METADATA,sha256=qXSAfULa1Ha9bpoyosss1MzEfO69BEjReHjLkIcaTEU,24517
64
- ararpy-0.1.199.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
65
- ararpy-0.1.199.dist-info/top_level.txt,sha256=9iTpsPCYuRYq09yQTk9d2lqB8JtTEOmbN-IcGB-K3vY,7
66
- ararpy-0.1.199.dist-info/RECORD,,