Skip to content

Instantly share code, notes, and snippets.

@maxentile
Last active September 11, 2020 23:55
Show Gist options
  • Save maxentile/e138aaaf4c809ab0163718b5312b548d to your computer and use it in GitHub Desktop.
Save maxentile/e138aaaf4c809ab0163718b5312b548d to your computer and use it in GitHub Desktop.
proof-of-concept for using per-particle gradients to inform discrete refinements of an atom-typing scheme, in the context of a simple charge-equilibration model
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Main idea:** Steepest descent, but for atom-types. Given a collection of possible refinements of a typing scheme, select the one that results in the biggest gradient magnitude."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Load or generate a dataset of charges\n",
"\n",
"AlkEthOH rings set, compute partial charges with AM1-BCC"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "088839b8665944c7848c4ac27b1bcef6",
"version_major": 2,
"version_minor": 0
},
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from openforcefield.topology import Molecule\n",
"from tqdm import tqdm\n",
"import os\n",
"\n",
"alkethoh_path = 'AlkEthOH_rings.smi'\n",
"charged_path = 'AlkEthOH_rings_charged.pkl'\n",
"\n",
"if os.path.exists(charged_path):\n",
" from pickle import load\n",
" with open(charged_path, 'rb') as f:\n",
" mols = load(f)\n",
"else:\n",
" smiles = dict()\n",
" with open(alkethoh_path, 'r') as f:\n",
" lines = f.readlines()\n",
" for line in lines:\n",
" (smi, name) = line.split()\n",
" smiles[name] = smi\n",
"\n",
" mols = dict()\n",
" for name in tqdm(smiles):\n",
" mols[name] = Molecule.from_smiles(smiles[name], allow_undefined_stereo=True)\n",
" mols[name].compute_partial_charges_am1bcc()\n",
" from pickle import dump\n",
" with open(charged_path, 'wb') as f:\n",
" dump(mols, f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Define training subset\n",
"Randomly shuffle and split molecules into 90%/10%"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as onp\n",
"names = list(mols.keys())\n",
"onp.random.seed(0)\n",
"train_inds = list(set(onp.random.randint(0,len(names),int(0.9 * len(names)))))\n",
"train_mols = [mols[names[i]] for i in train_inds]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Define model\n",
"\n",
"Define charge-equilibration model. Given predictions of electronegativity and hardness for each atom in a molecule, predict partial charges that satisfy a charge-sum constraint.\n",
"\n",
"Note that this means the final predicted charge for an atom $i$ depends not just on the parameters $e_i, s_i$ assigned to $i$, but also on the parameters assigned to all other atoms in the molecule."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from autograd import numpy as np, grad\n",
"\n",
"def compute_lagrange_multiplier(electronegativities, hardnesses, Q):\n",
" return (Q + np.sum(electronegativities / hardnesses)) / np.sum(1.0 / hardnesses)\n",
"\n",
"def equalize_charges(electronegativities, hardnesses, Q=0):\n",
" lagrange_multiplier = compute_lagrange_multiplier(electronegativities, hardnesses, Q)\n",
" new_charges = (- electronegativities / hardnesses) + (lagrange_multiplier / hardnesses)\n",
" return new_charges\n",
"\n",
"def unpack(theta):\n",
" N_types = int(len(theta) / 2)\n",
" electronegativities, hardnesses = theta[:N_types], theta[N_types:]\n",
" return electronegativities, hardnesses"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Initialize typing scheme"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{1, 6, 8}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"atomic_nums = set(np.hstack([[a.atomic_number for a in mol.atoms] for mol in train_mols]))\n",
"atomic_nums"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['[#1:1]', '[#6:1]', '[#8:1]']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"elemental_smarts_list = [f'[#{atomic_num}:1]' for atomic_num in sorted(atomic_nums)]\n",
"elemental_smarts_list"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Utilities for chemical environment matches"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from functools import lru_cache\n",
"\n",
"def get_match_mask(smarts, mol):\n",
" mask = onp.zeros(mol.n_atoms, dtype=bool)\n",
" for tup in mol.chemical_environment_matches(smarts):\n",
" mask[tup[0]] = True\n",
" return mask\n",
"\n",
"@lru_cache(maxsize=1024)\n",
"def get_match_masks(smirks):\n",
" return [get_match_mask(smirks, mol) for mol in train_mols]\n",
"\n",
"def assign_types_using_match_matrix(match_matrix):\n",
" \"\"\"Process a binary match matrix into an integer array, assigning an integer to each atom.\"\"\"\n",
" inds = onp.arange(match_matrix.shape[1])[::-1]\n",
" largest_match_inds = inds[onp.argmax(match_matrix[:, ::-1], axis=1)]\n",
" return largest_match_inds\n",
"\n",
"def assign_types(smarts_list):\n",
" match_masks = [get_match_masks(s) for s in smarts_list]\n",
" match_tensors = []\n",
" for i in range(len(match_masks[0])):\n",
" match_tensor = onp.array([match_masks[m][i] for m in range(len(match_masks))])\n",
" match_tensors.append(match_tensor.T)\n",
" types = [assign_types_using_match_matrix(m) for m in match_tensors] \n",
" return types"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.98 s, sys: 8.3 ms, total: 1.99 s\n",
"Wall time: 2 s\n"
]
}
],
"source": [
"%%time\n",
"types = assign_types(elemental_smarts_list)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 8.36 ms, sys: 3.32 ms, total: 11.7 ms\n",
"Wall time: 9.34 ms\n"
]
}
],
"source": [
"%%time\n",
"types = assign_types(elemental_smarts_list)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def assign_parameters(theta, types):\n",
" \"\"\"theta: non-redundant parameters\n",
" types: indices for scattering from theta to particles\"\"\"\n",
" electronegativities, hardnesses = unpack(theta)\n",
" \n",
" P = []\n",
" for i in range(len(types)):\n",
" e_i = electronegativities[types[i]]\n",
" s_i = hardnesses[types[i]]\n",
" P.append(np.stack([e_i, s_i]).T)\n",
" return P"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Define target"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from simtk import unit\n",
"train_charges = [mol.partial_charges / unit.elementary_charge for mol in train_mols]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Predictions in terms of per-particle assigned parameters"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def regularization_penalty(hardness):\n",
" \"\"\"e_i and s_i can scale up and down arbitrarily without changing the predicted charges,\n",
" so penalize having s_i deviate much from 1\"\"\"\n",
" return np.mean((hardness - 1) ** 2)\n",
"\n",
"def predict_charges(P):\n",
" return [equalize_charges(*P[i].T) for i in range(len(train_mols))]\n",
" \n",
"def rmse(P):\n",
" q_hat = np.hstack(predict_charges(P))\n",
" q_true = np.hstack(train_charges)\n",
" return np.sqrt(np.mean((q_hat - q_true)**2))\n",
"\n",
"def loss(P):\n",
" \"\"\"P : all per-particle assigned parameters\n",
" lower is better\n",
" \"\"\"\n",
" hardnesses = np.hstack([p[:,1] for p in P])\n",
" \n",
" reg = regularization_penalty(hardnesses)\n",
" squared_error = np.sum([np.sum((equalize_charges(*P[i].T) - train_charges[i])**2) for i in range(len(train_mols))])\n",
" \n",
" return squared_error + reg"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Define within-model local optimizer"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"from scipy.optimize import minimize\n",
"\n",
"def optimize_parameters(initial_theta, types, maxiter=500):\n",
" opt_traj = []\n",
" rmse_traj = []\n",
" \n",
" def L(theta):\n",
" return loss(assign_parameters(theta, types))\n",
" \n",
" def _rmse(x):\n",
" return rmse(assign_parameters(x, types))\n",
" \n",
" def callback(x):\n",
" opt_traj.append(x)\n",
" rmse_traj.append(_rmse(x))\n",
" print(\"RMSE = {:.4f} e, |theta| = {:.4f}\".format(rmse_traj[-1], np.linalg.norm(x)))\n",
" \n",
" callback(initial_theta)\n",
" minimize(L, initial_theta, jac=grad(L), callback=callback,\n",
" method='L-BFGS-B',\n",
" #method='BFGS',\n",
" #method='Nelder-Mead',\n",
" options=dict(maxiter=maxiter, disp=True, maxcor=100))\n",
"\n",
" return opt_traj, rmse_traj"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Run local optimization with initial, elemental types"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"16353"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"onp.random.seed(0)\n",
"N_types = len(set(np.hstack(types)))\n",
"theta = onp.random.randn(2 * N_types)\n",
"theta[N_types:] = 1.0\n",
"theta = np.array(theta)\n",
"total_N_atoms = sum([mol.n_atoms for mol in train_mols])\n",
"total_N_atoms"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Enumerate and score proposed elaborations"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def get_grads(g, default_matches, proposed_smarts):\n",
" \"\"\"if proposing an elaboration of default_smarts type\n",
" \n",
" g: list of real-valued arrays of shape (n_atoms, n_per_particle_params)\n",
" default_matches: list of boolean arrays of same shape as g\n",
" proposed_smarts: assumed to produce a refinement of default_matches\n",
" \"\"\"\n",
" proposed_matches = get_match_masks(proposed_smarts)\n",
" \n",
" # assume proposed_matches are a refinement of default matches\n",
" g_ = np.vstack(g)\n",
" group_grads = g_[np.hstack(default_matches)]\n",
"\n",
" sub_mask = np.hstack(proposed_matches)[np.hstack(default_matches)]\n",
"\n",
" default_grads = group_grads[sub_mask == False]\n",
" proposed_grads = group_grads[sub_mask == True]\n",
" \n",
" return group_grads, default_grads, proposed_grads"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"def normalize(x):\n",
" return (x.T / np.linalg.norm(x, axis=1)).T\n",
" \n",
"def compute_favorability(group_grads, default_grads, proposed_grads, ord=2, normalized=False):\n",
" def norm(x):\n",
" return np.linalg.norm(x, ord=ord)\n",
" if normalized:\n",
" default_grads, proposed_grads, group_grads = normalize(default_grads), normalize(proposed_grads), normalize(group_grads)\n",
" return (norm(default_grads.sum(0)) + norm(proposed_grads.sum(0))) - norm(group_grads.sum(0))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def duplicate_param(theta, ind=0):\n",
" e_i, s_i = map(list, unpack(theta))\n",
" e_i.insert(ind+1, e_i[ind])\n",
" s_i.insert(ind+1, s_i[ind])\n",
" return np.array(e_i + s_i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Filter down list of atom primitives we'd consider"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"# initial list of possible primitives\n",
"primitives = [\n",
" '#1', '#6', '#8',\n",
" 'X1', 'X2', 'X3', 'X4','X5', 'X6',\n",
" 'x1', 'x2', 'x3', 'x4','x5', 'x6',\n",
" 'a', 'A',\n",
" 'r', 'r3', 'r4', 'r5', 'r6', 'r7',\n",
" '+0', '+1', '-1',\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"26"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(primitives)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 26/26 [00:14<00:00, 1.77it/s]\n"
]
}
],
"source": [
"match_masks = [get_match_masks(f'[{primitive}:1]') for primitive in tqdm(primitives)]"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"matches = np.array([np.hstack(m) for m in match_masks])"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['#1', '#6', '#8', 'X1', 'X2', 'X4', 'x2', 'r', 'r3', 'r4', 'r5', 'r6', 'r7']"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# select any primitives from this list that don't match 0% or 100% of atoms\n",
"any_variability = matches.std(1) > 0\n",
"informative_primitives = list(np.array(primitives)[any_variability])\n",
"informative_primitives"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(informative_primitives)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### To enumerate refinements, define neighborhood"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from chemper.graphs.environment import ChemicalEnvironment"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['#1', '#6', '#8', 'X1', 'X2', 'X4', 'x2', 'r', 'r3', 'r4', 'r5', 'r6', 'r7']"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"informative_primitives"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"# atom specifiers: primitives minus atomic number\n",
"atom_specifiers = ['X1', 'X2', 'X4', 'x2', 'r', 'r3', 'r4', 'r5', 'r6', 'r7']\n",
"bond_specifiers = ['-', '=', '#', '@']"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"def enumerate_atom_decorations(initial_smirks, atom_specifiers):\n",
" \"\"\"enumerate ways to add & decorators to atoms\"\"\"\n",
" \n",
" elaborations = []\n",
" initial_env = ChemicalEnvironment(initial_smirks)\n",
" n_atoms = len(initial_env.get_atoms())\n",
" for i in range(n_atoms):\n",
" for specifier in atom_specifiers:\n",
" new_env = ChemicalEnvironment(initial_smirks)\n",
" atom = new_env.get_atoms()[i]\n",
" if specifier not in atom.and_types:\n",
" atom.add_and_type(specifier)\n",
" # TODO: think about how to add OR types: for now considering only elaborations,\n",
" # i.e. modifications that make children more specific than parents\n",
" elaborations.append(new_env.as_smirks())\n",
" return elaborations\n",
" \n",
" \n",
"def enumerate_bond_elaborations(initial_smirks, bond_specifiers):\n",
" \"\"\"enumerate ways to replace generic bonds with more specific bonds\"\"\"\n",
" \n",
" elaborations = []\n",
" initial_env = ChemicalEnvironment(initial_smirks)\n",
" initial_bonds = initial_env.get_bonds()\n",
" n_bonds = len(initial_bonds)\n",
" for i in range(n_bonds):\n",
" if initial_bonds[i].is_generic:\n",
" for bond_specifier in bond_specifiers:\n",
" new_env = ChemicalEnvironment(initial_smirks)\n",
" bond = new_env.get_bonds()[i]\n",
" bond.add_and_type(bond_specifier)\n",
" elaborations.append(new_env.as_smirks())\n",
" return elaborations\n",
"\n",
"def enumerate_bond_additions(initial_smirks, atom_primitives, max_atoms=3):\n",
" \"\"\"if the smirks contains fewer than max_atoms atoms,\n",
" enumerate to add a generic bond from an existing atom to a new primitive\"\"\"\n",
" \n",
" elaborations = []\n",
" initial_env = ChemicalEnvironment(initial_smirks)\n",
" n_atoms = len(initial_env.get_atoms())\n",
" if n_atoms < max_atoms:\n",
" for i in range(n_atoms):\n",
" for primitive in atom_primitives:\n",
" new_env = ChemicalEnvironment(initial_smirks)\n",
" atom = new_env.get_atoms()[i]\n",
" new_env.add_atom(atom, new_and_types=[primitive])\n",
" elaborations.append(new_env.as_smirks())\n",
" return elaborations\n",
"\n",
"def enumerate_smirks_elaborations(initial_smirks, max_elaborations=1000):\n",
" a_d = enumerate_atom_decorations(initial_smirks, atom_specifiers)\n",
" b_e = enumerate_bond_elaborations(initial_smirks, bond_specifiers)\n",
" b_a = enumerate_bond_additions(initial_smirks, informative_primitives, max_atoms=3)\n",
" elaborations = [] + a_d + b_e + b_a\n",
" if len(elaborations) <= max_elaborations:\n",
" return elaborations\n",
" else:\n",
" print(f'too many options! randomly truncating to {max_elaborations}')\n",
" # randomly truncate\n",
" np.random.shuffle(elaborations)\n",
" return elaborations[:max_elaborations]"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"def enumerate_and_score_all_options(theta, smarts_list):\n",
" types = assign_types(smarts_list)\n",
" P = assign_parameters(theta, types)\n",
" g = grad(loss)(P)\n",
" \n",
" all_options = []\n",
" all_favorabilities = []\n",
" for i, default_smarts in enumerate(smarts_list):\n",
" default_matches = [t == i for t in types]\n",
" options = enumerate_smirks_elaborations(initial_smirks=default_smarts)\n",
" group_grads = [get_grads(g, default_matches, proposed_smarts) for proposed_smarts in tqdm(options)]\n",
" \n",
" all_options.append(options)\n",
" all_favorabilities.append([compute_favorability(*group_grad) for group_grad in group_grads])\n",
" \n",
" return all_options, all_favorabilities"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"def print_options(smarts_list, all_options, all_favorabilities, ):\n",
" print('considered {} discrete options'.format(sum(map(len, all_options))))\n",
" \n",
" for i, (options, favorabilities) in enumerate(zip(all_options, all_favorabilities)):\n",
" print(f'valid options for elaborating type {i} ({smarts_list[i]})')\n",
" print('elaboration\\tfavorability')\n",
" for i in np.argsort(favorabilities)[::-1]:\n",
" o, f = options[i], favorabilities[i]\n",
" if f > 0:\n",
" print(f'{o}\\t{f:.2e}')\n",
" print()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"# select greedily the best thing to split"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"from copy import deepcopy\n",
"def update_smarts_list(smarts_list, ind, elaboration):\n",
" updated_smarts_list = deepcopy(smarts_list)\n",
" updated_smarts_list.insert(ind + 1, elaboration)\n",
" return updated_smarts_list"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"def assign_types_using_match_matrix(match_matrix):\n",
" \"\"\"Process a binary match matrix into an integer array, assigning an integer to each atom.\"\"\"\n",
" inds = np.arange(match_matrix.shape[1])[::-1]\n",
" largest_match_inds = inds[np.argmax(match_matrix[:, ::-1], axis=1)]\n",
"\n",
" return largest_match_inds\n",
"\n",
"def validate_smarts_list(smarts_list):\n",
" match_masks = [get_match_masks(smarts) for smarts in smarts_list]\n",
" match_tensors = []\n",
" for i in range(len(match_masks[0])):\n",
" match_tensor = np.array([match_masks[m][i] for m in range(len(match_masks))])\n",
" match_tensors.append(match_tensor.T)\n",
" types = [assign_types_using_match_matrix(m) for m in match_tensors] # ahh, this wasn't doing last match wins...\n",
" unique_types = set(np.hstack(types))\n",
" return len(unique_types) == len(smarts_list)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 21.7 ms, sys: 2.77 ms, total: 24.5 ms\n",
"Wall time: 22.3 ms\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"validate_smarts_list(elemental_smarts_list)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"def select_most_favorable_valid_split(smarts_list, all_options, all_favorabilities, verbose=False):\n",
" if not validate_smarts_list(smarts_list):\n",
" raise(RuntimeError('invalid starting smarts list'))\n",
" \n",
" # flatten nested index structure for ease of sorting...\n",
" flat_inds_and_options = []\n",
" flat_favorabilities = []\n",
" for i in range(len(all_options)):\n",
" for j in range(len(all_favorabilities[i])):\n",
" flat_inds_and_options.append((i, j))\n",
" flat_favorabilities.append(all_favorabilities[i][j])\n",
" \n",
" # order from most to least favorable\n",
" for i in np.argsort(flat_favorabilities)[::-1]:\n",
" # validate that \n",
" type_ind, option_ind = flat_inds_and_options[i]\n",
" elaboration = all_options[type_ind][option_ind]\n",
" updated_smarts_list = update_smarts_list(smarts_list, type_ind, elaboration)\n",
" if verbose:\n",
" print(type_ind, elaboration, flat_favorabilities[i])\n",
" if validate_smarts_list(updated_smarts_list):\n",
" return (type_ind, elaboration)\n",
" \n",
" # TODO: handle this more gracefully\n",
" raise(RuntimeError('no valid options for type refinement'))"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"def flatten_options(all_options, all_favorabilities):\n",
" # flatten nested index structure for ease of sorting...\n",
" flat_inds_and_options = []\n",
" flat_favorabilities = []\n",
" for i in range(len(all_options)):\n",
" for j in range(len(all_favorabilities[i])):\n",
" flat_inds_and_options.append((i, j))\n",
" flat_favorabilities.append(all_favorabilities[i][j])\n",
" return flat_inds_and_options, flat_favorabilities\n",
"\n",
"def select_most_favorable_valid_split(smarts_list, all_options, all_favorabilities, verbose=False):\n",
" if not validate_smarts_list(smarts_list):\n",
" raise(RuntimeError('invalid starting smarts list'))\n",
" \n",
" flat_inds_and_options, flat_favorabilities = flatten_options(all_options, all_favorabilities)\n",
" \n",
" # order from most to least favorable\n",
" for i in np.argsort(flat_favorabilities)[::-1]:\n",
" # validate that \n",
" type_ind, option_ind = flat_inds_and_options[i]\n",
" elaboration = all_options[type_ind][option_ind]\n",
" updated_smarts_list = update_smarts_list(smarts_list, type_ind, elaboration)\n",
" if verbose:\n",
" print(type_ind, elaboration, flat_favorabilities[i])\n",
" if validate_smarts_list(updated_smarts_list):\n",
" return (type_ind, elaboration)\n",
" \n",
" # TODO: handle this more gracefully\n",
" raise(RuntimeError('no valid options for type refinement'))\n",
"\n",
"def select_random_valid_split(smarts_list, all_options, all_favorabilities):\n",
" # pick a refinement at random with favorability > 0\n",
" if not validate_smarts_list(smarts_list):\n",
" raise(RuntimeError('invalid starting smarts list'))\n",
" \n",
" flat_inds_and_options, flat_favorabilities = flatten_options(all_options, all_favorabilities)\n",
" \n",
" allowable_splits = [flat_inds_and_options[i] for i in range(len(flat_inds_and_options)) if flat_favorabilities[i] > 0]\n",
" np.random.shuffle(allowable_splits)\n",
" for i in range(len(allowable_splits)):\n",
" type_ind, option_ind = allowable_splits[i]\n",
" elaboration = all_options[type_ind][option_ind]\n",
" updated_smarts_list = update_smarts_list(smarts_list, type_ind, elaboration)\n",
" if validate_smarts_list(updated_smarts_list):\n",
" return (type_ind, elaboration)\n",
" \n",
" # TODO: handle this more gracefully\n",
" raise(RuntimeError('no valid options for type refinement'))"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"def gradient_refine_smarts_list(theta, smarts_list, callback=None):\n",
" \"\"\"enumerate all options, pick the split with the greatest favorability\"\"\"\n",
" all_options, all_favorabilities = enumerate_and_score_all_options(theta, smarts_list)\n",
" if callback is not None:\n",
" callback(smarts_list, all_options, all_favorabilities)\n",
" \n",
" ind, elaboration = select_most_favorable_valid_split(smarts_list, all_options, all_favorabilities)\n",
" updated_theta = duplicate_param(theta, ind=ind)\n",
" updated_smarts_list = update_smarts_list(smarts_list, ind, elaboration)\n",
" return updated_theta, updated_smarts_list\n",
"\n",
"# just given the set of molecules (independent of target, could just split)\n",
"def randomly_refine_smarts_list(theta, smarts_list, callback=None):\n",
" all_options, all_favorabilities = enumerate_and_score_all_options(theta, smarts_list)\n",
" if callback is not None:\n",
" callback(smarts_list, all_options, all_favorabilities)\n",
" \n",
" ind, elaboration = select_random_valid_split(smarts_list, all_options, all_favorabilities)\n",
" updated_theta = duplicate_param(theta, ind=ind)\n",
" updated_smarts_list = update_smarts_list(smarts_list, ind, elaboration)\n",
" return updated_theta, updated_smarts_list"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"def iterative_type_refinement(\n",
" initial_theta, initial_smarts_list,\n",
" type_refinement_fxn=gradient_refine_smarts_list,\n",
" n_refinement_steps=50, opt_kwargs=dict(maxiter=50),\n",
" early_stop_threshold=1e-2,\n",
"):\n",
" \n",
" # store trajectories\n",
" smarts_lists = [initial_smarts_list]\n",
" rmse_trajs = []\n",
" theta_trajs = []\n",
" options_considered = []\n",
" def smarts_refinement_callback(smarts_list, all_options, all_favorabilities):\n",
" print_options(smarts_list, all_options, all_favorabilities)\n",
" options_considered.append((all_options, all_favorabilities))\n",
" \n",
" types = assign_types(smarts_lists[-1])\n",
" \n",
" # optimize parameters\n",
" opt_traj, rmse_traj = optimize_parameters(initial_theta, types, **opt_kwargs)\n",
" rmse_trajs.append(rmse_traj)\n",
" theta_trajs.append(opt_traj)\n",
" \n",
" n_steps_no_improvement = 0\n",
" \n",
" for _ in range(n_refinement_steps):\n",
" theta = theta_trajs[-1][-1]\n",
" \n",
" # update smarts list\n",
" updated_theta, updated_smarts_list = type_refinement_fxn(theta, smarts_lists[-1], callback=smarts_refinement_callback)\n",
" smarts_lists.append(updated_smarts_list)\n",
" updated_types = assign_types(updated_smarts_list)\n",
" \n",
" print(f'previous smarts list:\\n\\t{smarts_lists[-2]}')\n",
" print(f'updated smarts list:\\n\\t{smarts_lists[-1]}')\n",
" \n",
" # optimize parameters\n",
" opt_traj, rmse_traj = optimize_parameters(updated_theta, updated_types, **opt_kwargs)\n",
" rmse_trajs.append(rmse_traj)\n",
" theta_trajs.append(opt_traj)\n",
" \n",
" # terminate type-refinement early\n",
" improvement = (rmse_trajs[-2][-1] / (rmse_trajs[-1][-1])) - 1\n",
" if improvement < early_stop_threshold:\n",
" print(\"didn't make much improvement...\")\n",
" n_steps_no_improvement += 1\n",
" else:\n",
" n_steps_no_improvement = 0\n",
" if n_steps_no_improvement > 5:\n",
" print('stopping early!')\n",
" break\n",
" return smarts_lists, rmse_trajs, theta_trajs, options_considered"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"opt_kwargs=dict(maxiter=20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Run with random moves"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RMSE = 0.6927 e, |theta| = 2.6889\n",
"RMSE = 0.1972 e, |theta| = 2.8688\n",
"RMSE = 0.1470 e, |theta| = 2.8733\n",
"RMSE = 0.1094 e, |theta| = 2.8855\n",
"RMSE = 0.1072 e, |theta| = 2.8938\n",
"RMSE = 0.1068 e, |theta| = 2.8986\n",
"RMSE = 0.1068 e, |theta| = 2.8987\n",
"RMSE = 0.1068 e, |theta| = 2.8999\n",
"RMSE = 0.1067 e, |theta| = 2.9032\n",
"RMSE = 0.1065 e, |theta| = 2.9220\n",
"RMSE = 0.1060 e, |theta| = 3.0283\n",
"RMSE = 0.1058 e, |theta| = 3.1096\n",
"RMSE = 0.1054 e, |theta| = 3.1455\n",
"RMSE = 0.1052 e, |theta| = 3.1569\n",
"RMSE = 0.1051 e, |theta| = 3.1881\n",
"RMSE = 0.1051 e, |theta| = 3.1872\n",
"RMSE = 0.1051 e, |theta| = 3.1849\n",
"RMSE = 0.1051 e, |theta| = 3.1860\n",
"RMSE = 0.1051 e, |theta| = 3.1750\n",
"RMSE = 0.1051 e, |theta| = 3.1513\n",
"RMSE = 0.1050 e, |theta| = 3.1481\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:14<00:00, 1.55it/s]\n",
"100%|██████████| 23/23 [00:15<00:00, 1.46it/s]\n",
"100%|██████████| 23/23 [00:16<00:00, 1.43it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 69 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]\t6.11e+02\n",
"[#1:1]~[*;#8]\t6.11e+02\n",
"[#1:1]~[*;X2]\t6.11e+02\n",
"[#1:1]~[*;X4]\t6.11e+02\n",
"[#1:1]~[*;x2]\t3.81e+02\n",
"[#1:1]~[*;r]\t3.81e+02\n",
"[#1:1]~[*;r7]\t8.82e+01\n",
"[#1:1]~[*;r6]\t2.71e+01\n",
"[#1:1]~[*;r5]\t1.37e+01\n",
"[#1:1]~[*;r4]\t3.19e+00\n",
"[#1:1]~[*;r3]\t9.82e-01\n",
"\n",
"valid options for elaborating type 1 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t2.51e+03\n",
"[#6:1]~[*;#8]\t2.51e+03\n",
"[#6;x2:1]\t1.05e+03\n",
"[#6;r:1]\t1.05e+03\n",
"[#6:1]~[*;#1]\t8.00e+02\n",
"[#6:1]~[*;X1]\t8.00e+02\n",
"[#6:1]~[*;X4]\t2.63e+02\n",
"[#6:1]~[*;#6]\t2.63e+02\n",
"[#6;r7:1]\t2.31e+02\n",
"[#6;r6:1]\t7.60e+01\n",
"[#6;r5:1]\t7.15e+01\n",
"[#6;r4:1]\t3.56e+01\n",
"[#6:1]~[*;r6]\t2.51e+01\n",
"[#6:1]~[*;r4]\t1.96e+01\n",
"[#6:1]~[*;r3]\t1.69e+01\n",
"[#6;r3:1]\t1.07e+01\n",
"[#6:1]~[*;r5]\t1.04e+01\n",
"[#6:1]~[*;r7]\t4.76e+00\n",
"\n",
"valid options for elaborating type 2 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t1.35e+02\n",
"[#8;x2:1]\t1.35e+02\n",
"[#8;r:1]\t1.35e+02\n",
"[#8:1]~[*;X1]\t1.35e+02\n",
"[#8:1]~[*;X2]\t7.13e+01\n",
"[#8:1]~[*;#8]\t7.13e+01\n",
"[#8;r7:1]\t3.83e+01\n",
"[#8;r6:1]\t1.71e+01\n",
"[#8;r5:1]\t9.32e+00\n",
"[#8:1]~[*;#6]\t3.36e+00\n",
"[#8:1]~[*;X4]\t3.36e+00\n",
"[#8;r4:1]\t2.53e+00\n",
"[#8:1]~[*;r7]\t1.77e+00\n",
"[#8;r3:1]\t1.41e+00\n",
"[#8:1]~[*;r3]\t2.34e-01\n",
"[#8:1]~[*;r6]\t2.96e-03\n",
"[#8:1]~[*;r4]\t1.88e-03\n",
"[#8:1]~[*;r5]\t2.19e-04\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#8:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"RMSE = 0.1050 e, |theta| = 4.1528\n",
"RMSE = 0.1048 e, |theta| = 4.1529\n",
"RMSE = 0.1048 e, |theta| = 4.1529\n",
"RMSE = 0.1048 e, |theta| = 4.1529\n",
"RMSE = 0.1047 e, |theta| = 4.1532\n",
"RMSE = 0.1046 e, |theta| = 4.1536\n",
"RMSE = 0.1045 e, |theta| = 4.1539\n",
"RMSE = 0.1045 e, |theta| = 4.1539\n",
"RMSE = 0.1045 e, |theta| = 4.1538\n",
"RMSE = 0.1045 e, |theta| = 4.1538\n",
"RMSE = 0.1045 e, |theta| = 4.1537\n",
"RMSE = 0.1045 e, |theta| = 4.1526\n",
"RMSE = 0.1045 e, |theta| = 4.1501\n",
"RMSE = 0.1045 e, |theta| = 4.1429\n",
"RMSE = 0.1045 e, |theta| = 4.1265\n",
"RMSE = 0.1045 e, |theta| = 4.0957\n",
"RMSE = 0.1045 e, |theta| = 4.0602\n",
"RMSE = 0.1045 e, |theta| = 4.0439\n",
"RMSE = 0.1045 e, |theta| = 4.0460\n",
"RMSE = 0.1045 e, |theta| = 4.0481\n",
"RMSE = 0.1045 e, |theta| = 4.0497\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 123.61it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 123.86it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 125.33it/s]\n",
"100%|██████████| 23/23 [00:14<00:00, 1.61it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 92 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]\t7.28e+02\n",
"[#1:1]~[*;#8]\t7.28e+02\n",
"[#1:1]~[*;X2]\t7.28e+02\n",
"[#1:1]~[*;X4]\t7.28e+02\n",
"[#1:1]~[*;x2]\t4.54e+02\n",
"[#1:1]~[*;r]\t4.54e+02\n",
"[#1:1]~[*;r7]\t1.12e+02\n",
"[#1:1]~[*;r6]\t3.15e+01\n",
"[#1:1]~[*;r5]\t1.59e+01\n",
"[#1:1]~[*;r3]\t6.31e+00\n",
"[#1:1]~[*;r4]\t3.79e+00\n",
"\n",
"valid options for elaborating type 1 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t2.95e+03\n",
"[#6:1]~[*;#8]\t2.95e+03\n",
"[#6;x2:1]\t1.24e+03\n",
"[#6;r:1]\t1.24e+03\n",
"[#6:1]~[*;#1]\t9.48e+02\n",
"[#6:1]~[*;X1]\t9.48e+02\n",
"[#6:1]~[*;#6]\t3.20e+02\n",
"[#6:1]~[*;X4]\t3.20e+02\n",
"[#6;r7:1]\t3.17e+02\n",
"[#6;r6:1]\t9.49e+01\n",
"[#6;r5:1]\t9.18e+01\n",
"[#6;r4:1]\t5.09e+01\n",
"[#6:1]~[*;r7]\t3.84e+01\n",
"[#6:1]~[*;r6]\t3.70e+01\n",
"[#6:1]~[*;r4]\t2.68e+01\n",
"[#6:1]~[*;r3]\t2.03e+01\n",
"[#6:1]~[*;r5]\t1.75e+01\n",
"[#6;r3:1]\t1.28e+01\n",
"\n",
"valid options for elaborating type 2 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t1.36e+02\n",
"[#8;r:1]\t1.36e+02\n",
"[#8:1]~[*;#1]\t1.36e+02\n",
"[#8:1]~[*;X1]\t1.36e+02\n",
"[#8:1]~[*;X2]\t5.48e+01\n",
"[#8:1]~[*;#8]\t5.48e+01\n",
"[#8:1]~[*;r7]\t3.35e+01\n",
"[#8;r6:1]\t2.21e+01\n",
"[#8;r5:1]\t1.28e+01\n",
"[#8:1]~[*;r6]\t6.05e+00\n",
"[#8;r4:1]\t4.22e+00\n",
"[#8:1]~[*;#6]\t3.62e+00\n",
"[#8:1]~[*;X4]\t3.62e+00\n",
"[#8:1]~[*;r4]\t2.76e+00\n",
"[#8:1]~[*;r5]\t2.06e+00\n",
"[#8;r3:1]\t1.62e+00\n",
"[#8:1]~[*;r3]\t7.62e-01\n",
"\n",
"valid options for elaborating type 3 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t1.63e+01\n",
"[#8;r7:1]~[*;#8]\t1.63e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"RMSE = 0.1045 e, |theta| = 4.2312\n",
"RMSE = 0.1004 e, |theta| = 4.2316\n",
"RMSE = 0.0950 e, |theta| = 4.2323\n",
"RMSE = 0.0850 e, |theta| = 4.2372\n",
"RMSE = 0.0847 e, |theta| = 4.2370\n",
"RMSE = 0.0839 e, |theta| = 4.2371\n",
"RMSE = 0.0839 e, |theta| = 4.2371\n",
"RMSE = 0.0837 e, |theta| = 4.2374\n",
"RMSE = 0.0836 e, |theta| = 4.2381\n",
"RMSE = 0.0835 e, |theta| = 4.2396\n",
"RMSE = 0.0835 e, |theta| = 4.2402\n",
"RMSE = 0.0835 e, |theta| = 4.2400\n",
"RMSE = 0.0835 e, |theta| = 4.2400\n",
"RMSE = 0.0835 e, |theta| = 4.2400\n",
"RMSE = 0.0835 e, |theta| = 4.2396\n",
"RMSE = 0.0835 e, |theta| = 4.2385\n",
"RMSE = 0.0835 e, |theta| = 4.2338\n",
"RMSE = 0.0835 e, |theta| = 4.2237\n",
"RMSE = 0.0835 e, |theta| = 4.2076\n",
"RMSE = 0.0834 e, |theta| = 4.2084\n",
"RMSE = 0.0833 e, |theta| = 4.2043\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 117.57it/s]\n",
"100%|██████████| 50/50 [00:32<00:00, 1.55it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 131.71it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 131.37it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.04it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 142 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t8.37e+00\n",
"[#1:1]~[*;x2]\t8.37e+00\n",
"[#1:1]~[*;r7]\t4.70e-01\n",
"[#1:1]~[*;r4]\t9.64e-03\n",
"[#1:1]~[*;r6]\t8.85e-03\n",
"[#1:1]~[*;r3]\t7.07e-03\n",
"[#1:1]~[*;r5]\t3.80e-03\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r3]\t6.63e-01\n",
"[#1:1]~[*;X2]~[*;r4]\t2.83e-04\n",
"[#1:1]~[*;X2]~[*;r7]\t1.32e-04\n",
"[#1:1]~[*;X2]~[*;r5]\t1.18e-05\n",
"[#1:1]~[*;X2]~[*;r6]\t7.26e-07\n",
"\n",
"valid options for elaborating type 2 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t2.94e+03\n",
"[#6:1]~[*;#8]\t2.94e+03\n",
"[#6;x2:1]\t1.26e+03\n",
"[#6;r:1]\t1.26e+03\n",
"[#6:1]~[*;#1]\t9.60e+02\n",
"[#6:1]~[*;X1]\t9.60e+02\n",
"[#6;r7:1]\t3.45e+02\n",
"[#6:1]~[*;#6]\t3.13e+02\n",
"[#6:1]~[*;X4]\t3.13e+02\n",
"[#6;r6:1]\t1.13e+02\n",
"[#6;r5:1]\t1.01e+02\n",
"[#6;r4:1]\t6.94e+01\n",
"[#6:1]~[*;r7]\t6.46e+01\n",
"[#6:1]~[*;r6]\t1.54e+01\n",
"[#6:1]~[*;r3]\t6.33e+00\n",
"[#6:1]~[*;r5]\t2.80e+00\n",
"[#6;r3:1]\t2.63e+00\n",
"[#6:1]~[*;r4]\t4.51e-01\n",
"\n",
"valid options for elaborating type 3 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t2.21e+02\n",
"[#8;x2:1]\t2.21e+02\n",
"[#8;r:1]\t2.21e+02\n",
"[#8:1]~[*;X1]\t2.21e+02\n",
"[#8:1]~[*;X2]\t8.08e+01\n",
"[#8:1]~[*;#8]\t8.08e+01\n",
"[#8:1]~[*;r7]\t5.46e+01\n",
"[#8;r6:1]\t2.97e+01\n",
"[#8;r5:1]\t1.34e+01\n",
"[#8:1]~[*;r4]\t4.74e+00\n",
"[#8:1]~[*;r6]\t3.83e+00\n",
"[#8;r4:1]\t6.54e-01\n",
"[#8:1]~[*;#6]\t8.98e-02\n",
"[#8:1]~[*;X4]\t8.98e-02\n",
"[#8;r3:1]\t6.47e-03\n",
"[#8:1]~[*;r5]\t1.52e-04\n",
"[#8:1]~[*;r3]\t2.76e-05\n",
"\n",
"valid options for elaborating type 4 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t1.73e+01\n",
"[#8;r7:1]~[*;#8]\t1.73e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"RMSE = 0.0833 e, |theta| = 4.4064\n",
"RMSE = 0.0833 e, |theta| = 4.4063\n",
"RMSE = 0.0833 e, |theta| = 4.4063\n",
"RMSE = 0.0833 e, |theta| = 4.4058\n",
"RMSE = 0.0833 e, |theta| = 4.4057\n",
"RMSE = 0.0833 e, |theta| = 4.4050\n",
"RMSE = 0.0833 e, |theta| = 4.4038\n",
"RMSE = 0.0833 e, |theta| = 4.4012\n",
"RMSE = 0.0833 e, |theta| = 4.3973\n",
"RMSE = 0.0833 e, |theta| = 4.3867\n",
"RMSE = 0.0832 e, |theta| = 4.3803\n",
"RMSE = 0.0832 e, |theta| = 4.3697\n",
"RMSE = 0.0832 e, |theta| = 4.3367\n",
"RMSE = 0.0832 e, |theta| = 4.2926\n",
"RMSE = 0.0833 e, |theta| = 4.2052\n",
"RMSE = 0.0832 e, |theta| = 4.1124\n",
"RMSE = 0.0832 e, |theta| = 4.0034\n",
"RMSE = 0.0832 e, |theta| = 3.9954\n",
"RMSE = 0.0832 e, |theta| = 3.9834\n",
"RMSE = 0.0831 e, |theta| = 3.9730\n",
"RMSE = 0.0831 e, |theta| = 3.9857\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 56.25it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 85.36it/s]\n",
"100%|██████████| 38/38 [00:21<00:00, 1.73it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 135.01it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.14it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.54it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 180 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r4]\t1.05e+01\n",
"[#1:1]~[*;r6]\t9.64e+00\n",
"[#1:1]~[*;r3]\t9.06e+00\n",
"[#1:1]~[*;r5]\t7.17e+00\n",
"[#1:1]~[*;r]\t8.12e-03\n",
"[#1:1]~[*;x2]\t8.12e-03\n",
"[#1:1]~[*;r7]\t1.68e-06\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r4]\t1.88e-05\n",
"[#1:1]~[*;X2]~[*;r6]\t2.54e-06\n",
"[#1:1]~[*;X2]~[*;r7]\t7.27e-07\n",
"[#1:1]~[*;X2]~[*;r5]\t1.05e-08\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t5.76e+03\n",
"[#6:1]~[*;#8]\t5.76e+03\n",
"[#6;x2:1]\t2.48e+03\n",
"[#6;r:1]\t2.48e+03\n",
"[#6:1]~[*;#1]\t1.84e+03\n",
"[#6:1]~[*;X1]\t1.84e+03\n",
"[#6;r7:1]\t6.51e+02\n",
"[#6:1]~[*;#6]\t5.60e+02\n",
"[#6:1]~[*;X4]\t5.60e+02\n",
"[#6;r6:1]\t1.64e+02\n",
"[#6;r5:1]\t1.42e+02\n",
"[#6:1]~[*;r7]\t1.05e+02\n",
"[#6;r4:1]\t8.16e+01\n",
"[#6:1]~[*;r6]\t3.26e+01\n",
"[#6:1]~[*;r3]\t1.54e+01\n",
"[#6;r3:1]\t9.42e+00\n",
"[#6:1]~[*;r5]\t3.91e+00\n",
"[#6:1]~[*;r4]\t8.88e-01\n",
"\n",
"valid options for elaborating type 4 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t6.98e+02\n",
"[#8;r:1]\t6.98e+02\n",
"[#8:1]~[*;#1]\t6.98e+02\n",
"[#8:1]~[*;X1]\t6.98e+02\n",
"[#8:1]~[*;X2]\t2.56e+02\n",
"[#8:1]~[*;#8]\t2.56e+02\n",
"[#8:1]~[*;r7]\t1.70e+02\n",
"[#8;r6:1]\t1.11e+02\n",
"[#8;r5:1]\t5.65e+01\n",
"[#8:1]~[*;r6]\t2.95e+01\n",
"[#8;r4:1]\t2.08e+01\n",
"[#8:1]~[*;#6]\t1.54e+01\n",
"[#8:1]~[*;X4]\t1.54e+01\n",
"[#8:1]~[*;r4]\t1.51e+01\n",
"[#8;r3:1]\t4.59e+00\n",
"[#8:1]~[*;r3]\t2.69e+00\n",
"[#8:1]~[*;r5]\t1.93e-01\n",
"\n",
"valid options for elaborating type 5 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t1.75e+01\n",
"[#8;r7:1]~[*;#8]\t1.75e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#8:1]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8;r7:1]']\n",
"RMSE = 0.0831 e, |theta| = 4.1252\n",
"RMSE = 0.0829 e, |theta| = 4.1252\n",
"RMSE = 0.0828 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1252\n",
"RMSE = 0.0827 e, |theta| = 4.1251\n",
"RMSE = 0.0827 e, |theta| = 4.1251\n",
"RMSE = 0.0827 e, |theta| = 4.1251\n",
"RMSE = 0.0827 e, |theta| = 4.1251\n",
"RMSE = 0.0827 e, |theta| = 4.1253\n",
"RMSE = 0.0827 e, |theta| = 4.1256\n",
"RMSE = 0.0827 e, |theta| = 4.1257\n",
"RMSE = 0.0827 e, |theta| = 4.1255\n",
"RMSE = 0.0827 e, |theta| = 4.1255\n",
"RMSE = 0.0827 e, |theta| = 4.1256\n",
"RMSE = 0.0827 e, |theta| = 4.1256\n",
"RMSE = 0.0827 e, |theta| = 4.1256\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 113.66it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 128.74it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 129.84it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 126.79it/s]\n",
"100%|██████████| 23/23 [00:14<00:00, 1.64it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 133.28it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.55it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 203 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]\t3.56e+01\n",
"[#1:1]~[*;r]\t2.97e+01\n",
"[#1:1]~[*;x2]\t2.97e+01\n",
"[#1:1]~[*;r6]\t1.04e+01\n",
"[#1:1]~[*;r4]\t1.01e+01\n",
"[#1:1]~[*;r3]\t8.74e+00\n",
"[#1:1]~[*;r7]\t2.86e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r5]\t2.34e+00\n",
"[#1:1]~[*;X2]~[*;r7]\t1.99e+00\n",
"[#1:1]~[*;X2]~[*;r4]\t3.13e-01\n",
"[#1:1]~[*;X2]~[*;r6]\t9.78e-02\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;#8]\t6.35e+03\n",
"[#6:1]~[*;X2]\t6.35e+03\n",
"[#6;x2:1]\t2.72e+03\n",
"[#6;r:1]\t2.72e+03\n",
"[#6:1]~[*;#1]\t2.05e+03\n",
"[#6:1]~[*;X1]\t2.05e+03\n",
"[#6;r7:1]\t8.21e+02\n",
"[#6:1]~[*;#6]\t6.79e+02\n",
"[#6:1]~[*;X4]\t6.79e+02\n",
"[#6;r6:1]\t2.71e+02\n",
"[#6:1]~[*;r7]\t1.87e+02\n",
"[#6;r4:1]\t1.71e+02\n",
"[#6:1]~[*;r5]\t1.06e+02\n",
"[#6:1]~[*;r6]\t2.91e+01\n",
"[#6:1]~[*;r3]\t1.41e+01\n",
"[#6;r3:1]\t8.34e+00\n",
"[#6:1]~[*;r4]\t5.68e+00\n",
"\n",
"valid options for elaborating type 4 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;X2]\t3.92e+02\n",
"[#6;r5:1]~[*;#8]\t3.92e+02\n",
"[#6;r5:1]~[*;X1]\t1.67e+02\n",
"[#6;r5:1]~[*;#1]\t1.67e+02\n",
"[#6;r5:1]~[*;#6]\t4.82e+01\n",
"[#6;r5:1]~[*;X4]\t4.82e+01\n",
"\n",
"valid options for elaborating type 5 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t7.32e+02\n",
"[#8;x2:1]\t7.32e+02\n",
"[#8;r:1]\t7.32e+02\n",
"[#8:1]~[*;X1]\t7.32e+02\n",
"[#8:1]~[*;X2]\t2.85e+02\n",
"[#8:1]~[*;#8]\t2.85e+02\n",
"[#8:1]~[*;r7]\t1.84e+02\n",
"[#8;r6:1]\t1.12e+02\n",
"[#8;r5:1]\t1.01e+02\n",
"[#8:1]~[*;r5]\t6.06e+01\n",
"[#8:1]~[*;r6]\t2.37e+01\n",
"[#8;r4:1]\t2.02e+01\n",
"[#8:1]~[*;#6]\t1.91e+01\n",
"[#8:1]~[*;X4]\t1.91e+01\n",
"[#8:1]~[*;r4]\t1.86e+01\n",
"[#8;r3:1]\t5.38e+00\n",
"[#8:1]~[*;r3]\t2.55e+00\n",
"\n",
"valid options for elaborating type 6 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.01e+01\n",
"[#8;r7:1]~[*;#8]\t2.01e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8;r7:1]']\n",
"RMSE = 0.0827 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3907\n",
"RMSE = 0.0826 e, |theta| = 4.3906\n",
"RMSE = 0.0826 e, |theta| = 4.3906\n",
"RMSE = 0.0826 e, |theta| = 4.3905\n",
"RMSE = 0.0826 e, |theta| = 4.3904\n",
"RMSE = 0.0826 e, |theta| = 4.3904\n",
"RMSE = 0.0826 e, |theta| = 4.3904\n",
"RMSE = 0.0826 e, |theta| = 4.3904\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 117.42it/s]\n",
"100%|██████████| 50/50 [00:29<00:00, 1.70it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 144.08it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 140.70it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.06it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.75it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.11it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 253 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t1.87e+01\n",
"[#1:1]~[*;x2]\t1.87e+01\n",
"[#1:1]~[*;r6]\t1.31e+01\n",
"[#1:1]~[*;r4]\t1.10e+01\n",
"[#1:1]~[*;r3]\t8.94e+00\n",
"[#1:1]~[*;r7]\t3.11e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t8.49e-01\n",
"[#1:1]~[*;r5]~[*;#8]\t8.49e-01\n",
"[#1:1]~[*;r5]~[*;X1]\t3.45e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t3.45e-01\n",
"[#1:1]~[*;r5]~[*;#6]\t1.77e-01\n",
"[#1:1]~[*;r5]~[*;X4]\t1.77e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t1.83e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t1.63e+00\n",
"[#1:1]~[*;X2]~[*;r4]\t3.52e-01\n",
"[#1:1]~[*;X2]~[*;r6]\t7.27e-02\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;#8]\t6.29e+03\n",
"[#6:1]~[*;X2]\t6.29e+03\n",
"[#6;x2:1]\t2.68e+03\n",
"[#6;r:1]\t2.68e+03\n",
"[#6:1]~[*;#1]\t2.03e+03\n",
"[#6:1]~[*;X1]\t2.03e+03\n",
"[#6;r7:1]\t8.09e+02\n",
"[#6:1]~[*;#6]\t6.73e+02\n",
"[#6:1]~[*;X4]\t6.73e+02\n",
"[#6;r6:1]\t2.65e+02\n",
"[#6:1]~[*;r7]\t1.78e+02\n",
"[#6;r4:1]\t1.68e+02\n",
"[#6:1]~[*;r5]\t7.21e+01\n",
"[#6:1]~[*;r6]\t3.35e+01\n",
"[#6:1]~[*;r3]\t1.51e+01\n",
"[#6;r3:1]\t9.15e+00\n",
"[#6:1]~[*;r4]\t3.65e+00\n",
"\n",
"valid options for elaborating type 5 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;X2]\t3.98e+02\n",
"[#6;r5:1]~[*;#8]\t3.98e+02\n",
"[#6;r5:1]~[*;X1]\t1.65e+02\n",
"[#6;r5:1]~[*;#1]\t1.65e+02\n",
"[#6;r5:1]~[*;#6]\t4.91e+01\n",
"[#6;r5:1]~[*;X4]\t4.91e+01\n",
"\n",
"valid options for elaborating type 6 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t7.39e+02\n",
"[#8;x2:1]\t7.39e+02\n",
"[#8;r:1]\t7.39e+02\n",
"[#8:1]~[*;X1]\t7.39e+02\n",
"[#8:1]~[*;X2]\t2.88e+02\n",
"[#8:1]~[*;#8]\t2.88e+02\n",
"[#8:1]~[*;r7]\t1.85e+02\n",
"[#8;r6:1]\t1.12e+02\n",
"[#8;r5:1]\t1.06e+02\n",
"[#8:1]~[*;r5]\t6.62e+01\n",
"[#8:1]~[*;r6]\t2.33e+01\n",
"[#8;r4:1]\t2.05e+01\n",
"[#8:1]~[*;#6]\t1.98e+01\n",
"[#8:1]~[*;X4]\t1.98e+01\n",
"[#8:1]~[*;r4]\t1.75e+01\n",
"[#8;r3:1]\t5.69e+00\n",
"[#8:1]~[*;r3]\t2.84e+00\n",
"\n",
"valid options for elaborating type 7 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.00e+01\n",
"[#8;r7:1]~[*;#8]\t2.00e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0826 e, |theta| = 4.5750\n",
"RMSE = 0.0820 e, |theta| = 4.5750\n",
"RMSE = 0.0815 e, |theta| = 4.5751\n",
"RMSE = 0.0810 e, |theta| = 4.5752\n",
"RMSE = 0.0800 e, |theta| = 4.5757\n",
"RMSE = 0.0799 e, |theta| = 4.5758\n",
"RMSE = 0.0799 e, |theta| = 4.5759\n",
"RMSE = 0.0798 e, |theta| = 4.5760\n",
"RMSE = 0.0798 e, |theta| = 4.5761\n",
"RMSE = 0.0798 e, |theta| = 4.5761\n",
"RMSE = 0.0797 e, |theta| = 4.5761\n",
"RMSE = 0.0797 e, |theta| = 4.5763\n",
"RMSE = 0.0796 e, |theta| = 4.5770\n",
"RMSE = 0.0796 e, |theta| = 4.5774\n",
"RMSE = 0.0796 e, |theta| = 4.5773\n",
"RMSE = 0.0796 e, |theta| = 4.5771\n",
"RMSE = 0.0796 e, |theta| = 4.5773\n",
"RMSE = 0.0796 e, |theta| = 4.5773\n",
"RMSE = 0.0796 e, |theta| = 4.5772\n",
"RMSE = 0.0796 e, |theta| = 4.5772\n",
"RMSE = 0.0796 e, |theta| = 4.5771\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 123.50it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 139.59it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.45it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 132.29it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 123.25it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 128.33it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.35it/s]\n",
"100%|██████████| 50/50 [00:30<00:00, 1.64it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.14it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 303 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.20e+01\n",
"[#1:1]~[*;x2]\t2.20e+01\n",
"[#1:1]~[*;r6]\t1.07e+01\n",
"[#1:1]~[*;r4]\t1.07e+01\n",
"[#1:1]~[*;r3]\t8.46e+00\n",
"[#1:1]~[*;r7]\t3.63e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t7.32e+00\n",
"[#1:1]~[*;r5]~[*;#8]\t7.32e+00\n",
"[#1:1]~[*;r5]~[*;#6]\t2.84e-01\n",
"[#1:1]~[*;r5]~[*;X4]\t2.84e-01\n",
"[#1:1]~[*;r5]~[*;X1]\t1.76e-03\n",
"[#1:1]~[*;r5]~[*;#1]\t1.76e-03\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r5]\t1.84e+00\n",
"[#1:1]~[*;X2]~[*;r7]\t1.84e+00\n",
"[#1:1]~[*;X2]~[*;r4]\t4.19e-01\n",
"[#1:1]~[*;X2]~[*;r6]\t1.07e-04\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t1.12e+04\n",
"[#6:1]~[*;#8]\t1.12e+04\n",
"[#6;x2:1]\t4.77e+03\n",
"[#6;r:1]\t4.77e+03\n",
"[#6:1]~[*;#1]\t3.66e+03\n",
"[#6:1]~[*;X1]\t3.66e+03\n",
"[#6;r7:1]\t1.33e+03\n",
"[#6:1]~[*;#6]\t1.18e+03\n",
"[#6:1]~[*;X4]\t1.18e+03\n",
"[#6;r6:1]\t5.19e+02\n",
"[#6;r4:1]\t2.88e+02\n",
"[#6:1]~[*;r7]\t1.63e+02\n",
"[#6:1]~[*;r5]\t5.09e+01\n",
"[#6:1]~[*;r6]\t1.15e+01\n",
"[#6:1]~[*;r3]\t8.41e+00\n",
"[#6:1]~[*;r4]\t6.48e+00\n",
"[#6;r3:1]\t1.50e+00\n",
"\n",
"valid options for elaborating type 5 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;X2]\t1.87e+03\n",
"[#6;r5:1]~[*;#8]\t1.87e+03\n",
"[#6;r5:1]~[*;X1]\t7.34e+02\n",
"[#6;r5:1]~[*;#1]\t7.34e+02\n",
"[#6;r5:1]~[*;#6]\t2.26e+02\n",
"[#6;r5:1]~[*;X4]\t2.26e+02\n",
"\n",
"valid options for elaborating type 6 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t5.91e+02\n",
"[#8;r:1]\t5.91e+02\n",
"[#8:1]~[*;X1]\t5.91e+02\n",
"[#8:1]~[*;#1]\t5.91e+02\n",
"[#8:1]~[*;r7]\t1.53e+02\n",
"[#8;r6:1]\t7.37e+01\n",
"[#8;r5:1]\t6.65e+01\n",
"[#8:1]~[*;r5]\t3.48e+01\n",
"[#8;r4:1]\t2.16e+01\n",
"[#8:1]~[*;r4]\t7.21e+00\n",
"[#8:1]~[*;r6]\t2.56e+00\n",
"[#8;r3:1]\t2.34e+00\n",
"[#8:1]~[*;r3]\t2.30e-01\n",
"\n",
"valid options for elaborating type 7 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t8.36e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t8.36e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t8.36e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t8.36e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t7.06e+00\n",
"[#8:1]~[*;r5;#8]\t7.06e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t7.06e+00\n",
"[#8;r5:1]~[*;#8]\t7.06e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t2.57e+00\n",
"[#8:1]~[*;#8]~[*;#6]\t2.57e+00\n",
"[#8:1]~[*;#8]~[*;X2]\t2.57e+00\n",
"[#8:1]~[*;#8]~[*;X4]\t2.57e+00\n",
"[#8;r6:1]~[*;#8]\t1.61e+00\n",
"[#8:1]~[*;#8]~[*;r6]\t1.61e+00\n",
"[#8:1](~[*;#8])~[*;r6]\t1.61e+00\n",
"[#8:1]~[*;r6;#8]\t1.61e+00\n",
"[#8:1](~[*;#8])~[*;r3]\t1.27e+00\n",
"[#8:1]~[*;r3;#8]\t1.27e+00\n",
"[#8;r3:1]~[*;#8]\t1.27e+00\n",
"[#8:1]~[*;#8]~[*;r3]\t1.27e+00\n",
"[#8;r4:1]~[*;#8]\t2.08e-02\n",
"[#8:1](~[*;#8])~[*;r4]\t2.08e-02\n",
"[#8:1]~[*;r4;#8]\t2.08e-02\n",
"[#8:1]~[*;#8]~[*;r4]\t2.08e-02\n",
"\n",
"valid options for elaborating type 8 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.05e+01\n",
"[#8;r7:1]~[*;#8]\t2.05e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r5:1]', '[#8:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#8:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0796 e, |theta| = 4.6998\n",
"RMSE = 0.0778 e, |theta| = 4.6998\n",
"RMSE = 0.0768 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6998\n",
"RMSE = 0.0760 e, |theta| = 4.6997\n",
"RMSE = 0.0760 e, |theta| = 4.6997\n",
"RMSE = 0.0760 e, |theta| = 4.6996\n",
"RMSE = 0.0760 e, |theta| = 4.6995\n",
"RMSE = 0.0760 e, |theta| = 4.6994\n",
"RMSE = 0.0760 e, |theta| = 4.6994\n",
"RMSE = 0.0760 e, |theta| = 4.6993\n",
"RMSE = 0.0760 e, |theta| = 4.6993\n",
"RMSE = 0.0760 e, |theta| = 4.6992\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 125.01it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 138.48it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 138.00it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 128.45it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 104.91it/s]\n",
"100%|██████████| 50/50 [00:33<00:00, 1.48it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.61it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.07it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 138.75it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.32it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 353 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.41e+01\n",
"[#1:1]~[*;x2]\t2.41e+01\n",
"[#1:1]~[*;r4]\t1.00e+01\n",
"[#1:1]~[*;r6]\t9.71e+00\n",
"[#1:1]~[*;r3]\t7.70e+00\n",
"[#1:1]~[*;r7]\t4.27e-03\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t5.37e+00\n",
"[#1:1]~[*;r5]~[*;#8]\t5.37e+00\n",
"[#1:1]~[*;r5]~[*;#6]\t1.12e+00\n",
"[#1:1]~[*;r5]~[*;X4]\t1.12e+00\n",
"[#1:1]~[*;r5]~[*;X1]\t4.12e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t4.12e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t2.24e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t1.29e+00\n",
"[#1:1]~[*;X2]~[*;r6]\t2.07e-01\n",
"[#1:1]~[*;X2]~[*;r4]\t1.85e-02\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r4]\t9.02e+00\n",
"[#6;r4:1]\t9.02e+00\n",
"[#6:1]~[*;r7]\t7.79e+00\n",
"[#6;r7:1]\t7.79e+00\n",
"[#6:1]~[*;r6]\t6.91e+00\n",
"[#6;r6:1]\t6.91e+00\n",
"[#6:1]~[*;r3]\t1.35e+00\n",
"[#6;r3:1]\t1.35e+00\n",
"\n",
"valid options for elaborating type 5 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t7.91e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t7.91e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t4.90e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t4.90e+03\n",
"[#6;x2:1]~[*;X4]\t3.37e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.37e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.37e+03\n",
"[#6;r:1]~[*;X4]\t3.37e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t2.79e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t2.79e+03\n",
"[#6:1]~;@[*;X4]\t2.47e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.20e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.20e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.07e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.07e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t9.48e+02\n",
"[#6;r7:1]~[*;X4]\t9.48e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t8.99e+02\n",
"[#6:1]~[*;X4]~[*;r]\t8.99e+02\n",
"[#6:1]~[*;X4;x2]\t8.99e+02\n",
"[#6:1]~[*;X4;r]\t8.99e+02\n",
"[#6:1]~[*;X4]~[*;#6]\t6.69e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t6.69e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t3.68e+02\n",
"[#6;r6:1]~[*;X4]\t3.68e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.06e+02\n",
"[#6;r4:1]~[*;X4]\t2.06e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t5.74e+01\n",
"[#6:1]~[*;X4;r6]\t5.74e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.87e+01\n",
"[#6:1]~[*;X4;r5]\t4.87e+01\n",
"[#6:1]~[*;X4;r4]\t2.79e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t2.79e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t1.40e+01\n",
"[#6:1]~[*;X4;r7]\t1.40e+01\n",
"[#6:1]~[*;X4;r3]\t6.07e+00\n",
"[#6:1]~[*;X4]~[*;r3]\t6.07e+00\n",
"[#6:1](~[*;X4])~[*;r3]\t5.36e-01\n",
"[#6;r3:1]~[*;X4]\t5.36e-01\n",
"\n",
"valid options for elaborating type 6 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;X2]\t1.17e+03\n",
"[#6;r5:1]~[*;#8]\t1.17e+03\n",
"[#6;r5:1]~[*;X1]\t4.60e+02\n",
"[#6;r5:1]~[*;#1]\t4.60e+02\n",
"[#6;r5:1]~[*;#6]\t1.35e+02\n",
"[#6;r5:1]~[*;X4]\t1.35e+02\n",
"\n",
"valid options for elaborating type 7 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t5.71e+02\n",
"[#8;r:1]\t5.71e+02\n",
"[#8:1]~[*;X1]\t5.71e+02\n",
"[#8:1]~[*;#1]\t5.71e+02\n",
"[#8:1]~[*;r7]\t1.44e+02\n",
"[#8;r6:1]\t7.13e+01\n",
"[#8;r5:1]\t6.39e+01\n",
"[#8:1]~[*;r5]\t3.36e+01\n",
"[#8;r4:1]\t2.37e+01\n",
"[#8:1]~[*;r4]\t3.42e+00\n",
"[#8;r3:1]\t2.62e+00\n",
"[#8:1]~[*;r6]\t2.14e+00\n",
"[#8:1]~[*;r3]\t3.76e-01\n",
"\n",
"valid options for elaborating type 8 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t5.62e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t5.62e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t5.62e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t5.62e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t4.91e+00\n",
"[#8:1]~[*;r5;#8]\t4.91e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t4.91e+00\n",
"[#8;r5:1]~[*;#8]\t4.91e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t1.05e-02\n",
"[#8:1]~[*;#8]~[*;#6]\t1.05e-02\n",
"[#8:1]~[*;#8]~[*;X2]\t1.05e-02\n",
"[#8:1]~[*;#8]~[*;X4]\t1.05e-02\n",
"[#8;r6:1]~[*;#8]\t8.47e-03\n",
"[#8:1]~[*;#8]~[*;r6]\t8.47e-03\n",
"[#8:1](~[*;#8])~[*;r6]\t8.47e-03\n",
"[#8:1]~[*;r6;#8]\t8.47e-03\n",
"[#8:1](~[*;#8])~[*;r3]\t1.46e-03\n",
"[#8:1]~[*;r3;#8]\t1.46e-03\n",
"[#8;r3:1]~[*;#8]\t1.46e-03\n",
"[#8:1]~[*;#8]~[*;r3]\t1.46e-03\n",
"[#8;r4:1]~[*;#8]\t3.18e-05\n",
"[#8:1](~[*;#8])~[*;r4]\t3.18e-05\n",
"[#8:1]~[*;r4;#8]\t3.18e-05\n",
"[#8:1]~[*;#8]~[*;r4]\t3.18e-05\n",
"\n",
"valid options for elaborating type 9 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.03e+01\n",
"[#8;r7:1]~[*;#8]\t2.03e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#8:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0760 e, |theta| = 4.8859\n",
"RMSE = 0.0760 e, |theta| = 4.8859\n",
"RMSE = 0.0760 e, |theta| = 4.8859\n",
"RMSE = 0.0760 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8859\n",
"RMSE = 0.0759 e, |theta| = 4.8858\n",
"RMSE = 0.0759 e, |theta| = 4.8858\n",
"RMSE = 0.0759 e, |theta| = 4.8858\n",
"RMSE = 0.0759 e, |theta| = 4.8857\n",
"RMSE = 0.0759 e, |theta| = 4.8857\n",
"RMSE = 0.0759 e, |theta| = 4.8856\n",
"RMSE = 0.0759 e, |theta| = 4.8855\n",
"RMSE = 0.0759 e, |theta| = 4.8854\n",
"RMSE = 0.0759 e, |theta| = 4.8853\n",
"RMSE = 0.0759 e, |theta| = 4.8850\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 118.10it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 132.86it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.13it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 142.77it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 106.64it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 126.85it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 121.49it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.14it/s]\n",
"100%|██████████| 23/23 [00:13<00:00, 1.75it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 134.31it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 132.27it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 376 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.50e+01\n",
"[#1:1]~[*;x2]\t2.50e+01\n",
"[#1:1]~[*;r6]\t9.13e+00\n",
"[#1:1]~[*;r4]\t7.26e+00\n",
"[#1:1]~[*;r3]\t7.11e+00\n",
"[#1:1]~[*;r7]\t5.71e-02\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t6.99e+00\n",
"[#1:1]~[*;r5]~[*;#8]\t6.99e+00\n",
"[#1:1]~[*;r5]~[*;#6]\t1.35e+00\n",
"[#1:1]~[*;r5]~[*;X4]\t1.35e+00\n",
"[#1:1]~[*;r5]~[*;X1]\t7.12e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t7.12e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r5]\t1.59e+00\n",
"[#1:1]~[*;X2]~[*;r7]\t7.24e-04\n",
"[#1:1]~[*;X2]~[*;r6]\t1.88e-06\n",
"[#1:1]~[*;X2]~[*;r4]\t1.24e-08\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r4]\t5.92e+00\n",
"[#6;r4:1]\t5.92e+00\n",
"[#6:1]~[*;r6]\t3.44e+00\n",
"[#6;r6:1]\t3.44e+00\n",
"[#6:1]~[*;r3]\t1.47e+00\n",
"[#6;r3:1]\t1.47e+00\n",
"[#6:1]~[*;r7]\t1.02e+00\n",
"[#6;r7:1]\t1.02e+00\n",
"\n",
"valid options for elaborating type 5 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t8.89e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t8.89e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t5.52e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t5.52e+03\n",
"[#6;x2:1]~[*;X4]\t3.77e+03\n",
"[#6;r:1]~[*;X4]\t3.77e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.77e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.77e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t3.14e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t3.14e+03\n",
"[#6:1]~;@[*;X4]\t2.76e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.47e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.47e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.20e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.20e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t1.04e+03\n",
"[#6;r7:1]~[*;X4]\t1.04e+03\n",
"[#6:1]~[*;X4;x2]\t1.01e+03\n",
"[#6:1]~[*;X4]~[*;x2]\t1.01e+03\n",
"[#6:1]~[*;X4]~[*;r]\t1.01e+03\n",
"[#6:1]~[*;X4;r]\t1.01e+03\n",
"[#6:1]~[*;X4]~[*;#6]\t7.34e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t7.34e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t4.10e+02\n",
"[#6;r6:1]~[*;X4]\t4.10e+02\n",
"[#6;r4:1]~[*;X4]\t2.43e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.43e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t6.98e+01\n",
"[#6:1]~[*;X4;r6]\t6.98e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.32e+01\n",
"[#6:1]~[*;X4;r5]\t4.32e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t4.14e+01\n",
"[#6:1]~[*;X4;r7]\t4.14e+01\n",
"[#6:1]~[*;X4;r4]\t1.44e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t1.44e+01\n",
"[#6:1]~[*;X4;r3]\t1.10e+01\n",
"[#6:1]~[*;X4]~[*;r3]\t1.10e+01\n",
"[#6;r3:1]~[*;X4]\t4.49e+00\n",
"[#6:1](~[*;X4])~[*;r3]\t4.49e+00\n",
"\n",
"valid options for elaborating type 6 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;X2]\t1.46e+03\n",
"[#6;r5:1]~[*;#8]\t1.46e+03\n",
"[#6;r5:1]~[*;X1]\t5.74e+02\n",
"[#6;r5:1]~[*;#1]\t5.74e+02\n",
"[#6;r5:1]~[*;#6]\t1.76e+02\n",
"[#6;r5:1]~[*;X4]\t1.76e+02\n",
"\n",
"valid options for elaborating type 7 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t5.33e+02\n",
"[#8;r:1]\t5.33e+02\n",
"[#8:1]~[*;X1]\t5.33e+02\n",
"[#8:1]~[*;#1]\t5.33e+02\n",
"[#8:1]~[*;r7]\t1.34e+02\n",
"[#8;r6:1]\t6.96e+01\n",
"[#8;r5:1]\t6.13e+01\n",
"[#8:1]~[*;r5]\t3.22e+01\n",
"[#8:1]~[*;r4]\t2.52e+01\n",
"[#8:1]~[*;r6]\t4.85e+00\n",
"[#8;r3:1]\t2.70e+00\n",
"[#8:1]~[*;r3]\t3.72e-01\n",
"\n",
"valid options for elaborating type 8 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 9 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t6.34e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t6.34e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t6.34e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t6.34e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t5.34e+00\n",
"[#8:1]~[*;r5;#8]\t5.34e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t5.34e+00\n",
"[#8;r5:1]~[*;#8]\t5.34e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t4.35e-01\n",
"[#8:1]~[*;#8]~[*;#6]\t4.35e-01\n",
"[#8:1]~[*;#8]~[*;X2]\t4.35e-01\n",
"[#8:1]~[*;#8]~[*;X4]\t4.35e-01\n",
"[#8;r6:1]~[*;#8]\t5.49e-02\n",
"[#8:1]~[*;#8]~[*;r6]\t5.49e-02\n",
"[#8:1](~[*;#8])~[*;r6]\t5.49e-02\n",
"[#8:1]~[*;r6;#8]\t5.49e-02\n",
"[#8:1](~[*;#8])~[*;r3]\t2.36e-03\n",
"[#8:1]~[*;r3;#8]\t2.36e-03\n",
"[#8;r3:1]~[*;#8]\t2.36e-03\n",
"[#8:1]~[*;#8]~[*;r3]\t2.36e-03\n",
"[#8;r4:1]~[*;#8]\t1.42e-06\n",
"[#8:1](~[*;#8])~[*;r4]\t1.42e-06\n",
"[#8:1]~[*;r4;#8]\t1.42e-06\n",
"[#8:1]~[*;#8]~[*;r4]\t1.42e-06\n",
"\n",
"valid options for elaborating type 10 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.11e+01\n",
"[#8;r7:1]~[*;#8]\t2.11e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0759 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9985\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9984\n",
"RMSE = 0.0750 e, |theta| = 4.9983\n",
"RMSE = 0.0750 e, |theta| = 4.9983\n",
"RMSE = 0.0750 e, |theta| = 4.9983\n",
"RMSE = 0.0750 e, |theta| = 4.9983\n",
"RMSE = 0.0750 e, |theta| = 4.9982\n",
"RMSE = 0.0750 e, |theta| = 4.9982\n",
"RMSE = 0.0750 e, |theta| = 4.9982\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 132.08it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 143.13it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 142.75it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 144.13it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.14it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.38it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.11it/s]\n",
"100%|██████████| 50/50 [00:29<00:00, 1.69it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.50it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.19it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 140.24it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.13it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 426 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.44e+01\n",
"[#1:1]~[*;x2]\t2.44e+01\n",
"[#1:1]~[*;r6]\t1.12e+01\n",
"[#1:1]~[*;r4]\t9.46e+00\n",
"[#1:1]~[*;r3]\t9.42e+00\n",
"[#1:1]~[*;r7]\t1.77e-04\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t1.07e+01\n",
"[#1:1]~[*;r5]~[*;#8]\t1.07e+01\n",
"[#1:1]~[*;r5]~[*;#6]\t1.54e+00\n",
"[#1:1]~[*;r5]~[*;X4]\t1.54e+00\n",
"[#1:1]~[*;r5]~[*;X1]\t5.02e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t5.02e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t2.41e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t1.88e+00\n",
"[#1:1]~[*;X2]~[*;r6]\t2.35e-01\n",
"[#1:1]~[*;X2]~[*;r4]\t7.95e-02\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t7.90e+00\n",
"[#6;r6:1]\t7.90e+00\n",
"[#6:1]~[*;r7]\t2.48e+00\n",
"[#6;r7:1]\t2.48e+00\n",
"[#6:1]~[*;r4]\t2.20e+00\n",
"[#6;r4:1]\t2.20e+00\n",
"[#6:1]~[*;r3]\t8.19e-03\n",
"[#6;r3:1]\t8.19e-03\n",
"\n",
"valid options for elaborating type 5 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t9.20e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t9.20e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t5.68e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t5.68e+03\n",
"[#6;x2:1]~[*;X4]\t3.91e+03\n",
"[#6;r:1]~[*;X4]\t3.91e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.91e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.91e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t3.25e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t3.25e+03\n",
"[#6:1]~;@[*;X4]\t2.87e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.56e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.56e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.24e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.24e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t1.08e+03\n",
"[#6;r7:1]~[*;X4]\t1.08e+03\n",
"[#6:1]~[*;X4;x2]\t1.04e+03\n",
"[#6:1]~[*;X4]~[*;x2]\t1.04e+03\n",
"[#6:1]~[*;X4]~[*;r]\t1.04e+03\n",
"[#6:1]~[*;X4;r]\t1.04e+03\n",
"[#6:1]~[*;X4]~[*;#6]\t7.73e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t7.73e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t4.29e+02\n",
"[#6;r6:1]~[*;X4]\t4.29e+02\n",
"[#6;r4:1]~[*;X4]\t2.54e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.54e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t6.88e+01\n",
"[#6:1]~[*;X4;r6]\t6.88e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t5.85e+01\n",
"[#6:1]~[*;X4;r5]\t5.85e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t4.35e+01\n",
"[#6:1]~[*;X4;r7]\t4.35e+01\n",
"[#6:1]~[*;X4;r4]\t1.43e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t1.43e+01\n",
"[#6:1]~[*;X4;r3]\t9.00e+00\n",
"[#6:1]~[*;X4]~[*;r3]\t9.00e+00\n",
"[#6;r3:1]~[*;X4]\t2.35e+00\n",
"[#6:1](~[*;X4])~[*;r3]\t2.35e+00\n",
"\n",
"valid options for elaborating type 6 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t6.50e-01\n",
"[#6;r5:1]~[*;X1]\t6.50e-01\n",
"\n",
"valid options for elaborating type 7 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t1.11e+03\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t1.11e+03\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t7.27e+02\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t7.27e+02\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t3.03e+02\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t3.03e+02\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t2.85e+02\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t2.85e+02\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t5.89e+01\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t5.89e+01\n",
"[#6;r5:1]~[*;X2;r]\t4.96e+01\n",
"[#6;r5:1]~[*;X2;x2]\t4.96e+01\n",
"[#6;r5:1]~;@[*;X2]\t4.96e+01\n",
"[#6;r5:1]~[*;X2;r5]\t4.96e+01\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t4.96e+01\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t4.96e+01\n",
"[#6;r5:1]~[*;X2]~[*;r]\t4.96e+01\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t2.21e-01\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t2.21e-01\n",
"\n",
"valid options for elaborating type 8 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t5.26e+02\n",
"[#8;r:1]\t5.26e+02\n",
"[#8:1]~[*;X1]\t5.26e+02\n",
"[#8:1]~[*;#1]\t5.26e+02\n",
"[#8:1]~[*;r7]\t1.34e+02\n",
"[#8;r6:1]\t6.80e+01\n",
"[#8;r5:1]\t6.48e+01\n",
"[#8:1]~[*;r5]\t3.57e+01\n",
"[#8:1]~[*;r4]\t2.69e+01\n",
"[#8:1]~[*;r6]\t4.35e+00\n",
"[#8;r3:1]\t2.54e+00\n",
"[#8:1]~[*;r3]\t2.53e-01\n",
"\n",
"valid options for elaborating type 9 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 10 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t6.55e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t6.55e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t6.55e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t6.55e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t5.75e+00\n",
"[#8;r5:1]~[*;#8]\t5.75e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t5.75e+00\n",
"[#8:1]~[*;r5;#8]\t5.75e+00\n",
"[#8:1]~[*;#8]~[*;#6]\t8.90e-01\n",
"[#8:1]~[*;#8]~[*;#8]\t8.90e-01\n",
"[#8:1]~[*;#8]~[*;X2]\t8.90e-01\n",
"[#8:1]~[*;#8]~[*;X4]\t8.90e-01\n",
"[#8:1]~[*;#8]~[*;r6]\t6.35e-02\n",
"[#8:1]~[*;r6;#8]\t6.35e-02\n",
"[#8:1](~[*;#8])~[*;r6]\t6.35e-02\n",
"[#8;r6:1]~[*;#8]\t6.35e-02\n",
"[#8:1]~[*;r4;#8]\t1.38e-02\n",
"[#8:1](~[*;#8])~[*;r4]\t1.38e-02\n",
"[#8;r4:1]~[*;#8]\t1.38e-02\n",
"[#8:1]~[*;#8]~[*;r4]\t1.38e-02\n",
"[#8:1](~[*;#8])~[*;r3]\t3.22e-03\n",
"[#8:1]~[*;r3;#8]\t3.22e-03\n",
"[#8;r3:1]~[*;#8]\t3.22e-03\n",
"[#8:1]~[*;#8]~[*;r3]\t3.22e-03\n",
"\n",
"valid options for elaborating type 11 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.11e+01\n",
"[#8;r7:1]~[*;#8]\t2.11e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1018\n",
"RMSE = 0.0750 e, |theta| = 5.1017\n",
"RMSE = 0.0750 e, |theta| = 5.1017\n",
"RMSE = 0.0750 e, |theta| = 5.1017\n",
"RMSE = 0.0750 e, |theta| = 5.1016\n",
"RMSE = 0.0750 e, |theta| = 5.1016\n",
"RMSE = 0.0750 e, |theta| = 5.1016\n",
"RMSE = 0.0750 e, |theta| = 5.1016\n",
"RMSE = 0.0750 e, |theta| = 5.1015\n",
"RMSE = 0.0750 e, |theta| = 5.1014\n",
"RMSE = 0.0750 e, |theta| = 5.1013\n",
"RMSE = 0.0750 e, |theta| = 5.1011\n",
"RMSE = 0.0750 e, |theta| = 5.1008\n",
"RMSE = 0.0750 e, |theta| = 5.1007\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 125.07it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.73it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 131.43it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 139.93it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.34it/s]\n",
"100%|██████████| 23/23 [00:12<00:00, 1.89it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 133.09it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.91it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 127.09it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 134.06it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 135.69it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 121.49it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 120.66it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 449 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.12e+01\n",
"[#1:1]~[*;x2]\t2.12e+01\n",
"[#1:1]~[*;r6]\t6.91e+00\n",
"[#1:1]~[*;r4]\t5.13e+00\n",
"[#1:1]~[*;r3]\t4.72e+00\n",
"[#1:1]~[*;r7]\t2.40e-03\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X2]\t7.36e+00\n",
"[#1:1]~[*;r5]~[*;#8]\t7.36e+00\n",
"[#1:1]~[*;r5]~[*;#6]\t1.40e+00\n",
"[#1:1]~[*;r5]~[*;X4]\t1.40e+00\n",
"[#1:1]~[*;r5]~[*;X1]\t4.84e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t4.84e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r5]\t1.93e+00\n",
"[#1:1]~[*;X2]~[*;r7]\t1.65e+00\n",
"[#1:1]~[*;X2]~[*;r4]\t5.59e-02\n",
"[#1:1]~[*;X2]~[*;r6]\t3.71e-04\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 4 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t5.33e+00\n",
"[#6;r6:1]\t5.33e+00\n",
"[#6:1]~[*;r4]\t4.65e+00\n",
"[#6;r4:1]\t4.65e+00\n",
"[#6:1]~[*;r3]\t1.33e+00\n",
"[#6;r3:1]\t1.33e+00\n",
"\n",
"valid options for elaborating type 5 ([#6;r7:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 6 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t7.37e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t7.37e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t4.54e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t4.54e+03\n",
"[#6;x2:1]~[*;X4]\t3.13e+03\n",
"[#6;r:1]~[*;X4]\t3.13e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.13e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.13e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t2.59e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t2.59e+03\n",
"[#6:1]~;@[*;X4]\t2.29e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.04e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.04e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t9.95e+02\n",
"[#6:1](~[*;#6])~[*;X4]\t9.95e+02\n",
"[#6:1](~[*;X4])~[*;r7]\t8.75e+02\n",
"[#6;r7:1]~[*;X4]\t8.75e+02\n",
"[#6:1]~[*;X4;x2]\t8.37e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t8.37e+02\n",
"[#6:1]~[*;X4]~[*;r]\t8.37e+02\n",
"[#6:1]~[*;X4;r]\t8.37e+02\n",
"[#6:1]~[*;X4]~[*;#6]\t6.25e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t6.25e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t3.40e+02\n",
"[#6;r6:1]~[*;X4]\t3.40e+02\n",
"[#6;r4:1]~[*;X4]\t2.03e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.03e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t5.13e+01\n",
"[#6:1]~[*;X4;r6]\t5.13e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.27e+01\n",
"[#6:1]~[*;X4;r5]\t4.27e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t1.70e+01\n",
"[#6:1]~[*;X4;r7]\t1.70e+01\n",
"[#6:1]~[*;X4;r4]\t3.62e+00\n",
"[#6:1]~[*;X4]~[*;r4]\t3.62e+00\n",
"[#6:1]~[*;X4;r3]\t3.24e+00\n",
"[#6:1]~[*;X4]~[*;r3]\t3.24e+00\n",
"[#6;r3:1]~[*;X4]\t1.74e-01\n",
"[#6:1](~[*;X4])~[*;r3]\t1.74e-01\n",
"\n",
"valid options for elaborating type 7 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t4.64e+00\n",
"[#6;r5:1]~[*;X1]\t4.64e+00\n",
"\n",
"valid options for elaborating type 8 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t3.53e+02\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t3.53e+02\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t2.36e+02\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t2.36e+02\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t9.85e+01\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t9.85e+01\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t8.49e+01\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t8.49e+01\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t2.82e+01\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t2.82e+01\n",
"[#6;r5:1]~[*;X2;r]\t1.97e+01\n",
"[#6;r5:1]~[*;X2;x2]\t1.97e+01\n",
"[#6;r5:1]~;@[*;X2]\t1.97e+01\n",
"[#6;r5:1]~[*;X2;r5]\t1.97e+01\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t1.97e+01\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t1.97e+01\n",
"[#6;r5:1]~[*;X2]~[*;r]\t1.97e+01\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t6.12e+00\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t6.12e+00\n",
"\n",
"valid options for elaborating type 9 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t4.76e+02\n",
"[#8;r:1]\t4.76e+02\n",
"[#8:1]~[*;X1]\t4.76e+02\n",
"[#8:1]~[*;#1]\t4.76e+02\n",
"[#8:1]~[*;r7]\t1.21e+02\n",
"[#8;r6:1]\t5.96e+01\n",
"[#8;r5:1]\t5.40e+01\n",
"[#8:1]~[*;r5]\t2.83e+01\n",
"[#8:1]~[*;r4]\t2.50e+01\n",
"[#8:1]~[*;r6]\t2.30e+00\n",
"[#8;r3:1]\t4.21e-01\n",
"[#8:1]~[*;r3]\t4.19e-02\n",
"\n",
"valid options for elaborating type 10 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 11 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t7.58e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t7.58e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t7.58e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t7.58e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t6.93e+00\n",
"[#8:1]~[*;r5;#8]\t6.93e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t6.93e+00\n",
"[#8;r5:1]~[*;#8]\t6.93e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t1.63e+00\n",
"[#8:1]~[*;#8]~[*;#6]\t1.63e+00\n",
"[#8:1]~[*;#8]~[*;X2]\t1.63e+00\n",
"[#8:1]~[*;#8]~[*;X4]\t1.63e+00\n",
"[#8;r6:1]~[*;#8]\t8.38e-01\n",
"[#8:1]~[*;#8]~[*;r6]\t8.38e-01\n",
"[#8:1](~[*;#8])~[*;r6]\t8.38e-01\n",
"[#8:1]~[*;r6;#8]\t8.38e-01\n",
"[#8:1](~[*;#8])~[*;r3]\t4.79e-01\n",
"[#8:1]~[*;r3;#8]\t4.79e-01\n",
"[#8;r3:1]~[*;#8]\t4.79e-01\n",
"[#8:1]~[*;#8]~[*;r3]\t4.79e-01\n",
"[#8;r4:1]~[*;#8]\t2.59e-02\n",
"[#8:1](~[*;#8])~[*;r4]\t2.59e-02\n",
"[#8:1]~[*;r4;#8]\t2.59e-02\n",
"[#8:1]~[*;#8]~[*;r4]\t2.59e-02\n",
"\n",
"valid options for elaborating type 12 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.02e+01\n",
"[#8;r7:1]~[*;#8]\t2.02e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3147\n",
"RMSE = 0.0750 e, |theta| = 5.3146\n",
"RMSE = 0.0750 e, |theta| = 5.3146\n",
"RMSE = 0.0750 e, |theta| = 5.3146\n",
"RMSE = 0.0750 e, |theta| = 5.3145\n",
"RMSE = 0.0750 e, |theta| = 5.3145\n",
"RMSE = 0.0750 e, |theta| = 5.3145\n",
"RMSE = 0.0750 e, |theta| = 5.3145\n",
"RMSE = 0.0750 e, |theta| = 5.3145\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 130.00it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 141.45it/s]\n",
"100%|██████████| 38/38 [00:22<00:00, 1.68it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 138.69it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 141.53it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.38it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.77it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 123.10it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.32it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.40it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.24it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.97it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 141.69it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 134.87it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 487 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.42e+01\n",
"[#1:1]~[*;x2]\t2.42e+01\n",
"[#1:1]~[*;r6]\t1.08e+01\n",
"[#1:1]~[*;r4]\t8.77e+00\n",
"[#1:1]~[*;r3]\t8.72e+00\n",
"[#1:1]~[*;r7]\t1.23e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X1]\t6.43e-02\n",
"[#1:1]~[*;r5]~[*;#1]\t6.43e-02\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;r5]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~;@[*;#8]\t9.89e-01\n",
"[#1:1]~[*;r5]~[*;r;#8]\t9.89e-01\n",
"[#1:1]~[*;r5]~[*;x2;#8]\t9.89e-01\n",
"[#1:1]~[*;r5]~[*;r5;#8]\t9.89e-01\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t2.31e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t1.24e+00\n",
"[#1:1]~[*;X2]~[*;r6]\t1.45e-01\n",
"[#1:1]~[*;X2]~[*;r4]\t2.70e-04\n",
"\n",
"valid options for elaborating type 4 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 5 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t7.46e+00\n",
"[#6;r6:1]\t7.46e+00\n",
"[#6:1]~[*;r4]\t4.61e+00\n",
"[#6;r4:1]\t4.61e+00\n",
"[#6:1]~[*;r3]\t8.82e-01\n",
"[#6;r3:1]\t8.82e-01\n",
"\n",
"valid options for elaborating type 6 ([#6;r7:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 7 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t8.67e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t8.67e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t5.37e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t5.37e+03\n",
"[#6;x2:1]~[*;X4]\t3.68e+03\n",
"[#6;r:1]~[*;X4]\t3.68e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.68e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.68e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t3.06e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t3.06e+03\n",
"[#6:1]~;@[*;X4]\t2.69e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.41e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.41e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.17e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.17e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t1.02e+03\n",
"[#6;r7:1]~[*;X4]\t1.02e+03\n",
"[#6:1]~[*;X4;x2]\t9.85e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t9.85e+02\n",
"[#6:1]~[*;X4]~[*;r]\t9.85e+02\n",
"[#6:1]~[*;X4;r]\t9.85e+02\n",
"[#6:1]~[*;X4]~[*;#6]\t7.23e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t7.23e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t4.02e+02\n",
"[#6;r6:1]~[*;X4]\t4.02e+02\n",
"[#6;r4:1]~[*;X4]\t2.36e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.36e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t6.82e+01\n",
"[#6:1]~[*;X4;r6]\t6.82e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.49e+01\n",
"[#6:1]~[*;X4;r5]\t4.49e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t4.42e+01\n",
"[#6:1]~[*;X4;r7]\t4.42e+01\n",
"[#6:1]~[*;X4;r4]\t1.85e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t1.85e+01\n",
"[#6:1]~[*;X4;r3]\t1.16e+01\n",
"[#6:1]~[*;X4]~[*;r3]\t1.16e+01\n",
"[#6;r3:1]~[*;X4]\t4.91e+00\n",
"[#6:1](~[*;X4])~[*;r3]\t4.91e+00\n",
"\n",
"valid options for elaborating type 8 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t1.03e+01\n",
"[#6;r5:1]~[*;X1]\t1.03e+01\n",
"\n",
"valid options for elaborating type 9 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t6.42e+02\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t6.42e+02\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t4.17e+02\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t4.17e+02\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t1.73e+02\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t1.73e+02\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t1.62e+02\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t1.62e+02\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t4.72e+01\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t4.72e+01\n",
"[#6;r5:1]~[*;X2;r]\t4.12e+01\n",
"[#6;r5:1]~[*;X2;x2]\t4.12e+01\n",
"[#6;r5:1]~;@[*;X2]\t4.12e+01\n",
"[#6;r5:1]~[*;X2;r5]\t4.12e+01\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t4.12e+01\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t4.12e+01\n",
"[#6;r5:1]~[*;X2]~[*;r]\t4.12e+01\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t6.00e+00\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t6.00e+00\n",
"\n",
"valid options for elaborating type 10 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t4.68e+02\n",
"[#8;r:1]\t4.68e+02\n",
"[#8:1]~[*;X1]\t4.68e+02\n",
"[#8:1]~[*;#1]\t4.68e+02\n",
"[#8:1]~[*;r7]\t1.20e+02\n",
"[#8;r6:1]\t6.09e+01\n",
"[#8;r5:1]\t5.28e+01\n",
"[#8:1]~[*;r5]\t2.62e+01\n",
"[#8:1]~[*;r4]\t2.45e+01\n",
"[#8:1]~[*;r6]\t4.47e+00\n",
"[#8;r3:1]\t2.07e+00\n",
"[#8:1]~[*;r3]\t1.72e-01\n",
"\n",
"valid options for elaborating type 11 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 12 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t7.77e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t7.77e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t7.77e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t7.77e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t6.16e+00\n",
"[#8:1]~[*;r5;#8]\t6.16e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t6.16e+00\n",
"[#8;r5:1]~[*;#8]\t6.16e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t1.92e+00\n",
"[#8:1]~[*;#8]~[*;#6]\t1.92e+00\n",
"[#8:1]~[*;#8]~[*;X2]\t1.92e+00\n",
"[#8:1]~[*;#8]~[*;X4]\t1.92e+00\n",
"[#8;r6:1]~[*;#8]\t1.33e+00\n",
"[#8:1]~[*;#8]~[*;r6]\t1.33e+00\n",
"[#8:1](~[*;#8])~[*;r6]\t1.33e+00\n",
"[#8:1]~[*;r6;#8]\t1.33e+00\n",
"[#8:1](~[*;#8])~[*;r3]\t6.78e-01\n",
"[#8:1]~[*;r3;#8]\t6.78e-01\n",
"[#8;r3:1]~[*;#8]\t6.78e-01\n",
"[#8:1]~[*;#8]~[*;r3]\t6.78e-01\n",
"[#8;r4:1]~[*;#8]\t7.82e-04\n",
"[#8:1](~[*;#8])~[*;r4]\t7.82e-04\n",
"[#8:1]~[*;r4;#8]\t7.82e-04\n",
"[#8:1]~[*;#8]~[*;r4]\t7.82e-04\n",
"\n",
"valid options for elaborating type 13 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.11e+01\n",
"[#8;r7:1]~[*;#8]\t2.11e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5284\n",
"RMSE = 0.0750 e, |theta| = 5.5283\n",
"RMSE = 0.0750 e, |theta| = 5.5283\n",
"RMSE = 0.0750 e, |theta| = 5.5283\n",
"RMSE = 0.0750 e, |theta| = 5.5283\n",
"RMSE = 0.0750 e, |theta| = 5.5282\n",
"RMSE = 0.0750 e, |theta| = 5.5282\n",
"RMSE = 0.0750 e, |theta| = 5.5281\n",
"RMSE = 0.0750 e, |theta| = 5.5280\n",
"RMSE = 0.0750 e, |theta| = 5.5280\n",
"RMSE = 0.0750 e, |theta| = 5.5279\n",
"RMSE = 0.0750 e, |theta| = 5.5279\n",
"RMSE = 0.0750 e, |theta| = 5.5278\n",
"RMSE = 0.0750 e, |theta| = 5.5275\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 125.94it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.96it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 140.29it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 132.16it/s]\n",
"100%|██████████| 38/38 [00:22<00:00, 1.72it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 137.95it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.89it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 135.80it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 128.85it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.29it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 139.16it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 135.61it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.94it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.35it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 130.66it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 525 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.27e+01\n",
"[#1:1]~[*;x2]\t2.27e+01\n",
"[#1:1]~[*;r6]\t1.14e+01\n",
"[#1:1]~[*;r4]\t9.53e+00\n",
"[#1:1]~[*;r3]\t9.30e+00\n",
"[#1:1]~[*;r7]\t3.21e-01\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X1]\t1.66e-04\n",
"[#1:1]~[*;r5]~[*;#1]\t1.66e-04\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;r5]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~;@[*;#8]\t9.74e-01\n",
"[#1:1]~[*;r5]~[*;r;#8]\t9.74e-01\n",
"[#1:1]~[*;r5]~[*;x2;#8]\t9.74e-01\n",
"[#1:1]~[*;r5]~[*;r5;#8]\t9.74e-01\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t1.81e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t7.68e-02\n",
"[#1:1]~[*;X2]~[*;r6]\t2.88e-04\n",
"\n",
"valid options for elaborating type 4 ([#1:1]~[*;X2]~[*;r4])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 5 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 6 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t6.55e+00\n",
"[#6;r6:1]\t6.55e+00\n",
"[#6:1]~[*;r4]\t8.36e-01\n",
"[#6;r4:1]\t8.36e-01\n",
"[#6:1]~[*;r3]\t6.92e-03\n",
"[#6;r3:1]\t6.92e-03\n",
"\n",
"valid options for elaborating type 7 ([#6;r7:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t7.80e+03\n",
"[#6:1](~[*;X2])~[*;X4]\t7.80e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t4.82e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t4.82e+03\n",
"[#6;x2:1]~[*;X4]\t3.31e+03\n",
"[#6;r:1]~[*;X4]\t3.31e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.31e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.31e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t2.75e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t2.75e+03\n",
"[#6:1]~;@[*;X4]\t2.42e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.16e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.16e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.06e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.06e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t9.17e+02\n",
"[#6;r7:1]~[*;X4]\t9.17e+02\n",
"[#6:1]~[*;X4;x2]\t8.86e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t8.86e+02\n",
"[#6:1]~[*;X4]~[*;r]\t8.86e+02\n",
"[#6:1]~[*;X4;r]\t8.86e+02\n",
"[#6:1]~[*;X4]~[*;#6]\t6.58e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t6.58e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t3.61e+02\n",
"[#6;r6:1]~[*;X4]\t3.61e+02\n",
"[#6;r4:1]~[*;X4]\t2.11e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.11e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t5.78e+01\n",
"[#6:1]~[*;X4;r6]\t5.78e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.05e+01\n",
"[#6:1]~[*;X4;r5]\t4.05e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t3.31e+01\n",
"[#6:1]~[*;X4;r7]\t3.31e+01\n",
"[#6:1]~[*;X4;r4]\t1.38e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t1.38e+01\n",
"[#6:1]~[*;X4;r3]\t6.60e+00\n",
"[#6:1]~[*;X4]~[*;r3]\t6.60e+00\n",
"[#6;r3:1]~[*;X4]\t3.75e-01\n",
"[#6:1](~[*;X4])~[*;r3]\t3.75e-01\n",
"\n",
"valid options for elaborating type 9 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t9.62e+00\n",
"[#6;r5:1]~[*;X1]\t9.62e+00\n",
"\n",
"valid options for elaborating type 10 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t6.11e+02\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t6.11e+02\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t3.98e+02\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t3.98e+02\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t1.65e+02\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t1.65e+02\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t1.55e+02\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t1.55e+02\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t4.45e+01\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t4.45e+01\n",
"[#6;r5:1]~[*;X2;r]\t3.66e+01\n",
"[#6;r5:1]~[*;X2;x2]\t3.66e+01\n",
"[#6;r5:1]~;@[*;X2]\t3.66e+01\n",
"[#6;r5:1]~[*;X2;r5]\t3.66e+01\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t3.66e+01\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t3.66e+01\n",
"[#6;r5:1]~[*;X2]~[*;r]\t3.66e+01\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t6.44e+00\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t6.44e+00\n",
"\n",
"valid options for elaborating type 11 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t4.37e+02\n",
"[#8;r:1]\t4.37e+02\n",
"[#8:1]~[*;X1]\t4.37e+02\n",
"[#8:1]~[*;#1]\t4.37e+02\n",
"[#8:1]~[*;r7]\t1.12e+02\n",
"[#8;r6:1]\t5.52e+01\n",
"[#8;r5:1]\t4.84e+01\n",
"[#8:1]~[*;r5]\t2.40e+01\n",
"[#8:1]~[*;r4]\t2.31e+01\n",
"[#8:1]~[*;r6]\t2.58e+00\n",
"[#8;r3:1]\t4.56e-01\n",
"[#8:1]~[*;r3]\t2.22e-02\n",
"\n",
"valid options for elaborating type 12 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 13 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t4.70e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t4.70e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t4.70e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t4.70e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t4.02e+00\n",
"[#8:1]~[*;r5;#8]\t4.02e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t4.02e+00\n",
"[#8;r5:1]~[*;#8]\t4.02e+00\n",
"[#8;r6:1]~[*;#8]\t6.16e-03\n",
"[#8:1]~[*;r6;#8]\t6.16e-03\n",
"[#8:1]~[*;#8]~[*;r6]\t6.16e-03\n",
"[#8:1](~[*;#8])~[*;r6]\t6.16e-03\n",
"[#8:1]~[*;#8]~[*;X2]\t4.16e-03\n",
"[#8:1]~[*;#8]~[*;#6]\t4.16e-03\n",
"[#8:1]~[*;#8]~[*;#8]\t4.16e-03\n",
"[#8:1]~[*;#8]~[*;X4]\t4.16e-03\n",
"[#8:1](~[*;#8])~[*;r3]\t8.33e-04\n",
"[#8:1]~[*;r3;#8]\t8.33e-04\n",
"[#8;r3:1]~[*;#8]\t8.33e-04\n",
"[#8:1]~[*;#8]~[*;r3]\t8.33e-04\n",
"[#8;r4:1]~[*;#8]\t3.72e-05\n",
"[#8:1](~[*;#8])~[*;r4]\t3.72e-05\n",
"[#8:1]~[*;r4;#8]\t3.72e-05\n",
"[#8:1]~[*;#8]~[*;r4]\t3.72e-05\n",
"\n",
"valid options for elaborating type 14 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.04e+01\n",
"[#8;r7:1]~[*;#8]\t2.04e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6:1](~[*;X4])~[*;r3]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6301\n",
"RMSE = 0.0750 e, |theta| = 5.6300\n",
"RMSE = 0.0750 e, |theta| = 5.6300\n",
"RMSE = 0.0750 e, |theta| = 5.6299\n",
"RMSE = 0.0750 e, |theta| = 5.6299\n",
"RMSE = 0.0750 e, |theta| = 5.6299\n",
"RMSE = 0.0750 e, |theta| = 5.6297\n",
"RMSE = 0.0750 e, |theta| = 5.6296\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 122.75it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 132.27it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 136.51it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 135.66it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 134.13it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 140.71it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 131.91it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.56it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 127.50it/s]\n",
"100%|██████████| 38/38 [00:22<00:00, 1.68it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.40it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.38it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 143.50it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 149.94it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 140.80it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 146.47it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 563 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t2.47e+01\n",
"[#1:1]~[*;x2]\t2.47e+01\n",
"[#1:1]~[*;r6]\t1.17e+01\n",
"[#1:1]~[*;r3]\t9.87e+00\n",
"[#1:1]~[*;r4]\t9.85e+00\n",
"[#1:1]~[*;r7]\t2.81e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X1]\t5.74e-08\n",
"[#1:1]~[*;r5]~[*;#1]\t5.74e-08\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;r5]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~;@[*;#8]\t8.90e-01\n",
"[#1:1]~[*;r5]~[*;r;#8]\t8.90e-01\n",
"[#1:1]~[*;r5]~[*;x2;#8]\t8.90e-01\n",
"[#1:1]~[*;r5]~[*;r5;#8]\t8.90e-01\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r5]\t1.37e+00\n",
"[#1:1]~[*;X2]~[*;r7]\t3.81e-01\n",
"[#1:1]~[*;X2]~[*;r6]\t5.60e-07\n",
"\n",
"valid options for elaborating type 4 ([#1:1]~[*;X2]~[*;r4])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 5 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 6 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t6.70e+00\n",
"[#6;r6:1]\t6.70e+00\n",
"[#6:1]~[*;r4]\t4.41e+00\n",
"[#6;r4:1]\t4.41e+00\n",
"[#6:1]~[*;r3]\t1.15e+00\n",
"[#6;r3:1]\t1.15e+00\n",
"\n",
"valid options for elaborating type 7 ([#6;r7:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;X4]\t8.49e+03\n",
"[#6:1](~[*;#8])~[*;X4]\t8.49e+03\n",
"[#6:1]~[*;X4]~[*;#8]\t5.27e+03\n",
"[#6:1]~[*;X4]~[*;X2]\t5.27e+03\n",
"[#6;x2:1]~[*;X4]\t3.62e+03\n",
"[#6;r:1]~[*;X4]\t3.62e+03\n",
"[#6:1](~[*;X4])~[*;x2]\t3.62e+03\n",
"[#6:1](~[*;X4])~[*;r]\t3.62e+03\n",
"[#6:1](~[*;#1])~[*;X4]\t2.99e+03\n",
"[#6:1](~[*;X1])~[*;X4]\t2.99e+03\n",
"[#6:1]~;@[*;X4]\t2.66e+03\n",
"[#6:1]~[*;X4]~[*;X1]\t2.37e+03\n",
"[#6:1]~[*;X4]~[*;#1]\t2.37e+03\n",
"[#6:1](~[*;#6])~[*;X4]\t1.15e+03\n",
"[#6:1](~[*;X4])~[*;X4]\t1.15e+03\n",
"[#6:1](~[*;X4])~[*;r7]\t9.97e+02\n",
"[#6;r7:1]~[*;X4]\t9.97e+02\n",
"[#6:1]~[*;X4;x2]\t9.69e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t9.69e+02\n",
"[#6:1]~[*;X4]~[*;r]\t9.69e+02\n",
"[#6:1]~[*;X4;r]\t9.69e+02\n",
"[#6:1]~[*;X4]~[*;X4]\t7.10e+02\n",
"[#6:1]~[*;X4]~[*;#6]\t7.10e+02\n",
"[#6;r6:1]~[*;X4]\t3.97e+02\n",
"[#6:1](~[*;X4])~[*;r6]\t3.97e+02\n",
"[#6:1](~[*;X4])~[*;r4]\t2.28e+02\n",
"[#6;r4:1]~[*;X4]\t2.28e+02\n",
"[#6:1]~[*;X4]~[*;r6]\t6.40e+01\n",
"[#6:1]~[*;X4;r6]\t6.40e+01\n",
"[#6:1]~[*;X4;r7]\t4.82e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t4.82e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t4.72e+01\n",
"[#6:1]~[*;X4;r5]\t4.72e+01\n",
"[#6:1]~[*;X4;r4]\t2.23e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t2.23e+01\n",
"[#6:1]~[*;X4;r3]\t4.14e+00\n",
"[#6:1]~[*;X4]~[*;r3]\t4.14e+00\n",
"\n",
"valid options for elaborating type 9 ([#6:1](~[*;X4])~[*;r3])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r3])~[*;X4]\t1.80e+00\n",
"[#6:1](~[*;X4;r3])~[*;X4]\t4.75e-02\n",
"\n",
"valid options for elaborating type 10 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t3.32e+00\n",
"[#6;r5:1]~[*;X1]\t3.32e+00\n",
"\n",
"valid options for elaborating type 11 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t6.83e+02\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t6.83e+02\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t4.44e+02\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t4.44e+02\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t1.81e+02\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t1.81e+02\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t1.67e+02\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t1.67e+02\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t4.48e+01\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t4.48e+01\n",
"[#6;r5:1]~[*;X2;r]\t3.98e+01\n",
"[#6;r5:1]~[*;X2;x2]\t3.98e+01\n",
"[#6;r5:1]~;@[*;X2]\t3.98e+01\n",
"[#6;r5:1]~[*;X2;r5]\t3.98e+01\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t3.98e+01\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t3.98e+01\n",
"[#6;r5:1]~[*;X2]~[*;r]\t3.98e+01\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t4.97e+00\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t4.97e+00\n",
"\n",
"valid options for elaborating type 12 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t4.05e+02\n",
"[#8;r:1]\t4.05e+02\n",
"[#8:1]~[*;X1]\t4.05e+02\n",
"[#8:1]~[*;#1]\t4.05e+02\n",
"[#8:1]~[*;r7]\t1.04e+02\n",
"[#8;r6:1]\t5.30e+01\n",
"[#8;r5:1]\t4.40e+01\n",
"[#8:1]~[*;r4]\t2.11e+01\n",
"[#8:1]~[*;r5]\t1.95e+01\n",
"[#8:1]~[*;r6]\t4.22e+00\n",
"[#8;r3:1]\t1.97e+00\n",
"[#8:1]~[*;r3]\t1.31e-01\n",
"\n",
"valid options for elaborating type 13 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 14 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#8])~[*;X4]\t7.32e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t7.32e+00\n",
"[#8:1](~[*;#6])~[*;#8]\t7.32e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t7.32e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t5.32e+00\n",
"[#8:1]~[*;r5;#8]\t5.32e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t5.32e+00\n",
"[#8;r5:1]~[*;#8]\t5.32e+00\n",
"[#8:1]~[*;#8]~[*;#8]\t1.72e+00\n",
"[#8:1]~[*;#8]~[*;#6]\t1.72e+00\n",
"[#8:1]~[*;#8]~[*;X2]\t1.72e+00\n",
"[#8:1]~[*;#8]~[*;X4]\t1.72e+00\n",
"[#8;r6:1]~[*;#8]\t1.04e+00\n",
"[#8:1]~[*;#8]~[*;r6]\t1.04e+00\n",
"[#8:1](~[*;#8])~[*;r6]\t1.04e+00\n",
"[#8:1]~[*;r6;#8]\t1.04e+00\n",
"[#8:1](~[*;#8])~[*;r3]\t5.86e-01\n",
"[#8:1]~[*;r3;#8]\t5.86e-01\n",
"[#8;r3:1]~[*;#8]\t5.86e-01\n",
"[#8:1]~[*;#8]~[*;r3]\t5.86e-01\n",
"[#8;r4:1]~[*;#8]\t8.75e-05\n",
"[#8:1](~[*;#8])~[*;r4]\t8.75e-05\n",
"[#8:1]~[*;r4;#8]\t8.75e-05\n",
"[#8:1]~[*;#8]~[*;r4]\t8.75e-05\n",
"\n",
"valid options for elaborating type 15 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.12e+01\n",
"[#8;r7:1]~[*;#8]\t2.12e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6:1](~[*;X4])~[*;r3]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6:1]~[*;X4]~[*;#6]', '[#6:1](~[*;X4])~[*;r3]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"RMSE = 0.0750 e, |theta| = 5.7299\n",
"RMSE = 0.0745 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0744 e, |theta| = 5.7299\n",
"RMSE = 0.0743 e, |theta| = 5.7300\n",
"RMSE = 0.0743 e, |theta| = 5.7301\n",
"RMSE = 0.0743 e, |theta| = 5.7301\n",
"RMSE = 0.0743 e, |theta| = 5.7302\n",
"RMSE = 0.0743 e, |theta| = 5.7304\n",
"RMSE = 0.0743 e, |theta| = 5.7307\n",
"RMSE = 0.0743 e, |theta| = 5.7308\n",
"RMSE = 0.0743 e, |theta| = 5.7309\n",
"RMSE = 0.0743 e, |theta| = 5.7310\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 135.62it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 149.93it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 144.86it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 144.62it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 147.45it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 147.06it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 149.85it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 147.19it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 143.38it/s]\n",
"100%|██████████| 38/38 [00:25<00:00, 1.52it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 141.27it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 144.74it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 143.74it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 144.85it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.81it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 132.89it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 131.78it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 601 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r]\t1.26e+01\n",
"[#1:1]~[*;x2]\t1.26e+01\n",
"[#1:1]~[*;r3]\t9.66e+00\n",
"[#1:1]~[*;r7]\t7.74e+00\n",
"[#1:1]~[*;r6]\t6.95e+00\n",
"[#1:1]~[*;r4]\t6.73e+00\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;r5])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~[*;X1]\t1.78e-01\n",
"[#1:1]~[*;r5]~[*;#1]\t1.78e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;r5]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r5]~;@[*;#8]\t1.26e+00\n",
"[#1:1]~[*;r5]~[*;r;#8]\t1.26e+00\n",
"[#1:1]~[*;r5]~[*;x2;#8]\t1.26e+00\n",
"[#1:1]~[*;r5]~[*;r5;#8]\t1.26e+00\n",
"\n",
"valid options for elaborating type 3 ([#1:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;X2]~[*;r7]\t2.60e+00\n",
"[#1:1]~[*;X2]~[*;r5]\t1.50e+00\n",
"[#1:1]~[*;X2]~[*;r6]\t2.23e-01\n",
"\n",
"valid options for elaborating type 4 ([#1:1]~[*;X2]~[*;r4])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 5 ([#1:1]~[*;X2]~[*;r3])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 6 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;r6]\t5.27e+00\n",
"[#6;r6:1]\t5.27e+00\n",
"[#6:1]~[*;r4]\t6.25e-01\n",
"[#6;r4:1]\t6.25e-01\n",
"[#6:1]~[*;r3]\t2.87e-03\n",
"[#6;r3:1]\t2.87e-03\n",
"\n",
"valid options for elaborating type 7 ([#6;r7:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#6:1]~[*;X4])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X4]\t5.53e+02\n",
"[#6:1](~[*;X2])~[*;X4]\t5.53e+02\n",
"[#6:1]~[*;X4]~[*;#8]\t4.18e+02\n",
"[#6:1]~[*;X4;x2]\t4.18e+02\n",
"[#6:1]~[*;X4]~[*;r]\t4.18e+02\n",
"[#6:1]~[*;X4]~[*;x2]\t4.18e+02\n",
"[#6:1]~[*;X4;r]\t4.18e+02\n",
"[#6:1]~[*;X4]~[*;X2]\t4.18e+02\n",
"[#6:1](~[*;X1])~[*;X4]\t3.81e+02\n",
"[#6:1](~[*;#1])~[*;X4]\t3.81e+02\n",
"[#6:1]~;@[*;X4]\t2.26e+02\n",
"[#6;r:1]~[*;X4]\t1.91e+02\n",
"[#6;x2:1]~[*;X4]\t1.91e+02\n",
"[#6:1](~[*;X4])~[*;r]\t1.91e+02\n",
"[#6:1](~[*;X4])~[*;x2]\t1.91e+02\n",
"[#6:1](~[*;X4])~[*;X4]\t1.10e+02\n",
"[#6:1](~[*;#6])~[*;X4]\t1.10e+02\n",
"[#6:1]~[*;X4]~[*;#1]\t8.15e+01\n",
"[#6:1]~[*;X4]~[*;X1]\t8.15e+01\n",
"[#6:1]~[*;X4;r7]\t7.21e+01\n",
"[#6:1]~[*;X4]~[*;r7]\t7.21e+01\n",
"[#6;r7:1]~[*;X4]\t3.62e+01\n",
"[#6:1](~[*;X4])~[*;r7]\t3.62e+01\n",
"[#6:1]~[*;X4]~[*;r6]\t3.37e+01\n",
"[#6:1]~[*;X4;r6]\t3.37e+01\n",
"[#6:1]~[*;X4]~[*;r4]\t3.30e+01\n",
"[#6:1]~[*;X4;r4]\t3.30e+01\n",
"[#6:1]~[*;X4]~[*;r5]\t1.96e+01\n",
"[#6:1]~[*;X4;r5]\t1.96e+01\n",
"[#6;r4:1]~[*;X4]\t9.21e+00\n",
"[#6:1](~[*;X4])~[*;r4]\t9.21e+00\n",
"[#6;r6:1]~[*;X4]\t6.71e+00\n",
"[#6:1](~[*;X4])~[*;r6]\t6.71e+00\n",
"\n",
"valid options for elaborating type 9 ([#6:1]~[*;X4]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]~[*;X4]~[*;#6]\t3.48e+03\n",
"[#6;r:1]~[*;X4]~[*;#6]\t3.48e+03\n",
"[#6:1]~;@[*;X4]~[*;#6]\t3.48e+03\n",
"[#6;r7:1]~[*;X4]~[*;#6]\t9.65e+02\n",
"[#6;r6:1]~[*;X4]~[*;#6]\t4.39e+02\n",
"[#6:1]~[*;X4]~;@[*;#6]\t4.21e+02\n",
"[#6:1]~[*;X4]~[*;r;#6]\t4.21e+02\n",
"[#6:1]~[*;X4]~[*;x2;#6]\t4.21e+02\n",
"[#6;r4:1]~[*;X4]~[*;#6]\t2.54e+02\n",
"[#6:1]~[*;X4]~[*;r7;#6]\t2.41e+02\n",
"[#6:1]~[*;X4;r7]~[*;#6]\t1.23e+02\n",
"[#6:1]~[*;X4]~[*;r4;#6]\t9.58e+01\n",
"[#6:1]~[*;X4;r4]~[*;#6]\t3.08e+01\n",
"[#6:1]~[*;X4]~[*;r6;#6]\t2.13e+01\n",
"[#6:1]~[*;X4]~[*;r5;#6]\t1.55e+01\n",
"[#6:1]~[*;X4;r5]~[*;#6]\t1.50e+01\n",
"[#6:1]~[*;X4;r6]~[*;#6]\t2.90e+00\n",
"[#6:1]~[*;X4]~[*;r3;#6]\t1.56e+00\n",
"[#6:1]~[*;X4;r3]~[*;#6]\t1.56e+00\n",
"\n",
"valid options for elaborating type 10 ([#6:1](~[*;X4])~[*;r3])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r3])~[*;X4]\t2.64e+00\n",
"[#6:1](~[*;X4;r3])~[*;X4]\t9.92e-02\n",
"\n",
"valid options for elaborating type 11 ([#6;r5:1])\n",
"elaboration\tfavorability\n",
"[#6;r5:1]~[*;#1]\t7.96e+00\n",
"[#6;r5:1]~[*;X1]\t7.96e+00\n",
"\n",
"valid options for elaborating type 12 ([#6;r5:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6;r5:1](~[*;#8])~[*;X2]\t2.60e+03\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t2.60e+03\n",
"[#6;r5:1]~[*;X2]~[*;X1]\t1.63e+03\n",
"[#6;r5:1]~[*;X2]~[*;#1]\t1.63e+03\n",
"[#6;r5:1](~[*;#1])~[*;X2]\t6.80e+02\n",
"[#6;r5:1](~[*;X1])~[*;X2]\t6.80e+02\n",
"[#6;r5:1](~[*;X2])~[*;X4]\t6.76e+02\n",
"[#6;r5:1](~[*;#6])~[*;X2]\t6.76e+02\n",
"[#6;r5:1]~[*;X2]~[*;X4]\t1.95e+02\n",
"[#6;r5:1]~[*;X2]~[*;#6]\t1.95e+02\n",
"[#6;r5:1]~[*;X2;r]\t1.87e+02\n",
"[#6;r5:1]~[*;X2;x2]\t1.87e+02\n",
"[#6;r5:1]~;@[*;X2]\t1.87e+02\n",
"[#6;r5:1]~[*;X2;r5]\t1.87e+02\n",
"[#6;r5:1]~[*;X2]~[*;x2]\t1.87e+02\n",
"[#6;r5:1]~[*;X2]~[*;r5]\t1.87e+02\n",
"[#6;r5:1]~[*;X2]~[*;r]\t1.87e+02\n",
"[#6;r5:1]~[*;X2]~[*;#8]\t8.06e+00\n",
"[#6;r5:1]~[*;X2]~[*;X2]\t8.06e+00\n",
"\n",
"valid options for elaborating type 13 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]\t4.08e+02\n",
"[#8;r:1]\t4.08e+02\n",
"[#8:1]~[*;X1]\t4.08e+02\n",
"[#8:1]~[*;#1]\t4.08e+02\n",
"[#8:1]~[*;r7]\t1.05e+02\n",
"[#8;r6:1]\t5.18e+01\n",
"[#8;r5:1]\t4.28e+01\n",
"[#8:1]~[*;r4]\t2.26e+01\n",
"[#8:1]~[*;r5]\t1.76e+01\n",
"[#8;r3:1]\t2.04e+00\n",
"[#8:1]~[*;r6]\t1.59e+00\n",
"[#8:1]~[*;r3]\t9.77e-02\n",
"\n",
"valid options for elaborating type 14 ([#8;r4:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 15 ([#8:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8:1](~[*;#6])~[*;#8]\t3.07e+00\n",
"[#8:1](~[*;#8])~[*;#8]\t3.07e+00\n",
"[#8:1](~[*;#8])~[*;X2]\t3.07e+00\n",
"[#8:1](~[*;#8])~[*;X4]\t3.07e+00\n",
"[#8:1]~[*;#8]~[*;r5]\t2.06e+00\n",
"[#8:1]~[*;r5;#8]\t2.06e+00\n",
"[#8;r5:1]~[*;#8]\t2.06e+00\n",
"[#8:1](~[*;#8])~[*;r5]\t2.06e+00\n",
"[#8:1](~[*;#8])~[*;r6]\t8.82e-04\n",
"[#8:1]~[*;r6;#8]\t8.82e-04\n",
"[#8:1]~[*;#8]~[*;r6]\t8.82e-04\n",
"[#8;r6:1]~[*;#8]\t8.82e-04\n",
"[#8:1](~[*;#8])~[*;r3]\t7.58e-05\n",
"[#8:1]~[*;r3;#8]\t7.58e-05\n",
"[#8;r3:1]~[*;#8]\t7.58e-05\n",
"[#8:1]~[*;#8]~[*;r3]\t7.58e-05\n",
"[#8:1]~[*;#8]~[*;#6]\t3.23e-05\n",
"[#8:1]~[*;#8]~[*;#8]\t3.23e-05\n",
"[#8:1]~[*;#8]~[*;X2]\t3.23e-05\n",
"[#8:1]~[*;#8]~[*;X4]\t3.23e-05\n",
"[#8:1](~[*;#8])~[*;r4]\t3.19e-05\n",
"[#8:1]~[*;r4;#8]\t3.19e-05\n",
"[#8;r4:1]~[*;#8]\t3.19e-05\n",
"[#8:1]~[*;#8]~[*;r4]\t3.19e-05\n",
"\n",
"valid options for elaborating type 16 ([#8;r7:1])\n",
"elaboration\tfavorability\n",
"[#8;r7:1]~[*;X2]\t2.09e+01\n",
"[#8;r7:1]~[*;#8]\t2.09e+01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6:1]~[*;X4]~[*;#6]', '[#6:1](~[*;X4])~[*;r3]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8;r7:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;r5]', '[#1:1]~[*;r5]~[*;#8]', '[#1:1]~[*;X2]', '[#1:1]~[*;X2]~[*;r4]', '[#1:1]~[*;X2]~[*;r3]', '[#6:1]', '[#6;r7:1]', '[#6:1]~[*;X4]', '[#6:1]~[*;X4]~[*;#6]', '[#6:1](~[*;X4])~[*;r3]', '[#6;r5:1]', '[#6;r5:1]~[*;X2]', '[#8:1]', '[#8;r4:1]', '[#8:1]~[*;#8]', '[#8:1]~[*;#8]~[*;#6]', '[#8;r7:1]']\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8631\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"RMSE = 0.0743 e, |theta| = 5.8632\n",
"didn't make much improvement...\n",
"stopping early!\n"
]
}
],
"source": [
"# TODO: run this many times to be able to say anything...\n",
"np.random.seed(0), onp.random.seed(0)\n",
"N_types = len(set(np.hstack(types)))\n",
"theta = onp.random.randn(2 * N_types)\n",
"theta[N_types:] = 1.0\n",
"theta = np.array(theta)\n",
"\n",
"random_result = iterative_type_refinement(\n",
" theta, elemental_smarts_list, type_refinement_fxn=randomly_refine_smarts_list,\n",
" n_refinement_steps=20, opt_kwargs=opt_kwargs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Run with gradient-informed moves"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RMSE = 0.6927 e, |theta| = 2.6889\n",
"RMSE = 0.1972 e, |theta| = 2.8688\n",
"RMSE = 0.1470 e, |theta| = 2.8733\n",
"RMSE = 0.1094 e, |theta| = 2.8855\n",
"RMSE = 0.1072 e, |theta| = 2.8938\n",
"RMSE = 0.1068 e, |theta| = 2.8986\n",
"RMSE = 0.1068 e, |theta| = 2.8987\n",
"RMSE = 0.1068 e, |theta| = 2.8999\n",
"RMSE = 0.1067 e, |theta| = 2.9032\n",
"RMSE = 0.1065 e, |theta| = 2.9220\n",
"RMSE = 0.1060 e, |theta| = 3.0283\n",
"RMSE = 0.1058 e, |theta| = 3.1096\n",
"RMSE = 0.1054 e, |theta| = 3.1455\n",
"RMSE = 0.1052 e, |theta| = 3.1569\n",
"RMSE = 0.1051 e, |theta| = 3.1881\n",
"RMSE = 0.1051 e, |theta| = 3.1872\n",
"RMSE = 0.1051 e, |theta| = 3.1849\n",
"RMSE = 0.1051 e, |theta| = 3.1860\n",
"RMSE = 0.1051 e, |theta| = 3.1750\n",
"RMSE = 0.1051 e, |theta| = 3.1513\n",
"RMSE = 0.1050 e, |theta| = 3.1481\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 138.02it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 143.08it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.83it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 69 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]\t6.11e+02\n",
"[#1:1]~[*;#8]\t6.11e+02\n",
"[#1:1]~[*;X2]\t6.11e+02\n",
"[#1:1]~[*;X4]\t6.11e+02\n",
"[#1:1]~[*;x2]\t3.81e+02\n",
"[#1:1]~[*;r]\t3.81e+02\n",
"[#1:1]~[*;r7]\t8.82e+01\n",
"[#1:1]~[*;r6]\t2.71e+01\n",
"[#1:1]~[*;r5]\t1.37e+01\n",
"[#1:1]~[*;r4]\t3.19e+00\n",
"[#1:1]~[*;r3]\t9.82e-01\n",
"\n",
"valid options for elaborating type 1 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6:1]~[*;X2]\t2.51e+03\n",
"[#6:1]~[*;#8]\t2.51e+03\n",
"[#6;x2:1]\t1.05e+03\n",
"[#6;r:1]\t1.05e+03\n",
"[#6:1]~[*;#1]\t8.00e+02\n",
"[#6:1]~[*;X1]\t8.00e+02\n",
"[#6:1]~[*;X4]\t2.63e+02\n",
"[#6:1]~[*;#6]\t2.63e+02\n",
"[#6;r7:1]\t2.31e+02\n",
"[#6;r6:1]\t7.60e+01\n",
"[#6;r5:1]\t7.15e+01\n",
"[#6;r4:1]\t3.56e+01\n",
"[#6:1]~[*;r6]\t2.51e+01\n",
"[#6:1]~[*;r4]\t1.96e+01\n",
"[#6:1]~[*;r3]\t1.69e+01\n",
"[#6;r3:1]\t1.07e+01\n",
"[#6:1]~[*;r5]\t1.04e+01\n",
"[#6:1]~[*;r7]\t4.76e+00\n",
"\n",
"valid options for elaborating type 2 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t1.35e+02\n",
"[#8;x2:1]\t1.35e+02\n",
"[#8;r:1]\t1.35e+02\n",
"[#8:1]~[*;X1]\t1.35e+02\n",
"[#8:1]~[*;X2]\t7.13e+01\n",
"[#8:1]~[*;#8]\t7.13e+01\n",
"[#8;r7:1]\t3.83e+01\n",
"[#8;r6:1]\t1.71e+01\n",
"[#8;r5:1]\t9.32e+00\n",
"[#8:1]~[*;#6]\t3.36e+00\n",
"[#8:1]~[*;X4]\t3.36e+00\n",
"[#8;r4:1]\t2.53e+00\n",
"[#8:1]~[*;r7]\t1.77e+00\n",
"[#8;r3:1]\t1.41e+00\n",
"[#8:1]~[*;r3]\t2.34e-01\n",
"[#8:1]~[*;r6]\t2.96e-03\n",
"[#8:1]~[*;r4]\t1.88e-03\n",
"[#8:1]~[*;r5]\t2.19e-04\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#8:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#6:1]~[*;X2]', '[#8:1]']\n",
"RMSE = 0.1050 e, |theta| = 3.2621\n",
"RMSE = 0.0817 e, |theta| = 3.2630\n",
"RMSE = 0.0813 e, |theta| = 3.2631\n",
"RMSE = 0.0813 e, |theta| = 3.2631\n",
"RMSE = 0.0813 e, |theta| = 3.2630\n",
"RMSE = 0.0813 e, |theta| = 3.2630\n",
"RMSE = 0.0813 e, |theta| = 3.2628\n",
"RMSE = 0.0812 e, |theta| = 3.2626\n",
"RMSE = 0.0811 e, |theta| = 3.2635\n",
"RMSE = 0.0808 e, |theta| = 3.2696\n",
"RMSE = 0.0806 e, |theta| = 3.2933\n",
"RMSE = 0.0804 e, |theta| = 3.3238\n",
"RMSE = 0.0803 e, |theta| = 3.3644\n",
"RMSE = 0.0803 e, |theta| = 3.3884\n",
"RMSE = 0.0803 e, |theta| = 3.4074\n",
"RMSE = 0.0802 e, |theta| = 3.4196\n",
"RMSE = 0.0802 e, |theta| = 3.4255\n",
"RMSE = 0.0802 e, |theta| = 3.4295\n",
"RMSE = 0.0801 e, |theta| = 3.4426\n",
"RMSE = 0.0801 e, |theta| = 3.4696\n",
"RMSE = 0.0800 e, |theta| = 3.5082\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 136.07it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.04it/s]\n",
"100%|██████████| 50/50 [00:28<00:00, 1.77it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.60it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 119 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]\t1.05e+03\n",
"[#1:1]~[*;#8]\t1.05e+03\n",
"[#1:1]~[*;X2]\t1.05e+03\n",
"[#1:1]~[*;X4]\t1.05e+03\n",
"[#1:1]~[*;x2]\t6.23e+02\n",
"[#1:1]~[*;r]\t6.23e+02\n",
"[#1:1]~[*;r7]\t1.03e+02\n",
"[#1:1]~[*;r6]\t1.51e+01\n",
"[#1:1]~[*;r3]\t4.29e+00\n",
"[#1:1]~[*;r5]\t2.60e-02\n",
"[#1:1]~[*;r4]\t1.90e-02\n",
"\n",
"valid options for elaborating type 1 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t5.33e+00\n",
"[#6;r:1]\t5.33e+00\n",
"[#6;r3:1]\t1.74e+00\n",
"[#6;r4:1]\t4.06e-01\n",
"[#6:1]~[*;r3]\t3.32e-04\n",
"[#6:1]~[*;r4]\t1.80e-04\n",
"[#6:1]~[*;r5]\t1.03e-04\n",
"[#6;r7:1]\t2.63e-05\n",
"[#6;r5:1]\t1.40e-05\n",
"[#6;r6:1]\t1.29e-05\n",
"[#6:1]~[*;r6]\t6.75e-06\n",
"[#6:1]~[*;r7]\t3.50e-06\n",
"[#6:1]~[*;X1]\t1.88e-07\n",
"[#6:1]~[*;#1]\t1.88e-07\n",
"\n",
"valid options for elaborating type 2 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;X2]\t7.19e+02\n",
"[#6:1](~[*;#8])~[*;X2]\t7.19e+02\n",
"[#6:1]~[*;X2]~[*;X1]\t3.90e+02\n",
"[#6:1]~[*;X2]~[*;#1]\t3.90e+02\n",
"[#6:1](~[*;#1])~[*;X2]\t2.56e+02\n",
"[#6:1](~[*;X1])~[*;X2]\t2.56e+02\n",
"[#6:1]~[*;X2]~[*;#6]\t1.97e+02\n",
"[#6:1]~[*;X2]~[*;X4]\t1.97e+02\n",
"[#6:1](~[*;X2])~[*;X4]\t1.86e+02\n",
"[#6:1](~[*;#6])~[*;X2]\t1.86e+02\n",
"[#6:1]~[*;X2;x2]\t1.12e+02\n",
"[#6:1]~[*;X2;r]\t1.12e+02\n",
"[#6:1]~;@[*;X2]\t1.12e+02\n",
"[#6:1]~[*;X2]~[*;x2]\t1.12e+02\n",
"[#6:1]~[*;X2]~[*;r]\t1.12e+02\n",
"[#6:1]~[*;X2]~[*;#8]\t5.84e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t5.84e+01\n",
"[#6;r6:1]~[*;X2]\t2.98e+01\n",
"[#6:1](~[*;X2])~[*;r6]\t2.98e+01\n",
"[#6:1](~[*;X2])~[*;r7]\t2.55e+01\n",
"[#6;r7:1]~[*;X2]\t2.55e+01\n",
"[#6:1](~[*;X2])~[*;r4]\t1.94e+01\n",
"[#6;r4:1]~[*;X2]\t1.94e+01\n",
"[#6:1](~[*;X2])~[*;r3]\t1.50e+01\n",
"[#6;r3:1]~[*;X2]\t1.50e+01\n",
"[#6:1]~[*;X2]~[*;r6]\t1.22e+01\n",
"[#6:1]~[*;r6;X2]\t1.22e+01\n",
"[#6:1](~[*;X2])~[*;r5]\t9.77e+00\n",
"[#6;r5:1]~[*;X2]\t9.77e+00\n",
"[#6:1]~[*;X2]~[*;r3]\t3.87e+00\n",
"[#6:1]~[*;X2;r3]\t3.87e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t5.48e-01\n",
"[#6:1]~[*;X2;r4]\t5.48e-01\n",
"[#6:1]~[*;X2]~[*;r5]\t1.80e-01\n",
"[#6:1]~[*;X2;r5]\t1.80e-01\n",
"[#6:1]~[*;X2]~[*;r7]\t9.60e-04\n",
"[#6:1]~[*;r7;X2]\t9.60e-04\n",
"\n",
"valid options for elaborating type 3 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t1.52e+02\n",
"[#8;x2:1]\t1.52e+02\n",
"[#8;r:1]\t1.52e+02\n",
"[#8:1]~[*;X1]\t1.52e+02\n",
"[#8:1]~[*;X2]\t7.49e+01\n",
"[#8:1]~[*;#8]\t7.49e+01\n",
"[#8;r7:1]\t4.33e+01\n",
"[#8;r6:1]\t1.85e+01\n",
"[#8;r5:1]\t1.08e+01\n",
"[#8:1]~[*;r7]\t6.93e+00\n",
"[#8:1]~[*;r4]\t4.06e+00\n",
"[#8:1]~[*;#6]\t3.56e+00\n",
"[#8:1]~[*;X4]\t3.56e+00\n",
"[#8;r4:1]\t3.08e+00\n",
"[#8;r3:1]\t1.81e+00\n",
"[#8:1]~[*;r3]\t2.79e-01\n",
"[#8:1]~[*;r5]\t1.93e-01\n",
"[#8:1]~[*;r6]\t9.85e-03\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#6:1]', '[#6:1]~[*;X2]', '[#8:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#8:1]']\n",
"RMSE = 0.0800 e, |theta| = 3.6350\n",
"RMSE = 0.0702 e, |theta| = 3.6355\n",
"RMSE = 0.0597 e, |theta| = 3.6365\n",
"RMSE = 0.0521 e, |theta| = 3.6383\n",
"RMSE = 0.0511 e, |theta| = 3.6386\n",
"RMSE = 0.0500 e, |theta| = 3.6393\n",
"RMSE = 0.0499 e, |theta| = 3.6393\n",
"RMSE = 0.0499 e, |theta| = 3.6393\n",
"RMSE = 0.0499 e, |theta| = 3.6392\n",
"RMSE = 0.0499 e, |theta| = 3.6392\n",
"RMSE = 0.0499 e, |theta| = 3.6391\n",
"RMSE = 0.0499 e, |theta| = 3.6388\n",
"RMSE = 0.0499 e, |theta| = 3.6383\n",
"RMSE = 0.0498 e, |theta| = 3.6370\n",
"RMSE = 0.0498 e, |theta| = 3.6355\n",
"RMSE = 0.0497 e, |theta| = 3.6349\n",
"RMSE = 0.0497 e, |theta| = 3.6349\n",
"RMSE = 0.0497 e, |theta| = 3.6348\n",
"RMSE = 0.0497 e, |theta| = 3.6347\n",
"RMSE = 0.0497 e, |theta| = 3.6341\n",
"RMSE = 0.0497 e, |theta| = 3.6327\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 145.04it/s]\n",
"100%|██████████| 50/50 [00:32<00:00, 1.56it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.22it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.60it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.82it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 169 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r;#6]\t5.87e+01\n",
"[#1:1]~[*;x2;#6]\t5.87e+01\n",
"[#1:1]~[*;#6]~[*;X2]\t5.26e+01\n",
"[#1:1]~[*;#6]~[*;#8]\t5.26e+01\n",
"[#1:1]~[*;r7;#6]\t1.87e+01\n",
"[#1:1]~[*;#6]~[*;r7]\t1.14e+01\n",
"[#1:1]~[*;r6;#6]\t9.22e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t5.42e+00\n",
"[#1:1]~[*;r5;#6]\t2.88e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t5.24e-01\n",
"[#1:1]~[*;#6]~[*;X1]\t2.58e-01\n",
"[#1:1]~[*;#6]~[*;#1]\t2.58e-01\n",
"[#1:1]~[*;r4;#6]\t2.49e-01\n",
"[#1:1]~[*;r3;#6]\t9.58e-02\n",
"[#1:1]~[*;#6]~[*;X4]\t6.07e-02\n",
"[#1:1]~[*;#6]~[*;#6]\t6.07e-02\n",
"[#1:1]~[*;#6]~[*;r5]\t5.94e-02\n",
"[#1:1]~[*;#6]~[*;r4]\t5.47e-02\n",
"\n",
"valid options for elaborating type 2 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.49e+01\n",
"[#6;r:1]\t1.49e+01\n",
"[#6:1]~[*;X1]\t1.09e+01\n",
"[#6:1]~[*;#1]\t1.09e+01\n",
"[#6;r7:1]\t2.26e+00\n",
"[#6;r6:1]\t2.20e+00\n",
"[#6:1]~[*;r6]\t1.56e+00\n",
"[#6;r3:1]\t1.48e+00\n",
"[#6;r4:1]\t6.87e-01\n",
"[#6;r5:1]\t5.72e-01\n",
"[#6:1]~[*;r7]\t4.47e-01\n",
"[#6:1]~[*;r4]\t2.90e-01\n",
"[#6:1]~[*;r5]\t1.44e-01\n",
"[#6:1]~[*;r3]\t1.17e-02\n",
"\n",
"valid options for elaborating type 3 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#8])~[*;X2]\t1.13e+03\n",
"[#6:1](~[*;X2])~[*;X2]\t1.13e+03\n",
"[#6:1]~[*;X2]~[*;X1]\t7.88e+02\n",
"[#6:1]~[*;X2]~[*;#1]\t7.88e+02\n",
"[#6:1](~[*;#1])~[*;X2]\t4.36e+02\n",
"[#6:1](~[*;X1])~[*;X2]\t4.36e+02\n",
"[#6:1](~[*;#6])~[*;X2]\t2.97e+02\n",
"[#6:1](~[*;X2])~[*;X4]\t2.97e+02\n",
"[#6:1]~[*;X2]~[*;X4]\t2.11e+02\n",
"[#6:1]~[*;X2]~[*;#6]\t2.11e+02\n",
"[#6:1]~[*;X2]~[*;X2]\t1.16e+02\n",
"[#6:1]~[*;X2]~[*;#8]\t1.16e+02\n",
"[#6:1]~;@[*;X2]\t4.37e+01\n",
"[#6:1]~[*;X2]~[*;x2]\t4.37e+01\n",
"[#6:1]~[*;X2]~[*;r]\t4.37e+01\n",
"[#6:1]~[*;X2;x2]\t4.37e+01\n",
"[#6:1]~[*;X2;r]\t4.37e+01\n",
"[#6;r7:1]~[*;X2]\t1.80e+01\n",
"[#6:1](~[*;X2])~[*;r7]\t1.80e+01\n",
"[#6:1]~[*;X2;r4]\t8.03e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t8.03e+00\n",
"[#6;r6:1]~[*;X2]\t5.60e+00\n",
"[#6:1](~[*;X2])~[*;r6]\t5.60e+00\n",
"[#6:1]~[*;r7;X2]\t1.26e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t1.26e+00\n",
"[#6:1]~[*;X2]~[*;r5]\t7.89e-01\n",
"[#6:1]~[*;X2;r5]\t7.89e-01\n",
"[#6:1]~[*;X2]~[*;r6]\t5.95e-01\n",
"[#6:1]~[*;r6;X2]\t5.95e-01\n",
"[#6:1](~[*;X2])~[*;r3]\t3.99e-01\n",
"[#6;r3:1]~[*;X2]\t3.99e-01\n",
"[#6:1](~[*;X2])~[*;r4]\t2.98e-01\n",
"[#6;r4:1]~[*;X2]\t2.98e-01\n",
"[#6:1](~[*;X2])~[*;r5]\t4.46e-02\n",
"[#6;r5:1]~[*;X2]\t4.46e-02\n",
"[#6:1]~[*;X2;r3]\t3.05e-04\n",
"[#6:1]~[*;X2]~[*;r3]\t3.05e-04\n",
"\n",
"valid options for elaborating type 4 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t1.58e+02\n",
"[#8;x2:1]\t1.58e+02\n",
"[#8;r:1]\t1.58e+02\n",
"[#8:1]~[*;X1]\t1.58e+02\n",
"[#8:1]~[*;X2]\t7.86e+01\n",
"[#8:1]~[*;#8]\t7.86e+01\n",
"[#8;r7:1]\t4.28e+01\n",
"[#8;r6:1]\t1.64e+01\n",
"[#8;r5:1]\t8.24e+00\n",
"[#8:1]~[*;r7]\t5.57e+00\n",
"[#8:1]~[*;r4]\t5.34e+00\n",
"[#8:1]~[*;r5]\t5.93e-01\n",
"[#8:1]~[*;#6]\t4.74e-01\n",
"[#8:1]~[*;X4]\t4.74e-01\n",
"[#8;r4:1]\t2.21e-01\n",
"[#8;r3:1]\t5.98e-02\n",
"[#8:1]~[*;r3]\t8.43e-03\n",
"[#8:1]~[*;r6]\t6.87e-03\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#8:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]']\n",
"RMSE = 0.0497 e, |theta| = 3.7089\n",
"RMSE = 0.0419 e, |theta| = 3.7090\n",
"RMSE = 0.0400 e, |theta| = 3.7090\n",
"RMSE = 0.0400 e, |theta| = 3.7090\n",
"RMSE = 0.0400 e, |theta| = 3.7090\n",
"RMSE = 0.0399 e, |theta| = 3.7090\n",
"RMSE = 0.0399 e, |theta| = 3.7090\n",
"RMSE = 0.0399 e, |theta| = 3.7089\n",
"RMSE = 0.0399 e, |theta| = 3.7089\n",
"RMSE = 0.0399 e, |theta| = 3.7087\n",
"RMSE = 0.0398 e, |theta| = 3.7085\n",
"RMSE = 0.0396 e, |theta| = 3.7084\n",
"RMSE = 0.0394 e, |theta| = 3.7095\n",
"RMSE = 0.0391 e, |theta| = 3.7160\n",
"RMSE = 0.0389 e, |theta| = 3.7298\n",
"RMSE = 0.0388 e, |theta| = 3.7497\n",
"RMSE = 0.0387 e, |theta| = 3.7833\n",
"RMSE = 0.0387 e, |theta| = 3.8334\n",
"RMSE = 0.0386 e, |theta| = 3.8875\n",
"RMSE = 0.0386 e, |theta| = 3.9246\n",
"RMSE = 0.0386 e, |theta| = 3.9525\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 140.42it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 128.35it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 143.96it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 141.67it/s]\n",
"100%|██████████| 38/38 [00:16<00:00, 2.30it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 131.47it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 207 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]\t6.02e+01\n",
"[#1:1]~[*;r;#6]\t6.02e+01\n",
"[#1:1]~[*;#6]~[*;X2]\t2.02e+01\n",
"[#1:1]~[*;#6]~[*;#8]\t2.02e+01\n",
"[#1:1]~[*;#6]~[*;X4]\t1.91e+01\n",
"[#1:1]~[*;#6]~[*;#6]\t1.91e+01\n",
"[#1:1]~[*;#6]~[*;X1]\t1.90e+01\n",
"[#1:1]~[*;#6]~[*;#1]\t1.90e+01\n",
"[#1:1]~[*;r7;#6]\t1.79e+01\n",
"[#1:1]~[*;r4;#6]\t1.17e+01\n",
"[#1:1]~[*;r6;#6]\t1.06e+01\n",
"[#1:1]~[*;#6]~[*;r4]\t9.36e+00\n",
"[#1:1]~[*;r5;#6]\t7.87e+00\n",
"[#1:1]~[*;r3;#6]\t6.13e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t4.30e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t3.53e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t3.21e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t2.11e+00\n",
"\n",
"valid options for elaborating type 2 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.67e+01\n",
"[#6;r:1]\t1.67e+01\n",
"[#6:1]~[*;X1]\t9.23e+00\n",
"[#6:1]~[*;#1]\t9.23e+00\n",
"[#6;r3:1]\t2.44e+00\n",
"[#6;r7:1]\t1.57e+00\n",
"[#6;r4:1]\t1.35e+00\n",
"[#6:1]~[*;r4]\t1.32e+00\n",
"[#6:1]~[*;r3]\t1.25e+00\n",
"[#6;r6:1]\t9.08e-01\n",
"[#6:1]~[*;r5]\t8.33e-01\n",
"[#6:1]~[*;r7]\t6.42e-02\n",
"[#6:1]~[*;r6]\t4.79e-02\n",
"[#6;r5:1]\t4.17e-03\n",
"\n",
"valid options for elaborating type 3 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.19e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.19e+01\n",
"[#6:1]~[*;X2;x2]\t3.46e+00\n",
"[#6:1]~[*;X2;r]\t3.46e+00\n",
"[#6:1]~[*;X2]~[*;r]\t3.46e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t3.46e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t3.46e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t3.46e+00\n",
"[#6:1]~;@[*;X2]\t3.46e+00\n",
"[#6:1]~[*;X2]~[*;X2]\t2.36e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t2.36e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t6.63e-03\n",
"[#6:1]~[*;X2]~[*;#6]\t6.63e-03\n",
"[#6:1]~[*;r7;X2]\t4.83e-03\n",
"[#6:1]~[*;X2]~[*;r7]\t4.83e-03\n",
"[#6;r7:1]~[*;X2]\t5.82e-04\n",
"[#6:1](~[*;X2])~[*;r7]\t5.82e-04\n",
"[#6:1]~[*;X2]~[*;r6]\t5.20e-04\n",
"[#6:1]~[*;r6;X2]\t5.20e-04\n",
"[#6:1]~[*;X2;r5]\t4.33e-04\n",
"[#6:1]~[*;X2]~[*;r5]\t4.33e-04\n",
"[#6;r5:1]~[*;X2]\t3.78e-04\n",
"[#6:1](~[*;X2])~[*;r5]\t3.78e-04\n",
"[#6:1](~[*;X2])~[*;r6]\t3.34e-04\n",
"[#6;r6:1]~[*;X2]\t3.34e-04\n",
"[#6:1](~[*;X2])~[*;r4]\t5.27e-05\n",
"[#6;r4:1]~[*;X2]\t5.27e-05\n",
"[#6;r3:1]~[*;X2]\t4.10e-05\n",
"[#6:1](~[*;X2])~[*;r3]\t4.10e-05\n",
"[#6:1]~[*;X2]~[*;r3]\t3.46e-05\n",
"[#6:1]~[*;X2;r3]\t3.46e-05\n",
"[#6:1]~[*;X2;r4]\t2.98e-05\n",
"[#6:1]~[*;X2]~[*;r4]\t2.98e-05\n",
"\n",
"valid options for elaborating type 4 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t6.22e+00\n",
"[#6;r7:1](~[*;X2])~[*;X2]\t6.22e+00\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t6.22e+00\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t3.21e+00\n",
"[#6;r4:1](~[*;X2])~[*;X2]\t3.21e+00\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t3.21e+00\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t2.73e+00\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t2.73e+00\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t2.73e+00\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.96e+00\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t1.96e+00\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.96e+00\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t6.48e-04\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t6.48e-04\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t6.48e-04\n",
"\n",
"valid options for elaborating type 5 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;#1]\t1.63e+02\n",
"[#8;x2:1]\t1.63e+02\n",
"[#8;r:1]\t1.63e+02\n",
"[#8:1]~[*;X1]\t1.63e+02\n",
"[#8:1]~[*;X2]\t7.67e+01\n",
"[#8:1]~[*;#8]\t7.67e+01\n",
"[#8;r7:1]\t4.56e+01\n",
"[#8;r6:1]\t1.88e+01\n",
"[#8;r5:1]\t1.10e+01\n",
"[#8:1]~[*;r7]\t6.30e+00\n",
"[#8:1]~[*;r4]\t3.56e+00\n",
"[#8;r4:1]\t3.54e+00\n",
"[#8:1]~[*;#6]\t3.20e+00\n",
"[#8:1]~[*;X4]\t3.20e+00\n",
"[#8;r3:1]\t1.86e+00\n",
"[#8:1]~[*;r5]\t4.65e-01\n",
"[#8:1]~[*;r6]\t1.74e-01\n",
"[#8:1]~[*;r3]\t1.19e-01\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]']\n",
"RMSE = 0.0386 e, |theta| = 4.6921\n",
"RMSE = 0.0270 e, |theta| = 4.6969\n",
"RMSE = 0.0268 e, |theta| = 4.6970\n",
"RMSE = 0.0267 e, |theta| = 4.6969\n",
"RMSE = 0.0261 e, |theta| = 4.6966\n",
"RMSE = 0.0260 e, |theta| = 4.6967\n",
"RMSE = 0.0260 e, |theta| = 4.6968\n",
"RMSE = 0.0260 e, |theta| = 4.6967\n",
"RMSE = 0.0260 e, |theta| = 4.6965\n",
"RMSE = 0.0260 e, |theta| = 4.6948\n",
"RMSE = 0.0260 e, |theta| = 4.6911\n",
"RMSE = 0.0260 e, |theta| = 4.6815\n",
"RMSE = 0.0259 e, |theta| = 4.6663\n",
"RMSE = 0.0259 e, |theta| = 4.6511\n",
"RMSE = 0.0258 e, |theta| = 4.6503\n",
"RMSE = 0.0257 e, |theta| = 4.6499\n",
"RMSE = 0.0257 e, |theta| = 4.6495\n",
"RMSE = 0.0257 e, |theta| = 4.6493\n",
"RMSE = 0.0257 e, |theta| = 4.6487\n",
"RMSE = 0.0257 e, |theta| = 4.6474\n",
"RMSE = 0.0257 e, |theta| = 4.6435\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 142.32it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 132.65it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.50it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 141.67it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 123.90it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.28it/s]\n",
"100%|██████████| 23/23 [00:12<00:00, 1.87it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 230 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r;#6]\t3.07e+01\n",
"[#1:1]~[*;x2;#6]\t3.07e+01\n",
"[#1:1]~[*;#6]~[*;X2]\t2.35e+01\n",
"[#1:1]~[*;#6]~[*;#8]\t2.35e+01\n",
"[#1:1]~[*;#6]~[*;X4]\t1.38e+01\n",
"[#1:1]~[*;#6]~[*;#6]\t1.38e+01\n",
"[#1:1]~[*;r7;#6]\t1.28e+01\n",
"[#1:1]~[*;#6]~[*;X1]\t1.13e+01\n",
"[#1:1]~[*;#6]~[*;#1]\t1.13e+01\n",
"[#1:1]~[*;r4;#6]\t7.22e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t5.69e+00\n",
"[#1:1]~[*;r5;#6]\t5.62e+00\n",
"[#1:1]~[*;r6;#6]\t5.48e+00\n",
"[#1:1]~[*;r3;#6]\t4.78e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t4.37e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t3.19e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t1.64e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t2.95e-01\n",
"\n",
"valid options for elaborating type 2 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.51e+01\n",
"[#6;r:1]\t1.51e+01\n",
"[#6:1]~[*;X1]\t3.03e+00\n",
"[#6:1]~[*;#1]\t3.03e+00\n",
"[#6;r3:1]\t2.41e+00\n",
"[#6;r4:1]\t1.09e+00\n",
"[#6:1]~[*;r3]\t9.23e-01\n",
"[#6:1]~[*;r4]\t4.99e-01\n",
"[#6:1]~[*;r5]\t2.77e-01\n",
"[#6;r7:1]\t7.09e-04\n",
"[#6;r6:1]\t6.81e-04\n",
"[#6:1]~[*;r6]\t2.68e-04\n",
"[#6;r5:1]\t4.10e-05\n",
"[#6:1]~[*;r7]\t5.47e-09\n",
"\n",
"valid options for elaborating type 3 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t9.75e+00\n",
"[#6:1](~[*;X1])~[*;X2]\t9.75e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t9.60e+00\n",
"[#6:1]~[*;X2]~[*;X2]\t9.60e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t3.84e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t3.84e+00\n",
"[#6:1]~[*;r7;X2]\t3.38e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t3.38e+00\n",
"[#6:1]~[*;r6;X2]\t2.18e+00\n",
"[#6:1]~[*;X2]~[*;r6]\t2.18e+00\n",
"[#6;r4:1]~[*;X2]\t2.06e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t2.06e+00\n",
"[#6;r3:1]~[*;X2]\t1.89e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t1.89e+00\n",
"[#6:1]~[*;X2;x2]\t1.73e+00\n",
"[#6:1]~[*;X2;r]\t1.73e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t1.73e+00\n",
"[#6:1]~;@[*;X2]\t1.73e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t1.73e+00\n",
"[#6:1]~[*;X2]~[*;r]\t1.73e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t1.73e+00\n",
"[#6;r7:1]~[*;X2]\t1.66e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t1.66e+00\n",
"[#6:1]~[*;X2;r5]\t1.39e+00\n",
"[#6:1]~[*;X2]~[*;r5]\t1.39e+00\n",
"[#6;r5:1]~[*;X2]\t1.16e+00\n",
"[#6:1](~[*;X2])~[*;r5]\t1.16e+00\n",
"[#6;r6:1]~[*;X2]\t1.04e+00\n",
"[#6:1](~[*;X2])~[*;r6]\t1.04e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t9.08e-01\n",
"[#6:1]~[*;X2;r4]\t9.08e-01\n",
"[#6:1]~[*;X2;r3]\t6.87e-01\n",
"[#6:1]~[*;X2]~[*;r3]\t6.87e-01\n",
"\n",
"valid options for elaborating type 4 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t9.39e+00\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t9.39e+00\n",
"[#6;r7:1](~[*;X2])~[*;X2]\t9.39e+00\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.86e+00\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.86e+00\n",
"[#6;r4:1](~[*;X2])~[*;X2]\t2.86e+00\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t2.67e+00\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.67e+00\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.67e+00\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t8.63e-01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.63e-01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.63e-01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t1.99e-02\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t1.99e-02\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t1.99e-02\n",
"\n",
"valid options for elaborating type 5 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t1.84e+00\n",
"[#8:1]~[*;r3]\t3.81e-01\n",
"[#8:1]~[*;r7]\t3.47e-03\n",
"[#8:1]~[*;r5]\t2.27e-03\n",
"[#8:1]~[*;r6]\t8.23e-04\n",
"\n",
"valid options for elaborating type 6 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]~[*;X2]\t5.92e+01\n",
"[#8;x2:1]~[*;#8]\t5.92e+01\n",
"[#8;x2:1]~[*;r7]\t5.89e+00\n",
"[#8;r7;x2:1]\t5.89e+00\n",
"[#8;r6;x2:1]\t3.41e+00\n",
"[#8;x2:1]~[*;r6]\t3.41e+00\n",
"[#8;x2;r4:1]\t1.87e+00\n",
"[#8;x2:1]~[*;r4]\t1.87e+00\n",
"[#8;x2:1]~[*;#6]\t1.60e+00\n",
"[#8;x2:1]~[*;X4]\t1.60e+00\n",
"[#8;x2:1]~[*;r3]\t6.68e-01\n",
"[#8;r3;x2:1]\t6.68e-01\n",
"[#8;x2;r5:1]\t3.69e-02\n",
"[#8;x2:1]~[*;r5]\t3.69e-02\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0257 e, |theta| = 5.1590\n",
"RMSE = 0.0235 e, |theta| = 5.1592\n",
"RMSE = 0.0229 e, |theta| = 5.1594\n",
"RMSE = 0.0226 e, |theta| = 5.1595\n",
"RMSE = 0.0208 e, |theta| = 5.1608\n",
"RMSE = 0.0194 e, |theta| = 5.1629\n",
"RMSE = 0.0191 e, |theta| = 5.1656\n",
"RMSE = 0.0186 e, |theta| = 5.1656\n",
"RMSE = 0.0185 e, |theta| = 5.1651\n",
"RMSE = 0.0185 e, |theta| = 5.1650\n",
"RMSE = 0.0185 e, |theta| = 5.1648\n",
"RMSE = 0.0185 e, |theta| = 5.1643\n",
"RMSE = 0.0185 e, |theta| = 5.1624\n",
"RMSE = 0.0184 e, |theta| = 5.1575\n",
"RMSE = 0.0182 e, |theta| = 5.1400\n",
"RMSE = 0.0182 e, |theta| = 5.1363\n",
"RMSE = 0.0181 e, |theta| = 5.1344\n",
"RMSE = 0.0180 e, |theta| = 5.1316\n",
"RMSE = 0.0178 e, |theta| = 5.1298\n",
"RMSE = 0.0178 e, |theta| = 5.1321\n",
"RMSE = 0.0175 e, |theta| = 5.1314\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 147.59it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 131.22it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 137.61it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 141.54it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 143.80it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.40it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 143.11it/s]\n",
"100%|██████████| 50/50 [00:30<00:00, 1.64it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 280 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;r;#6]\t4.64e+01\n",
"[#1:1]~[*;x2;#6]\t4.64e+01\n",
"[#1:1]~[*;#6]~[*;X2]\t4.14e+01\n",
"[#1:1]~[*;#6]~[*;#8]\t4.14e+01\n",
"[#1:1]~[*;r7;#6]\t2.31e+01\n",
"[#1:1]~[*;#6]~[*;#6]\t1.73e+01\n",
"[#1:1]~[*;#6]~[*;X4]\t1.73e+01\n",
"[#1:1]~[*;#6]~[*;#1]\t1.67e+01\n",
"[#1:1]~[*;#6]~[*;X1]\t1.67e+01\n",
"[#1:1]~[*;#6]~[*;r7]\t1.32e+01\n",
"[#1:1]~[*;#6]~[*;r4]\t1.16e+01\n",
"[#1:1]~[*;r6;#6]\t1.13e+01\n",
"[#1:1]~[*;r4;#6]\t1.05e+01\n",
"[#1:1]~[*;r5;#6]\t9.91e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t8.76e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t5.97e+00\n",
"[#1:1]~[*;r3;#6]\t4.69e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t3.11e+00\n",
"\n",
"valid options for elaborating type 2 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.91e+01\n",
"[#6;r:1]\t1.91e+01\n",
"[#6:1]~[*;X1]\t8.77e+00\n",
"[#6:1]~[*;#1]\t8.77e+00\n",
"[#6;r3:1]\t2.43e+00\n",
"[#6;r7:1]\t2.11e+00\n",
"[#6;r6:1]\t9.18e-01\n",
"[#6:1]~[*;r3]\t9.02e-01\n",
"[#6;r4:1]\t8.91e-01\n",
"[#6:1]~[*;r6]\t1.34e-01\n",
"[#6:1]~[*;r7]\t7.22e-03\n",
"[#6;r5:1]\t3.51e-03\n",
"[#6:1]~[*;r5]\t2.23e-03\n",
"[#6:1]~[*;r4]\t6.32e-04\n",
"\n",
"valid options for elaborating type 3 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.15e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.15e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t7.66e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t7.66e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t4.78e+00\n",
"[#6:1]~[*;X2;x2]\t4.78e+00\n",
"[#6:1]~[*;X2;r]\t4.78e+00\n",
"[#6:1]~[*;X2]~[*;r]\t4.78e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t4.78e+00\n",
"[#6:1]~;@[*;X2]\t4.78e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t4.78e+00\n",
"[#6:1]~[*;r7;X2]\t3.00e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t3.00e+00\n",
"[#6;r3:1]~[*;X2]\t1.95e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t1.95e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t1.78e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t1.78e+00\n",
"[#6:1]~[*;r6;X2]\t1.66e+00\n",
"[#6:1]~[*;X2]~[*;r6]\t1.66e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t1.47e+00\n",
"[#6;r4:1]~[*;X2]\t1.47e+00\n",
"[#6;r7:1]~[*;X2]\t1.06e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t1.06e+00\n",
"[#6:1]~[*;X2]~[*;r3]\t7.28e-01\n",
"[#6:1]~[*;X2;r3]\t7.28e-01\n",
"[#6:1]~[*;X2]~[*;r5]\t7.27e-01\n",
"[#6:1]~[*;X2;r5]\t7.27e-01\n",
"[#6:1]~[*;X2;r4]\t5.90e-01\n",
"[#6:1]~[*;X2]~[*;r4]\t5.90e-01\n",
"[#6:1](~[*;X2])~[*;r5]\t5.27e-01\n",
"[#6;r5:1]~[*;X2]\t5.27e-01\n",
"[#6:1](~[*;X2])~[*;r6]\t5.10e-01\n",
"[#6;r6:1]~[*;X2]\t5.10e-01\n",
"\n",
"valid options for elaborating type 4 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t1.73e+01\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t1.73e+01\n",
"[#6;r4:1](~[*;X2])~[*;X2]\t1.73e+01\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t1.65e+01\n",
"[#6;r7:1](~[*;X2])~[*;X2]\t1.65e+01\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t1.65e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t1.10e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t1.10e+01\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t1.10e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t1.04e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.04e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.04e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.08e+00\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t1.08e+00\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.08e+00\n",
"\n",
"valid options for elaborating type 5 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t3.65e-04\n",
"[#8:1]~[*;r3]\t4.47e-05\n",
"[#8:1]~[*;r7]\t1.90e-05\n",
"[#8:1]~[*;r5]\t1.51e-05\n",
"[#8:1]~[*;r6]\t4.15e-06\n",
"\n",
"valid options for elaborating type 6 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t1.48e+00\n",
"[#8;x2:1]~[*;r6]\t1.48e+00\n",
"[#8;x2:1]~[*;r7]\t9.00e-01\n",
"[#8;r7;x2:1]\t9.00e-01\n",
"[#8;x2:1]~[*;r5]\t4.02e-01\n",
"[#8;x2;r5:1]\t4.02e-01\n",
"[#8;x2:1]~[*;r4]\t5.12e-04\n",
"[#8;x2;r4:1]\t5.12e-04\n",
"[#8;x2:1]~[*;r3]\t3.37e-04\n",
"[#8;r3;x2:1]\t3.37e-04\n",
"\n",
"valid options for elaborating type 7 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.42e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.42e+00\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.42e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.42e+00\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t6.57e-01\n",
"[#8;x2:1]~[*;r6;#8]\t6.57e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t6.57e-01\n",
"[#8;r6;x2:1]~[*;#8]\t6.57e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t3.17e-01\n",
"[#8;r3;x2:1]~[*;#8]\t3.17e-01\n",
"[#8;x2:1]~[*;r3;#8]\t3.17e-01\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t3.17e-01\n",
"[#8;x2:1]~[*;r5;#8]\t2.82e-01\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t2.82e-01\n",
"[#8;x2;r5:1]~[*;#8]\t2.82e-01\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t2.82e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t7.23e-02\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t7.23e-02\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t7.23e-02\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t7.23e-02\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t8.10e-05\n",
"[#8;x2:1]~[*;r4;#8]\t8.10e-05\n",
"[#8;x2;r4:1]~[*;#8]\t8.10e-05\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t8.10e-05\n",
"[#8;r7;x2:1]~[*;#8]\t1.09e-07\n",
"[#8;x2:1]~[*;r7;#8]\t1.09e-07\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t1.09e-07\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t1.09e-07\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0175 e, |theta| = 5.3427\n",
"RMSE = 0.0173 e, |theta| = 5.3427\n",
"RMSE = 0.0173 e, |theta| = 5.3427\n",
"RMSE = 0.0173 e, |theta| = 5.3427\n",
"RMSE = 0.0173 e, |theta| = 5.3427\n",
"RMSE = 0.0173 e, |theta| = 5.3426\n",
"RMSE = 0.0173 e, |theta| = 5.3425\n",
"RMSE = 0.0173 e, |theta| = 5.3422\n",
"RMSE = 0.0173 e, |theta| = 5.3420\n",
"RMSE = 0.0173 e, |theta| = 5.3415\n",
"RMSE = 0.0173 e, |theta| = 5.3410\n",
"RMSE = 0.0173 e, |theta| = 5.3411\n",
"RMSE = 0.0173 e, |theta| = 5.3410\n",
"RMSE = 0.0173 e, |theta| = 5.3407\n",
"RMSE = 0.0173 e, |theta| = 5.3400\n",
"RMSE = 0.0173 e, |theta| = 5.3378\n",
"RMSE = 0.0173 e, |theta| = 5.3316\n",
"RMSE = 0.0173 e, |theta| = 5.3157\n",
"RMSE = 0.0173 e, |theta| = 5.2796\n",
"RMSE = 0.0173 e, |theta| = 5.2099\n",
"RMSE = 0.0173 e, |theta| = 5.1375\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 138.34it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 135.08it/s]\n",
"100%|██████████| 50/50 [00:32<00:00, 1.55it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 86.63it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 134.58it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 125.54it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.21it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.65it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 131.42it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 330 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r4]\t6.45e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t6.24e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t3.29e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t1.40e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t2.28e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.51e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.51e+01\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t1.78e+01\n",
"[#1:1]~[*;r7;x2;#6]\t1.78e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.23e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.23e+01\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t1.02e+01\n",
"[#1:1]~[*;x2;r4;#6]\t1.02e+01\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t9.37e+00\n",
"[#1:1]~[*;x2;r5;#6]\t9.37e+00\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t8.66e+00\n",
"[#1:1]~[*;r6;x2;#6]\t8.66e+00\n",
"[#1:1]~[*;r3;x2;#6]\t3.16e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t3.16e+00\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.72e+01\n",
"[#6;r:1]\t1.72e+01\n",
"[#6:1]~[*;X1]\t1.28e+01\n",
"[#6:1]~[*;#1]\t1.28e+01\n",
"[#6;r7:1]\t4.58e+00\n",
"[#6;r6:1]\t3.80e+00\n",
"[#6:1]~[*;r6]\t2.99e+00\n",
"[#6:1]~[*;r5]\t1.69e+00\n",
"[#6:1]~[*;r7]\t1.62e+00\n",
"[#6;r5:1]\t9.83e-01\n",
"[#6:1]~[*;r4]\t8.22e-01\n",
"[#6;r3:1]\t1.11e-02\n",
"[#6:1]~[*;r3]\t1.28e-03\n",
"[#6;r4:1]\t7.87e-04\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.37e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.37e+01\n",
"[#6:1]~[*;X2]~[*;#1]\t5.52e+00\n",
"[#6:1]~[*;X2;x2]\t5.52e+00\n",
"[#6:1]~[*;X2;r]\t5.52e+00\n",
"[#6:1]~[*;X2]~[*;r]\t5.52e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t5.52e+00\n",
"[#6:1]~;@[*;X2]\t5.52e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t5.52e+00\n",
"[#6:1]~[*;X2]~[*;X2]\t5.39e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t5.39e+00\n",
"[#6:1]~[*;r7;X2]\t9.31e-01\n",
"[#6:1]~[*;X2]~[*;r7]\t9.31e-01\n",
"[#6;r3:1]~[*;X2]\t4.89e-02\n",
"[#6:1](~[*;X2])~[*;r3]\t4.89e-02\n",
"[#6:1]~[*;X2]~[*;#6]\t2.75e-02\n",
"[#6:1]~[*;X2]~[*;X4]\t2.75e-02\n",
"[#6:1]~[*;r6;X2]\t6.71e-03\n",
"[#6:1]~[*;X2]~[*;r6]\t6.71e-03\n",
"[#6:1](~[*;X2])~[*;r4]\t4.73e-03\n",
"[#6;r4:1]~[*;X2]\t4.73e-03\n",
"[#6:1]~[*;X2;r3]\t1.66e-03\n",
"[#6:1]~[*;X2]~[*;r3]\t1.66e-03\n",
"[#6;r7:1]~[*;X2]\t1.17e-03\n",
"[#6:1](~[*;X2])~[*;r7]\t1.17e-03\n",
"[#6:1]~[*;X2;r4]\t7.03e-04\n",
"[#6:1]~[*;X2]~[*;r4]\t7.03e-04\n",
"[#6:1]~[*;X2;r5]\t4.43e-04\n",
"[#6:1]~[*;X2]~[*;r5]\t4.43e-04\n",
"[#6:1](~[*;X2])~[*;r6]\t3.24e-04\n",
"[#6;r6:1]~[*;X2]\t3.24e-04\n",
"[#6:1](~[*;X2])~[*;r5]\t2.34e-05\n",
"[#6;r5:1]~[*;X2]\t2.34e-05\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t3.08e+01\n",
"[#6;r7:1](~[*;X2])~[*;X2]\t3.08e+01\n",
"[#6:1](~[*;X2])~[*;r7;X2]\t3.08e+01\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.76e+01\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.76e+01\n",
"[#6;r4:1](~[*;X2])~[*;X2]\t2.76e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t2.56e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t2.56e+01\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t2.56e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t1.96e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.96e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t1.96e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.59e+00\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t1.59e+00\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.59e+00\n",
"\n",
"valid options for elaborating type 6 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t1.34e+00\n",
"[#8:1]~[*;r5]\t4.08e-04\n",
"[#8:1]~[*;r7]\t2.98e-04\n",
"[#8:1]~[*;r3]\t2.75e-04\n",
"[#8:1]~[*;r6]\t5.66e-05\n",
"\n",
"valid options for elaborating type 7 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t2.35e+00\n",
"[#8;x2:1]~[*;r6]\t2.35e+00\n",
"[#8;x2:1]~[*;r7]\t8.26e-01\n",
"[#8;r7;x2:1]\t8.26e-01\n",
"[#8;x2:1]~[*;r4]\t3.99e-01\n",
"[#8;x2;r4:1]\t3.99e-01\n",
"[#8;x2:1]~[*;r3]\t1.43e-01\n",
"[#8;r3;x2:1]\t1.43e-01\n",
"[#8;x2:1]~[*;r5]\t4.07e-05\n",
"[#8;x2;r5:1]\t4.07e-05\n",
"\n",
"valid options for elaborating type 8 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t1.89e-01\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t1.89e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t1.89e-01\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t1.89e-01\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.02e-05\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.02e-05\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.02e-05\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.02e-05\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t9.62e-06\n",
"[#8;x2:1]~[*;r7;#8]\t9.62e-06\n",
"[#8;r7;x2:1]~[*;#8]\t9.62e-06\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t9.62e-06\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t6.50e-06\n",
"[#8;x2:1]~[*;r3;#8]\t6.50e-06\n",
"[#8;r3;x2:1]~[*;#8]\t6.50e-06\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t6.50e-06\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t2.51e-06\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t2.51e-06\n",
"[#8;x2:1]~[*;r5;#8]\t2.51e-06\n",
"[#8;x2;r5:1]~[*;#8]\t2.51e-06\n",
"[#8;x2:1]~[*;r4;#8]\t1.49e-06\n",
"[#8;x2;r4:1]~[*;#8]\t1.49e-06\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t1.49e-06\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t1.49e-06\n",
"[#8;r6;x2:1]~[*;#8]\t1.16e-06\n",
"[#8;x2:1]~[*;r6;#8]\t1.16e-06\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t1.16e-06\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t1.16e-06\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2064\n",
"RMSE = 0.0173 e, |theta| = 5.2063\n",
"RMSE = 0.0173 e, |theta| = 5.2062\n",
"RMSE = 0.0173 e, |theta| = 5.2061\n",
"RMSE = 0.0173 e, |theta| = 5.2060\n",
"RMSE = 0.0173 e, |theta| = 5.2060\n",
"RMSE = 0.0173 e, |theta| = 5.2058\n",
"RMSE = 0.0172 e, |theta| = 5.2056\n",
"RMSE = 0.0172 e, |theta| = 5.2054\n",
"RMSE = 0.0172 e, |theta| = 5.2055\n",
"RMSE = 0.0172 e, |theta| = 5.2054\n",
"RMSE = 0.0172 e, |theta| = 5.2054\n",
"RMSE = 0.0172 e, |theta| = 5.2054\n",
"RMSE = 0.0172 e, |theta| = 5.2053\n",
"RMSE = 0.0172 e, |theta| = 5.2052\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 134.80it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 124.99it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 130.89it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 133.00it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 134.92it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 136.46it/s]\n",
"100%|██████████| 38/38 [00:16<00:00, 2.26it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 139.92it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 138.37it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.84it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 368 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r5]\t7.02e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t6.65e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t2.29e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t1.64e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t1.17e+00\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.85e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.85e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.42e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.42e+01\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t1.20e+01\n",
"[#1:1]~[*;x2;r4;#6]\t1.20e+01\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t1.14e+01\n",
"[#1:1]~[*;x2;r5;#6]\t1.14e+01\n",
"[#1:1]~[*;r6;x2;#6]\t1.08e+01\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t1.08e+01\n",
"[#1:1]~[*;r7;x2;#6]\t7.23e+00\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t7.23e+00\n",
"[#1:1]~[*;r3;x2;#6]\t4.62e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t4.62e+00\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.85e+01\n",
"[#6;r:1]\t1.85e+01\n",
"[#6:1]~[*;X1]\t1.29e+01\n",
"[#6:1]~[*;#1]\t1.29e+01\n",
"[#6;r6:1]\t4.13e+00\n",
"[#6:1]~[*;r6]\t3.60e+00\n",
"[#6;r7:1]\t2.76e+00\n",
"[#6;r3:1]\t2.70e+00\n",
"[#6:1]~[*;r5]\t2.09e+00\n",
"[#6:1]~[*;r7]\t1.21e+00\n",
"[#6:1]~[*;r3]\t1.14e+00\n",
"[#6:1]~[*;r4]\t1.08e+00\n",
"[#6;r5:1]\t1.01e+00\n",
"[#6;r4:1]\t7.77e-01\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.40e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.40e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t8.54e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t8.54e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t5.57e+00\n",
"[#6:1]~[*;X2;x2]\t5.57e+00\n",
"[#6:1]~[*;X2;r]\t5.57e+00\n",
"[#6:1]~[*;X2]~[*;r]\t5.57e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t5.57e+00\n",
"[#6:1]~;@[*;X2]\t5.57e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t5.57e+00\n",
"[#6:1]~[*;r7;X2]\t4.70e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t4.70e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t2.88e+00\n",
"[#6;r7:1]~[*;X2]\t2.88e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t2.68e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t2.68e+00\n",
"[#6;r3:1]~[*;X2]\t2.15e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t2.15e+00\n",
"[#6:1]~[*;X2]~[*;r6]\t1.38e+00\n",
"[#6:1]~[*;r6;X2]\t1.38e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t1.28e+00\n",
"[#6;r4:1]~[*;X2]\t1.28e+00\n",
"[#6:1]~[*;X2;r3]\t7.89e-01\n",
"[#6:1]~[*;X2]~[*;r3]\t7.89e-01\n",
"[#6:1]~[*;X2;r4]\t4.05e-01\n",
"[#6:1]~[*;X2]~[*;r4]\t4.05e-01\n",
"[#6:1](~[*;X2])~[*;r6]\t2.04e-01\n",
"[#6;r6:1]~[*;X2]\t2.04e-01\n",
"[#6:1](~[*;X2])~[*;r5]\t5.58e-02\n",
"[#6;r5:1]~[*;X2]\t5.58e-02\n",
"[#6:1]~[*;X2;r5]\t1.98e-03\n",
"[#6:1]~[*;X2]~[*;r5]\t1.98e-03\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.83e+01\n",
"[#6;r4:1](~[*;X2])~[*;X2]\t2.83e+01\n",
"[#6:1](~[*;X2;r4])~[*;X2]\t2.83e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t2.74e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t2.74e+01\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t2.74e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.08e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t2.08e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.08e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.30e-01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.30e-01\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t8.30e-01\n",
"\n",
"valid options for elaborating type 6 ([#6;r7:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 7 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t3.80e+00\n",
"[#8:1]~[*;r5]\t1.07e+00\n",
"[#8:1]~[*;r3]\t7.61e-01\n",
"[#8:1]~[*;r6]\t3.27e-01\n",
"[#8:1]~[*;r7]\t9.74e-02\n",
"\n",
"valid options for elaborating type 8 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t2.80e+00\n",
"[#8;x2:1]~[*;r6]\t2.80e+00\n",
"[#8;x2:1]~[*;r4]\t5.62e-01\n",
"[#8;x2;r4:1]\t5.62e-01\n",
"[#8;x2:1]~[*;r5]\t3.53e-01\n",
"[#8;x2;r5:1]\t3.53e-01\n",
"[#8;x2:1]~[*;r7]\t2.72e-01\n",
"[#8;r7;x2:1]\t2.72e-01\n",
"[#8;x2:1]~[*;r3]\t8.68e-02\n",
"[#8;r3;x2:1]\t8.68e-02\n",
"\n",
"valid options for elaborating type 9 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.47e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.47e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.47e+00\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.47e+00\n",
"[#8;r6;x2:1]~[*;#8]\t8.32e-01\n",
"[#8;x2:1]~[*;r6;#8]\t8.32e-01\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t8.32e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t8.32e-01\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t3.74e-01\n",
"[#8;x2:1]~[*;r5;#8]\t3.74e-01\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t3.74e-01\n",
"[#8;x2;r5:1]~[*;#8]\t3.74e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t3.38e-01\n",
"[#8;r3;x2:1]~[*;#8]\t3.38e-01\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t3.38e-01\n",
"[#8;x2:1]~[*;r3;#8]\t3.38e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t2.72e-01\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t2.72e-01\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t2.72e-01\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t2.72e-01\n",
"[#8;r7;x2:1]~[*;#8]\t3.71e-02\n",
"[#8;x2:1]~[*;r7;#8]\t3.71e-02\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t3.71e-02\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t3.71e-02\n",
"[#8;x2;r4:1]~[*;#8]\t7.10e-03\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t7.10e-03\n",
"[#8;x2:1]~[*;r4;#8]\t7.10e-03\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t7.10e-03\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2736\n",
"RMSE = 0.0172 e, |theta| = 5.2735\n",
"RMSE = 0.0172 e, |theta| = 5.2735\n",
"RMSE = 0.0172 e, |theta| = 5.2735\n",
"RMSE = 0.0172 e, |theta| = 5.2734\n",
"RMSE = 0.0172 e, |theta| = 5.2734\n",
"RMSE = 0.0172 e, |theta| = 5.2732\n",
"RMSE = 0.0172 e, |theta| = 5.2728\n",
"RMSE = 0.0172 e, |theta| = 5.2718\n",
"RMSE = 0.0172 e, |theta| = 5.2695\n",
"RMSE = 0.0172 e, |theta| = 5.2682\n",
"RMSE = 0.0172 e, |theta| = 5.2663\n",
"RMSE = 0.0172 e, |theta| = 5.2645\n",
"RMSE = 0.0172 e, |theta| = 5.2593\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 139.04it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.06it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 135.58it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.01it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 134.82it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 135.89it/s]\n",
"100%|██████████| 38/38 [00:22<00:00, 1.70it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 117.56it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 133.84it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 128.02it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 126.04it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 406 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r5]\t7.78e+00\n",
"[#1:1]~[*;#6]~[*;r6]\t2.50e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t1.92e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t1.89e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t1.20e+00\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.54e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.54e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.82e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.82e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.36e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.36e+01\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t1.19e+01\n",
"[#1:1]~[*;x2;r5;#6]\t1.19e+01\n",
"[#1:1]~[*;r6;x2;#6]\t1.15e+01\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t1.15e+01\n",
"[#1:1]~[*;r7;x2;#6]\t5.83e+00\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t5.83e+00\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t5.74e+00\n",
"[#1:1]~[*;x2;r4;#6]\t5.74e+00\n",
"[#1:1]~[*;r3;x2;#6]\t4.66e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t4.66e+00\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t1.96e+01\n",
"[#6;r:1]\t1.96e+01\n",
"[#6:1]~[*;X1]\t1.28e+01\n",
"[#6:1]~[*;#1]\t1.28e+01\n",
"[#6;r6:1]\t4.39e+00\n",
"[#6:1]~[*;r6]\t4.05e+00\n",
"[#6;r3:1]\t2.70e+00\n",
"[#6;r7:1]\t2.47e+00\n",
"[#6:1]~[*;r5]\t2.35e+00\n",
"[#6:1]~[*;r4]\t2.14e+00\n",
"[#6;r4:1]\t1.67e+00\n",
"[#6:1]~[*;r7]\t1.61e+00\n",
"[#6:1]~[*;r3]\t1.13e+00\n",
"[#6;r5:1]\t1.07e+00\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.42e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.42e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t8.74e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t8.74e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t5.40e+00\n",
"[#6:1]~[*;X2;x2]\t5.40e+00\n",
"[#6:1]~[*;X2;r]\t5.40e+00\n",
"[#6:1]~[*;X2]~[*;r]\t5.40e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t5.40e+00\n",
"[#6:1]~;@[*;X2]\t5.40e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t5.40e+00\n",
"[#6:1]~[*;r7;X2]\t4.80e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t4.80e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t3.23e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t3.23e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t2.97e+00\n",
"[#6;r7:1]~[*;X2]\t2.97e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t2.85e+00\n",
"[#6;r4:1]~[*;X2]\t2.85e+00\n",
"[#6;r3:1]~[*;X2]\t2.14e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t2.14e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t1.49e+00\n",
"[#6:1]~[*;X2;r4]\t1.49e+00\n",
"[#6:1]~[*;X2]~[*;r6]\t1.28e+00\n",
"[#6:1]~[*;r6;X2]\t1.28e+00\n",
"[#6:1]~[*;X2]~[*;r3]\t7.62e-01\n",
"[#6:1]~[*;X2;r3]\t7.62e-01\n",
"[#6:1](~[*;X2])~[*;r5]\t2.81e-01\n",
"[#6;r5:1]~[*;X2]\t2.81e-01\n",
"[#6:1](~[*;X2])~[*;r6]\t9.87e-02\n",
"[#6;r6:1]~[*;X2]\t9.87e-02\n",
"[#6:1]~[*;X2;r5]\t5.09e-02\n",
"[#6:1]~[*;X2]~[*;r5]\t5.09e-02\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t3.03e+01\n",
"[#6;r5:1](~[*;X2])~[*;X2]\t3.03e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2]\t3.03e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.42e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.42e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t2.42e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.14e+00\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t1.14e+00\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t1.14e+00\n",
"\n",
"valid options for elaborating type 6 ([#6:1](~[*;X2;r4])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~;@[*;X2]\t2.55e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;x2]\t2.55e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;r]\t2.55e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;r4]\t2.55e-03\n",
"\n",
"valid options for elaborating type 7 ([#6;r7:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t1.95e+00\n",
"[#8:1]~[*;r5]\t1.32e+00\n",
"[#8:1]~[*;r3]\t9.11e-01\n",
"[#8:1]~[*;r6]\t5.78e-01\n",
"[#8:1]~[*;r7]\t5.39e-02\n",
"\n",
"valid options for elaborating type 9 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t2.69e+00\n",
"[#8;x2:1]~[*;r6]\t2.69e+00\n",
"[#8;x2:1]~[*;r4]\t1.07e+00\n",
"[#8;x2;r4:1]\t1.07e+00\n",
"[#8;x2:1]~[*;r5]\t2.46e-01\n",
"[#8;x2;r5:1]\t2.46e-01\n",
"[#8;x2:1]~[*;r7]\t1.79e-01\n",
"[#8;r7;x2:1]\t1.79e-01\n",
"[#8;x2:1]~[*;r3]\t3.56e-03\n",
"[#8;r3;x2:1]\t3.56e-03\n",
"\n",
"valid options for elaborating type 10 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.46e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.46e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.46e+00\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.46e+00\n",
"[#8;r6;x2:1]~[*;#8]\t7.34e-01\n",
"[#8;x2:1]~[*;r6;#8]\t7.34e-01\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t7.34e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t7.34e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t3.14e-01\n",
"[#8;r3;x2:1]~[*;#8]\t3.14e-01\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t3.14e-01\n",
"[#8;x2:1]~[*;r3;#8]\t3.14e-01\n",
"[#8;x2;r5:1]~[*;#8]\t3.09e-01\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t3.09e-01\n",
"[#8;x2:1]~[*;r5;#8]\t3.09e-01\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t3.09e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t2.38e-04\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t2.38e-04\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t2.38e-04\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t2.38e-04\n",
"[#8;r7;x2:1]~[*;#8]\t5.51e-05\n",
"[#8;x2:1]~[*;r7;#8]\t5.51e-05\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t5.51e-05\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t5.51e-05\n",
"[#8;x2;r4:1]~[*;#8]\t7.38e-06\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t7.38e-06\n",
"[#8;x2:1]~[*;r4;#8]\t7.38e-06\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t7.38e-06\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0172 e, |theta| = 5.3271\n",
"RMSE = 0.0172 e, |theta| = 5.3271\n",
"RMSE = 0.0172 e, |theta| = 5.3271\n",
"RMSE = 0.0172 e, |theta| = 5.3271\n",
"RMSE = 0.0172 e, |theta| = 5.3270\n",
"RMSE = 0.0172 e, |theta| = 5.3271\n",
"RMSE = 0.0172 e, |theta| = 5.3270\n",
"RMSE = 0.0172 e, |theta| = 5.3270\n",
"RMSE = 0.0172 e, |theta| = 5.3270\n",
"RMSE = 0.0172 e, |theta| = 5.3268\n",
"RMSE = 0.0172 e, |theta| = 5.3266\n",
"RMSE = 0.0172 e, |theta| = 5.3265\n",
"RMSE = 0.0172 e, |theta| = 5.3265\n",
"RMSE = 0.0172 e, |theta| = 5.3264\n",
"RMSE = 0.0172 e, |theta| = 5.3261\n",
"RMSE = 0.0172 e, |theta| = 5.3260\n",
"RMSE = 0.0172 e, |theta| = 5.3259\n",
"RMSE = 0.0172 e, |theta| = 5.3258\n",
"RMSE = 0.0172 e, |theta| = 5.3257\n",
"RMSE = 0.0172 e, |theta| = 5.3253\n",
"RMSE = 0.0172 e, |theta| = 5.3247\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 137.39it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 131.19it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.37it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.36it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 143.98it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 148.86it/s]\n",
"100%|██████████| 38/38 [00:20<00:00, 1.81it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 145.22it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 144.64it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 142.56it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 144.57it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 145.63it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 444 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r6]\t2.32e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t1.72e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t1.15e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t5.03e-01\n",
"[#1:1]~[*;#6]~[*;r5]\t2.32e-01\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.37e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.37e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.74e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.74e+01\n",
"[#1:1]~[*;r6;x2;#6]\t1.25e+01\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t1.25e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.21e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.21e+01\n",
"[#1:1]~[*;x2;r4;#6]\t5.02e+00\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t5.02e+00\n",
"[#1:1]~[*;r7;x2;#6]\t4.94e+00\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t4.94e+00\n",
"[#1:1]~[*;r3;x2;#6]\t4.13e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t4.13e+00\n",
"[#1:1]~[*;x2;r5;#6]\t3.14e+00\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t3.14e+00\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t2.02e+01\n",
"[#6;r:1]\t2.02e+01\n",
"[#6:1]~[*;X1]\t1.28e+01\n",
"[#6:1]~[*;#1]\t1.28e+01\n",
"[#6;r6:1]\t4.65e+00\n",
"[#6:1]~[*;r6]\t4.54e+00\n",
"[#6;r7:1]\t2.49e+00\n",
"[#6;r3:1]\t2.24e+00\n",
"[#6:1]~[*;r4]\t1.74e+00\n",
"[#6;r4:1]\t1.22e+00\n",
"[#6:1]~[*;r7]\t1.09e+00\n",
"[#6:1]~[*;r3]\t6.87e-01\n",
"[#6:1]~[*;r5]\t4.16e-01\n",
"[#6;r5:1]\t1.16e-01\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.39e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.39e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t8.00e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t8.00e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t5.26e+00\n",
"[#6:1]~[*;X2;x2]\t5.26e+00\n",
"[#6:1]~[*;X2;r]\t5.26e+00\n",
"[#6:1]~[*;X2]~[*;r]\t5.26e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t5.26e+00\n",
"[#6:1]~;@[*;X2]\t5.26e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t5.26e+00\n",
"[#6:1]~[*;r7;X2]\t4.32e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t4.32e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t2.72e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t2.72e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t2.54e+00\n",
"[#6;r7:1]~[*;X2]\t2.54e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t2.32e+00\n",
"[#6;r4:1]~[*;X2]\t2.32e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t1.58e+00\n",
"[#6;r3:1]~[*;X2]\t1.58e+00\n",
"[#6:1]~[*;X2;r5]\t1.16e+00\n",
"[#6:1]~[*;X2]~[*;r5]\t1.16e+00\n",
"[#6:1](~[*;X2])~[*;r5]\t1.09e+00\n",
"[#6;r5:1]~[*;X2]\t1.09e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t9.46e-01\n",
"[#6:1]~[*;X2;r4]\t9.46e-01\n",
"[#6:1]~[*;r6;X2]\t4.42e-01\n",
"[#6:1]~[*;X2]~[*;r6]\t4.42e-01\n",
"[#6:1]~[*;X2]~[*;r3]\t2.14e-01\n",
"[#6:1]~[*;X2;r3]\t2.14e-01\n",
"[#6;r6:1]~[*;X2]\t1.37e-01\n",
"[#6:1](~[*;X2])~[*;r6]\t1.37e-01\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.89e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.89e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t2.89e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t5.81e-01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t5.81e-01\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t5.81e-01\n",
"\n",
"valid options for elaborating type 6 ([#6:1](~[*;X2;r5])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r5])~;@[*;X2]\t8.18e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2;r]\t8.18e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2;x2]\t8.18e+01\n",
"[#6:1](~[*;X2;r5])~[*;X2;r5]\t8.18e+01\n",
"\n",
"valid options for elaborating type 7 ([#6:1](~[*;X2;r4])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~;@[*;X2]\t4.14e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;x2]\t4.14e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;r]\t4.14e-03\n",
"[#6:1](~[*;X2;r4])~[*;X2;r4]\t4.14e-03\n",
"\n",
"valid options for elaborating type 8 ([#6;r7:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 9 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t1.99e+00\n",
"[#8:1]~[*;r3]\t9.24e-01\n",
"[#8:1]~[*;r6]\t9.15e-01\n",
"[#8:1]~[*;r7]\t1.45e-01\n",
"[#8:1]~[*;r5]\t1.62e-05\n",
"\n",
"valid options for elaborating type 10 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t3.17e+00\n",
"[#8;x2:1]~[*;r6]\t3.17e+00\n",
"[#8;x2:1]~[*;r5]\t1.45e+00\n",
"[#8;x2;r5:1]\t1.45e+00\n",
"[#8;x2:1]~[*;r4]\t1.08e+00\n",
"[#8;x2;r4:1]\t1.08e+00\n",
"[#8;x2:1]~[*;r7]\t2.99e-01\n",
"[#8;r7;x2:1]\t2.99e-01\n",
"[#8;x2:1]~[*;r3]\t2.18e-02\n",
"[#8;r3;x2:1]\t2.18e-02\n",
"\n",
"valid options for elaborating type 11 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.15e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.15e+00\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.15e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.15e+00\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t6.09e-01\n",
"[#8;r6;x2:1]~[*;#8]\t6.09e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t6.09e-01\n",
"[#8;x2:1]~[*;r6;#8]\t6.09e-01\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t3.02e-01\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t3.02e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t3.02e-01\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t3.02e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t3.21e-02\n",
"[#8;r3;x2:1]~[*;#8]\t3.21e-02\n",
"[#8;x2:1]~[*;r3;#8]\t3.21e-02\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t3.21e-02\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t2.98e-02\n",
"[#8;x2:1]~[*;r4;#8]\t2.98e-02\n",
"[#8;x2;r4:1]~[*;#8]\t2.98e-02\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t2.98e-02\n",
"[#8;x2:1]~[*;r5;#8]\t1.31e-03\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t1.31e-03\n",
"[#8;x2;r5:1]~[*;#8]\t1.31e-03\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t1.31e-03\n",
"[#8;r7;x2:1]~[*;#8]\t2.64e-04\n",
"[#8;x2:1]~[*;r7;#8]\t2.64e-04\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t2.64e-04\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t2.64e-04\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r5])~;@[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0172 e, |theta| = 5.3917\n",
"RMSE = 0.0171 e, |theta| = 5.3917\n",
"RMSE = 0.0171 e, |theta| = 5.3917\n",
"RMSE = 0.0171 e, |theta| = 5.3917\n",
"RMSE = 0.0171 e, |theta| = 5.3916\n",
"RMSE = 0.0171 e, |theta| = 5.3915\n",
"RMSE = 0.0171 e, |theta| = 5.3915\n",
"RMSE = 0.0171 e, |theta| = 5.3914\n",
"RMSE = 0.0171 e, |theta| = 5.3913\n",
"RMSE = 0.0170 e, |theta| = 5.3911\n",
"RMSE = 0.0170 e, |theta| = 5.3907\n",
"RMSE = 0.0170 e, |theta| = 5.3906\n",
"RMSE = 0.0170 e, |theta| = 5.3906\n",
"RMSE = 0.0170 e, |theta| = 5.3905\n",
"RMSE = 0.0170 e, |theta| = 5.3905\n",
"RMSE = 0.0170 e, |theta| = 5.3904\n",
"RMSE = 0.0170 e, |theta| = 5.3903\n",
"RMSE = 0.0170 e, |theta| = 5.3903\n",
"RMSE = 0.0170 e, |theta| = 5.3902\n",
"RMSE = 0.0170 e, |theta| = 5.3901\n",
"RMSE = 0.0170 e, |theta| = 5.3899\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 137.31it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 130.64it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.93it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.37it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 139.99it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 144.69it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 143.92it/s]\n",
"100%|██████████| 38/38 [00:22<00:00, 1.69it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 132.62it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 122.78it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 140.62it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 127.36it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 140.13it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 482 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r6]\t3.65e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t1.72e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t1.26e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t1.18e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t2.54e-02\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.40e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.40e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.83e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.83e+01\n",
"[#1:1]~[*;r6;x2;#6]\t1.34e+01\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t1.34e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.30e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.30e+01\n",
"[#1:1]~[*;x2;r4;#6]\t6.12e+00\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t6.12e+00\n",
"[#1:1]~[*;r7;x2;#6]\t5.33e+00\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t5.33e+00\n",
"[#1:1]~[*;r3;x2;#6]\t5.16e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t5.16e+00\n",
"[#1:1]~[*;x2;r5;#6]\t3.16e+00\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t3.16e+00\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t2.05e+01\n",
"[#6;r:1]\t2.05e+01\n",
"[#6:1]~[*;X1]\t1.28e+01\n",
"[#6:1]~[*;#1]\t1.28e+01\n",
"[#6;r6:1]\t4.60e+00\n",
"[#6:1]~[*;r6]\t4.52e+00\n",
"[#6;r3:1]\t2.90e+00\n",
"[#6;r7:1]\t2.41e+00\n",
"[#6:1]~[*;r4]\t2.32e+00\n",
"[#6;r4:1]\t1.86e+00\n",
"[#6:1]~[*;r7]\t1.75e+00\n",
"[#6:1]~[*;r3]\t1.33e+00\n",
"[#6:1]~[*;r5]\t1.06e+00\n",
"[#6;r5:1]\t6.05e-02\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.36e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.36e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t8.66e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t8.66e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t4.86e+00\n",
"[#6:1]~[*;X2;x2]\t4.86e+00\n",
"[#6:1]~[*;X2;r]\t4.86e+00\n",
"[#6:1]~[*;X2]~[*;r]\t4.86e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t4.86e+00\n",
"[#6:1]~;@[*;X2]\t4.86e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t4.86e+00\n",
"[#6:1]~[*;r7;X2]\t4.80e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t4.80e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t3.19e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t3.19e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t2.96e+00\n",
"[#6;r7:1]~[*;X2]\t2.96e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t2.88e+00\n",
"[#6;r4:1]~[*;X2]\t2.88e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t2.19e+00\n",
"[#6;r3:1]~[*;X2]\t2.19e+00\n",
"[#6:1]~[*;X2;r5]\t1.68e+00\n",
"[#6:1]~[*;X2]~[*;r5]\t1.68e+00\n",
"[#6:1](~[*;X2])~[*;r5]\t1.64e+00\n",
"[#6;r5:1]~[*;X2]\t1.64e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t1.52e+00\n",
"[#6:1]~[*;X2;r4]\t1.52e+00\n",
"[#6:1]~[*;r6;X2]\t9.73e-01\n",
"[#6:1]~[*;X2]~[*;r6]\t9.73e-01\n",
"[#6:1]~[*;X2]~[*;r3]\t8.10e-01\n",
"[#6:1]~[*;X2;r3]\t8.10e-01\n",
"[#6;r6:1]~[*;X2]\t4.67e-03\n",
"[#6:1](~[*;X2])~[*;r6]\t4.67e-03\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.90e+01\n",
"[#6:1](~[*;X2])~[*;r6;X2]\t2.90e+01\n",
"[#6;r6:1](~[*;X2])~[*;X2]\t2.90e+01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.40e-01\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t8.40e-01\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t8.40e-01\n",
"\n",
"valid options for elaborating type 6 ([#6:1](~[*;X2;r5])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 7 ([#6:1](~[*;X2;r5])~;@[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#6:1](~[*;X2;r4])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~;@[*;X2]\t1.86e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;x2]\t1.86e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;r]\t1.86e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;r4]\t1.86e-01\n",
"\n",
"valid options for elaborating type 9 ([#6;r7:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 10 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t2.02e+00\n",
"[#8:1]~[*;r6]\t9.25e-01\n",
"[#8:1]~[*;r3]\t9.25e-01\n",
"[#8:1]~[*;r7]\t1.36e-01\n",
"[#8:1]~[*;r5]\t2.88e-05\n",
"\n",
"valid options for elaborating type 11 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t3.31e+00\n",
"[#8;x2:1]~[*;r6]\t3.31e+00\n",
"[#8;x2:1]~[*;r5]\t1.27e+00\n",
"[#8;x2;r5:1]\t1.27e+00\n",
"[#8;x2:1]~[*;r4]\t9.54e-01\n",
"[#8;x2;r4:1]\t9.54e-01\n",
"[#8;x2:1]~[*;r7]\t3.22e-01\n",
"[#8;r7;x2:1]\t3.22e-01\n",
"[#8;x2:1]~[*;r3]\t1.46e-01\n",
"[#8;r3;x2:1]\t1.46e-01\n",
"\n",
"valid options for elaborating type 12 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.47e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.47e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.47e+00\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.47e+00\n",
"[#8;r6;x2:1]~[*;#8]\t8.98e-01\n",
"[#8;x2:1]~[*;r6;#8]\t8.98e-01\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t8.98e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t8.98e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t3.45e-01\n",
"[#8;r3;x2:1]~[*;#8]\t3.45e-01\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t3.45e-01\n",
"[#8;x2:1]~[*;r3;#8]\t3.45e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t2.36e-01\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t2.36e-01\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t2.36e-01\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t2.36e-01\n",
"[#8;x2;r5:1]~[*;#8]\t1.65e-01\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t1.65e-01\n",
"[#8;x2:1]~[*;r5;#8]\t1.65e-01\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t1.65e-01\n",
"[#8;r7;x2:1]~[*;#8]\t3.07e-02\n",
"[#8;x2:1]~[*;r7;#8]\t3.07e-02\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t3.07e-02\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t3.07e-02\n",
"[#8;x2;r4:1]~[*;#8]\t2.18e-03\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t2.18e-03\n",
"[#8;x2:1]~[*;r4;#8]\t2.18e-03\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t2.18e-03\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r5])~;@[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2])~[*;r6;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r5])~;@[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0170 e, |theta| = 5.4562\n",
"RMSE = 0.0170 e, |theta| = 5.4562\n",
"RMSE = 0.0170 e, |theta| = 5.4562\n",
"RMSE = 0.0170 e, |theta| = 5.4562\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4561\n",
"RMSE = 0.0170 e, |theta| = 5.4560\n",
"RMSE = 0.0170 e, |theta| = 5.4560\n",
"RMSE = 0.0170 e, |theta| = 5.4559\n",
"RMSE = 0.0170 e, |theta| = 5.4557\n",
"RMSE = 0.0170 e, |theta| = 5.4557\n",
"RMSE = 0.0170 e, |theta| = 5.4556\n",
"RMSE = 0.0170 e, |theta| = 5.4555\n",
"RMSE = 0.0170 e, |theta| = 5.4553\n",
"RMSE = 0.0170 e, |theta| = 5.4550\n",
"RMSE = 0.0170 e, |theta| = 5.4544\n",
"didn't make much improvement...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 23/23 [00:00<00:00, 143.17it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 136.65it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 124.02it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 136.68it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 137.05it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 145.91it/s]\n",
"100%|██████████| 38/38 [00:20<00:00, 1.89it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 121.77it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 138.78it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 147.33it/s]\n",
"100%|██████████| 38/38 [00:00<00:00, 146.84it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 145.86it/s]\n",
"100%|██████████| 23/23 [00:00<00:00, 141.16it/s]\n",
"100%|██████████| 50/50 [00:00<00:00, 143.78it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"considered 520 discrete options\n",
"valid options for elaborating type 0 ([#1:1])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 1 ([#1:1]~[*;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;#6]~[*;r6]\t2.23e+00\n",
"[#1:1]~[*;#6]~[*;r4]\t1.50e+00\n",
"[#1:1]~[*;#6]~[*;r3]\t1.19e+00\n",
"[#1:1]~[*;#6]~[*;r7]\t1.08e+00\n",
"[#1:1]~[*;#6]~[*;r5]\t5.60e-02\n",
"\n",
"valid options for elaborating type 2 ([#1:1]~[*;x2;#6])\n",
"elaboration\tfavorability\n",
"[#1:1]~[*;x2;#6]~[*;X2]\t2.35e+01\n",
"[#1:1]~[*;x2;#6]~[*;#8]\t2.35e+01\n",
"[#1:1]~[*;x2;#6]~[*;X4]\t1.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;#6]\t1.66e+01\n",
"[#1:1]~[*;x2;#6]~[*;X1]\t1.04e+01\n",
"[#1:1]~[*;x2;#6]~[*;#1]\t1.04e+01\n",
"[#1:1]~[*;x2;#6]~[*;r4]\t4.29e+00\n",
"[#1:1]~[*;x2;r4;#6]\t4.29e+00\n",
"[#1:1]~[*;x2;#6]~[*;r7]\t3.71e+00\n",
"[#1:1]~[*;r7;x2;#6]\t3.71e+00\n",
"[#1:1]~[*;x2;#6]~[*;r3]\t3.22e+00\n",
"[#1:1]~[*;r3;x2;#6]\t3.22e+00\n",
"[#1:1]~[*;x2;#6]~[*;r5]\t1.74e+00\n",
"[#1:1]~[*;x2;r5;#6]\t1.74e+00\n",
"[#1:1]~[*;x2;#6]~[*;r6]\t7.04e-01\n",
"[#1:1]~[*;r6;x2;#6]\t7.04e-01\n",
"\n",
"valid options for elaborating type 3 ([#6:1])\n",
"elaboration\tfavorability\n",
"[#6;x2:1]\t2.05e+01\n",
"[#6;r:1]\t2.05e+01\n",
"[#6:1]~[*;X1]\t1.22e+01\n",
"[#6:1]~[*;#1]\t1.22e+01\n",
"[#6;r3:1]\t2.94e+00\n",
"[#6:1]~[*;r4]\t2.27e+00\n",
"[#6;r7:1]\t2.05e+00\n",
"[#6;r4:1]\t1.87e+00\n",
"[#6;r6:1]\t1.86e+00\n",
"[#6:1]~[*;r7]\t1.68e+00\n",
"[#6:1]~[*;r3]\t1.38e+00\n",
"[#6:1]~[*;r5]\t9.37e-01\n",
"[#6:1]~[*;r6]\t5.44e-02\n",
"[#6;r5:1]\t4.06e-02\n",
"\n",
"valid options for elaborating type 4 ([#6:1]~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;#1])~[*;X2]\t1.30e+01\n",
"[#6:1](~[*;X1])~[*;X2]\t1.30e+01\n",
"[#6:1]~[*;X2]~[*;X2]\t8.67e+00\n",
"[#6:1]~[*;X2]~[*;#8]\t8.67e+00\n",
"[#6:1]~[*;r7;X2]\t4.71e+00\n",
"[#6:1]~[*;X2]~[*;r7]\t4.71e+00\n",
"[#6:1]~[*;X2]~[*;x2]\t4.13e+00\n",
"[#6:1]~;@[*;X2]\t4.13e+00\n",
"[#6:1]~[*;X2]~[*;r]\t4.13e+00\n",
"[#6:1]~[*;X2]~[*;X1]\t4.13e+00\n",
"[#6:1]~[*;X2;x2]\t4.13e+00\n",
"[#6:1]~[*;X2]~[*;#1]\t4.13e+00\n",
"[#6:1]~[*;X2;r]\t4.13e+00\n",
"[#6:1]~[*;X2]~[*;#6]\t3.21e+00\n",
"[#6:1]~[*;X2]~[*;X4]\t3.21e+00\n",
"[#6;r7:1]~[*;X2]\t2.85e+00\n",
"[#6:1](~[*;X2])~[*;r7]\t2.85e+00\n",
"[#6:1](~[*;X2])~[*;r4]\t2.84e+00\n",
"[#6;r4:1]~[*;X2]\t2.84e+00\n",
"[#6:1]~[*;r6;X2]\t2.53e+00\n",
"[#6:1]~[*;X2]~[*;r6]\t2.53e+00\n",
"[#6:1](~[*;X2])~[*;r3]\t2.20e+00\n",
"[#6;r3:1]~[*;X2]\t2.20e+00\n",
"[#6:1]~[*;X2;r5]\t1.56e+00\n",
"[#6:1]~[*;X2]~[*;r5]\t1.56e+00\n",
"[#6:1](~[*;X2])~[*;r5]\t1.51e+00\n",
"[#6;r5:1]~[*;X2]\t1.51e+00\n",
"[#6:1]~[*;X2;r4]\t1.49e+00\n",
"[#6:1]~[*;X2]~[*;r4]\t1.49e+00\n",
"[#6:1](~[*;X2])~[*;r6]\t1.46e+00\n",
"[#6;r6:1]~[*;X2]\t1.46e+00\n",
"[#6:1]~[*;X2;r3]\t8.15e-01\n",
"[#6:1]~[*;X2]~[*;r3]\t8.15e-01\n",
"\n",
"valid options for elaborating type 5 ([#6:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t3.66e-02\n",
"[#6;r3:1](~[*;X2])~[*;X2]\t3.66e-02\n",
"[#6:1](~[*;X2;r3])~[*;X2]\t3.66e-02\n",
"\n",
"valid options for elaborating type 6 ([#6:1](~[*;X2])~[*;r6;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;r6;X2])~[*;r6;X2]\t2.30e+01\n",
"[#6:1](~[*;X2;r])~[*;r6;X2]\t2.30e+01\n",
"[#6:1](~;@[*;X2])~[*;r6;X2]\t2.30e+01\n",
"[#6:1](~[*;X2;x2])~[*;r6;X2]\t2.30e+01\n",
"\n",
"valid options for elaborating type 7 ([#6:1](~[*;X2;r5])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 8 ([#6:1](~[*;X2;r5])~;@[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 9 ([#6:1](~[*;X2;r4])~[*;X2])\n",
"elaboration\tfavorability\n",
"[#6:1](~[*;X2;r4])~;@[*;X2]\t2.06e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;x2]\t2.06e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;r]\t2.06e-01\n",
"[#6:1](~[*;X2;r4])~[*;X2;r4]\t2.06e-01\n",
"\n",
"valid options for elaborating type 10 ([#6;r7:1](~[*;X2])~[*;X2])\n",
"elaboration\tfavorability\n",
"\n",
"valid options for elaborating type 11 ([#8:1])\n",
"elaboration\tfavorability\n",
"[#8:1]~[*;r4]\t1.65e+00\n",
"[#8:1]~[*;r3]\t4.69e-01\n",
"[#8:1]~[*;r6]\t2.20e-01\n",
"[#8:1]~[*;r7]\t8.64e-03\n",
"[#8:1]~[*;r5]\t1.07e-06\n",
"\n",
"valid options for elaborating type 12 ([#8;x2:1])\n",
"elaboration\tfavorability\n",
"[#8;r6;x2:1]\t1.47e+00\n",
"[#8;x2:1]~[*;r6]\t1.47e+00\n",
"[#8;x2:1]~[*;r5]\t1.28e+00\n",
"[#8;x2;r5:1]\t1.28e+00\n",
"[#8;x2:1]~[*;r4]\t1.05e+00\n",
"[#8;x2;r4:1]\t1.05e+00\n",
"[#8;x2:1]~[*;r7]\t6.24e-02\n",
"[#8;r7;x2:1]\t6.24e-02\n",
"[#8;x2:1]~[*;r3]\t5.40e-03\n",
"[#8;r3;x2:1]\t5.40e-03\n",
"\n",
"valid options for elaborating type 13 ([#8;x2:1]~[*;#8])\n",
"elaboration\tfavorability\n",
"[#8;x2:1](~[*;#6])~[*;#8]\t1.41e+00\n",
"[#8;x2:1](~[*;#8])~[*;#8]\t1.41e+00\n",
"[#8;x2:1](~[*;#8])~[*;X2]\t1.41e+00\n",
"[#8;x2:1](~[*;#8])~[*;X4]\t1.41e+00\n",
"[#8;x2:1]~[*;#8]~[*;r6]\t6.48e-01\n",
"[#8;r6;x2:1]~[*;#8]\t6.48e-01\n",
"[#8;x2:1](~[*;#8])~[*;r6]\t6.48e-01\n",
"[#8;x2:1]~[*;r6;#8]\t6.48e-01\n",
"[#8;x2:1]~[*;#8]~[*;X4]\t3.03e-01\n",
"[#8;x2:1]~[*;#8]~[*;X2]\t3.03e-01\n",
"[#8;x2:1]~[*;#8]~[*;#8]\t3.03e-01\n",
"[#8;x2:1]~[*;#8]~[*;#6]\t3.03e-01\n",
"[#8;x2:1](~[*;#8])~[*;r3]\t2.92e-01\n",
"[#8;r3;x2:1]~[*;#8]\t2.92e-01\n",
"[#8;x2:1]~[*;r3;#8]\t2.92e-01\n",
"[#8;x2:1]~[*;#8]~[*;r3]\t2.92e-01\n",
"[#8;x2:1]~[*;r5;#8]\t1.23e-01\n",
"[#8;x2:1](~[*;#8])~[*;r5]\t1.23e-01\n",
"[#8;x2;r5:1]~[*;#8]\t1.23e-01\n",
"[#8;x2:1]~[*;#8]~[*;r5]\t1.23e-01\n",
"[#8;x2:1](~[*;#8])~[*;r4]\t2.98e-02\n",
"[#8;x2:1]~[*;r4;#8]\t2.98e-02\n",
"[#8;x2;r4:1]~[*;#8]\t2.98e-02\n",
"[#8;x2:1]~[*;#8]~[*;r4]\t2.98e-02\n",
"[#8;r7;x2:1]~[*;#8]\t2.01e-02\n",
"[#8;x2:1]~[*;r7;#8]\t2.01e-02\n",
"[#8;x2:1]~[*;#8]~[*;r7]\t2.01e-02\n",
"[#8;x2:1](~[*;#8])~[*;r7]\t2.01e-02\n",
"\n",
"previous smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2])~[*;r6;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r5])~;@[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"updated smarts list:\n",
"\t['[#1:1]', '[#1:1]~[*;#6]', '[#1:1]~[*;x2;#6]', '[#1:1]~[*;x2;#6]~[*;#8]', '[#6:1]', '[#6:1]~[*;X2]', '[#6:1](~[*;X2])~[*;X2]', '[#6:1](~[*;X2])~[*;r6;X2]', '[#6:1](~[*;X2;r5])~[*;X2]', '[#6:1](~[*;X2;r5])~;@[*;X2]', '[#6:1](~[*;X2;r4])~[*;X2]', '[#6;r7:1](~[*;X2])~[*;X2]', '[#8:1]', '[#8;x2:1]', '[#8;x2:1]~[*;#8]']\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6065\n",
"RMSE = 0.0170 e, |theta| = 5.6064\n",
"RMSE = 0.0170 e, |theta| = 5.6064\n",
"RMSE = 0.0170 e, |theta| = 5.6064\n",
"RMSE = 0.0170 e, |theta| = 5.6064\n",
"RMSE = 0.0170 e, |theta| = 5.6063\n",
"RMSE = 0.0170 e, |theta| = 5.6062\n",
"RMSE = 0.0170 e, |theta| = 5.6061\n",
"RMSE = 0.0170 e, |theta| = 5.6060\n",
"RMSE = 0.0170 e, |theta| = 5.6058\n",
"RMSE = 0.0170 e, |theta| = 5.6055\n",
"RMSE = 0.0170 e, |theta| = 5.6048\n",
"RMSE = 0.0170 e, |theta| = 5.6035\n",
"RMSE = 0.0170 e, |theta| = 5.6015\n",
"RMSE = 0.0170 e, |theta| = 5.5971\n",
"didn't make much improvement...\n",
"stopping early!\n"
]
}
],
"source": [
"np.random.seed(0), onp.random.seed(0)\n",
"N_types = len(set(np.hstack(types)))\n",
"theta = onp.random.randn(2 * N_types)\n",
"theta[N_types:] = 1.0\n",
"theta = np.array(theta)\n",
"\n",
"gradient_informed_result = iterative_type_refinement(\n",
" theta, elemental_smarts_list, type_refinement_fxn=gradient_refine_smarts_list,\n",
" n_refinement_steps=20, opt_kwargs=opt_kwargs)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"from seaborn import color_palette\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"def plot_rmse_trajs(rmse_trajs, colors):\n",
" i = 0\n",
" for rmse_traj, color in zip(rmse_trajs, colors):\n",
" x = np.arange(len(rmse_traj)) + i\n",
" plt.plot(x, rmse_traj, c=color)\n",
" i += len(rmse_traj)\n",
" plt.ylim(0,0.2)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"g_colors = color_palette(\"crest\", 20)\n",
"r_colors = color_palette(\"flare\", 20)\n",
"colors = dict(zip(['random', 'gradient-informed'], [r_colors, g_colors]))"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZYAAAEWCAYAAABFSLFOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAA18ElEQVR4nO3deZxcdZ3v/9f7VPWW7uyEkISEzQCCAmKGZXBBESVcnaA/F3AEVLzIKKPMT2dEnTuXUcfhOi4jj0Eijig4CIMimjuigCg6KmgSRCBEIARC9n3pTq9V9bl/fL+VnFSqu6u7q9LVyef5SD9y9vM5p06dT32/53vOkZnhnHPOVUsy2gE455w7uHhicc45V1WeWJxzzlWVJxbnnHNV5YnFOedcVXlicc45V1WeWKpI0nWS/iN2z5HUISlzgNa9UNL/qnDaFkn/V9JOSd+rdWxDJckkvaSfcQ9J+kAN1310XH+2VusYCUnvlfTr0Y6jlg7UNh6Izzp9TqhHtfo+1eWX52BgZi8CbdVYlqSHgP8ws38fYH1XDWGRbwemA1PNLDfC8Jxzbh9eYulHvf5irZKjgGeGk1QO8v1SFw5UKbcaFPh5pE6N1vf1kDogJJ0u6Q+S2iV9T9J/SvpcHHeupDWSPiFpA/AtSZMl/ZekzZK2x+4jU8s7RtIv4/IeAA5LjdunmC1poqRvSlovaa2kzxVPIMWiv6QvxvU8L2l+HPdPwKuBf4tVa//Wz7Z9u8y2fEzSprjO98Vx/wj8A/CuuLwrJCWS/l7Sqjj9bZImlmzHFZJeBH4e4/2NpK9I2iFppaQ/j8NXx2VcnoqtKW7bi5I2xmq7ltT4v40xrpP0/iF8nv3GHce/StJvY4yrJb03Dv8f8TjYFYdfN4R1fiJ+fu2SnpZ0XiqWayU9J2mrpLskTUnN9z1JGxSqH38l6eSSz+4mSfdK2g28TtJsST+Ix97W0s+93LFSJtZrJX2/ZNhXJd0Qu98bP7v2uJy/rHAfPCTpnyT9BugEjpX0PknL47JWSvpgavp+j8c4fqqkRfHz+D1wXMn6/lzS4rjvFkv685JYPhc/5w6FKt6pkm6Py1ss6egKt2tmjGObpBWS/mdqXEbSp+Ln2y5pqaTZqX26Oq5vqaRXV7i+wxTOKTviOv9bMUnHWO6On//zkj6Smu8MSQ/H+dZL+jdJjanxJunDkp4Fno3DFkh6LMb4nKQLUqEcpfB9bpd0v6TDGCkzOyT+gEZgFfBRoAF4G9ALfC6OPxfIAf8HaAJagKnA/weMA8YD3wN+mFrmw8CX4/SvAdoJVVYARwMGZGP/D4GvA63A4cDvgQ/Gce8F+oD/CWSAvwLWAYrjHwI+MMj2fbvMtnwmbuuFhBPA5Dj+umKcsf/9wArgWEL13Q+A75Rsx20x9pYYbw54X4z3c8CLwI1xX7wx7ou2uIx/BRYBU+J+/L/AP8dxFwAbgZfF5X83ru8l/Wznnn0xSNxzYgyXxH0wFTgttX9eTvhhdUpc/0XlPreSdZ8ArAZmpqY9LnZfAzwCHBn3wdeBO0r28fg47l+Bx0o+u53AOTGmVuCPwFdidzPwqkqOlZJ4j4qf+4TYnwHWA2fF5e4CTojjZgAnV/hdeih+3icTqtMbgP9BSAgCXhvXe3qFx+OdwF0xppcBa4Ffx3FTgO3ApXFdl8T+qalYVsR1TwSeAp4B3hCnvw34Vj/bsc9nDfwS+Frc36cBm4Hz4ri/BZ6Ix4CAU1MxvIdwfGWBjwEbgOZy37WS9f8zsDDukwbCD0jFY2Ap4QdgI+H4Xgm8Kc73yvgZZuM2LAeuSS3XgAfivmsBziAcX+fHZc8CTkztv+eA4+O0DwHXj/h8O9on/AP1RzjxryX1BQR+zb4n497iAdHPMk4DtsfuOfHL0poa/13KJBbC9YweoCU17SXAL2zvyWJFaty4OO8RqQ9/qImli9TJEdgEnFXuYAceBD6U6j+BcPIqHrgGHJsa/17g2VT/y+M001PDtsb9JWA38QQcx50NPB+7b0kfyPEArzSxDBT3J4F7Kjw2/hX4SunnVma6l8T9+AagoWTccuJJKPbPKMZSZjmT4jompj6720r2z+Z+5h3wWCkz/a+By2L3+cBzsbsV2EH44dRSbt4B9tdDwGcGmeaHwEcHOx4Jya6PeKKL4z7P3sRyKfD7kmU/DLw3FcunU+O+BPwk1f8WUkm8ZDl7PmtgNpAHxqfG/zPw7dj9NLCgwv2zHTi13HetZLrPAD+i5FgHzgReLBn2SfpPkNekj/W4Ta9P9X+deHz381n+far/Q8BPh3I8lPs7lKrCZgJrLe69aHXJNJvNrLvYI2mcpK8rVLXsAn4FTFKowppJSDK7U/Ov6mfdRxF+kayPxdcdhA/78NQ0G4odZtYZO8te/I9F8o74t7CfdW61fa+hdPa3vLgt6dhXsTchFpXuq42p7q4Yd+mwNmAa4eS3NLXtP43Di+tOL7u/fTjUuGcTfontR9KZkn4Rqxl2AleRqsbsj5mtIHyJrwM2SbpT0sw4+ijgntQ2LiecqKbHapTrYxXELuCFOE96nel9MBtYZf1fA6v4WCH82Lkkdr879hOP23cRtn29pB9LOrG/bS9jn+NB0nxJj8QqnR2EUkl6+/o7HqcRPrP+joHSz7g4flaqv/S4K3ccDmYmsM3M2vtZz0DH08diNeDOuO0TqeB4Av6FUNq6P1YfXhuHHwXMLB5LcZmfIn4fJR0fq9A2xOPp82XWV3o8lY092pDqHug8UbFDKbGsB2ZJUmrY7JJprKT/Y4RfwWea2QRCqQfCr/D1wGRJranp5/Sz7tWEEsthZjYp/k0ws5P7mb7UPnGZ2efNrC3+DaU1WH/WEQ7momJpLP0FLd03ldpC+HKfnNr2iWZWPHjXs+/n0N8+LGeguFdTUlef8l1C1dxsM5tIqI5QP9Puw8y+a2avius1QtUpcX3zU9s4ycyazWwt4YS+gFDSmUj4pUzJOkt/8MxRdS68fg84V+Ha4FuJiSVuy31mdj6hdPUn4BtDWO6eeCU1AXcDXySUWicB91LZPt1M+Mz6OwZKP+Pi+LVDiLUS64Apksb3s56yx1O8nvIJ4J2Eqr1JhGqnQbfdzNrN7GNmdiyhZPX/K1yzW00o0aePpfFmdmGc9SbC5zU3npc+VWZ9pcdTf9+FmjiUEsvDhF+QV0vKSlpAqHscyHjCSXGHwoXY/10cYWargCXAP0pqlPQqwsGxHzNbD9wPfEnSBIULvcdJem2FsW8k1LPWyh3A3yg0Rmgj/AL6zwF+MVfMzAqEE9ZXJB0OIGmWpDfFSe4C3ivpJEnjSO3jEcZ9O/AGSe+Mn/dUSafF+cYTfp12SzqDcOIflKQTJL0+nki7CcdGPo5eCPyTpKPitNPiMVZcXw+henBcjHMgvyck3OsltUpqlnROJTGWMrPNhOqObxFOVstjfNMl/UX8YdQDdKS2ZagaCdeONgM5hcYEb6wwvjzh2th1sYbgJODy1CT3AsdLenf8HN8FnAT81zBj7S+O1cBvgX+O+/sU4ArCcQTw78BnJc1VcIqkqYTPNkesupT0D8CEStYp6c2SXhJ/7O4i7P884fPfpdBQpCWWeF8m6c/irOPj9B2xlPlXg6zqm8D7JJ0Xzz2zhlg6HbJDJrGYWS/hgv0VhLrl9xAOzp4BZvtXwgWtLYQLsz8tGf9uQn3oNsIJ8bYBlnUZ4Qv4FKEO9vuEX4qV+CrwdoVWQDdUOM9Q3AJ8h1DV9zzhpPnXVVz+JwhF/kdi0f1nhJIgZvYTwn7+eZzm50NYbr9xW7iP6EJCqXMb8BjhgiuEeuTPSGonXCC9q8L1NQHXE46HDYSqzE/FcV8llILuj8t9hHBsQDguVhF+/T4Vx/UrnmzfQrim8yKwhlBtNVzfJZSWvpsalhD2zTrC/nktYb8g6dWSOipdeKw++ghhP24nfC8WDSG+qwnVLxsI15u+lVr2VuDNMdatwN8BbzazLUNYfqUuIZQm1wH3AP/bzB6I475M2L77CSf1bxLODfcBPyE0GFhFOAZLq437M5fwXegg/PD9mpk9lPr8TyMc11sIiW1inO/jhH3cTvjR9p8DrcTMfk9oaPMVQmnql+xfCqyqYqujQ5Kk3wELzexbg07snHOuIodMiQVA0mslHRGL1JcTmpqWlkKcc86NQE0Ti6QLFG4iW5Fq8ZAe/5eSHo9/v5V06mDzSpoi6QFJz8b/Jw8hpBMI9wfsJBSt3x6vfzjnnKuSmlWFKTTJfYbQdn4NsBi4xMyeSk3z58ByM9seL/hdZ2ZnDjSvpC8QLrxeHxPOZDP7RE02wjnn3JDVssRyBuFGrpXxwvmdhCaXe5jZb81se+wt3rU82LwLgFtj963ARbXbBOecc0NVyweUzWLf1hFr2NtKppwrCK0rBpt3erH6yszWF5uwlpJ0JXAlQGtr6ytPPHHg1nU9uzahfI7GyTMHnM455w4VS5cu3WJm0wafcl+1TCzlbhAqW+8m6XWExPKqoc7bHzO7GbgZYN68ebZkyZIBp3/2vhto2bmFI9/5maGsxjnnDlqShvIkjD1qWRW2hn3vpj2S0D58H/FGpH8nPIdnawXzbpQ0I847g/DMIeecc3WilollMTA33hXdCFxMyU1TkuYQ7rq91MyeqXDeRey9M/dywkPcquPQvaXHOeeqpmZVYWaWk3Q14c7UDHCLmS2TdFUcv5Bw1/NU4GvhqQbkzGxef/PGRV8P3CXpCsJdye+oSsBJgjyzOOfciNX07WJmdi/hWT/pYQtT3R8Ayr5vudy8cfhW4LzqRgooQYfwUwicc65aDqk77wekBHlecc65EfPEUpTIq8Kcc64KPLEUKUPiVWHOOTdinlgiJV4V5pxz1eCJpUgJCVAoFEY7EuecG9M8sRQlYVeEd+w455wbLk8sUXigMhQKI34br3POHdI8sRQVSyx5TyzOOTcSnliKYmLxEotzzo2MJ5ZoT1WYl1icc25EPLFESvwai3POVYMnlkgqVoV5qzDnnBsJTyxFmVBisbwnFuecGwlPLJE3N3bOuerwxBLJW4U551xVeGKJlMRX0/g1FuecGxFPLEXFi/fe3Ng550bEE0uUZEKJxVuFOefcyNQ0sUi6QNLTklZIurbM+BMlPSypR9LHU8NPkPRY6m+XpGviuOskrU2Nu7Aqscb7WMwTi3POjUjN3nmv0MzqRuB8YA2wWNIiM3sqNdk24CPARel5zexp4LTUctYC96Qm+YqZfbG68RYTi1eFOefcSNSyxHIGsMLMVppZL3AnsCA9gZltMrPFQN8AyzkPeM7MVtUu1L1VYV5icc65kallYpkFrE71r4nDhupi4I6SYVdLelzSLZImDzfAfXhVmHPOVUUtE4vKDBvSy38lNQJ/AXwvNfgm4DhCVdl64Ev9zHulpCWSlmzevHnQdSV7nhXmicU550ailollDTA71X8ksG6Iy5gPPGpmG4sDzGyjmeXNrAB8g1Dlth8zu9nM5pnZvGnTpg26oiTxqjDnnKuGWiaWxcBcScfEksfFwKIhLuMSSqrBJM1I9b4VeHJEURaXG0ss+KuJnXNuRGrWKszMcpKuBu4DMsAtZrZM0lVx/EJJRwBLgAlAITYpPsnMdkkaR2hR9sGSRX9B0mmEarUXyowfFiUZDC+xOOfcSNUssQCY2b3AvSXDFqa6NxCqyMrN2wlMLTP80iqHCYRWYQXACoVaLN455w4Zfud9lPizwpxzrio8sUR+571zzlWHJ5YoyTQAEBqbOeecGy5PLNGe5sbeKsw550bEE0uUxBd94a8mds65EfHEEhWrwvCqMOecGxFPLJH23HnvicU550bCE0uk+AZJPLE459yIeGKJkiQJN0jiicU550bCE0tKQfKL9845N0KeWFJM+MV755wbIU8sKYY8sTjn3Ah5YknxEotzzo2cJ5YUk7xVmHPOjZAnlhSTwIb09mTnnHMlPLGk+DUW55wbOU8sKSYhrwpzzrkR8cSS4lVhzjk3cp5YUkJi8RKLc86NRE0Ti6QLJD0taYWka8uMP1HSw5J6JH28ZNwLkp6Q9JikJanhUyQ9IOnZ+P/kasVrEvLE4pxzI1KzxCIpA9wIzAdOAi6RdFLJZNuAjwBf7GcxrzOz08xsXmrYtcCDZjYXeDD2VytorwpzzrkRqmWJ5QxghZmtNLNe4E5gQXoCM9tkZouBviEsdwFwa+y+FbioCrGGeJR4icU550aolollFrA61b8mDquUAfdLWirpytTw6Wa2HiD+f3i5mSVdKWmJpCWbN2+ubIVeYnHOuRGrZWJRmWFDOWufY2anE6rSPizpNUNZuZndbGbzzGzetGnTKptJQp5YnHNuRGqZWNYAs1P9RwLrKp3ZzNbF/zcB9xCq1gA2SpoBEP/fVJVoAZR4YnHOuRGqZWJZDMyVdIykRuBiYFElM0pqlTS+2A28EXgyjl4EXB67Lwd+VK2ATYlXhTnn3Ahla7VgM8tJuhq4D8gAt5jZMklXxfELJR0BLAEmAAVJ1xBakB0G3COpGON3zeyncdHXA3dJugJ4EXhH1YJOEhK/894550akZokFwMzuBe4tGbYw1b2BUEVWahdwaj/L3AqcV8Uw9y478aow55wbKb/zPi3JeGJxzrkR8sSS5iUW55wbMU8saUpIPLE459yIeGJJSzKeWJxzboQ8saTIr7E459yIeWJJSzJkgII3OXbOuWHzxJKWhNbXhUJulANxzrmxyxNLipKwOwr5oTxs2TnnXJonlrRMBoBCvneUA3HOubHLE0uKilVhea8Kc8654fLEkqIklFjyOS+xOOfccHliSVHGSyzOOTdSnlhS9pRYCl5icc654fLEkqKkAQDLeYnFOeeGyxNLSrHE4vexOOfc8HliSUmyocTi97E459zweWJJSfY0N/bE4pxzw+WJJaV4H4t5qzDnnBu2miYWSRdIelrSCknXlhl/oqSHJfVI+nhq+GxJv5C0XNIySR9NjbtO0lpJj8W/C6sVbxKbG1shX61FOufcIadm77yXlAFuBM4H1gCLJS0ys6dSk20DPgJcVDJ7DviYmT0qaTywVNIDqXm/YmZfrHbMSSZeYyl4VZhzzg1XLUssZwArzGylmfUCdwIL0hOY2SYzWwz0lQxfb2aPxu52YDkwq4axAnsTi1eFOefc8NUyscwCVqf61zCM5CDpaOAVwO9Sg6+W9LikWyRN7me+KyUtkbRk8+bNFa1rT4kl71Vhzjk3XLVMLCozbEivZ5TUBtwNXGNmu+Lgm4DjgNOA9cCXys1rZjeb2Twzmzdt2rSK1le8xoLfx+Kcc8NWy8SyBpid6j8SWFfpzJIaCEnldjP7QXG4mW00s7yZFYBvEKrcqmJPVZhfvHfOuWGrZWJZDMyVdIykRuBiYFElM0oS8E1guZl9uWTcjFTvW4EnqxQvGb/G4pxzI1azVmFmlpN0NXAfkAFuMbNlkq6K4xdKOgJYAkwACpKuAU4CTgEuBZ6Q9Fhc5KfM7F7gC5JOI1SrvQB8sFoxJ9nGELuXWJxzbthqllgAYiK4t2TYwlT3BkIVWalfU/4aDWZ2aTVjTCuWWPwai3PODV/FiSW2vpoJdAEvxGscBxW/xuKccyM3YGKRNBH4MHAJ0AhsBpqB6ZIeAb5mZr+oeZQHSJJkKAAUDrqc6ZxzB8xgJZbvA7cBrzazHekRkl4JXCrpWDP7Zo3iO+AKkpdYnHNuBAZMLGZ2/gDjlgJLqx7RKDMBnlicc27YKmpurOA9kv4h9s+RVLX7R+pJQfLE4pxzI1DpfSxfA84mXGsBaCc8YPKgY55YnHNuRCptFXammZ0u6Q8AZrY93vR40ClIcPA1eHPOuQOm0hJLX3wMvgFImgYclGdfU4K8VZhzzg1bpYnlBuAe4HBJ/0S4gfHzNYtqFIWqME8szjk3XBVVhZnZ7ZKWAucR7oi/yMyW1zSyUWISmF9jcc654RrsBsk2M+sAMLM/AX8aaJqDgSUJ8vexOOfcsA1WFfYjSV+S9BpJrcWBko6VdIWk+4ALahvigZWbcBjjd7fT1bF9tENxzrkxacDEYmbnAQ8SniC8TNIuSVuB/wCOAC43s+/XPswDZ/KJryZjsPbRH9K+fS2d7ZvJ5/sGn9E55xxQwTWWck8oPpgdNutknhs/gcmrn6V39bMAdALt48aROf5MZp7wWrLZg7KltXPOVYXMhvS24DFp3rx5tmTJkoqnz+dzbHjuYfo6tlHI95Hv2kXTxhdp7e2lN0nYPetYWqa/hCTbtOfh/kmSJck2kmQayXV1MOHIl9LSOK5GW+Scc7UnaamZzRvqfDV9H8tYlclkmXX8q/cZls/3sf6Z/6b7uUeZvHoFrF5Rdl4rGJmuXjqSDF0t4yGbJRk3gWTcBNTQXP4lM2nad4rcts00HH40rWfPH8EWOefcgeOJpUKZTANHvvT18NLX09WxlV1bXqCw59qLUSjksVwvPZ07eXr1Mk5sncG0hlYs10ehcxe5LWuw3p4K17a3FFnY3U3fulWMO+sCpEHTknPOjbrBmhu/3sx+HruPMbPnU+PeZmY/qHWA9ailbSotbVPLjuvN9/GDjtVMPeY0jp3zyhGvq/OxX9Hx87sotG8nM2HKiJfnnHO1Nlhz4y+muu8uGff3gy1c0gWSnpa0QtK1ZcafKOlhST2SPl7JvJKmSHpA0rPx/8mDxXEgNSQhV+eq9HrjhiOOAqBvw6qqLM8552ptsMSifrrL9e87Mjxb7EZgPnAScImkk0om2wZ8hH0T2GDzXgs8aGZzCU2h90tYo0kSGSVVSyzZw2ZCkiG38cWqLM8552ptsMRi/XSX6y91BrDCzFaaWS9wJ7BgnwWYbTKzxUDpjSIDzbsAuDV23wpcNEgcB1w201C1xKJsA9lpM+nzxOKcGyMGu3h/rKRFhNJJsZvYf8wg884CVqf61wBnVhjXQPNON7P1AGa2XtLh5RYg6UrgSoA5c+ZUuNrqyCZZcvnqJBaA7NSZ9K7a72k6zjlXlwZLLOkSxhdLxpX2lypXVVbpTTMjmTdMbHYzcDOE+1iGMu9IZZMMfVUqsQBkpkyn8NTvKPR0kTS1VG25zjlXC4O98/6X6X5JDcDLgLVmtmmQZa8BZqf6jwTWVRjXQPNulDQjllZmAIPFccA1VLEqDCA7ZToA+e2bSOLFfOecq1cDXmORtFDSybF7IvBH4DbgD5IuGWheYDEwV9Ix8W2TFwOLBpmnknkXAZfH7suBH1W4zAOm2lVhmZhYcts2Vm2ZzjlXK4NVhb3azK6K3e8DnjGziyQdAfwEuKO/Gc0sJ+lq4D4gA9xiZsskXRXHL4zLWQJMAAqSrgFOMrNd5eaNi74euEvSFcCLwDuGvtm1lU0yVS2xZCZOgyQhv21D1ZbpnHO1Mlhi6U11nw98D8DMNlRyF3i5B1ia2cJU9wZCNVdF88bhWwkvHKtbDUkD3bnuqi1PmQyZiYeR3765ast0zrlaGay58Q5Jb5b0CuAc4KcAkrKAX0XuRzaTrerFe4CkdSKFzl1VXaZzztXCYCWWDxLed38EcE0sYUAoMfy4loGNZdW+xgKQjBtPbvPaqi7TOedqYbBWYc9Q5g2RZnYf4fqHK6MhyVb1GgtAMq6NQmd7VZfpnHO1MNhDKG8YaLyZfaS64RwcalIVNm481tOJ5XMo4w+lds7Vr8HOUFcBTwJ3Ee4j8ee2V6AmVWEtbQAUujrItE2q6rKdc66aBkssMwjNed8F5ID/BO42s+21DmwsyyZZ8pbHzKr2DhWNGw94YnHO1b8BW4WZ2VYzW2hmrwPeC0wClkm69ADENmZl46Pzq1kdlsTEYn6dxTlX5yqqrJd0OnAJ4V6WnwBLaxnUWNeQ2ftOlsZMQ1WWmYyLVWGdHVVZnnPO1cpgF+//EXgzsJzw6PpPmll1Lx4chIolllw+B9XJKyQtsSrMSyzOuTo3WInlfwErgVPj3+fjNQMBZman1Da8sSlb5bdIAqipBZIM+Xa/vOWcq2+DJZbB3rniyshmqn+NRRKZSdPoevQXWG83rWfNJ2mdiDKZqq3DOeeqYbAbJMu+aD2+OvhiwF/EXkZDuiqsiia/6xo6F/+MziU/o/vJh0EiaZ1I0jYJNTRCmRZokiDbQNI8DpIG6MuHhgBKIBFKtyCX9i5DAku9xibJoGwDymYhk0GZBnJbt9B49FwaZh4VhjvnHINfY5kAfJjwRsdFwAPA1cDHgceA22sc35hUi6owCPeytL3mIhqPezn5bRvJ79pGoX07+d07oa93v+nNDDODznZyG1eT37kDuvafbrisV1hvL2QyJC2tkMRGhjFBCcU7n2LCSjIok4Skpn0TWr5jN+QT1NiMkgQasijbiJJisitJmgO04jYzetdvY/x55zP+3HOr1uTbOVeZwX5mfgfYDjwMfAD4W6ARWGBmj9U2tLGrmFie2/o8XX1dSCJRQkPSQFtTK5NbJpFJhl+F1TjrOJh13JDns0IhlEKSJPxvhdRIK06077s64znZ8nksl4NcH5bPQT5PobuL/I5t9K19AevcHZJYcVnFv9hvVoBC+LNCgT0rKU6jLFgWNTRg+QKW66XQtTsup3RDBn4hqOULFLq62PqtW9j9u0eY+pfvoXH27AHncc5Vj2yAL6mkJ8zs5bE7A2wB5pjZmGqaNG/ePFuyZMkBW19ProfvPf5D1reXfzFXQ5JlzqQjmTN5NpOaJ9KUbSSbZMkkWTJJQkYZmrKNNGebkVTVGy0PFVYo0P7zn7P97rspdHUy7YNX0Xb22aMdlnNjiqSlZjZvyPMNklgeNbPT++sfKw50YoFQHbOzexe5Qg4DCoU8vfk+2nvaWd++kRVbVrKrZ/D8nLcGpoybwpVnvKv2QR+E8u3tbLrhq3SvWEHD4dNRSzNJczNJUxNqaEBNzWTa2lBzE8o27KnO25PHJXLbdkDLeKa+7S2jth3OjYbhJpbBqsJOlVR8CYiAlthfbG48YagrPFRIYlLLxLLjTpp+Iq8/7jV09nXR3tNOT66XXCFHrpCnYHnyhTw9uV66+rpZtmklu7p3H+DoDx6Z8eM5/KPXsOOHPyS/YzuF7m4KXV3kOjqwvhyF7i4KHR1YX1+/y8j3QqEvofUVp9B8zFEHMHrnxqbBWoV5W9YakURr4zhaG8cNOF1nLs/Dq/7g1WEjkGlrY+p73jPgNFYohGtI6WtMsTSf393Jqms+zbbvLWLm3/11jaN1buwb7A2SIyLpAklPS1oh6doy4yXphjj+8fjoGCSdIOmx1N8uSdfEcddJWpsad2Ett2G0tTa2kLcCPbnqteZy+1OSkDQ2kjTFqrLmZpKWFpKWFhoOm8rkBfPp+N0Stv/4/tEO1bm6V7ObD+LF/hsJzxdbAyyWtMjMnkpNNh+YG//OBG4CzjSzp4HTUstZC9yTmu8rZvbFWsVeT9piiWZ3bxfNDU2jHM2ha8rb3kLP86vYfMvtdD+9gqSled/m1aVSw5Ts/f1mhQJdG3bQOH1auI8okwnjVdI0W5QpoWq/zp4tO2maM5vpC86txmY6VxW1vKvtDGCFma0EkHQnsABIJ5YFwG0WWhA8ImmSpBlmtj41zXnAc/3drHmwa21sAaCjr5OpTBrdYA5hyiTM+JsPsfEbt7L7D49DoaRJdYn9ml4DGFjB6O4shJe1mWG5/N7m18agTalL9RUayPUZu59dRXZCaww2nZD6SVIq6ZDIdfbQ09lDw5RJ/eyE4qSVVcm2r9tG88zD9lmHEoX598uZ+8Ycbl3aO6xreweFTIbG8QNXHVdq2+otjJ81rf/7oQbYxtJRnTt2k7Q084p3v5Zso98oDLVNLLOA1an+NYRSyWDTzALSieVi4I6S+a6WdBmwBPhYuffDSLoSuBJgzpw5w4m/LhSvwezu6RzlSJwashzxoSsOyLr2a62Z7k91Fvr6eP5L32HrL36/32Tp+4jKLWvv4HgtqQBd+Wz5k23JdadK9DY209fVf6OIocgZdBeqV3Pfk20k11OdG5h7C9BnYvG3fkbLpDYyjdk9ybN4g69SSVWZhCRJ9o5L4h/h1oItG3fSNn1vw5+yiTwOqyTFX3LjB6uynUNRy8Qy0OFZ0TSSGoG/AD6ZGn8T8Nk43WeBLwHv328hZjcDN0NobjyUwOtJa0Mosezu7RrlSNyBtH8Jo/wpJJNp4iWf/sABiGhozAwrFPZuh+0dtt9ZIDXAiqW2kmkK+Xy4tzdbnfZEud4+Mg39nP4GPFuUH7nuiVWs/NUyetq7KPSFUqgRSqjEJ2BYIf6fL1DIF/YML+QKYTrCPurr6aOvs3dPf7+RDLF0eyDVMrGsAdK3Ox9JeL3xUKaZDzxqZnvuNEx3S/oG8F/VCrgejStWhfV6icWNHeGX+b5JIKSY+mho2jCuutcrjz77RI4++8SqLnMsq2WrsMXAXEnHxJLHxYTnjaUtAi6LrcPOAnaWXF+5hJJqMEkzUr1vBZ6sfuj1I5tkaMk2sbvPSyzOubGhZiUWM8tJuhq4j/Az5RYzWybpqjh+IXAvcCGwAugE3lecX9I4Qouy0grCL0g6jVAmfaHM+INOa+M4dnuJxTk3RtS0CYOZ3UtIHulhC1PdRnh6crl5O4GpZYZfWuUw615rYwsdfvHeOTdG1PQGSVcdrY0tdPZ1j3YYzjlXEU8sY8C4hhY6vVWYc26M8MQyBhRLLIU6bl7onHNFnljGgNbGFgyjy6vDnHNjgCeWMWBcvEnSq8Occ2OBJ5YxoHiTpN/L4pwbCzyxjAHFB1H6Y12cc2OBJ5YxoPi8sE4vsTjnxgBPLGPAuMZmwEsszrmxwRPLGJBNsjRlG/3ivXNuTPDEMka0NrT4xXvn3JjgiWWMaGtqpb1n92iH4Zxzg/LEMkZMbG5jZ3f7aIfhnHOD8sQyRkxoamNXd0ddvzXOOefAE8uYMbF5PHkr+HUW51zd88QyRkxobgNgV3fHKEfinHMD88QyRkxsConFr7M45+qdJ5YxwksszrmxoqaJRdIFkp6WtELStWXGS9INcfzjkk5PjXtB0hOSHpO0JDV8iqQHJD0b/59cy22oF62N48goYYeXWJxzda5miUVSBrgRmA+cBFwi6aSSyeYDc+PflcBNJeNfZ2anmdm81LBrgQfNbC7wYOw/6CUSR048giVrn2RTx9bRDsc55/pVyxLLGcAKM1tpZr3AncCCkmkWALdZ8AgwSdKMQZa7ALg1dt8KXFTFmOva21/+JhqSLHf88ce8sH0t63dtYkP7Zja0b2Fj+xY2dWxly+7t7OxupzffV7Zpspn5myidczWVreGyZwGrU/1rgDMrmGYWsB4w4H5JBnzdzG6O00w3s/UAZrZe0uHlVi7pSkIpiDlz5oxwU+rDxObxvPOU+Xx76T3csuTuQadPJBLt/e2QyxudfcaHzn4bx06ZVctQnXOHsFomFpUZVvpTeaBpzjGzdTFxPCDpT2b2q0pXHhPRzQDz5s07aH6iHz15FteccxlbOrfTl89hZnGHGWZG3gr05XN09XXTk++jYIUw1oz2ni5+s+opdnR5AwDnXO3UMrGsAWan+o8E1lU6jZkV/98k6R5C1dqvgI2SZsTSygxgU43ir1uTWiYwqWXCkOfr6uvhN6ueYqe3LHPO1VAtr7EsBuZKOkZSI3AxsKhkmkXAZbF12FnAzpgwWiWNB5DUCrwReDI1z+Wx+3LgRzXchoNKc7aRpkwDOzyxOOdqqGYlFjPLSboauA/IALeY2TJJV8XxC4F7gQuBFUAn8L44+3TgHknFGL9rZj+N464H7pJ0BfAi8I5abcPBRhITW9q8Ksw5V1O1rArDzO4lJI/0sIWpbgM+XGa+lcCp/SxzK3BedSM9dExqbvOqMOdcTfmd94cYTyzOuVrzxHKImdgynl09u8kXCqMdinPuIOWJ5RAzqbmNghntPZ2jHYpz7iDlieUQM71tCgBPb141ypE45w5WNb147+rPsVNmMnPCYfxsxWK6cj00JFkaMlmySYZMkpBNMjRnmzisdRITm1tHO1zn3BjkieUQI4k3zT2Tby+9lx899d8DTnt462ROn3UCL5l6JJNbxtPa2ExjpoHYDNw558rSofAO9Xnz5tmSJUsGn/AQki/k6c3n6Mvn6M3nyFuefCE8DqY718P69q0s2/g8K7au2Wc+AdkkSyZJ6M6Jlx5+FFeeMX90NsI5V1OSlpY8Xb4iXmI5RGWSDC1JhpaGprLjT5h2FOceezq7unezdtdmdnXvpqO3i558H7l8jrwVWLJmJTu7dx/gyJ1z9c4TixvQhOZWJvRzrWXdrnY2795xYANyztU9bxXmhq2tsZmO3u7RDsM5V2c8sbhha21sZndvd9kXijnnDl2eWNywtTY2k4uNAJxzrsgTixu2tsZmADp6u0Y5EudcPfHE4oatNSaW3X6dxTmX4onFDVtbUwuAX8B3zu3DE4sbNi+xOOfK8cTihq21wROLc25/nljcsLU1FS/ee2Jxzu1V08Qi6QJJT0taIenaMuMl6YY4/nFJp8fhsyX9QtJyScskfTQ1z3WS1kp6LP5dWMttcP3LJhmasg1s2b2TPm9y7JyLavZIF0kZ4EbgfGANsFjSIjN7KjXZfGBu/DsTuCn+nwM+ZmaPShoPLJX0QGrer5jZF2sVu6vcYeMm8JtVT/Hwi8t5zdEv4/RZc8kkCcXnH0siUUJTJktzQyPjm8bRmCl/2OUKebJJ5sAF75yriVo+K+wMYIWZrQSQdCewAEgnlgXAbRZu3X5E0iRJM8xsPbAewMzaJS0HZpXM6+rA377m7fxp82qe2vQiDz3/BA89/8SA0wtobmgko2Sfx+/39BXo6YMvv+VyJjS31Dhq51wt1TKxzAJWp/rXEEojg00zi5hUACQdDbwC+F1quqslXQYsIZRstlcvbDcUrY3NvHLWXF45ay4XHD+PbZ3t5K0QRppRAMwK9ORydOd62dHVQUdvd5jGDAMMY0dnFw+veo7frnqaC044bRS3yDk3UrVMLOXeBlX6UKkBp5HUBtwNXGNmu+Lgm4DPxuk+C3wJeP9+K5euBK4EmDNnzlBjd8MwrXUi01onDnv+9bvu4KHnlnH+3FPIJN6uxLmxqpbf3jXA7FT/kcC6SqeR1EBIKreb2Q+KE5jZRjPLm1kB+Aahym0/Znazmc0zs3nTpk0b8ca42nvTCafy4o4t/P1P7+CRVc+MdjjOuWGqZWJZDMyVdIykRuBiYFHJNIuAy2LrsLOAnWa2XqHy/ZvAcjP7cnoGSTNSvW8FnqzdJrgD6bXHnsRHzplPbyHPv/32p2zu2DX4TM65ulOzxGJmOeBq4D5gOXCXmS2TdJWkq+Jk9wIrgRWE0seH4vBzgEuB15dpVvwFSU9Iehx4HfA3tdoGd+CdddTxfOr1b0US/7V86WiH45wbhpq+QdLM7iUkj/SwhaluAz5cZr5fU/76C2Z2aZXDdHVm6rjxvOaYk/j5c0/yxuNPZdbEKaMdknNuCPwKqatL7zzlLJoyWT774Pf5/uMPs71rNx293ezu7aGzr4fefM5fMOZcndKh8OWcN2+eLVmyZLTDcEP0p01r+fHyR1m6dmXZ8Y2ZLLMnTaW1sZkJTS3MnjSV2ZMOY9bEKUxuafWbLZ0bIUlLzWzeUOeraVWYcyNx4uGzOPHwWTyzeR2rtm8mVyhgGGbhLv2d3Z2s2bmVjp5u1u7cyq9f+NOeeS2fZWrreMY3NZNIgEgkMokQ2nNzZn/t3c2Mghm5QoEtHR2Ma2ghm2oCLQlRfLKA9vSHZYrwT6hkBflCgY07d3N423iymYRMkpAoKV/vW4E123cxffwEJJHZE8f+661k+V29fWzf3cNLDj9sT3NvhY0FICnZ1vQNruWWv2rrDo6cNHGffTRcWzs6EQnT2sZBel8Pc5lHTp7AuS89dtjxuIF5YnF17/hpMzl+2sxBp9vZ3cnG9h0s37SOZzZtJF8wdvf2AOEmzLwV6OuzmJxsv5uq0oon0eKJP1NyAitYXIYZhbg8ALPijVghAZbKFwrs6g4P7ezL5ykUbO8NpcOws7OXze27KZhRKIRkuN+WVVgp0ZvL09lT4LfPrdq7fcOODDJk6ezpG8ES9srnjVwVH0f3hpOP88RSQ55Y3EFjYvM4JjaPC0no5NGO5uBTiKW4YkIt6i/55HJ5MpmEgjHi62H5QiEm4VQSH8HymrJeTVpLnliccxUpluIq1ZT108uhyluFOeecqypPLM4556rKE4tzzrmq8sTinHOuqjyxOOecqypPLM4556rKE4tzzrmq8sTinHOuqjyxOOecqypPLM4556rKE4tzzrmq8sTinHOuqjyxOOecq6qaJhZJF0h6WtIKSdeWGS9JN8Txj0s6fbB5JU2R9ICkZ+P/k2u5Dc4554amZolFUga4EZgPnARcIumkksnmA3Pj35XATRXMey3woJnNBR6M/c455+pELUssZwArzGylmfUCdwILSqZZANxmwSPAJEkzBpl3AXBr7L4VuKiG2+Ccc26IavkmnlnA6lT/GuDMCqaZNci8081sPYCZrZd0eLmVS7qSUAoC6JD09CDxHgZsGWSaejRW44axG7vHfeCN1djHetxHDWfmWiaWcq+aK32baH/TVDLvgMzsZuDmSqeXtMTM5g1lHfVgrMYNYzd2j/vAG6uxH6px17IqbA0wO9V/JLCuwmkGmndjrC4j/r+pijE755wboVomlsXAXEnHSGoELgYWlUyzCLgstg47C9gZq7kGmncRcHnsvhz4UQ23wTnn3BDVrCrMzHKSrgbuAzLALWa2TNJVcfxC4F7gQmAF0Am8b6B546KvB+6SdAXwIvCOKoVccbVZnRmrccPYjd3jPvDGauyHZNwyG9KlC+ecc25Afue9c865qvLE4pxzrqo8sTD4o2fqiaQXJD0h6TFJS+KwunvMjaRbJG2S9GRqWL9xSvpk3P9PS3rT6ES9J5ZysV8naW3c749JujA1btRjlzRb0i8kLZe0TNJH4/C63+cDxF7v+7xZ0u8l/THG/Y9xeF3v8wHirt7+NrND+o/QOOA54FigEfgjcNJoxzVAvC8Ah5UM+wJwbey+Fvg/dRDna4DTgScHi5Pw2J4/Ak3AMfHzyNRZ7NcBHy8zbV3EDswATo/d44FnYmx1v88HiL3e97mAttjdAPwOOKve9/kAcVdtf3uJpbJHz9S7unvMjZn9CthWMri/OBcAd5pZj5k9T2gleMaBiLOcfmLvT13EbmbrzezR2N0OLCc8waLu9/kAsfenLmK3oCP2NsQ/o873+QBx92fIcXti6f+xMvXKgPslLY2PrYGSx9wAZR9zUwf6i3OsfAZXKzyF+5ZU9UbdxS7paOAVhF+iY2qfl8QOdb7PJWUkPUa4UfsBMxsT+7yfuKFK+9sTSxUeH3OAnWNmpxOe/PxhSa8Z7YCqYCx8BjcBxwGnAeuBL8XhdRW7pDbgbuAaM9s10KRlho3qPi8Te93vczPLm9lphKeDnCHpZQNMXu9xV21/e2Kp7NEzdcPM1sX/NwH3EIqkY+UxN/3FWfefgZltjF/GAvAN9lYF1E3skhoIJ+bbzewHcfCY2OflYh8L+7zIzHYADwEXMEb2OewbdzX3tyeWyh49UxcktUoaX+wG3gg8ydh5zE1/cS4CLpbUJOkYwvt5fj8K8fWreKKI3krY71AnsUsS8E1guZl9OTWq7vd5f7GPgX0+TdKk2N0CvAH4E3W+z/uLu6r7+0C3SKjHP8JjZZ4htHb49GjHM0CcxxJaZ/wRWFaMFZhKeOnZs/H/KXUQ6x2E4nQf4RfPFQPFCXw67v+ngfl1GPt3gCeAx+MXbUY9xQ68ilA98TjwWPy7cCzs8wFir/d9fgrwhxjfk8A/xOF1vc8HiLtq+9sf6eKcc66qvCrMOedcVXlicc45V1WeWJxzzlWVJxbnnHNV5YnFOedcVXlicW4IJP02/n+0pHdXedmfKrcu58Yab27s3DBIOpfwJNg3D2GejJnlBxjfYWZtVQjPuVHlJRbnhkBS8amw1wOvju+t+Jv4UL9/kbQ4PsTvg3H6c+O7Rr5LuPkMST+MDxFdVnyQqKTrgZa4vNvT61LwL5KeVHgXz7tSy35I0vcl/UnS7fEududGVXa0A3BujLqWVIklJoidZvZnkpqA30i6P057BvAyC48cB3i/mW2Lj9NYLOluM7tW0tUWHgxY6m2EBwOeChwW5/lVHPcK4GTCs5t+A5wD/LraG+vcUHiJxbnqeCNwWXwU+e8Ij/WYG8f9PpVUAD4i6Y/AI4SH+81lYK8C7rDwgMCNwC+BP0ste42FBwc+BhxdhW1xbkS8xOJcdQj4azO7b5+B4VrM7pL+NwBnm1mnpIeA5gqW3Z+eVHce/067OuAlFueGp53wGt2i+4C/io9/R9Lx8QnUpSYC22NSOZHwStiivuL8JX4FvCtex5lGeHVyXT392bk0/3Xj3PA8DuRilda3ga8SqqEejRfQN1P+FdE/Ba6S9DjhSbGPpMbdDDwu6VEz+8vU8HuAswlPtTbg78xsQ0xMztUdb27snHOuqrwqzDnnXFV5YnHOOVdVnlicc85VlScW55xzVeWJxTnnXFV5YnHOOVdVnlicc85V1f8DbtirGSDB+UcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_rmse_trajs(gradient_informed_result[1], g_colors)\n",
"plot_rmse_trajs(random_result[1], r_colors)\n",
"\n",
"plt.title('gradient-informed local search vs. random local search')\n",
"plt.xlabel('iteration')\n",
"plt.xlim(-10,)\n",
"plt.ylabel('RMSE (e)')\n",
"plt.savefig('gradient_informed_vs_random_search.jpg', dpi=300, bbox_inches='tight')"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAElCAYAAADdmiTDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABNLElEQVR4nO3dd3wUdfrA8c+zu2mE0BHpICI1NKmCIiqIDRTl7Ip31rOed3r9bNfVO/VnOyt2DrFximdvSJEgnEpvoQuhBAipu/v8/phJ3Gw2m2xgEkKe9+uVV3anfOeZ2dl5Zr4z+/2KqmKMMcZ4xVfXARhjjDm8WaIxxhjjKUs0xhhjPGWJxhhjjKcs0RhjjPGUJRpjjDGeskTjMRH5VESuPMAyOolInoj4D1Zc5tAhIieKyCaPyk4Tkf+IyB4RedUd9kcR2SEi3ydYVg8RWSQi+0TkJi/iPRDud+Souo4DQESmisgf6zqOQ4UlmnpAVTeoamNVDcHBSV6mZurhtj8PaAO0VNXJItIR+DnQW1WPTLCs24FPVTVDVR860MBE5E4RefFAyynlfkfWHqzyzMFjicbUe+I4JPZlEQnUdQxROgMrVTUY8X6nqm6vYVlLahLEIbhdTG1S1cP2D+gIvA7kADuBh93hPuB3wHpgO/A80NQd1wVQ4ApgI7AbuBYYAnwD5JaW404/BfgS+D9gD7AcODli/KfAlRHvfwwsc8t9D+jsDv8lMA8IuO+vw/lSp0bEFAD+BISAQiAPeBh4BLg/at3/A9wSY5s8DtwXNewt4NaIODYD+4AVketSxbb+FbDGnW8pcE7U+Kvc9S4dP6iKz+hO4MWI+cu2QcR2/ZO77QuAo93PrHQZa4FromKYCCwG9rqxjgcmAwujpvs58GaMdayw7d3hClwPrALWucMedPefvcBC4PiIctKAqe4+sBS4DdgUMb4d8Jq7TdYBN1Wx7Xu52yPX3WcmuMPvAoqBEjfea9xtFXbfT3X3rxfdbZ8LLADaxFjGx1HrfgzQFOe7k4PzXfod4Iv6XvwT2AX8Maq88VGx/a+qz8KN93HgA/cz/gz3+xPxORwdMe0jwDvutPOBbhHTjsPZv/cAj7plXVnJ9h0KZLmf5TbgHxHjRgFz3G23EZhSzeX3dNdjlxvHjyLGTXVjetfdNl8CRwIP4Owzy4GB1dlf4sVeq8fiulhorawY+N2d959AuvuFGuWO+zGwGjgKaIxzoHvBHdfF3WEfd+cZ53653gSOANrjJKfREV+oIPAzIAk43915W7jjPy3dgYGz3eX2wkkavwPmuON8wOc4B9ju7g41MCqmQHSZETvTFn74krcC8ol9wDjB/UKI+745zsGnHdDDHdcuYrndqrm9J7tl+NxtsB9oGzFuM06yFpyk0LmKz+hOqk40G4A+7rZMAs4AurnLGO1ug0ER22gPMNaNsT3Olz0F58veK2JZi4BzK1nPctveHaY4B40WQJo77BKgpRvbz4HvgVR33F+BL9zpOwLf4SYaN7aFwB+AZJx9dC1waiXxJOHsU79xpz8J58DWo5LteCLlk9o1OCcljdzP41igSXXWHSfJvAVkuJ/PSuAnUd+LG91tkBajvOjY4n4WOAfgfTj7cApOMp8d9TlEJppd7uceAF4CpkV8P/YCk9xxN+MkvMoSzVzgUvd1Y2C4+7qTG8+F7ufQEhhQjeWn43zPrnDHDQJ2AH0i5t3hfhapOEl+HXCZ+xn9EfikOvtLZbHX+vG4LhZaKysGI3AyfCDGuI+An0a87+HuaAF+OKC1jxi/Ezg/4v1ruFcL7hdqC+6B2x32VcSH+yk/JJp3cb+IETtJPj9c1XRxd85lwK8jpiuNKWaicYctA8a6r28AZlWyXQTnAH2C+/4q4GP39dE4SfQUIOkAt/9iYKL7+j3g5gQ/ozupOtHcXUUMb5YuF/gX8M9KpnsM+JP7ug9Okk+pZNpY216Bk6qIZTfQ3329FhgfMe5qfkg0w4ANUfP+Gni2knKPx0livohhrwB3VrIdT6R8ovkxzhl5v2p8ppH7sh8owrnXUzr+Gpx7OOB8LzZUUV652Kr6LHAOwNMipm2Mc5XVMeJziEw0T0VMezqw3H19GTA36juxMfpzjRj/Oc7VYasYn8sblcwTb/nnA19ETf8v4I6IeZ+MGHcjsCzifSaQW539pbLYa/vvkKjX9khHYL3+UDcdqR3OpX6p9ThJpk3EsG0RrwtivG8c8X6zup9qRHntYiy3M/CgiOSKSC5OUhGcs2tUNRv4BOeg+kgl61WZ53DOonH/vxBrIjfOaThnYQAX4ZxtoaqrgVtwDgDbRWSaiMRajwpE5DIRWRyxbn1xzhzB+SzWxJgt3mdUHRujYjhNROaJyC43htOrEQM42+4iERHgUmC6qhYdYCw/F5Fl7tNeuTjVTKWxtIuaPnJf7Ay0K92O7ry/wd033SerSv86lZalquGo8tpXM+4XcE4EponIFhH5u4gkVWO+Vjhn0NHfo8jlltsm1VTVZ1FWpqrm4XyHKttHI5+qy+eH72y57e9+J+I99fcTnKrC5SKyQETOdIfH26fiLb8zMCzqM74Yp3qsVHWPP3H3lzix16rDOdFsBDpVchNyC84HVKoTzmX+thjTVkd794sRWd6WSmK6RlWbRfylqeocABE5Hecs/yPg3jjL0xjDXgQmikh/nKq5N+PM/wpwnoh0xjkjeq2sYNWXVXUUzvZR4G9xysGNuzPwJM6VVEtVbYZTHVS6TTbiVGlFi/cZ7cepzikV6wmpsu0gIinuetyHU2XYDJhVjRhQ1Xk49wuOx0m8MZN09DLjxHI8zr2uHwHN3Vj2RMSyFecgVapTxOuNOPd5IveRDFU93Y21ccTfBpz9rGPUwxCdcKoqq6SqJap6l6r2Bo4DzsQ546/KDpxagOjvUeRyK9tWlY6vxmdRtt1EpDFO9WOs71o8W4EOEeVI5PsYMa1S1Qtxqs7/BswQkdLqr5j7VBU2Ap9FfcaNVfW6GpYVb3+pLPZadTgnmq9wdqi/iki6iKSKyEh33CvAz0Skq7uz/hn49wGcWR8B3CQiSSIyGedAPyvGdI8DvxaRPgAi0tSdHhFpBTwNXAlcDpzlJp5YtuHUxZZR1U04N3JfAF5T1YLKglXVRThVVk8B76lqrhtDDxE5yT1oF+KcOYWqsf7pOAeNHLecK3CuaEo9BfxCRI51nxA72k1O8T6jxcAJ7m+ImuJUB8STjFNvnwMEReQ0nPtrpZ4GrhCRk0XEJyLtRaRnxPjncR6sCKrq7DjLqbDtY8jAOXHJAQIi8gegScT46Tj7QXMR6YBTNVLqK2CviPxSnN/A+EWkr4gMqWRZ83GS8u3u/ncicBbOVWuVRGSMiGSK8xutvTjJo8rPXJ1H7acDfxKRDPfzvBXnhKe6tgFdYjwxGO+zOF1ERolIMnAPMF9VE71yegfIFJGz3ZOc64l9IgOAiFwiIq3dq8Zcd3AIpybgFBH5kYgERKSliAyoxvLfBo4RkUvdzyxJRIaISK8E1wOq2F/ixF6rDttE434RzsK577AB59L4fHf0MzgH5M9xbrIVUv7Lnqj5ODfwd+A8mXSequ6MEdMbOGcV00RkL85Z/2nu6CeAt1R1ljvvT4CnRKRljOU9iHNFsltEIn/P8BxO/W28M/JSr+Dci3k5YlgKzo3qHTiX/UfgXIYjIheLSMxHW1V1KXA/zo3HbW4MX0aMfxVnu7yMc/P0TZyHJSr9jFT1A+DfOE/6LcT5clZKVfcBN+Ec/HbjnA3PjBj/Fc7N13/iXF18Rvmz8RdwkmNV266ybR/pPZz7cStxqpMKKV+NdJc7fB3wfuQyI7bJAHf8DpxE3bSS9S4GJuDsRztwnla6TFWXV7EepY4EZuAkmWU426W6yeJGnCS3FpiN8/k+U815AV51/+8Uka8jhsf7LF4G7sCpMjsWp8opIaq6A+cBlb/j3H/tjfNkVmXVpeOBJSKSh/P5X6Cqhe4V5ek4D3vswjk56l+N5e/DOQm6AOdq7Huc40JKDdalqv0lZuyJLudAlT55ZGpIRKbg3EQcdQjEcgLOQaJLVJ29qYKIpOE8CDFIVVfVdTwNWWWfhYhMxXmQ4XcHeXk+nJOci1X1k4NZtnEctlc0DY17A/dmnCddLMkk7jpggSWZQ4Lnn4WInCoizdxq4t/g3D+b59XyGjr7te5hwK3bzcL5TcoVdRxOvSMi2TgHmrPrNhJTi5/FCJxquGScH82eHe++pjkwVnVmjDHGU1Z1ZowxxlOHRKKROmx+XESyReSUSsbVm6a+61OsByreZ3a4iFxHEfmNiDxVi8uudnP7IjJSRFa585ztcWgJEZEpIhLvUfU6I/WvFfAyNfn+HSr3aEqbHx9Y14EYc6hR1T8fjHJEpAvOI7BJ8X4zpqqNKxsXw904jYs+eIDhmcPYIXFFwwE0P14fiTWZHtfhtn3k8O6wrsbf3fr0OdenWA+UF+ta54lGRD4GxgAPu5ffx7i/mH9eRHJEZL2I/K7018MS1VmSiHQRES3dOO4l6T0i8qVbFfe+OL+6L53+UrfMnSLy22qE2EpEPnDL+sz9BTQi8oiI3B+1Lv8RkVsqWU8VketFZBVOc/KIyIMislFE9orIQnGaLimd/k4Rme5uh30iskREBkeMHygiX7vj/o3Tymvk8q4SkdXitPs1UyLaLHNj+alb5bHP3V7dRGSuG8t0cX55HWs9jna3wx5xemn8d8S4nu622iUiK0TkRxHjznCrR/e663xnxLjSz/AnIrIBp7Xa0nVY5sa4VEQGRYQyQES+ceP4t4iUW393/hRx2n/qGzGstYgUiMgRItJKRN52p9klIl9INfu1EZHbRWSrOO2DXenGf7Q7bqqIPCYis0RkPzAm3vq781S6X8bY54eLyBw37v+J0xpA6bh4+//n7v9ccb5rIypZt+h1eURE3nHLmy8i3dxxa3BaSfiPW16KiLRz97dd7v53VdR6zBCRF8X5wfIUN94/uuuTJ853qKWIvORuqwXiXImVlhFvH2vpLnuviHxFFc3DiNM+X+k2/72Ur66MFWtTEXna/dw3u3H7I8r7sbu/7haR98Q9VrjjxorIcnd/fRi3OSJ3m+0SkcyIaY9w99HWMWKuN9+/cmqr9c54fyTW/PidVN2q7xqchuTS3Pd/dcf1xunfobSZ8X/gNBVySiVxTaWSZslJoGl+/aFl2USakr8T5xflp+O0lPsXYJ47rrQxw9KuCc7DaTrkj+74k3B+ITzIjfv/gM+jYpmJ0yxKH5xfRH+Ec9BoivO45+WVrMcrwG9xTlIim/WvqunzE3FaDPAB/XBaEDg76jN83i0njUq6FnCnz8ZpeqOduz2XAddWEu8zuK0Bu++vB/7rvv4LTrNASe7f8US0wh1nfx3vflZ9cNpje4GKLQfvAUZGbKd46x93vyRin8dptHKnu1/4cLo92Am0rsb+X7qdK7SWHWNfrbK5/YjP4pSI95/htE6QivNr9RzcPo3c9SjBeXTZFxHfapykULrvrcRptSLg7hPPVnMfm4bTMkQ6TssCm4noRiBqHUu3+Sic79N9bmynxIn1TZxWltNxWs34CrfPI+J3AVLaLcF5OPvZz9zPt7Ql7EeBv0XEdjPwn8Ph+1cWd20lkyp27E+pfvPjd1J1ovldxPif8sOB5Q+U/5Kk4zTgFy/RxGuWvFpN80d8eRNpSv5O4MOoL0aB+/oEKnZNMIcfEs3TwN+j4i7BaTGgNJaREeMXAr+MeH8/8EAlMT6P01xOh6jhcZs+j1HOA7jN9kd8hkdFjI/ZtUDEjn5JxPu/A49XMu0pwNqI91/iNNECzv2Ft3APqgnsr88Af4l4fzQVD87PV1FG5PrH3S8pn2h+idt3UtS2urwa+3/pdk400cRs7j7isyiNsyPO9yMjYvxfgKkR6/F51LI+BX4bte+9G/H+LGBxVfsYznGjBOgZMe7PVJ5o/gC8EvG+UYxtHnly1gbnuJQWMexCfugXptIuQHAaKZ0XMU5wWiIoPeYNw0kSpSetWUR0hFafv3+lf3VedRZDdZofr0p1mwffj3M2GE+8Zsmr1TR/rLKgyqbkY61HqjhVhO2I3TVBqXLdILhx76T8NkykG4RIt+N8Ub4Spzrvx+7wzsRp+lxEhonIJ+JUh+7B6bW0VVTZkdunpk2wR/sYSHOX3xnnLPsNd9y9OGeh74vIWhH5VZzlRYpu5j9Wo47Rn3W89U9kv+wMTI7azqOAthHTVHfb4H6Gpd0OHF/JZNUtrx2wS522vEpVp+uARJrEr2wfa41zJl9Z9wuxYo3c5vlU3OaRZXXGuRrZGrHsf+Fc2ZSOf1BidwESq1uCyPelDaOOFqeh16OJaKcvSn37/gGHzlNnkSKbH1/qDotsfrw6zcdXZivOpS0AItIIp+oqnnjNkr8IfCfVa5ofYjclfzKwRFXDIrKbH5qSr2o92ouIRCSbTvywY5TrBkGcZsFbUs2m4+OugOr3OJ2lISKjgA9F5HN+aPp8bCWzvozTIu9pqlooIg9QcUePTJw1bYI9Ot6wiEzHOfvcBrxdeiB0//8c+Lk4LWp/IiILVPWjKoot18w85Zv8L1t01Pt465/IfrkR54rmqkrGxxMdE6rapwblVGYL0EJEMiKSTaJdB8RT6T7m3isJ4nwWpQ2KdoqeLsJWnA4PS+dPo+I2j94fi3A6EIv1xN5GnCral2LE1p3yxxGh4j5TetL6PTBDK2n4sr59/0odclc0WnXz44tJrPn4SDOAM+WHZsbvpuptUGmz5JpA0/wxVNWUfDxz3XlvEqd58kk4deilXsZpEn+AOG05/dmNOzuB+GISkcniNG0PTlWf4lSXVNX0eQbO2W6hiAzFaV05nsq6FqiJl3GqFi4morVqETnTLVdw6tBDVK8J9ek427eXmxT+UI154q1/IvvlizhdSJwqTpPwqSJyYsRnEk8OEKbqbg5qxP1ezAH+4sbVD6cV8goH3xqqdB9zjxuvA3eKSCMR6Y3T3UZlZuBsx+PcbX4XcU7yVHUrTkvb94tIE3G6mugmIqPdSSrtAgSnW4I+IjJJnBqJm6h4gvwCcA5Osnm+sjjq6ffv0Es0rkqbH9cEm4+PpKpLcG4Gv4xzRrOb+D3rQdXNkifSNH+kqpqSr5Q6TcNPwukudzfOQfT1iPEfAb/H6QhsK86ZyQUJxleZIcB8cZodn4lTj7tOq276/KfA3SKyD+fAPD3eQrSSrgVqEnBE1UQ7nG1eqjvwIc5N4bnAo6r6KYCIvCsiv6mkvHeBh3B6Q13tzguVNzMPcdY/kf3SPZhPxGkIMgdnn7mNanyX3eqhPwFfutUrw6uapwYuxKnz34JTRXmH+509YNXYx27AqcL5Hufe0rNxylqCc5yZhrPN9+G0GB3vM7yMH9pG242TrNq65b1BJV2A6A/dEvwVp3quOxHdaLjTbAK+xkkcX8SJod59/8DaOjtgYk3zN3juWeN3OH3b17TzPFOH3GrxXKC7qq6roxieAbboQe4G4VBwqF7R1AtiTfM3WCJyjogki0hznDPH/1iSqV9E5Cy3mi0d5/Hmb3GeqKqLWLrg1FI8XRfL95olmhpyz2JzcS6dH6jTYExduAan6moNTh15Tfp7N3VrIk410xac6qwLtA6qeETkHpwr4nvr6mrKa1Z1ZowxxlN2RWOMMcZTh+LvaGqsVatW2qVLl7oOwxhj6o2FCxfuUNUK7aodTIdVounSpQtZWVl1HYYxxtQbIhKvBYWDwqrOjDHGeMoSjTHGGE9ZojHGGOOpw+oeTaJ25axly7blNEptQueuw/D7k+o6JGOMOew0yEQTDof5eP4zrAvvR1BkDwS+z+LMHmfRsnXNGiwN7tpKcMdm/E1aEmjTBaedRmOMMQ0y0Sxf/gHZ4f2EfUJpg61BVd5b/jYXtLwRn6/6NYoaCrL3/Wcp2bqmrCx/RguannUdvtS4XTQYY0yD0CDv0SzbuZKQL+qKQ4R8H+zemVgLEPmLPqRkyxoIlkCwGILFhPbksO/Tf1c9szHGNAANMtEEK+l7SYBgSbxWwisqXD4fQiXlB4ZDlGxagQZLYs9kjDENSINMNF3T2+IPV0w2PlVatTkmscKik0wpVTRcnT60jDHm8NYgE82APqeTEZayZCOq+MPK6LZD8PsTu22V3Kk3SMXN6G9xJL7k1IMSrzHG1GcN8mGA5JR0zh1+DatWfcbG3PWkB9Loc/RomrWI1fV7fOnDzqR48yq0uMC5T+MPID4/GaPP9yByY4ypfw6rbgIGDx6sddHWWbi4kKKVCyjZth5/8zak9RyGr1GTWo/DGGMSJSILVXWwl8tokFc0B5svOZW0vseT1vf4ug7FGGMOOQ3yHo0xxpja42miEZHxIrJCRFaLyK9ijO8pInNFpEhEfpHIvMYYY+oHzxKNiPiBR4DTgN7AhSLSO2qyXcBNwH01mNcYY0w94OUVzVBgtaquVdViYBowMXICVd2uqguA6B+jVDmvMcaY+sHLRNMe2BjxfpM77KDOKyJXi0iWiGTl5OTUKFBjjDHe8TLRxGq+uLrPUld7XlV9QlUHq+rg1q097fbaGGNMDXiZaDYBkb+A7ABsqYV5jTHGHEK8TDQLgO4i0lVEkoELgJm1MK8xxphDiGc/2FTVoIjcALwH+IFnVHWJiFzrjn9cRI4EsoAmQFhEbgF6q+reWPN6FasxxhjvWBM0xhjTgNVGEzTWMoAxxhhPWaIxxhjjKUs0xhhjPGWJxhhjjKcs0RhjjPGUJRpjjDGeskRjjDHGU5ZojDHGeMoSjTHGGE9ZojHGGOMpSzTGGGM8ZYnGGGOMpyzRGGOM8ZQlGmOMMZ6yRGOMMcZTlmiMMcZ4yhKNMcYYT1miMcYY4ylLNMYYYzxlicYYY4ynLNEYY4zxlCUaY4wxnrJEY4wxxlOWaA5B4cJ8gju2EC4uqutQjDHmgAXqOgDzAw2F2Pfxvylc+hXiD6DhEI0GnUT6yDMRkYTLK1y2kP2z/0s4bw/JnY8h/cQJBFoc4UHkxhhTOUs0h5C8L2dSuGwBhIJoKAhA/tef4GvclEYDTkiorP1z3ifvs5lQUgxA4ZIsilZ9S8urf4+/eauEytJQiLzP3iV/7sdocREpPTJpctpk/M1bJlQOgIbDFCxawP45n0E4TKPhx9NoyAjEZxfXxhyu7Nt9iNBwmILFX0CwpPyIYDH5Cz5IrKySYvZHJBl3AWhxEXmzZyUcW+60J8j76D+E9+xGC/Ip/N9X7HjoLsL78xIua/fzT7L7+ScpWvotRcuXkPvys+x8/AFUNeGyjDH1gyWaQ0Uo6PzFEC5I7IAe3LUdJMZHq2FK1q9MrKyd2ylcsigqaSnhokL2z/8kobKKN66nYNFXaMS9Jy0uomjFUopWLU+oLGNM/WGJ5lARSMLXpHnMUUlHdk6oKH/jpmVVbxXGNU2suiu4dSPi98cYUUJJ9uqEyipasQQNhSoM1+IiipZ9l1BZxpj6wxLNIUJEyDjpfAgkRQ6EQDKNR09KqCxfegYpx/SDQNQtuKRk0kedllBZ/hat0XA4xgg//iPaJRZXo8ZIdEzgJNnGGQmVZYypPyzRHAT5xfnMyZ7Pq9+8ycerPye3YE+Nyknp2pvm591Ectc++Jq2IqX7AFpcdBtJbTolXFbTiVeQ0mMg+AOQlIykpdPkjItJ7tozoXKS2nUiqW0Hp5wI4g+QftzJCZWVNnAIUPHpOfEJjYaMSKgsY0z9IV7ehBWR8cCDgB94SlX/GjVe3PGnA/nAFFX92h33M+BKQIFvgStUtTDe8gYPHqxZWVkHfT3i2VO4lxcWTqM4VEJIQ/jEh1/8TO53Nu2btq3VWGIJF+ajBfn4mjZHfDGqwKpTRkE+e2Y8S+HSRaAQaN2Gpuf9mOTO3RIuq2jNSufmf7AEEBCh5ZU3kNo7M/G4iorY+9FH7J87F0lJpsnJp5A+fHiNHgU3pqESkYWqOtjTZXiVaETED6wExgKbgAXAhaq6NGKa04EbcRLNMOBBVR0mIu2B2UBvVS0QkenALFWdGm+ZdZFoZi59l5U5q4jeii0bNefHQy6t1Vi8piUlaLAEX1qjAysnFKI4ew2EwyQfdTTiT/wpew0G2XLXnZRs3YoWOw8qSEoK6SOOo/WPf3xA8RnTkNRGovGy6mwosFpV16pqMTANmBg1zUTgeXXMA5qJSOllQABIE5EA0AjY4mGsNZa9e0OFJAOwu2APRcHD65f9kpR0wEkGQPx+UrodQ0r3njVKMgD7Fyyg5Pvvy5IMgBYVsf/L2ZRs23bAMRpjDh4vE017YGPE+03usCqnUdXNwH3ABmArsEdV34+1EBG5WkSyRCQrJyfnoAVfXcn+pJjDBfDXsKrKVK3g22/QohiJ3OejcOWK2g/IGFMpLxNNrIry6JP/mNOISHOcq52uQDsgXUQuibUQVX1CVQer6uDWrVsfUMA1MaBdJgFf+bNyv/g4ulW3CsPNweNv0QJiPXYtgr9Jk9oPyBhTKS8TzSagY8T7DlSs/qpsmlOAdaqao6olwOvAcR7GWmNDOx7L0a2Owu/zk+xPJuALcGRGG0495qS6Du2wljF6dMzf9/hSUkjrm/iDBcYY73h5yr0A6C4iXYHNwAXARVHTzARuEJFpOA8D7FHVrSKyARguIo2AAuBkoHbv8leTT3yc1Ws8ewr3kpO3g6ZpTWmdnngbYCYxSa2P4IgbbyLn8cecH4GGFX+L5rT52a2xf2BqjKkzniUaVQ2KyA3AeziPNz+jqktE5Fp3/OPALJwnzlbjPN58hTtuvojMAL4GgsAi4AmvYj0YmqY2oWmqVdnUpkb9+9Pp4Uco3rgRSUoiqV27Gj/aHC4qZu9nX7I/azH+5k1pNv5kUrsm1iJDKQ2F2DtvMfmr1pHcphXNRg/D3yitRmUZczjw9Hc0ta0uHm829V+4sIgNv7yTkpwdaFEx+AQJJHHEtVNoOnpkQmWF8gtY/Ys/U7JtB+HCIiQlGV9SgG5//zWpnaOfhTGm7tXG4812t9o0eLnvfUzJ9hy02G05O6xocTHbn3iejBFD8CUnV7usba/MpHjLNrTEaWtOi4oJFRez4f4nOeahOxOOrWD9Vrb8+7/kr91MevdOtDv/VFI7tEm4HIB9qzay4dWPKNiyg+aDetBx0hiSmzWuUVl7Vm0i+60vKd6Tx5Gj+tH+pIH4kmp2ONm+aDVrZ31FqCRIl7GDaDeid426jVBVNs1fwdoPFuFPDnDMGUM5om/NrkrNwWWJxjR4efMW/JBkIogIRWuzSet5TLXLyv10flmSKaNQtH4LwT37CDStfptu+5auYfnt/yRcHIRwmPy1m9j5yQJ6//M20rsn1izR9i8Ws+SPzzplqbJ3xQY2/2c2w578NSmtmiVU1oZ35vHNP6ejJSE0HGb7vKWse/0zRv7fzfiTYz/uX5n//ettlv/7M0JFxaCw+YtvaXdcH0befXlC1aCqyid3vMj6z78jWFAMIqyatYD+l53MoJ+cmlBMpQpy97P122xSMxrRtl/nA+ozKW/nPrat2EyTNk1p3a3uWwypbZZoTIPnS4/9I1QNh/GlJXZvpfKDkYIvsftH2Q+9TLgwonuGcJhwYRHZj0yjzwO3V7scDYVZfv/LhIt+SKZaEiS4N591L/yXnj+7oNplBfOL+PaBV8uVFSosZt/arWx6P4vOZ1a/zbq8zTtY9sonTvIrLb+gmC1zlrB90WraDOpe7bK2fr3mhyQDoEqwsITFUz/kmDOG0vjI2C2jVybr+Y+Z+/h/8ScFUFVSmzRi0iPX0LxzYj3Uqiof3PcmC2fMIZAcIBQMccTRbbng/66mUbP0hMqqz6xRTdPgNTttLJKSUn6gCIGWLUju1CGhspqfMhKJPqv3CWlHdyGQUf1qKg2HyV+zMea4/cvXJRRTwfc7CUUmrNJlhELsnJdY9wy7lqxD/BUPG6HCYrZ8tDChsrZ+tTzmVUuwsJhNsxOLa/3n3xKMsY7iEzbOXZZQWRuzVjPvifcIFQcp3l9ISX4R+7bl8saNTyTcQd//Zn7FotfnESoOUpRXSLCwhO+Xb+bN37yQUDn1nSUa0+A1PrY/zSeOd5vYSUNSUwm0bkn73/4s4afYjvjRGaR164wvNQX8fnxpqQSaNqHjL65KLCgRfNHJz+VvlJpQUYH0NDQUo6sHIKlJYmfVgbQUqORgG2ic2NVfIDUl5hWg+P0kpSe4jmnJsa8mfT6S0mJvx8r879XZBAujqlJVKcjdz7alsZN/Zb566TNKohJgOBhifdYa8nP3J1RWfWZVZ8YArc6fRLPxp1C4YjX+Jo1JPeboGtXJ+1KS6Xbvr9n/7QoKVmWT1KYVTYYNSPhGuYhwxFmj2T7zk3LVVL6UZNqck9iPgZObNab5gO7sXrQSDf7Q8ZwvNZlOP0qsq4fmvTsTSE8jmF+++R9/ajJdzh6VUFkdTshkwX3TKwz3+X10PXVIQmV1Hz+Yb1/+jFB0Qg0rnUb1Saiswj35MYeLTyjOi9uAfMWy9hXELssvFO0vbDDVZ3ZFY4wr0LQJjYcOIq3nMQd041dEaNyvJ63PHU+zUYNr/DRWxx+fTfORA5HkAP70NCQpQMsxQ2h/0ekJl9X39z+mSc/O+FKS8Ken4ksO0OGc0bQ5JbEDuvh8DL/vOlJaZBBolEKgUSq+pABHX3wKrY/tkVBZSempnPC3K51y0lMJNErFn5LEkNt/REaHVgmV1axLG4679Rz8yQGSGqWQlJ5CIC2ZsX+7guTGiV0dHX1SPwKpFR9qCAdDHJmZ2FNsR4/qjS9GVWNq41SatU3svlF9Zr+jMeYQV7wzl6KtO0htfwRJzQ/sR8H7N2yjKGc3jbt1qPGjzeAcdHcuXkXJvgJa9O9GaouaxxUsKub7Bc7VVpvBx5CcYBVcpMI9+9k8fwW+pAAdhvdIuNoMnHtE0654iNyNOwgWFiMi+FMCnPCzifQ7N7GWsPbl7OGpC++naF8BweIg4hMCyQEm/f1yuh+f2JWWV+p1fzR1wRKNMeZgCBYWs2zWQlZ/+i2Nmjem/+SRHFnD3+Tk5+5n4fTZZC9YTbMOLRl28WiOOPrQecTZEk2CLNEYY0xi6nvHZ8YYY4wlGmOMMd6yRGOMMcZTlmiMMcZ4yhKNMcYYT1miMcYY4ylLNMYYYzxlicYYY4ynLNEYY4zxlCUaY4wxnrJuAoxpAEpKSti0aROFhYk1c28OH6mpqXTo0IGkpMS62z4YLNEY0wBs2rSJjIwMunTpknBnbqb+U1V27tzJpk2b6Nq1a60v36rOjGkACgsLadmypSWZBkpEaNmyZZ1d0Vb7ikZEmgPtgAIgW1Vj9w1rjDkkWZJp2Ory84+baESkKXA9cCGQDOQAqUAbEZkHPKqqn3gepTHGmHqrqqqzGcBG4HhV7aGqo1R1sKp2BP4KTBSRn3gepTHmoMrNzeXRRx+t6zDKfPHFF/Tp04cBAwawefNmzjvvvLoOqYKpU6eyZcuWAy6nceOa92xaX8VNNKo6VlVfUNXcGOMWquotqvq0Z9EZYzxRF4kmFApVOu6ll17iF7/4BYsXL6Z9+/bMmDGjFiOrnoOVaBqiaj0MII5LROQP7vtOIjLU29CMMV751a9+xZo1axgwYAC33XYbl156KW+99VbZ+IsvvpiZM2cydepUJk6cyPjx4+nRowd33XVX2TQvvvgiQ4cOZcCAAVxzzTUxE0mXLl24++67GTVqFK+++irvv/8+I0aMYNCgQUyePJm8vDyeeuoppk+fzt13383FF19MdnY2ffv2BZyD+6RJkxg/fjzdu3fn9ttvLys7Vlmly/zNb37DiBEjGDx4MF9//TWnnnoq3bp14/HHHy+b/95772XIkCH069ePO+64A4Ds7Gx69erFVVddRZ8+fRg3bhwFBQXMmDGDrKwsLr74YgYMGEBBQUG59XzooYfo3bs3/fr144ILLgAgLy+PK664gszMTPr168drr71WNv1vf/tb+vfvz/Dhw9m2bRsAOTk5nHvuuQwZMoQhQ4bw5ZdfAnDnnXdy+eWXM27cOLp06cLrr7/O7bffTmZmJuPHj6ekpASAhQsXMnr0aI499lhOPfVUtm7dmuhu4R1VrfIPeAx4BFjmvm8OLKjOvLX5d+yxx6oxpqKlS5eWe79u3Trt06dP2ftPP/1UJ06cqKqqubm52qVLFy0pKdFnn31WjzzySN2xY4fm5+drnz59dMGCBbp06VI988wztbi4WFVVr7vuOn3uuecqLLdz5876t7/9TVVVc3Jy9Pjjj9e8vDxVVf3rX/+qd911l6qqXn755frqq69WiO3ZZ5/Vrl27am5urhYUFGinTp10w4YNccvq3LmzPvroo6qqesstt2hmZqbu3btXt2/frq1bt1ZV1ffee0+vuuoqDYfDGgqF9IwzztDPPvtM161bp36/XxctWqSqqpMnT9YXXnhBVVVHjx6tCxYsiLl927Ztq4WFhaqqunv3blVVvf322/Xmm28um2bXrl2qqgrozJkzVVX1tttu03vuuUdVVS+88EL94osvVFV1/fr12rNnT1VVveOOO3TkyJFaXFysixcv1rS0NJ01a5aqqp599tn6xhtvaHFxsY4YMUK3b9+uqqrTpk3TK664okKc0fuBG0+Wenxsru5TZ8NUdZCILHKT024RST74ac8YUxdGjx7N9ddfz/bt23n99dc599xzCQScw8PYsWNp2bIlAJMmTWL27NkEAgEWLlzIkCFDACgoKOCII46IWfb5558PwLx581i6dCkjR44EoLi4mBEjRlQZ28knn0zTpk0B6N27N+vXryc3NzduWRMmTAAgMzOTvLw8MjIyyMjIIDU1ldzcXN5//33ef/99Bg4cCDhXH6tWraJTp0507dqVAQMGAHDssceSnZ1dZYz9+vXj4osv5uyzz+bss88G4MMPP2TatGll0zRv3hyA5ORkzjzzzLLyP/jgg7Lply5dWjb93r172bdvHwCnnXYaSUlJZGZmEgqFGD9+fNn6ZWdns2LFCr777jvGjh0LONWUbdu2rTLu2lLdRFMiIn5AAUSkNVDl480iMh54EPADT6nqX6PGizv+dCAfmKKqX7vjmgFPAX3d5f5YVedWM15jTIIuvfRSXnrpJaZNm8YzzzxTNjz6sVgRQVW5/PLL+ctf/lJluenp6YBTezJ27FheeeWVhOJKSUkpe+33+wkGg1WWVTqPz+crN7/P5yub/9e//jXXXHNNufmys7MrLC+6miyWd955h88//5yZM2dyzz33sGTJElQ15iPFSUlJZcNL1wcgHA4zd+5c0tLS4q5P5PyR69OnTx/mzj00D5HV/cHmQ8AbwBEi8idgNvDneDO4iekR4DSgN3ChiPSOmuw0oLv7dzVOFV2pB4H/qmpPoD+wrJqxGmOqkJGRUXa2XGrKlCk88MADAPTp06ds+AcffMCuXbsoKCjgzTffZOTIkZx88snMmDGD7du3A7Br1y7Wr18fd5nDhw/nyy+/ZPXq1QDk5+ezcuXKGsV/oGWdeuqpPPPMM2X3dTZv3ly2LpWJtc3ASRAbN25kzJgx/P3vfyc3N5e8vDzGjRvHww8/XDbd7t2745YfPf3ixYurvT49evQgJyenLNGUlJSwZMmSas/vtWolGlV9Cbgd+AuwFThbVV+tYrahwGpVXauqxcA0YGLUNBOB592qwnlAMxFpKyJNgBOAp93lF2uMJ9+MMTXTsmVLRo4cSd++fbntttsAaNOmDb169eKKK64oN+2oUaO49NJLGTBgAOeeey6DBw+md+/e/PGPf2TcuHH069ePsWPHVnnzuXXr1kydOpULL7yQfv36MXz4cJYvX16j+A+0rHHjxnHRRRcxYsQIMjMzOe+882ImkUhTpkzh2muvrfAwQCgU4pJLLiEzM5OBAwfys5/9jGbNmvG73/2O3bt307dvX/r3788nn8T/yeFDDz1EVlYW/fr1o3fv3uUeXKhKcnIyM2bM4Je//CX9+/dnwIABzJkzp9rze02ce0GVjBRprKp5cQuoZBoROQ8Yr6pXuu8vxbnXc0PENG8Df1XV2e77j4BfAkHgCWApztXMQuBmVd0fL5bBgwdrVlZWvEmMaZCWLVtGr1694k6Tn59PZmYmX3/9ddk9kalTp5KVlVXuTNvUX7H2AxFZqKqDvVxuVVc0b4nI/SJygoikRwR2lIj8RETeA8ZXMm+s9g6is1pl0wSAQcBjqjoQ2A/8KuZCRK4WkSwRycrJyalidYwxsXz44Yf07NmTG2+8sSzJGHOwxH0YQFVPFpHTgWuAkSLSAigBVgDvAJer6veVzL4J6BjxvgMQ/WunyqZRYJOqzneHz6CSRKOqT+Bc/TB48ODKL8+MMZU65ZRT2LBhQ4XhU6ZMYcqUKbUfkDmsVPnUmarOAmbVoOwFQHcR6QpsBi4ALoqaZiZwg4hMA4YBe1R1K4CIbBSRHqq6AjgZpxrNGGNMPeNZfzSqGhSRG4D3cB5vfkZVl4jIte74x3ES2OnAapzHmyPvQt4IvOT+Xmdt1DhjjDH1hKcdn8W6GnITTOlrxWkdOta8iwFPb1AZY4zxnnV8ZowxxlNxE42InBTxumvUuEleBWWMOXRoKMih3M9hly5d2LFjR12HYeKoqursPpzHjAFei3gN8DvgdS+CMsbUvZLt69j/1VuE9uSA309Kt8GkDzod8R+8GvfSRhd9PqtcOZxV9elKJa9jvTfGHCaCe7ax9+OphPZsBxRCQYrWZLFvzvQDLru0Kf6f/vSnDBo0iJ/85CcMHjyYPn36lDXXD86Vyh133MGgQYPIzMws++X/zp07GTduHAMHDuSaa64h8kfn//jHP+jbty99+/Yta04nOzubnj17cuWVV9K3b18uvvhiPvzwQ0aOHEn37t356quvDnidTHxVJRqt5HWs98aYw0TBks8hHCw/MBSkZNNyQvl7Drj8FStWcNlll7Fo0SLuv/9+srKy+Oabb/jss8/45ptvyqZr1aoVX3/9Nddddx333XcfAHfddRejRo1i0aJFTJgwoez3PwsXLuTZZ59l/vz5zJs3jyeffJJFixYBsHr1am6++Wa++eYbli9fzssvv8zs2bO57777+POf4zbbaA6CqhLNUSIyU0T+E/G69H3XKuY1xtRToT3bIEbzVOIPEM7bdcDld+7cmeHDhwMwffp0Bg0axMCBA1myZEm5pvInTXJuBUc21//5559zySWXAHDGGWeUNb8/e/ZszjnnHNLT02ncuDGTJk3iiy++AKBr165kZmbi8/no06cPJ598MiJS1sy+8VZVla2RjWDeFzUu+r0x5jARaNmB0O7vIeohAA0F8TdpfcDll3YdsG7dOu677z4WLFhA8+bNmTJlCoWFhWXTlTaPH9mcPlTsugAgXruN0V0FRDa7H1mu8UbcKxpV/SzyD5gD7MXpafOzWonQGFPr0nqdANE3/f1JpBw1EF9q44O2nL1795Kenk7Tpk3Ztm0b7777bpXznHDCCbz00ksAvPvuu2XN759wwgm8+eab5Ofns3//ft544w2OP/74gxarqbm4VzQi8jjwf+4v+psCc4EQ0EJEfqGqifVgZIypF/wZLWg67lr2L3yH4I4NSFIKqT2OI633CQd1Of3792fgwIH06dOHo446qqzHzHjuuOMOLrzwQgYNGsTo0aPp1KkTAIMGDWLKlCkMHToUgCuvvJKBAwda1dghoKpuApaoah/39S3Aiap6togcCbzrtqx8yLBuAoyJrTrdBJjD36HaTUBxxOuxwJsAcVpsNsYYY8qp6mGAXBE5E6f15ZHATwBEJABU7NjaHDBVJXv3Znbl53JERis6NGkT88anMcbUF1UlmmuAh4AjgVsirmROxumPxhxE+4sLeDbrNXIL95U9QdOuyRFcOmgiyf6kOo7OGGNqpqqOz1YSowdNVX0Pp/l/cxDNXPYxO/NzCUU8Urp57zY+XjOP8cfY0zPGmPqpqqfOHoo3XlVvOrjhNFyhcIgVOesIR/1uIRgOsXjL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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for name, result in zip(['random', 'gradient-informed'], [random_result, gradient_informed_result]):\n",
" smarts_lists, rmse_trajs = result[:2]\n",
" n_types = list(map(len, smarts_lists))\n",
" best_rmses = list(map(min, rmse_trajs))\n",
" plt.scatter(n_types, best_rmses, label=name, c=colors[name][:len(n_types)])\n",
"\n",
"\n",
"plt.xticks([3,5,10,15,20])\n",
"plt.ylim(0,)\n",
"plt.legend(title='type refinement scheme', loc='center right')\n",
"plt.ylabel('RMSE (e)')\n",
"plt.xlabel('# types')\n",
"plt.title('complexity vs. accuracy trade-offs for typing schemes\\nfound by random search vs. gradient-informed greedy search')\n",
"\n",
"plt.savefig('complexity_accuracy_tradeoff.jpg', dpi=300, bbox_inches='tight')"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['[#1:1]',\n",
" '[#1:1]~[*;#6]',\n",
" '[#6:1]',\n",
" '[#6:1]~[*;X2]',\n",
" '[#6:1](~[*;X2])~[*;X2]',\n",
" '[#8:1]',\n",
" '[#8;x2:1]',\n",
" '[#8;x2:1]~[*;#8]']"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"smarts_lists, rmse_trajs, theta_trajs, options_considered = gradient_informed_result\n",
"t = 5\n",
"theta = theta_trajs[t][-1]\n",
"smarts_list = smarts_lists[t]\n",
"smarts_list"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<svg width=\"275\" height=\"55\"><rect x=\"0\" y=\"0\" width=\"55\" height=\"55\" style=\"fill:#76b791;stroke-width:2;stroke:rgb(255,255,255)\"/><rect x=\"55\" y=\"0\" width=\"55\" height=\"55\" style=\"fill:#509e90;stroke-width:2;stroke:rgb(255,255,255)\"/><rect x=\"110\" y=\"0\" width=\"55\" height=\"55\" style=\"fill:#33858d;stroke-width:2;stroke:rgb(255,255,255)\"/><rect x=\"165\" y=\"0\" width=\"55\" height=\"55\" style=\"fill:#1d6c8a;stroke-width:2;stroke:rgb(255,255,255)\"/><rect x=\"220\" y=\"0\" width=\"55\" height=\"55\" style=\"fill:#234f81;stroke-width:2;stroke:rgb(255,255,255)\"/></svg>"
],
"text/plain": [
"[(0.46364792, 0.71617961, 0.56674986),\n",
" (0.31270304, 0.62072111, 0.56379321),\n",
" (0.20094292, 0.52087429, 0.55342884),\n",
" (0.11409965, 0.42169502, 0.54065622),\n",
" (0.13865499, 0.30988598, 0.50636017)]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"color_palette('crest', 5)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(0)\n",
"\n",
"element_color_palettes = {\n",
" 1: color_palette('Greys', 10)[1:],\n",
" 8: color_palette('Reds', 10)[1:],\n",
" 6: color_palette('crest', 10)[1:],\n",
"}\n",
"\n",
"for i in element_color_palettes:\n",
" np.random.shuffle(element_color_palettes[i])"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"type_colors = dict()\n",
"n_types_by_element = {1: 0, 8: 0, 6: 0}\n",
"for smarts in smarts_lists[10]:\n",
" atomic_num = int(smarts[2]) \n",
" type_colors[smarts] = element_color_palettes[atomic_num][n_types_by_element[atomic_num]]\n",
" n_types_by_element[atomic_num] += 1"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"colors = color_palette('crest', 10)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
"Substituting symbol L from STIXNonUnicode\n",
"Substituting symbol L from STIXNonUnicode\n",
"Substituting symbol L from STIXNonUnicode\n",
"Substituting symbol L from STIXNonUnicode\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x216 with 5 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot_nice_dashboard(t, T=0, max_iters=100):\n",
" \"\"\"\n",
" * RMSE traj\n",
" * current prediction vs. target scatter plot (colored by type)\n",
" * per-example gradients, colored by sub-type\n",
" \"\"\"\n",
" \n",
" theta = theta_trajs[T][t]\n",
" smarts_list = smarts_lists[T]\n",
" \n",
" types = assign_types(smarts_list)\n",
" P = assign_parameters(theta, types)\n",
" g = grad(loss)(P)\n",
" width=3\n",
" plt.figure(figsize=(width * 5, width))\n",
" \n",
" # loss traj\n",
" plt.subplot(1,5,1)\n",
" plt.title('training-set RMSE')\n",
" i = 0\n",
" for T_ in range(T):\n",
" rmse_traj = rmse_trajs[T_]\n",
" x = np.arange(len(rmse_traj)) + i\n",
" plt.plot(x, rmse_traj, c=colors[T_])\n",
" i += len(rmse_traj)\n",
" \n",
" rmse_traj = rmse_trajs[T][:t]\n",
" x = np.arange(len(rmse_traj)) + i\n",
" plt.plot(x, rmse_traj, c=colors[T])\n",
" plt.xlabel('iteration')\n",
" plt.ylabel('RMSE (e)')\n",
" plt.xlim(0,max_iters)\n",
" plt.ylim(0, 0.2)\n",
" \n",
" plt.subplot(1,5,2)\n",
" q_hats = predict_charges(P)\n",
" y = np.hstack(q_hats)\n",
" x = np.hstack(train_charges)\n",
" diag = [min(x), max(x)]\n",
" plt.plot(x, x, color='grey')\n",
" for type_ind in range(len(smarts_list)):\n",
" x_ = np.hstack([train_charges[i][types[i] == type_ind] for i in range(len(train_charges))])\n",
" y_ = np.hstack([q_hats[i][types[i] == type_ind] for i in range(len(q_hats))])\n",
" smarts = smarts_list[type_ind]\n",
" atomic_num = int(smarts[2]) # TODO: something less string-y and brittle\n",
" plt.scatter(x_, y_, s=1, c=type_colors[smarts])\n",
" plt.xlim(-0.7,0.7)\n",
" plt.ylim(-0.7, 0.7)\n",
" plt.xlabel('reference charge (e)\\n(AM1-BCC)')\n",
" plt.ylabel('predicted charge (e)')\n",
" plt.title('training-set predictions')\n",
" \n",
" # \n",
" axs = dict(zip([1,6,8], [plt.subplot(1,5,i+3) for i in range(3)]))\n",
" \n",
" axs[1].set_title('hydrogen\\nper-example gradients')\n",
" axs[6].set_title('carbon\\nper-example gradients')\n",
" axs[8].set_title('oxygen\\nper-example gradients')\n",
" \n",
" for type_ind in range(len(smarts_list)):\n",
" gs = np.vstack([g[i][types[i] == type_ind] for i in range(len(g))])\n",
" smarts = smarts_list[type_ind]\n",
" atomic_num = int(smarts[2]) # TODO: something less string-y and brittle\n",
" ax = axs[atomic_num]\n",
" ax.scatter(*gs.T, s=1, label=smarts, c=type_colors[smarts])\n",
" ax.set_xticks([0])\n",
" ax.set_yticks([0])\n",
" for atomic_num in axs:\n",
" ax = axs[atomic_num]\n",
" ax.legend(loc='upper right')\n",
" ax.set_xlabel('$\\partial \\mathcal{L} / \\partial e_i$')\n",
" ax.set_ylabel('$\\partial \\mathcal{L} / \\partial s_i$')\n",
" \n",
" plt.tight_layout()\n",
"plot_nice_dashboard(10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"max_iters = sum(map(len, theta_trajs[:10]))\n",
"for T in range(10):\n",
" t_ = len(theta_trajs[T]) - 1\n",
" for t in [0, t_]:\n",
" plot_nice_dashboard(t, T, max_iters)\n",
" plt.savefig('dashboard_snapshots/{:03}_{:03}.jpg'.format(T, t), dpi=100)\n",
" plt.close()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"colors = color_palette('crest', 10)\n",
"max_iters = sum(map(len, theta_trajs[:10]))\n",
"for T in range(10):\n",
" for t in tqdm(range(len(theta_trajs[T]))):\n",
" plot_nice_dashboard(t, T, max_iters)\n",
" plt.savefig('dashboard_animation/{:03}_{:03}.jpg'.format(T, t), dpi=100)\n",
" plt.close()"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"smarts_lists, rmse_trajs, theta_trajs, options_considered = gradient_informed_result"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"27"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"max_chars = max(map(len, smarts_lists[-1]))\n",
"max_chars"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"iteration 0\n",
"# types = 3\n",
"[#1:1] e=0.662, s=1.186\n",
"[#6:1] e=0.736, s=0.434\n",
"[#8:1] e=1.745, s=2.072\n",
"\n",
"iteration 1\n",
"# types = 4\n",
"[#1:1] e=0.659, s=0.686\n",
"[#6:1] e=0.871, s=1.724\n",
"[#6:1]~[*;X2] e=0.647, s=0.354\n",
"[#8:1] e=1.702, s=2.057\n",
"\n",
"iteration 2\n",
"# types = 5\n",
"[#1:1] e=0.479, s=0.680\n",
"[#1:1]~[*;#6] e=0.712, s=0.850\n",
"[#6:1] e=0.911, s=1.705\n",
"[#6:1]~[*;X2] e=0.714, s=0.223\n",
"[#8:1] e=1.723, s=2.003\n",
"\n",
"iteration 3\n",
"# types = 6\n",
"[#1:1] e=0.523, s=0.699\n",
"[#1:1]~[*;#6] e=0.774, s=0.732\n",
"[#6:1] e=0.961, s=1.641\n",
"[#6:1]~[*;X2] e=0.594, s=1.666\n",
"[#6:1](~[*;X2])~[*;X2] e=0.693, s=0.329\n",
"[#8:1] e=1.709, s=1.864\n",
"\n",
"iteration 4\n",
"# types = 7\n",
"[#1:1] e=0.516, s=0.742\n",
"[#1:1]~[*;#6] e=0.756, s=1.316\n",
"[#6:1] e=0.960, s=1.499\n",
"[#6:1]~[*;X2] e=0.612, s=1.637\n",
"[#6:1](~[*;X2])~[*;X2] e=0.728, s=0.258\n",
"[#8:1] e=1.878, s=1.744\n",
"[#8;x2:1] e=1.510, s=1.665\n",
"\n",
"iteration 5\n",
"# types = 8\n",
"[#1:1] e=0.531, s=0.761\n",
"[#1:1]~[*;#6] e=0.787, s=1.262\n",
"[#6:1] e=0.986, s=1.473\n",
"[#6:1]~[*;X2] e=0.639, s=1.624\n",
"[#6:1](~[*;X2])~[*;X2] e=0.839, s=0.026\n",
"[#8:1] e=1.896, s=1.727\n",
"[#8;x2:1] e=1.571, s=1.643\n",
"[#8;x2:1]~[*;#8] e=1.223, s=1.768\n",
"\n",
"iteration 6\n",
"# types = 9\n",
"[#1:1] e=0.534, s=0.766\n",
"[#1:1]~[*;#6] e=0.800, s=1.134\n",
"[#1:1]~[*;x2;#6] e=0.798, s=1.032\n",
"[#6:1] e=0.971, s=1.303\n",
"[#6:1]~[*;X2] e=0.655, s=1.502\n",
"[#6:1](~[*;X2])~[*;X2] e=0.844, s=0.016\n",
"[#8:1] e=1.870, s=1.688\n",
"[#8;x2:1] e=1.546, s=1.592\n",
"[#8;x2:1]~[*;#8] e=1.241, s=1.745\n",
"\n",
"iteration 7\n",
"# types = 10\n",
"[#1:1] e=0.535, s=0.767\n",
"[#1:1]~[*;#6] e=0.801, s=1.134\n",
"[#1:1]~[*;x2;#6] e=0.800, s=1.032\n",
"[#6:1] e=0.973, s=1.302\n",
"[#6:1]~[*;X2] e=0.658, s=1.501\n",
"[#6:1](~[*;X2])~[*;X2] e=0.847, s=0.014\n",
"[#6;r7:1](~[*;X2])~[*;X2] e=0.846, s=0.017\n",
"[#8:1] e=1.869, s=1.688\n",
"[#8;x2:1] e=1.550, s=1.590\n",
"[#8;x2:1]~[*;#8] e=1.226, s=1.748\n",
"\n",
"iteration 8\n",
"# types = 11\n",
"[#1:1] e=0.536, s=0.767\n",
"[#1:1]~[*;#6] e=0.802, s=1.125\n",
"[#1:1]~[*;x2;#6] e=0.800, s=1.024\n",
"[#6:1] e=0.972, s=1.290\n",
"[#6:1]~[*;X2] e=0.660, s=1.489\n",
"[#6:1](~[*;X2])~[*;X2] e=0.847, s=0.015\n",
"[#6:1](~[*;X2;r4])~[*;X2] e=0.847, s=0.028\n",
"[#6;r7:1](~[*;X2])~[*;X2] e=0.849, s=0.011\n",
"[#8:1] e=1.867, s=1.683\n",
"[#8;x2:1] e=1.548, s=1.584\n",
"[#8;x2:1]~[*;#8] e=1.222, s=1.746\n",
"\n",
"iteration 9\n",
"# types = 12\n",
"[#1:1] e=0.535, s=0.767\n",
"[#1:1]~[*;#6] e=0.802, s=1.124\n",
"[#1:1]~[*;x2;#6] e=0.800, s=1.023\n",
"[#6:1] e=0.971, s=1.289\n",
"[#6:1]~[*;X2] e=0.660, s=1.487\n",
"[#6:1](~[*;X2])~[*;X2] e=0.847, s=0.012\n",
"[#6:1](~[*;X2;r5])~[*;X2] e=0.847, s=0.020\n",
"[#6:1](~[*;X2;r4])~[*;X2] e=0.846, s=0.030\n",
"[#6;r7:1](~[*;X2])~[*;X2] e=0.847, s=0.016\n",
"[#8:1] e=1.867, s=1.682\n",
"[#8;x2:1] e=1.547, s=1.583\n",
"[#8;x2:1]~[*;#8] e=1.227, s=1.745\n",
"\n"
]
}
],
"source": [
"def format_smarts_list(smarts_list, theta, maxchars=20):\n",
" lines = []\n",
" e_s, s_s = unpack(theta)\n",
" lines.append(f'# types = {len(smarts_list)}')\n",
" for j, s in enumerate(smarts_list):\n",
" lines.append(f'{s.ljust(max_chars)} e={e_s[j]:.3f}, s={s_s[j]:.3f}')\n",
" return '\\n'.join(lines)\n",
"\n",
"for i in range(10):\n",
" print(f'iteration {i}')\n",
" print(format_smarts_list(smarts_lists[i], theta_trajs[i][-1]))\n",
" print()"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAADnCAYAAAA+T+sCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAARJklEQVR4nO3df3DU9Z3H8edHUOMPIozQelaOw59cwcKpIISkuwFsKvG4a2hPlCkgrYQrBJkBoa3WAU5oTgjEkRFbbRUdCozmzlFAMBUhBh3sgVChiHQKQnK1gLlBbDCQ8L4/drMNuEk2Niah79djZifZ73747meZffH97vf72i/BzBARX85r7wmISNtT8EUcUvBFHFLwRRxS8EUc6tzM4zrkL5Ka0N4TaAlt8UUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHFLwRRxS8EUcUvBFHGrz4B8/fpxp06axcOFCfve73zU67sUXX6SqqqoNZ5aaoqIisrKyGDJkCG+++WZ7T0fkc2nz4O/cuZOvfe1r7N27lxtuuKHRcR01+FOmTOGNN96gpKSEBQsWtPd0RD6XNg3+ihUrmDZtGi+88AKvvfYaDz30UNJx+fn5rF+/nrFjx1JQUADAiBEjOHXqFAA5OTmcOnWKaDTKvffey8CBAykrKwOgpKSEjIwMIpEIv//97wFYsGABt9xyC9FolNOnT/9VryEtLQ2Ajz76iOuvv/6vWpdIuzGzpm6tbuLEiVZRUWE//OEPmxw3fvx427dvX+J+YWGhvfLKK3bo0CGbMGGCmZlFIhHbvn27HT582G6//Xarra21QYMG2cmTJ23v3r02adIkMzO76aabrKamxmpraxt9vrlz51okEkncVqxY0ejY++67z6688korKytryUuXv23NZalD3do0+MOGDbMrrrjC+vbta/369bNXX3210bFnB/8Pf/iD3Xvvvfboo4/amjVrzCwW/OrqajMzy8rKsg8//NB69OiRCO/YsWPNzGz9+vV2991327Rp0+zkyZOt8loqKips6NChrbIu+ZvQ7mFuya1zW+5dPPvssyxbtgyAqVOncsUVVzQ69vzzz0/s2gP07t2biooK/vjHPzJ58uTE8vfee4+ePXtyySWX0L17dwYMGMCGDRsIIfDpp58CEIlEyMnJYdy4cezYsYOBAwd+5vnmzZvHxo0bE/cnTZrE3Xff/Zlx1dXVXHzxxaSnp9O5c5v+9Ym0mjZ9577zzjsMGDCAtWvXNhl6gNzcXAoKCohEIvzkJz8BIDs7m927d3PBBRckxi1dupSdO3eyaNEiOnXqRH5+PpFIhE6dOjFmzBjy8/MZN24clZWVdOnShRtvvDHp8z300EONHnNo6P777+fdd9+lpqaGefPmteDVi3QcwcyaerzJB9taUVERffr0ITc3F4BoNMqvf/1rbXmlIwjtPYGWOGcKPEVFRZSVlZGTk9PeUxE5551TW3yRDkxb/KZs2rSJXr16sXr16sSyXbt2UVRUREFBAZ988glbt26lX79+ZGZmNrmuJ554gp49e/Lggw8mlpWXl9OnTx+eeuqpL+w1SMf04IMPkpmZyQMPPNDomNOnTzNlyhSi0SizZ88G4MSJE9x1111Eo1GWLFkCwIwZM8jIyGDYsGEcOHCg1ecaQrg4hPCbEMKJEEKjn1VDCLeGEHaFEMobLMsOIWwNIbwVQsiML7s6hLAxhPB6CGFYsxNo5rB/q3v99dftgQceOGPZc889Z6WlpTZ+/HgzMzt27JidOHGi2dNlR44csY0bN35mfU8//bQ9+eSTrTpv6dgqKiosLy/PzMzy8vLs0KFDScetWbPG5s6de8aypUuX2vLly89YduDAATMz27x5s02fPj2VKbTsPDp0Ai4HNgGdmxiXDqQB5Q2WvQxcC3wZeDm+7FfANak+f7t/xi8uLubhhx/mscceY8uWLRQXF5Oenp5oyDU0b968M46kd+/enRDOqT0s+RyStTHPtn37djIyMgDIzMxk27ZtSceVlZVx+PBhvv71r7N8+fLEst/+9rdEIhHWr18PQK9evQA477zzkr4XmxJC+HEI4X9CCJtCCEkzZmZ1ZvZRc+sys4/N7NOzFu8m9g9HOlDfa/87YF4IYUMI4R+aW2+7Hw6fPn06O3bsYPLkyYmfjWnqMfnbVFdXxyOPPEJ5eTn79+9n4cKF5Obmsnjx4sSYQYMG0b9/fy699FJmzJhBnz59OHbsWNL1VVVV0aNHDzZu3EhWVhZ33XUXVVVVDB8+nDlz5pCTk8M3v/nNxPglS5awaNGilk57NDAEqDOz0yGESUDDUshLZrY4+R9NyYvAGuB84FvxZUOAAUBX4EdAflMraNfgHzlyhLy8PPbv3095eTndunVj6NChjZ5r/9KXvtTGM5T2dvToUfbv389tt90GwFVXXcWoUaMYNWrUGeNefvllPvzwQ4qKiiguLm70vZKens7gwYPp3LkzvXv35vDhw4lll156KZ06dUqMLSoqYsSIEfTu3bul0/4x8DRwNIQw08x+Dvy8pStpQiGQEf99OTASOGRm74UQLgAebm4F7Rr8Hj16UFhYyJ49e3j77bdZtmzZGX/xZzt69CgQ28UXH5K1MV966aXPbPGnTZuW2HUvLy9n9OjRAJw6dYqDBw9yzTXXANC/f3/27NnDqFGjqKyspHv37ollX/3qV6mrqwNg8+bN7N69m1/+8pdnzGfp0qVArHnahM1mtiGE8CwwIITwT6S4xQ8hXAx0N7ODTay/E1AN1BHbwgMcCCFcGb9/qKnJQQfY1X/nnXcYPHgwW7ZsSYR+z549FBQUsGvXLkaOHMm6deuAv/ylz5kzB4BVq1axcOFCqqqqqKur46c//Wm7vAb54jTWxjx7iw9w3XXXkZmZSVZWFj179gSgsrKS4cOHJ47Mf/vb32bMmDEMHTqU0aNHk5aWxuTJkxkzZgzFxcVMnz4dgFmzZgGxklgkEmHu3LkA7N27N3EsoQnPhhC+AhwH3jWz35Bkix9CWAf0BzaEEKaa2R5gEDAHiMbH/CPwGNAvhLDOzEYCi4D6fnn955C5wH8Dp4BJzU2wzY/qv/XWW9a/f39btWrVF7F6e+ONN+zmm2/+wtYvvo0aNcpqamqSPdTuX7xpyU0FHpHWcU6dXmr303ki0vY6ZHMvWZMqGTX3pKFUmnvLli0jGo0SjUbp2rUrVVVVSa+jePToUe644w6ys7NZuXJlq881xDwVQngzhDAlhfGvhRC+H/99UQihLH67vsGYLiGE/wshXNvsBJr5LNDqUmnuJWtSJaPmntRLtblXr7q62r7xjW+YmdmJEyfMzKyystJyc3PNzGzmzJm2efPmlkyhpc29IcASYh8RNgFpTYwdBJQB34/fT4v/zACWNhg3E9gCXNvc87f7rn6y5l6yJhWouedVazb36r3yyiuMGDECSH4dxR07dvDCCy+QnZ3N9u3bWzTfVJp7wC3EargG7AQav/IsfA9YUX/H/tLkuxx4P/6cacRqvPtSmWO7n85L1txbu3Zt0iaVmnv+tHZzr15JSUnitDDE3ofPP/88q1atAuCDDz5g5syZzJo1i/z8fNauXduSaTfb3AMuInbu/T+Jnfa7LNmKQgh9gQqghgZ5DSE8D9wM3BFfNBFYCdyTygQ7ZHOvsSaVmnv+tHZzD+DkyZMcOHCA6667LrGsuLiY+++/nzvvvJPy8nK6dOnCkCFDSE9P5/jx4y2ddrPNvRBCAXCBmc0OIRQDjf1LNT2+vtyGC83sOyGEm4D/CCHcCQwzs8dDCB0/+I0195I1qUDNPY9au7kHUFpaSnZ2duJ+suso1r8Hb7jhBi666KLE2NZq7gFbgTyghFiJp36X/ezm3t8DzwFfiT0cSoEjZlbNX76g82WgVwhhPXAjsY8A/9zUBNt9Vz9Zcy9ZkwrU3POotZt7ENvN/8EPfpC4n+w6irNnz+aee+7BzCgsLEyMba3mXogdnPpeCOFNYKWZnYg/dEZzz8xy4uMnEPv67gchhP8KIVxO7Es6U82sEhgYH/cMKXT11dwTaQE190SkoXPq9FK7n84Tkban4Is41CEru7t27SIjI4PBgwdTUlLS6LpU2ZWGcnJySE9Pb7TkA8kru/WGDx+eeN9MmDCBW2+9lWg0SmlpaavPNYQQjV9s8834gbvGxl0eQiiNX1hzcHzZz+LloLIQwo74spUhhPIQwroQQtdmJ9DMQYBWl0pld+rUqVZaWmo1NTVNXnBTlV1p6E9/+tNn/s/FxjSs7JqZbd261bKyshLvm1TX00BLK7tXEjsqfx7wdhPjfgT8C9AdWHvWYxFgfvz3XvGf44D7mnv+dt/VT1bZ7du3L3V1dVRXV5Oenp4Yq8quT6lUdqFlBa+GlV2AX/ziF4wdOzZxP4TAuHHjyMvLS/RHUpXixTb/18xOmdlpYq28xtRXe48Cl5z12Ghi19/DzD6ILzsNnH1xzs9o9/P4ySq777//Pnl5eXzyySc8/vjjibGq7PqTamX3kUceadF6G1Z2d+/ezVVXXcWFF15IbW0tAIsXL6Zbt26sXr2awsLCll5wM+WLbYYQ/g1Y18S60omVc75FgzMH8R7AQOC+BssuILbF/05zE+yQld358+ezcuVKrr32WnJychg5ciSgyq5HqVZ2W+Lsym5xcTELFiw4o4/frVs3IPaft9Y3AlsgpYtthhCuIRbUf21iXR8DH5jZ9hDC2AbLbwW2mZ1xPn4h8KiZNf1FBTpoZffkyZN06dKFtLQ0/vznPyfGq7LrT6qV3ca2+KlUdg8ePMh3v/tdKisrMTNuu+02unbtymWXXca2bdu4+uqrE2NbsbK7DHgcuMfMausfSFLZ3Q5kxBt+JxqsI7GbH/9zY4FjZpbSt4nafVc/WWV31qxZjBkzBoDx48cnxqqy609LKrsTJ07k1VdfZd++fcyfP59oNJpSZXfDhg0APPPMM9TW1tKrVy9GjhzJxx9/zIUXXnjGFr8VK7v/DvQBfhU/TnW7xWq7Z1R2gZ8Bq4jtRcxosIphxA781SsC3g8hbAJWm9myJmfYzNG/VqfKrpzLVNkVkYbOqdNL7X46T0TanoIv4pCCL+KQgi/ikIIv4pCCL+KQgi/ikIIv4pCCL+KQgi/ikIIv4pCCL+KQgi/ikIIv4pCCL+KQgi/ikIIv4pCCL+KQgi/iUHNX2T2nriMmIqnRFl/EIQVfxCEFX8QhBV/EIQVfxCEFX8Sh/wc83VpkUfTsXQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 576x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def plot_text(ax, s):\n",
" for d in ['left', 'right', 'top', 'bottom']:\n",
" ax.spines[d].set_visible(False)\n",
" ax.set_xticks([])\n",
" ax.set_yticks([])\n",
" ax.text(0.1,0.1,s, fontfamily='monospace', fontsize=8)\n",
"\n",
"plt.figure(figsize=(8,4))\n",
"ax = plt.subplot(1,2,1)\n",
"s = format_smarts_list(smarts_lists[0], theta_trajs[0][-1])\n",
"plot_text(ax, s)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:espaloma]",
"language": "python",
"name": "conda-env-espaloma-py"
},
"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.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment