DiadFit 0.0.79__py3-none-any.whl → 0.0.80__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.
DiadFit/CO2_H2O_EOS.py CHANGED
@@ -10,6 +10,7 @@ from pathlib import Path
10
10
  from pickle import load
11
11
  import pickle
12
12
  import math
13
+ from DiadFit.CO2_EOS import *
13
14
 
14
15
 
15
16
  DiadFit_dir=Path(__file__).parent
@@ -101,7 +102,107 @@ aH2[13] = -4.13039220 / 10**1 # alpha for CO2
101
102
  aH2[14] = -8.47988634 # beta for CO2
102
103
  aH2[15] = 2.800 / 10**2 # gamma for CO2
103
104
 
105
+ ## This is for when you only feed a numpy array
106
+ # def ensure_series(a, b, c):
107
+ # # Determine the target length
108
+ # lengths = [len(a) if isinstance(a, pd.Series) else None,
109
+ # len(b) if isinstance(b, pd.Series) else None,
110
+ # len(c) if isinstance(c, pd.Series) else None]
111
+ # lengths = [l for l in lengths if l is not None]
112
+ # target_length = max(lengths) if lengths else 1
113
+ #
114
+ # # Convert each input to a Series of the target length
115
+ # if not isinstance(a, pd.Series):
116
+ # a = pd.Series([a] * target_length)
117
+ # if not isinstance(b, pd.Series):
118
+ # b = pd.Series([b] * target_length)
119
+ # if not isinstance(c, pd.Series):
120
+ # c = pd.Series([c] * target_length)
121
+ #
122
+ # return a, b, c
123
+ #
124
+ #
125
+ # def ensure_series_4(a, b, c, d):
126
+ # # Determine the target length
127
+ # lengths = [len(a) if isinstance(a, pd.Series) else None,
128
+ # len(b) if isinstance(b, pd.Series) else None,
129
+ # len(c) if isinstance(c, pd.Series) else None,
130
+ # len(d) if isinstance(d, pd.Series) else None]
131
+ # lengths = [l for l in lengths if l is not None]
132
+ # target_length = max(lengths) if lengths else 1
133
+ #
134
+ # # Convert each input to a Series of the target length
135
+ # if not isinstance(a, pd.Series):
136
+ # a = pd.Series([a] * target_length)
137
+ # if not isinstance(b, pd.Series):
138
+ # b = pd.Series([b] * target_length)
139
+ # if not isinstance(c, pd.Series):
140
+ # c = pd.Series([c] * target_length)
141
+ # if not isinstance(d, pd.Series):
142
+ # d = pd.Series([d] * target_length)
143
+ # return a, b, c, d
104
144
 
145
+ import pandas as pd
146
+ import numpy as np
147
+
148
+ def ensure_series(a, b, c):
149
+ # Determine the target length
150
+ lengths = [len(a) if isinstance(a, (pd.Series, np.ndarray)) else None,
151
+ len(b) if isinstance(b, (pd.Series, np.ndarray)) else None,
152
+ len(c) if isinstance(c, (pd.Series, np.ndarray)) else None]
153
+ lengths = [l for l in lengths if l is not None]
154
+ target_length = max(lengths) if lengths else 1
155
+
156
+ # Convert each input to a Series of the target length
157
+ if not isinstance(a, (pd.Series, np.ndarray)):
158
+ a = pd.Series([a] * target_length)
159
+ else:
160
+ a = pd.Series(a)
161
+
162
+ if not isinstance(b, (pd.Series, np.ndarray)):
163
+ b = pd.Series([b] * target_length)
164
+ else:
165
+ b = pd.Series(b)
166
+
167
+ if not isinstance(c, (pd.Series, np.ndarray)):
168
+ c = pd.Series([c] * target_length)
169
+ else:
170
+ c = pd.Series(c)
171
+
172
+ return a, b, c
173
+
174
+
175
+ def ensure_series_4(a, b, c, d):
176
+ # Determine the target length
177
+ lengths = [len(a) if isinstance(a, (pd.Series, np.ndarray)) else None,
178
+ len(b) if isinstance(b, (pd.Series, np.ndarray)) else None,
179
+ len(c) if isinstance(c, (pd.Series, np.ndarray)) else None,
180
+ len(d) if isinstance(d, (pd.Series, np.ndarray)) else None]
181
+ lengths = [l for l in lengths if l is not None]
182
+ target_length = max(lengths) if lengths else 1
183
+
184
+ # Convert each input to a Series of the target length
185
+ if not isinstance(a, (pd.Series, np.ndarray)):
186
+ a = pd.Series([a] * target_length)
187
+ else:
188
+ a = pd.Series(a)
189
+
190
+ if not isinstance(b, (pd.Series, np.ndarray)):
191
+ b = pd.Series([b] * target_length)
192
+ else:
193
+ b = pd.Series(b)
194
+
195
+ if not isinstance(c, (pd.Series, np.ndarray)):
196
+ c = pd.Series([c] * target_length)
197
+ else:
198
+ c = pd.Series(c)
199
+
200
+ if not isinstance(d, (pd.Series, np.ndarray)):
201
+ d = pd.Series([d] * target_length)
202
+ else:
203
+ d = pd.Series(d)
204
+
205
+ return a, b, c, d
105
206
 
106
207
 
107
208
 
@@ -178,7 +279,7 @@ def purevolume(i, V, P, B, C, D, E, F, Vc, TK, b, g):
178
279
  # Return the final estimated volume
179
280
  return V
180
281
 
181
- def purepressure(i, V, P, B, C, D, E, F, Vc, TK, b, g):
282
+ def purepressure(i, V, P, TK):
182
283
  """ Using the pure EOS, this function solves for the best pressure using the pureEOS residual calculated above
183
284
 
184
285
  It returns the pressure.
@@ -186,6 +287,8 @@ def purepressure(i, V, P, B, C, D, E, F, Vc, TK, b, g):
186
287
  """
187
288
  for iter in range(1, 51):
188
289
  # Calculate the derivative of the pureEOS function at (V, P)
290
+ k1_temperature, k2_temperature, k3_temperature, a1, a2, g, b, Vc, B, C, D, E, F, Vguess=get_EOS_params(P, TK)
291
+
189
292
  diff = (pureEOS(i, V, P + 0.0001, B, C, D, E, F, Vc, TK, b, g) - pureEOS(i, V, P, B, C, D, E, F, Vc, TK, b, g)) / 0.0001
190
293
 
191
294
  # Update the pressure using the Newton-Raphson method
@@ -201,6 +304,9 @@ def purepressure(i, V, P, B, C, D, E, F, Vc, TK, b, g):
201
304
  # Return the final estimated pressure
202
305
  return P
203
306
 
307
+
308
+
309
+
204
310
  def mol_vol_to_density(mol_vol, XH2O):
205
311
  """ Converts molar mass to molar density for a given XH2O"""
206
312
  density=((1-XH2O)*44 + (XH2O)*18)/mol_vol
@@ -265,11 +371,14 @@ def mixvolume(V, P, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK):
265
371
 
266
372
  return V
267
373
 
268
- def mixpressure(V, P, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK):
374
+ def mixpressure(P, V, TK, Y):
269
375
  """ This function iterates in pressure space to get the best match to the entered volume using the mixEOS function above.
270
376
 
271
377
  """
272
378
  for iter in range(1, 51):
379
+ k1_temperature, k2_temperature, k3_temperature, a1, a2, g, b, Vc, B, C, D, E, F, Vguess=get_EOS_params(P, TK)
380
+ Bij, Vcij, BVc_prm, BVc, Cijk, Vcijk, CVc2_prm, CVc2, Dijklm, Vcijklm, DVc4_prm, DVc4, Eijklmn, Vcijklmn, EVc5_prm, EVc5, Fij, FVc2_prm, FVc2, bmix, b_prm, gijk, gVc2_prm, gVc2=mixing_rules(B, C,D, E, F, Vc, Y, b, g, k1_temperature, k2_temperature, k3_temperature)
381
+
273
382
  diff = ((mixEOS(V, P + 0.0001, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK)
274
383
  - mixEOS(V, P, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK)) / 0.0001)
275
384
  Pnew = P - mixEOS(V, P, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK) / diff
