mirror of https://github.com/ANL-CEEESA/LLEPE
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1735 lines
208 KiB
1735 lines
208 KiB
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="python" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="python" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>reeps.reeps — LLEPE 1.0.0 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
|
|
|
|
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
|
<script src="../../_static/jquery.js"></script>
|
|
<script src="../../_static/underscore.js"></script>
|
|
<script src="../../_static/doctools.js"></script>
|
|
<script src="../../_static/language_data.js"></script>
|
|
|
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
<link rel="index" title="Index" href="../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../search.html" />
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav">
|
|
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search" >
|
|
|
|
|
|
|
|
<a href="../../index.html" class="icon icon-home"> LLEPE
|
|
|
|
|
|
|
|
|
|
<img src="../../_static/logo.png" class="logo" alt="Logo"/>
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class="caption"><span class="caption-text">User Guide</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../guide/install.html">Installation</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../guide/quickstart.html">Getting Started</a></li>
|
|
</ul>
|
|
<p class="caption"><span class="caption-text">Searchers</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../modules/reeps.html">LLEPE</a></li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" aria-label="top navigation">
|
|
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="../../index.html">LLEPE</a>
|
|
|
|
</nav>
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
|
|
<div class="rst-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
|
|
<ul class="wy-breadcrumbs">
|
|
|
|
<li><a href="../../index.html">Docs</a> »</li>
|
|
|
|
<li><a href="../index.html">Module code</a> »</li>
|
|
|
|
<li>reeps.reeps</li>
|
|
|
|
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<h1>Source code for reeps.reeps</h1><div class="highlight"><pre>
|
|
<span></span><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
|
|
<span class="kn">import</span> <span class="nn">cantera</span> <span class="k">as</span> <span class="nn">ct</span>
|
|
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="kn">import</span> <span class="n">minimize</span>
|
|
<span class="c1"># noinspection PyPep8Naming</span>
|
|
<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>
|
|
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span>
|
|
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
|
<span class="kn">import</span> <span class="nn">copy</span>
|
|
<span class="kn">from</span> <span class="nn">inspect</span> <span class="kn">import</span> <span class="n">signature</span>
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
<span class="kn">import</span> <span class="nn">pkg_resources</span>
|
|
<span class="kn">from</span> <span class="nn">.utils</span> <span class="kn">import</span> <span class="n">set_size</span>
|
|
|
|
<span class="n">sns</span><span class="o">.</span><span class="n">set</span><span class="p">()</span>
|
|
<span class="n">sns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">font_scale</span><span class="o">=</span><span class="mf">1.6</span><span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="REEPS"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS">[docs]</a><span class="k">class</span> <span class="nc">REEPS</span><span class="p">:</span>
|
|
<span class="sa">r</span><span class="sd">"""</span>
|
|
<span class="sd"> Rare earth elements (REE or RE) Takes in experimental data</span>
|
|
<span class="sd"> Returns parameters for GEM</span>
|
|
|
|
<span class="sd"> .. note::</span>
|
|
|
|
<span class="sd"> The order in which the REEs appear in the csv file must be the same</span>
|
|
<span class="sd"> order as they appear in the xml, complex_names and</span>
|
|
<span class="sd"> rare_earth_ion_names.</span>
|
|
|
|
<span class="sd"> For example, say in exp_csv_filename's csv, RE_1 is Nd RE_2 is Pr,</span>
|
|
<span class="sd"> and</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> aq_solvent_name = 'H2O(L)'</span>
|
|
<span class="sd"> extractant_name = '(HA)2(org)'</span>
|
|
<span class="sd"> diluent_name = 'dodecane'</span>
|
|
|
|
<span class="sd"> Then:</span>
|
|
|
|
<span class="sd"> The csvs column ordering must be:</span>
|
|
|
|
<span class="sd"> [h_i, h_eq, z_i, z_eq, Nd_aq_i, Nd_aq_eq, Nd_d_eq,</span>
|
|
<span class="sd"> Pr_aq_i, Pr_aq_eq, Pr_d_eq]</span>
|
|
|
|
<span class="sd"> The aqueous speciesArray must be</span>
|
|
<span class="sd"> "H2O(L) H+ OH- Cl- Nd+++ Pr+++"</span>
|
|
|
|
<span class="sd"> The organic speciesArray must be</span>
|
|
<span class="sd"> "(HA)2(org) dodecane Nd(H(A)2)3(org) Pr(H(A)2)3(org)"</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> complex_names = ['Nd(H(A)2)3(org)', 'Pr(H(A)2)3(org)']</span>
|
|
<span class="sd"> rare_earth_ion_names = ['Nd+++', 'Pr+++']</span>
|
|
|
|
|
|
<span class="sd"> :param exp_data: (str) csv file name with experimental data</span>
|
|
|
|
<span class="sd"> In the .csv file, the rows are different experiments and</span>
|
|
<span class="sd"> columns are the measured quantities.</span>
|
|
|
|
<span class="sd"> The ordering of the columns needs to be:</span>
|
|
|
|
<span class="sd"> [h_i, h_eq, z_i, z_eq,</span>
|
|
<span class="sd"> {RE_1}_aq_i, {RE_1}_aq_eq, {RE_1}_d_eq,</span>
|
|
<span class="sd"> {RE_2}_aq_i, {RE_2}_aq_eq, {RE_2}_d_eq,...</span>
|
|
<span class="sd"> {RE_N}_aq_i, {RE_N}_aq_eq, {RE_N}_d_eq]</span>
|
|
|
|
<span class="sd"> Naming does not matter, just the order.</span>
|
|
|
|
<span class="sd"> Where {RE_1}-{RE_N} are the rare earth element names of interest</span>
|
|
<span class="sd"> i.e. Nd, Pr, La, etc.</span>
|
|
|
|
<span class="sd"> Below is an explanation of the columns.</span>
|
|
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | Index | Column | Meaning |</span>
|
|
<span class="sd"> +=======+============+==========================================+</span>
|
|
<span class="sd"> | 0 | h_i | Initial Concentration of |</span>
|
|
<span class="sd"> | | | H+ ions (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 1 | h_eq | Equilibrium concentration of |</span>
|
|
<span class="sd"> | | | H+ ions (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 2 | z_i | Initial concentration of |</span>
|
|
<span class="sd"> | | | extractant (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 3 | z_eq | Equilibrium concentration of |</span>
|
|
<span class="sd"> | | | extractant (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 4 | {RE}_aq_i | Initial concentration of RE ions (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 5 | {RE}_aq_eq | Equilibrium concentration of RE ions |</span>
|
|
<span class="sd"> | | | in aqueous phase (mol/L) |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> | 6 | {RE}_d_eq | Equilibrium Ratio between amount of |</span>
|
|
<span class="sd"> | | | RE atoms in organic to aqueous |</span>
|
|
<span class="sd"> +-------+------------+------------------------------------------+</span>
|
|
<span class="sd"> :param phases_xml_filename: (str) xml file with parameters</span>
|
|
<span class="sd"> for equilibrium calc</span>
|
|
|
|
<span class="sd"> Would recommend copying and modifying xmls located in data/xmls</span>
|
|
<span class="sd"> or in Cantera's "data" folder</span>
|
|
|
|
<span class="sd"> speciesArray fields need specific ordering.</span>
|
|
|
|
<span class="sd"> In aqueous phase: aq_solvent_name, H+, OH-, Cl-, RE_1, RE_2, ..., RE_N</span>
|
|
|
|
<span class="sd"> For aqueous phase, RE_1-RE_N represent RE ion names i.e. Nd+++, Pr+++</span>
|
|
|
|
<span class="sd"> In organic phase : extractant_name, diluant_name, RE_1, RE_2, ..., RE_N</span>
|
|
|
|
<span class="sd"> For organic phase, RE_1-RE_N represent RE complex names</span>
|
|
<span class="sd"> i.e. Nd(H(A)2)3(org), Pr(H(A)2)3(org)</span>
|
|
|
|
<span class="sd"> :param phase_names: (list) names of phases in xml file</span>
|
|
|
|
<span class="sd"> Found in the xml file under <phase ... id={phase_name}></span>
|
|
|
|
<span class="sd"> :param aq_solvent_name: (str) name of aqueous solvent in xml file</span>
|
|
<span class="sd"> :param extractant_name: (str) name of extractant in xml file</span>
|
|
<span class="sd"> :param diluant_name: (str) name of diluant in xml file</span>
|
|
<span class="sd"> :param complex_names: (list) names of complexes in xml file.</span>
|
|
|
|
<span class="sd"> Ensure the ordering is correct</span>
|
|
<span class="sd"> :param rare_earth_ion_names: (list) names of rare earth ions in xml file</span>
|
|
|
|
<span class="sd"> Ensure the ordering is correct</span>
|
|
<span class="sd"> :param re_species_list: (list) names of rare earth elements.</span>
|
|
|
|
<span class="sd"> If ``None``, re_species_list will be rare_earth_ion_names without '+'</span>
|
|
<span class="sd"> i.e. 'Nd+++'->'Nd'</span>
|
|
|
|
<span class="sd"> Ensure the ordering is correct</span>
|
|
<span class="sd"> :param aq_solvent_rho: (float) density of solvent (g/L)</span>
|
|
|
|
<span class="sd"> If ``None``, molar volume/molecular weight is used from xml</span>
|
|
<span class="sd"> :param extractant_rho: (float) density of extractant (g/L)</span>
|
|
|
|
<span class="sd"> If ``None``, molar volume/molecular weight is used from xml</span>
|
|
<span class="sd"> :param diluant_rho: (float) density of diluant (g/L)</span>
|
|
|
|
<span class="sd"> If ``None``, molar volume/molecular weight is used from xml</span>
|
|
<span class="sd"> :param opt_dict: (dict) dictionary containing info about which</span>
|
|
<span class="sd"> species parameters are updated to fit model to experimental data</span>
|
|
|
|
<span class="sd"> Should have the format as below. Dictionary keys under user defined</span>
|
|
<span class="sd"> parameter name must be named as shown below ('upper_element_name',</span>
|
|
<span class="sd"> 'upper_attrib_name', etc.). 'attrib_name's and 'attrib_value's can</span>
|
|
<span class="sd"> be None. {} denotes areas for user to fill in.</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> opt_dict = {"{user_defined_name_for_parameter_1}":</span>
|
|
<span class="sd"> {'upper_element_name': {param_upper_element},</span>
|
|
<span class="sd"> 'upper_attrib_name': {param_upper_attrib_name},</span>
|
|
<span class="sd"> 'upper_attrib_value': {param_upper_attrib_value},</span>
|
|
<span class="sd"> 'lower_element_name': {param_lower_element},</span>
|
|
<span class="sd"> 'lower_attrib_name': {param_lower_attrib_name},</span>
|
|
<span class="sd"> 'lower_attrib_value': {param_lower_attrib_value},</span>
|
|
<span class="sd"> 'input_format': {str format to input input_value}</span>
|
|
<span class="sd"> 'input_value': {guess_value}},</span>
|
|
<span class="sd"> "{user_defined_name_for_parameter_2}":</span>
|
|
<span class="sd"> ...</span>
|
|
<span class="sd"> ...</span>
|
|
<span class="sd"> }</span>
|
|
<span class="sd"> :param objective_function: (function or str) function to compute objective</span>
|
|
|
|
<span class="sd"> By default, the objective function is log mean squared error</span>
|
|
<span class="sd"> of distribution ratio</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> np.sum((np.log10(d_pred)-np.log10(d_meas))^2)</span>
|
|
|
|
<span class="sd"> Function needs to take inputs:</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> objective_function(predicted_dict, measured_df, kwargs)</span>
|
|
|
|
<span class="sd"> ``kwargs`` is optional</span>
|
|
|
|
<span class="sd"> Function needs to return: (float) value computed by objective function</span>
|
|
|
|
<span class="sd"> Below is the guide for referencing predicted values</span>
|
|
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
<span class="sd"> | To access | Use |</span>
|
|
<span class="sd"> +===========================+================================+</span>
|
|
<span class="sd"> | hydrogen ion conc in aq | predicted_dict['h_eq'] |</span>
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
<span class="sd"> | extractant conc in org | predicted_dict['z_eq'] |</span>
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
<span class="sd"> | RE ion eq conc in aq | predicted_dict['{RE}_aq_eq'] |</span>
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
<span class="sd"> | RE complex eq conc in org | predicted_dict['{RE}_org_eq'] |</span>
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
<span class="sd"> | RE distribution ratio | predicted_dict['{RE}_d_eq'] |</span>
|
|
<span class="sd"> +---------------------------+--------------------------------+</span>
|
|
|
|
<span class="sd"> Replace "{RE}" with rare earth element i.e. Nd, La, etc.</span>
|
|
|
|
<span class="sd"> For measured values, use the same names, but</span>
|
|
<span class="sd"> replace ``predicted_dict`` with ``measured_df``</span>
|
|
<span class="sd"> :param optimizer: (function or str) function to perform optimization</span>
|
|
|
|
<span class="sd"> .. note::</span>
|
|
|
|
<span class="sd"> The optimized variables are not directly the species parameters,</span>
|
|
<span class="sd"> but instead are first multiplied by the initial guess before</span>
|
|
<span class="sd"> sending becoming the species parameters.</span>
|
|
|
|
<span class="sd"> For example, say</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> opt_dict = {'Nd(H(A)2)3(org):'h0':-4.7e6}</span>
|
|
|
|
<span class="sd"> If the bounds on h0 need to be [-4.7e7,-4.7e5], then</span>
|
|
<span class="sd"> divide the bounds by the guess and get</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> "bounds": [(1e-1, 1e1)]</span>
|
|
|
|
<span class="sd"> By default, the optimizer is scipy's optimize function with</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> default_kwargs= {"method": 'SLSQP',</span>
|
|
<span class="sd"> "bounds": [(1e-1, 1e1)] * len(x_guess),</span>
|
|
<span class="sd"> "constraints": (),</span>
|
|
<span class="sd"> "options": {'disp': True,</span>
|
|
<span class="sd"> 'maxiter': 1000,</span>
|
|
<span class="sd"> 'ftol': 1e-6}}</span>
|
|
|
|
<span class="sd"> Function needs to take inputs:</span>
|
|
<span class="sd"> ``optimizer(objective_function, x_guess, kwargs)``</span>
|
|
|
|
<span class="sd"> ``kwargs`` is optional</span>
|
|
|
|
<span class="sd"> Function needs to return: ((np.ndarray, float)) Optimized parameters,</span>
|
|
<span class="sd"> objective_function value</span>
|
|
|
|
<span class="sd"> :param temp_xml_file_path: (str) path to temporary xml file.</span>
|
|
|
|
<span class="sd"> This xml file is a duplicate of the phases_xml_file name and is</span>
|
|
<span class="sd"> modified during the optimization process to avoid changing the original</span>
|
|
<span class="sd"> xml file</span>
|
|
|
|
<span class="sd"> default is local temp folder</span>
|
|
|
|
<span class="sd"> :param dependant_params_dict: (dict) dictionary containing information</span>
|
|
<span class="sd"> about parameters dependant on opt_dict</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">exp_data</span><span class="p">,</span>
|
|
<span class="n">phases_xml_filename</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="p">,</span>
|
|
<span class="n">aq_solvent_name</span><span class="p">,</span>
|
|
<span class="n">extractant_name</span><span class="p">,</span>
|
|
<span class="n">diluant_name</span><span class="p">,</span>
|
|
<span class="n">complex_names</span><span class="p">,</span>
|
|
<span class="n">rare_earth_ion_names</span><span class="p">,</span>
|
|
<span class="n">re_species_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">aq_solvent_rho</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">extractant_rho</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">diluant_rho</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">opt_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">objective_function</span><span class="o">=</span><span class="s1">'Log-MSE'</span><span class="p">,</span>
|
|
<span class="n">optimizer</span><span class="o">=</span><span class="s1">'SLSQP'</span><span class="p">,</span>
|
|
<span class="n">temp_xml_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">dependant_params_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_built_in_obj_list</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Log-MSE'</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_built_in_opt_list</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SLSQP'</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span> <span class="o">=</span> <span class="n">exp_data</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span> <span class="o">=</span> <span class="n">phases_xml_filename</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span> <span class="o">=</span> <span class="n">opt_dict</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phase_names</span> <span class="o">=</span> <span class="n">phase_names</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_name</span> <span class="o">=</span> <span class="n">aq_solvent_name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_extractant_name</span> <span class="o">=</span> <span class="n">extractant_name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_diluant_name</span> <span class="o">=</span> <span class="n">diluant_name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_complex_names</span> <span class="o">=</span> <span class="n">complex_names</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span> <span class="o">=</span> <span class="n">rare_earth_ion_names</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_rho</span> <span class="o">=</span> <span class="n">aq_solvent_rho</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_extractant_rho</span> <span class="o">=</span> <span class="n">extractant_rho</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_diluant_rho</span> <span class="o">=</span> <span class="n">diluant_rho</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_objective_function</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_objective_function</span><span class="p">(</span><span class="n">objective_function</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_optimizer</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="o">=</span> <span class="n">re_species_list</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_optimizer</span><span class="p">(</span><span class="n">optimizer</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">temp_xml_file_path</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">temp_xml_file_path</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">/temp.xml'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'TEMP'</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span> <span class="o">=</span> <span class="n">temp_xml_file_path</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dependant_params_dict</span> <span class="o">=</span> <span class="n">dependant_params_dict</span>
|
|
<span class="c1"># Try and except for adding package data to path.</span>
|
|
<span class="c1"># This only works for sdist, not bdist</span>
|
|
<span class="c1"># If bdist is needed, research "manifest.in" python setup files</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">import_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span> <span class="o">=</span> \
|
|
<span class="n">pkg_resources</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="s1">'reeps'</span><span class="p">,</span>
|
|
<span class="sa">r</span><span class="s1">'..\data\xmls\</span><span class="si">{0}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">phases_xml_filename</span><span class="p">))</span>
|
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">import_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span> <span class="o">=</span> <span class="n">pkg_resources</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span>
|
|
<span class="s1">'reeps'</span><span class="p">,</span> <span class="sa">r</span><span class="s1">'..\data\csvs\</span><span class="si">{0}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'h_i'</span><span class="p">,</span> <span class="s1">'h_eq'</span><span class="p">,</span> <span class="s1">'z_i'</span><span class="p">,</span> <span class="s1">'z_eq'</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span><span class="p">:</span>
|
|
<span class="n">species</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'+'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">species</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_i'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_org_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span> <span class="o">=</span> \
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span> \
|
|
<span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_in_moles</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_ind</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_org_ind</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_charges</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_in_moles</span><span class="p">(</span><span class="n">feed_vol</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_predicted_dict</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
|
|
<div class="viewcode-block" id="REEPS.scipy_minimize"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.scipy_minimize">[docs]</a> <span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">scipy_minimize</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span> <span class="n">x_guess</span><span class="p">,</span> <span class="n">optimizer_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">""" The default optimizer for REEPS</span>
|
|
|
|
<span class="sd"> Uses scipy.minimize</span>
|
|
|
|
<span class="sd"> By default, options are</span>
|
|
|
|
<span class="sd"> .. code-block:: python</span>
|
|
|
|
<span class="sd"> default_kwargs= {"method": 'SLSQP',</span>
|
|
<span class="sd"> "bounds": [(1e-1, 1e1)]*len(x_guess),</span>
|
|
<span class="sd"> "constraints": (),</span>
|
|
<span class="sd"> "options": {'disp': True,</span>
|
|
<span class="sd"> 'maxiter': 1000,</span>
|
|
<span class="sd"> 'ftol': 1e-6}}</span>
|
|
|
|
<span class="sd"> :param objective: (func) the objective function</span>
|
|
<span class="sd"> :param x_guess: (np.ndarray) the initial guess (always 1)</span>
|
|
<span class="sd"> :param optimizer_kwargs: (dict) dictionary of options for minimize</span>
|
|
<span class="sd"> :returns: ((np.ndarray, float)) Optimized parameters,</span>
|
|
<span class="sd"> objective_function value</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">optimizer_kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">optimizer_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"method"</span><span class="p">:</span> <span class="s1">'SLSQP'</span><span class="p">,</span>
|
|
<span class="s2">"bounds"</span><span class="p">:</span> <span class="p">[(</span><span class="mf">1e-1</span><span class="p">,</span> <span class="mf">1e1</span><span class="p">)]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x_guess</span><span class="p">),</span>
|
|
<span class="s2">"constraints"</span><span class="p">:</span> <span class="p">(),</span>
|
|
<span class="s2">"options"</span><span class="p">:</span> <span class="p">{</span><span class="s1">'disp'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="s1">'maxiter'</span><span class="p">:</span> <span class="mi">1000</span><span class="p">,</span>
|
|
<span class="s1">'ftol'</span><span class="p">:</span> <span class="mf">1e-6</span><span class="p">}}</span>
|
|
<span class="n">res</span> <span class="o">=</span> <span class="n">minimize</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span> <span class="n">x_guess</span><span class="p">,</span> <span class="o">**</span><span class="n">optimizer_kwargs</span><span class="p">)</span>
|
|
<span class="n">est_parameters</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">x</span>
|
|
<span class="k">return</span> <span class="n">est_parameters</span><span class="p">,</span> <span class="n">res</span><span class="o">.</span><span class="n">fun</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.log_mean_squared_error"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.log_mean_squared_error">[docs]</a> <span class="k">def</span> <span class="nf">log_mean_squared_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">predicted_dict</span><span class="p">,</span> <span class="n">meas_df</span><span class="p">):</span>
|
|
<span class="sd">"""Default objective function for REEPS</span>
|
|
|
|
<span class="sd"> Returns the log mean squared error of</span>
|
|
<span class="sd"> predicted distribution ratios (d=n_org/n_aq)</span>
|
|
<span class="sd"> to measured d.</span>
|
|
|
|
<span class="sd"> np.sum((np.log10(d_pred)-np.log10(d_meas))\**2)</span>
|
|
|
|
<span class="sd"> :param predicted_dict: (dict) contains predicted data</span>
|
|
<span class="sd"> :param meas_df: (pd.DataFrame) contains experimental data</span>
|
|
<span class="sd"> :return: (float) log mean squared error between predicted and measured</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">meas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">meas_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">])</span>
|
|
<span class="n">pred</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">])</span>
|
|
<span class="n">log_pred</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">pred</span><span class="p">)</span>
|
|
<span class="n">log_meas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">meas</span><span class="p">)</span>
|
|
<span class="n">log_diff</span> <span class="o">=</span> <span class="p">(</span><span class="n">log_pred</span> <span class="o">-</span> <span class="n">log_meas</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">log_diff</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">obj</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_exp_df"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_exp_df">[docs]</a> <span class="k">def</span> <span class="nf">get_exp_df</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
|
|
<span class="sd">"""Returns the experimental DataFrame</span>
|
|
|
|
<span class="sd"> :return: (pd.DataFrame) Experimental data</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_exp_df"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_exp_df">[docs]</a> <span class="k">def</span> <span class="nf">set_exp_df</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_data</span><span class="p">):</span>
|
|
<span class="sd">"""Changes the experimental DataFrame to input exp_csv_filename data</span>
|
|
<span class="sd"> and renames columns to internal REEPS names</span>
|
|
|
|
|
|
<span class="sd"> h_i, h_eq, z_i, z_eq, {RE}_aq_i, {RE}_aq_eq, {RE}_d</span>
|
|
|
|
<span class="sd"> See class docstring on "exp_csv_filename" for further explanations.</span>
|
|
|
|
<span class="sd"> :param exp_data: (str or pd.DataFrame)</span>
|
|
<span class="sd"> file name/path or DataFrame for experimental data csv</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span> <span class="o">=</span> <span class="n">exp_data</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span> <span class="o">=</span> <span class="n">pkg_resources</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span>
|
|
<span class="s1">'reeps'</span><span class="p">,</span> <span class="sa">r</span><span class="s1">'..\data\csvs\</span><span class="si">{0}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_data</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span> <span class="o">=</span> <span class="n">exp_data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'h_i'</span><span class="p">,</span> <span class="s1">'h_eq'</span><span class="p">,</span> <span class="s1">'z_i'</span><span class="p">,</span> <span class="s1">'z_eq'</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span><span class="p">:</span>
|
|
<span class="n">species</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'+'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">species</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_i'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df_columns</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_org_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span> <span class="o">=</span> \
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span> \
|
|
<span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">species</span><span class="p">)]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_in_moles</span><span class="p">(</span><span class="n">feed_vol</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_phases"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_phases">[docs]</a> <span class="k">def</span> <span class="nf">get_phases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Returns the list of Cantera solutions</span>
|
|
|
|
<span class="sd"> :return: (list) list of Cantera solutions/phases</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_phases"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_phases">[docs]</a> <span class="k">def</span> <span class="nf">set_phases</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">phases_xml_filename</span><span class="p">,</span> <span class="n">phase_names</span><span class="p">):</span>
|
|
<span class="sd">"""Change list of Cantera solutions by inputting</span>
|
|
<span class="sd"> new xml file name and phase names</span>
|
|
|
|
<span class="sd"> Also runs set_in_moles to set feed volume to 1 L</span>
|
|
|
|
<span class="sd"> :param phases_xml_filename: (str) xml file with parameters</span>
|
|
<span class="sd"> for equilibrium calc</span>
|
|
<span class="sd"> :param phase_names: (list) names of phases in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span> <span class="o">=</span> <span class="n">phases_xml_filename</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phase_names</span> <span class="o">=</span> <span class="n">phase_names</span>
|
|
<span class="c1"># Try and except for adding package data to path.</span>
|
|
<span class="c1"># This only works for sdist, not bdist</span>
|
|
<span class="c1"># If bdist is needed, research "manifest.in" python setup files</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">import_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span> <span class="o">=</span> \
|
|
<span class="n">pkg_resources</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="s1">'reeps'</span><span class="p">,</span>
|
|
<span class="sa">r</span><span class="s1">'..\data\xmls\</span><span class="si">{0}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">phases_xml_filename</span><span class="p">))</span>
|
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_phases</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">import_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_in_moles</span><span class="p">(</span><span class="n">feed_vol</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_opt_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_opt_dict">[docs]</a> <span class="k">def</span> <span class="nf">get_opt_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Returns the dictionary containing optimization information</span>
|
|
|
|
<span class="sd"> :return: (dict) dictionary containing info about which</span>
|
|
<span class="sd"> species parameters are updated to fit model to experimental data</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_opt_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_opt_dict">[docs]</a> <span class="k">def</span> <span class="nf">set_opt_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt_dict</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Change the dictionary to input opt_dict.</span>
|
|
|
|
<span class="sd"> opt_dict specifies species parameters to be updated to</span>
|
|
<span class="sd"> fit model to data</span>
|
|
|
|
<span class="sd"> See class docstring on "opt_dict" for more information.</span>
|
|
|
|
<span class="sd"> :param opt_dict: (dict) dictionary containing info about which</span>
|
|
<span class="sd"> species parameters are updated to fit model to experimental data</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span> <span class="o">=</span> <span class="n">opt_dict</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_aq_solvent_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_aq_solvent_name">[docs]</a> <span class="k">def</span> <span class="nf">get_aq_solvent_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">"""Returns aq_solvent_name</span>
|
|
|
|
<span class="sd"> :return: aq_solvent_name: (str) name of aqueous solvent in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_name</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_aq_solvent_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_aq_solvent_name">[docs]</a> <span class="k">def</span> <span class="nf">set_aq_solvent_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aq_solvent_name</span><span class="p">):</span>
|
|
<span class="sd">""" Change aq_solvent_name to input aq_solvent_name</span>
|
|
|
|
<span class="sd"> :param aq_solvent_name: (str) name of aqueous solvent in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_name</span> <span class="o">=</span> <span class="n">aq_solvent_name</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_extractant_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_extractant_name">[docs]</a> <span class="k">def</span> <span class="nf">get_extractant_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">"""Returns extractant name</span>
|
|
|
|
<span class="sd"> :return: extractant_name: (str) name of extractant in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extractant_name</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_extractant_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_extractant_name">[docs]</a> <span class="k">def</span> <span class="nf">set_extractant_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extractant_name</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Change extractant_name to input extractant_name</span>
|
|
<span class="sd"> :param extractant_name: (str) name of extractant in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_extractant_name</span> <span class="o">=</span> <span class="n">extractant_name</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_diluant_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_diluant_name">[docs]</a> <span class="k">def</span> <span class="nf">get_diluant_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">""" Returns diluant name</span>
|
|
<span class="sd"> :return: diluant_name: (str) name of diluant in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_diluant_name</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_diluant_name"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_diluant_name">[docs]</a> <span class="k">def</span> <span class="nf">set_diluant_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">diluant_name</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Change diluant_name to input diluant_name</span>
|
|
|
|
<span class="sd"> :param diluant_name: (str) name of diluant in xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_diluant_name</span> <span class="o">=</span> <span class="n">diluant_name</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_complex_names"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_complex_names">[docs]</a> <span class="k">def</span> <span class="nf">get_complex_names</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
|
<span class="sd">"""Returns list of complex names</span>
|
|
|
|
<span class="sd"> :return: complex_names: (list) names of complexes in xml file.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_complex_names</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_complex_names"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_complex_names">[docs]</a> <span class="k">def</span> <span class="nf">set_complex_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">complex_names</span><span class="p">):</span>
|
|
<span class="sd">"""Change complex names list to input complex_names</span>
|
|
|
|
<span class="sd"> :param complex_names: (list) names of complexes in xml file.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_complex_names</span> <span class="o">=</span> <span class="n">complex_names</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_rare_earth_ion_names"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_rare_earth_ion_names">[docs]</a> <span class="k">def</span> <span class="nf">get_rare_earth_ion_names</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
|
<span class="sd">"""Returns list of rare earth ion names</span>
|
|
|
|
<span class="sd"> :return: rare_earth_ion_names: (list) names of rare earth ions in</span>
|
|
<span class="sd"> xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_rare_earth_ion_names"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_rare_earth_ion_names">[docs]</a> <span class="k">def</span> <span class="nf">set_rare_earth_ion_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rare_earth_ion_names</span><span class="p">):</span>
|
|
<span class="sd">"""Change list of rare earth ion names to input</span>
|
|
<span class="sd"> rare_earth_ion_names</span>
|
|
|
|
<span class="sd"> :param rare_earth_ion_names: (list) names of rare earth ions in</span>
|
|
<span class="sd"> xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span> <span class="o">=</span> <span class="n">rare_earth_ion_names</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_re_species_list"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_re_species_list">[docs]</a> <span class="k">def</span> <span class="nf">get_re_species_list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
|
<span class="sd">"""Returns list of rare earth element names</span>
|
|
|
|
<span class="sd"> :return: re_species_list: (list) names of rare earth elements in</span>
|
|
<span class="sd"> xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_re_species_list"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_re_species_list">[docs]</a> <span class="k">def</span> <span class="nf">set_re_species_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">re_species_list</span><span class="p">):</span>
|
|
<span class="sd">"""Change list of rare earth ion names to input</span>
|
|
<span class="sd"> rare_earth_ion_names</span>
|
|
|
|
<span class="sd"> :param re_species_list: (list) names of rare earth elements in</span>
|
|
<span class="sd"> xml file</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span> <span class="o">=</span> <span class="n">re_species_list</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_aq_solvent_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_aq_solvent_rho">[docs]</a> <span class="k">def</span> <span class="nf">get_aq_solvent_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">"""Returns aqueous solvent density (g/L)</span>
|
|
|
|
<span class="sd"> :return: aq_solvent_rho: (float) density of aqueous solvent</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_rho</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_aq_solvent_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_aq_solvent_rho">[docs]</a> <span class="k">def</span> <span class="nf">set_aq_solvent_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aq_solvent_rho</span><span class="p">):</span>
|
|
<span class="sd">"""Changes aqueous solvent density (g/L) to input aq_solvent_rho</span>
|
|
|
|
<span class="sd"> :param aq_solvent_rho: (float) density of aqueous solvent</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_rho</span> <span class="o">=</span> <span class="n">aq_solvent_rho</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_extractant_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_extractant_rho">[docs]</a> <span class="k">def</span> <span class="nf">get_extractant_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">"""Returns extractant density (g/L)</span>
|
|
|
|
<span class="sd"> :return: extractant_rho: (float) density of extractant</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extractant_rho</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_extractant_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_extractant_rho">[docs]</a> <span class="k">def</span> <span class="nf">set_extractant_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extractant_rho</span><span class="p">):</span>
|
|
<span class="sd">"""Changes extractant density (g/L) to input extractant_rho</span>
|
|
|
|
<span class="sd"> :param extractant_rho: (float) density of extractant</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_extractant_rho</span> <span class="o">=</span> <span class="n">extractant_rho</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_diluant_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_diluant_rho">[docs]</a> <span class="k">def</span> <span class="nf">get_diluant_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="sd">"""Returns diluant density (g/L)</span>
|
|
|
|
<span class="sd"> :return: diluant_rho: (float) density of diluant</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_diluant_rho</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_diluant_rho"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_diluant_rho">[docs]</a> <span class="k">def</span> <span class="nf">set_diluant_rho</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">diluant_rho</span><span class="p">):</span>
|
|
<span class="sd">"""Changes diluant density (g/L) to input diluant_rho</span>
|
|
|
|
<span class="sd"> :param diluant_rho: (float) density of diluant</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_diluant_rho</span> <span class="o">=</span> <span class="n">diluant_rho</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_in_moles"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_in_moles">[docs]</a> <span class="k">def</span> <span class="nf">set_in_moles</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">feed_vol</span><span class="p">):</span>
|
|
<span class="sd">"""Function that initializes mole fractions to input feed_vol</span>
|
|
|
|
<span class="sd"> This function is called at initialization</span>
|
|
|
|
<span class="sd"> Sets in_moles to a pd.DataFrame containing initial mole fractions</span>
|
|
|
|
<span class="sd"> Columns for species and rows for different experiments</span>
|
|
|
|
<span class="sd"> This function also calls update_predicted_dict</span>
|
|
|
|
<span class="sd"> :param feed_vol: (float) feed volume of mixture (L)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">phases_copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">solvent_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_name</span>
|
|
<span class="n">extractant_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extractant_name</span>
|
|
<span class="n">diluant_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_diluant_name</span>
|
|
<span class="n">solvent_rho</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_rho</span>
|
|
<span class="n">extractant_rho</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extractant_rho</span>
|
|
<span class="n">diluant_rho</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_diluant_rho</span>
|
|
<span class="n">re_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span>
|
|
<span class="n">re_species_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span>
|
|
|
|
<span class="n">mixed</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Mixture</span><span class="p">(</span><span class="n">phases_copy</span><span class="p">)</span>
|
|
<span class="n">aq_ind</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">solvent_ind</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">phase</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">phases_copy</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">solvent_name</span> <span class="ow">in</span> <span class="n">phase</span><span class="o">.</span><span class="n">species_names</span><span class="p">:</span>
|
|
<span class="n">aq_ind</span> <span class="o">=</span> <span class="n">ind</span>
|
|
<span class="n">solvent_ind</span> <span class="o">=</span> <span class="n">phase</span><span class="o">.</span><span class="n">species_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">solvent_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">aq_ind</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Solvent "</span><span class="si">{0}</span><span class="s1">" not found </span><span class="se">\</span>
|
|
<span class="s1"> in xml file'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">solvent_name</span><span class="p">))</span>
|
|
|
|
<span class="k">if</span> <span class="n">aq_ind</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">org_ind</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">org_ind</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_ind</span> <span class="o">=</span> <span class="n">aq_ind</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_org_ind</span> <span class="o">=</span> <span class="n">org_ind</span>
|
|
<span class="n">extractant_ind</span> <span class="o">=</span> <span class="n">phases_copy</span><span class="p">[</span><span class="n">org_ind</span><span class="p">]</span><span class="o">.</span><span class="n">species_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span>
|
|
<span class="n">extractant_name</span><span class="p">)</span>
|
|
<span class="n">diluant_ind</span> <span class="o">=</span> <span class="n">phases_copy</span><span class="p">[</span><span class="n">org_ind</span><span class="p">]</span><span class="o">.</span><span class="n">species_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">diluant_name</span><span class="p">)</span>
|
|
|
|
<span class="n">re_ind_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">phases_copy</span><span class="p">[</span><span class="n">aq_ind</span><span class="p">]</span><span class="o">.</span><span class="n">species_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">re_name</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">re_name</span> <span class="ow">in</span> <span class="n">re_names</span><span class="p">]</span>
|
|
<span class="n">re_charges</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">phases_copy</span><span class="p">[</span><span class="n">aq_ind</span><span class="p">]</span><span class="o">.</span><span class="n">species</span><span class="p">(</span><span class="n">re_ind</span><span class="p">)</span><span class="o">.</span><span class="n">charge</span>
|
|
<span class="k">for</span> <span class="n">re_ind</span> <span class="ow">in</span> <span class="n">re_ind_list</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_re_charges</span> <span class="o">=</span> <span class="n">re_charges</span>
|
|
|
|
<span class="n">mix_aq</span> <span class="o">=</span> <span class="n">mixed</span><span class="o">.</span><span class="n">phase</span><span class="p">(</span><span class="n">aq_ind</span><span class="p">)</span>
|
|
<span class="n">mix_org</span> <span class="o">=</span> <span class="n">mixed</span><span class="o">.</span><span class="n">phase</span><span class="p">(</span><span class="n">org_ind</span><span class="p">)</span>
|
|
<span class="n">solvent_mw</span> <span class="o">=</span> <span class="n">mix_aq</span><span class="o">.</span><span class="n">molecular_weights</span><span class="p">[</span><span class="n">solvent_ind</span><span class="p">]</span> <span class="c1"># g/mol</span>
|
|
<span class="n">extractant_mw</span> <span class="o">=</span> <span class="n">mix_org</span><span class="o">.</span><span class="n">molecular_weights</span><span class="p">[</span><span class="n">extractant_ind</span><span class="p">]</span>
|
|
<span class="n">diluant_mw</span> <span class="o">=</span> <span class="n">mix_org</span><span class="o">.</span><span class="n">molecular_weights</span><span class="p">[</span><span class="n">diluant_ind</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">solvent_rho</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">solvent_rho</span> <span class="o">=</span> <span class="n">mix_aq</span><span class="p">(</span><span class="n">aq_ind</span><span class="p">)</span><span class="o">.</span><span class="n">partial_molar_volumes</span><span class="p">[</span>
|
|
<span class="n">solvent_ind</span><span class="p">]</span> <span class="o">/</span> <span class="n">solvent_mw</span> <span class="o">*</span> <span class="mf">1e6</span> <span class="c1"># g/L</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_aq_solvent_rho</span> <span class="o">=</span> <span class="n">solvent_rho</span>
|
|
<span class="k">if</span> <span class="n">extractant_rho</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">extractant_rho</span> <span class="o">=</span> <span class="n">mix_org</span><span class="p">(</span><span class="n">org_ind</span><span class="p">)</span><span class="o">.</span><span class="n">partial_molar_volumes</span><span class="p">[</span>
|
|
<span class="n">extractant_ind</span><span class="p">]</span> <span class="o">/</span> <span class="n">extractant_mw</span> <span class="o">*</span> <span class="mf">1e6</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_extractant_rho</span> <span class="o">=</span> <span class="n">extractant_rho</span>
|
|
<span class="k">if</span> <span class="n">diluant_rho</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">diluant_rho</span> <span class="o">=</span> <span class="n">mix_org</span><span class="p">(</span><span class="n">org_ind</span><span class="p">)</span><span class="o">.</span><span class="n">partial_molar_volumes</span><span class="p">[</span>
|
|
<span class="n">extractant_ind</span><span class="p">]</span> <span class="o">/</span> <span class="n">extractant_mw</span> <span class="o">*</span> <span class="mf">1e6</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_diluant_rho</span> <span class="o">=</span> <span class="n">diluant_rho</span>
|
|
|
|
<span class="n">in_moles_data</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">aq_phase_solvent_moles</span> <span class="o">=</span> <span class="n">feed_vol</span> <span class="o">*</span> <span class="n">solvent_rho</span> <span class="o">/</span> <span class="n">solvent_mw</span>
|
|
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">exp_df</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
|
|
<span class="n">h_plus_moles</span> <span class="o">=</span> <span class="n">feed_vol</span> <span class="o">*</span> <span class="n">row</span><span class="p">[</span><span class="s1">'h_i'</span><span class="p">]</span>
|
|
<span class="n">hydroxide_ions</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">rare_earth_moles</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">feed_vol</span> <span class="o">*</span> <span class="n">row</span><span class="p">[</span>
|
|
<span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_i'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species</span><span class="p">)]</span>
|
|
<span class="k">for</span> <span class="n">re_species</span> <span class="ow">in</span> <span class="n">re_species_list</span><span class="p">])</span>
|
|
<span class="n">re_charge_sum</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">re_charges</span> <span class="o">*</span> <span class="n">rare_earth_moles</span><span class="p">)</span>
|
|
<span class="n">chlorine_moles</span> <span class="o">=</span> <span class="n">re_charge_sum</span> <span class="o">+</span> <span class="n">h_plus_moles</span>
|
|
<span class="n">extractant_moles</span> <span class="o">=</span> <span class="n">feed_vol</span> <span class="o">*</span> <span class="n">row</span><span class="p">[</span><span class="s1">'z_i'</span><span class="p">]</span>
|
|
<span class="n">extractant_vol</span> <span class="o">=</span> <span class="n">extractant_moles</span> <span class="o">*</span> <span class="n">extractant_mw</span> <span class="o">/</span> <span class="n">extractant_rho</span>
|
|
<span class="n">diluant_vol</span> <span class="o">=</span> <span class="n">feed_vol</span> <span class="o">-</span> <span class="n">extractant_vol</span>
|
|
<span class="n">diluant_moles</span> <span class="o">=</span> <span class="n">diluant_vol</span> <span class="o">*</span> <span class="n">diluant_rho</span> <span class="o">/</span> <span class="n">diluant_mw</span>
|
|
<span class="n">complex_moles</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">re_species_list</span><span class="p">))</span>
|
|
|
|
<span class="n">species_moles_aq</span> <span class="o">=</span> <span class="p">[</span><span class="n">aq_phase_solvent_moles</span><span class="p">,</span>
|
|
<span class="n">h_plus_moles</span><span class="p">,</span>
|
|
<span class="n">hydroxide_ions</span><span class="p">,</span>
|
|
<span class="n">chlorine_moles</span><span class="p">]</span>
|
|
<span class="n">species_moles_aq</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">rare_earth_moles</span><span class="p">))</span>
|
|
<span class="n">species_moles_org</span> <span class="o">=</span> <span class="p">[</span><span class="n">extractant_moles</span><span class="p">,</span> <span class="n">diluant_moles</span><span class="p">]</span>
|
|
<span class="n">species_moles_org</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">complex_moles</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">aq_ind</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">species_moles</span> <span class="o">=</span> <span class="n">species_moles_aq</span> <span class="o">+</span> <span class="n">species_moles_org</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">species_moles</span> <span class="o">=</span> <span class="n">species_moles_org</span> <span class="o">+</span> <span class="n">species_moles_aq</span>
|
|
<span class="n">in_moles_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">species_moles</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_in_moles</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
|
|
<span class="n">in_moles_data</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">mixed</span><span class="o">.</span><span class="n">species_names</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_in_moles"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_in_moles">[docs]</a> <span class="k">def</span> <span class="nf">get_in_moles</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
|
|
<span class="sd">"""Returns the in_moles DataFrame which contains the initial mole</span>
|
|
<span class="sd"> fractions of each species for each experiment</span>
|
|
|
|
<span class="sd"> :return: in_moles: (pd.DataFrame) DataFrame with initial mole fractions</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_in_moles</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_objective_function"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_objective_function">[docs]</a> <span class="k">def</span> <span class="nf">set_objective_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">objective_function</span><span class="p">):</span>
|
|
<span class="sd">"""Change objective function to input objective_function.</span>
|
|
|
|
<span class="sd"> See class docstring on "objective_function" for instructions</span>
|
|
|
|
<span class="sd"> :param objective_function: (func) Objective function to quantify</span>
|
|
<span class="sd"> error between model and experimental data</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">objective_function</span><span class="p">)</span> \
|
|
<span class="ow">and</span> <span class="n">objective_function</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_built_in_obj_list</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
|
<span class="s2">"objective_function must be a function "</span>
|
|
<span class="s2">"or in this strings list: </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_built_in_obj_list</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">objective_function</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">signature</span><span class="p">(</span><span class="n">objective_function</span><span class="p">)</span><span class="o">.</span><span class="n">parameters</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
|
<span class="s2">"objective_function must be a function "</span>
|
|
<span class="s2">"with at least 3 arguments:"</span>
|
|
<span class="s2">" f(predicted_dict, experimental_df, kwargs)"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">objective_function</span> <span class="o">==</span> <span class="s1">'Log-MSE'</span><span class="p">:</span>
|
|
<span class="n">objective_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">log_mean_squared_error</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_objective_function</span> <span class="o">=</span> <span class="n">objective_function</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_objective_function"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_objective_function">[docs]</a> <span class="k">def</span> <span class="nf">get_objective_function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Returns objective function</span>
|
|
|
|
<span class="sd"> :return: objective_function: (func) Objective function to quantify</span>
|
|
<span class="sd"> error between model and experimental data</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objective_function</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_optimizer"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_optimizer">[docs]</a> <span class="k">def</span> <span class="nf">set_optimizer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">):</span>
|
|
<span class="sd">"""Change optimizer function to input optimizer.</span>
|
|
|
|
<span class="sd"> See class docstring on "optimizer" for instructions</span>
|
|
|
|
<span class="sd"> :param optimizer: (func) Optimizer function to minimize objective</span>
|
|
<span class="sd"> function</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">optimizer</span><span class="p">)</span> \
|
|
<span class="ow">and</span> <span class="n">optimizer</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_built_in_opt_list</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
|
<span class="s2">"optimizer must be a function "</span>
|
|
<span class="s2">"or in this strings list: </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_built_in_opt_list</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">optimizer</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">signature</span><span class="p">(</span><span class="n">optimizer</span><span class="p">)</span><span class="o">.</span><span class="n">parameters</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
|
<span class="s2">"optimizer must be a function "</span>
|
|
<span class="s2">"with at least 2 arguments: "</span>
|
|
<span class="s2">"f(objective_func,x_guess, kwargs)"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">optimizer</span> <span class="o">==</span> <span class="s1">'SLSQP'</span><span class="p">:</span>
|
|
<span class="n">optimizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scipy_minimize</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_optimizer</span> <span class="o">=</span> <span class="n">optimizer</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_optimizer"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_optimizer">[docs]</a> <span class="k">def</span> <span class="nf">get_optimizer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Returns objective function</span>
|
|
|
|
<span class="sd"> :return: optimizer: (func) Optimizer function to minimize objective</span>
|
|
<span class="sd"> function</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_optimizer</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_temp_xml_file_path"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_temp_xml_file_path">[docs]</a> <span class="k">def</span> <span class="nf">get_temp_xml_file_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Returns path to temporary xml file.</span>
|
|
|
|
<span class="sd"> This xml file is a duplicate of the phases_xml_file name and is</span>
|
|
<span class="sd"> modified during the optimization process to avoid changing the original</span>
|
|
<span class="sd"> xml file.</span>
|
|
|
|
<span class="sd"> :return: temp_xml_file_path: (str) path to temporary xml file.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_temp_xml_file_path"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_temp_xml_file_path">[docs]</a> <span class="k">def</span> <span class="nf">set_temp_xml_file_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">temp_xml_file_path</span><span class="p">):</span>
|
|
<span class="sd">"""Changes temporary xml file path to input temp_xml_file_path.</span>
|
|
|
|
<span class="sd"> This xml file is a duplicate of the phases_xml_file name and is</span>
|
|
<span class="sd"> modified during the optimization process to avoid changing the original</span>
|
|
<span class="sd"> xml file.</span>
|
|
|
|
<span class="sd"> :param temp_xml_file_path: (str) path to temporary xml file.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span> <span class="o">=</span> <span class="n">temp_xml_file_path</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_dependant_params_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_dependant_params_dict">[docs]</a> <span class="k">def</span> <span class="nf">get_dependant_params_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Returns the dependant_params_dict</span>
|
|
<span class="sd"> :return: dependant_params_dict: (dict) dictionary containing</span>
|
|
<span class="sd"> information about parameters dependant on opt_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependant_params_dict</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.set_dependant_params_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.set_dependant_params_dict">[docs]</a> <span class="k">def</span> <span class="nf">set_dependant_params_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dependant_params_dict</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Sets the dependant_params_dict</span>
|
|
<span class="sd"> :param dependant_params_dict: (dict) dictionary containing information</span>
|
|
<span class="sd"> about parameters dependant on opt_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dependant_params_dict</span> <span class="o">=</span> <span class="n">dependant_params_dict</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.update_predicted_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.update_predicted_dict">[docs]</a> <span class="k">def</span> <span class="nf">update_predicted_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">phases_xml_filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">phase_names</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""Function that computes the predicted equilibrium concentrations</span>
|
|
<span class="sd"> the fed phases_xml_filename parameters predicts given the initial</span>
|
|
<span class="sd"> mole fractions set by in_moles()</span>
|
|
|
|
<span class="sd"> :param phases_xml_filename: (str)xml file with parameters</span>
|
|
<span class="sd"> for equilibrium calc. If ``None``, the</span>
|
|
<span class="sd"> current phases_xml_filename is used.</span>
|
|
<span class="sd"> :param phase_names: (list) names of phases in xml file.</span>
|
|
<span class="sd"> If ``None``, the current phases_names is used.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">phases_xml_filename</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">phases_xml_filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span>
|
|
<span class="k">if</span> <span class="n">phase_names</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">phase_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phase_names</span>
|
|
<span class="n">aq_ind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_aq_ind</span>
|
|
<span class="n">org_ind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_org_ind</span>
|
|
<span class="n">complex_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_complex_names</span>
|
|
<span class="n">extractant_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extractant_name</span>
|
|
<span class="n">rare_earth_ion_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rare_earth_ion_names</span>
|
|
<span class="n">in_moles</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_in_moles</span>
|
|
<span class="n">re_species_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span>
|
|
|
|
<span class="n">phases_copy</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">import_phases</span><span class="p">(</span><span class="n">phases_xml_filename</span><span class="p">,</span> <span class="n">phase_names</span><span class="p">)</span>
|
|
<span class="n">mix</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Mixture</span><span class="p">(</span><span class="n">phases_copy</span><span class="p">)</span>
|
|
<span class="n">key_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'h_eq'</span><span class="p">,</span> <span class="s1">'z_eq'</span><span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">re_species</span> <span class="ow">in</span> <span class="n">re_species_list</span><span class="p">:</span>
|
|
<span class="n">key_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species</span><span class="p">))</span>
|
|
<span class="n">key_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_org_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species</span><span class="p">))</span>
|
|
<span class="n">key_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species</span><span class="p">))</span>
|
|
|
|
<span class="n">predicted_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">key_name</span><span class="p">):</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">key_name</span> <span class="ow">in</span> <span class="n">key_names</span><span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">in_moles</span><span class="o">.</span><span class="n">values</span><span class="p">:</span>
|
|
<span class="n">mix</span><span class="o">.</span><span class="n">species_moles</span> <span class="o">=</span> <span class="n">row</span>
|
|
<span class="n">mix</span><span class="o">.</span><span class="n">equilibrate</span><span class="p">(</span><span class="s1">'TP'</span><span class="p">,</span> <span class="n">log_level</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">re_org_array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">mix</span><span class="o">.</span><span class="n">species_moles</span><span class="p">[</span><span class="n">mix</span><span class="o">.</span><span class="n">species_index</span><span class="p">(</span>
|
|
<span class="n">org_ind</span><span class="p">,</span> <span class="n">complex_name</span><span class="p">)]</span> <span class="k">for</span> <span class="n">complex_name</span> <span class="ow">in</span> <span class="n">complex_names</span><span class="p">])</span>
|
|
<span class="n">re_aq_array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">mix</span><span class="o">.</span><span class="n">species_moles</span><span class="p">[</span><span class="n">mix</span><span class="o">.</span><span class="n">species_index</span><span class="p">(</span>
|
|
<span class="n">aq_ind</span><span class="p">,</span> <span class="n">re_ion_name</span><span class="p">)]</span> <span class="k">for</span> <span class="n">re_ion_name</span> <span class="ow">in</span> <span class="n">rare_earth_ion_names</span><span class="p">])</span>
|
|
<span class="n">d_array</span> <span class="o">=</span> <span class="n">re_org_array</span> <span class="o">/</span> <span class="n">re_aq_array</span>
|
|
<span class="n">hydrogen_ions</span> <span class="o">=</span> <span class="n">mix</span><span class="o">.</span><span class="n">species_moles</span><span class="p">[</span><span class="n">mix</span><span class="o">.</span><span class="n">species_index</span><span class="p">(</span><span class="n">aq_ind</span><span class="p">,</span> <span class="s1">'H+'</span><span class="p">)]</span>
|
|
<span class="n">extractant</span> <span class="o">=</span> <span class="n">mix</span><span class="o">.</span><span class="n">species_moles</span><span class="p">[</span><span class="n">mix</span><span class="o">.</span><span class="n">species_index</span><span class="p">(</span>
|
|
<span class="n">org_ind</span><span class="p">,</span> <span class="n">extractant_name</span><span class="p">)]</span>
|
|
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">re_species</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">re_species_list</span><span class="p">):</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">re_species</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">re_aq_array</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_org_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">re_species</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">re_org_array</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'</span><span class="si">{0}</span><span class="s1">_d_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">re_species</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d_array</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'h_eq'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hydrogen_ions</span><span class="p">)</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="s1">'z_eq'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">extractant</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">predicted_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="n">predicted_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_predicted_dict</span> <span class="o">=</span> <span class="n">predicted_dict</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.get_predicted_dict"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.get_predicted_dict">[docs]</a> <span class="k">def</span> <span class="nf">get_predicted_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Returns predicted dictionary of species concentrations</span>
|
|
<span class="sd"> that xml parameters predicts given current in_moles</span>
|
|
|
|
<span class="sd"> :return: predicted_dict: (dict) dictionary of species concentrations</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_predicted_dict</span></div>
|
|
|
|
<span class="k">def</span> <span class="nf">_internal_objective</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Internal objective function. Uses objective function to compute value</span>
|
|
<span class="sd"> If the optimizer requires vectorized variables ie pso, this function</span>
|
|
<span class="sd"> takes care of it</span>
|
|
|
|
<span class="sd"> :param x: (list) thermo properties varied to minimize objective func</span>
|
|
<span class="sd"> :param kwargs: (list) arguments for objective_function</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">temp_xml_file_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span>
|
|
<span class="n">exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span>
|
|
<span class="n">objective_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objective_function</span>
|
|
<span class="n">opt_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span><span class="p">)</span>
|
|
<span class="n">dep_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_dependant_params_dict</span><span class="p">)</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">x</span><span class="p">])</span>
|
|
<span class="n">vectorized_x</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">vectorized_x</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">xs</span> <span class="o">=</span> <span class="n">x</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">species_name</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">thermo_prop</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span>
|
|
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]):</span> <span class="c1"># if nan, do not update xml with nan</span>
|
|
<span class="n">opt_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">]</span> <span class="o">*=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
|
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_xml</span><span class="p">(</span><span class="n">opt_dict</span><span class="p">,</span>
|
|
<span class="n">temp_xml_file_path</span><span class="p">,</span>
|
|
<span class="n">dependant_params_dict</span><span class="o">=</span><span class="n">dep_dict</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">(</span><span class="n">temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="n">predicted_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_predicted_dict</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
|
|
<span class="k">if</span> <span class="n">kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">objective_function</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">,</span> <span class="n">exp_df</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">objective_function</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">,</span> <span class="n">exp_df</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">objective_values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">vectorized_x</span><span class="p">:</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">objective_values</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="n">objective_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">return</span> <span class="n">objective_values</span>
|
|
|
|
<div class="viewcode-block" id="REEPS.fit"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.fit">[docs]</a> <span class="k">def</span> <span class="nf">fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">objective_function</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">optimizer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">objective_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">optimizer_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">:</span>
|
|
<span class="sd">"""Fits experimental to modeled data by minimizing objective function</span>
|
|
<span class="sd"> with optimizer. Returns dictionary with opt_dict structure</span>
|
|
|
|
<span class="sd"> :param objective_function: (function) function to compute objective</span>
|
|
<span class="sd"> If 'None', last set objective or default function is used</span>
|
|
<span class="sd"> :param optimizer: (function) function to perform optimization</span>
|
|
<span class="sd"> If 'None', last set optimizer or default is used</span>
|
|
<span class="sd"> :param optimizer_kwargs: (dict) optional arguments for optimizer</span>
|
|
<span class="sd"> :param objective_kwargs: (dict) optional arguments</span>
|
|
<span class="sd"> for objective function</span>
|
|
<span class="sd"> :returns tuple: (opt_dict (dict), opt_value (float))</span>
|
|
<span class="sd"> optimized opt_dict: Has identical structure as opt_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">objective_function</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_objective_function</span><span class="p">(</span><span class="n">objective_function</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">optimizer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_optimizer</span><span class="p">(</span><span class="n">optimizer</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">objective</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_internal_objective</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">objective_kwargs</span><span class="p">)</span>
|
|
|
|
<span class="n">optimizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_optimizer</span>
|
|
<span class="n">opt_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span><span class="p">)</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">species_name</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="n">x_guess</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">optimizer_kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">est_parameters</span><span class="p">,</span> <span class="n">obj_value</span> <span class="o">=</span> <span class="n">optimizer</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span> <span class="n">x_guess</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">est_parameters</span><span class="p">,</span> <span class="n">obj_value</span> <span class="o">=</span> <span class="n">optimizer</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span>
|
|
<span class="n">x_guess</span><span class="p">,</span>
|
|
<span class="n">optimizer_kwargs</span><span class="p">)</span>
|
|
|
|
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">species_name</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">thermo_prop</span> <span class="ow">in</span> <span class="n">opt_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">opt_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">]</span> <span class="o">*=</span> <span class="n">est_parameters</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
|
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">opt_dict</span><span class="p">,</span> <span class="n">obj_value</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.update_xml"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.update_xml">[docs]</a> <span class="k">def</span> <span class="nf">update_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">info_dict</span><span class="p">,</span>
|
|
<span class="n">phases_xml_filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">dependant_params_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""updates xml file with info_dict</span>
|
|
|
|
<span class="sd"> :param info_dict: (dict) info in {species_names:{thermo_prop:val}}</span>
|
|
<span class="sd"> Requires an identical structure to opt_dict</span>
|
|
<span class="sd"> :param phases_xml_filename: (str) xml filename if editing other xml</span>
|
|
<span class="sd"> If ``None``, the current xml will be modified and the internal</span>
|
|
<span class="sd"> Cantera phases will be refreshed to the new values.</span>
|
|
<span class="sd"> :param dependant_params_dict: (dict) dictionary containing information</span>
|
|
<span class="sd"> about parameters dependant on info_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">phases_xml_filename</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">phases_xml_filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span>
|
|
<span class="n">new_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">info_dict</span><span class="p">)</span>
|
|
<span class="n">dep_dict</span> <span class="o">=</span> <span class="n">dependant_params_dict</span>
|
|
<span class="k">if</span> <span class="n">dep_dict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">species_name</span> <span class="ow">in</span> <span class="n">dep_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">thermo_prop</span> <span class="ow">in</span> <span class="n">dep_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]:</span>
|
|
<span class="n">mod_func</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">][</span><span class="s1">'function'</span><span class="p">]</span>
|
|
<span class="n">mod_kwargs</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">][</span><span class="s1">'kwargs'</span><span class="p">]</span>
|
|
<span class="n">ind_vars</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">][</span><span class="s1">'ind_vars'</span><span class="p">]</span>
|
|
<span class="n">ind_vals</span> <span class="o">=</span> <span class="p">[</span><span class="n">new_dict</span><span class="p">[</span><span class="n">ind_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">ind_var</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
|
<span class="k">for</span> <span class="n">ind_var</span> <span class="ow">in</span> <span class="n">ind_vars</span><span class="p">]</span>
|
|
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">]</span> <span class="o">=</span> \
|
|
<span class="n">mod_func</span><span class="p">(</span><span class="n">ind_vals</span><span class="p">,</span> <span class="o">**</span><span class="n">mod_kwargs</span><span class="p">)</span>
|
|
<span class="c1"># print(mod_func(ind_vals, **mod_kwargs))</span>
|
|
<span class="c1"># print(new_dict)</span>
|
|
|
|
<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">phases_xml_filename</span><span class="p">)</span>
|
|
<span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
|
|
<span class="c1"># Update xml file</span>
|
|
<span class="k">for</span> <span class="n">species_name</span> <span class="ow">in</span> <span class="n">new_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">thermo_prop</span> <span class="ow">in</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">species</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'species'</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">species</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">==</span> <span class="n">species_name</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">changed_prop</span> <span class="ow">in</span> <span class="n">species</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">thermo_prop</span><span class="p">):</span>
|
|
<span class="n">changed_prop</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span>
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">species_name</span><span class="p">][</span><span class="n">thermo_prop</span><span class="p">])</span>
|
|
<span class="n">now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
|
<span class="n">changed_prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'updated'</span><span class="p">,</span>
|
|
<span class="s1">'Updated at </span><span class="si">{0}</span><span class="s1">:</span><span class="si">{1}</span><span class="s1"> </span><span class="si">{2}</span><span class="s1">-</span><span class="si">{3}</span><span class="s1">-</span><span class="si">{4}</span><span class="s1">'</span>
|
|
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
|
|
|
|
<span class="n">tree</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">phases_xml_filename</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">phases_xml_filename</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phase_names</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<span class="k">def</span> <span class="nf">_internal_objective_ver2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> ver2 generalizes to handle accessing parameters. ver1 assumes species</span>
|
|
<span class="sd"> parameter is modified. ver2 assumes parameter is accessed by going</span>
|
|
<span class="sd"> through two levels: upper and lower</span>
|
|
<span class="sd"> Internal objective function. Uses objective function to compute value</span>
|
|
<span class="sd"> If the optimizer requires vectorized variables ie pso, this function</span>
|
|
<span class="sd"> takes care of it</span>
|
|
|
|
<span class="sd"> :param x: (list) thermo properties varied to minimize objective func</span>
|
|
<span class="sd"> :param kwargs: (list) arguments for objective_function</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">temp_xml_file_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_temp_xml_file_path</span>
|
|
<span class="n">exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_df</span>
|
|
<span class="n">objective_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objective_function</span>
|
|
<span class="n">opt_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span><span class="p">)</span>
|
|
<span class="n">dep_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_dependant_params_dict</span><span class="p">)</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">x</span><span class="p">])</span>
|
|
<span class="n">vectorized_x</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">vectorized_x</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">xs</span> <span class="o">=</span> <span class="n">x</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">param_name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span>
|
|
<span class="n">x</span><span class="p">[</span><span class="n">ind</span><span class="p">]):</span> <span class="c1"># if nan, do not update xml with nan</span>
|
|
<span class="n">opt_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'input_value'</span><span class="p">]</span> <span class="o">*=</span> <span class="n">x</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_xml_ver2</span><span class="p">(</span><span class="n">opt_dict</span><span class="p">,</span>
|
|
<span class="n">temp_xml_file_path</span><span class="p">,</span>
|
|
<span class="n">dependant_params_dict</span><span class="o">=</span><span class="n">dep_dict</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">(</span><span class="n">temp_xml_file_path</span><span class="p">)</span>
|
|
<span class="n">predicted_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_predicted_dict</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update_predicted_dict</span><span class="p">()</span>
|
|
|
|
<span class="k">if</span> <span class="n">kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">objective_function</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">,</span> <span class="n">exp_df</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">objective_function</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">,</span> <span class="n">exp_df</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">objective_values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">vectorized_x</span><span class="p">:</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">objective_values</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">objective_values</span> <span class="o">=</span> <span class="n">objective_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">return</span> <span class="n">objective_values</span>
|
|
|
|
<div class="viewcode-block" id="REEPS.fit_ver2"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.fit_ver2">[docs]</a> <span class="k">def</span> <span class="nf">fit_ver2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">objective_function</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">optimizer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">objective_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">optimizer_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">:</span>
|
|
<span class="sd">"""Fits experimental to modeled data by minimizing objective function</span>
|
|
<span class="sd"> with optimizer. Returns dictionary with opt_dict structure</span>
|
|
|
|
<span class="sd"> :param objective_function: (function) function to compute objective</span>
|
|
<span class="sd"> If 'None', last set objective or default function is used</span>
|
|
<span class="sd"> :param optimizer: (function) function to perform optimization</span>
|
|
<span class="sd"> If 'None', last set optimizer or default is used</span>
|
|
<span class="sd"> :param optimizer_kwargs: (dict) optional arguments for optimizer</span>
|
|
<span class="sd"> :param objective_kwargs: (dict) optional arguments</span>
|
|
<span class="sd"> for objective function</span>
|
|
<span class="sd"> :returns tuple: (opt_dict (dict), opt_value (float))</span>
|
|
<span class="sd"> optimized opt_dict: Has identical structure as opt_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">objective_function</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_objective_function</span><span class="p">(</span><span class="n">objective_function</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">optimizer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_optimizer</span><span class="p">(</span><span class="n">optimizer</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">objective</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_internal_objective_ver2</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">objective_kwargs</span><span class="p">)</span>
|
|
|
|
<span class="n">optimizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_optimizer</span>
|
|
<span class="n">opt_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_opt_dict</span><span class="p">)</span>
|
|
<span class="n">x_guess</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span>
|
|
|
|
<span class="k">if</span> <span class="n">optimizer_kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">est_parameters</span><span class="p">,</span> <span class="n">obj_value</span> <span class="o">=</span> <span class="n">optimizer</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span> <span class="n">x_guess</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># noinspection PyCallingNonCallable</span>
|
|
<span class="n">est_parameters</span><span class="p">,</span> <span class="n">obj_value</span> <span class="o">=</span> <span class="n">optimizer</span><span class="p">(</span><span class="n">objective</span><span class="p">,</span>
|
|
<span class="n">x_guess</span><span class="p">,</span>
|
|
<span class="n">optimizer_kwargs</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">param_name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">opt_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
|
<span class="n">opt_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'input_value'</span><span class="p">]</span> <span class="o">*=</span> <span class="n">est_parameters</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
|
|
|
|
<span class="k">return</span> <span class="n">opt_dict</span><span class="p">,</span> <span class="n">obj_value</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.update_xml_ver2"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.update_xml_ver2">[docs]</a> <span class="k">def</span> <span class="nf">update_xml_ver2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">info_dict</span><span class="p">,</span>
|
|
<span class="n">phases_xml_filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">dependant_params_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""updates xml file with info_dict</span>
|
|
|
|
<span class="sd"> :param info_dict: (dict) info in {species_names:{thermo_prop:val}}</span>
|
|
<span class="sd"> Requires an identical structure to opt_dict</span>
|
|
<span class="sd"> :param phases_xml_filename: (str) xml filename if editing other xml</span>
|
|
<span class="sd"> If ``None``, the current xml will be modified and the internal</span>
|
|
<span class="sd"> Cantera phases will be refreshed to the new values.</span>
|
|
<span class="sd"> :param dependant_params_dict: (dict) dictionary containing information</span>
|
|
<span class="sd"> about parameters dependant on info_dict</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">phases_xml_filename</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">phases_xml_filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span>
|
|
<span class="n">new_dict</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">info_dict</span><span class="p">)</span>
|
|
<span class="n">dep_dict</span> <span class="o">=</span> <span class="n">dependant_params_dict</span>
|
|
|
|
<span class="k">if</span> <span class="n">dep_dict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">new_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dep_dict</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">param_name</span> <span class="ow">in</span> <span class="n">dep_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">mod_func</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'function'</span><span class="p">]</span>
|
|
<span class="n">mod_kwargs</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'kwargs'</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dep_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'independent_params'</span><span class="p">],</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">ind_param_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">dep_dict</span><span class="p">[</span>
|
|
<span class="n">param_name</span><span class="p">][</span><span class="s1">'independent_params'</span><span class="p">]]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ind_param_names</span> <span class="o">=</span> \
|
|
<span class="n">dep_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'independent_params'</span><span class="p">]</span>
|
|
<span class="n">ind_vals</span> <span class="o">=</span> <span class="p">[</span><span class="n">new_dict</span><span class="p">[</span><span class="n">ind_param_name</span><span class="p">][</span><span class="s1">'input_value'</span><span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">ind_param_name</span> <span class="ow">in</span> <span class="n">ind_param_names</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">mod_kwargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'input_value'</span><span class="p">]</span> <span class="o">=</span> <span class="n">mod_func</span><span class="p">(</span><span class="n">ind_vals</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">new_dict</span><span class="p">[</span><span class="n">param_name</span><span class="p">][</span><span class="s1">'input_value'</span><span class="p">]</span> <span class="o">=</span> \
|
|
<span class="n">mod_func</span><span class="p">(</span><span class="n">ind_vals</span><span class="p">,</span>
|
|
<span class="o">**</span><span class="n">mod_kwargs</span><span class="p">)</span>
|
|
<span class="n">tree</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">phases_xml_filename</span><span class="p">)</span>
|
|
<span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
|
|
<span class="c1"># Update xml file</span>
|
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
|
<span class="n">now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
<span class="ow">and</span> <span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">child1</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_element_name'</span><span class="p">]):</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">child1</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_name'</span><span class="p">]]</span>
|
|
<span class="o">==</span> <span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_value'</span><span class="p">]):</span>
|
|
<span class="k">for</span> <span class="n">child2</span> <span class="ow">in</span> <span class="n">child1</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_element_name'</span><span class="p">]):</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">child1</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_name'</span><span class="p">]]</span>
|
|
<span class="o">==</span> <span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_value'</span><span class="p">]):</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'input_format'</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">d</span><span class="p">[</span><span class="s1">'input_value'</span><span class="p">])</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'updated'</span><span class="p">,</span>
|
|
<span class="s1">'Updated at </span><span class="si">{0}</span><span class="s1">:</span><span class="si">{1}</span><span class="s1"> </span><span class="si">{2}</span><span class="s1">-</span><span class="si">{3}</span><span class="s1">-</span><span class="si">{4}</span><span class="s1">'</span>
|
|
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span>
|
|
<span class="ow">and</span> <span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">child1</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_element_name'</span><span class="p">]):</span>
|
|
<span class="k">for</span> <span class="n">child2</span> <span class="ow">in</span> <span class="n">child1</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_element_name'</span><span class="p">]):</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">child1</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_name'</span><span class="p">]]</span>
|
|
<span class="o">==</span> <span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_value'</span><span class="p">]):</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'input_format'</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">d</span><span class="p">[</span><span class="s1">'input_value'</span><span class="p">])</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'updated'</span><span class="p">,</span>
|
|
<span class="s1">'Updated at </span><span class="si">{0}</span><span class="s1">:</span><span class="si">{1}</span><span class="s1"> </span><span class="si">{2}</span><span class="s1">-</span><span class="si">{3}</span><span class="s1">-</span><span class="si">{4}</span><span class="s1">'</span>
|
|
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
<span class="ow">and</span> <span class="n">d</span><span class="p">[</span><span class="s1">'lower_attrib_name'</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">child1</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_element_name'</span><span class="p">]):</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">child1</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_name'</span><span class="p">]]</span>
|
|
<span class="o">==</span> <span class="n">d</span><span class="p">[</span><span class="s1">'upper_attrib_value'</span><span class="p">]):</span>
|
|
<span class="k">for</span> <span class="n">child2</span> <span class="ow">in</span> <span class="n">child1</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_element_name'</span><span class="p">]):</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'input_format'</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">d</span><span class="p">[</span><span class="s1">'input_value'</span><span class="p">])</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'updated'</span><span class="p">,</span>
|
|
<span class="s1">'Updated at </span><span class="si">{0}</span><span class="s1">:</span><span class="si">{1}</span><span class="s1"> </span><span class="si">{2}</span><span class="s1">-</span><span class="si">{3}</span><span class="s1">-</span><span class="si">{4}</span><span class="s1">'</span>
|
|
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">child1</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'upper_element_name'</span><span class="p">]):</span>
|
|
<span class="k">for</span> <span class="n">child2</span> <span class="ow">in</span> <span class="n">child1</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">'lower_element_name'</span><span class="p">]):</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s1">'input_format'</span><span class="p">]</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">d</span><span class="p">[</span><span class="s1">'input_value'</span><span class="p">])</span>
|
|
<span class="n">child2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'updated'</span><span class="p">,</span> <span class="s1">'Updated at </span><span class="si">{0}</span><span class="s1">:</span><span class="si">{1}</span><span class="s1"> </span><span class="si">{2}</span><span class="s1">-</span><span class="si">{3}</span><span class="s1">-</span><span class="si">{4}</span><span class="s1">'</span>
|
|
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">hour</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">minute</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">now</span><span class="o">.</span><span class="n">day</span><span class="p">,</span>
|
|
<span class="n">now</span><span class="o">.</span><span class="n">year</span><span class="p">))</span>
|
|
|
|
<span class="n">tree</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">phases_xml_filename</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">phases_xml_filename</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_phases</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_phases_xml_filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phase_names</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.parity_plot"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.parity_plot">[docs]</a> <span class="k">def</span> <span class="nf">parity_plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">compared_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">c_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">c_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">plot_title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">save_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">print_r_squared</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">data_labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">legend</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Parity plot between measured and predicted compared_value.</span>
|
|
<span class="sd"> Default compared value is {RE_1}_aq_eq</span>
|
|
|
|
<span class="sd"> :param compared_value: (str) Quantity to compare predicted and</span>
|
|
<span class="sd"> experimental data. Can be any column containing "eq" in exp_df i.e.</span>
|
|
<span class="sd"> h_eq, z_eq, {RE}_d_eq, etc.</span>
|
|
<span class="sd"> :param plot_title: (str or boolean)</span>
|
|
|
|
<span class="sd"> If None (default): Plot title will be generated from compared_value</span>
|
|
<span class="sd"> Recommend to just explore. If h_eq, plot_title is</span>
|
|
<span class="sd"> "H^+ eq conc".</span>
|
|
|
|
<span class="sd"> If str: Plot title will be plot_title string</span>
|
|
|
|
<span class="sd"> If "False": No plot title</span>
|
|
<span class="sd"> :param c_data: (list or np.ndarray) data for color axis</span>
|
|
<span class="sd"> :param c_label: (str) label for color axis</span>
|
|
<span class="sd"> :param save_path: (str) save path for parity plot</span>
|
|
<span class="sd"> :param print_r_squared: (boolean) To plot or not to plot r-squared</span>
|
|
<span class="sd"> value. Prints 2 places past decimal</span>
|
|
<span class="sd"> :param data_labels: labels for the data such as paper's name where</span>
|
|
<span class="sd"> experiment is pulled from.</span>
|
|
<span class="sd"> :param legend: whether to display legend for data_labels. Has no</span>
|
|
<span class="sd"> effect if data_labels is None</span>
|
|
<span class="sd"> :return fig, ax: returns the figure and axes objects</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exp_df</span><span class="p">()</span>
|
|
<span class="n">predicted_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_predicted_dict</span><span class="p">()</span>
|
|
<span class="n">re_species_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span>
|
|
<span class="n">extractant_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_extractant_name</span><span class="p">()</span>
|
|
<span class="n">re_charges</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_charges</span>
|
|
<span class="k">if</span> <span class="n">compared_value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">compared_value</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="n">pred</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">)[</span><span class="n">compared_value</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">meas</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="n">compared_value</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">name_breakdown</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s1">'[^_\W]+'</span><span class="p">,</span> <span class="n">compared_value</span><span class="p">)</span>
|
|
<span class="n">compared_species</span> <span class="o">=</span> <span class="n">name_breakdown</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'h'</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="s1">'h_i'</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">elif</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'z'</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="s1">'z_i'</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span>
|
|
<span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_i'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">compared_species</span><span class="p">)]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_labels</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">'pred'</span><span class="p">:</span> <span class="n">pred</span><span class="p">,</span>
|
|
<span class="s1">'meas'</span><span class="p">:</span> <span class="n">meas</span><span class="p">,</span>
|
|
<span class="s1">'label'</span><span class="p">:</span> <span class="n">data_labels</span><span class="p">,</span>
|
|
<span class="s1">'feed_molarity'</span><span class="p">:</span> <span class="n">feed_molarity</span><span class="p">})</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">c_data</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">'pred'</span><span class="p">:</span> <span class="n">pred</span><span class="p">,</span>
|
|
<span class="s1">'meas'</span><span class="p">:</span> <span class="n">meas</span><span class="p">,</span>
|
|
<span class="n">c_data</span><span class="p">:</span> <span class="n">exp_df</span><span class="p">[</span><span class="n">c_data</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="p">,</span>
|
|
<span class="s1">'feed_molarity'</span><span class="p">:</span> <span class="n">feed_molarity</span><span class="p">})</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">'pred'</span><span class="p">:</span> <span class="n">pred</span><span class="p">,</span>
|
|
<span class="s1">'meas'</span><span class="p">:</span> <span class="n">meas</span><span class="p">,</span>
|
|
<span class="s1">'feed_molarity'</span><span class="p">:</span> <span class="n">feed_molarity</span><span class="p">})</span>
|
|
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[(</span><span class="n">combined_df</span><span class="p">[</span><span class="s1">'feed_molarity'</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)]</span>
|
|
<span class="n">meas</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="s1">'meas'</span><span class="p">]</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">pred</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="s1">'pred'</span><span class="p">]</span><span class="o">.</span><span class="n">values</span>
|
|
|
|
<span class="n">min_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">([</span><span class="n">pred</span><span class="p">,</span> <span class="n">meas</span><span class="p">])</span>
|
|
<span class="n">max_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">([</span><span class="n">pred</span><span class="p">,</span> <span class="n">meas</span><span class="p">])</span>
|
|
<span class="n">min_max_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">min_data</span><span class="p">,</span> <span class="n">max_data</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'h'</span><span class="p">:</span>
|
|
<span class="n">default_title</span> <span class="o">=</span> <span class="s1">'$H^+$ eq. conc. (mol/L)'</span>
|
|
<span class="k">elif</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'z'</span><span class="p">:</span>
|
|
<span class="n">default_title</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1"> eq. conc. (mol/L)'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">extractant_name</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">phase</span> <span class="o">=</span> <span class="n">name_breakdown</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">phase</span> <span class="o">==</span> <span class="s1">'aq'</span><span class="p">:</span>
|
|
<span class="n">re_charge</span> <span class="o">=</span> <span class="n">re_charges</span><span class="p">[</span><span class="n">re_species_list</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">compared_species</span><span class="p">)]</span>
|
|
<span class="n">default_title</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">%s</span><span class="s1">^{</span><span class="si">%d</span><span class="s1">+}$ eq. conc. (mol/L)'</span> \
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">compared_species</span><span class="p">,</span> <span class="n">re_charge</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">phase</span> <span class="o">==</span> <span class="s1">'d'</span><span class="p">:</span>
|
|
<span class="n">default_title</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1"> distribution ratio'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">compared_species</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">default_title</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1"> complex eq. conc. (mol/L)'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">compared_species</span><span class="p">)</span>
|
|
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_labels</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
|
|
<span class="n">unique_labels</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">data_labels</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">unique_labels</span><span class="p">:</span>
|
|
<span class="n">filtered_data</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="n">combined_df</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span> <span class="o">==</span> <span class="n">label</span><span class="p">]</span>
|
|
<span class="n">filtered_meas</span> <span class="o">=</span> <span class="n">filtered_data</span><span class="p">[</span><span class="s1">'meas'</span><span class="p">]</span>
|
|
<span class="n">filtered_pred</span> <span class="o">=</span> <span class="n">filtered_data</span><span class="p">[</span><span class="s1">'pred'</span><span class="p">]</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">filtered_meas</span><span class="p">,</span> <span class="n">filtered_pred</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">legend</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">)</span>
|
|
|
|
<span class="k">elif</span> <span class="n">c_data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">c_data</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">c_data</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="n">c_data</span><span class="p">]</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">p1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">meas</span><span class="p">,</span> <span class="n">pred</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">c_data</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">'viridis'</span><span class="p">)</span>
|
|
<span class="n">c_bar</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%.2f</span><span class="s1">'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">c_label</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">c_bar</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">c_label</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">270</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">sns</span><span class="o">.</span><span class="n">scatterplot</span><span class="p">(</span><span class="n">meas</span><span class="p">,</span> <span class="n">pred</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"r"</span><span class="p">,</span>
|
|
<span class="n">legend</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">min_max_data</span><span class="p">,</span> <span class="n">min_max_data</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"b"</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">print_r_squared</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">min_max_data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
|
<span class="n">min_max_data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="mf">0.9</span><span class="p">,</span>
|
|
<span class="s1">'$R^2$=</span><span class="si">{0:.2f}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">r_squared</span><span class="p">(</span><span class="n">compared_value</span><span class="p">)))</span>
|
|
<span class="c1"># plt.legend(loc='lower right')</span>
|
|
<span class="c1"># else:</span>
|
|
<span class="c1"># plt.legend()</span>
|
|
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xlabel</span><span class="o">=</span><span class="s1">'Measured'</span><span class="p">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s1">'Predicted'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">plot_title</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">default_title</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plot_title</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">plot_title</span><span class="p">)</span>
|
|
<span class="n">set_size</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
|
|
<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
|
|
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">save_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">save_path</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">'tight'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.r_squared"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.r_squared">[docs]</a> <span class="k">def</span> <span class="nf">r_squared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compared_value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""r-squared value comparing measured and predicted compared value</span>
|
|
|
|
<span class="sd"> Closer to 1, the better the model's predictions.</span>
|
|
|
|
<span class="sd"> :param compared_value: (str) Quantity to compare predicted and</span>
|
|
<span class="sd"> experimental data. Can be any column containing "eq" in exp_df i.e.</span>
|
|
<span class="sd"> h_eq, z_eq, {RE}_d_eq, etc. default is {RE}_aq_eq</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">exp_df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exp_df</span><span class="p">()</span>
|
|
<span class="n">predicted_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_predicted_dict</span><span class="p">()</span>
|
|
<span class="n">re_species_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_re_species_list</span>
|
|
<span class="k">if</span> <span class="n">compared_value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">compared_value</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_eq'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">re_species_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="n">pred</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">predicted_dict</span><span class="p">)[</span><span class="n">compared_value</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">predicted_y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">pred</span><span class="p">)</span>
|
|
<span class="n">actual_y</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="n">compared_value</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">name_breakdown</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s1">'[^_\W]+'</span><span class="p">,</span> <span class="n">compared_value</span><span class="p">)</span>
|
|
<span class="n">compared_species</span> <span class="o">=</span> <span class="n">name_breakdown</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'h'</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="s1">'h_i'</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">elif</span> <span class="n">compared_species</span> <span class="o">==</span> <span class="s1">'z'</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span><span class="s1">'z_i'</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">feed_molarity</span> <span class="o">=</span> <span class="n">exp_df</span><span class="p">[</span>
|
|
<span class="s1">'</span><span class="si">{0}</span><span class="s1">_aq_i'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">compared_species</span><span class="p">)]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">'pred'</span><span class="p">:</span> <span class="n">predicted_y</span><span class="p">,</span>
|
|
<span class="s1">'meas'</span><span class="p">:</span> <span class="n">actual_y</span><span class="p">,</span>
|
|
<span class="s1">'in_moles'</span><span class="p">:</span> <span class="n">feed_molarity</span><span class="p">})</span>
|
|
<span class="n">combined_df</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[(</span><span class="n">combined_df</span><span class="p">[</span><span class="s1">'in_moles'</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)]</span>
|
|
<span class="n">actual_y</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="s1">'meas'</span><span class="p">]</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">predicted_y</span> <span class="o">=</span> <span class="n">combined_df</span><span class="p">[</span><span class="s1">'pred'</span><span class="p">]</span><span class="o">.</span><span class="n">values</span>
|
|
<span class="n">num</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">((</span><span class="n">actual_y</span> <span class="o">-</span> <span class="n">predicted_y</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">den</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">((</span><span class="n">actual_y</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">actual_y</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">den</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">r_2</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">r_2</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">num</span> <span class="o">/</span> <span class="n">den</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">r_2</span></div>
|
|
|
|
<div class="viewcode-block" id="REEPS.plot_3d_data"><a class="viewcode-back" href="../../modules/reeps.html#reeps.REEPS.plot_3d_data">[docs]</a> <span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">plot_3d_data</span><span class="p">(</span><span class="n">x_data</span><span class="p">,</span>
|
|
<span class="n">y_data</span><span class="p">,</span>
|
|
<span class="n">z_data</span><span class="p">,</span>
|
|
<span class="n">c_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">x_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">y_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">z_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">c_label</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="sd"> :param x_data: (list) list of data for x axis</span>
|
|
<span class="sd"> :param y_data: (list) list of data for y axis</span>
|
|
<span class="sd"> :param z_data: (list) list of data for z axis</span>
|
|
<span class="sd"> :param c_data: (list) list of data for color axis</span>
|
|
<span class="sd"> :param x_label: (str) label for x axis</span>
|
|
<span class="sd"> :param y_label: (str) label for y axis</span>
|
|
<span class="sd"> :param z_label: (str) label for z axis</span>
|
|
<span class="sd"> :param c_label: (str) label for color axis</span>
|
|
<span class="sd"> :return:</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
|
|
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="s1">'3d'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">c_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_data</span><span class="p">,</span> <span class="n">y_data</span><span class="p">,</span> <span class="n">z_data</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">p1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x_data</span><span class="p">,</span>
|
|
<span class="n">y_data</span><span class="p">,</span>
|
|
<span class="n">z_data</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">c_data</span><span class="p">,</span>
|
|
<span class="n">cmap</span><span class="o">=</span><span class="s1">'viridis'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">c_bar</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">p1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">c_label</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">c_bar</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">c_label</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">270</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">x_label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="n">x_label</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">y_label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'y'</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="n">y_label</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">z_label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="s1">'z'</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="n">z_label</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span></div></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2020, Titus Quah, Nwike Iloeje
|
|
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.Navigation.enable(true);
|
|
});
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |