diff --git a/jitterbug/compare.py b/jitterbug/compare.py new file mode 100644 index 0000000..1338229 --- /dev/null +++ b/jitterbug/compare.py @@ -0,0 +1,85 @@ +"""Tools for assessing the quality of a Hessian compared to a true one""" +from dataclasses import dataclass + +import ase +from ase import units +import numpy as np +from ase.vibrations import VibrationsData +from pmutt.statmech import StatMech, presets + + +@dataclass +class HessianQuality: + """Measurements of the quality of a Hessian""" + + # Thermodynamics + zpe: float + """Zero point energy (kcal/mol)""" + zpe_error: float + """Different between the ZPE and the target one""" + cp: list[float] + """Heat capacity as a function of temperature (units: kcal/mol/K)""" + cp_error: list[float] + """Difference between known and approximate heat capacity as a function of temperature (units: kcal/mol/K)""" + h: list[float] + """Enthalpy as a function of temperature (units: kcal/mol)""" + h_error: list[float] + """Error between known and approximate enthalpy as a function of temperature (units: kcal/mol)""" + temps: list[float] + """Temperatures at which Cp was evaluated (units: K)""" + + # Vibrations + vib_freqs: list[float] + """Vibrational frequencies for our hessian (units: cm^-1)""" + vib_errors: list[float] + """Error between each frequency and the corresponding mode in the known hessian""" + vib_mae: float + """Mean absolute error for the vibrational modes""" + + +def compare_hessians(atoms: ase.Atoms, known_hessian: np.ndarray, approx_hessian: np.ndarray) -> HessianQuality: + """Compare two different hessians for same atomic structure + + Args: + atoms: Structure + known_hessian: 2D form of the target Hessian + approx_hessian: 2D form of an approximate Hessian + Returns: + Collection of the performance metrics + """ + + # Start by making a vibration data object + known_vibs: VibrationsData = VibrationsData.from_2d(atoms, known_hessian) + approx_vibs: VibrationsData = VibrationsData.from_2d(atoms, approx_hessian) + + # Compare the vibrational frequencies on the non-zero modes + known_freqs = known_vibs.get_frequencies() + is_real = np.isreal(known_freqs) + approx_freqs = approx_vibs.get_frequencies() + freq_error = np.subtract(approx_freqs[is_real], known_freqs[is_real]) + freq_mae = np.abs(freq_error).mean() + + # Compare the enthalpy and heat capacity + # TODO (wardlt): Might actually want to compute the symmetry number + known_harm = StatMech(vib_wavenumbers=np.real(known_freqs[is_real]), atoms=atoms, symmetrynumber=1, **presets['harmonic']) + approx_harm = StatMech(vib_wavenumbers=np.real(approx_freqs[is_real]), atoms=atoms, symmetrynumber=1, **presets['harmonic']) + + temps = np.linspace(1., 373, 128) + known_cp = np.array([known_harm.get_Cp('kcal/mol/K', T=t) for t in temps]) + approx_cp = np.array([approx_harm.get_Cp('kcal/mol/K', T=t) for t in temps]) + known_h = np.array([known_harm.get_H('kcal/mol', T=t) for t in temps]) + approx_h = np.array([approx_harm.get_H('kcal/mol', T=t) for t in temps]) + + # Assemble into a result object + return HessianQuality( + zpe=approx_vibs.get_zero_point_energy() * units.mol / units.kcal, + zpe_error=(approx_vibs.get_zero_point_energy() - known_vibs.get_zero_point_energy()) * units.mol / units.kcal, + vib_freqs=np.real(approx_freqs[is_real]).tolist(), + vib_errors=np.abs(freq_error), + vib_mae=freq_mae, + cp=approx_cp.tolist(), + cp_error=(known_cp - approx_cp).tolist(), + h=approx_h, + h_error=(known_h - approx_h).tolist(), + temps=temps.tolist() + ) diff --git a/notebooks/1_explore-sampling-methods/0_random-directions-same-distance.ipynb b/notebooks/1_explore-sampling-methods/0_random-directions-same-distance.ipynb index ce20d59..7d95bc5 100644 --- a/notebooks/1_explore-sampling-methods/0_random-directions-same-distance.ipynb +++ b/notebooks/1_explore-sampling-methods/0_random-directions-same-distance.ipynb @@ -71,6 +71,19 @@ "name, method, basis = run_name.split(\"_\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d549833-999a-4172-8bc2-689517e7c2a7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if not Path(starting_geometry).exists():\n", + " raise ValueError('Cannot find file')" + ] + }, { "cell_type": "markdown", "id": "cf9ff792-6b5b-46ce-9a78-78912e372912", @@ -226,7 +239,7 @@ " # Sample a perturbation\n", " disp = np.random.normal(0, 1, size=(n_atoms * 3))\n", " disp /= np.linalg.norm(disp)\n", - " disp *= step_size\n", + " disp *= step_size * len(atoms) \n", " disp = disp.reshape((-1, 3))\n", " \n", " # Subtract off any translation\n", @@ -270,7 +283,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/notebooks/1_explore-sampling-methods/1_random-directions-variable-distance.ipynb b/notebooks/1_explore-sampling-methods/1_random-directions-variable-distance.ipynb index 9d8a915..4567a8c 100644 --- a/notebooks/1_explore-sampling-methods/1_random-directions-variable-distance.ipynb +++ b/notebooks/1_explore-sampling-methods/1_random-directions-variable-distance.ipynb @@ -227,7 +227,7 @@ " disp = np.random.normal(0, 1, size=(n_atoms * 3))\n", " disp /= np.linalg.norm(disp)\n", " my_step_dist = np.random.exponential(scale=step_size)\n", - " disp *= my_step_dist\n", + " disp *= my_step_dist * len(atoms)\n", " disp = disp.reshape((-1, 3))\n", " \n", " # Subtract off any translation\n", diff --git a/notebooks/1_explore-sampling-methods/2_displace-along-axes.ipynb b/notebooks/1_explore-sampling-methods/2_displace-along-axes.ipynb index 64179fa..ef96e40 100644 --- a/notebooks/1_explore-sampling-methods/2_displace-along-axes.ipynb +++ b/notebooks/1_explore-sampling-methods/2_displace-along-axes.ipynb @@ -344,7 +344,7 @@ " # Create the perturbation vector\n", " disp = np.zeros((n_coords,))\n", " for d in perturb:\n", - " disp[abs(d) - 1] = (1 if abs(d) > 0 else -1) * step_size\n", + " disp[abs(d) - 1] = (1 if abs(d) > 0 else -1) * step_size / perturbs_per_evaluation\n", " disp = disp.reshape((-1, 3))\n", " \n", " # Make the new atoms\n", @@ -387,7 +387,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/notebooks/1_explore-sampling-methods/run-all-methods.sh b/notebooks/1_explore-sampling-methods/run-all-methods.sh new file mode 100644 index 0000000..311dcdc --- /dev/null +++ b/notebooks/1_explore-sampling-methods/run-all-methods.sh @@ -0,0 +1,15 @@ +#! /bin/bash + +xyz=../data/exact/caffeine_pm7_None.xyz +for step_size in 0.02; do + # Do the randomized methods + for method in 0_random-directions-same-distance.ipynb 1_random-directions-variable-distance.ipynb; do + papermill -p starting_geometry $xyz -p step_size $step_size $method last.ipynb + done + + # Test with different reductions for "along axes" + notebook=2_displace-along-axes.ipynb + for n in 2 4 8; do + papermill -p starting_geometry $xyz -p perturbs_per_evaluation $n -p step_size $step_size $notebook last.ipynb + done +done diff --git a/notebooks/2_testing-fitting-strategies/1_fit-forcefield-using-mbtr.ipynb b/notebooks/2_testing-fitting-strategies/1_fit-forcefield-using-mbtr.ipynb index c6bde80..cb29ff0 100644 --- a/notebooks/2_testing-fitting-strategies/1_fit-forcefield-using-mbtr.ipynb +++ b/notebooks/2_testing-fitting-strategies/1_fit-forcefield-using-mbtr.ipynb @@ -29,10 +29,12 @@ "from dscribe.descriptors import MBTR\n", "from ase.vibrations import VibrationsData\n", "from ase.db import connect\n", + "from random import sample\n", "from pathlib import Path\n", "from tqdm import tqdm\n", "import numpy as np\n", "import warnings\n", + "import json\n", "import ase" ] }, @@ -55,7 +57,9 @@ }, "outputs": [], "source": [ - "db_path = '../1_explore-sampling-methods/data/along-axes/caffeine_pm7_None_d=5.00e-03-N=2.db'" + "db_path: str = '../1_explore-sampling-methods/data/along-axes/caffeine_pm7_None_d=5.00e-03-N=2.db'\n", + "overwrite: bool = False\n", + "max_size: int = 10000" ] }, { @@ -78,7 +82,29 @@ "run_name, sampling_options = Path(db_path).name[:-3].rsplit(\"_\", 1)\n", "exact_path = Path('../data/exact/') / f'{run_name}-ase.json'\n", "sampling_name = Path(db_path).parent.name\n", - "out_name = '_'.join([run_name, sampling_name, sampling_options])" + "out_name = '_'.join([run_name, sampling_name, sampling_options])\n", + "out_dir = Path('data/mbtr/')" + ] + }, + { + "cell_type": "markdown", + "id": "41f31375-9cf5-412b-949c-406711358781", + "metadata": {}, + "source": [ + "Skip if done" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75d22086-f020-40d7-8327-1154491b9821", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if (out_dir / f'{out_name}-full.json').exists() and not overwrite:\n", + " raise ValueError('Already done!')" ] }, { @@ -104,6 +130,28 @@ "print(f'Loaded {len(data)} structures')" ] }, + { + "cell_type": "markdown", + "id": "0c8aae57-1863-4bad-a56b-31f7b8a6062b", + "metadata": {}, + "source": [ + "Downsample if desired" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2dfe036-a173-41ff-817b-2e92349b9704", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if max_size is not None and len(data) > max_size:\n", + " data = sample(data, max_size)\n", + " print(f'Downselected to {len(data)}')" + ] + }, { "cell_type": "markdown", "id": "cb1a8e03-b045-49a4-95fd-61636a48fbad", @@ -178,7 +226,7 @@ "source": [ "test_y = np.array([a.get_potential_energy() for a in test_data])\n", "baseline_y = np.abs(test_y - test_y.mean()).mean()\n", - "print(f'Baseline score: {baseline_y*1000:.2e} meV/atom')`" + "print(f'Baseline score: {baseline_y*1000:.2e} meV/atom')" ] }, { @@ -679,7 +727,7 @@ "source": [ "out_dir = Path('data/mbtr')\n", "out_dir.mkdir(exist_ok=True, parents=True)\n", - "with open(f'data/mbtr/{out_name}.json', 'w') as fp:\n", + "with open(f'data/mbtr/{out_name}-full.json', 'w') as fp:\n", " approx_vibs.write(fp)" ] }, @@ -715,14 +763,20 @@ "outputs": [], "source": [ "zpes = []\n", - "for count in tqdm(steps):\n", - " with warnings.catch_warnings():\n", - " warnings.simplefilter(\"ignore\")\n", - " hess_model = model.train(data[:count])\n", - " \n", - " approx_hessian = model.mean_hessian(hess_model)\n", - " approx_vibs = VibrationsData.from_2d(data[0], approx_hessian)\n", - " zpes.append(approx_vibs.get_zero_point_energy())" + "with open(f'data/mbtr/{out_name}-increment.json', 'w') as fp:\n", + " for count in tqdm(steps):\n", + " with warnings.catch_warnings():\n", + " warnings.simplefilter(\"ignore\")\n", + " hess_model = model.train(data[:count])\n", + "\n", + " approx_hessian = model.mean_hessian(hess_model)\n", + " \n", + " # Save the incremental\n", + " print(json.dumps({'count': int(count), 'hessian': approx_hessian.tolist()}), file=fp)\n", + " \n", + " # Compute the ZPE\n", + " approx_vibs = VibrationsData.from_2d(data[0], approx_hessian)\n", + " zpes.append(approx_vibs.get_zero_point_energy())" ] }, { diff --git a/notebooks/2_testing-fitting-strategies/run-all-dbs.sh b/notebooks/2_testing-fitting-strategies/run-all-dbs.sh new file mode 100644 index 0000000..26e0fdc --- /dev/null +++ b/notebooks/2_testing-fitting-strategies/run-all-dbs.sh @@ -0,0 +1,8 @@ +#! /bin/bash + +notebook=$1 +dbs=$(find ../1_explore-sampling-methods/data/ -name "caffeine_pm7_None*.db") +for db in $dbs; do + echo $db + papermill -p db_path "$db" -p max_size 5000 $notebook last.ipynb +done diff --git a/notebooks/3_consolidate-results/0_compare-sampling-strategies-with-mbtr.ipynb b/notebooks/3_consolidate-results/0_compare-sampling-strategies-with-mbtr.ipynb new file mode 100644 index 0000000..fccbb2b --- /dev/null +++ b/notebooks/3_consolidate-results/0_compare-sampling-strategies-with-mbtr.ipynb @@ -0,0 +1,903 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b592b18c-a459-4563-99fd-2ecd66474ed5", + "metadata": {}, + "source": [ + "# Compare Sampling Strategies using an MBTR Forcefield\n", + "Here, we hold our learning strategy constant and vary the strategies used in sampling" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4f6bfbb4-9d13-45d0-88a6-7470111204fe", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from matplotlib import pyplot as plt\n", + "from jitterbug.compare import compare_hessians\n", + "from ase.vibrations import VibrationsData\n", + "from dataclasses import asdict\n", + "from pathlib import Path\n", + "from ase.io import read\n", + "from tqdm import tqdm\n", + "import pandas as pd\n", + "import numpy as np\n", + "import json\n", + "import re" + ] + }, + { + "cell_type": "markdown", + "id": "f4e97ce7-31c1-4542-9aff-b06c83bbefd8", + "metadata": {}, + "source": [ + "Configuration" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "02e04cef-054c-47ad-9334-d1cf6d4412e0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "target_mol = '../data/exact/caffeine_pm7_None.xyz'\n", + "target_method = '../2_testing-fitting-strategies/data/mbtr/'" + ] + }, + { + "cell_type": "markdown", + "id": "8874ea91-b4f3-432a-bd28-0d33b50e24ee", + "metadata": {}, + "source": [ + "## Load the Exact Result\n", + "The target molecule filename determines which molecule we'll look for. The name includes both the molecule name and method used to evaluate the hessian" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "db22a33d-e70a-4e7b-aad7-39aa4e552804", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "target_mol = Path(target_mol)\n", + "mol_name = target_mol.name[:-4]\n", + "atoms = read(target_mol)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "11895c35-43e9-4880-af59-be157df37b55", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exact_hess = VibrationsData.read(target_mol.parent / f'{mol_name}-ase.json')\n", + "exact_hess" + ] + }, + { + "cell_type": "markdown", + "id": "16c37359-0d6e-4299-8f40-8fc78708e691", + "metadata": {}, + "source": [ + "## Find All Fittings\n", + "Find the approximate hessians produced using each method" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "20b2213c-d98f-47d2-a2ed-b628f00e7cf7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "all_hessians = list(Path(target_method).glob(f\"{mol_name}_*-increment.json\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2056b382-8566-4f2e-a574-961a3268d3c3", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/15 [00:00 list[dict[str, object], str]:\n", + " \"\"\"Load the Hessian and parse the metadata from the filename\n", + " \n", + " Args:\n", + " path: Path to the run path\n", + " Returns:\n", + " Dictionary the includes the metadata:\n", + " \"\"\"\n", + " \n", + " # Get some of the basic information\n", + " _, sampling_method, sampling_options_str = path.name[:-15].rsplit(\"_\", 2)\n", + " sampling_options = dict(x.split(\"=\") for x in re.split(\"-([^\\d]+=.*)\", sampling_options_str) if len(x) > 0)\n", + " \n", + " # For each, load the Hessian on the full dataset and compare to exact answer\n", + " output = []\n", + " with path.open() as fp:\n", + " for line in fp:\n", + " record = json.loads(line)\n", + " compare = compare_hessians(exact_hess.get_atoms(), exact_hess.get_hessian_2d(), record['hessian'])\n", + " output.append({\n", + " 'sampling_method': sampling_method,\n", + " 'options': sampling_options_str,\n", + " 'size': record['count'],\n", + " **sampling_options,\n", + " **asdict(compare)\n", + " }) \n", + " return output\n", + "all_results = pd.DataFrame(sum([load_hessian(path) for path in tqdm(all_hessians)], []))\n", + "print(f'Loaded {len(all_results)} approximate hessians')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "db4ec32b-2b6b-44a5-8bdb-dc95feb6e395", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sampling_methodoptionssizedNzpezpe_errorcpcp_errorhh_errortempsvib_freqsvib_errorsvib_mae
0along-axesd=1.00e-02-N=851.00e-02814.200987-95.264864[0.000397593092606875, 0.002386964975551445, 0...[0.0036833759055666425, 0.0032014502665919545,...[14.201069696784895, 14.20544123215772, 14.216...[95.26810423257896, 95.27849857026263, 95.2846...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[365.26521782818406, 345.1085529599917, 194.17...1027.154434
1along-axesd=1.00e-02-N=8911.00e-0285.163324-104.302527[0.0019348995359107907, 0.008929018823987386, ...[0.002146069462262727, -0.0033406035818439863,...[5.163950489872683, 5.179473698114745, 5.21578...[104.30522343949119, 104.3044661043056, 104.28...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[136.3752974454976, 116.1372867519512, 97.3719...1113.227006
2along-axesd=1.00e-02-N=81771.00e-0286.876866-102.588985[0.0020382429986622493, 0.008341448274375083, ...[0.0020427259995112685, -0.0027530330322316837...[6.878002515584569, 6.8926516980488675, 6.9274...[102.59117141377929, 102.59128810437149, 102.5...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[96.75265542338498, 90.41924803705203, 74.0875...1092.500033
3along-axesd=1.00e-02-N=82631.00e-02889.958157-19.507693[0.0014020270591578593, 0.0023843729911753324,...[0.0026789419390156584, 0.003204042250968067, ...[89.9587466410539, 89.96445676642922, 89.97267...[19.510427288309955, 19.51948303599113, 19.528...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.446...[111.37319602907411, 108.7601947486991, 66.937...263.944079
4along-axesd=1.00e-02-N=83501.00e-02893.839129-15.626722[1.6382310852832182e-08, 0.0004830509673205082...[0.004080952615862665, 0.005105364274822891, 0...[93.83912881523764, 93.83954779804499, 93.8423...[15.630045114126219, 15.644392004375362, 15.65...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[118.00864162563397, 110.49254554846664, 100.8...237.597413
\n", + "
" + ], + "text/plain": [ + " sampling_method options size d N zpe zpe_error \\\n", + "0 along-axes d=1.00e-02-N=8 5 1.00e-02 8 14.200987 -95.264864 \n", + "1 along-axes d=1.00e-02-N=8 91 1.00e-02 8 5.163324 -104.302527 \n", + "2 along-axes d=1.00e-02-N=8 177 1.00e-02 8 6.876866 -102.588985 \n", + "3 along-axes d=1.00e-02-N=8 263 1.00e-02 8 89.958157 -19.507693 \n", + "4 along-axes d=1.00e-02-N=8 350 1.00e-02 8 93.839129 -15.626722 \n", + "\n", + " cp \\\n", + "0 [0.000397593092606875, 0.002386964975551445, 0... \n", + "1 [0.0019348995359107907, 0.008929018823987386, ... \n", + "2 [0.0020382429986622493, 0.008341448274375083, ... \n", + "3 [0.0014020270591578593, 0.0023843729911753324,... \n", + "4 [1.6382310852832182e-08, 0.0004830509673205082... \n", + "\n", + " cp_error \\\n", + "0 [0.0036833759055666425, 0.0032014502665919545,... \n", + "1 [0.002146069462262727, -0.0033406035818439863,... \n", + "2 [0.0020427259995112685, -0.0027530330322316837... \n", + "3 [0.0026789419390156584, 0.003204042250968067, ... \n", + "4 [0.004080952615862665, 0.005105364274822891, 0... \n", + "\n", + " h \\\n", + "0 [14.201069696784895, 14.20544123215772, 14.216... \n", + "1 [5.163950489872683, 5.179473698114745, 5.21578... \n", + "2 [6.878002515584569, 6.8926516980488675, 6.9274... \n", + "3 [89.9587466410539, 89.96445676642922, 89.97267... \n", + "4 [93.83912881523764, 93.83954779804499, 93.8423... \n", + "\n", + " h_error \\\n", + "0 [95.26810423257896, 95.27849857026263, 95.2846... \n", + "1 [104.30522343949119, 104.3044661043056, 104.28... \n", + "2 [102.59117141377929, 102.59128810437149, 102.5... \n", + "3 [19.510427288309955, 19.51948303599113, 19.528... \n", + "4 [15.630045114126219, 15.644392004375362, 15.65... \n", + "\n", + " temps \\\n", + "0 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "1 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "2 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "3 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "4 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "\n", + " vib_freqs \\\n", + "0 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "2 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "3 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.446... \n", + "4 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "\n", + " vib_errors vib_mae \n", + "0 [365.26521782818406, 345.1085529599917, 194.17... 1027.154434 \n", + "1 [136.3752974454976, 116.1372867519512, 97.3719... 1113.227006 \n", + "2 [96.75265542338498, 90.41924803705203, 74.0875... 1092.500033 \n", + "3 [111.37319602907411, 108.7601947486991, 66.937... 263.944079 \n", + "4 [118.00864162563397, 110.49254554846664, 100.8... 237.597413 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_results.head()" + ] + }, + { + "cell_type": "markdown", + "id": "0f243a23-ed89-4f5e-aeac-f23722ef10af", + "metadata": {}, + "source": [ + "Coerce columns I know should be numeric" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2d315d44-7564-468f-bd03-8bbedf8b424c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "for col in ['d', 'N']:\n", + " all_results[col] = pd.to_numeric(all_results[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "eee03c3a-4a53-4e84-995a-c2191e6f6332", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sampling_methodoptionssizedNzpezpe_errorcpcp_errorhh_errortempsvib_freqsvib_errorsvib_mae
0along-axesd=1.00e-02-N=850.018.014.200987-95.264864[0.000397593092606875, 0.002386964975551445, 0...[0.0036833759055666425, 0.0032014502665919545,...[14.201069696784895, 14.20544123215772, 14.216...[95.26810423257896, 95.27849857026263, 95.2846...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[365.26521782818406, 345.1085529599917, 194.17...1027.154434
1along-axesd=1.00e-02-N=8910.018.05.163324-104.302527[0.0019348995359107907, 0.008929018823987386, ...[0.002146069462262727, -0.0033406035818439863,...[5.163950489872683, 5.179473698114745, 5.21578...[104.30522343949119, 104.3044661043056, 104.28...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[136.3752974454976, 116.1372867519512, 97.3719...1113.227006
2along-axesd=1.00e-02-N=81770.018.06.876866-102.588985[0.0020382429986622493, 0.008341448274375083, ...[0.0020427259995112685, -0.0027530330322316837...[6.878002515584569, 6.8926516980488675, 6.9274...[102.59117141377929, 102.59128810437149, 102.5...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[96.75265542338498, 90.41924803705203, 74.0875...1092.500033
3along-axesd=1.00e-02-N=82630.018.089.958157-19.507693[0.0014020270591578593, 0.0023843729911753324,...[0.0026789419390156584, 0.003204042250968067, ...[89.9587466410539, 89.96445676642922, 89.97267...[19.510427288309955, 19.51948303599113, 19.528...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.446...[111.37319602907411, 108.7601947486991, 66.937...263.944079
4along-axesd=1.00e-02-N=83500.018.093.839129-15.626722[1.6382310852832182e-08, 0.0004830509673205082...[0.004080952615862665, 0.005105364274822891, 0...[93.83912881523764, 93.83954779804499, 93.8423...[15.630045114126219, 15.644392004375362, 15.65...[1.0, 3.9291338582677167, 6.858267716535433, 9...[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...[118.00864162563397, 110.49254554846664, 100.8...237.597413
\n", + "
" + ], + "text/plain": [ + " sampling_method options size d N zpe zpe_error \\\n", + "0 along-axes d=1.00e-02-N=8 5 0.01 8.0 14.200987 -95.264864 \n", + "1 along-axes d=1.00e-02-N=8 91 0.01 8.0 5.163324 -104.302527 \n", + "2 along-axes d=1.00e-02-N=8 177 0.01 8.0 6.876866 -102.588985 \n", + "3 along-axes d=1.00e-02-N=8 263 0.01 8.0 89.958157 -19.507693 \n", + "4 along-axes d=1.00e-02-N=8 350 0.01 8.0 93.839129 -15.626722 \n", + "\n", + " cp \\\n", + "0 [0.000397593092606875, 0.002386964975551445, 0... \n", + "1 [0.0019348995359107907, 0.008929018823987386, ... \n", + "2 [0.0020382429986622493, 0.008341448274375083, ... \n", + "3 [0.0014020270591578593, 0.0023843729911753324,... \n", + "4 [1.6382310852832182e-08, 0.0004830509673205082... \n", + "\n", + " cp_error \\\n", + "0 [0.0036833759055666425, 0.0032014502665919545,... \n", + "1 [0.002146069462262727, -0.0033406035818439863,... \n", + "2 [0.0020427259995112685, -0.0027530330322316837... \n", + "3 [0.0026789419390156584, 0.003204042250968067, ... \n", + "4 [0.004080952615862665, 0.005105364274822891, 0... \n", + "\n", + " h \\\n", + "0 [14.201069696784895, 14.20544123215772, 14.216... \n", + "1 [5.163950489872683, 5.179473698114745, 5.21578... \n", + "2 [6.878002515584569, 6.8926516980488675, 6.9274... \n", + "3 [89.9587466410539, 89.96445676642922, 89.97267... \n", + "4 [93.83912881523764, 93.83954779804499, 93.8423... \n", + "\n", + " h_error \\\n", + "0 [95.26810423257896, 95.27849857026263, 95.2846... \n", + "1 [104.30522343949119, 104.3044661043056, 104.28... \n", + "2 [102.59117141377929, 102.59128810437149, 102.5... \n", + "3 [19.510427288309955, 19.51948303599113, 19.528... \n", + "4 [15.630045114126219, 15.644392004375362, 15.65... \n", + "\n", + " temps \\\n", + "0 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "1 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "2 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "3 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "4 [1.0, 3.9291338582677167, 6.858267716535433, 9... \n", + "\n", + " vib_freqs \\\n", + "0 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "2 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "3 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.446... \n", + "4 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... \n", + "\n", + " vib_errors vib_mae \n", + "0 [365.26521782818406, 345.1085529599917, 194.17... 1027.154434 \n", + "1 [136.3752974454976, 116.1372867519512, 97.3719... 1113.227006 \n", + "2 [96.75265542338498, 90.41924803705203, 74.0875... 1092.500033 \n", + "3 [111.37319602907411, 108.7601947486991, 66.937... 263.944079 \n", + "4 [118.00864162563397, 110.49254554846664, 100.8... 237.597413 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a238ef1e-eae0-4195-a254-7c34fc63cc8d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "along-axes 133\n", + "random-dir-same-dist 48\n", + "random-dir-variable-dist 48\n", + "Name: sampling_method, dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_results['sampling_method'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "c04c6df3-882c-4ab8-954b-ff316ff1134c", + "metadata": {}, + "source": [ + "## Compute Performance Metrics\n", + "Get things like the error in ZPE or vibrational frequencies" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "38d7ff93-3cd6-4489-96fb-5a1f6a917465", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "subset = all_results.query('d==0.01 and (sampling_method != \"along-axes\" or N == 4)')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "16cdf7cf-4d09-415e-8996-3222ee33307b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVQAAADwCAYAAABfaJz5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABiWklEQVR4nO2dd3xTVRuAnyTdE0o3lLJHKatAkaEMGQUBEQREpgxlyBBkOAE/VFAZioCILJUP5BNwALL3HgUZZVNogZaWAt0zud8fIaFpkzRt0sl5/OUn99xzz33vSfPeM94hkyRJQiAQCARmIy9uAQQCgaCsIBSqQCAQWAihUAUCgcBCCIUqEAgEFkIoVIFAILAQQqEKBAKBhRAKVSAQCCyEUKgCgUBgIYRCFQgEAgthVdwClERUKhX379/H2dkZmUxW3OIIBIJiRJIkEhMT8fX1RS43PgYVClUP9+/fx8/Pr7jFEAgEJYjIyEgqVapktE6ZVKiJiYm0b9+ezMxMlEol48ePZ+TIkSZf7+zsDKg70MXFpbDEFAgEpYCEhAT8/Py0esEYsrIYHEWpVJKeno6DgwMpKSkEBgZy6tQpKlSoYNL1CQkJuLq6Eh8fLxSqQPCckx99UCZHqAqFAgcHBwDS0tJQKpUU1ntDqZI4Gf6ImMQ0PJ3tCK7qhkIu1l0FgueRErnLf/DgQbp3746vry8ymYw//vgjV50lS5ZQtWpV7OzsaNKkCYcOHdI5/+TJExo2bEilSpWYOnUq7u7uFpdz+8UoWs/dS//lx5mw/hz9lx+n9dy9bL8YZfF7CQSCkk+JHKEmJyfTsGFD3nrrLXr37p3r/G+//cbEiRNZsmQJrVq1YtmyZXTp0oWwsDAqV64MQLly5fj333958OABvXr14vXXX8fLy0vv/dLT00lPT9ceJyQk5Cnj9otRjP41lJzj3uj4NEb/GsrSgUGEBPqY/tAmoFQqyczMtGibAsHzjrW1NQqFwiJtlfg1VJlMxubNm+nZs6e2rHnz5gQFBbF06VJtWd26denZsydffvllrjZGjx5N+/bt6dOnj957zJw5k1mzZuUqN7RmolRJtJ67l6j4NP0yA96udhye1t4i039JkoiOjubJkydmtyUQCHJTrlw5vL299ZpJluk11IyMDM6cOcP06dN1yjt16sTRo0cBePDgAfb29ri4uJCQkMDBgwcZPXq0wTY/+OADJk2apD3W7OoZ4mT4I4PKFEACouLTOBn+iBbVTdsIM4ZGmXp6euLg4CBsYwUCCyFJEikpKcTExADg42PerLLUKdSHDx+iVCpzTd+9vLyIjo4G4O7duwwfPhxJkpAkiXfffZcGDRoYbNPW1hZbW1uTZYhJNKxMC1LPGEqlUqtMTbVSEAgEpmNvbw9ATEwMnp6eZk3/S51C1ZBzlCZJkrasSZMmnDt3rtDu7elsZ9F6xtCsmWqsFgQCgeXR/L4yMzPNUqglcpffGO7u7igUCu1oVENMTIzBTSdLE1zVDR9XO9TqW4XC4SZWLudQONwEVMgAH1e1CZWlENN8gaDwsNTvq9QpVBsbG5o0acKuXbt0ynft2kXLli3Nanvx4sUEBATQrFkzo/UUchkzugegcL6IY405OPgvx77iehz8l+NYYw4K54vq88IeVSB4riiRU/6kpCRu3LihPQ4PD+fcuXO4ublRuXJlJk2axKBBg2jatCktWrTgxx9/JCIiglGjRpl137FjxzJ27Fjtrp4xrJwvYV/pV5Ak4JnilFvFY1/pV6ycmwCWNZsSCAQlmxKpUE+fPk27du20x5od+CFDhrB69Wr69etHXFwcn332GVFRUQQGBrJt2zb8/f2LRD6lSsmcIzPUyjTnVEEmQyZJzD06k3Z+7VDILWPfZglKmlfX7du3qVq1KmfPnqVRo0bFJodAYClKpEJt27Ztnq6iY8aMYcyYMUUkkS6h0ad4kJmQW5k+RZLJiM6IJzT6FM18Xyhi6fSz/WIUs/4O0zH38nG1Y0b3AIs7IAgEzysWWUPNzMwkMjKSq1ev8ujRI0s0WaKJjTxq0XqFjcarK6ftrMarS7jKCgSWocAKNSkpiWXLltG2bVtcXV2pUqUKAQEBeHh44O/vz8iRIzl16pQlZS10TN2U8lCqTGrP1HoFJSUjy+AnLVMJqKf5s/4Oy+UiC2jLZv4dhlIl5dluQdi+fTutW7emXLlyVKhQgW7dunHz5k2D9Q8cOEBwcDC2trb4+Pgwffp0srKe3btt27aMHz+eqVOn4ubmhre3NzNnztRp48qVK7Ru3Ro7OzsCAgLYvXu3wZgQGpRKJcOHD6dq1arY29tTu3Ztvv32W+35tLQ06tWrx9tvv60tCw8Px9XVleXLlwNq072vvvqKatWqYW9vT8OGDfn999+19R8/fsyAAQPw8PDA3t6emjVrsmrVKlO7UlAKKNCUf8GCBXz++edUqVKFHj16MH36dCpWrIi9vT2PHj3i4sWLHDp0iI4dO/LCCy+waNEiatasaWnZLY6pm1JB3s3wuryCGIUCSc+0XyZJeCmVBHkbV8zmEvDpDoPn2tX2YNVbwSZ5dUXn8OpqPXcfj5IzctW9PeeVfMuYnJzMpEmTqF+/PsnJyXz66ae89tpreu2E7927R9euXRk6dCg///wzV65cYeTIkdjZ2ekozTVr1jBp0iROnDjBsWPHGDp0KK1ataJjx46oVCp69uxJ5cqVOXHiBImJiUyePDlPOVUqFZUqVWLDhg24u7tz9OhR3n77bXx8fOjbty92dnasXbuW5s2b07VrV7p3786gQYNo166dNtbuxx9/zKZNm1i6dCk1a9bk4MGDDBw4EA8PD9q0acMnn3xCWFgY//zzD+7u7ty4cYPU1NR896mg5FIghXr06FH27dtH/fr19Z4PDg5m2LBh/PDDD6xYsYIDBw6UCoVqKooqrZmeKmOSk1p5Zleqsqdrv1NSZCiqtC4uEbUUpVeXPnIGt1mxYgWenp6EhYXh5OSkc27JkiX4+fnx/fffI5PJqFOnDvfv32fatGl8+umn2vQTDRo0YMaMGQDUrFmT77//nj179tCxY0d27tzJzZs32b9/P97e3gB8/vnndOzY0aic1tbWOvEcqlatytGjR9mwYQN9+/YFoFGjRsyePZuRI0fSv39/bt68qR31JicnM3/+fPbu3UuLFi0AqFatGocPH2bZsmW0adOGiIgIGjduTNOmTQGoUqVKAXpUUJIpkEL93//+Z1I9W1vbYts4KlTkCjq0n8P8Le8wp0I5Hlg968YKSiUfPHyMU8AXUMg7/GGfdTYs4lMlXxCvrsPT2hmpmT9u3rzJJ598wvHjx3n48CEqlXoZJCIigoCAAJ26ly9fpkWLFjpG1q1atSIpKYm7d+9qI4nldCP28fHR+mJfvXoVPz8/rTIF9Qs+O126dNGGe/T39+fSpUsA/PDDD/z000/cuXOH1NRUMjIyclkfTJ48mT///JNFixZpR5oAYWFhpKWl5VLcGRkZNG7cGFAH6enduzehoaF06tSJnj17mm07LShZlMhd/lJBQA86AO22TyM04wH/qVCecBsbhiRKbIx/B6vERhT2T8XBJu+vT+PVFR2fpncdVRMZK7tXlyntmkr37t3x8/Nj+fLl+Pr6olKpCAwMJCMj95JCdvfh7GWg68libW2t+wwymVZR62sjJz/99JN2qq1pa8OGDbz33nvMmzePFi1a4OzszNdff82JEyd0ro2JieHq1asoFAquX79OSEgIgPb+W7dupWLFijrXaOJEdOnShTt37rB161Z2797Nyy+/zNixY/nmm2+MyisoPVjMU+rMmTOWaqr0ENADxcSLNHv9N7qkqOOpHq3akh2qYA5diyWrkDelTEHj1QXZ3Q/QOS4sr664uDguX77Mxx9/zMsvv0zdunV5/PixwfoBAQEcPXpUx2Tu6NGjODs751JShqhTpw4RERE8ePBAW5Zzc7RixYrUqFGDGjVqaG2XDx06RMuWLRkzZgyNGzemRo0aejfPhg0bRmBgID///DNTp04lLCxMK7utrS0RERHatjWf7JHLPDw8GDp0KL/++isLFy7kxx9/NOm5BKUDiynU1157zVJNFRum7vLrIFdAjXaEOFVn/oNYvvR5AVd7axLSsjgX+aTQZM0PIYE+LB0YhLer7vTf29WuUAJhayhfvjwVKlTgxx9/5MaNG+zdu1cnTGJOxowZQ2RkJOPGjePKlSv8+eefzJgxg0mTJuWZvldDx44dqV69OkOGDOH8+fMcOXKEjz76CDDur12jRg1Onz7Njh07uHbtGp988kkuRbx48WKOHTvGzz//zJtvvsnrr7/OgAEDyMjIwNnZmffff5/33nuPNWvWcPPmTc6ePcvixYtZs2YNAJ9++il//vknN27c4NKlS2zZsoW6deua9FyC0kG+5naaxfmcSJJUJuxP8+N6mpOqAb2o+qAOeAXyYk07tpyPYv/VWJpWsVyAFHMICfShY4B3kXpKyeVy1q9fz/jx4wkMDKR27dp89913tG3bVm/9ihUrsm3bNqZMmULDhg1xc3Nj+PDhfPzxxybfU6FQ8McffzBixAiaNWtGtWrV+Prrr+nevTt2dobXk0eNGsW5c+fo168fMpmM/v37M2bMGP755x9AbYo1ZcoUVqxYoR1xLl68mIYNG/LJJ58wd+5c/vOf/+Dp6cmXX37JrVu3KFeuHEFBQXz44YeAOg7FBx98wO3bt7G3t+fFF19k/fr1Jj+boOSTr4j9bm5u/PLLL7l2ZyVJol+/fjrTrNKMuVlPfz9zl/f/9y+BFV3YMu5Fs2RJS0sjPDxcmz9LkH+OHDlC69atuXHjBtWrVy9ucQQlEGO/s0KL2N+2bVucnJxo06ZNrnOancznmXtJ9/jr5l+kKJW0qRVMu9oeJm2SCCzL5s2bcXJyombNmty4cYMJEybQqlUroUwFhU6+FOqmTZsMntu+fbvZwpR2YhKjWHJuCeVtXNj/1hjkslIXHbFMkJiYyNSpU4mMjMTd3Z0OHTowb9684hZL8Bxgln1MdHS0jr3f807g0R+wV6l4nJHAjSc3qFW+VnGL9FwyePBgBg8eXNxiCJ5DzBpCderUyVJylAmsKzahcZrafOpU9Cmi4lPZcCqyRJhPCQSCwscshVrCM1DnmwKZTWWnUjDNnirUk1EnCVl4iKkbz/Pv3SeWE1IgEJRYzFKoZW2zZezYsYSFhRU8SpZ3fZplqkejZ6JP0qqG2mRq/9VYS4koEAhKMGLXxJJY2RBQoR4OKhXxmUkE+CcDQqEKBM8LQqFaGGu/YILS0nFEga+72l/8wr14YhPTi1kygUBQ2JilUG1sbCwlR9mhUjCzY+M4nOJIrzohBFZUGwIfuCZGqQJBWccshXr69GlLyVF2qNyCCm0+xCrkSwDa1vIEYP/VmOKUSo1KCeGH4MLv6v+rlMUtkcUYOnQoPXv2LG4xtFSpUoWFCxdqj/PKGFAWadu2LRMnTtQe5+yTsohF4rSlpaVx/vx5YmJitGHMNPTo0cMStyg9OHlAmynaw5dqufH9Pjh6Mw6VSkJeXFlGw/6C7dMg4f6zMhdfCJkLAc/Zd1QMREVFUb58+eIWo1g5deoUjo6OJtWtUqUKEydO1FHIpQGzFer27dsZPHgwDx8+zHVOJpOhVJadUVB++O/l//JL2C/0qdWXRf0782JN9+JVphsGQ86IqAlR6vK+PxeJUs3IyHhul4nycoDJzMzMFee1rOHh4VHcIhQ6Zm9Kvfvuu/Tp04eoqChUKpXOp7QpU7PtUDWkxZMZdZa7SXc5E3Oa7g19KedQCIokI9nwJ/NpShOVUj0yNZamb/s03em/oTbzSdu2bXn33XeZNGkS7u7udOzYkfnz51O/fn0cHR3x8/NjzJgxJCUlaa9ZvXo15cqVY8eOHdStWxcnJydCQkKIinqWmVWpVDJp0iRt4r+pU6fmsolOT09n/PjxeHp6YmdnR+vWrXXM4fbv349MJmPHjh00btwYe3t72rdvT0xMDP/88w9169bFxcWF/v37k5KSYvQ5Y2Ji6N69O/b29lStWpW1a9fmqpN9yn/79m1kMhkbNmygbdu22NnZ8euvv+a65s6dO3Tv3p3y5cvj6OhIvXr12LZtm7YPjCUVhGfLIF988QVeXl6UK1eOWbNmkZWVxZQpU3Bzc6NSpUqsXLlS57p79+7Rr18/bfjFV199ldu3bxvtg+TkZAYPHoyTkxM+Pj56XX1zTvlnzpxJ5cqVsbW1xdfXl/HjxwPqv5s7d+7w3nvvIZPJSpV5ptkKNSYmhkmTJuHl5WUJeYoVs+1QNTy8QbPj6myWZx6cIUtVsIyhefKFr+HPhkHqOneO6k7zcyGpz9/JlvJ6YX39bRaANWvWYGVlxZEjR1i2bBlyuZzvvvuOixcvsmbNGvbu3cvUqVN1rklJSeGbb77hl19+4eDBg0RERPD+++9rz8+bN4+VK1eyYsUKDh8+zKNHj9i8ebNOG1OnTmXjxo2sWbOG0NBQatSoQefOnXOFmZw5cybff/89R48eJTIykr59+7Jw4UL++9//snXrVnbt2sWiRYuMPuPQoUO5ffs2e/fu5ffff2fJkiXalCzGmDZtGuPHj+fy5ct07pw7nc3YsWNJT0/n4MGDXLhwgblz52ojvWVPKhgWFsann37Khx9+yIYNG3Ta2Lt3L/fv3+fgwYPMnz+fmTNn0q1bN8qXL8+JEycYNWoUo0aNIjIyUtv37dq1w8nJiYMHD3L48GHtS01flgUNU6ZMYd++fWzevJmdO3eyf/9+o0Hnf//9dxYsWMCyZcu4fv06f/zxhzZH3aZNm6hUqRKfffYZUVFROi/TEo9kJm+99Zb0008/mdtMiSI+Pl4CpPj4+II1kJkuZf3HU2qxIkAKXB0o/Rvzr/T93uvS60uPSDEJaflqKjU1VQoLC5NSU1Nzn5zhYvjz6+vqOuf/Z7ye5nP+f8/anVtVf5180qZNG6lRo0ZG62zYsEGqUKGC9njVqlUSIN24cUNbtnjxYsnLy0t77OPjI82ZM0d7nJmZKVWqVEl69dVXJUmSpKSkJMna2lpau3attk5GRobk6+srffXVV5IkSdK+ffskQNq9e7e2zpdffikB0s2bN7Vl77zzjtS5c2eD8l+9elUCpOPHj2vLLl++LAHSggULtGWAtHnzZkmSJCk8PFwCpIULFxrtm/r160szZ840Wic7Y8aMkXr37q09HjJkiOTv7y8plUptWe3ataUXX3xRe5yVlSU5OjpK69atkyRJklasWCHVrl1bUqlU2jrp6emSvb29tGPHDr33TUxMlGxsbKT169dry+Li4iR7e3tpwoQJ2jJ/f39tn8ybN0+qVauWlJGRobfN7HWLAmO/s/zoA7PXUL///nv69OnDoUOHqF+/fq51IM0w/rnCygaFTyOapt1gn6MDp6JPse1CLS7dT+DgtVh6N6lkmft8aGTkKXuaINDJxJlD9noTLxRcphxoMnxq2LdvH1988QVhYWEkJCSQlZVFWloaycnJ2g0LBwcHnVB72ZPwxcfHExUVpc0sCmBlZUXTpk210/6bN2+SmZlJq1attHWsra0JDg7m8uXLOvJkT/jn5eWFg4MD1apV0yk7efIkAGvXruWdd97Rnvvnn3949OiR9v4a6tSpQ7ly5fLVN/Xq1ePOnTsAvPjii/zzzz+MHz+e0aNHs3PnTjp06EDv3r115DUlqWC9evV0sh14eXkRGBioPVYoFFSoUEHbv2fOnOHGjRs4OzvrtJOWlsbNmzc5dOgQXbp00ZYvW7ZMmyMs+3fi5uZG7dq1DT57nz59WLhwIdWqVSMkJESbmtvKqnSnuTNb+v/+97/s2LEDe3t77bqUBplM9nwqVIBKTQm+dEmrUNvWbsWl+wnst6RCtTFhx9S/pXo3PyEK/euoMvV5/2wpBU1p10Sy7+reuXOHrl27MmrUKP7zn//g5ubG4cOHGT58OJmZmdp6+pLwSfmIGyHpSeynKc9Zlv1eMpnMaALAHj160Lx5c+25ihUrsmPHDr33MoXsfbNt2zZtH9jb2wMwYsQIOnfuzNatW9m5cydffvkl8+bNY9y4cSYnFdT3PMaeUaVS0aRJE73rwB4eHtjY2HDu3DltmZeXl97cW3nh5+fH1atX2bVrF7t372bMmDF8/fXXHDhwoFRvzpm9hvrxxx/z2WefER8fz+3btwkPD9d+bt26ZQkZSyd+wTRLVW8MhcaE0rqm2q//0PVYlKoiDCojV6hNowCDafpC5hR6ymtQ2y1nZWUxb948XnjhBWrVqsX9+8bWd3Pj6uqKj48Px48f15ZlZWXprNfVqFEDGxsbDh8+rC3LzMzk9OnTZuVwcnZ21km+Z29vT926dcnKytKxyb569SpPnjzJV9v+/v7adrMnJPTz82PUqFFs2rSJyZMns3z5csD0pIL5JSgoiOvXr+Pp6Zkr2aCrqyv29vY6ZZo+sba21vlOHj9+zLVr14zey97enh49evDdd9+xf/9+jh07xoUL6tmRjY1NqdvUBgso1IyMDPr162dyErXnhkrB1MzMpGFaOt2rhFDL2xoXOyuepGQWffK+gB5q0yiXHMn4XHyLzGQKoHr16mRlZbFo0SJu3brFL7/8wg8//JDvdiZMmMCcOXPYvHkzV65cYcyYMToKzNHRkdGjRzNlyhS2b99OWFgYI0eOJCUlheHDh1vwiaB27dqEhIQwcuRITpw4wZkzZxgxYoR2lGkOEydOZMeOHYSHhxMaGsrevXu1LwRTkgoWhAEDBuDu7s6rr77KoUOHCA8P58CBA0yYMIG7d+/qvcbJyYnhw4czZcoU9uzZw8WLFxk6dKhRnbB69WpWrFjBxYsXtX8L9vb22iy0VapU4eDBg9y7d0+vSWZJxWwtOGTIEH777TdLyFK2cPFB7urHr1EP+MS3IxUcyvNiTbUd3oHi8JoK6AETL8KQLdB7hfr/Ey8UqVF/o0aNmD9/PnPnziUwMJC1a9fy5Zdf5rudyZMnM3jwYIYOHaqd7ubMujtnzhx69+7NoEGDCAoK4saNG+zYsaNQjOtXrVqFn58fbdq0oVevXrz99tt4enqa3a5SqWTs2LHUrVuXkJAQateuzZIlSwB1UsFevXrRr18/mjdvTlxcHGPGjDH7ng4ODhw8eJDKlSvTq1cv6taty7Bhw0hNTTWaT+nrr7/mpZdeokePHnTo0IHWrVvTpEkTg/XLlSvH8uXLadWqFQ0aNGDPnj38/fffVKhQAYDPPvuM27dvU7169VJlv5qvJH36GD9+PD///DMNGzakQYMGudY/5s+fb5aAxYG5Sfq03DmmHhWW8weZjA2nI5n6+3kaVHLlr3dbm9SESNInEBQ+xZKkTx8XLlzQJui7ePGizrnSZJALasP+xYsXW27txl+965mpzORi3EVa1aiBk60Vvq72ZClVWCnEMolAUJYwe4RaFrHYCPUpIRtDuJd0j9Uhq2no3jhfilSMUAWCwsdSI1QxRCpsjv9AvRS1a+Wp6FNiVCoQlGHM/nV/+eWXuXyBAVauXMncuXP1XPGccWkTwTHhgFqhargTl1y05lMCgaDQMVuhLlu2jDp16uQqr1evXoFMYsoclZrRLE1tj3ou5hxpWWm8+v1h2ny9XyTvEwjKGGYr1OjoaHx8fHKVe3h4lK6gBoVFpWZUzczCXZKRocrgwsMLVCyvtlEUuaYEgrKF2QrVz8+PI0eO5Co/cuQIvr4Fi1BUpvALRgY0S1aHvzsVfUobxb9Y7FEFAkGhYbbZ1IgRI5g4cSKZmZm0b98egD179jB16lQmT55stoClHhdfcKlEs7TH/OPkwMnok8xtOQyA8/fiiUtKp4KTbTELKRAILIHZCnXq1Kk8evSIMWPGaOMl2tnZMW3aND744AOzBSwT+DWj9ZW/mFC+MS80fR8vFzvq+rhwOSqBg9djea2xhYKlCASCYsXsKb9MJmPu3LnExsZy/Phx/v33Xx49esSnn35qCfnKBpWC8UHBCFs/At3VodPa1la70/1++i5/nrvHsZtxhb7rr1Qp1aEEb23jVPQplCJJX6FRkpP0aTIGZI8alRem9G/OpHyWYubMmTphCUvad52dAo1QIyIiqFy5sk6Zk5OTwdQh9+7d04mg89zRZAg0Gw5Wz6b29tbq6E5HbsZx5GYcAD6udszoHkBIYO5NPnPZfWc3c07O4UHKA22Zl4MX04On08G/g8XvJ9ClJCXp8/PzIyoqCnd39+IWpUB8++23JodzHDp0KE+ePCmyl1mBRqjNmjVj5MiR2sC7+oiPj2f58uUEBgayadOmAgtYJrBxBCtbkjOT2XZrG1N3L2DBrtyhzaLj0xj9ayjbL1rWOmL3nd1M2j9JR5kCxKTEMGn/JHbf2W3R+xnCWAqNso63tze2tobXyrPHgy1MMjIyUCgUeHt7l9pgzq6uriYF8C4OCqRQL1++jKurKyEhIXh5efHKK68wcuRIxo0bx8CBAwkKCsLT05PVq1fz9ddfM27cOEvLXSp5nPaYaYem8c/d1Uiy9FznNe/cWX+HmTT9T8lMMfhJV6rbV6qUzDk5B0lPcGnp6X9zTs7Rmf4bajO/iCR9z8hvkr5ly5ZRsWJFvWnZhwwZAqgzE7z66qt4eXlpZ4i7d+u+HKtUqcLs2bMZOnQorq6ujBw5MteU35SEfxpmzZqFp6cnLi4uvPPOO0ZfkhkZGUydOpWKFSvi6OhI8+bN2b9/v7GuBNSRwry8vHB2dmb48OGkPbXj1pBzyv/7779Tv3597O3tqVChAh06dCA5OZmZM2eyZs0a/vzzT22yP1Pubw4FUqhubm5888033L9/n6VLl1KrVi0ePnzI9evXAXVMxTNnznDkyBGddAklHYtlPdVH2J9U+rUfXtiCTIXC4Y7eahIQFZ/GyfBHes9np/l/mxv8vLfvPUAd3DrnyDQnD1IeEBoTqj0O2Riit82CIJL0GcZYkr4+ffrw8OFD9u3bpy17/PgxO3bsYMCAAQAkJSXRtWtXdu/ezdmzZ+ncuTPdu3cnIiJCp62vv/6awMBAzpw5wyeffJJLDlMT/u3Zs4fLly+zb98+1q1bx+bNm5k1a5bB53vrrbc4cuQI69ev5/z58/Tp04eQkBCtntDHhg0bmDFjBp9//jmnT5/Gx8dHG7JQH1FRUfTv359hw4Zx+fJl9u/fT69evZAkiffff5++fftqX8hRUVG0bNnSYFsWwWJZrsoQZifp08fFzZI0w0Wa8kNDKXB1oFTzm3cl/2lbDH7+OHtXkiTjycMCVwca/IzeNVqSJEnaenOr0Xqaz9abW7XtvrjuRb118otI0rdAW0YBkvT16NFDGjZsmPZ42bJlkre3t5SVlWXwmoCAAGnRokXaY39/f6lnz546dTT3P3v2rMF29CX8c3Nzk5KTk7VlS5culZycnLRJANu0aaNNynfjxg1JJpNJ9+7d02n35Zdflj744AOD923RooU0atQonbLmzZtLDRs21JFF812fOXNGAqTbt2/rbS97XWOUmCR9AhPxCwagZWIs/9i5YeV4kwwjjlKeznlHljrx5gmD5xRPU5p4OJgWnDd7ve29t5t0jSmIJH2m9Y2+JH0DBgzg7bffZsmSJdja2rJ27VreeOMNFAr1d5ucnMysWbPYsmUL9+/fJysri9TU1Fwj1JzfgT5MSfjXsGFDHBwctMctWrQgKSmJyMhIbaR9DaGhoUiSRK1atXTK09PTtUGkNSmxAQYOHMgPP/zA5cuXGTVqlM41LVq00Bmp55Tp5Zdfpn79+nTu3JlOnTrx+uuvF9sGoFCoRcVTA//myeq1QLndPZCngyr3RoW7kw3BVd3ybNLB2iHPOkGeQXg5eBGTEqN3HVWGDC8HL4I8g/LVrqlYMkmfJEkkpWUBkJKh1Jt0D8pOkr7u3bujUqnYunUrzZo149ChQzoB26dMmcKOHTv45ptvtDmuXn/99Vzrmtnvow9TE/4ZQt+zq1QqFAoFZ86c0b4ANGgUaXazrYKGyVQoFOzatYujR4+yc+dOFi1axEcffcSJEyeoWrVqgdo0BxFLrijxa4aPUomXzBGZTIWVfbjeagmpWewKi7bILRVyBdODpwNq5ZkdzfG04GnaEW1hYm6SvivRicRlKvDw9GbHvoNciU4kPjWjzCbps7e3p1evXqxdu5Z169ZRq1YtnbQihw4dYujQobz22mvUr18fb29vbt++ne/nMjXh37///ktqaqr2+Pjx4zg5OVGpUm7HlMaNG6NUKomJicmV7M/b2xtAp0yTMqZu3bo6yf409zGGTCajVatWzJo1i7Nnz2JjY6NdUy/qZH9CoRYllZ5O+1GPglzL6c75vV1sCfBxIUOpYtSvoaw/GZGriYLQwb8D89vOx9NBN8+Rl4MX89vOLzI71IIm6UtOV4/cMpXqkeKbw99h5eKFbN/yF/tPnGPE2++UySR9oN7g3bp1KytXrmTgwIE652rUqMGmTZs4d+4c//77L2+++WYuqwBTMDXhX0ZGBsOHDycsLIx//vmHGTNm8O677+pNxlerVi0GDBjA4MGD2bRpE+Hh4Zw6dYq5c+eybds2g7JMmDCBlStXsnLlSq5du8aMGTO4dOmSwfonTpzgiy++4PTp00RERLBp0yZiY2O1L84qVapw/vx5rl69ysOHDwvdPE1M+YuSp+uo78Tc593RR6lg78nJ8EfEJKbh6WxHcFU3JEli9tbL/PXvfVpWt5zhdQf/DrTza0doTCgxKTE4W1WgXoWG2CqsDU6dLU32JH0ffPABL730El9++SWDBw82eI0kSTxK1v0RDH77XR7GPODTyWOQyeX0emMQr732GvHx8do6c+bMQaVSMWjQIBITE2natGmhJukbMWIEbdq0wcvLi9mzZ+vdTS8I7du3x83NjatXr/Lmm2/qnFuwYAHDhg2jZcuWuLu7M23aNBISEvJ9j1GjRnHu3Dn69euHTCajf//+jBkzhn/++Uen3ssvv0zNmjV56aWXSE9P54033mDmzJkG2121ahWzZ89m8uTJ3Lt3jwoVKtCiRQu6du1q8Jp+/fpx8+ZNpk2bRlpaGr1792b06NHapZWcuLi4cPDgQRYuXEhCQgL+/v7MmzdPa100cuRI9u/fT9OmTUlKSmLfvn20bds2331kKiIFih4snQJFS1YG/NAafBpCtwVg62SwakxCGp4udtrUDP5VquBggVFPfGoG95+kaUd7ANYKOb7l7HC1t8nzekmSSE5XkqVSYSWX42irKFRlnJSWxa2HSXnWq+buhJOdGB8ICkaxp0Dp2rWrzojg888/15l2xcXFERAQUNDmyyZWNvDuSei93KgyBfB0efalpmUquf0wmbRM89aC4lMzuBOXoqNMQT2VvhOXQnyqcU+m+NQMrkQncuthEhGPUrj1MEm7jllYpGRmmVQvqwBTXYHA0hRYoe7YsYP09GfePnPnztUxms7KyuLq1avmSVeGOXLvCKN2jWLRWeNG4yqVREJqJplKFTdjkkhIVU9/NTveT1IySErLytO3WZIk7j9JM1rn/pM0g+2Yq4wLwqPkDKLjjcuswUrPOp5AUNQUeI6U84cnVg7ygUpFQtx1jtw/QlxaHOMaG3bNlctluDvZYm2jIE0lcScumXIONiSlZ5k8bddM03Mqw5xkKlXcjE2mSgUHbTLB1IwsspQS9x7nrYxd7KzNnv5nX891trNC/vTfKiN/X9YK9dKDQFDciEWnoiblEXzbkGbKFPDz5eqjq8Snx+Nq62rwErlcRqXyDjxKk3iUnMHjlNyjQc1I0b8CONhYkZKhJDUjS/3/TCU+rqatv6ZkZGmVGMDDJP3303f/5HRlnuuYhtZg0zOVPEhMR6WSqOKutpu0Vsip7e1MSkYWd+IM+9P7lrMrkk01gSAvCqxQNcEGcpYJ8sDBDWxdcE9IoJqDN7dSojkdfZqX/V82fp0kUbGcPfGpmUYDp0TEpegx3zc+wsuOh7Mtcvmz79FaIcNaIc9zdAvwOCWDxPRMHGyscLBRYJ0jZba+DTEruRxbazkp6VlaudMyldg9DW9orZDjam+DfwVyX6uQo5DJsFGI0anAPApibqYPs6b8Q4cO1YYkS0tLY9SoUVqvjOzrq4Ic+DWDS3dppnDlFtFsubWFdGU6Hg4eBHkG6RjZ29jYIJfLuX//Ps7l3MjKML5Jo1FKNlYK7K3k2ForsLeWYyNXoVBlGd28sZLLKWdjqxPdp5ytDGvk3M1jyg+QlKwkI5sRtbVCjp21AntrBRISsYm5/yYygcynA2AnWysqONqAMpM0pa6plK0MqpSzJiVDiVKlQiGXa9ePbz/IwL+Cg86LQCAwBUmSyMjIIDY2Frlcjo1N3pYuxiiw2dRbb71lUr1Vq1YVpPlipdDMpjQcWwI7PuCb6o1Zo4rTOaUv6HNGRgZRUVHEPk7gcUrehsnlHaxxtM39rkzNUPIoWa29sn/pGjXk5miDvU3u0Z4kwYOENJQqfc6r6usVchnOdlZkKFVkZKnIVEq56hj7Q1PIwdvFnvxMcpQqiZjEdJQqCSdbBeUczPsxCJ5fHBwc8PHx0atQ86MPCjxCNUVR5ifFwnOFXzC7HexZo3xITg2iCfqc3YPJxsaGypUrcz8jlk+3hJLXQOybPg2pWlm/AfuhazEs3neT2KRno0UPJ1vGtqtOQC1PvdcA3LsWw8y/wwyen9k9gMBs1yemZXIlKpGwqHiO33rEtQeJxoV+KndjA3Ib4nH4Iz7ZdB6Az14NpFWN0hmFXlB8KBQKrKysLLJkafFNqfj4eNauXcuKFSs4d+5ckfrRlhaUngHMqaA/+ImEhAwZc0/OpZ1fO+30XyaTEVzdAxTW3I9PMzhS9Ha1I7iGNwoDWrdjg8q0D/TL5aFlqH7265Rya2b9HUZUNlMmTdqWjjnSttjZ2eFRzpkX6/ri7XaPCevPGW0fICZFlcuoOi9erOtLl4ZP+OlwOO9vCmP7xJfwcslfGwKBpbCYQt27dy8rV65k06ZN+Pv707t3b3766SdLNV+mCH10iQdWhjdSJCSiU6IJjQmlmfezYNcKuYwZ3QMY/Wtorim0Rh3O6B6Qp3JUyGW0qF4h33KHBPrQMcA738rYlFCE+amXkykhtTl6M46wqAQmb/iXn4cFi/VUQbFgljX03bt3mT17NtWqVaN///6UL1+ezMxMNm7cyOzZs2ncuLGl5CwSCjVifzZiU4wEQs2jXkigD0sHBuHtqqt8vF3tWDowqFAS/GVHo4xfbVSRFtUr5KlMAYKruuHjaoehmjLUI11TQhbqw9ZKwXf9G2NnLSchLZP41KLJzyQQ5KTAm1Jdu3bl8OHDdOvWjQEDBhASEoJCocDa2pp///23VLudFvam1KnoUwzbMSzPeis7r9QZoWZHqZLyPVIsTrZfjGL0r+o0K/pG1pZ4GZyNeEw9X1dsrITXlMByFMmm1M6dOxk/fjyjR4+mZs2aBW3muaQgQZ9zUtBpe3GhGVnnXIP1tmDq7JwbWkUVRUsg0FBghXro0CFWrlxJ06ZNqVOnDoMGDaJfv36WlK3Mogn6PGn/e3rNiSSkIgv6XJQUdA02v2QqVczfdY2E1Ew+f62+RdsWCIxR4LlRixYtWL58OVFRUbzzzjusX79em/Z2165dJCbmbSbzPNPBvwPzbarimZXbUN/D3oPWFVsXg1SFT0HWYPPL+bvx/HDgJmtPRLD9YlTeFwgEFsLsxSYHBweGDRvG4cOHuXDhApMnT2bOnDl4enrSo0cPS8hYZulQpTM7Iu+zMqs8c6v0YlG9UXjYuRObGsvSf5cWt3illib+5XnnJXWSv2kbLxAVn5rHFQKBZbDo6n3t2rX56quvuHv3LuvWrbNk02WTrHQUQLPIf+m6byFtt3zIJzEPAFhzaQ1hcYYN6QXGmdSxFg0quRKfmsmk3/4lI0vFsZtx/HnuHsduxhmNhyAQFBQRsV8Phe56ChD2F2wYTO4VVBnve1Rgh5MDnat05ps23xTO/Z8Dwh8m88p3h0jJUOJsa0Vi+rPlFR8LboYJyjZFsss/bFjeZj8ymYwVK1YU9BZlF5UStk9Dv3e7xPS4x1SX2zGs5WdFLVmZoqq7I72bVOKXY3d0lClAdHwao38NLRLbXcHzQ4EV6urVq/H396dx48YiuHR+uXMUEgynT3ZXKRn94C7cPQNVXyxCwcoWSpXErrAHes9JqG1gZ/0dRscAw666AkF+KLBCHTVqFOvXr+fWrVsMGzaMgQMH4uZWME+X544k/T9yffWyVFlsC99Gt2rdkMuEwXp+OBn+yGgKFQmIik/jZPijUmXTKyi5FPgXumTJEqKiopg2bRp///03fn5+9O3blx07dogRa144eZlUTXL05O1db/PR4Y/47epvhSxU2SMm0bR8VKbWEwjywqwhj62tLf3792fXrl2EhYVRr149xowZg7+/P0lJeaf+fW7xbwkuvmDMu92lIrIqrejo3xGAhWcWcj/J8DKBIDeFHZRFIMiJxeaQmpQokiRZLJ1AmUWugJC5Tw8MKNWQOSBX0K92Pxp7NiYlK4XPjn8mRv/5IK+gLGBeUBaBICdmKdT09HTWrVtHx44dqV27NhcuXOD7778nIiICJyfjeeefewJ6QN+fwUXPDvMLo9XnAblMzqyWs7CR23Dk3hG23NpSxIKWXjThDsHwXGBsuxpiQ0pgMQqsUMeMGYOPjw9z586lW7du3L17l//973907doVuciRbhoBPWDiRRiyBXqvgEYD1eVXtkLWs4j6VV2rMrrRaADmnppLXGqcvtYEejAU7tDqqRJdc/Q2CWki3J/AMhTYsF8ul1O5cmUaN25sNKLPpk2bCixccVEkhv36yEiG74IgKVo95X9htPZUpiqTN7e+yZVHV3il2ivMeXFO0clVBsgZ7tDPzZ7eS4/yICGdF2u6s3Jos1xZWgUCyJ8+KPBf0ODBg2nXrh3lypXD1dXV4EeQD2wcoe109b8PfAVp8dpT1nJrZrWcRZBnECPrjywmAUsvOYOyVCrvwIohzbC3VnDo+kN+OhRe3CIKygDC9VQPxTZCBVBmwdIW8PAatJ4EHWbonLZojE+VUu1kkPRAbcrl31K9YfYcsSvsAX+cu8c3rzfUm/G1RCK+tyIlP/pAKFQ9FKtCBfUa6vo3wcoexoc+NbHKTWRiJNHJ0cSmxOLh4EGQZ5DpMVTD/lK7v2b32HLxVVsfBIgoYSUW8b0VOUXiyy8oRGp3Bb8X1COQhPu5FKokSUzYN4F9kft0yr0cvJgePF2bftoghgKzJESpy/v+/Fz+OCVJ4vu9N2hb25P6lUrgcpX43ko8YhW+JCKTQZ9VMPYkVGqa6/SeiD25lClATEoMk/ZPYved3YbbziMwCwDbp6vrPWf8dCicebuuMXzNqZIXQ1V8b6UCoVBLKi6+YGWTq1ipUjLnpP4dfk1+qrkn56I09MPKIzALSJBwT13vOaNfsB+1vJyISUxn2OrTJKfnzqZQbIjvrVQgFGpJR5kJJ5dDxHEAQmNCeZBiOLiKhER0SjShMaH6K+QjMMvzhoudNSuGNMPdyYbLUQmMX3fW7EDUSpVkmcDW4nsrFVhkDXXPnj3s2bOHmJiYXG6nK1eutMQtnl/2z4FD30DFpjBiN7EpsSZdZrCeiYFZTK5XxvBzc2D54Ka88eNx9lyJYfbWMD5+JaBAiQW3X4zKleW1wIGtxfdWKjB7hDpr1iw6derEnj17ePjwIY8fP9b5FAeRkZG0bduWgIAAGjRowP/+979ikcMiBL8N1o5w7zSE/YmHg4dJl3k4eJCl0jNldauWh4mNOjAL/i0LJm8ZoHHl8szv2wiAVUdu0/iznfRffpwJ68/Rf/lxWs/dm2fyv+0Xoxj9a6iOMoVnga3znTwwz4A6PPffW0nAbLMpHx8fvvrqKwYNGmQpmcwmKiqKBw8e0KhRI2JiYggKCuLq1as4OjqadH2xm03lZN8XcGAuuFVHOfoonf/oRkxKjHbNNDsyZHg5eLG993amHpxKliqLEfVHUN+jPqhUsLwdRJ3T1tbd5Hh63PcXsVsMTFh/lj/P5V631Kg0Q9H+lSqJFl/uISYxPdc5zfXernYcntY+f3EEwv6CDUZ+Z31+hnqvmt6ewCSKxFNKQ0ZGBi1blqy3oo+PD40aNQLA09MTNzc3Hj16VLxCmUPLceDoAY9uojj7C9OD1d5UshyjFc3xtOBpxKXFsSdiD3sj9/LmtjcZsWMER6OPI3WaDR514JV5KF18OGVnyzZHB07Z2aIEcKsOdbsX8QOWPJQqiRPh+v9mpKef9377l+GrT/H60qO8PG8/DxLUo1H18oB+Zaq5XhPYOl9Uagpyfat0T/8O0uP1nBMUJWYr1BEjRvDf//7XErJoOXjwIN27d8fX1xeZTMYff/yRq86SJUuoWrUqdnZ2NGnShEOHDult6/Tp06hUKvz8/CwqY5Fi6wxtpqn/vX8OHbybM7/tfDwdPHWqeTl4Mb/tfDr4d8DTwZNNPTbRo3oPrGRWnIg+wTu73uGNS9+zs+ssdnpUprNfRYb5eDHN051hPl509vNld9p9uPx3MTxkySKvaP8AqZlK9lyJ4fSdx9yMTSYuKQMoxMDWRxeBKgv8WjwLqDNkC3T6j/r87lmQ+iR/bQositmbUmlpafz444/s3r2bBg0aYG1trXN+/vz5+W4zOTmZhg0b8tZbb9G7d+9c53/77TcmTpzIkiVLaNWqFcuWLaNLly6EhYVRuXJlbb24uDgGDx7MTz/9ZPR+6enppKc/G1EkJCTkW+ZCp8lQOL4UHt2Eo4vo0O5D2vm1IzQm1KCnVLVy1fi80QTevX6aNVUbsPHufsLiwph8cIreW8RYKZjk6c78AzPoULsrKJ5fvw9TlV3fppVoW9uTcg7WVK7gABRiYOsqreH2IWjzvm6uscovQOgv8PCqemko5Mv8tSuwGGavobZr185w4zIZe/fuNad5ZDIZmzdvpmfPntqy5s2bExQUxNKlS7VldevWpWfPnnz5pfqPKT09nY4dOzJy5Mg813dnzpzJrFmzcpWXmDVUDZf+gDOroMMs8G2Ud/2kGFjTHWKvgHcDHg/5k18u/8rKiytRSvrtVGWShJdSyfaGU1A0zTuzbVnl2M04+i8/nme9dSNfyJWPSqmSaD13L9HxaXrN8EG925/vNVQAzc81ZzyHm3vhl9fUSwKjjoBnnfy1KzBIka6h7tu3z+DHXGWqj4yMDM6cOUOnTp10yjt16sTRo2qjZkmSGDp0KO3btzdps+yDDz4gPj5e+4mMjLS43BYh4FUY/KeJyjT2mTJ19oU+qylv70YL3xYGlSmAJJMRbWVF6JGvICPFcrKXMvKK9i/DcLR/Y4GtZU8/M7oHoJDLOHgtloysfGS4kMlyK1OA6u2h9ivqJYF9s01vT2BRSp1h/8OHD1EqlXh56drbeXl5ER0dDcCRI0f47bff+OOPP2jUqBGNGjXiwoULBtu0tbXFxcVF51MiyflDMjS5SH6YTZn6wNAtUKE6YMQ+NQexGfFwYmneFcsoeSlFeKYU9WEosLW3q53WOuDw9YcMXXWSN348Zny99uRyOPItpCcaF7rz59B0GHRbaLyeoNCwyCLZkydPWLFiBZcvX0Ymk1G3bl2GDx9eqPFQc4awyx7WrnXr1mU7r1VyHBz8CpJj4fUcjhNaZXoZnLxh6FatMgVMt2NVSZBWAteSixCNUsxpnO9tonF+SKAPHQO8DToFZKpUONpaERrxhG6LDvP9m415oVqOdNbpSWqzudRHajvT+q8bvqFbVei2oMDPKzAfsxXq6dOn6dy5M/b29gQHByNJEgsWLOCLL75g586dBAUFWUJOLe7u7igUCu1oVENMTEyuUWuZJTkWTv4IkkodlcrB7VlczD2fQUyYXmUKEOQZhJeDl0E7VgBvBy+CRmyGCjWK4mlKNHkpxbzQBLbWR7vanvz9bmtG/XqGK9GJDPjpBB90qcPw1lWfDRjOrFYrU7dqUO+1/An/KFytZAVFhtlT/vfee48ePXpw+/ZtNm3axObNmwkPD6dbt25MnDjRAiLqYmNjQ5MmTdi1a5dO+a5du8y2h128eDEBAQE0a9bMrHYKHc86UOXpLu8/U2DjcFjTDRYGQpVWENBTPc13z60QFXKFQTtWDdOCp6MQylRLzmj/lkzqV8Xdkc1jWtGzkS9KlcTsrZcZt+4syelZKDNSyTi0EIAbtd9GaerPNS0B1vaBpS0h/q7FZBXkjdkK9fTp00ybNg0rq2eDXSsrK6ZOncrp06cL1GZSUhLnzp3j3LlzAISHh3Pu3DkiIiIAmDRpEj/99BMrV67k8uXLvPfee0RERDBq1CiznmXs2LGEhYVx6tQps9opdML+gvCDucsTomDTOxDYG9xrGry8g38HvXasGio6VXx2EH0Rjv9grsQCI9jbKFjQrxGzetTDSi5jy/kovtl5hXlffYpNaiz3pAp02edrkssroLZbTk+EzBTY9WnhP4BAi9lTfhcXFyIiIqhTR9dMIzIyEmdn5wK1efr0aR1zrEmTJgEwZMgQVq9eTb9+/YiLi+Ozzz4jKiqKwMBAtm3bhr+/f8EfpLSQZ1xMmTouZp1XjPrsd/DvkMuOdcPVDWy/vZ0fz//IgnYL4PFtWPaievOr6ovgVa+QHkogk8kY0rIK9XxdWHbwFr8euck+200gg2VZ3cjEShsHwJDLa7bGoMtX8GMbuLgRmo0QPv5FhNkKtV+/fgwfPpxvvvmGli1bIpPJOHz4MFOmTKF///4FarNt27bkZR47ZswYxowZU6D2SzX5iYuZ3fhbDwq5gmbez5Y3/Jz98HP2Y3j94eqC8lXUbqhhf6rXZt/8zXz5BUZpXLk8F+/F86riCJVkD4mVXPlNqR5cPH1dMuvvMDoGeBtfevBpAEFD1HbL26bCOwdE3qkiwGyF+s033yCTyRg8eDBZWeroRtbW1owePZo5c0SqY4tTiHExvR29GR80Xrew/adweQtc265W0mKkU6icDH9EVHwa/8qq87fyBf5VVSedZ4HGs8cBMLTZpaX9J3BpEzy4oN7caja8UGUXWGAN1cbGhm+//ZbHjx9z7tw5zp49y6NHj1iwYAG2traWkLHIKBWbUkUUF1Mlqbjx+IZ6YytosLpw1wzDtq8Ci6Bxeb0uVWJc5nh+Ur5itJ5RHCtAu4/V/947G1JKcYCgUoLFDPsdHByoX78+DRo0wMHBwVLNFimlYlMqz7iY5sczfZL2hEH/DOLNbW/yIPkBtJ0O1g5w96Q6I6ug0DDVv99kO4Omw8AzAOxc1UtBgkKlQFP+SZMm8Z///AdHR0fthpEhChIcRWAEuUKdMnjDYPTHMwVC5pi1XuZq64ocOalZqXwb+i1fvPgFvDBGnTlgz2dQK+S5DpxSmARnnuI7hxXMT32F25K3wXrTN57H08UutyNAThRW0H+d2mPOqnTNGEsjBfpVnD17lszMTO2/DZHTm0lgIQJ6qFMG683PPsfs4NAymYxpwdPov7U/f9/6mzfqvEGDVuPh8l/Q9C30WxgIzEaSUBz6ih6qM9xTOPBVVn994b+p7uFIWqaKer4mukiXr2J5WQ2gVEkFdoIoC5gdbSoiIoJKlSohl+uuHkiSRGRkpE44vdJCiYvYbwiVUr1RlPTgmaeUBXdyPzr8EX/d/IsG7g34pesvyCVAXurCP+inkPuuQNzcB7/0BCt79obs5qNdD/Tmo+oY4M39J6n4uamX1iRJ4vgtEzaplFlwegW4+kGdrhYX3xI5tEqiQs6PPjBboSoUCqKiovD01DUSj4uLw9PTE6Wy9OUJLzUKtZCJSYmh2+ZupGal8kXrL+hevYxE8g/7y8Dofm7xpn5Z9QrcOQzNR0GXuSYrl/+eiODDzRfo3tCX/7xaj3IONvqvPblM/dwulaD7t5D2xGIvE00OrZzKJK90MTnbsFhSQwtSpApVLpcTHR2dS6HeuXOHgIAAkpOTzWm+SFm8eDGLFy9GqVRy7dq1516hAiw/v5zvzn6Hp4Mnf/f8Gwcre3VE/6PfwYD/gX354hYxf4T99XT92cBPv+/PxaNUI47Dys4gt4YJ/4JrxbyvecqS/TeYt/MaSpWEp7MtfZpWYlPovVyKaVaXqnTa2QFS4nQbMPNloon/mjMhoQZTcmhZQiEXFkWiUDWbUd9++y0jR47U2dlXKpWcOHEChULBkSNHCtJ8sSJGqM9IV6bz6h+v4mLjwrw28/Bz8oUfXoSYS+pcVzU7l6xpszFUSnW8A4OOETK1cpl4oeif49fX4cYutTF+j+/yffm5yCdM2nCOW7H6BzAyoLP8JEttFuqxENB9meR32m1qMO4FfRty9UESCjnIZTLkMtnTdiWWHwwnMV1Pll7MSGpoIfKjDwq8VavZjJIkiQsXLmBj88z42MbGhoYNG/L+++8XtHlBCcFWYcuKzivwdvB+ll6lw0z4bx91jqOji55VLgnTZmNY0MvMotw/q1amMjm0nligJhr5leOvsa0J/mI3KRm5l9lkqPjU+mett5Uuz1yWtyuDmLXlqsnT7qT0LPZcNs2J5HpMEj8cuGnyM2WXzmRnhmKmwAp13759ALz11lt8++23z/1IriyjEywFICtVf8WEKPV0urimzXlRiF5mZlHOX52EMfWxOkxfAblwL16vMgUIll/BV2bMsF/9Mlm9bh1RqgCdM9ljCLSr40lyuhI3R/UA6nJUAj8dDjdJvuqeTgxvXRWVJKFSSSglCZUE4bFJHLuVt9PBzdiksqtQNaxatcoScghKAalZqay+sJLmh75Hf5Rb04OzFAtF5GVmEjmtDNpMM7u/jHlPefLEpDb01dOsCU5Yfw6Q6NPUj9k96wPqkXGAjzO341IMKnPNlL1no4r0DqqU6/yxm3Ecu5X3ksGMvy5yOjyW0VVjqOWQjMzZW2eZqSRYCFjMOjssLIyIiAgyMjJ0ynv0KIEjFUGBWPrvUlZdXMU+OxXrMeRmV0zTZlPQeJklRGHQllZupfYqKkwKycrAmJdVDOVMasNYvfSnua+uRj9LxWKtkLNtwkvaTSXQ62piNF2MJn+XsaSG1goZ7aUTTL3yM75Xs41mn/bbdlWzEmEhYLZR4a1bt2jYsCGBgYG88sor9OzZk549e/Laa6/x2mv5jDAuKNEMrTcUZ4Utl21t+NPJ0Xjlop42m4JMDq3e0xzor6PKyr0Lbkk0VgY513I1yyVhfxW4aWOJBU+q6nBfcsNQYiAJuC9V4KTKeLbUD7rUYcM7LXKVm5JDyxCmJDXc8FIsP9h8i0+OZQspIQppwyA2//eHXFYGmqUKk2LIWgizFeqECROoWrUqDx48wMHBgUuXLnHw4EGaNm3K/v37LSBi0VEqgqMUI252brzj3w2AhW7lSDLmCRd9EZSZRSSZiRxeALs+geC3wSXHD9ylIvRYDD2XQvVsqdFVFrSjzjOWLerlkgLe05hikpDzWebgp1ka9KcdnJf5Oqo8VEKDSuUMekCGBPpweFp71o18gW/faMS6kS9weFp7k0aIRhXygIY0vjQHGZIeySUkCWZY/4I8x+tC08uz/g5DqSoa7z6z7VDd3d3Zu3cvDRo0wNXVlZMnT1K7dm327t3L5MmTjbqmllSE2ZRhMjPT6PVLU24rZAx5kkCb1FRiFQo8lEqC0tJRZI8vUK4ytJoAjQaCtWlBPwqNm/vg117qPFzdv4XGg/L2lHoUrr4mZC7U6qS/3fwQfkidqiYvhmwxa7nEqIG8/FTu5Qa7ckhpCeyWt+DtlLF61X1RmS7pXQe9c9ikfnsj42OO59hQ07Bu5AsF3tAqErMpDUqlEicnJ0CtXO/fv0/t2rXx9/fn6tWr5jYvKGFYW9vxfp3BvHv9F9a4OrOm3LM/MK+sLKbHPaFDjW5qBfYkArZOhgNfQYt31XEAbLNlcSgq988nkeq8W5IKGg9U23rKZHkrrYPfwKNbahOx4Heg4yywti+4HNd2mlbPzOUS44kFe6g3DLP3u5UdspWd6ag6Qld5E7apXsj3Oqil0JvU0MT+MLbxZlK4QwtgtkINDAzk/PnzVKtWjebNm/PVV19hY2PDjz/+SLVqBTcBEZRcMnwbw/Vf1EopGzEKBZO83JnfpB8dun0LZ39V55NPuKueah+ap4585N+y6Nw/M9NgwyD1uqhPI+g6L5fcBnllnvoFcGIpnFwGtw9B75/UqWBMeRmkJ4Gt07PjyGOm3dcCVgbGsq0iV+R+mbw4CQ5+zQKnXwinEWEJz2YUpqbNNhlT+i7+3jNvMRP7Q7OhJkOFlGPpwtSwiOZi9pR/x44dpKSk8Nprr3Hr1i26devGlStXqFChAr/99hvt27e3lKxFhpjyG0apUtJ5Y2cepOgfNciQ4eXgxfbe29WOAFkZcGGDev0yKUbthRR+sOjcP/8aB6E/g72bOg1IuQIE67m+G/4YDckxoLCF+n3h1h79L4PKLeDqVrV77q0DMO4MlH+a6+zSn/DnGMhIMnCjYvTUysqA5e3gwUWkOt043vRbYpLSLW9+ZOxF6lEHwv5Qp9x5cAkmXwVnL7UC/qamwc1CFRAtVaB1+rfUlUWwzGY+67Las0HZloeU012qKMCsqMh8+TMzM+nUqRPLli2jVq1a2vJHjx5Rvnz5Uhu+TyhUw5yKPsWwHcPyrLey80qdfFWolBB7FTxqW8T9U6lS6iQYDPIMeubJpeHaTvV0HRkM2gTVzXi5J8WqleH1vKbtOWLU9lj0LOMBZIslAHoNjIrTKSLqvFqpqrKg10/QoI9l2zcYR0EPcivo+8uzqFhG+k0CRmdMYIcqmE+t1vCW1Q4AMiUFO1VN8Wg3muB2PdUvuQLMiopsDdXa2pqLFy/mUpxubm7mNCsowcSmxJpU735SDoUpV4BXgHpjxkz3z913djPn5BydUbKXgxfTg6fTwb/Ds4o1XlYbzFvZmqdMAZw84I118HU1SIs3Lr9PI/UPtE538Kile7qQY9mahU8DdX/t+xy2vQ/V2qqf2xIYtXDIRo2OUO81qN0FHLLpESP9JguZQ09VM/79O4w58f05r6rGQKvdNJFf5xXFCTh4AkK9ISk69/0s7N1n9pR/8uTJWFtbl6mEfGKEahhTR6gOVg70qdWHvrX7Utkl2zT7wu/qDSJACYTa2eawEnhK7xVQ//Vc7e6+s5tJ+ych5fhhyp6O8Oa3na+rVA1g0gg3J5bcpS+J8VhBber286sQ2FudPsVSs0xL9Z2RfstlIWB/D0XoKvj3N8g0FvXO+KyoSHf5MzIy+Omnn9i1axdNmzbF0VHX4Ls0pUDJHr5PoJ8gzyC8HLyISYnJpdQ0KGQKUrJSWBO2hjVha+hdszczW85Un3y6wbDbwZ45FcrzwOrZn6DaSuAxHVJSwa5crnaVKiVzTs7Re18JCRky5p6cQ7u7l1AEv21wR97kEW5OLBkLQN/GkIkU6GVgKgprGLrVcopUg6X6zki/5d6IqwC+C9Qpe/7b10ijlvPuM1uhXrx4kaAgtWf3tWvXdM6VtjXUsWPHMnbsWO0bSZAbhVzB9ODpTNo/CZnarFp7TjNK/Oqlr7CzsmP9lfUcvndYZ4SaWakZf7tXZKaTPJdajFEomOTpzvzYx3Twb/XsGmUmkUmR7Lmzx+BmGKiVanTKA34++TUdr23FZ/A2FDlyXxka4cakxDBp/yTjI9wSEAugwC+D/JD9d5ueqLaUMGfqr1LC1X9Mq1sYfZeemHcdsIh3n9lT/rKImPLnjb4ftreDN9OCp+n8sCMTI3GxccHVVv2C2nJzCx8c/kCdjlrPC1cmSXhZObH9zSN8dOQj/o05x/2kKFQGnSYNYyW3opJTJRp6NGR269n5t1DIiTaeqqFYAIW7S2+p5Q6TuXsafn8LKtSEgRsLNmpNjlMv8dzal0fFQuw7M5cbinTKnx2Nbi5tI1NB/ung34F2fu3ynHr6OfvpHO+883SX3MDfiCSTEa1MJjQmlPtJ97mbpE59bC+zwt3Rh8ikyDxl85Hb8RAlmapMbifcxs1OvbkRGhNqwgg3mtCYUF0LBQ1FkHHWEKYtd8ylnV87y03/bV0g8YHaQSP0Z2gyJH/X3z8Hvw2C+Ah1GvImQ+H4Uq3Uzyjcvss7KM5TZW5G6nUNFsm4tmLFCgIDA7Gzs8POzo7AwEB++uknSzQtKMEo5AqaeTeja7WuNPNuZtIPOaRKiEltx6bEMr7xOFbKKrIn4h4nbt3i75h4vGzLG8xJL5MkvCUF/7xxiFMDTrGj9w6Wd1rO2EZjtW2aem+DaHabc8UC8C1Uk6f8vAwshkctePkT9b93fKRWrKYS9pc6pUt8hDrG64jdEPJlsfSd9kUIGIpjYCllbvYI9ZNPPmHBggWMGzeOFi3UUWiOHTvGe++9x+3bt5k9e7bZQgrKDh4Opq3FeTh40NS7GQzcBufWwq5PUDy4yPREeyZ5uqvHh9lGubKns6Np/t1RPI0b4Ovki6+Tb4HubZSAHihrhRB64RdiEyLwcKlMUP1BKKxsjF9XQFSSiiP3TEsltPHaRio6VdR57pzka1PrhTFweQtEHoc/x8KgP1Ei5X29e02QKdQbQq8tA/ty6vIAPa6vRWHhUETmahYJjrJo0SL69++vU75u3TrGjRvHw4cPzRKwOBBrqIWHZh3TkJWAwXXM5IfqUdL59XotBLyzspgW95gOVm4G1+HyujeoI2rt7bMXhVzBpYeX+Oz4Z3Sr1o0uVbvgbu8OWGZjyBSlFpUUxR83/uCPG39wP9mY7W5uGrg3oFOVTnTy74SP07MRYYFkj7sJS1tBViq7W49izuMz+q+v+KLa5lfDgzC191NJSj1ekj2lAMqXL8/JkyepWbOmTvm1a9cIDg7myZMn5jRfLAiFWrhoNlcAvVYCBjdXsm0uGLVhNWLLmJ97zz05l18v/wqAXCanhU8LqrhWYe3ltbnazc/GkKlKbfbx2fx29TcAnKydUEpKUg2lnwFcbFyoWa4moTGhOs/2aYtP6VOrj3mbWieWsfvADCZ5uuvMDJ5dLzE/UUmH7j9ZZC2yJJEffWD2q2PgwIEsXbo0V/mPP/7IgAEDzG1eUAbp4N+B+W3n4+mgm3rcy8HL+I86m1mLAmiWlk7X5BSaZVemOeqZc++RDUbyYfMPaeDRQD3tvn9ErzKFZ8p57sm5KI3EM9UotZzroQ9SHvDe/vdYcWGFtqx3zd4Eewcz58U57Ou7jy9af4Hs6X/Z0ZTNajmL1V1Ws6fPHj5s/iFNvZoiQ0aQZ1Cem1p5ya5sMow5nt56IpI+vV6SmGsvodw/V8/Vzw8FGqFqUkgDZGVlsXr1aipXrswLL7wAwPHjx4mMjGTw4MEsWrTIUDMljuyG/deuXRMj1EIm3wbqFvRUyu+97yTc4cfzP/LXzbwj6jfyaEQV1yqUsy2Hq60rXg5edK/ePU+zLQB7hT3H3jxmUBZTzdU0xKXGUcG+QoFiMEzaP4nD9w6TpcpCqVKaZLq2sv1imvm9lGe90kShm03lDBrdpEkTAG7eVKeI9fDwwMPDg0uXLhWk+WJDGPYXLRorAZOxoPlLfu/t7+JPK99WJinUc7HnOBd7Tntc1bUq3at3z3OnHiBVmWrYbAvTzdU0VLBXew4VxMIhU5lpdIlB7/UZCfmqX9YokELVpJAWCIqUYrQDBdOtBAbVHUR5u/LEp8fzJP0JbvZqO1iLmG1RgBcRBbNw+LTFp0xTTsNKbsX5S78x+XLeppAeCSUwl1gRYlHDfoGg0CnGaE15xTHQWChMbjpZ74jRYmZbBcBU2YM8nyUIzy6Hh50PXllZxCgUuTalsvPPvUPUrdcPJxsng3XKMgVSqJMmTeI///kPjo6OOuup+ihNwVEEpYRismU0JY7BtOBpBqffBVFqJUV2hbMP0+Meq22AJUlXqWq2YWQy/hd3hoN/9uTTFp/yUqWytZZqCgXalGrXrh2bN2+mXLlytGvXzmA9mUzG3r17zRKwOBBmUwJj5HdjKOe1BTIZsxAFlv1pHIPdWU+YU6GcHhvgJ7jYlWdmpSpEJqrdg7tW7cq04Gla19/SSpHYoZ47d45GjRoV5NISj1CogrwwJ4SeOQrZEhRY9qdR89U2wDbZbIAz1GZrfX8mtVZHlpxbws9hP6OSVPSr3Y+PX/jYMvcvJopEocrlcho3bsyIESMYMGBAmVI8QqEKCpvSplS06M0JVTHX+vXFhxdZGLqQb176hnLZYtua62VWHP1WJAr12LFjrFy5kg0bNpCZmUmvXr0YPny40SWA0oJQqAKBEQrgvilJEm/teIszD87kOmfqckeRxILVQ5G6nqamprJhwwZWrVrFoUOHqFKlCsOGDWPIkCFUqlTJnKaLDaFQBQLLcvDuQcbuGWvwfF6xaIs8Fmw2itT11N7eniFDhrB//36uXbtG//79WbZsGVWrVqVr167mNi8QCMoAtgpbo+ezhx+8HX+b87HniUyIJCkjiSxllllus0WJRe1Qq1evzvTp0/Hz8+PDDz9kx44dlmxeIBCUUuJS40yqF5sSyz/h//C/a//TlsllclSSYbfXPAODFyEWi6t14MABhgwZgre3N1OnTqVXr14cOWJaDEeBQFC2yY9Tg5ONE76OvthbqZMsGlOm2THVE60wMWuEGhkZyerVq1m9ejXh4eG0bNmSRYsW0bdv31zZT0sDIuupQFA45MepoZl3MyY1UdvqpmWlcSDyAO8ffD/Pe1jLrS0ud34p8KZUx44d2bdvHx4eHgwePJhhw4ZRu3ZtS8tXLIhNKYHA8hTUqcGUwOAAtnJb3gx4k2H1humYaplLkWxK2dvbs3HjRu7evcvcuXPLjDIVCASFQ0Hj4GrcZuGZ8tWgOfZ38Sddlc6qi6vosqkLP/z7A8mZyYXwFMYRaaT1IEaoAkHhUVDjfGMeZi9XfplD9w7xXeh3XH18FYBVnVfR1Lup2fcuUjvUsohQqAJBySQvhaiSVOy8vZNT0af4pMUn2vJLDy8RmRTJN6e+ybdjgFCoZiIUqkBQdniY+pDOv3cmQ5WR65wpjgFFatgvEAgEJZmbT26SqcrUe87SjgFCoQoEgjKNXCY3ah2Q3THA7HuZ3YJAIBCUYCyVesYUhEIVCARlmqJMPSMUqkAgKNNovLRy2rBqkCHD28HbIqlnhEIVCARlGlMcA4zl08oPQqEKBIIyT0G9tPKLSCMtEAieCzr4d6CdX7tCTaEiFKpAIHhuUMgVhRozVShUPWicxxISEopZEoFAUNxo9IApTqVCoeohMTERAD8/v2KWRCAQlBQSExNxdXU1Wkf48utBpVJx//59nJ2dkcn0m1poSEhIwM/Pj8jIyFLh9y/kLVyEvIVLccgrSRKJiYn4+voilxvfxxcjVD3I5fJ8Z2x1cXEpFX+QGoS8hYuQt3ApannzGplqEGZTAoFAYCGEQhUIBAILIRSqmdja2jJjxgxsbY3nHS8pCHkLFyFv4VLS5RWbUgKBQGAhxAhVIBAILIRQqAKBQGAhhEIVCAQCCyEUqkAgEFgIoVDNZMmSJVStWhU7OzuaNGnCoUOHilyGmTNnIpPJdD7e3t7a85IkMXPmTHx9fbG3t6dt27ZcunRJp4309HTGjRuHu7s7jo6O9OjRg7t371pEvoMHD9K9e3d8fX2RyWT88ccfOuctJd/jx48ZNGgQrq6uuLq6MmjQIJ48eWJxeYcOHZqrv1944YVikffLL7+kWbNmODs74+npSc+ePbl69apOnZLUv6bIW5L6N99IggKzfv16ydraWlq+fLkUFhYmTZgwQXJ0dJTu3LlTpHLMmDFDqlevnhQVFaX9xMTEaM/PmTNHcnZ2ljZu3ChduHBB6tevn+Tj4yMlJCRo64waNUqqWLGitGvXLik0NFRq166d1LBhQykrK8ts+bZt2yZ99NFH0saNGyVA2rx5s855S8kXEhIiBQYGSkePHpWOHj0qBQYGSt26dbO4vEOGDJFCQkJ0+jsuLk6nTlHJ27lzZ2nVqlXSxYsXpXPnzkmvvPKKVLlyZSkpKUlbpyT1rynylqT+zS9CoZpBcHCwNGrUKJ2yOnXqSNOnTy9SOWbMmCE1bNhQ7zmVSiV5e3tLc+bM0ZalpaVJrq6u0g8//CBJkiQ9efJEsra2ltavX6+tc+/ePUkul0vbt2+3qKw5FZSl5AsLC5MA6fjx49o6x44dkwDpypUrFpNXktQ/+FdffdXgNcUpb0xMjARIBw4ckCSp5PdvTnklqWT3b16IKX8BycjI4MyZM3Tq1EmnvFOnThw9erTI5bl+/Tq+vr5UrVqVN954g1u3bgEQHh5OdHS0jpy2tra0adNGK+eZM2fIzMzUqePr60tgYGChP4ul5Dt27Biurq40b95cW+eFF17A1dW1UJ5h//79eHp6UqtWLUaOHElMTIz2XHHKGx8fD4CbmxtQ8vs3p7waSmr/5oVQqAXk4cOHKJVKvLy8dMq9vLyIjo4uUlmaN2/Ozz//zI4dO1i+fDnR0dG0bNmSuLg4rSzG5IyOjsbGxoby5csbrFNYWEq+6OhoPD1101sAeHp6WvwZunTpwtq1a9m7dy/z5s3j1KlTtG/fnvT09GKVV5IkJk2aROvWrQkMDNTeR3NvY7KUFHmh5PavKYhoU2aSM7yfJEl5hvyzNF26dNH+u379+rRo0YLq1auzZs0a7WJ+QeQsymexhHz66hfGM/Tr10/778DAQJo2bYq/vz9bt26lV69exSbvu+++y/nz5zl8+HCucyWxfw3JW1L71xTECLWAuLu7o1Aocr3tYmJico0GihpHR0fq16/P9evXtbv9xuT09vYmIyODx48fG6xTWFhKPm9vbx48eJCr/djY2EJ/Bh8fH/z9/bl+/XqxyTtu3Dj++usv9u3bpxN6sqT2ryF59VES+tdUhEItIDY2NjRp0oRdu3bplO/atYuWLVsWk1Rq0tPTuXz5Mj4+PlStWhVvb28dOTMyMjhw4IBWziZNmmBtba1TJyoqiosXLxb6s1hKvhYtWhAfH8/Jkye1dU6cOEF8fHyhP0NcXByRkZH4+PgUubySJPHuu++yadMm9u7dS9WqVXXOl7T+zUtefRRn/+abQtvueg7QmE2tWLFCCgsLkyZOnCg5OjpKt2/fLlI5Jk+eLO3fv1+6deuWdPz4calbt26Ss7OzVo45c+ZIrq6u0qZNm6QLFy5I/fv312s2U6lSJWn37t1SaGio1L59e4uZTSUmJkpnz56Vzp49KwHS/PnzpbNnz2rNyywlX0hIiNSgQQPp2LFj0rFjx6T69esXyEzGmLyJiYnS5MmTpaNHj0rh4eHSvn37pBYtWkgVK1YsFnlHjx4tubq6Svv379cxM0pJSdHWKUn9m5e8Ja1/84tQqGayePFiyd/fX7KxsZGCgoJ0zD+KCo1dobW1teTr6yv16tVLunTpkva8SqWSZsyYIXl7e0u2trbSSy+9JF24cEGnjdTUVOndd9+V3NzcJHt7e6lbt25SRESEReTbt2+fBOT6DBkyxKLyxcXFSQMGDJCcnZ0lZ2dnacCAAdLjx48tKm9KSorUqVMnycPDQ7K2tpYqV64sDRkyJJcsRSWvPjkBadWqVdo6Jal/85K3pPVvfhHh+wQCgcBCiDVUgUAgsBBCoQoEAoGFEApVIBAILIRQqAKBQGAhhEIVCAQCCyEUqkAgEFgIoVAFAoHAQgiFKhAIBBZCKFRBmaBt27ZMnDjR5Pq3b99GJpNx7ty5QpPJVGbOnEmjRo2KWwyBBRCeUoIiJa/QaUOGDGH16tX5bvfRo0dYW1vj7OxsUn2lUklsbCzu7u5YWRVuFMuNGzfy1VdfceXKFVQqFZUrVyYkJIR58+YBkJSURHp6OhUqVChUOQSFj4iHKihSoqKitP/+7bff+PTTT3WStNnb2+vUz8zMxNraOs92c0Z8zwuFQqGTyLCw2L17N2+88QZffPEFPXr0QCaTERYWxp49e7R1nJyccHJyKnRZBIWPmPILihRvb2/tx9XVVZuh1dvbm7S0NMqVK8eGDRto27YtdnZ2/Prrr8TFxdG/f38qVaqEg4MD9evXZ926dTrt5pzyV6lShS+++IJhw4bh7OxM5cqV+fHHH7Xnc0759+/fj0wmY8+ePTRt2hQHBwdatmyZKyPn7Nmz8fT0xNnZmREjRjB9+nSj0/UtW7bQunVrpkyZQu3atalVqxY9e/Zk0aJF2jo5p/w5M37KZDKqVKmiPR8WFkbXrl1xcnLCy8uLQYMG8fDhQ9O/BEGhIRSqoMQxbdo0xo8fz+XLl+ncuTNpaWk0adKELVu2cPHiRd5++20GDRrEiRMnjLYzb948mjZtytmzZxkzZgyjR4/mypUrRq/56KOPmDdvHqdPn8bKyophw4Zpz61du5bPP/+cuXPncubMGSpXrszSpUuNtuft7c2lS5e4ePGiyc8fFRWl/dy4cYMaNWrw0ksvac+1adOGRo0acfr0abZv386DBw/o27evye0LCpFCjWUlEBhh1apVkqurq/Y4PDxcAqSFCxfmeW3Xrl2lyZMna4/btGkjTZgwQXvs7+8vDRw4UHusUqkkT09PaenSpTr3Onv2rCRJz0L27d69W3vN1q1bJUBKTU2VJEmSmjdvLo0dO1ZHjlatWhnMOCtJkpSUlCR17dpVAiR/f3+pX79+0ooVK6S0tDRtHUNZa1UqlfTaa69JTZo00cYL/eSTT6ROnTrp1IuMjJQA6erVqwblEBQNYoQqKHE0bdpU51ipVPL555/ToEEDKlSogJOTEzt37iQiIsJoOw0aNND+W7O0kD17Zl7XaCLEa665evUqwcHBOvVzHufE0dGRrVu3cuPGDT7++GOcnJyYPHkywcHBpKSkGL32ww8/5NixY/zxxx/ateUzZ86wb98+7bqrk5MTderUAeDmzZtG2xMUPmJTSlDicHR01DmeN28eCxYsYOHChdSvXx9HR0cmTpxIRkaG0XZybmbJZDJUKpXJ12gsErJfoy/ZnSlUr16d6tWrM2LECD766CNq1arFb7/9xltvvaW3/q+//sqCBQvYv3+/Ts4llUpF9+7dmTt3bq5rNC8AQfEhFKqgxHPo0CFeffVVBg4cCKiVyvXr16lbt26RylG7dm1OnjzJoEGDtGWnT5/OdztVqlTBwcGB5ORkveePHTvGiBEjWLZsmTZrrYagoCA2btxIlSpVCt3cS5B/xJRfUOKpUaMGu3bt4ujRo1y+fJl33nmnUHOrG2LcuHGsWLGCNWvWcP36dWbPns358+eN2tbOnDmTqVOnsn//fsLDwzl79izDhg0jMzOTjh075qofHR3Na6+9xhtvvEHnzp2Jjo4mOjqa2NhYAMaOHcujR4/o378/J0+e5NatW+zcuZNhw4ahVCoL7dkFpiEUqqDE88knnxAUFETnzp1p27Yt3t7e9OzZs8jlGDBgAB988AHvv/8+QUFBhIeHM3ToUOzs7Axe06ZNG27dusXgwYOpU6cOXbp0ITo6mp07d1K7du1c9a9cucKDBw9Ys2YNPj4+2k+zZs0A8PX15ciRIyiVSjp37kxgYCATJkzA1dUVuVz8nIsb4SklEJhBx44d8fb25pdffiluUQQlALEIIxCYSEpKCj/88AOdO3dGoVCwbt06du/erZMfXvB8I0aoAoGJpKam0r17d0JDQ0lPT6d27dp8/PHH9OrVq7hFE5QQhEIVCAQCCyFWsQUCgcBCCIUqEAgEFkIoVIFAILAQQqEKBAKBhRAKVSAQCCyEUKgCgUBgIYRCFQgEAgshFKpAIBBYiP8DC5ea30/ty+8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(3.5, 2.5))\n", + "\n", + "for gid, group in subset.groupby('sampling_method'):\n", + " ax.plot(group['size'], group['vib_mae'], '--o', label=gid)\n", + " \n", + "ax.legend()\n", + "\n", + "ax.set_yscale('log')\n", + "\n", + "ax.set_xlabel('Training Size')\n", + "ax.set_ylabel('Vibration MAE (cm$^{-1}$)')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "7dc273cc-6b8e-47a9-8f58-31bd385368da", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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r+0T/eUAljaBPAPlu+dmmi3i6tWrmThxInv37kUQBDZt2sR//vMfwsPDSUpKYtKkSUyfPp1ly5bpzsnLy+Pf//433333HXK5nBEjRvDGG2/oFNXixYtZsWIF33zzDVFRUSxevJh169bRvXt3HJWOZBdlM3vWbDat38Tq1asJCwvjww8/pHfv3ly6dAlv74fVCebOncunn36KnYMdw4YNY8hTQ3BxcuH//u//yMnJYfDgwXzyySfMmDHD6HscM2YMycnJbN++HXt7e6ZOnUpaWprR9lpmzJjB4sWLWblypcHR6+TJkykqKmLXrl24uLjo1eEyXFTwJYKCgnjmmWd0fWzfvp3atWuza9cu9u7dy7hx49i/fz+dO3fm4MGDrFmzhgkTJvDEE08QEhJCXl4e3bp1o1OnTuzatQulUsn8+fPp06cPJ0+e1LkulubNN99kx44drFu3jsDAQP75z3+SkJBA8+bNDbb/+eef+eijj/jpp59o3LgxqampnDhxAoBff/2VZs2a8dJLL/Hiiy9WeB//lphjnO3bt69w//593fb8+fOFjIwM3fbdu3eFRo0amdOlHhhZlJo4caLevkaNGpm9KGUJFudDLS/n4vdPiW1O/te0HI0n//uw34URhtuYSZcuXYTmzZuX22bt2rWCj4+PbnvlypUCIFy6dEm377PPPhMCAgJ020FBQcKCBQt028XFxULt2rWFgQMHClmFWcKhq4cEOzs74YcfftC1KSoqEoKDg4UPP/xQEARx8RAQtm3bJgiCIGQUZAjT3p4mAMLly5d157388stC7969jcp//vx5ARAOHDig23f27FkBMLoopc0Du3Tp0nLvTZMmTYS5c+eW26YkkyZN0lsQHT16tBAWFiao1WrdvgYNGgidOnXSbatUKsHFxUX48ccfBUEQhG+++UZo0KCB3qJcYWGh4OTkJGzevNngdbOzswV7e3vhp59+0u1LT08XnJycjC5KLV68WKhfv75QVFRksM+qXsB6rBelNm/erOdWtHDhQoYPH46npycgOvafP3/eLIWek5PDpUuXdNtJSUkcP34cb29vQkNDiYuLY+TIkbRq1YrY2Fi+/PJLrl+/zoQJE8y6TpXyz3JGnrIHCzKWpBSbdspymUqhrfCpZceOHbz//vskJiaSlZWFSqWioKCA3Nxc3YKFs7MzdevW1Z0TFBSkG/Fl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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(3.5, 2.5))\n", + "\n", + "for gid, group in subset.groupby('sampling_method'):\n", + " ax.plot(group['size'], group['zpe_error'].abs(), '--o', label=gid)\n", + " \n", + "ax.legend()\n", + "\n", + "ax.set_yscale('log')\n", + "\n", + "ax.set_xlabel('Training Size')\n", + "ax.set_ylabel('ZPE Error (kcal/mol)')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "3d1cd9a6-ec4d-4dbe-9e92-188c401dd548", + "metadata": {}, + "source": [ + "It seems like random sampling is preferred, and it is especially stable if we sample random directions" + ] + }, + { + "cell_type": "markdown", + "id": "9704b823-18f4-4195-884d-12fadd602993", + "metadata": {}, + "source": [ + "## Explore Effect of Sampling Size\n", + "What is the best magnitude?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "edbf9938-54b0-4182-b9e2-8de6ec96404e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "best_strategy = all_results.query('sampling_method==\"random-dir-variable-dist\"')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "b0e1309b-a6dd-4728-9583-e8ec5d8a765e", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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mamXKHL//v1kZmZW6/stSRLPP/8869at4++//6ZBgwZ658X9KycqbTlMYBKt29TKlSulhIQEaerUqZK3t7d08eLFyu5ahZKdnS0dPnxYOnz4sARIixYtkg4fPqxzH5s/f77k7+8vrVu3Tjp27Jg0cuRIo24/derUkbZu3SrFxcVJvXr1Mur207JlS2nfvn3Svn37pBYtWlR7t59JkyZJ/v7+0vbt26XExETdIy8vT1dG3D/nIwS1irJ06VIpIiJCcnNzk6Kjo3XuLncT27Ztk5Czqek9xo4dK0mS7Poze/ZsKSwsTHJ3d5e6desmHTt2TK+N/Px86fnnn5eCgoIkT09P6YEHHpAuX76sVyYtLU164oknJF9fX8nX11d64oknpJs3b1bQqywfjN03QPryyy91ZcT9cz4ifJ9AIBA4CWFDFQgEAichBFUgEAichBBUgUAgcBJCUAUCgcBJCEEVCAQCJyEEVSAQCJyEEFSBQCBwEkJQBQKBwEkIQRXclfTo0YOpU6daXf7ixYsoFAri4+PLrU/WMmfOHFq3bl3Z3RAYQeyUElRpLIWAGzt2LKtWrbK53fT0dFxdXfH19bWqvFqt5saNGwQHB+PiUr5RL9euXcv777/PqVOn0Gg01KtXjwEDBvDhhx8CkJOTQ2FhITVq1CjXfghsR8RDFVRpEhMTdf9fs2YNb731ll6yOU9PT73yxcXFuLq6WmxXG7neWlQqlS7kXXmydetWHnvsMd577z2GDBmCQqEgISGBv/76S1fGx8cHHx+fcu+LwHbElF9QpQkLC9M9/P39USgUuucFBQUEBATw448/0qNHDzw8PPj2229JS0tj5MiR1KlTBy8vL1q0aMHq1av12i075a9fvz7vvfce48aNw9fXl3r16vHZZ5/pzped8m/fvh2FQsFff/1Fu3bt8PLyonPnzgaZRd955x1CQkLw9fXl6aefZsaMGWan67/++itdunTh1VdfpWnTpjRp0oRhw4bx8ccf68qUnfIrFAqDR/369XXnExISGDRoED4+PoSGhjJ69GhSU1OtfxMEViMEVVDtmT59OlOmTOHkyZP079+fgoIC2rZty6+//srx48d55plnGD16NPv37zfbzocffki7du04fPgwzz33HJMmTeLUqVNm67zxxht8+OGHHDp0CBcXF8aNG6c799133/Huu++yYMECYmNjqVevHsuXLzfbXlhYGCdOnOD48eNWv/7ExETd4+zZszRq1Ihu3brpznXv3p3WrVtz6NAhNm/eTHJyMo888ojV7QtsoHKDXQkE1vPll19K/v7+uucXLlyQAGnJkiUW6w4aNEh6+eWXdc+7d+8uvfjii7rnERER0qhRo3TPNRqNFBISIi1fvlzvWocPH5Yk6XZowa1bt+rq/PbbbxIg5efnS5IkSR06dJAmT56s14/77rtPatWqlcl+5uTkSIMGDZIAKSIiQnr00UellStXSgUFBboys2fPNtqGRqORhg8fLrVt21YX93TWrFlSv3799MpduXJFAqTTp0+b7IfAPsQIVVDtadeund5ztVrNu+++S8uWLalRowY+Pj78+eefXL582Ww7LVu21P1fa1pISUmxuk6tWrUAdHVOnz5NTEyMXvmyz8vi7e3Nb7/9xtmzZ3nzzTfx8fHh5ZdfJiYmhry8PLN1X3/9dfbt28fPP/+ssy3Hxsaybds2nd3Vx8eHe++9F4Bz586ZbU9gO2JRSlDt8fb21nv+4YcfsnjxYpYsWUKLFi3w9vZm6tSpFBUVmW2n7GKWQqFAo9FYXUfrkVC6jrEkeNbQsGFDGjZsyNNPP80bb7xBkyZNWLNmDU899ZTR8t9++y2LFy9m+/btermjNBoNgwcPZsGCBQZ1tD8AAuchBFVwx7Fr1y6GDh3KqFGjAFlUzpw5Q7NmzSq0H02bNuXAgQOMHj1ad+zQoUM2t1O/fn28vLzIzc01en7fvn08/fTTfPrpp3Ts2FHvXHR0NGvXrqV+/frl7u4lEItSgjuQRo0asWXLFvbu3cvJkyd59tlnKyVH/AsvvMDKlSv56quvOHPmDO+88w5Hjx4161s7Z84cXnvtNbZv386FCxc4fPgw48aNo7i4mL59+xqUT0pKYvjw4Tz22GP079+fpKQkkpKSuHHjBgCTJ08mPT2dkSNHcuDAAc6fP8+ff/7JuHHjUKvV5fba71aEoAruOGbNmkV0dDT9+/enR48ehIWFMWzYsArvxxNPPMHMmTN55ZVXiI6O5sKFCzz55JN4eHiYrNO9e3fOnz/PmDFjuPfeexk4cCBJSUn8+eefNG3a1KD8qVOnSE5O5quvvqJWrVq6R/v27QEIDw9nz549qNVq+vfvT1RUFC+++CL+/v4oleLr72zETimBoALp27cvYWFhfPPNN5XdFUE5IIwqAkE5kZeXxyeffEL//v1RqVSsXr2arVu36uW5F9xZiBGqQFBO5OfnM3jwYOLi4igsLKRp06a8+eabPPjgg5XdNUE5IQRVIBAInISwSgsEAoGTEIIqEAgETkIIqkAgEDgJIagCgUDgJISgCgQCgZMQgioQCAROQgiqQCAQOAkhqAKBQOAk/h+kWhYeGoT7PgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(3, 1, figsize=(3.5, 3.8), sharex=True)\n", + "\n", + "for gid, group in best_strategy.groupby('d'):\n", + " axs[0].plot(group['size'], group['vib_mae'], '--o', label=f'd={gid}')\n", + " axs[1].plot(group['size'], group['zpe_error'].abs(), '--o', label=f'd={gid}')\n", + " axs[2].plot(group['size'], group['cp_error'].apply(np.array).apply(np.abs).apply(np.mean), '--o', label=f'd={gid}')\n", + " \n", + " \n", + "# Labels\n", + "axs[0].legend()\n", + "axs[0].set_ylabel('Vibration MAE\\n(cm$^{-1}$)')\n", + "axs[1].set_ylabel('ZPE Error\\n(kcal/mol)')\n", + "axs[2].set_ylabel('$C_p$ Error\\n(kcal/mol/K)')\n", + "\n", + "for ax in axs:\n", + " ax.set_yscale('log')\n", + "\n", + "axs[-1].set_xlabel('Training Size')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "0ee09462-b4e4-4a3a-9f14-dea85668da0b", + "metadata": {}, + "source": [ + "Evaluate the enthalpy differences" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bc042000-02a6-4b07-ade7-849c74a4fadf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "best_model = best_strategy.query('d==0.01').sort_values('size').tail().iloc[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "137b0999-98fe-414b-ae6c-c7c39f37314a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, '$H$ (kcal/mol)')" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(3.5, 2.5))\n", + "\n", + "ax.plot(best_model['temps'], best_model['h'], 'r', label='Approx')\n", + "ax.plot(best_model['temps'], np.add(best_model['h'], best_model['h_error']), '--k', label='True')\n", + "\n", + "ax.legend()\n", + "ax.set_xlabel('Temp (K)')\n", + "ax.set_ylabel('$H$ (kcal/mol)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95680e61-587f-4cff-937b-583196fe6193", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/3_consolidate-results/README.md b/notebooks/3_consolidate-results/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml index 0104d3c..738120b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ dependencies = [ "colmena==0.5.*", "parsl>=2023.04", "ase>3.22", + "pmutt>=1.4.9", "tqdm" ] diff --git a/tests/files/water-hessian.json b/tests/files/water-hessian.json new file mode 100644 index 0000000..344dbfa --- /dev/null +++ b/tests/files/water-hessian.json @@ -0,0 +1 @@ +{"atoms": {"numbers": {"__ndarray__": [[3], "int64", [8, 1, 1]]}, "positions": {"__ndarray__": [[3, 3], "float64", [2.537095624894952, -0.33431088490549643, 4.820167419625937e-10, 3.2968336037162858, 0.2449868198104976, 0.0, 1.7768707898269531, 0.2443240650949987, 0.0]]}, "cell": {"__ndarray__": [[3, 3], "float64", [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]}, "pbc": {"__ndarray__": [[3], "bool", [false, false, false]]}, "__ase_objtype__": "atoms"}, "hessian": {"__ndarray__": [[3, 3, 3, 3], "float64", [34.30044462022372, 0.007332869969590315, 1.0841025975148397e-06, -17.140700636997888, -13.067917980191837, 0.0005453036065499644, -17.15972988989207, 13.060585110222245, -0.0005463877091474738, 0.007332869969590315, 20.84404714703323, -0.0009952061845186228, -8.62325018884728, -10.433245119503493, 0.0004986871948568262, 8.615917318877688, -10.412678609126038, 0.0004976030922593114, 1.0841025975148397e-06, -0.0009952061845186228, 0.0034994831847778725, 0.0005843313000605094, 0.000497603092259306, -0.0007339374585175403, -0.0005843313000604877, 0.0004976030922593006, -0.0025866687976703858, -17.140700636997888, -8.62325018884728, 0.0005843313000605094, 21.417006210845795, 10.847734402021727, -0.0005149487338195705, -4.276315330771283, -2.224277149578323, -6.93825662409389e-05, -13.067917980191837, -10.433245119503493, 0.000497603092259306, 10.847734402021727, 10.200150051806633, -0.00047158462991895255, 2.2203299320207717, 0.23403390054630657, -2.6018462340356152e-05, 0.0005453036065499644, 0.0004986871948568262, -0.0007339374585175403, -0.0005149487338195705, -0.00047158462991895255, 0.0025324636677946442, -3.035487273041551e-05, -2.6018462340356152e-05, -0.00188742262227332, -17.15972988989207, 8.615917318877688, -0.0005843313000604877, -4.276315330771283, 2.2203299320207717, -3.035487273041551e-05, 21.43603654784257, -10.836455398597181, 0.0006146861727909033, 13.060585110222245, -10.412678609126038, 0.0004976030922593006, -2.224277149578323, 0.23403390054630657, -2.6018462340356152e-05, -10.836455398597181, 10.179582457326582, -0.0004705005273214404, -0.0005463877091474738, 0.0004976030922593114, -0.0025866687976703858, -6.93825662409389e-05, -2.6018462340356152e-05, -0.00188742262227332, 0.0006146861727909033, -0.0004705005273214404, 0.004384110904349974]]}, "indices": null, "__ase_objtype__": "vibrationsdata"} \ No newline at end of file diff --git a/tests/test_compare.py b/tests/test_compare.py new file mode 100644 index 0000000..8bde1e1 --- /dev/null +++ b/tests/test_compare.py @@ -0,0 +1,21 @@ +from pathlib import Path + +from ase.vibrations import VibrationsData +from pytest import fixture +import numpy as np + +from jitterbug.compare import compare_hessians + +_test_files = Path(__file__).parent / 'files' + + +@fixture() +def example_hess() -> VibrationsData: + return VibrationsData.read(_test_files / 'water-hessian.json') + + +def test_compare(example_hess): + comp = compare_hessians(example_hess.get_atoms(), example_hess.get_hessian_2d(), example_hess.get_hessian_2d()) + assert comp.zpe_error == 0. + assert np.ndim(comp.cp_error) == 1 + assert np.mean(comp.cp_error) == 0.