@@ -280,8 +389,10 @@ def mixpressure(V, P, BVc, CVc2, DVc4, EVc5, FVc2, bmix, gVc2, TK):
280
389
  return P
281
390
 
282
391
 
392
+
283
393
  def mix_lnphi(i, Zmix, BVc_prm, CVc2_prm, DVc4_prm, EVc5_prm, FVc2_prm, FVc2, bmix, b_prm, gVc2, gVc2_prm, Vmix):
284
394
  lnph=0
395
+
285
396
  lnph = -math.log(Zmix)
286
397
  lnph += (BVc_prm[i] / Vmix)
287
398
  lnph += (CVc2_prm[i] / (2.0 * Vmix ** 2))
@@ -735,13 +846,8 @@ def calculate_molar_volume_DZ2006(*, P_kbar, T_K, XH2O):
735
846
 
736
847
 
737
848
  """
738
- # Make all a panda series
739
- if not isinstance(P_kbar, pd.Series):
740
- P_kbar = pd.Series(P_kbar)
741
- if not isinstance(T_K, pd.Series):
742
- T_K = pd.Series(T_K)
743
- if not isinstance(XH2O, pd.Series):
744
- XH2O = pd.Series(XH2O)
849
+
850
+ P_kbar, T_K, XH2O=ensure_series(P_kbar, T_K, XH2O)
745
851
 
746
852
  # Check all the same length
747
853
  lengths = [len(P_kbar), len(T_K), len(XH2O)]
@@ -760,6 +866,67 @@ def calculate_molar_volume_DZ2006(*, P_kbar, T_K, XH2O):
760
866
 
761
867
  return mol_vol
762
868
 
869
+ def calculate_Pressure_ind_DZ2006(*, mol_vol, T_K, XH2O, Pguess=None):
870
+ """ This function calculates pressure for a known molar volume, T in K and XH2O (mol frac) for a single value
871
+ """
872
+ V=mol_vol
873
+ if Pguess is None:
874
+ if V>1000:
875
+ Pguess=1000
876
+ elif V<10:
877
+ Pguess=20000
878
+ else:
879
+ Pguess=200
880
+
881
+ TK=T_K
882
+
883
+ # lets do for low pressure initially
884
+
885
+
886
+ if XH2O==0:
887
+ P=purepressure(1, V, Pguess, TK)
888
+
889
+ elif XH2O==1:
890
+ P=purepressure(0, V, Pguess, TK)
891
+
892
+ else:
893
+ XCO2=1-XH2O
894
+ Y = [0] * 2
895
+ Y[0]=XH2O
896
+ Y[1]=XCO2
897
+
898
+ P=mixpressure(Pguess, V, T_K, Y)
899
+
900
+ return P
901
+
902
+ def calculate_Pressure_DZ2006(*, mol_vol=None, density=None, T_K, XH2O):
903
+ """ Used to calculate molar volume in a loop for multiple inputs
904
+
905
+
906
+ """
907
+ # Make all a panda series
908
+
909
+
910
+
911
+ if mol_vol is None and density is not None:
912
+ mol_vol=density_to_mol_vol(density=density, XH2O=XH2O)
913
+
914
+ mol_vol, T_K, XH2O=ensure_series(mol_vol, T_K, XH2O)
915
+
916
+ # Check all the same length
917
+ lengths = [len(mol_vol), len(T_K), len(XH2O)]
918
+ if len(set(lengths)) != 1:
919
+ raise ValueError("All input Pandas Series must have the same length.")
920
+
921
+ # Set up loop
922
+ P=np.empty(len(mol_vol), float)
923
+
924
+ for i in range(0, len(mol_vol)):
925
+ P[i]=calculate_Pressure_ind_DZ2006(mol_vol=mol_vol.iloc[i].astype(float), T_K=T_K.iloc[i].astype(float), XH2O=XH2O.iloc[i].astype(float))
926
+
927
+
928
+
929
+ return P
763
930
 
764
931
 
765
932
  def mix_fugacity(*, P_kbar, T_K, XH2O, Vmix):
@@ -768,14 +935,10 @@ def mix_fugacity(*, P_kbar, T_K, XH2O, Vmix):
768
935
 
769
936
  """
