From af71a2c208a159ea68aabfce5ba9fc55c144358a Mon Sep 17 00:00:00 2001 From: titusquah <46580668+titusquah@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:57:22 -0600 Subject: [PATCH] Updated documentation --- .idea/workspace.xml | 113 ++++++++++++----- README.md | 46 +++++-- data/csvs/PC88A_HCL_NdPrCeLaDySmY.csv | 20 +-- .../xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml | 58 ++++----- data/xmls/twophase.xml | 2 +- .../Examples/iterative_fitter_eval_grapher.py | 61 +++++++-- docs/Examples/outputs/temp.xml | 58 ++++----- docs/build/doctrees/environment.pickle | Bin 150345 -> 154128 bytes docs/build/doctrees/guide/install.doctree | Bin 5675 -> 5675 bytes docs/build/doctrees/guide/quickstart.doctree | Bin 6221 -> 7735 bytes docs/build/doctrees/modules/reeps.doctree | Bin 191532 -> 201626 bytes .../build/html/_images/quick_start_output.png | Bin 0 -> 32464 bytes docs/build/html/_modules/llepe/llepe.html | 119 ++++++++++++++---- .../build/html/_sources/guide/install.rst.txt | 2 +- .../html/_sources/guide/quickstart.rst.txt | 23 +++- .../html/_static/img/quick_start_output.png | Bin 0 -> 32464 bytes docs/build/html/genindex.html | 16 ++- docs/build/html/guide/install.html | 2 +- docs/build/html/guide/quickstart.html | 25 +++- docs/build/html/modules/reeps.html | 85 ++++++++++--- docs/build/html/objects.inv | Bin 688 -> 705 bytes docs/build/html/searchindex.js | 2 +- .../source/_static/img/quick_start_output.png | Bin 0 -> 32464 bytes docs/source/guide/install.rst | 2 +- docs/source/guide/quickstart.rst | 23 +++- llepe/llepe.py | 25 +++- 26 files changed, 489 insertions(+), 193 deletions(-) create mode 100644 docs/build/html/_images/quick_start_output.png create mode 100644 docs/build/html/_static/img/quick_start_output.png create mode 100644 docs/source/_static/img/quick_start_output.png diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4bb3c1f..3b6f98f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,9 +1,30 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -416,7 +440,21 @@ @@ -454,7 +492,8 @@ - @@ -478,10 +517,10 @@ - + - + @@ -496,29 +535,37 @@ - - + + + + - - + + + + - - + + + + - - + + + + @@ -557,9 +604,10 @@ - - + + + @@ -577,9 +625,10 @@ - - + + + diff --git a/README.md b/README.md index c83f743..742d916 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # REEPS -REEPS (Rare Earth Element Parameter Searcher) is a toolkit for estimating standard thermodynamic parameters for Gibbs minimization. -Extend a methodology for estimating standard thermodynamic parameters for Gibbs minimization in multiphase, multicomponent separations systems +LLEPE (Liquid-Liquid Extraction Parameter Estimator) is a toolkit for estimating standard thermodynamic parameters for Gibbs minimization. + ## Installation -To install REEPS, clone the repository with the command +To install llepe, clone the repository with the command ``` $ git clone https://xgitlab.cels.anl.gov/summer-2020/parameter-estimation.git @@ -19,16 +19,42 @@ and run the command below in your terminal ``` $ pip install -e. ``` +For docs and tests, run +``` +$ pip install -e .[docs,tests] +``` ### Dependencies -REEPS uses packages: cantera (https://cantera.org/), pandas, numpy, scipy, xml, seaborn, and matplotlib +llepe uses packages: cantera (https://cantera.org/), pandas, numpy, scipy, xml, seaborn, and matplotlib ## Usage Check out examples in docs/examples + +Readthedocs documentation are in docs/build/html/index.html ```python -from reeps import REEPS -searcher = REEPS(**REEPS_parameters_dictionary) -optimized_parameter_dictionary = searcher.fit() -searcher.update_xml(optimized_parameter_dictionary) -searcher.parity_plot() -print(seacher.r_squared()) +from llepe import LLEPE + opt_dict = {'Nd(H(A)2)3(org)_h0': {'upper_element_name': 'species', + 'upper_attrib_name': 'name', + 'upper_attrib_value': 'Nd(H(A)2)3(org)', + 'lower_element_name': 'h0', + 'lower_attrib_name': None, + 'lower_attrib_value': None, + 'input_format': '{0}', + 'input_value': -4.7e6}} + + searcher_parameters = {'exp_data': 'Nd_exp_data.csv', + 'phases_xml_filename': 'twophase.xml', + 'opt_dict': opt_dict, + 'phase_names': ['HCl_electrolyte', 'PC88A_liquid'], + 'aq_solvent_name': 'H2O(L)', + 'extractant_name': '(HA)2(org)', + 'diluant_name': 'dodecane', + 'complex_names': ['Nd(H(A)2)3(org)'], + 'extracted_species_ion_names': ['Nd+++'], + 'aq_solvent_rho': 1000.0, + 'extractant_rho': 960.0, + 'diluant_rho': 750.0} + searcher = LLEPE(**searcher_parameters) + est_enthalpy = searcher.fit() + searcher.update_xml(est_enthalpy) + searcher.parity_plot(print_r_squared=True) ``` diff --git a/data/csvs/PC88A_HCL_NdPrCeLaDySmY.csv b/data/csvs/PC88A_HCL_NdPrCeLaDySmY.csv index b2646d3..bd7991a 100644 --- a/data/csvs/PC88A_HCL_NdPrCeLaDySmY.csv +++ b/data/csvs/PC88A_HCL_NdPrCeLaDySmY.csv @@ -10,16 +10,16 @@ Lyon (2016),0.01,0.01,1,1,0.259983361,0.197587354,0.315789474,0.088710553,0.0718 Lyon (2016),0.05,0.05,1,1,0.259983361,0.207986689,0.25,0.088710553,0.07540397,0.176470588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Lyon (2016),0.1,0.1,1,1,0.259983361,0.21578619,0.204819277,0.088710553,0.077178181,0.149425287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Lyon (2016),0.3,0.3,1,1,0.259983361,0.244384359,0.063829787,0.088710553,0.08338792,0.063829787,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -Liu (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.017097653,0.33,0.008303308,0.006642646,0.25,0,0,0,0.054425491,0.050393973,0.08,0,0,0,0,0,0,0,0,0 -Liu (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.013298174,0.71,0.008303308,0.005462702,0.52,0,0,0,0.054425491,0.048594188,0.12,0,0,0,0,0,0,0,0,0 -Liu (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010932634,1.08,0.008303308,0.004537327,0.83,0,0,0,0.054425491,0.048164151,0.13,0,0,0,0,0,0,0,0,0 -Liu (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.009396644,1.42,0.008303308,0.003972875,1.09,0,0,0,0.054425491,0.047326514,0.15,0,0,0,0,0,0,0,0,0 -Liu (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.008209342,1.77,0.008303308,0.002997584,1.77,0,0,0,0.054425491,0.045735706,0.19,0,0,0,0,0,0,0,0,0 -Banda (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.018928042,0.201385664,0.008303308,0.007354823,0.128960943,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -Banda (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.014333115,0.586527247,0.008303308,0.005999476,0.384005473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -Banda (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010952454,1.076235839,0.008303308,0.004805359,0.727926764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -Banda (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.008786058,1.588177405,0.008303308,0.003974007,1.089404412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -Banda (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.00700602,2.245762712,0.008303308,0.00322327,1.576050934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.017097653,0.33,0.008303308,0.006642646,0.25,0,0,0,0.054425491,0.050393973,0.08,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.013298174,0.71,0.008303308,0.005462702,0.52,0,0,0,0.054425491,0.048594188,0.12,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010932634,1.08,0.008303308,0.004537327,0.83,0,0,0,0.054425491,0.048164151,0.13,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.009396644,1.42,0.008303308,0.003972875,1.09,0,0,0,0.054425491,0.047326514,0.15,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.008209342,1.77,0.008303308,0.002997584,1.77,0,0,0,0.054425491,0.045735706,0.19,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.018928042,0.201385664,0.008303308,0.007354823,0.128960943,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.014333115,0.586527247,0.008303308,0.005999476,0.384005473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010952454,1.076235839,0.008303308,0.004805359,0.727926764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.008786058,1.588177405,0.008303308,0.003974007,1.089404412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.00700602,2.245762712,0.008303308,0.00322327,1.576050934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Kim (2012),0.01023293,0.01023293,0.1,0.1,0.009359401,0.007999488,0.17,0.003371001,0.003064546,0.1,0.038539496,0.037783819,0.02,0.022461314,0.022020896,0.02,0,0,0,0,0,0,0,0,0 Kim (2012),0.01023293,0.01023293,0.3,0.3,0.009359401,0.006881912,0.36,0.003371001,0.002763116,0.22,0.038539496,0.035357336,0.09,0.022461314,0.021597417,0.04,0,0,0,0,0,0,0,0,0 Kim (2012),0.01023293,0.01023293,0.5,0.5,0.009359401,0.005813293,0.61,0.003371001,0.002340973,0.44,0.038539496,0.032386131,0.19,0.022461314,0.02060671,0.09,0,0,0,0,0,0,0,0,0 diff --git a/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml b/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml index d2ad522..b218c2a 100644 --- a/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml +++ b/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml @@ -33,7 +33,7 @@ 298.14999999999998 - -1376882.3191117246 + -1376882.0784583509 558.9824 0.0 @@ -50,7 +50,7 @@ 298.14999999999998 - -4925566.309854757 + -4924298.0880370205 1117.965 0.0 @@ -67,7 +67,7 @@ 298.14999999999998 - -4938249.845712334 + -4935685.119723228 1117.965 0.0 @@ -85,7 +85,7 @@ 298.14999999999998 - -4920387.823199008 + -4920369.042961768 1117.965 0.0 @@ -103,7 +103,7 @@ 298.14999999999998 - -4933548.865580005 + -4928639.61964031 1117.965 0.0 @@ -120,7 +120,7 @@ 298.14999999999998 - -4932560.171447597 + -4931991.722599618 1117.965 0.0 @@ -138,7 +138,7 @@ 298.14999999999998 - -4944840.781582316 + -4944682.264585918 1117.965 0.0 @@ -157,7 +157,7 @@ 298.14999999999998 - -4924696.189921901 + -4924669.3217661735 1117.965 0.0 @@ -245,10 +245,10 @@ - 0.05879108748614492, 0.0, 0.0, 0.0, 0.0 - 0.5448324180244323, 0.0, 0.0, 0.0, 0.0 + 0.058791091500561485, 0.0, 0.0, 0.0, 0.0 + 0.5448322248125199, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 2 0 @@ -261,10 +261,10 @@ - 1.2137222016802447, 0.0, 0.0, 0.0, 0.0 - 7.748226963005033, 0.0, 0.0, 0.0, 0.0 + 1.213717095858249, 0.0, 0.0, 0.0, 0.0 + 7.7481294675488375, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 2 0 @@ -277,10 +277,10 @@ - 1.022316535866388, 0.0, 0.0, 0.0, 0.0 - 0.5296311209773129, 0.0, 0.0, 0.0, 0.0 + 1.0223168335791355, 0.0, 0.0, 0.0, 0.0 + 0.5296306654103653, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 2 0 @@ -293,10 +293,10 @@ - 0.7646397332938777, 0.0, 0.0, 0.0, 0.0 - 7.849320590516409, 0.0, 0.0, 0.0, 0.0 + 0.7646372240575223, 0.0, 0.0, 0.0, 0.0 + 7.849276225207628, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 2 0 @@ -309,10 +309,10 @@ - 0.2035235053232368, 0.0, 0.0, 0.0, 0.0 - 21.120426174002823, 0.0, 0.0, 0.0, 0.0 + 0.20352350320923904, 0.0, 0.0, 0.0, 0.0 + 21.120419048363047, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 2 0 @@ -325,10 +325,10 @@ - 0.8852802073165494, 0.0, 0.0, 0.0, 0.0 - 9.334653075341238, 0.0, 0.0, 0.0, 0.0 + 0.8852797060008407, 0.0, 0.0, 0.0, 0.0 + 9.334636294454038, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 2 0 @@ -341,10 +341,10 @@ - 0.6989081585234721, 0.0, 0.0, 0.0, 0.0 - 6.877882600430561, 0.0, 0.0, 0.0, 0.0 + 0.6989083059080712, 0.0, 0.0, 0.0, 0.0 + 6.877881736471866, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 2 0 diff --git a/data/xmls/twophase.xml b/data/xmls/twophase.xml index 1d0d109..3520b33 100644 --- a/data/xmls/twophase.xml +++ b/data/xmls/twophase.xml @@ -50,7 +50,7 @@ 298.14999999999998 - -4704699.156668724 + -4704699.156668724 1117.965 0.0 diff --git a/docs/Examples/iterative_fitter_eval_grapher.py b/docs/Examples/iterative_fitter_eval_grapher.py index aaed7bd..8d997c4 100644 --- a/docs/Examples/iterative_fitter_eval_grapher.py +++ b/docs/Examples/iterative_fitter_eval_grapher.py @@ -10,6 +10,9 @@ font = {'family': 'sans serif', matplotlib.rc('font', **font) plt.rc('xtick', labelsize=18) plt.rc('ytick', labelsize=18) +plt.rcParams['lines.linewidth'] = 4 +matplotlib.rcParams['lines.markersize'] = 10 + def ext_to_complex(h0, custom_obj_dict, mini_species): linear_params = custom_obj_dict['lin_param_df'] @@ -24,7 +27,8 @@ def mod_lin_param_df(lp_df, input_val, mini_species, mini_lin_param): return new_lp_df -info_df = pd.read_csv('outputs/iterative_fitter_output2.csv') +info_df = pd.read_csv('outputs/iterative_fitter_w_mse_output.csv') +test_row = 3 pitzer_params_filename = "../../data/jsons/min_h0_pitzer_params.txt" with open(pitzer_params_filename) as file: pitzer_params_dict = json.load(file) @@ -33,6 +37,8 @@ species_list = 'Nd,Pr,Ce,La,Dy,Sm,Y'.split(',') pitzer_param_list = ['beta0', 'beta1'] labeled_data = pd.read_csv("../../data/csvs/" "PC88A_HCL_NdPrCeLaDySmY.csv") +labeled_data = labeled_data.sort_values(['Feed Pr[M]', 'Feed Ce[M]'], + ascending=True) exp_data = labeled_data.drop(labeled_data.columns[0], axis=1) xml_file = "PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml" lin_param_df = pd.read_csv("../../data/csvs" @@ -76,11 +82,11 @@ info_dict = {'(HA)2(org)_h0': {'upper_element_name': 'species', 'lower_attrib_value': None, 'input_format': '{0}', 'input_value': - info_df.iloc[-1, :]['best_ext_h0']}} + info_df.iloc[test_row, :]['best_ext_h0']}} for species in species_list: for pitzer_param in pitzer_param_list: pitzer_str = "{0}_{1}".format(species, pitzer_param) - value = info_df.iloc[-1, :][pitzer_str] + value = info_df.iloc[test_row, :][pitzer_str] pitzer_params_dict[pitzer_str]['input_value'] = value lin_str = "{0}_slope".format(species) inner_dict = {'custom_object_name': 'lin_param_df', @@ -91,7 +97,7 @@ for species in species_list: } info_dict[lin_str] = inner_dict lin_str = "{0}_intercept".format(species) - value = info_df.iloc[-1, :][lin_str] + value = info_df.iloc[test_row, :][lin_str] inner_dict = {'custom_object_name': 'lin_param_df', 'function': mod_lin_param_df, 'kwargs': {'mini_species': species, @@ -112,15 +118,52 @@ for col in exp_data.columns: if 'aq_i' in col: feed_cols.append(col) exp_data['total_re'] = exp_data[feed_cols].sum(axis=1) +label_list = [] +for index, row in exp_data[feed_cols].iterrows(): + bool_list = list((row > 0).values) + label = '' + for species, el in zip(species_list, bool_list): + if el: + label = '{0}-{1}'.format(label, species) + label = label[1:] + label_list.append(label) +r2s = "" for species in species_list: - save_name = 'outputs/parity_iterative_fitter_{0}_org_eq'.format(species) + # if species=='La': + # save_name = 'outputs' \ + # '/parity_iterative_fitter_{0}_org_eq'.format(species) + save_name = None + # fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), + # c_data='z_i', + # c_label='Feed total RE ' + # 'molarity (mol/L)', + # print_r_squared=True, + # save_path=save_name) + r2s += str(estimator.r_squared('{0}_org_eq'.format(species))) + ',' + fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), - c_data=exp_data[ - 'total_re'].values, - c_label='Feed total RE ' - 'molarity (mol/L)', + data_labels=label_list, print_r_squared=True, save_path=save_name) + ax.legend(loc=4) +pred_df = pd.DataFrame(estimator.get_predicted_dict()) +new_cols = [] +for col in pred_df.columns: + new_cols.append("pred_{0}".format(col)) +pred_df.columns = new_cols +new_cols = ['label', + 'h_i', + 'h_eq', + 'z_i', + 'z_eq' + ] +for species in species_list: + new_cols.append("{0}_aq_i".format(species)) + new_cols.append("{0}_aq_eq".format(species)) + new_cols.append("{0}_d_eq".format(species)) +labeled_data.columns = new_cols +total_df = labeled_data.join(pred_df) +# total_df.to_csv('if_mse_total_df.csv') # short_info_dict = {} # for key, value in info_dict.items(): # short_info_dict[key] = value['input_value'] diff --git a/docs/Examples/outputs/temp.xml b/docs/Examples/outputs/temp.xml index e292885..b218c2a 100644 --- a/docs/Examples/outputs/temp.xml +++ b/docs/Examples/outputs/temp.xml @@ -33,7 +33,7 @@ 298.14999999999998 - -1376882.3191117246 + -1376882.0784583509 558.9824 0.0 @@ -50,7 +50,7 @@ 298.14999999999998 - -4925566.309854757 + -4924298.0880370205 1117.965 0.0 @@ -67,7 +67,7 @@ 298.14999999999998 - -4938249.845712334 + -4935685.119723228 1117.965 0.0 @@ -85,7 +85,7 @@ 298.14999999999998 - -4920387.823199008 + -4920369.042961768 1117.965 0.0 @@ -103,7 +103,7 @@ 298.14999999999998 - -4933548.865580005 + -4928639.61964031 1117.965 0.0 @@ -120,7 +120,7 @@ 298.14999999999998 - -4932560.171447597 + -4931991.722599618 1117.965 0.0 @@ -138,7 +138,7 @@ 298.14999999999998 - -4944840.781582316 + -4944682.264585918 1117.965 0.0 @@ -157,7 +157,7 @@ 298.14999999999998 - -4924696.189921901 + -4924669.3217661735 1117.965 0.0 @@ -245,10 +245,10 @@ - 0.05879108748614492, 0.0, 0.0, 0.0, 0.0 - 0.5448324180244323, 0.0, 0.0, 0.0, 0.0 + 0.058791091500561485, 0.0, 0.0, 0.0, 0.0 + 0.5448322248125199, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 2 0 @@ -261,10 +261,10 @@ - 1.2137222016802447, 0.0, 0.0, 0.0, 0.0 - 7.748226963005033, 0.0, 0.0, 0.0, 0.0 + 1.213717095858249, 0.0, 0.0, 0.0, 0.0 + 7.7481294675488375, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 2 0 @@ -277,10 +277,10 @@ - 1.022316535866388, 0.0, 0.0, 0.0, 0.0 - 0.5296311209773129, 0.0, 0.0, 0.0, 0.0 + 1.0223168335791355, 0.0, 0.0, 0.0, 0.0 + 0.5296306654103653, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 2 0 @@ -293,10 +293,10 @@ - 0.7646397332938777, 0.0, 0.0, 0.0, 0.0 - 7.849320590516409, 0.0, 0.0, 0.0, 0.0 + 0.7646372240575223, 0.0, 0.0, 0.0, 0.0 + 7.849276225207628, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 2 0 @@ -309,10 +309,10 @@ - 0.2035235053232368, 0.0, 0.0, 0.0, 0.0 - 21.120426174002823, 0.0, 0.0, 0.0, 0.0 + 0.20352350320923904, 0.0, 0.0, 0.0, 0.0 + 21.120419048363047, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 2 0 @@ -325,10 +325,10 @@ - 0.8852802073165494, 0.0, 0.0, 0.0, 0.0 - 9.334653075341238, 0.0, 0.0, 0.0, 0.0 + 0.8852797060008407, 0.0, 0.0, 0.0, 0.0 + 9.334636294454038, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 2 0 @@ -341,10 +341,10 @@ - 0.6989081585234721, 0.0, 0.0, 0.0, 0.0 - 6.877882600430561, 0.0, 0.0, 0.0, 0.0 + 0.6989083059080712, 0.0, 0.0, 0.0, 0.0 + 6.877881736471866, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 2 0 diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 176b86d15e6c0ffe1812192c6ba61e56481cc3f4..bfa0d3321c32cd0778959fdcdf12898c76afd848 100644 GIT binary patch delta 12775 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 diff --git a/docs/build/doctrees/guide/install.doctree b/docs/build/doctrees/guide/install.doctree index 32918730d8d0a500d21cbf7760c0d0f511938307..46eb899ccc86a154a7585cc54f1bb95ea3a8edf7 100644 GIT binary patch delta 31 fcmZ3jvs!1vN+wnxAJ+ia$?KRL;4F*9+RVZLtdR-Y delta 31 fcmZ3jvs!1vN+#AISJ!~x$?KRL;4F*9+RVZLt^*15 diff --git a/docs/build/doctrees/guide/quickstart.doctree b/docs/build/doctrees/guide/quickstart.doctree index 149c9f11349b11bbee207609829e1e6e6618a151..3f643f70d6da74f401843f3b1a739d244de72271 100644 GIT binary patch delta 1549 zcmeHHL2DC16wcag)25P`R!m!JI#ywmYB#BhLa_&xN~NWG5Ja?wX?Btsy4l_C&QxQK zsfZ|L@iHrlQ1mDYisWFW#ghjw{swQ}y!Zpu*)&_Ncu)~fUIP2RH}8Az%X{Cu+{+{K zV)*X9)C-w~YtPSM;(&swAz-69Mr`B&iXjCRlZmiZ0npHZ1s#e+9DxC(qcSq+74>pi z9{@$7BS4G>r0d8+iUTxAAt;)*GwQ!P4h@QI_yerh%mSoH^GgUq8z5tz*rwq# zIKUwk4Oy@-3rnJ_^@^&8BhwyM-M`a#?T>_pkNd%C{tQ` zJbg5?KXV{$+NDe$=adl>8?cN-SaB>=Ajsi!k)GaW3Z&E~GaDIxrVsDh z49`QIH7b0gS1)KTIKKMRM_7?ek%H~Ezqc*=y)aZN0CSrY58FMJ8d83hLn7< zed)i{|4Ql`{A4U9F|p}=oW>^F9Sra;oSNw5Z)4YFS6snTa0Ruj_}YUd+`?vX$Zai> z60?!Vy-aXNtqm^-xiTpWi}((4hgDU0lb=5_0#r4dcPON!kR|0(R=8YY)(_Y;Z!#(t zOtp;Cy066j15F5n>6-TV>*Ut+ZVR)C=k6^rqM-}FR>_SPglQ77hsY5Z?@EIne&R5^ z6EBO29yBK&_BBvk8S12Dcy2^PMaXpO`FZz)$v1MZ#&1b$_3*aQEz*bjvChXWnKj&p zSMdsS+x>f`6{|s(#%s6n>J-BXf090--%7n}$301!;7^l^G%kMo`KM$~I>C2$4}Jyc C{2m$r delta 401 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 literal 191532 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/_modules/llepe/llepe.html b/docs/build/html/_modules/llepe/llepe.html index 06aabe6..bf78f9b 100644 --- a/docs/build/html/_modules/llepe/llepe.html +++ b/docs/build/html/_modules/llepe/llepe.html @@ -159,7 +159,6 @@ from scipy.optimize import minimize # noinspection PyPep8Naming import xml.etree.ElementTree as ET -import seaborn as sns import matplotlib.pyplot as plt import shutil import copy @@ -169,9 +168,6 @@ import pkg_resources from .utils import set_size -sns.set() -sns.set(font_scale=1.6) -
[docs]class LLEPE: r""" @@ -285,7 +281,8 @@ :param extracted_species_list: (list) names of extracted species elements. If ``None``, extracted_species_list will be extracted_species_ion_names - without '+' i.e. 'Nd+++'->'Nd' + without '+' i.e. 'Nd+++'->'Nd' + :param aq_solvent_rho: (float) density of solvent (g/L) If ``None``, molar volume/molecular weight is used from xml @@ -413,12 +410,22 @@ 'function', 'kwargs', and 'independent_params. 'function' is a function of the form - ``function(independent_param__value_list, **kwargs)`` + + ``function(independent_param__value_list, custom_objects_dict, + **kwargs)`` + 'kwargs' are the extra arguments to pass to function + 'independent_params' is a list of parameter names in opt_dict that the dependent_param is a function of. + 'custom_objects_dict' is for accessing the estimator's internal + custom_objects_dict and must be included in the arguments, even if the + custom_objects_dict is not set and is None. + See example code for usage. + :param custom_objects_dict: (dict) dictionary containing custom objects + format: {<object_name_string>: <object>,...} """ def __init__(self, @@ -436,12 +443,13 @@ diluant_rho=None, opt_dict=None, objective_function='Log-MSE', - optimizer='SLSQP', + optimizer='scipy_minimize', temp_xml_file_path=None, dependant_params_dict=None, + custom_objects_dict=None ): self._built_in_obj_list = ['Log-MSE'] - self._built_in_opt_list = ['SLSQP'] + self._built_in_opt_list = ['scipy_minimize'] self._exp_data = exp_data self._phases_xml_filename = phases_xml_filename self._opt_dict = opt_dict @@ -463,6 +471,7 @@ temp_xml_file_path = r'{0}/temp.xml'.format(os.getenv('TEMP')) self._temp_xml_file_path = temp_xml_file_path self._dependant_params_dict = dependant_params_dict + self._custom_objects_dict = custom_objects_dict # Try and except for adding package data to path. # This only works for sdist, not bdist # If bdist is needed, research "manifest.in" python setup files @@ -474,7 +483,7 @@ except FileNotFoundError: self._phases_xml_filename = \ pkg_resources.resource_filename('llepe', - r'..\data\xmls\{0}'.format( + '../data/xmls/{0}'.format( phases_xml_filename)) shutil.copyfile(self._phases_xml_filename, self._temp_xml_file_path) @@ -485,7 +494,7 @@ self._exp_df = pd.read_csv(self._exp_data) except FileNotFoundError: self._exp_data = pkg_resources.resource_filename( - 'llepe', r'..\data\csvs\{0}'.format(self._exp_data)) + 'llepe', '../data/csvs/{0}'.format(self._exp_data)) self._exp_df = pd.read_csv(self._exp_data) else: self._exp_df = self._exp_data.copy() @@ -600,7 +609,7 @@ self._exp_df = pd.read_csv(self._exp_data) except FileNotFoundError: self._exp_data = pkg_resources.resource_filename( - 'llepe', r'..\data\csvs\{0}'.format(self._exp_data)) + 'llepe', '../data/csvs/{0}'.format(self._exp_data)) self._exp_df = pd.read_csv(self._exp_data) else: self._exp_df = exp_data.copy() @@ -654,7 +663,7 @@ except FileNotFoundError: self._phases_xml_filename = \ pkg_resources.resource_filename('llepe', - r'..\data\xmls\{0}'.format( + '../data/xmls/{0}'.format( phases_xml_filename)) shutil.copyfile(self._phases_xml_filename, self._temp_xml_file_path) @@ -998,7 +1007,7 @@ "optimizer must be a function " "with at least 2 arguments: " "f(objective_func,x_guess, kwargs)") - if optimizer == 'SLSQP': + if optimizer == 'scipy_minimize': optimizer = self.scipy_minimize self._optimizer = optimizer return None
@@ -1037,6 +1046,7 @@
[docs] def get_dependant_params_dict(self): """ Returns the dependant_params_dict + :return: dependant_params_dict: (dict) dictionary containing information about parameters dependant on opt_dict """ @@ -1045,12 +1055,32 @@
[docs] def set_dependant_params_dict(self, dependant_params_dict): """ Sets the dependant_params_dict + :param dependant_params_dict: (dict) dictionary containing information - about parameters dependant on opt_dict + about parameters dependant on opt_dict """ self._dependant_params_dict = dependant_params_dict return None
+
[docs] def get_custom_objects_dict(self): + """ + Returns the custom_objects_dict + + :return: custom_objects_dict: (dict) dictionary containing + information about custom objects from user + """ + return self._custom_objects_dict
+ +
[docs] def set_custom_objects_dict(self, custom_objects_dict): + """ + Sets the custom_objects_dict + + :param custom_objects_dict: (dict) dictionary containing information + about about custom objects from user + """ + self._custom_objects_dict = custom_objects_dict + return None
+
[docs] def update_predicted_dict(self, phases_xml_filename=None, phase_names=None): @@ -1143,6 +1173,7 @@ objective_function = self._objective_function opt_dict = copy.deepcopy(self._opt_dict) dep_dict = copy.deepcopy(self._dependant_params_dict) + custom_objects_dict = copy.deepcopy(self._custom_objects_dict) x = np.array(x) if len(x.shape) == 1: @@ -1158,6 +1189,8 @@ x[ind]): # if nan, do not update xml with nan opt_dict[param_name]['input_value'] *= x[ind] + if custom_objects_dict is not None: + self.update_custom_objects_dict(opt_dict) self.update_xml(opt_dict, temp_xml_file_path, dependant_params_dict=dep_dict) @@ -1228,8 +1261,8 @@ dependant_params_dict=None): """updates xml file with info_dict - :param info_dict: (dict) info in {species_names:{thermo_prop:val}} - Requires an identical structure to opt_dict + :param info_dict: (dict) Requires an identical structure to opt_dict + Ignores items with keys containing "custom_object_name" :param phases_xml_filename: (str) xml filename if editing other xml If ``None``, the current xml will be modified and the internal Cantera phases will be refreshed to the new values. @@ -1239,7 +1272,8 @@ if phases_xml_filename is None: phases_xml_filename = self._phases_xml_filename new_dict = copy.deepcopy(info_dict) - dep_dict = dependant_params_dict + dep_dict = copy.deepcopy(dependant_params_dict) + custom_objects_dict = copy.deepcopy(self._custom_objects_dict) if dep_dict is not None: new_dict.update(dep_dict) @@ -1257,10 +1291,12 @@ ind_vals = [new_dict[ind_param_name]['input_value'] for ind_param_name in ind_param_names] if mod_kwargs is None: - new_dict[param_name]['input_value'] = mod_func(ind_vals) - else: new_dict[param_name]['input_value'] = \ mod_func(ind_vals, + custom_objects_dict) + else: + new_dict[param_name]['input_value'] = \ + mod_func(ind_vals, custom_objects_dict, **mod_kwargs) tree = ET.parse(phases_xml_filename) root = tree.getroot() @@ -1268,6 +1304,8 @@ for key in list(new_dict.keys()): d = new_dict[key] now = datetime.now() + if 'custom_object_name' in list(d.keys()): + continue if (d['upper_attrib_name'] is not None and d['lower_attrib_name'] is not None): for child1 in root.iter(d['upper_element_name']): @@ -1324,6 +1362,31 @@ self.set_phases(self._phases_xml_filename, self._phase_names) return None
+
[docs] def update_custom_objects_dict(self, info_dict): + """ + updates internal custom_objects_dict with info_dict + + :param info_dict: Requires an identical structure to opt_dict + Ignores items with keys containing "custom_object_name" + + :return: None + """ + custom_objects_dict = copy.deepcopy(self._custom_objects_dict) + for key in list(info_dict.keys()): + d = info_dict[key] + if 'upper_element_name' in list(d.keys()): + continue + func = d['function'] + value = d['input_value'] + kwargs = d['kwargs'] + object_name = d['custom_object_name'] + new_object = func(custom_objects_dict[object_name], + value, + **kwargs) + custom_objects_dict[object_name] = new_object + self._custom_objects_dict = custom_objects_dict + return None
+
[docs] def parity_plot(self, compared_value=None, c_data=None, @@ -1388,6 +1451,11 @@ 'meas': meas, c_data: exp_df[c_data].values, 'feed_molarity': feed_molarity}) + elif c_data is not None: + combined_df = pd.DataFrame({'pred': pred, + 'meas': meas, + 'c_data': c_data, + 'feed_molarity': feed_molarity}) else: combined_df = pd.DataFrame({'pred': pred, 'meas': meas, @@ -1420,35 +1488,36 @@ default_title = '{0} complex eq. conc. (mol/L)'.format( compared_species) fig, ax = plt.subplots() + if isinstance(data_labels, list): unique_labels = list(set(data_labels)) for label in unique_labels: filtered_data = combined_df[combined_df['label'] == label] filtered_meas = filtered_data['meas'] filtered_pred = filtered_data['pred'] - ax.scatter(filtered_meas, filtered_pred, label=label) + if len(filtered_pred) != 0: + ax.scatter(filtered_meas, filtered_pred, label=label) if legend: ax.legend(loc='best') elif c_data is not None: if isinstance(c_data, str): c_data = combined_df[c_data].values + else: + c_data = combined_df['c_data'].values p1 = ax.scatter(meas, pred, c=c_data, alpha=1, cmap='viridis') c_bar = fig.colorbar(p1, format='%.2f') if c_label is not None: c_bar.set_label(c_label, rotation=270, labelpad=20) else: - sns.scatterplot(meas, pred, color="r", - legend=False) + ax.scatter(meas, pred, c="r", label="") + ax.plot(min_max_data, min_max_data, color="b", label="") if print_r_squared: ax.text(min_max_data[0], min_max_data[1] * 0.9, '$R^2$={0:.2f}'.format(self.r_squared(compared_value))) - # plt.legend(loc='lower right') - # else: - # plt.legend() ax.set(xlabel='Measured', ylabel='Predicted') if plot_title is None: diff --git a/docs/build/html/_sources/guide/install.rst.txt b/docs/build/html/_sources/guide/install.rst.txt index 8486537..ce1a1f9 100644 --- a/docs/build/html/_sources/guide/install.rst.txt +++ b/docs/build/html/_sources/guide/install.rst.txt @@ -8,7 +8,7 @@ Installation Prerequisites ============= -REEPS requires python3 (>=3.5) with the development headers. +LLEPE requires python3 (>=3.5) with the development headers. Stable Release diff --git a/docs/build/html/_sources/guide/quickstart.rst.txt b/docs/build/html/_sources/guide/quickstart.rst.txt index 2ccdbd8..8e2c250 100644 --- a/docs/build/html/_sources/guide/quickstart.rst.txt +++ b/docs/build/html/_sources/guide/quickstart.rst.txt @@ -9,28 +9,41 @@ Here is a quick example of how to fit an xml thermodynamic model to experimental This code fits Nd standard enthalpy in the "twophase.xml" cantera file to the experimental data in "Nd_exp_data.csv". +This code requires that you copy and paste the "elementz.xml" file in the llepe's data folder into +the Cantera's data folder located in your environments site-packages folder. + The code then produces a parity plot of the measured and predicted concentrations of Nd 3+ in the aqueous phase. .. code-block:: python - from reeps import REEPS + from llepe import LLEPE + opt_dict = {'Nd(H(A)2)3(org)_h0': {'upper_element_name': 'species', + 'upper_attrib_name': 'name', + 'upper_attrib_value': 'Nd(H(A)2)3(org)', + 'lower_element_name': 'h0', + 'lower_attrib_name': None, + 'lower_attrib_value': None, + 'input_format': '{0}', + 'input_value': -4.7e6}} - searcher_parameters = {'exp_csv_filename': 'Nd_exp_data.csv', + searcher_parameters = {'exp_data': 'Nd_exp_data.csv', 'phases_xml_filename': 'twophase.xml', - 'opt_dict': {'Nd(H(A)2)3(org)': {'h0': -4.7e6}}, + 'opt_dict': opt_dict, 'phase_names': ['HCl_electrolyte', 'PC88A_liquid'], 'aq_solvent_name': 'H2O(L)', 'extractant_name': '(HA)2(org)', 'diluant_name': 'dodecane', 'complex_names': ['Nd(H(A)2)3(org)'], - 'rare_earth_ion_names': ['Nd+++'], + 'extracted_species_ion_names': ['Nd+++'], 'aq_solvent_rho': 1000.0, 'extractant_rho': 960.0, 'diluant_rho': 750.0} - searcher = REEPS(**searcher_parameters) + searcher = LLEPE(**searcher_parameters) est_enthalpy = searcher.fit() searcher.update_xml(est_enthalpy) searcher.parity_plot(print_r_squared=True) The code should return something like this + +.. figure:: ../_static/img/quick_start_output.png \ No newline at end of file diff --git a/docs/build/html/_static/img/quick_start_output.png b/docs/build/html/_static/img/quick_start_output.png new file mode 100644 index 0000000000000000000000000000000000000000..eefb412f68aeccb071fc529fba68e9664a8560ff GIT binary patch literal 32464 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index d1e1f7b..03c3e8d 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -182,6 +182,8 @@
  • get_aq_solvent_rho() (llepe.LLEPE method)
  • get_complex_names() (llepe.LLEPE method) +
  • +
  • get_custom_objects_dict() (llepe.LLEPE method)
  • get_dependant_params_dict() (llepe.LLEPE method)
  • @@ -192,11 +194,11 @@
  • get_exp_df() (llepe.LLEPE method)
  • get_extractant_name() (llepe.LLEPE method) -
  • -
  • get_extractant_rho() (llepe.LLEPE method)
    • +
    • set_extractant_name() (llepe.LLEPE method) +
    • set_extractant_rho() (llepe.LLEPE method)
    • set_extracted_species_ion_names() (llepe.LLEPE method) @@ -317,10 +321,12 @@

      U

      diff --git a/docs/build/html/guide/install.html b/docs/build/html/guide/install.html index 0eed037..f28dddc 100644 --- a/docs/build/html/guide/install.html +++ b/docs/build/html/guide/install.html @@ -166,7 +166,7 @@

      Installation

      Prerequisites

      -

      REEPS requires python3 (>=3.5) with the development headers.

      +

      LLEPE requires python3 (>=3.5) with the development headers.

      Stable Release

      diff --git a/docs/build/html/guide/quickstart.html b/docs/build/html/guide/quickstart.html index ed14293..948381e 100644 --- a/docs/build/html/guide/quickstart.html +++ b/docs/build/html/guide/quickstart.html @@ -160,29 +160,42 @@

      Here is a quick example of how to fit an xml thermodynamic model to experimental data.

      This code fits Nd standard enthalpy in the "twophase.xml" cantera file to the experimental data in "Nd_exp_data.csv".

      +

      This code requires that you copy and paste the "elementz.xml" file in the llepe's data folder into +the Cantera's data folder located in your environments site-packages folder.

      The code then produces a parity plot of the measured and predicted concentrations of Nd 3+ in the aqueous phase.

      -
      from reeps import REEPS
      -
      -searcher_parameters = {'exp_csv_filename': 'Nd_exp_data.csv',
      +
      from llepe import LLEPE
      +opt_dict = {'Nd(H(A)2)3(org)_h0': {'upper_element_name': 'species',
      +                      'upper_attrib_name': 'name',
      +                      'upper_attrib_value': 'Nd(H(A)2)3(org)',
      +                      'lower_element_name': 'h0',
      +                      'lower_attrib_name': None,
      +                      'lower_attrib_value': None,
      +                      'input_format': '{0}',
      +                      'input_value': -4.7e6}}
      +
      +searcher_parameters = {'exp_data': 'Nd_exp_data.csv',
                                                  'phases_xml_filename': 'twophase.xml',
      -                                           'opt_dict': {'Nd(H(A)2)3(org)': {'h0': -4.7e6}},
      +                                           'opt_dict': opt_dict,
                                                  'phase_names': ['HCl_electrolyte', 'PC88A_liquid'],
                                                  'aq_solvent_name': 'H2O(L)',
                                                  'extractant_name': '(HA)2(org)',
                                                  'diluant_name': 'dodecane',
                                                  'complex_names': ['Nd(H(A)2)3(org)'],
      -                                           'rare_earth_ion_names': ['Nd+++'],
      +                                           'extracted_species_ion_names': ['Nd+++'],
                                                  'aq_solvent_rho': 1000.0,
                                                  'extractant_rho': 960.0,
                                                  'diluant_rho': 750.0}
      -searcher = REEPS(**searcher_parameters)
      +searcher = LLEPE(**searcher_parameters)
       est_enthalpy = searcher.fit()
       searcher.update_xml(est_enthalpy)
       searcher.parity_plot(print_r_squared=True)
       

      The code should return something like this

      +
      +../_images/quick_start_output.png +
      diff --git a/docs/build/html/modules/reeps.html b/docs/build/html/modules/reeps.html index 7e84d0e..9275abb 100644 --- a/docs/build/html/modules/reeps.html +++ b/docs/build/html/modules/reeps.html @@ -163,7 +163,7 @@

      Parameters

      -class llepe.LLEPE(exp_data, phases_xml_filename, phase_names, aq_solvent_name, extractant_name, diluant_name, complex_names, extracted_species_ion_names, extracted_species_list=None, aq_solvent_rho=None, extractant_rho=None, diluant_rho=None, opt_dict=None, objective_function='Log-MSE', optimizer='SLSQP', temp_xml_file_path=None, dependant_params_dict=None)[source]
      +class llepe.LLEPE(exp_data, phases_xml_filename, phase_names, aq_solvent_name, extractant_name, diluant_name, complex_names, extracted_species_ion_names, extracted_species_list=None, aq_solvent_rho=None, extractant_rho=None, diluant_rho=None, opt_dict=None, objective_function='Log-MSE', optimizer='scipy_minimize', temp_xml_file_path=None, dependant_params_dict=None, custom_objects_dict=None)[source]

      Liquid-Liquid Extraction Parameter estimator

      Note

      @@ -277,10 +277,8 @@ i.e. Nd(H(A)2)3(org), Pr(H(A)2)3(org)

    • extracted_species_ion_names -- (list) names of extracted species ions in xml file

    • extracted_species_list --

      (list) names of extracted species elements.

      -
      -
      If None, extracted_species_list will be extracted_species_ion_names

      without '+' i.e. 'Nd+++'->'Nd'

      -
      -
      +

      If None, extracted_species_list will be extracted_species_ion_names +without '+' i.e. 'Nd+++'->'Nd'

    • aq_solvent_rho --

      (float) density of solvent (g/L)

      If None, molar volume/molecular weight is used from xml

      @@ -402,13 +400,19 @@ xml file

      about parameters dependant on opt_dict. Has a similar structure to opt_dict except instead of input values, it has 3 other fields: 'function', 'kwargs', and 'independent_params.

      -

      'function' is a function of the form -function(independent_param__value_list, **kwargs) -'kwargs' are the extra arguments to pass to function -'independent_params' is a list of parameter names in opt_dict that the +

      'function' is a function of the form

      +

      function(independent_param__value_list, custom_objects_dict, +**kwargs)

      +

      'kwargs' are the extra arguments to pass to function

      +

      'independent_params' is a list of parameter names in opt_dict that the dependent_param is a function of.

      +

      'custom_objects_dict' is for accessing the estimator's internal +custom_objects_dict and must be included in the arguments, even if the +custom_objects_dict is not set and is None.

      See example code for usage.

    • +
    • custom_objects_dict -- (dict) dictionary containing custom objects +format: {<object_name_string>: <object>,...}

    • @@ -469,14 +473,28 @@ optimized opt_dict: Has identical structure as opt_dict

      +
      +
      +get_custom_objects_dict()[source]
      +

      Returns the custom_objects_dict

      +
      +
      Returns
      +

      custom_objects_dict: (dict) dictionary containing +information about custom objects from user

      +
      +
      +
      +
      get_dependant_params_dict()[source]
      -

      Returns the dependant_params_dict -:return: dependant_params_dict: (dict) dictionary containing

      -
      -

      information about parameters dependant on opt_dict

      -
      +

      Returns the dependant_params_dict

      +
      +
      Returns
      +

      dependant_params_dict: (dict) dictionary containing +information about parameters dependant on opt_dict

      +
      +
      @@ -795,12 +813,28 @@ objective_function value

      +
      +
      +set_custom_objects_dict(custom_objects_dict)[source]
      +

      Sets the custom_objects_dict

      +
      +
      Parameters
      +

      custom_objects_dict -- (dict) dictionary containing information +about about custom objects from user

      +
      +
      +
      +
      set_dependant_params_dict(dependant_params_dict)[source]
      -

      Sets the dependant_params_dict -:param dependant_params_dict: (dict) dictionary containing information +

      Sets the dependant_params_dict

      +
      +
      Parameters
      +

      dependant_params_dict -- (dict) dictionary containing information about parameters dependant on opt_dict

      +
      +
      @@ -979,6 +1013,21 @@ xml file.

      +
      +
      +update_custom_objects_dict(info_dict)[source]
      +

      updates internal custom_objects_dict with info_dict

      +
      +
      Parameters
      +

      info_dict -- Requires an identical structure to opt_dict +Ignores items with keys containing "custom_object_name"

      +
      +
      Returns
      +

      None

      +
      +
      +
      +
      update_predicted_dict(phases_xml_filename=None, phase_names=None)[source]
      @@ -1005,8 +1054,8 @@ If None
      Parameters
        -
      • info_dict -- (dict) info in {species_names:{thermo_prop:val}} -Requires an identical structure to opt_dict

      • +
      • info_dict -- (dict) Requires an identical structure to opt_dict +Ignores items with keys containing "custom_object_name"

      • phases_xml_filename -- (str) xml filename if editing other xml If None, the current xml will be modified and the internal Cantera phases will be refreshed to the new values.

      • diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index b30397f04f59f4f2aeecb46da7fbf06d9b6c865d..4f45eecf8c31bb53b660bf673651227bb02a7d7b 100644 GIT binary patch delta 599 zcmV-d0;v741;GW7b$`ol+b|Hk>nm8aKu>ZS^p?9(6mS6pIrK;{;#y+LSGcRd?$?(R z?OL`|G$M7fMD7e{AL77Tg9qjh55~z}1N*|#1KtGykE@Q1{+O2PPpq!=5Wm`N*4y=f zYP3LP_iur&qE|ab<2gW`lkbDHKwP|Vbov!6aVrcIQiRUsFn=`8cn$ke0cH{ONX~Hg z^b8Flm#WDshK#RPikOHOL6`y}rF&6O(i1+jp0M{^?(&cnL_;OoCluN8M+T4_Jv0iC zD`)eEpWBGH1 z6By6;M)RH05Pv^S>gKX&*Kz~Ga(wAU)WabJH@gn;Qc!f@Uc1?83>f}3mOzl0iw!5$ zbAi|>f8a*hvF)?b<+lBJK$pOfCcV= zi?{<8xC55B17^DeE^@c`K3=M@#7BN)Dl@DjNlfWI$bS~BvJ&oHuqW(=NgoDk!S80P2*eCbv5E3O8*#h&*P{2LG{+p@=D31oFv zc!W*F{RAEFXJF*mScT8XVi0~{HKPvLMn!U2rysUX-`X(U+u;fYisQD%ICz3wsHVxC zYjKlaEKuA>KDq2k8F5UnD delta 582 zcmV-M0=fOc1+WE>b$?B7+b|5h`&Ve#fSsJS*sb?q7?1%0dgxJ5Eyh--uZVP!?AK4W zlEq0ntd??$Oz}~VkMc93HF#it|7e`-HL!b@7I+r`JT5vi`g01^Uszq~A%C%2E!WEd z)o6jp9^M08WG^;~#&du=CqD*hfw*2DwyCmK;*)UKD6?#AgZtJJ01N4@p5ZRKk5yBAfnL0VGEcjRNG#+5D+qm(vQf z#;PngPUo?3FR##$dIP@cZCp5;RmD^GrHoi*)NcqmVBZPMYupDI7)SYYi4z#lcSiG# z(hy%w>gHC_u7BkQgyp#HMdZUF1UFlUXbOt<+-ov$_$$3k1jGF!)NTgP%+$6{N@+uAzb%+|5M*6}8`js>=kCAN;) zwvIP3<=#g(gu?H`p-3e15o8NiSqVFaBp4z=T8#3I<^f6?8=0AhoeBRKK=3;oB9LJ*

        kfJ3jXt^y8j6NpBkfn$BBrD(FFM+&Q#8@f?vuw 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 literal 0 HcmV?d00001 diff --git a/docs/source/guide/install.rst b/docs/source/guide/install.rst index 8486537..ce1a1f9 100644 --- a/docs/source/guide/install.rst +++ b/docs/source/guide/install.rst @@ -8,7 +8,7 @@ Installation Prerequisites ============= -REEPS requires python3 (>=3.5) with the development headers. +LLEPE requires python3 (>=3.5) with the development headers. Stable Release diff --git a/docs/source/guide/quickstart.rst b/docs/source/guide/quickstart.rst index 2ccdbd8..8e2c250 100644 --- a/docs/source/guide/quickstart.rst +++ b/docs/source/guide/quickstart.rst @@ -9,28 +9,41 @@ Here is a quick example of how to fit an xml thermodynamic model to experimental This code fits Nd standard enthalpy in the "twophase.xml" cantera file to the experimental data in "Nd_exp_data.csv". +This code requires that you copy and paste the "elementz.xml" file in the llepe's data folder into +the Cantera's data folder located in your environments site-packages folder. + The code then produces a parity plot of the measured and predicted concentrations of Nd 3+ in the aqueous phase. .. code-block:: python - from reeps import REEPS + from llepe import LLEPE + opt_dict = {'Nd(H(A)2)3(org)_h0': {'upper_element_name': 'species', + 'upper_attrib_name': 'name', + 'upper_attrib_value': 'Nd(H(A)2)3(org)', + 'lower_element_name': 'h0', + 'lower_attrib_name': None, + 'lower_attrib_value': None, + 'input_format': '{0}', + 'input_value': -4.7e6}} - searcher_parameters = {'exp_csv_filename': 'Nd_exp_data.csv', + searcher_parameters = {'exp_data': 'Nd_exp_data.csv', 'phases_xml_filename': 'twophase.xml', - 'opt_dict': {'Nd(H(A)2)3(org)': {'h0': -4.7e6}}, + 'opt_dict': opt_dict, 'phase_names': ['HCl_electrolyte', 'PC88A_liquid'], 'aq_solvent_name': 'H2O(L)', 'extractant_name': '(HA)2(org)', 'diluant_name': 'dodecane', 'complex_names': ['Nd(H(A)2)3(org)'], - 'rare_earth_ion_names': ['Nd+++'], + 'extracted_species_ion_names': ['Nd+++'], 'aq_solvent_rho': 1000.0, 'extractant_rho': 960.0, 'diluant_rho': 750.0} - searcher = REEPS(**searcher_parameters) + searcher = LLEPE(**searcher_parameters) est_enthalpy = searcher.fit() searcher.update_xml(est_enthalpy) searcher.parity_plot(print_r_squared=True) The code should return something like this + +.. figure:: ../_static/img/quick_start_output.png \ No newline at end of file diff --git a/llepe/llepe.py b/llepe/llepe.py index ba5e628..7a12f67 100644 --- a/llepe/llepe.py +++ b/llepe/llepe.py @@ -127,7 +127,8 @@ class LLEPE: :param extracted_species_list: (list) names of extracted species elements. If ``None``, extracted_species_list will be extracted_species_ion_names - without '+' i.e. 'Nd+++'->'Nd' + without '+' i.e. 'Nd+++'->'Nd' + :param aq_solvent_rho: (float) density of solvent (g/L) If ``None``, molar volume/molecular weight is used from xml @@ -255,11 +256,19 @@ class LLEPE: 'function', 'kwargs', and 'independent_params. 'function' is a function of the form - ``function(independent_param__value_list, **kwargs)`` + + ``function(independent_param__value_list, custom_objects_dict, + **kwargs)`` + 'kwargs' are the extra arguments to pass to function + 'independent_params' is a list of parameter names in opt_dict that the dependent_param is a function of. + 'custom_objects_dict' is for accessing the estimator's internal + custom_objects_dict and must be included in the arguments, even if the + custom_objects_dict is not set and is None. + See example code for usage. :param custom_objects_dict: (dict) dictionary containing custom objects format: {: ,...} @@ -883,6 +892,7 @@ class LLEPE: def get_dependant_params_dict(self): """ Returns the dependant_params_dict + :return: dependant_params_dict: (dict) dictionary containing information about parameters dependant on opt_dict """ @@ -891,8 +901,9 @@ class LLEPE: def set_dependant_params_dict(self, dependant_params_dict): """ Sets the dependant_params_dict + :param dependant_params_dict: (dict) dictionary containing information - about parameters dependant on opt_dict + about parameters dependant on opt_dict """ self._dependant_params_dict = dependant_params_dict return None @@ -900,6 +911,7 @@ class LLEPE: def get_custom_objects_dict(self): """ Returns the custom_objects_dict + :return: custom_objects_dict: (dict) dictionary containing information about custom objects from user """ @@ -908,8 +920,9 @@ class LLEPE: def set_custom_objects_dict(self, custom_objects_dict): """ Sets the custom_objects_dict + :param custom_objects_dict: (dict) dictionary containing information - about about custom objects from user + about about custom objects from user """ self._custom_objects_dict = custom_objects_dict return None @@ -1198,9 +1211,11 @@ class LLEPE: def update_custom_objects_dict(self, info_dict): """ updates internal custom_objects_dict with info_dict + :param info_dict: Requires an identical structure to opt_dict Ignores items with keys containing "custom_object_name" - :return: None. + + :return: None """ custom_objects_dict = copy.deepcopy(self._custom_objects_dict) for key in list(info_dict.keys()):