770
937
  # Make everything a pandas series
771
- if not isinstance(P_kbar, pd.Series):
772
- P_kbar = pd.Series(P_kbar)
773
- if not isinstance(T_K, pd.Series):
774
- T_K = pd.Series(T_K)
775
- if not isinstance(XH2O, pd.Series):
776
- XH2O = pd.Series(XH2O)
777
- if not isinstance(Vmix, pd.Series):
778
- Vmix = pd.Series(Vmix)
938
+
939
+ P_kbar, T_K, XH2O, Vmix=ensure_series_4(P_kbar, T_K, XH2O, Vmix)
940
+
941
+
779
942
 
780
943
  #Check all the same length
781
944
  lengths = [len(P_kbar), len(T_K), len(XH2O), len(Vmix)]
@@ -796,16 +959,44 @@ def mix_fugacity(*, P_kbar, T_K, XH2O, Vmix):
796
959
 
797
960
 
798
961
  def mol_vol_to_density(*, mol_vol, XH2O):
799
- """ Converts molar mass to molar density for a given XH2O"""
962
+ """ Converts molar mass to density for a given XH2O"""
800
963
  density=((1-XH2O)*44 + (XH2O)*18)/mol_vol
801
964
  return density
802
965
 
966
+ def density_to_mol_vol(*, density, XH2O):
967
+ """ Converts density in g/cm3 to molar volume for a given XH2O"""
968
+ mol_vol=((1-XH2O)*44 + (XH2O)*18)/density
969
+ return mol_vol
970
+
971
+
972
+
973
+ def calc_prop_knownP_EOS_DZ2006(*, P_kbar=1, T_K=1200, XH2O=1):
974
+ """ This function calculates molar volume, density, compressability factor, fugacity, and activity for mixed H2O-CO2 fluids
975
+ using the EOS of Span and Wanger. It assumes you know P, T, and XH2O.
976
+
977
+ Parameters
978
+ -------------------
979
+ P_kbar: float, np.array, pd.Series
980
+ Pressure in kbar
981
+ T_K: float, np.array, pd.Series
982
+ Temperature in Kelvin
983
+ XH2O: float, np.array, pd.Series
984
+ Molar fraction of H2O in the fluid phase.
985
+
986
+ Returns
987
+ -------------------
988
+ pd.DataFrame
989
+
990
+ """
991
+
803
992
 
804
993
 
994
+ # First, check all pd Series
995
+
805
996
 
806
- def H2O_CO2_EOS_DZ2006_knownP(*, P_kbar=1, T_K=1200, XH2O=1):
807
- """ Function to return a dataframe of outputs when you know P, T_K and XH2O"""
808
997
  mol_vol=calculate_molar_volume_DZ2006(P_kbar=P_kbar, T_K=T_K, XH2O=XH2O)
998
+
999
+
809
1000
  f_H2O, f_CO2, a_H2O, a_CO2, Zmix=mix_fugacity(P_kbar=P_kbar, T_K=T_K, XH2O=XH2O,
810
1001
  Vmix=mol_vol)
811
1002
  density=mol_vol_to_density(mol_vol=mol_vol, XH2O=XH2O)
@@ -831,6 +1022,62 @@ def H2O_CO2_EOS_DZ2006_knownP(*, P_kbar=1, T_K=1200, XH2O=1):
831
1022
 
832
1023
 
833
1024
 
1025
+ def calculate_entrapment_P_XH2O(*, XH2O, CO2_dens_gcm3, T_K):
1026
+ """" This function calculates pressure for a measured CO$_2$ density, temperature and estimate of initial XH2O.
1027
+ It first corrects the density to obtain a bulk density for a CO2-H2O mix, assuming that H2O was lost from the inclusion.
1028
+ correcting for XH2O. It assumes that H2O has been lost from the inclusion (see Hansteen and Klugel, 2008 for method). It also calculates using other
1029
+ pure CO2 equation of states for comparison
1030
+
1031
+ Parameters
1032
+ ----------------------
1033
+ XH2O: float, pd.Series.
1034
+ The molar fraction of H2O in the fluid. Should be between 0 and 1. Can get an estimate from say VESical.
1035
+
1036
+ CO2_dens_gcm3: float, pd.Series
1037
+ Measured CO2 density in g/cm3
1038
+
1039
+ T_K: float, pd.Series
1040
+ Temperature in Kelvin.
1041
+
1042
+ Returns
1043
+ -----------------------------
1044
+ pd.DataFrame:
1045
+ Columns showing:
1046
+ P_kbar_pureCO2_SW96: Pressure calculated for the measured CO$_2$ density using the pure CO2 EOS from Span and Wanger (1996)
1047
+ P_kbar_pureCO2_SP94: Pressure calculated for the measured CO$_2$ density using the pure CO2 EOS from Sterner and Pitzer (1994)
1048
+ P_kbar_pureCO2_DZ06: Pressure calculated from the measured CO$_2$ density using the pure CO2 EOs from Duan and Zhang (2006)
1049
+ P_kbar_mixCO2_DZ06: Pressure calculated from the reconstructed mixed fluid density using the mixed EOS from Duan and Zhang (2006)
1050
+ P Mix/P Pure DZ06: Correction factor - e.g. how much deeper the pressure is from the mixed EOS
1051
+ rho_mix_calc: Bulk density calculated (C+H) at time of entrapment
1052
+ CO2_dens_gcm3: Input CO2 density
1053
+ T_K: input temperature
1054
+ XH2O: input molar fraction of H2O
1055
+
1056
+ """
1057
+ XH2O, rho_meas, T_K=ensure_series(a=XH2O, b=CO2_dens_gcm3, c=T_K)
1058
+ alpha=XH2O/(1-XH2O)
1059
+ # This gets the bulk density of the CO2-H2O fluid
1060
+ rho_orig=rho_meas*(1+alpha*(18/44))
1061
+ # Lets calculate the pressure using SW96
1062
+ P_SW=calculate_P_for_rho_T(T_K=T_K, CO2_dens_gcm3=rho_meas, EOS='SW96')
1063
+ P_SP=calculate_P_for_rho_T(T_K=T_K, CO2_dens_gcm3=rho_meas, EOS='SP94')
1064
+ # Same for DZ2006
1065
+ P_DZ=calculate_Pressure_DZ2006(density=rho_meas, T_K=T_K, XH2O=XH2O*0)
1066
+ # Now doing it with XH2O
1067
+ P_DZ_mix=calculate_Pressure_DZ2006(density=rho_orig, T_K=T_K, XH2O=XH2O)
1068
+
1069
+ df=pd.DataFrame(data={
1070
+ 'P_kbar_pureCO2_SW96': P_SW['P_kbar'],
1071
+ 'P_kbar_pureCO2_SP94': P_SW['P_kbar'],
1072
+ 'P_kbar_pureCO2_DZ06': P_DZ/1000,
1073
+ 'P_kbar_mixCO2_DZ06': P_DZ_mix/1000,
1074
+ 'P Mix/P Pure DZ06': P_DZ_mix/P_DZ,
1075
+ 'rho_mix_calc': rho_orig,
1076
+ 'CO2_dens_gcm3': rho_meas,
1077
+ 'T_K': T_K,
1078
+ 'XH2O': XH2O})
1079
+
1080
+ return df
834
1081
 
835
1082
 
836
1083
 
DiadFit/_version.py CHANGED
@@ -5,4 +5,4 @@
5
5
  # 1) we don't load dependencies by storing it in __init__.py
6
6
  # 2) we can import it in setup.py for the same reason
7
7
  # 3) we can import it into your module
8
- __version__ = '0.0.79'
8
+ __version__ = '0.0.80'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: DiadFit
3
- Version: 0.0.79
3
+ Version: 0.0.80
4
4
  Summary: DiadFit
5
5
  Home-page: https://github.com/PennyWieser/DiadFit
6
6
  Author: Penny Wieser
@@ -1,5 +1,5 @@
1
1
  DiadFit/CO2_EOS.py,sha256=AeiM_s0cIVip5i5q1Shy8QXTUWz4XHG0VnfuBH5qRDY,28034
2
- DiadFit/CO2_H2O_EOS.py,sha256=A1dT-9gnckhhssipYatDwtZwQyhe3egQXwlSwYNws5c,29225
2
+ DiadFit/CO2_H2O_EOS.py,sha256=TLU2goWB6yGFbN4RBS0dRXG0oDQuuG0JftW32DZHmn4,37722
3
3
  DiadFit/CO2_in_bubble_error.py,sha256=Ga_hNA63m-OZg2hBOqM7VvpJhnvvTCg6L3Qixh1Bh7A,14196
4
4
  DiadFit/H2O_fitting.py,sha256=pbEa0JivZFAmWxEGY5VMetD95BGNCzkaatfXRVAV4fs,43889
5
5
  DiadFit/Highrho_polyfit_data.pkl,sha256=7t6uXxI-HdfsvreAWORzMa9dXxUsnXqKBSo1O3EgiBw,1213
@@ -22,7 +22,7 @@ DiadFit/Mediumrho_polyfit_data_CCMR.pkl,sha256=U6ODSdurqS0-lynm1MG1zktg8NuhYRbrY
22
22
  DiadFit/Mediumrho_polyfit_data_CMASS.pkl,sha256=SBy1pIdqCAF9UtB9FLNTuD0-tFyD7swwJppdE2U_FsY,1557
23
23
  DiadFit/Psensor.py,sha256=C2xSlgxhUJIKIBDvUp02QaYRs5QsIqjGGRMP25ZLRZ0,10435
24
24
  DiadFit/__init__.py,sha256=wXZHfLvkI9ye1TFrdykATP8Kn7I-UdNFBTmHZI1V9EQ,1181
25
- DiadFit/_version.py,sha256=fugtEQoTmHhSLhTkoRHaKUgjmjg0g4gxy5aLvJXcutU,296
25
+ DiadFit/_version.py,sha256=SazyQZ1u3ZbLcm4V_X0Afuz2vYszLoDthUrzhh_eAB4,296
26
26
  DiadFit/argon_lines.py,sha256=vtzsuDdEgrAmEF9xwpejpFqKV9hKPS1JUYhIl4AfXZ0,7675
27
27
  DiadFit/cosmicray_filter.py,sha256=SqowmxChJG4Is6_K5E5OqJ1WaSWSaGKg-hSDBOJIVA0,23626
28
28
  DiadFit/densimeter_fitting.py,sha256=Uel9a4qUVz6r-my09uuHFRjD9oPFF-kd5ZBPYfYfOQM,8086
@@ -34,7 +34,7 @@ DiadFit/importing_data_files.py,sha256=zghBVGWLLQaG9dWKSIa7KaDmqUBmyhm7ZgBmV5f4S
34
34
  DiadFit/molar_gas_proportions.py,sha256=_oEZn_vndHGDaXAjZ6UU8ycujBx_qB2KGCGqZSzotQU,3389
35
35
  DiadFit/ne_lines.py,sha256=-Xv62LJ2OOGSCeKsQjmXZ7yD3g2ZOG1okxvVp8PYzXM,67144
36
36
  DiadFit/relaxifi.py,sha256=hHzRsJPQIVohYi3liy9IQJpaomgsa2zbLQmhqkpdfrI,31549
37
- DiadFit-0.0.79.dist-info/METADATA,sha256=fp3BVv4Wh2MjjjdhoHQPBB8tVjG2OaiWMBoIMhddeu0,1159
38
- DiadFit-0.0.79.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
39
- DiadFit-0.0.79.dist-info/top_level.txt,sha256=yZC6OFLVznaFA5kcPlFPkvhKotcVd-YO4bKxZZw3LQE,8
40
- DiadFit-0.0.79.dist-info/RECORD,,
37
+ DiadFit-0.0.80.dist-info/METADATA,sha256=EWYJK6FLJ5O1UaUS66QjXOPadAJQiJ41C1I8ZTR5riQ,1159
38
+ DiadFit-0.0.80.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
39
+ DiadFit-0.0.80.dist-info/top_level.txt,sha256=yZC6OFLVznaFA5kcPlFPkvhKotcVd-YO4bKxZZw3LQE,8
40
+ DiadFit-0.0.80.dist-info/RECORD,,