diff --git a/downloads-generation/data_combined_iedb_kim2014/README.md b/downloads-generation/data_combined_iedb_kim2014/README.md deleted file mode 100644 index 55672b6efc36712244bc63e44b7a6c42c5435da7..0000000000000000000000000000000000000000 --- a/downloads-generation/data_combined_iedb_kim2014/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# The combined training set - -This download contains the data used to train the production class1 MHCflurry models. This data is derived from a recent [IEDB](http://www.iedb.org/home_v3.php) export as well as the data from [Kim 2014](http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-15-241). - -The latest IEDB data is downloaded as part of generating this dataset. The Kim 2014 data is in its own MHCflurry download [here](../data_kim2014). - -Since affinity is measured using a variety of assays, some of which are incompatible, the `create-combined-class1-dataset.py` script filters the available Class I binding assays in IEDB by only retaining those with high correlation to overlapping measurements in BD2013. - -To generate this download run: - -``` -./GENERATE.sh -``` \ No newline at end of file diff --git a/downloads-generation/data_combined_iedb_kim2014/create-combined-class1-dataset.py b/downloads-generation/data_combined_iedb_kim2014/create-combined-class1-dataset.py deleted file mode 100755 index 07b7f1d9e5d2f036bc646178281e04a4faf8e086..0000000000000000000000000000000000000000 --- a/downloads-generation/data_combined_iedb_kim2014/create-combined-class1-dataset.py +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Combine 2013 Kim/Peters NetMHCpan dataset[*] with more recent IEDB entries - -* = "AffinityMeasurementDataset size and composition impact the reliability..." -""" - -from __future__ import ( - print_function, - division, - absolute_import, - unicode_literals -) -import pickle -from collections import Counter -import argparse - -import pandas as pd - -parser = argparse.ArgumentParser(usage=__doc__) - -parser.add_argument( - "--ic50-fraction-tolerance", - default=0.01, - type=float, - help=( - "How much can the IEDB and NetMHCpan IC50 differ and still be" - " considered compatible (as a fraction of the NetMHCpan value). " - "Default: %(default)s")) - -parser.add_argument( - "--min-assay-overlap-size", - type=int, - default=1, - help="Minimum number of entries overlapping between IEDB assay and " - "NetMHCpan data. Default: %(default)s") - - -parser.add_argument( - "--min-assay-fraction-same", - type=float, - help="Minimum fraction of peptides whose IC50 values agree with the " - "NetMHCpan data. Default: %(default)s", - default=0.9) - -parser.add_argument( - "--iedb-pickle-path", - required=True, - help="Path to .pickle file containing dictionary of IEDB assay datasets.") - -parser.add_argument( - "--netmhcpan-csv-path", - required=True, - help="Path to CSV with NetMHCpan dataset from 2013 Peters paper.") - -parser.add_argument( - "--output-csv-filename", - required=True, - help="Name of combined CSV file.") - -parser.add_argument( - "--extra-dataset-csv-path", - default=[], - action="append", - help="Additional CSV data source with columns (species, mhc, peptide, meas)") - -if __name__ == "__main__": - args = parser.parse_args() - - print("Reading %s..." % args.iedb_pickle_path) - with open(args.iedb_pickle_path, "rb") as f: - iedb_datasets = pickle.load(f) - - print("Reading %s..." % args.netmhcpan_csv_path) - nielsen_data = pd.read_csv(args.netmhcpan_csv_path, sep="\t") - print("Size of 2013 NetMHCpan dataset: %d" % len(nielsen_data)) - - new_allele_counts = Counter() - combined_columns = { - "species": list(nielsen_data["species"]), - "mhc": list(nielsen_data["mhc"]), - "peptide": list(nielsen_data["sequence"]), - "peptide_length": list(nielsen_data["peptide_length"]), - "meas": list(nielsen_data["meas"]), - } - - all_datasets = { - path: pd.read_csv(path) for path in args.extra_dataset_csv_path - } - all_datasets.update(iedb_datasets) - for assay, assay_dataset in sorted(all_datasets.items(), key=lambda x: len(x[1])): - joined = nielsen_data.merge( - assay_dataset, - left_on=["mhc", "sequence"], - right_on=["mhc", "peptide"], - how="outer") - - if len(joined) == 0: - continue - - # drop NaN binding values and entries without values in both datasets - left_missing = joined["meas"].isnull() - right_missing = joined["value"].isnull() - overlap_filter_mask = ~(left_missing | right_missing) - filtered = joined[overlap_filter_mask] - n_overlap = len(filtered) - - if n_overlap < args.min_assay_overlap_size: - continue - # let's count what fraction of this IEDB assay is within 1% of the values in the - # Nielsen dataset - tolerance = filtered["meas"] * args.ic50_fraction_tolerance - abs_diff = (filtered["value"] - filtered["meas"]).abs() - similar_values = abs_diff <= tolerance - fraction_similar = similar_values.mean() - print("Assay=%s, count=%d" % (assay, len(assay_dataset))) - print(" # entries w/ values in both data sets: %d" % n_overlap) - print(" fraction similar binding values=%0.4f" % fraction_similar) - new_peptides = joined[left_missing & ~right_missing] - if fraction_similar > args.min_assay_fraction_same: - print("---") - print("\t using assay: %s" % (assay,)) - print("---") - combined_columns["mhc"].extend(new_peptides["mhc"]) - combined_columns["peptide"].extend(new_peptides["peptide"]) - combined_columns["peptide_length"].extend(new_peptides["peptide"].str.len()) - combined_columns["meas"].extend(new_peptides["value"]) - # TODO: make this work for non-human data - combined_columns["species"].extend(["human"] * len(new_peptides)) - for allele in new_peptides["mhc"]: - new_allele_counts[allele] += 1 - - combined_df = pd.DataFrame( - combined_columns, - columns=["species", "mhc", "peptide", "peptide_length", "meas"]) - - # filter out post-translation modifications and peptides with unknown - # residues - modified_peptide_mask = combined_df.peptide.str.contains("\+") - n_modified = modified_peptide_mask.sum() - if n_modified > 0: - print("Dropping %d modified peptides" % n_modified) - combined_df = combined_df[~modified_peptide_mask] - - print("New entry allele distribution") - for (allele, count) in new_allele_counts.most_common(): - print("%s: %d" % (allele, count)) - print("Combined DataFrame size: %d (+%d)" % ( - len(combined_df), - len(combined_df) - len(nielsen_data))) - print("Writing %s..." % args.output_csv_filename) - combined_df.to_csv(args.output_csv_filename, index=False) diff --git a/downloads-generation/data_combined_iedb_kim2014/create-iedb-class1-dataset.py b/downloads-generation/data_combined_iedb_kim2014/create-iedb-class1-dataset.py deleted file mode 100755 index 3c770a40d3a42fbe87cfe59f1cae794a8aa41aa0..0000000000000000000000000000000000000000 --- a/downloads-generation/data_combined_iedb_kim2014/create-iedb-class1-dataset.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Turn a raw CSV snapshot of the IEDB contents into a usable -class I binding prediction dataset by grouping all unique pMHCs -""" -from collections import defaultdict -import pickle -import argparse - -import numpy as np -import pandas as pd - -parser = argparse.ArgumentParser(usage=__doc__) - -parser.add_argument( - "--input-csv", - required=True, - help="CSV file with IEDB's MHC binding data.") - -parser.add_argument( - "--output-pickle-filename", - required=True, - help="Path to .pickle file containing dictionary of IEDB assay datasets.") - -parser.add_argument( - "--alleles", - metavar="ALLELE", - nargs="+", - default=[], - help="Restrict dataset to specified alleles") - - -def filter_class1_alleles(df): - mhc_class = df["MHC"]["MHC allele class"] - print("MHC class counts: \n%s" % (mhc_class.value_counts(),)) - class1_mask = mhc_class == "I" - return df[class1_mask] - - -def filter_allele_names(df): - alleles = df["MHC"]["Allele Name"] - invalid_allele_mask = alleles.str.contains(" ") | alleles.str.contains("/") - invalid_alleles = alleles[invalid_allele_mask] - print("-- Invalid allele names: %s" % (list(sorted(set(invalid_alleles))))) - print("Dropping %d with complex alleles (e.g. descriptions of mutations)" % - len(invalid_alleles)) - return df[~invalid_allele_mask] - - -def filter_affinity_values(df): - affinities = df["Assay"]["Quantitative measurement"] - finite_affinity_mask = ~affinities.isnull() & np.isfinite(affinities) - invalid_affinity_mask = ~finite_affinity_mask - - print("Dropping %d rows without finite affinity measurements" % ( - invalid_affinity_mask.sum(),)) - return df[finite_affinity_mask] - - -def filter_mhc_dataframe(df): - filter_functions = [ - filter_class1_alleles, - filter_allele_names, - filter_affinity_values, - ] - - for fn in filter_functions: - df = fn(df) - - return df - - -def groupby_assay(df): - assay_group = df["Assay"]["Assay Group"] - assay_method = df["Assay"]["Method/Technique"] - groups = df.groupby([assay_group, assay_method]) - - # speed up repeated calls to np.log by caching log affinities as a column - # in the dataframe - df["_log_affinity"] = np.log(df["Assay"]["Quantitative measurement"]) - - # speed up computing percent positive with the helper column - qualitative = df["Assay"]["Qualitative Measure"] - df["_qualitative_positive"] = qualitative.str.startswith("Positive") - print("---") - print("Assays") - assay_dataframes = {} - # create a dataframe for every distinct kind of assay which is used - # by IEDB submitters to measure peptide-MHC affinity or stability - for (assay_group, assay_method), group_data in sorted( - groups, - key=lambda x: len(x[1]), - reverse=True): - print("- %s (%s): %d" % (assay_group, assay_method, len(group_data))) - group_alleles = group_data["MHC"]["Allele Name"] - group_peptides = group_data["Epitope"]["Description"] - distinct_pmhc = group_data.groupby([group_alleles, group_peptides]) - columns = defaultdict(list) - for (allele, peptide), pmhc_group in distinct_pmhc: - columns["mhc"].append(allele) - columns["peptide"].append(peptide) - positive = pmhc_group["_qualitative_positive"] - count = len(pmhc_group) - if count == 1: - ic50 = pmhc_group["Assay"]["Quantitative measurement"].mean() - else: - ic50 = np.exp(np.mean(pmhc_group["_log_affinity"])) - # averaging the log affinities preserves orders of magnitude better - columns["value"].append(ic50) - columns["percent_positive"].append(positive.mean()) - columns["count"].append(count) - assay_dataframes[(assay_group, assay_method)] = pd.DataFrame( - columns, - columns=[ - "mhc", - "peptide", - "value", - "percent_positive", - "count"]) - print("# distinct pMHC entries: %d" % len(columns["mhc"])) - return assay_dataframes - -if __name__ == "__main__": - args = parser.parse_args() - df = pd.read_csv( - args.input_csv, - error_bad_lines=False, - encoding="latin-1", - header=[0, 1]) - - df = filter_mhc_dataframe(df) - - alleles = df["MHC"]["Allele Name"] - - n = len(alleles) - - print("# Class I rows: %d" % n) - print("# Class I alleles: %d" % len(set(alleles))) - print("Unique alleles: %s" % list(sorted(set(alleles)))) - - if args.alleles: - print("User-supplied allele whitelist: %s" % (args.alleles,)) - mask = np.zeros(n, dtype=bool) - for pattern in args.alleles: - pattern_mask = alleles.str.startswith(pattern) - print("# %s: %d" % (pattern, pattern_mask.sum())) - mask |= pattern_mask - df = df[mask] - print("# entries matching alleles %s: %d" % ( - args.alleles, - len(df))) - - assay_dataframes = groupby_assay(df) - - with open(args.output_pickle_filename, "wb") as f: - pickle.dump(assay_dataframes, f, pickle.HIGHEST_PROTOCOL) diff --git a/downloads-generation/data_combined_iedb_kim2014/GENERATE.sh b/downloads-generation/data_iedb/GENERATE.sh similarity index 50% rename from downloads-generation/data_combined_iedb_kim2014/GENERATE.sh rename to downloads-generation/data_iedb/GENERATE.sh index 562a320dc802092496acf840370ac93ea8b7e832..5e16b6ce78a877f10a61eb67e54103f232a85c5e 100755 --- a/downloads-generation/data_combined_iedb_kim2014/GENERATE.sh +++ b/downloads-generation/data_iedb/GENERATE.sh @@ -3,10 +3,9 @@ set -e set -x -DOWNLOAD_NAME=data_combined_iedb_kim2014 +DOWNLOAD_NAME=data_iedb SCRATCH_DIR=/tmp/mhcflurry-downloads-generation SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") mkdir -p "$SCRATCH_DIR" rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" @@ -18,28 +17,13 @@ exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) # Log some environment info date -pip freeze -git rev-parse HEAD -git status -cd "$SCRATCH_DIR/$DOWNLOAD_NAME" - -mkdir .tmp # By starting with a dot, we won't include it in the tar archive -cd .tmp +cd $SCRATCH_DIR/$DOWNLOAD_NAME wget --quiet http://www.iedb.org/doc/mhc_ligand_full.zip unzip mhc_ligand_full.zip +rm mhc_ligand_full.zip -$SCRIPT_DIR/create-iedb-class1-dataset.py \ - --input-csv mhc_ligand_full.csv \ - --output-pickle-filename iedb_human_class1_assay_datasets.pickle - -$SCRIPT_DIR/create-combined-class1-dataset.py \ - --iedb-pickle-path iedb_human_class1_assay_datasets.pickle \ - --netmhcpan-csv-path "$(mhcflurry-downloads path data_kim2014)/bdata.20130222.mhci.public.1.txt" \ - --output-csv-filename ../combined_human_class1_dataset.csv - -cd .. cp $SCRIPT_ABSOLUTE_PATH . tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * diff --git a/downloads-generation/models_class1_allele_specific_ensemble/GENERATE.sh b/downloads-generation/models_class1_allele_specific_ensemble/GENERATE.sh deleted file mode 100755 index 0e45c61f6372454dee16d4d309569da0cf820570..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/GENERATE.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -if [[ $# -eq 0 ]] ; then - echo 'WARNING: This script is intended to be called with additional arguments to pass to mhcflurry-class1-allele-specific-cv-and-train' - echo 'See README.md' -fi - -set -e -set -x - -DOWNLOAD_NAME=models_class1_allele_specific_ensemble -SCRATCH_DIR=/tmp/mhcflurry-downloads-generation -SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") -export PYTHONUNBUFFERED=1 - -mkdir -p "$SCRATCH_DIR" -rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" -mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" - -# Send stdout and stderr to a logfile included with the archive. -exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") -exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) - -# Log some environment info -date -pip freeze -git rev-parse HEAD -git status - -cd $SCRATCH_DIR/$DOWNLOAD_NAME - -mkdir models - -cp $SCRIPT_DIR/models.py . -python models.py > models.json - -time mhcflurry-class1-allele-specific-ensemble-train \ - --ensemble-size 16 \ - --model-architectures models.json \ - --train-data "$(mhcflurry-downloads path data_combined_iedb_kim2014)/combined_human_class1_dataset.csv" \ - --min-samples-per-allele 20 \ - --out-manifest selected_models.csv \ - --out-model-selection-manifest all_models.csv \ - --out-models models \ - --verbose \ - "$@" - -bzip2 all_models.csv -cp $SCRIPT_ABSOLUTE_PATH . -tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * - -echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" diff --git a/downloads-generation/models_class1_allele_specific_ensemble/README.md b/downloads-generation/models_class1_allele_specific_ensemble/README.md deleted file mode 100644 index 604852a62546e4c30b49cd5fa544a6dae50feed2..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Class I allele-specific models (ensemble) - -This download contains trained MHC Class I allele-specific MHCflurry models. For each allele, an ensemble of predictors is trained on random halves of the training data. Model architectures are selected based on performance on the other half of the dataset, so in general each ensemble contains predictors of different architectures. At prediction time the geometric mean IC50 is taken over the trained models. The training data used is in the [data_combined_iedb_kim2014](../data_combined_iedb_kim2014) MHCflurry download. - -The training script supports multi-node parallel execution using the [kubeface](https://github.com/hammerlab/kubeface) library. - -To use kubeface, you should make a google storage bucket and pass it below with the --storage-prefix argument. - -To generate this download we run: - -``` -./GENERATE.sh \ - --parallel-backend kubeface \ - --target-tasks 200 \ - --kubeface-backend kubernetes \ - --kubeface-storage gs://kubeface-tim \ - --kubeface-worker-image hammerlab/mhcflurry-misc:latest \ - --kubeface-kubernetes-task-resources-memory-mb 10000 \ - --kubeface-worker-path-prefix venv-py3/bin \ - --kubeface-max-simultaneous-tasks 200 \ - --kubeface-speculation-max-reruns 3 \ -``` - -To debug locally: -``` -./GENERATE.sh \ - --parallel-backend local-threads \ - --target-tasks 1 -``` diff --git a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/README.md b/downloads-generation/models_class1_allele_specific_ensemble/models-summary/README.md deleted file mode 100644 index 3cf13db5c9f6094e9092fd200e5f2e6017e4479d..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Class1 allele-specific ensemble models - -To generate the report, run: - -``` -time jupyter-nbconvert report.ipynb \ - --execute \ - --ExecutePreprocessor.kernel_name=python \ - --ExecutePreprocessor.timeout=60 \ - --to html \ - --stdout > report.html -``` diff --git a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.html b/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.html deleted file mode 100644 index a98510c0b35b773203a55da5b25e865a63d0858f..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.html +++ /dev/null @@ -1,18543 +0,0 @@ -<!DOCTYPE html> -<html> -<head><meta charset="utf-8" /> -<title>report</title> - -<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> -<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> - -<style type="text/css"> - /*! -* -* Twitter Bootstrap -* -*/ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot'); - src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 1.42857143; - color: #000; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 3px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 2px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 18px; - margin-bottom: 18px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 18px; - margin-bottom: 9px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 9px; - margin-bottom: 9px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 33px; -} -h2, -.h2 { - font-size: 27px; -} -h3, -.h3 { - font-size: 23px; -} -h4, -.h4 { - font-size: 17px; -} -h5, -.h5 { - font-size: 13px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 9px; -} -.lead { - margin-bottom: 18px; - font-size: 14px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 19.5px; - } -} -small, -.small { - font-size: 92%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 8px; - margin: 36px 0 18px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 9px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 18px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 541px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 9px 18px; - margin: 0 0 18px; - font-size: inherit; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 18px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 2px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #888; - background-color: transparent; - border-radius: 1px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - font-size: 12px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 2px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 0px; - padding-right: 0px; -} -@media (min-width: 768px) { - .container { - width: 768px; - } -} -@media (min-width: 992px) { - .container { - width: 940px; - } -} -@media (min-width: 1200px) { - .container { - width: 1140px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 0px; - padding-right: 0px; -} -.row { - margin-left: 0px; - margin-right: 0px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 0px; - padding-right: 0px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 18px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 13.5px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 18px; - font-size: 19.5px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 13px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 32px; - padding: 6px 12px; - font-size: 13px; - line-height: 1.42857143; - color: #555555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 2px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 32px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 45px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 18px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 31px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 30px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 45px; - padding: 10px 16px; - font-size: 17px; - line-height: 1.3333333; - border-radius: 3px; -} -select.input-lg { - height: 45px; - line-height: 45px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 45px; - padding: 10px 16px; - font-size: 17px; - line-height: 1.3333333; - border-radius: 3px; -} -.form-group-lg select.form-control { - height: 45px; - line-height: 45px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 45px; - min-height: 35px; - padding: 11px 16px; - font-size: 17px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 40px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 32px; - height: 32px; - line-height: 32px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 45px; - height: 45px; - line-height: 45px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 23px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #404040; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 25px; -} -.form-horizontal .form-group { - margin-left: 0px; - margin-right: 0px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 0px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 17px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 13px; - line-height: 1.42857143; - border-radius: 2px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - color: #337ab7; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 17px; - line-height: 1.3333333; - border-radius: 3px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 13px; - text-align: left; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 2px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 8px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - outline: 0; - background-color: #337ab7; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 541px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 2px; - border-top-left-radius: 2px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 2px; - border-bottom-left-radius: 2px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 45px; - padding: 10px 16px; - font-size: 17px; - line-height: 1.3333333; - border-radius: 3px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 13px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #ccc; - border-radius: 2px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 1px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 17px; - border-radius: 3px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 8px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 2px 2px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 2px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 2px 2px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 2px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 2px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 2px 2px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 30px; - margin-bottom: 18px; - border: 1px solid transparent; -} -@media (min-width: 541px) { - .navbar { - border-radius: 2px; - } -} -@media (min-width: 541px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 0px; - padding-left: 0px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 541px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 540px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: 0px; - margin-left: 0px; -} -@media (min-width: 541px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 541px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 541px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 6px 0px; - font-size: 17px; - line-height: 18px; - height: 30px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 541px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: 0px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 0px; - padding: 9px 10px; - margin-top: -2px; - margin-bottom: -2px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 2px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 541px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 3px 0px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 18px; -} -@media (max-width: 540px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 18px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 541px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 6px; - padding-bottom: 6px; - } -} -.navbar-form { - margin-left: 0px; - margin-right: 0px; - padding: 10px 0px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: -1px; - margin-bottom: -1px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 540px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 541px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 2px; - border-top-left-radius: 2px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: -1px; - margin-bottom: -1px; -} -.navbar-btn.btn-sm { - margin-top: 0px; - margin-bottom: 0px; -} -.navbar-btn.btn-xs { - margin-top: 4px; - margin-bottom: 4px; -} -.navbar-text { - margin-top: 6px; - margin-bottom: 6px; -} -@media (min-width: 541px) { - .navbar-text { - float: left; - margin-left: 0px; - margin-right: 0px; - } -} -@media (min-width: 541px) { - .navbar-left { - float: left !important; - float: left; - } - .navbar-right { - float: right !important; - float: right; - margin-right: 0px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555; -} -@media (max-width: 540px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #fff; -} -@media (max-width: 540px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 18px; - list-style: none; - background-color: #f5f5f5; - border-radius: 2px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #5e5e5e; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 18px 0; - border-radius: 2px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #337ab7; - background-color: #fff; - border: 1px solid #ddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 2px; - border-top-left-radius: 2px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 2px; - border-top-right-radius: 2px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eeeeee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - background-color: #fff; - border-color: #ddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 17px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 1px; - border-top-left-radius: 1px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 1px; - border-top-right-radius: 1px; -} -.pager { - padding-left: 0; - margin: 18px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - background-color: #fff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #fff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 20px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 3px; - padding-left: 0px; - padding-right: 0px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 59px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 18px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 2px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #000; -} -.alert { - padding: 15px; - margin-bottom: 18px; - border: 1px solid transparent; - border-radius: 2px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 18px; - margin-bottom: 18px; - background-color: #f5f5f5; - border-radius: 2px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 18px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-right-radius: 2px; - border-top-left-radius: 2px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 2px; - border-bottom-left-radius: 2px; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 18px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 2px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 1px; - border-top-left-radius: 1px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 15px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 1px; - border-bottom-left-radius: 1px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 1px; - border-top-left-radius: 1px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 1px; - border-bottom-left-radius: 1px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 1px; - border-top-left-radius: 1px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 1px; - border-top-right-radius: 1px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 1px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 1px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 1px; - border-bottom-left-radius: 1px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 1px; - border-bottom-right-radius: 1px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 1px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 1px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 18px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 2px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 2px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 3px; -} -.well-sm { - padding: 9px; - border-radius: 1px; -} -.close { - float: right; - font-size: 19.5px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 2px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 13px; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 13px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 2px 2px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #fff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #fff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #fff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -moz-transition: -moz-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - -moz-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #fff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #fff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #fff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after, -.item_buttons:before, -.item_buttons:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after, -.item_buttons:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*! -* -* Font Awesome -* -*/ -/*! - * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0'); - src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eee; - border-radius: .1em; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #fff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -/*! -* -* IPython base -* -*/ -.modal.fade .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -code { - color: #000; -} -pre { - font-size: inherit; - line-height: inherit; -} -label { - font-weight: normal; -} -/* Make the page background atleast 100% the height of the view port */ -/* Make the page itself atleast 70% the height of the view port */ -.border-box-sizing { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} -.corner-all { - border-radius: 2px; -} -.no-padding { - padding: 0px; -} -/* Flexible box model classes */ -/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */ -/* This file is a compatability layer. It allows the usage of flexible box -model layouts accross multiple browsers, including older browsers. The newest, -universal implementation of the flexible box model is used when available (see -`Modern browsers` comments below). Browsers that are known to implement this -new spec completely include: - - Firefox 28.0+ - Chrome 29.0+ - Internet Explorer 11+ - Opera 17.0+ - -Browsers not listed, including Safari, are supported via the styling under the -`Old browsers` comments below. -*/ -.hbox { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; -} -.hbox > * { - /* Old browsers */ - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - /* Modern browsers */ - flex: none; -} -.vbox { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; -} -.vbox > * { - /* Old browsers */ - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - /* Modern browsers */ - flex: none; -} -.hbox.reverse, -.vbox.reverse, -.reverse { - /* Old browsers */ - -webkit-box-direction: reverse; - -moz-box-direction: reverse; - box-direction: reverse; - /* Modern browsers */ - flex-direction: row-reverse; -} -.hbox.box-flex0, -.vbox.box-flex0, -.box-flex0 { - /* Old browsers */ - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - /* Modern browsers */ - flex: none; - width: auto; -} -.hbox.box-flex1, -.vbox.box-flex1, -.box-flex1 { - /* Old browsers */ - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - /* Modern browsers */ - flex: 1; -} -.hbox.box-flex, -.vbox.box-flex, -.box-flex { - /* Old browsers */ - /* Old browsers */ - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - /* Modern browsers */ - flex: 1; -} -.hbox.box-flex2, -.vbox.box-flex2, -.box-flex2 { - /* Old browsers */ - -webkit-box-flex: 2; - -moz-box-flex: 2; - box-flex: 2; - /* Modern browsers */ - flex: 2; -} -.box-group1 { - /* Deprecated */ - -webkit-box-flex-group: 1; - -moz-box-flex-group: 1; - box-flex-group: 1; -} -.box-group2 { - /* Deprecated */ - -webkit-box-flex-group: 2; - -moz-box-flex-group: 2; - box-flex-group: 2; -} -.hbox.start, -.vbox.start, -.start { - /* Old browsers */ - -webkit-box-pack: start; - -moz-box-pack: start; - box-pack: start; - /* Modern browsers */ - justify-content: flex-start; -} -.hbox.end, -.vbox.end, -.end { - /* Old browsers */ - -webkit-box-pack: end; - -moz-box-pack: end; - box-pack: end; - /* Modern browsers */ - justify-content: flex-end; -} -.hbox.center, -.vbox.center, -.center { - /* Old browsers */ - -webkit-box-pack: center; - -moz-box-pack: center; - box-pack: center; - /* Modern browsers */ - justify-content: center; -} -.hbox.baseline, -.vbox.baseline, -.baseline { - /* Old browsers */ - -webkit-box-pack: baseline; - -moz-box-pack: baseline; - box-pack: baseline; - /* Modern browsers */ - justify-content: baseline; -} -.hbox.stretch, -.vbox.stretch, -.stretch { - /* Old browsers */ - -webkit-box-pack: stretch; - -moz-box-pack: stretch; - box-pack: stretch; - /* Modern browsers */ - justify-content: stretch; -} -.hbox.align-start, -.vbox.align-start, -.align-start { - /* Old browsers */ - -webkit-box-align: start; - -moz-box-align: start; - box-align: start; - /* Modern browsers */ - align-items: flex-start; -} -.hbox.align-end, -.vbox.align-end, -.align-end { - /* Old browsers */ - -webkit-box-align: end; - -moz-box-align: end; - box-align: end; - /* Modern browsers */ - align-items: flex-end; -} -.hbox.align-center, -.vbox.align-center, -.align-center { - /* Old browsers */ - -webkit-box-align: center; - -moz-box-align: center; - box-align: center; - /* Modern browsers */ - align-items: center; -} -.hbox.align-baseline, -.vbox.align-baseline, -.align-baseline { - /* Old browsers */ - -webkit-box-align: baseline; - -moz-box-align: baseline; - box-align: baseline; - /* Modern browsers */ - align-items: baseline; -} -.hbox.align-stretch, -.vbox.align-stretch, -.align-stretch { - /* Old browsers */ - -webkit-box-align: stretch; - -moz-box-align: stretch; - box-align: stretch; - /* Modern browsers */ - align-items: stretch; -} -div.error { - margin: 2em; - text-align: center; -} -div.error > h1 { - font-size: 500%; - line-height: normal; -} -div.error > p { - font-size: 200%; - line-height: normal; -} -div.traceback-wrapper { - text-align: left; - max-width: 800px; - margin: auto; -} -/** - * Primary styles - * - * Author: Jupyter Development Team - */ -body { - background-color: #fff; - /* This makes sure that the body covers the entire window and needs to - be in a different element than the display: box in wrapper below */ - position: absolute; - left: 0px; - right: 0px; - top: 0px; - bottom: 0px; - overflow: visible; -} -body > #header { - /* Initially hidden to prevent FLOUC */ - display: none; - background-color: #fff; - /* Display over codemirror */ - position: relative; - z-index: 100; -} -body > #header #header-container { - padding-bottom: 5px; - padding-top: 5px; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} -body > #header .header-bar { - width: 100%; - height: 1px; - background: #e7e7e7; - margin-bottom: -1px; -} -@media print { - body > #header { - display: none !important; - } -} -#header-spacer { - width: 100%; - visibility: hidden; -} -@media print { - #header-spacer { - display: none; - } -} -#ipython_notebook { - padding-left: 0px; - padding-top: 1px; - padding-bottom: 1px; -} -@media (max-width: 991px) { - #ipython_notebook { - margin-left: 10px; - } -} -#noscript { - width: auto; - padding-top: 16px; - padding-bottom: 16px; - text-align: center; - font-size: 22px; - color: red; - font-weight: bold; -} -#ipython_notebook img { - height: 28px; -} -#site { - width: 100%; - display: none; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - overflow: auto; -} -@media print { - #site { - height: auto !important; - } -} -/* Smaller buttons */ -.ui-button .ui-button-text { - padding: 0.2em 0.8em; - font-size: 77%; -} -input.ui-button { - padding: 0.3em 0.9em; -} -span#login_widget { - float: right; -} -span#login_widget > .button, -#logout { - color: #333; - background-color: #fff; - border-color: #ccc; -} -span#login_widget > .button:focus, -#logout:focus, -span#login_widget > .button.focus, -#logout.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -span#login_widget > .button:hover, -#logout:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -span#login_widget > .button:active, -#logout:active, -span#login_widget > .button.active, -#logout.active, -.open > .dropdown-togglespan#login_widget > .button, -.open > .dropdown-toggle#logout { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -span#login_widget > .button:active:hover, -#logout:active:hover, -span#login_widget > .button.active:hover, -#logout.active:hover, -.open > .dropdown-togglespan#login_widget > .button:hover, -.open > .dropdown-toggle#logout:hover, -span#login_widget > .button:active:focus, -#logout:active:focus, -span#login_widget > .button.active:focus, -#logout.active:focus, -.open > .dropdown-togglespan#login_widget > .button:focus, -.open > .dropdown-toggle#logout:focus, -span#login_widget > .button:active.focus, -#logout:active.focus, -span#login_widget > .button.active.focus, -#logout.active.focus, -.open > .dropdown-togglespan#login_widget > .button.focus, -.open > .dropdown-toggle#logout.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -span#login_widget > .button:active, -#logout:active, -span#login_widget > .button.active, -#logout.active, -.open > .dropdown-togglespan#login_widget > .button, -.open > .dropdown-toggle#logout { - background-image: none; -} -span#login_widget > .button.disabled:hover, -#logout.disabled:hover, -span#login_widget > .button[disabled]:hover, -#logout[disabled]:hover, -fieldset[disabled] span#login_widget > .button:hover, -fieldset[disabled] #logout:hover, -span#login_widget > .button.disabled:focus, -#logout.disabled:focus, -span#login_widget > .button[disabled]:focus, -#logout[disabled]:focus, -fieldset[disabled] span#login_widget > .button:focus, -fieldset[disabled] #logout:focus, -span#login_widget > .button.disabled.focus, -#logout.disabled.focus, -span#login_widget > .button[disabled].focus, -#logout[disabled].focus, -fieldset[disabled] span#login_widget > .button.focus, -fieldset[disabled] #logout.focus { - background-color: #fff; - border-color: #ccc; -} -span#login_widget > .button .badge, -#logout .badge { - color: #fff; - background-color: #333; -} -.nav-header { - text-transform: none; -} -#header > span { - margin-top: 10px; -} -.modal_stretch .modal-dialog { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - min-height: 80vh; -} -.modal_stretch .modal-dialog .modal-body { - max-height: calc(100vh - 200px); - overflow: auto; - flex: 1; -} -@media (min-width: 768px) { - .modal .modal-dialog { - width: 700px; - } -} -@media (min-width: 768px) { - select.form-control { - margin-left: 12px; - margin-right: 12px; - } -} -/*! -* -* IPython auth -* -*/ -.center-nav { - display: inline-block; - margin-bottom: -4px; -} -/*! -* -* IPython tree view -* -*/ -/* We need an invisible input field on top of the sentense*/ -/* "Drag file onto the list ..." */ -.alternate_upload { - background-color: none; - display: inline; -} -.alternate_upload.form { - padding: 0; - margin: 0; -} -.alternate_upload input.fileinput { - text-align: center; - vertical-align: middle; - display: inline; - opacity: 0; - z-index: 2; - width: 12ex; - margin-right: -12ex; -} -.alternate_upload .btn-upload { - height: 22px; -} -/** - * Primary styles - * - * Author: Jupyter Development Team - */ -ul#tabs { - margin-bottom: 4px; -} -ul#tabs a { - padding-top: 6px; - padding-bottom: 4px; -} -ul.breadcrumb a:focus, -ul.breadcrumb a:hover { - text-decoration: none; -} -ul.breadcrumb i.icon-home { - font-size: 16px; - margin-right: 4px; -} -ul.breadcrumb span { - color: #5e5e5e; -} -.list_toolbar { - padding: 4px 0 4px 0; - vertical-align: middle; -} -.list_toolbar .tree-buttons { - padding-top: 1px; -} -.dynamic-buttons { - padding-top: 3px; - display: inline-block; -} -.list_toolbar [class*="span"] { - min-height: 24px; -} -.list_header { - font-weight: bold; - background-color: #EEE; -} -.list_placeholder { - font-weight: bold; - padding-top: 4px; - padding-bottom: 4px; - padding-left: 7px; - padding-right: 7px; -} -.list_container { - margin-top: 4px; - margin-bottom: 20px; - border: 1px solid #ddd; - border-radius: 2px; -} -.list_container > div { - border-bottom: 1px solid #ddd; -} -.list_container > div:hover .list-item { - background-color: red; -} -.list_container > div:last-child { - border: none; -} -.list_item:hover .list_item { - background-color: #ddd; -} -.list_item a { - text-decoration: none; -} -.list_item:hover { - background-color: #fafafa; -} -.list_header > div, -.list_item > div { - padding-top: 4px; - padding-bottom: 4px; - padding-left: 7px; - padding-right: 7px; - line-height: 22px; -} -.list_header > div input, -.list_item > div input { - margin-right: 7px; - margin-left: 14px; - vertical-align: baseline; - line-height: 22px; - position: relative; - top: -1px; -} -.list_header > div .item_link, -.list_item > div .item_link { - margin-left: -1px; - vertical-align: baseline; - line-height: 22px; -} -.new-file input[type=checkbox] { - visibility: hidden; -} -.item_name { - line-height: 22px; - height: 24px; -} -.item_icon { - font-size: 14px; - color: #5e5e5e; - margin-right: 7px; - margin-left: 7px; - line-height: 22px; - vertical-align: baseline; -} -.item_buttons { - line-height: 1em; - margin-left: -5px; -} -.item_buttons .btn, -.item_buttons .btn-group, -.item_buttons .input-group { - float: left; -} -.item_buttons > .btn, -.item_buttons > .btn-group, -.item_buttons > .input-group { - margin-left: 5px; -} -.item_buttons .btn { - min-width: 13ex; -} -.item_buttons .running-indicator { - padding-top: 4px; - color: #5cb85c; -} -.item_buttons .kernel-name { - padding-top: 4px; - color: #5bc0de; - margin-right: 7px; - float: left; -} -.toolbar_info { - height: 24px; - line-height: 24px; -} -.list_item input:not([type=checkbox]) { - padding-top: 3px; - padding-bottom: 3px; - height: 22px; - line-height: 14px; - margin: 0px; -} -.highlight_text { - color: blue; -} -#project_name { - display: inline-block; - padding-left: 7px; - margin-left: -2px; -} -#project_name > .breadcrumb { - padding: 0px; - margin-bottom: 0px; - background-color: transparent; - font-weight: bold; -} -#tree-selector { - padding-right: 0px; -} -#button-select-all { - min-width: 50px; -} -#select-all { - margin-left: 7px; - margin-right: 2px; -} -.menu_icon { - margin-right: 2px; -} -.tab-content .row { - margin-left: 0px; - margin-right: 0px; -} -.folder_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f114"; -} -.folder_icon:before.pull-left { - margin-right: .3em; -} -.folder_icon:before.pull-right { - margin-left: .3em; -} -.notebook_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f02d"; - position: relative; - top: -1px; -} -.notebook_icon:before.pull-left { - margin-right: .3em; -} -.notebook_icon:before.pull-right { - margin-left: .3em; -} -.running_notebook_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f02d"; - position: relative; - top: -1px; - color: #5cb85c; -} -.running_notebook_icon:before.pull-left { - margin-right: .3em; -} -.running_notebook_icon:before.pull-right { - margin-left: .3em; -} -.file_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f016"; - position: relative; - top: -2px; -} -.file_icon:before.pull-left { - margin-right: .3em; -} -.file_icon:before.pull-right { - margin-left: .3em; -} -#notebook_toolbar .pull-right { - padding-top: 0px; - margin-right: -1px; -} -ul#new-menu { - left: auto; - right: 0; -} -.kernel-menu-icon { - padding-right: 12px; - width: 24px; - content: "\f096"; -} -.kernel-menu-icon:before { - content: "\f096"; -} -.kernel-menu-icon-current:before { - content: "\f00c"; -} -#tab_content { - padding-top: 20px; -} -#running .panel-group .panel { - margin-top: 3px; - margin-bottom: 1em; -} -#running .panel-group .panel .panel-heading { - background-color: #EEE; - padding-top: 4px; - padding-bottom: 4px; - padding-left: 7px; - padding-right: 7px; - line-height: 22px; -} -#running .panel-group .panel .panel-heading a:focus, -#running .panel-group .panel .panel-heading a:hover { - text-decoration: none; -} -#running .panel-group .panel .panel-body { - padding: 0px; -} -#running .panel-group .panel .panel-body .list_container { - margin-top: 0px; - margin-bottom: 0px; - border: 0px; - border-radius: 0px; -} -#running .panel-group .panel .panel-body .list_container .list_item { - border-bottom: 1px solid #ddd; -} -#running .panel-group .panel .panel-body .list_container .list_item:last-child { - border-bottom: 0px; -} -.delete-button { - display: none; -} -.duplicate-button { - display: none; -} -.rename-button { - display: none; -} -.shutdown-button { - display: none; -} -.dynamic-instructions { - display: inline-block; - padding-top: 4px; -} -/*! -* -* IPython text editor webapp -* -*/ -.selected-keymap i.fa { - padding: 0px 5px; -} -.selected-keymap i.fa:before { - content: "\f00c"; -} -#mode-menu { - overflow: auto; - max-height: 20em; -} -.edit_app #header { - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); -} -.edit_app #menubar .navbar { - /* Use a negative 1 bottom margin, so the border overlaps the border of the - header */ - margin-bottom: -1px; -} -.dirty-indicator { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - width: 20px; -} -.dirty-indicator.pull-left { - margin-right: .3em; -} -.dirty-indicator.pull-right { - margin-left: .3em; -} -.dirty-indicator-dirty { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - width: 20px; -} -.dirty-indicator-dirty.pull-left { - margin-right: .3em; -} -.dirty-indicator-dirty.pull-right { - margin-left: .3em; -} -.dirty-indicator-clean { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - width: 20px; -} -.dirty-indicator-clean.pull-left { - margin-right: .3em; -} -.dirty-indicator-clean.pull-right { - margin-left: .3em; -} -.dirty-indicator-clean:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f00c"; -} -.dirty-indicator-clean:before.pull-left { - margin-right: .3em; -} -.dirty-indicator-clean:before.pull-right { - margin-left: .3em; -} -#filename { - font-size: 16pt; - display: table; - padding: 0px 5px; -} -#current-mode { - padding-left: 5px; - padding-right: 5px; -} -#texteditor-backdrop { - padding-top: 20px; - padding-bottom: 20px; -} -@media not print { - #texteditor-backdrop { - background-color: #EEE; - } -} -@media print { - #texteditor-backdrop #texteditor-container .CodeMirror-gutter, - #texteditor-backdrop #texteditor-container .CodeMirror-gutters { - background-color: #fff; - } -} -@media not print { - #texteditor-backdrop #texteditor-container .CodeMirror-gutter, - #texteditor-backdrop #texteditor-container .CodeMirror-gutters { - background-color: #fff; - } -} -@media not print { - #texteditor-backdrop #texteditor-container { - padding: 0px; - background-color: #fff; - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - } -} -/*! -* -* IPython notebook -* -*/ -/* CSS font colors for translated ANSI colors. */ -.ansibold { - font-weight: bold; -} -/* use dark versions for foreground, to improve visibility */ -.ansiblack { - color: black; -} -.ansired { - color: darkred; -} -.ansigreen { - color: darkgreen; -} -.ansiyellow { - color: #c4a000; -} -.ansiblue { - color: darkblue; -} -.ansipurple { - color: darkviolet; -} -.ansicyan { - color: steelblue; -} -.ansigray { - color: gray; -} -/* and light for background, for the same reason */ -.ansibgblack { - background-color: black; -} -.ansibgred { - background-color: red; -} -.ansibggreen { - background-color: green; -} -.ansibgyellow { - background-color: yellow; -} -.ansibgblue { - background-color: blue; -} -.ansibgpurple { - background-color: magenta; -} -.ansibgcyan { - background-color: cyan; -} -.ansibggray { - background-color: gray; -} -div.cell { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - border-radius: 2px; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - border-width: 1px; - border-style: solid; - border-color: transparent; - width: 100%; - padding: 5px; - /* This acts as a spacer between cells, that is outside the border */ - margin: 0px; - outline: none; - border-left-width: 1px; - padding-left: 5px; - background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%); -} -div.cell.jupyter-soft-selected { - border-left-color: #90CAF9; - border-left-color: #E3F2FD; - border-left-width: 1px; - padding-left: 5px; - border-right-color: #E3F2FD; - border-right-width: 1px; - background: #E3F2FD; -} -@media print { - div.cell.jupyter-soft-selected { - border-color: transparent; - } -} -div.cell.selected { - border-color: #ababab; - border-left-width: 0px; - padding-left: 6px; - background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%); -} -@media print { - div.cell.selected { - border-color: transparent; - } -} -div.cell.selected.jupyter-soft-selected { - border-left-width: 0; - padding-left: 6px; - background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%); -} -.edit_mode div.cell.selected { - border-color: #66BB6A; - border-left-width: 0px; - padding-left: 6px; - background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%); -} -@media print { - .edit_mode div.cell.selected { - border-color: transparent; - } -} -.prompt { - /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */ - min-width: 14ex; - /* This padding is tuned to match the padding on the CodeMirror editor. */ - padding: 0.4em; - margin: 0px; - font-family: monospace; - text-align: right; - /* This has to match that of the the CodeMirror class line-height below */ - line-height: 1.21429em; - /* Don't highlight prompt number selection */ - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - /* Use default cursor */ - cursor: default; -} -@media (max-width: 540px) { - .prompt { - text-align: left; - } -} -div.inner_cell { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - /* Old browsers */ - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - /* Modern browsers */ - flex: 1; -} -@-moz-document url-prefix() { - div.inner_cell { - overflow-x: hidden; - } -} -/* input_area and input_prompt must match in top border and margin for alignment */ -div.input_area { - border: 1px solid #cfcfcf; - border-radius: 2px; - background: #f7f7f7; - line-height: 1.21429em; -} -/* This is needed so that empty prompt areas can collapse to zero height when there - is no content in the output_subarea and the prompt. The main purpose of this is - to make sure that empty JavaScript output_subareas have no height. */ -div.prompt:empty { - padding-top: 0; - padding-bottom: 0; -} -div.unrecognized_cell { - padding: 5px 5px 5px 0px; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; -} -div.unrecognized_cell .inner_cell { - border-radius: 2px; - padding: 5px; - font-weight: bold; - color: red; - border: 1px solid #cfcfcf; - background: #eaeaea; -} -div.unrecognized_cell .inner_cell a { - color: inherit; - text-decoration: none; -} -div.unrecognized_cell .inner_cell a:hover { - color: inherit; - text-decoration: none; -} -@media (max-width: 540px) { - div.unrecognized_cell > div.prompt { - display: none; - } -} -div.code_cell { - /* avoid page breaking on code cells when printing */ -} -@media print { - div.code_cell { - page-break-inside: avoid; - } -} -/* any special styling for code cells that are currently running goes here */ -div.input { - page-break-inside: avoid; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; -} -@media (max-width: 540px) { - div.input { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - } -} -/* input_area and input_prompt must match in top border and margin for alignment */ -div.input_prompt { - color: #303F9F; - border-top: 1px solid transparent; -} -div.input_area > div.highlight { - margin: 0.4em; - border: none; - padding: 0px; - background-color: transparent; -} -div.input_area > div.highlight > pre { - margin: 0px; - border: none; - padding: 0px; - background-color: transparent; -} -/* The following gets added to the <head> if it is detected that the user has a - * monospace font with inconsistent normal/bold/italic height. See - * notebookmain.js. Such fonts will have keywords vertically offset with - * respect to the rest of the text. The user should select a better font. - * See: https://github.com/ipython/ipython/issues/1503 - * - * .CodeMirror span { - * vertical-align: bottom; - * } - */ -.CodeMirror { - line-height: 1.21429em; - /* Changed from 1em to our global default */ - font-size: 14px; - height: auto; - /* Changed to auto to autogrow */ - background: none; - /* Changed from white to allow our bg to show through */ -} -.CodeMirror-scroll { - /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/ - /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/ - overflow-y: hidden; - overflow-x: auto; -} -.CodeMirror-lines { - /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */ - /* we have set a different line-height and want this to scale with that. */ - padding: 0.4em; -} -.CodeMirror-linenumber { - padding: 0 8px 0 4px; -} -.CodeMirror-gutters { - border-bottom-left-radius: 2px; - border-top-left-radius: 2px; -} -.CodeMirror pre { - /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */ - /* .CodeMirror-lines */ - padding: 0; - border: 0; - border-radius: 0; -} -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> -Adapted from GitHub theme - -*/ -.highlight-base { - color: #000; -} -.highlight-variable { - color: #000; -} -.highlight-variable-2 { - color: #1a1a1a; -} -.highlight-variable-3 { - color: #333333; -} -.highlight-string { - color: #BA2121; -} -.highlight-comment { - color: #408080; - font-style: italic; -} -.highlight-number { - color: #080; -} -.highlight-atom { - color: #88F; -} -.highlight-keyword { - color: #008000; - font-weight: bold; -} -.highlight-builtin { - color: #008000; -} -.highlight-error { - color: #f00; -} -.highlight-operator { - color: #AA22FF; - font-weight: bold; -} -.highlight-meta { - color: #AA22FF; -} -/* previously not defined, copying from default codemirror */ -.highlight-def { - color: #00f; -} -.highlight-string-2 { - color: #f50; -} -.highlight-qualifier { - color: #555; -} -.highlight-bracket { - color: #997; -} -.highlight-tag { - color: #170; -} -.highlight-attribute { - color: #00c; -} -.highlight-header { - color: blue; -} -.highlight-quote { - color: #090; -} -.highlight-link { - color: #00c; -} -/* apply the same style to codemirror */ -.cm-s-ipython span.cm-keyword { - color: #008000; - font-weight: bold; -} -.cm-s-ipython span.cm-atom { - color: #88F; -} -.cm-s-ipython span.cm-number { - color: #080; -} -.cm-s-ipython span.cm-def { - color: #00f; -} -.cm-s-ipython span.cm-variable { - color: #000; -} -.cm-s-ipython span.cm-operator { - color: #AA22FF; - font-weight: bold; -} -.cm-s-ipython span.cm-variable-2 { - color: #1a1a1a; -} -.cm-s-ipython span.cm-variable-3 { - color: #333333; -} -.cm-s-ipython span.cm-comment { - color: #408080; - font-style: italic; -} -.cm-s-ipython span.cm-string { - color: #BA2121; -} -.cm-s-ipython span.cm-string-2 { - color: #f50; -} -.cm-s-ipython span.cm-meta { - color: #AA22FF; -} -.cm-s-ipython span.cm-qualifier { - color: #555; -} -.cm-s-ipython span.cm-builtin { - color: #008000; -} -.cm-s-ipython span.cm-bracket { - color: #997; -} -.cm-s-ipython span.cm-tag { - color: #170; -} -.cm-s-ipython span.cm-attribute { - color: #00c; -} -.cm-s-ipython span.cm-header { - color: blue; -} -.cm-s-ipython span.cm-quote { - color: #090; -} -.cm-s-ipython span.cm-link { - color: #00c; -} -.cm-s-ipython span.cm-error { - color: #f00; -} -.cm-s-ipython span.cm-tab { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); - background-position: right; - background-repeat: no-repeat; -} -div.output_wrapper { - /* this position must be relative to enable descendents to be absolute within it */ - position: relative; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - z-index: 1; -} -/* class for the output area when it should be height-limited */ -div.output_scroll { - /* ideally, this would be max-height, but FF barfs all over that */ - height: 24em; - /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */ - width: 100%; - overflow: auto; - border-radius: 2px; - -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8); - box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8); - display: block; -} -/* output div while it is collapsed */ -div.output_collapsed { - margin: 0px; - padding: 0px; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; -} -div.out_prompt_overlay { - height: 100%; - padding: 0px 0.4em; - position: absolute; - border-radius: 2px; -} -div.out_prompt_overlay:hover { - /* use inner shadow to get border that is computed the same on WebKit/FF */ - -webkit-box-shadow: inset 0 0 1px #000; - box-shadow: inset 0 0 1px #000; - background: rgba(240, 240, 240, 0.5); -} -div.output_prompt { - color: #D84315; -} -/* This class is the outer container of all output sections. */ -div.output_area { - padding: 0px; - page-break-inside: avoid; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; -} -div.output_area .MathJax_Display { - text-align: left !important; -} -div.output_area .rendered_html table { - margin-left: 0; - margin-right: 0; -} -div.output_area .rendered_html img { - margin-left: 0; - margin-right: 0; -} -div.output_area img, -div.output_area svg { - max-width: 100%; - height: auto; -} -div.output_area img.unconfined, -div.output_area svg.unconfined { - max-width: none; -} -/* This is needed to protect the pre formating from global settings such - as that of bootstrap */ -.output { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; -} -@media (max-width: 540px) { - div.output_area { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: vertical; - -moz-box-align: stretch; - display: box; - box-orient: vertical; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: column; - align-items: stretch; - } -} -div.output_area pre { - margin: 0; - padding: 0; - border: 0; - vertical-align: baseline; - color: black; - background-color: transparent; - border-radius: 0; -} -/* This class is for the output subarea inside the output_area and after - the prompt div. */ -div.output_subarea { - overflow-x: auto; - padding: 0.4em; - /* Old browsers */ - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - /* Modern browsers */ - flex: 1; - max-width: calc(100% - 14ex); -} -div.output_scroll div.output_subarea { - overflow-x: visible; -} -/* The rest of the output_* classes are for special styling of the different - output types */ -/* all text output has this class: */ -div.output_text { - text-align: left; - color: #000; - /* This has to match that of the the CodeMirror class line-height below */ - line-height: 1.21429em; -} -/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */ -div.output_stderr { - background: #fdd; - /* very light red background for stderr */ -} -div.output_latex { - text-align: left; -} -/* Empty output_javascript divs should have no height */ -div.output_javascript:empty { - padding: 0; -} -.js-error { - color: darkred; -} -/* raw_input styles */ -div.raw_input_container { - line-height: 1.21429em; - padding-top: 5px; -} -pre.raw_input_prompt { - /* nothing needed here. */ -} -input.raw_input { - font-family: monospace; - font-size: inherit; - color: inherit; - width: auto; - /* make sure input baseline aligns with prompt */ - vertical-align: baseline; - /* padding + margin = 0.5em between prompt and cursor */ - padding: 0em 0.25em; - margin: 0em 0.25em; -} -input.raw_input:focus { - box-shadow: none; -} -p.p-space { - margin-bottom: 10px; -} -div.output_unrecognized { - padding: 5px; - font-weight: bold; - color: red; -} -div.output_unrecognized a { - color: inherit; - text-decoration: none; -} -div.output_unrecognized a:hover { - color: inherit; - text-decoration: none; -} -.rendered_html { - color: #000; - /* any extras will just be numbers: */ -} -.rendered_html em { - font-style: italic; -} -.rendered_html strong { - font-weight: bold; -} -.rendered_html u { - text-decoration: underline; -} -.rendered_html :link { - text-decoration: underline; -} -.rendered_html :visited { - text-decoration: underline; -} -.rendered_html h1 { - font-size: 185.7%; - margin: 1.08em 0 0 0; - font-weight: bold; - line-height: 1.0; -} -.rendered_html h2 { - font-size: 157.1%; - margin: 1.27em 0 0 0; - font-weight: bold; - line-height: 1.0; -} -.rendered_html h3 { - font-size: 128.6%; - margin: 1.55em 0 0 0; - font-weight: bold; - line-height: 1.0; -} -.rendered_html h4 { - font-size: 100%; - margin: 2em 0 0 0; - font-weight: bold; - line-height: 1.0; -} -.rendered_html h5 { - font-size: 100%; - margin: 2em 0 0 0; - font-weight: bold; - line-height: 1.0; - font-style: italic; -} -.rendered_html h6 { - font-size: 100%; - margin: 2em 0 0 0; - font-weight: bold; - line-height: 1.0; - font-style: italic; -} -.rendered_html h1:first-child { - margin-top: 0.538em; -} -.rendered_html h2:first-child { - margin-top: 0.636em; -} -.rendered_html h3:first-child { - margin-top: 0.777em; -} -.rendered_html h4:first-child { - margin-top: 1em; -} -.rendered_html h5:first-child { - margin-top: 1em; -} -.rendered_html h6:first-child { - margin-top: 1em; -} -.rendered_html ul { - list-style: disc; - margin: 0em 2em; - padding-left: 0px; -} -.rendered_html ul ul { - list-style: square; - margin: 0em 2em; -} -.rendered_html ul ul ul { - list-style: circle; - margin: 0em 2em; -} -.rendered_html ol { - list-style: decimal; - margin: 0em 2em; - padding-left: 0px; -} -.rendered_html ol ol { - list-style: upper-alpha; - margin: 0em 2em; -} -.rendered_html ol ol ol { - list-style: lower-alpha; - margin: 0em 2em; -} -.rendered_html ol ol ol ol { - list-style: lower-roman; - margin: 0em 2em; -} -.rendered_html ol ol ol ol ol { - list-style: decimal; - margin: 0em 2em; -} -.rendered_html * + ul { - margin-top: 1em; -} -.rendered_html * + ol { - margin-top: 1em; -} -.rendered_html hr { - color: black; - background-color: black; -} -.rendered_html pre { - margin: 1em 2em; -} -.rendered_html pre, -.rendered_html code { - border: 0; - background-color: #fff; - color: #000; - font-size: 100%; - padding: 0px; -} -.rendered_html blockquote { - margin: 1em 2em; -} -.rendered_html table { - margin-left: auto; - margin-right: auto; - border: 1px solid black; - border-collapse: collapse; -} -.rendered_html tr, -.rendered_html th, -.rendered_html td { - border: 1px solid black; - border-collapse: collapse; - margin: 1em 2em; -} -.rendered_html td, -.rendered_html th { - text-align: left; - vertical-align: middle; - padding: 4px; -} -.rendered_html th { - font-weight: bold; -} -.rendered_html * + table { - margin-top: 1em; -} -.rendered_html p { - text-align: left; -} -.rendered_html * + p { - margin-top: 1em; -} -.rendered_html img { - display: block; - margin-left: auto; - margin-right: auto; -} -.rendered_html * + img { - margin-top: 1em; -} -.rendered_html img, -.rendered_html svg { - max-width: 100%; - height: auto; -} -.rendered_html img.unconfined, -.rendered_html svg.unconfined { - max-width: none; -} -div.text_cell { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; -} -@media (max-width: 540px) { - div.text_cell > div.prompt { - display: none; - } -} -div.text_cell_render { - /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/ - outline: none; - resize: none; - width: inherit; - border-style: none; - padding: 0.5em 0.5em 0.5em 0.4em; - color: #000; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} -a.anchor-link:link { - text-decoration: none; - padding: 0px 20px; - visibility: hidden; -} -h1:hover .anchor-link, -h2:hover .anchor-link, -h3:hover .anchor-link, -h4:hover .anchor-link, -h5:hover .anchor-link, -h6:hover .anchor-link { - visibility: visible; -} -.text_cell.rendered .input_area { - display: none; -} -.text_cell.rendered .rendered_html { - overflow-x: auto; - overflow-y: hidden; -} -.text_cell.unrendered .text_cell_render { - display: none; -} -.cm-header-1, -.cm-header-2, -.cm-header-3, -.cm-header-4, -.cm-header-5, -.cm-header-6 { - font-weight: bold; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -.cm-header-1 { - font-size: 185.7%; -} -.cm-header-2 { - font-size: 157.1%; -} -.cm-header-3 { - font-size: 128.6%; -} -.cm-header-4 { - font-size: 110%; -} -.cm-header-5 { - font-size: 100%; - font-style: italic; -} -.cm-header-6 { - font-size: 100%; - font-style: italic; -} -/*! -* -* IPython notebook webapp -* -*/ -@media (max-width: 767px) { - .notebook_app { - padding-left: 0px; - padding-right: 0px; - } -} -#ipython-main-app { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - height: 100%; -} -div#notebook_panel { - margin: 0px; - padding: 0px; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - height: 100%; -} -div#notebook { - font-size: 14px; - line-height: 20px; - overflow-y: hidden; - overflow-x: auto; - width: 100%; - /* This spaces the page away from the edge of the notebook area */ - padding-top: 20px; - margin: 0px; - outline: none; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - min-height: 100%; -} -@media not print { - #notebook-container { - padding: 15px; - background-color: #fff; - min-height: 0; - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - } -} -@media print { - #notebook-container { - width: 100%; - } -} -div.ui-widget-content { - border: 1px solid #ababab; - outline: none; -} -pre.dialog { - background-color: #f7f7f7; - border: 1px solid #ddd; - border-radius: 2px; - padding: 0.4em; - padding-left: 2em; -} -p.dialog { - padding: 0.2em; -} -/* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems - to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do. - */ -pre, -code, -kbd, -samp { - white-space: pre-wrap; -} -#fonttest { - font-family: monospace; -} -p { - margin-bottom: 0; -} -.end_space { - min-height: 100px; - transition: height .2s ease; -} -.notebook_app > #header { - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); -} -@media not print { - .notebook_app { - background-color: #EEE; - } -} -kbd { - border-style: solid; - border-width: 1px; - box-shadow: none; - margin: 2px; - padding-left: 2px; - padding-right: 2px; - padding-top: 1px; - padding-bottom: 1px; -} -/* CSS for the cell toolbar */ -.celltoolbar { - border: thin solid #CFCFCF; - border-bottom: none; - background: #EEE; - border-radius: 2px 2px 0px 0px; - width: 100%; - height: 29px; - padding-right: 4px; - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; - /* Old browsers */ - -webkit-box-pack: end; - -moz-box-pack: end; - box-pack: end; - /* Modern browsers */ - justify-content: flex-end; - display: -webkit-flex; -} -@media print { - .celltoolbar { - display: none; - } -} -.ctb_hideshow { - display: none; - vertical-align: bottom; -} -/* ctb_show is added to the ctb_hideshow div to show the cell toolbar. - Cell toolbars are only shown when the ctb_global_show class is also set. -*/ -.ctb_global_show .ctb_show.ctb_hideshow { - display: block; -} -.ctb_global_show .ctb_show + .input_area, -.ctb_global_show .ctb_show + div.text_cell_input, -.ctb_global_show .ctb_show ~ div.text_cell_render { - border-top-right-radius: 0px; - border-top-left-radius: 0px; -} -.ctb_global_show .ctb_show ~ div.text_cell_render { - border: 1px solid #cfcfcf; -} -.celltoolbar { - font-size: 87%; - padding-top: 3px; -} -.celltoolbar select { - display: block; - width: 100%; - height: 32px; - padding: 6px 12px; - font-size: 13px; - line-height: 1.42857143; - color: #555555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 2px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 1px; - width: inherit; - font-size: inherit; - height: 22px; - padding: 0px; - display: inline-block; -} -.celltoolbar select:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.celltoolbar select::-moz-placeholder { - color: #999; - opacity: 1; -} -.celltoolbar select:-ms-input-placeholder { - color: #999; -} -.celltoolbar select::-webkit-input-placeholder { - color: #999; -} -.celltoolbar select::-ms-expand { - border: 0; - background-color: transparent; -} -.celltoolbar select[disabled], -.celltoolbar select[readonly], -fieldset[disabled] .celltoolbar select { - background-color: #eeeeee; - opacity: 1; -} -.celltoolbar select[disabled], -fieldset[disabled] .celltoolbar select { - cursor: not-allowed; -} -textarea.celltoolbar select { - height: auto; -} -select.celltoolbar select { - height: 30px; - line-height: 30px; -} -textarea.celltoolbar select, -select[multiple].celltoolbar select { - height: auto; -} -.celltoolbar label { - margin-left: 5px; - margin-right: 5px; -} -.completions { - position: absolute; - z-index: 110; - overflow: hidden; - border: 1px solid #ababab; - border-radius: 2px; - -webkit-box-shadow: 0px 6px 10px -1px #adadad; - box-shadow: 0px 6px 10px -1px #adadad; - line-height: 1; -} -.completions select { - background: white; - outline: none; - border: none; - padding: 0px; - margin: 0px; - overflow: auto; - font-family: monospace; - font-size: 110%; - color: #000; - width: auto; -} -.completions select option.context { - color: #286090; -} -#kernel_logo_widget { - float: right !important; - float: right; -} -#kernel_logo_widget .current_kernel_logo { - display: none; - margin-top: -1px; - margin-bottom: -1px; - width: 32px; - height: 32px; -} -#menubar { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - margin-top: 1px; -} -#menubar .navbar { - border-top: 1px; - border-radius: 0px 0px 2px 2px; - margin-bottom: 0px; -} -#menubar .navbar-toggle { - float: left; - padding-top: 7px; - padding-bottom: 7px; - border: none; -} -#menubar .navbar-collapse { - clear: left; -} -.nav-wrapper { - border-bottom: 1px solid #e7e7e7; -} -i.menu-icon { - padding-top: 4px; -} -ul#help_menu li a { - overflow: hidden; - padding-right: 2.2em; -} -ul#help_menu li a i { - margin-right: -1.2em; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropdown-submenu > a:after { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: block; - content: "\f0da"; - float: right; - color: #333333; - margin-top: 2px; - margin-right: -10px; -} -.dropdown-submenu > a:after.pull-left { - margin-right: .3em; -} -.dropdown-submenu > a:after.pull-right { - margin-left: .3em; -} -.dropdown-submenu:hover > a:after { - color: #262626; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; -} -#notification_area { - float: right !important; - float: right; - z-index: 10; -} -.indicator_area { - float: right !important; - float: right; - color: #777; - margin-left: 5px; - margin-right: 5px; - width: 11px; - z-index: 10; - text-align: center; - width: auto; -} -#kernel_indicator { - float: right !important; - float: right; - color: #777; - margin-left: 5px; - margin-right: 5px; - width: 11px; - z-index: 10; - text-align: center; - width: auto; - border-left: 1px solid; -} -#kernel_indicator .kernel_indicator_name { - padding-left: 5px; - padding-right: 5px; -} -#modal_indicator { - float: right !important; - float: right; - color: #777; - margin-left: 5px; - margin-right: 5px; - width: 11px; - z-index: 10; - text-align: center; - width: auto; -} -#readonly-indicator { - float: right !important; - float: right; - color: #777; - margin-left: 5px; - margin-right: 5px; - width: 11px; - z-index: 10; - text-align: center; - width: auto; - margin-top: 2px; - margin-bottom: 0px; - margin-left: 0px; - margin-right: 0px; - display: none; -} -.modal_indicator:before { - width: 1.28571429em; - text-align: center; -} -.edit_mode .modal_indicator:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f040"; -} -.edit_mode .modal_indicator:before.pull-left { - margin-right: .3em; -} -.edit_mode .modal_indicator:before.pull-right { - margin-left: .3em; -} -.command_mode .modal_indicator:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: ' '; -} -.command_mode .modal_indicator:before.pull-left { - margin-right: .3em; -} -.command_mode .modal_indicator:before.pull-right { - margin-left: .3em; -} -.kernel_idle_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f10c"; -} -.kernel_idle_icon:before.pull-left { - margin-right: .3em; -} -.kernel_idle_icon:before.pull-right { - margin-left: .3em; -} -.kernel_busy_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f111"; -} -.kernel_busy_icon:before.pull-left { - margin-right: .3em; -} -.kernel_busy_icon:before.pull-right { - margin-left: .3em; -} -.kernel_dead_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f1e2"; -} -.kernel_dead_icon:before.pull-left { - margin-right: .3em; -} -.kernel_dead_icon:before.pull-right { - margin-left: .3em; -} -.kernel_disconnected_icon:before { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\f127"; -} -.kernel_disconnected_icon:before.pull-left { - margin-right: .3em; -} -.kernel_disconnected_icon:before.pull-right { - margin-left: .3em; -} -.notification_widget { - color: #777; - z-index: 10; - background: rgba(240, 240, 240, 0.5); - margin-right: 4px; - color: #333; - background-color: #fff; - border-color: #ccc; -} -.notification_widget:focus, -.notification_widget.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.notification_widget:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.notification_widget:active, -.notification_widget.active, -.open > .dropdown-toggle.notification_widget { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.notification_widget:active:hover, -.notification_widget.active:hover, -.open > .dropdown-toggle.notification_widget:hover, -.notification_widget:active:focus, -.notification_widget.active:focus, -.open > .dropdown-toggle.notification_widget:focus, -.notification_widget:active.focus, -.notification_widget.active.focus, -.open > .dropdown-toggle.notification_widget.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.notification_widget:active, -.notification_widget.active, -.open > .dropdown-toggle.notification_widget { - background-image: none; -} -.notification_widget.disabled:hover, -.notification_widget[disabled]:hover, -fieldset[disabled] .notification_widget:hover, -.notification_widget.disabled:focus, -.notification_widget[disabled]:focus, -fieldset[disabled] .notification_widget:focus, -.notification_widget.disabled.focus, -.notification_widget[disabled].focus, -fieldset[disabled] .notification_widget.focus { - background-color: #fff; - border-color: #ccc; -} -.notification_widget .badge { - color: #fff; - background-color: #333; -} -.notification_widget.warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.notification_widget.warning:focus, -.notification_widget.warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.notification_widget.warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.notification_widget.warning:active, -.notification_widget.warning.active, -.open > .dropdown-toggle.notification_widget.warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.notification_widget.warning:active:hover, -.notification_widget.warning.active:hover, -.open > .dropdown-toggle.notification_widget.warning:hover, -.notification_widget.warning:active:focus, -.notification_widget.warning.active:focus, -.open > .dropdown-toggle.notification_widget.warning:focus, -.notification_widget.warning:active.focus, -.notification_widget.warning.active.focus, -.open > .dropdown-toggle.notification_widget.warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.notification_widget.warning:active, -.notification_widget.warning.active, -.open > .dropdown-toggle.notification_widget.warning { - background-image: none; -} -.notification_widget.warning.disabled:hover, -.notification_widget.warning[disabled]:hover, -fieldset[disabled] .notification_widget.warning:hover, -.notification_widget.warning.disabled:focus, -.notification_widget.warning[disabled]:focus, -fieldset[disabled] .notification_widget.warning:focus, -.notification_widget.warning.disabled.focus, -.notification_widget.warning[disabled].focus, -fieldset[disabled] .notification_widget.warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.notification_widget.warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.notification_widget.success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.notification_widget.success:focus, -.notification_widget.success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.notification_widget.success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.notification_widget.success:active, -.notification_widget.success.active, -.open > .dropdown-toggle.notification_widget.success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.notification_widget.success:active:hover, -.notification_widget.success.active:hover, -.open > .dropdown-toggle.notification_widget.success:hover, -.notification_widget.success:active:focus, -.notification_widget.success.active:focus, -.open > .dropdown-toggle.notification_widget.success:focus, -.notification_widget.success:active.focus, -.notification_widget.success.active.focus, -.open > .dropdown-toggle.notification_widget.success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.notification_widget.success:active, -.notification_widget.success.active, -.open > .dropdown-toggle.notification_widget.success { - background-image: none; -} -.notification_widget.success.disabled:hover, -.notification_widget.success[disabled]:hover, -fieldset[disabled] .notification_widget.success:hover, -.notification_widget.success.disabled:focus, -.notification_widget.success[disabled]:focus, -fieldset[disabled] .notification_widget.success:focus, -.notification_widget.success.disabled.focus, -.notification_widget.success[disabled].focus, -fieldset[disabled] .notification_widget.success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.notification_widget.success .badge { - color: #5cb85c; - background-color: #fff; -} -.notification_widget.info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.notification_widget.info:focus, -.notification_widget.info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.notification_widget.info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.notification_widget.info:active, -.notification_widget.info.active, -.open > .dropdown-toggle.notification_widget.info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.notification_widget.info:active:hover, -.notification_widget.info.active:hover, -.open > .dropdown-toggle.notification_widget.info:hover, -.notification_widget.info:active:focus, -.notification_widget.info.active:focus, -.open > .dropdown-toggle.notification_widget.info:focus, -.notification_widget.info:active.focus, -.notification_widget.info.active.focus, -.open > .dropdown-toggle.notification_widget.info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.notification_widget.info:active, -.notification_widget.info.active, -.open > .dropdown-toggle.notification_widget.info { - background-image: none; -} -.notification_widget.info.disabled:hover, -.notification_widget.info[disabled]:hover, -fieldset[disabled] .notification_widget.info:hover, -.notification_widget.info.disabled:focus, -.notification_widget.info[disabled]:focus, -fieldset[disabled] .notification_widget.info:focus, -.notification_widget.info.disabled.focus, -.notification_widget.info[disabled].focus, -fieldset[disabled] .notification_widget.info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.notification_widget.info .badge { - color: #5bc0de; - background-color: #fff; -} -.notification_widget.danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.notification_widget.danger:focus, -.notification_widget.danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.notification_widget.danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.notification_widget.danger:active, -.notification_widget.danger.active, -.open > .dropdown-toggle.notification_widget.danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.notification_widget.danger:active:hover, -.notification_widget.danger.active:hover, -.open > .dropdown-toggle.notification_widget.danger:hover, -.notification_widget.danger:active:focus, -.notification_widget.danger.active:focus, -.open > .dropdown-toggle.notification_widget.danger:focus, -.notification_widget.danger:active.focus, -.notification_widget.danger.active.focus, -.open > .dropdown-toggle.notification_widget.danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.notification_widget.danger:active, -.notification_widget.danger.active, -.open > .dropdown-toggle.notification_widget.danger { - background-image: none; -} -.notification_widget.danger.disabled:hover, -.notification_widget.danger[disabled]:hover, -fieldset[disabled] .notification_widget.danger:hover, -.notification_widget.danger.disabled:focus, -.notification_widget.danger[disabled]:focus, -fieldset[disabled] .notification_widget.danger:focus, -.notification_widget.danger.disabled.focus, -.notification_widget.danger[disabled].focus, -fieldset[disabled] .notification_widget.danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.notification_widget.danger .badge { - color: #d9534f; - background-color: #fff; -} -div#pager { - background-color: #fff; - font-size: 14px; - line-height: 20px; - overflow: hidden; - display: none; - position: fixed; - bottom: 0px; - width: 100%; - max-height: 50%; - padding-top: 8px; - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - /* Display over codemirror */ - z-index: 100; - /* Hack which prevents jquery ui resizable from changing top. */ - top: auto !important; -} -div#pager pre { - line-height: 1.21429em; - color: #000; - background-color: #f7f7f7; - padding: 0.4em; -} -div#pager #pager-button-area { - position: absolute; - top: 8px; - right: 20px; -} -div#pager #pager-contents { - position: relative; - overflow: auto; - width: 100%; - height: 100%; -} -div#pager #pager-contents #pager-container { - position: relative; - padding: 15px 0px; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} -div#pager .ui-resizable-handle { - top: 0px; - height: 8px; - background: #f7f7f7; - border-top: 1px solid #cfcfcf; - border-bottom: 1px solid #cfcfcf; - /* This injects handle bars (a short, wide = symbol) for - the resize handle. */ -} -div#pager .ui-resizable-handle::after { - content: ''; - top: 2px; - left: 50%; - height: 3px; - width: 30px; - margin-left: -15px; - position: absolute; - border-top: 1px solid #cfcfcf; -} -.quickhelp { - /* Old browsers */ - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-align: stretch; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-align: stretch; - display: box; - box-orient: horizontal; - box-align: stretch; - /* Modern browsers */ - display: flex; - flex-direction: row; - align-items: stretch; - line-height: 1.8em; -} -.shortcut_key { - display: inline-block; - width: 20ex; - text-align: right; - font-family: monospace; -} -.shortcut_descr { - display: inline-block; - /* Old browsers */ - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - /* Modern browsers */ - flex: 1; -} -span.save_widget { - margin-top: 6px; -} -span.save_widget span.filename { - height: 1em; - line-height: 1em; - padding: 3px; - margin-left: 16px; - border: none; - font-size: 146.5%; - border-radius: 2px; -} -span.save_widget span.filename:hover { - background-color: #e6e6e6; -} -span.checkpoint_status, -span.autosave_status { - font-size: small; -} -@media (max-width: 767px) { - span.save_widget { - font-size: small; - } - span.checkpoint_status, - span.autosave_status { - display: none; - } -} -@media (min-width: 768px) and (max-width: 991px) { - span.checkpoint_status { - display: none; - } - span.autosave_status { - font-size: x-small; - } -} -.toolbar { - padding: 0px; - margin-left: -5px; - margin-top: 2px; - margin-bottom: 5px; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} -.toolbar select, -.toolbar label { - width: auto; - vertical-align: middle; - margin-right: 2px; - margin-bottom: 0px; - display: inline; - font-size: 92%; - margin-left: 0.3em; - margin-right: 0.3em; - padding: 0px; - padding-top: 3px; -} -.toolbar .btn { - padding: 2px 8px; -} -.toolbar .btn-group { - margin-top: 0px; - margin-left: 5px; -} -#maintoolbar { - margin-bottom: -3px; - margin-top: -8px; - border: 0px; - min-height: 27px; - margin-left: 0px; - padding-top: 11px; - padding-bottom: 3px; -} -#maintoolbar .navbar-text { - float: none; - vertical-align: middle; - text-align: right; - margin-left: 5px; - margin-right: 0px; - margin-top: 0px; -} -.select-xs { - height: 24px; -} -.pulse, -.dropdown-menu > li > a.pulse, -li.pulse > a.dropdown-toggle, -li.pulse.open > a.dropdown-toggle { - background-color: #F37626; - color: white; -} -/** - * Primary styles - * - * Author: Jupyter Development Team - */ -/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot - * of chance of beeing generated from the ../less/[samename].less file, you can - * try to get back the less file by reverting somme commit in history - **/ -/* - * We'll try to get something pretty, so we - * have some strange css to have the scroll bar on - * the left with fix button on the top right of the tooltip - */ -@-moz-keyframes fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} -@-webkit-keyframes fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} -@-moz-keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@-webkit-keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -/*properties of tooltip after "expand"*/ -.bigtooltip { - overflow: auto; - height: 200px; - -webkit-transition-property: height; - -webkit-transition-duration: 500ms; - -moz-transition-property: height; - -moz-transition-duration: 500ms; - transition-property: height; - transition-duration: 500ms; -} -/*properties of tooltip before "expand"*/ -.smalltooltip { - -webkit-transition-property: height; - -webkit-transition-duration: 500ms; - -moz-transition-property: height; - -moz-transition-duration: 500ms; - transition-property: height; - transition-duration: 500ms; - text-overflow: ellipsis; - overflow: hidden; - height: 80px; -} -.tooltipbuttons { - position: absolute; - padding-right: 15px; - top: 0px; - right: 0px; -} -.tooltiptext { - /*avoid the button to overlap on some docstring*/ - padding-right: 30px; -} -.ipython_tooltip { - max-width: 700px; - /*fade-in animation when inserted*/ - -webkit-animation: fadeOut 400ms; - -moz-animation: fadeOut 400ms; - animation: fadeOut 400ms; - -webkit-animation: fadeIn 400ms; - -moz-animation: fadeIn 400ms; - animation: fadeIn 400ms; - vertical-align: middle; - background-color: #f7f7f7; - overflow: visible; - border: #ababab 1px solid; - outline: none; - padding: 3px; - margin: 0px; - padding-left: 7px; - font-family: monospace; - min-height: 50px; - -moz-box-shadow: 0px 6px 10px -1px #adadad; - -webkit-box-shadow: 0px 6px 10px -1px #adadad; - box-shadow: 0px 6px 10px -1px #adadad; - border-radius: 2px; - position: absolute; - z-index: 1000; -} -.ipython_tooltip a { - float: right; -} -.ipython_tooltip .tooltiptext pre { - border: 0; - border-radius: 0; - font-size: 100%; - background-color: #f7f7f7; -} -.pretooltiparrow { - left: 0px; - margin: 0px; - top: -16px; - width: 40px; - height: 16px; - overflow: hidden; - position: absolute; -} -.pretooltiparrow:before { - background-color: #f7f7f7; - border: 1px #ababab solid; - z-index: 11; - content: ""; - position: absolute; - left: 15px; - top: 10px; - width: 25px; - height: 25px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); -} -ul.typeahead-list i { - margin-left: -10px; - width: 18px; -} -ul.typeahead-list { - max-height: 80vh; - overflow: auto; -} -ul.typeahead-list > li > a { - /** Firefox bug **/ - /* see https://github.com/jupyter/notebook/issues/559 */ - white-space: normal; -} -.cmd-palette .modal-body { - padding: 7px; -} -.cmd-palette form { - background: white; -} -.cmd-palette input { - outline: none; -} -.no-shortcut { - display: none; -} -.command-shortcut:before { - content: "(command)"; - padding-right: 3px; - color: #777777; -} -.edit-shortcut:before { - content: "(edit)"; - padding-right: 3px; - color: #777777; -} -#find-and-replace #replace-preview .match, -#find-and-replace #replace-preview .insert { - background-color: #BBDEFB; - border-color: #90CAF9; - border-style: solid; - border-width: 1px; - border-radius: 0px; -} -#find-and-replace #replace-preview .replace .match { - background-color: #FFCDD2; - border-color: #EF9A9A; - border-radius: 0px; -} -#find-and-replace #replace-preview .replace .insert { - background-color: #C8E6C9; - border-color: #A5D6A7; - border-radius: 0px; -} -#find-and-replace #replace-preview { - max-height: 60vh; - overflow: auto; -} -#find-and-replace #replace-preview pre { - padding: 5px 10px; -} -.terminal-app { - background: #EEE; -} -.terminal-app #header { - background: #fff; - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2); -} -.terminal-app .terminal { - float: left; - font-family: monospace; - color: white; - background: black; - padding: 0.4em; - border-radius: 2px; - -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4); - box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4); -} -.terminal-app .terminal, -.terminal-app .terminal dummy-screen { - line-height: 1em; - font-size: 14px; -} -.terminal-app .terminal-cursor { - color: black; - background: white; -} -.terminal-app #terminado-container { - margin-top: 20px; -} -/*# sourceMappingURL=style.min.css.map */ - </style> -<style type="text/css"> - .highlight .hll { background-color: #ffffcc } -.highlight { background: #f8f8f8; } -.highlight .c { color: #408080; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ -.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #7D9029 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #A0A000 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ - </style> -<style type="text/css"> - -/* Temporary definitions which will become obsolete with Notebook release 5.0 */ -.ansi-black-fg { color: #3E424D; } -.ansi-black-bg { background-color: #3E424D; } -.ansi-black-intense-fg { color: #282C36; } -.ansi-black-intense-bg { background-color: #282C36; } -.ansi-red-fg { color: #E75C58; } -.ansi-red-bg { background-color: #E75C58; } -.ansi-red-intense-fg { color: #B22B31; } -.ansi-red-intense-bg { background-color: #B22B31; } -.ansi-green-fg { color: #00A250; } -.ansi-green-bg { background-color: #00A250; } -.ansi-green-intense-fg { color: #007427; } -.ansi-green-intense-bg { background-color: #007427; } -.ansi-yellow-fg { color: #DDB62B; } -.ansi-yellow-bg { background-color: #DDB62B; } -.ansi-yellow-intense-fg { color: #B27D12; } -.ansi-yellow-intense-bg { background-color: #B27D12; } -.ansi-blue-fg { color: #208FFB; } -.ansi-blue-bg { background-color: #208FFB; } -.ansi-blue-intense-fg { color: #0065CA; } -.ansi-blue-intense-bg { background-color: #0065CA; } -.ansi-magenta-fg { color: #D160C4; } -.ansi-magenta-bg { background-color: #D160C4; } -.ansi-magenta-intense-fg { color: #A03196; } -.ansi-magenta-intense-bg { background-color: #A03196; } -.ansi-cyan-fg { color: #60C6C8; } -.ansi-cyan-bg { background-color: #60C6C8; } -.ansi-cyan-intense-fg { color: #258F8F; } -.ansi-cyan-intense-bg { background-color: #258F8F; } -.ansi-white-fg { color: #C5C1B4; } -.ansi-white-bg { background-color: #C5C1B4; } -.ansi-white-intense-fg { color: #A1A6B2; } -.ansi-white-intense-bg { background-color: #A1A6B2; } - -.ansi-bold { font-weight: bold; } - - </style> - - -<style type="text/css"> -/* Overrides of notebook CSS for static HTML export */ -body { - overflow: visible; - padding: 8px; -} - -div#notebook { - overflow: visible; - border-top: none; -} - -@media print { - div.cell { - display: block; - page-break-inside: avoid; - } - div.output_wrapper { - display: block; - page-break-inside: avoid; - } - div.output { - display: block; - page-break-inside: avoid; - } -} -</style> - -<!-- Custom stylesheet, it must be in the same directory as the html file --> -<link rel="stylesheet" href="custom.css"> - -<!-- Loading mathjax macro --> -<!-- Load mathjax --> - <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script> - <!-- MathJax configuration --> - <script type="text/x-mathjax-config"> - MathJax.Hub.Config({ - tex2jax: { - inlineMath: [ ['$','$'], ["\\(","\\)"] ], - displayMath: [ ['$$','$$'], ["\\[","\\]"] ], - processEscapes: true, - processEnvironments: true - }, - // Center justify equations in code and markdown cells. Elsewhere - // we use CSS to left justify single line equations in code cells. - displayAlign: 'center', - "HTML-CSS": { - styles: {'.MathJax_Display': {"margin": 0}}, - linebreaks: { automatic: true } - } - }); - </script> - <!-- End of mathjax configuration --></head> -<body> - <div tabindex="-1" id="notebook" class="border-box-sizing"> - <div class="container" id="notebook-container"> - -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [1]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">warnings</span> -<span class="n">warnings</span><span class="o">.</span><span class="n">simplefilter</span><span class="p">(</span><span class="s2">"ignore"</span><span class="p">)</span> - -<span class="kn">import</span> <span class="nn">mhcflurry</span> -<span class="kn">import</span> <span class="nn">numpy</span> -<span class="kn">import</span> <span class="nn">seaborn</span> -<span class="kn">import</span> <span class="nn">logging</span> -<span class="kn">import</span> <span class="nn">pandas</span> -<span class="kn">from</span> <span class="nn">os</span> <span class="k">import</span> <span class="n">environ</span> -<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="k">import</span> <span class="n">pyplot</span> -<span class="kn">from</span> <span class="nn">mhcflurry.downloads</span> <span class="k">import</span> <span class="n">get_path</span> - -<span class="o">%</span> <span class="n">matplotlib</span> <span class="n">inline</span> - -<span class="kn">import</span> <span class="nn">IPython.core.display</span> <span class="k">as</span> <span class="nn">display</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt"></div> -<div class="output_subarea output_stream output_stderr output_text"> -<pre>Using Theano backend. -/Users/tim/miniconda3/envs/py3k/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. - "This module will be removed in 0.20.", DeprecationWarning) -</pre> -</div> -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [2]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">IPython.core.display</span> <span class="k">as</span> <span class="nn">di</span> - -<span class="c1"># This line will hide code by default when the notebook is exported as HTML</span> -<span class="n">di</span><span class="o">.</span><span class="n">display_html</span><span class="p">(</span><span class="s1">'<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle(); jQuery("div.output_stderr").toggle();}});</script>'</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt"></div> - -<div class="output_html rendered_html output_subarea "> -<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle(); jQuery("div.output_stderr").toggle();}});</script> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing text_cell rendered"> -<div class="prompt input_prompt"> -</div> -<div class="inner_cell"> -<div class="text_cell_render border-box-sizing rendered_html"> -<h1 id="MHCflurry-models">MHCflurry models<a class="anchor-link" href="#MHCflurry-models">¶</a></h1><h2 id="Class-1-allele-specific-ensemble-models">Class 1 allele specific ensemble models<a class="anchor-link" href="#Class-1-allele-specific-ensemble-models">¶</a></h2><p>This report describes the models published with MHCflurry for Class I affinity prediction. These models were trained on the "data_combined_iedb_kim2014" affinity measurement dataset (mostly from IEDB) distributed with MHCflurry.</p> -<p>Each allele's predictor is an ensemble of 16 models. The models were trained on a random 1/2 of the data for the allele and tested on the other half. The best performing model in terms of sum of AUC (at 500nM), F1, and Kendall Tau for each 50/50 split of the data was selected for inclusion in the ensemble.</p> - -</div> -</div> -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [3]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">all_models_df</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">get_path</span><span class="p">(</span><span class="s2">"models_class1_allele_specific_ensemble"</span><span class="p">,</span> <span class="s2">"all_models.csv.bz2"</span><span class="p">))</span> -<span class="n">all_models_df</span><span class="p">[</span><span class="s2">"hyperparameters_layer_sizes"</span><span class="p">]</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="p">[</span><span class="s2">"hyperparameters_layer_sizes"</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="nb">eval</span><span class="p">)</span> - -<span class="n">full_training_data</span> <span class="o">=</span> <span class="n">mhcflurry</span><span class="o">.</span><span class="n">affinity_measurement_dataset</span><span class="o">.</span><span class="n">AffinityMeasurementDataset</span><span class="o">.</span><span class="n">from_csv</span><span class="p">(</span> - <span class="n">get_path</span><span class="p">(</span><span class="s2">"data_combined_iedb_kim2014"</span><span class="p">,</span> <span class="s2">"combined_human_class1_dataset.csv"</span><span class="p">))</span> - -<span class="n">training_sizes</span> <span class="o">=</span> <span class="n">full_training_data</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span><span class="o">.</span><span class="n">allele</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span> - -<span class="n">all_models_df</span><span class="p">[</span><span class="s2">"train_size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">training_sizes</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">allele</span><span class="p">]</span><span class="o">.</span><span class="n">values</span> - -<span class="p">(</span><span class="n">ensemble_size</span><span class="p">,)</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">ensemble_size</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">index</span> -<span class="n">ensemble_size</span> - -<span class="n">selected_models_df</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">weight</span> <span class="o">></span> <span class="mi">0</span><span class="p">]</span> -<span class="n">selected_models_df</span><span class="o">.</span><span class="n">shape</span> - -<span class="n">alleles</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">training_sizes</span><span class="o">.</span><span class="n">sort_values</span><span class="p">()</span><span class="o">.</span><span class="n">index</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">selected_models_df</span><span class="o">.</span><span class="n">allele</span><span class="o">.</span><span class="n">values</span><span class="p">]</span> -</pre></div> - -</div> -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [4]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">training_sizes_for_included_alleles</span> <span class="o">=</span> <span class="n">training_sizes</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span> - <span class="n">training_sizes</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">allele</span><span class="p">)</span> -<span class="p">]</span> - -<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span> -<span class="k">def</span> <span class="nf">row</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> - <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<tr><td><b></span><span class="si">%s</span><span class="s1"></b></td><td></span><span class="si">%s</span><span class="s1"></td></tr>'</span> <span class="o">%</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span> - -<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<h1>Models summary</h1>'</span><span class="p">)</span> -<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<table>'</span><span class="p">)</span> - -<span class="n">row</span><span class="p">(</span><span class="s2">"Num Alleles"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">allele</span><span class="o">.</span><span class="n">nunique</span><span class="p">()))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Ensemble size"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ensemble_size</span><span class="p">))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Num architectures"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">hyperparameters_architecture_num</span><span class="o">.</span><span class="n">nunique</span><span class="p">()))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Num selected models"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">weight</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">()))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Total models tested"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">all_models_df</span><span class="p">)))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Total training measurements"</span><span class="p">,</span> <span class="s2">"</span><span class="si">{:,d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">training_sizes_for_included_alleles</span><span class="o">.</span><span class="n">sum</span><span class="p">()))</span> -<span class="n">row</span><span class="p">(</span><span class="s2">"Training measurement per allele"</span><span class="p">,</span> - <span class="s2">"min=</span><span class="si">{:,g}</span><span class="s2">; max=</span><span class="si">{:,g}</span><span class="s2">; median=</span><span class="si">{:,g}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> - <span class="n">training_sizes_for_included_alleles</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> - <span class="n">training_sizes_for_included_alleles</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> - <span class="n">training_sizes_for_included_alleles</span><span class="o">.</span><span class="n">median</span><span class="p">()))</span> - - -<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</table>'</span><span class="p">)</span> -<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"<p><b>Alleles included: </b></span><span class="si">%s</span><span class="s2"></p>"</span> <span class="o">%</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="n">training_sizes_for_included_alleles</span><span class="o">.</span><span class="n">index</span><span class="p">))</span> - - -<span class="n">di</span><span class="o">.</span><span class="n">display_html</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">),</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt"></div> - -<div class="output_html rendered_html output_subarea "> -<h1>Models summary</h1> -<table> -<tr><td><b>Num Alleles</b></td><td>132</td></tr> -<tr><td><b>Ensemble size</b></td><td>16</td></tr> -<tr><td><b>Num architectures</b></td><td>162</td></tr> -<tr><td><b>Num selected models</b></td><td>2,112</td></tr> -<tr><td><b>Total models tested</b></td><td>342,144</td></tr> -<tr><td><b>Total training measurements</b></td><td>192,177</td></tr> -<tr><td><b>Training measurement per allele</b></td><td>min=26; max=12,357; median=721.5</td></tr> -</table> -<p><b>Alleles included: </b>HLA-A0201 HLA-A0301 HLA-A0203 HLA-A1101 H-2-KB HLA-A3101 HLA-A0206 HLA-A6802 H-2-DB HLA-A0101 HLA-B0702 HLA-A2601 HLA-B1501 HLA-A0202 HLA-A6801 HLA-A3301 HLA-B2705 HLA-B0801 HLA-A2402 HLA-B4001 HLA-B3501 HLA-B5801 HLA-B5101 HLA-B5701 HLA-A3001 HLA-B1801 HLA-A2902 Mamu-A01 HLA-A6901 HLA-A2301 HLA-B4402 Mamu-A100101 HLA-A3002 HLA-B4601 Mamu-B17 HLA-B3901 HLA-B5301 HLA-B1517 HLA-B4403 Mamu-A02 Mamu-B01704 Mamu-A11 HLA-A0219 HLA-A2403 HLA-B5401 HLA-A0212 HLA-A8001 Mamu-B03 HLA-A3201 Mamu-B08 H-2-KD HLA-A0211 HLA-B4501 HLA-B4002 HLA-B0802 HLA-A2501 HLA-A0216 Patr-B0101 Mamu-A101101 Mamu-B52 HLA-B4801 Mamu-B01 HLA-B2703 HLA-B1509 Patr-A0901 H-2-KK HLA-B1503 Mamu-A2201 Mamu-A07 Patr-A0701 HLA-A2602 H-2-DD Mamu-A100201 HLA-A2603 Patr-A0101 HLA-C0401 HLA-B3801 H-2-LD HLA-B0803 Mamu-B3901 Mamu-B8301 Patr-B2401 HLA-C0602 Patr-A0301 HLA-B1542 HLA-B4506 HLA-A0217 HLA-B8301 Patr-A0401 Patr-B1301 HLA-B3503 HLA-C1402 HLA-EQCA100101 HLA-B4201 Mamu-A2601 HLA-B1402 HLA-C1502 HLA-C1203 HLA-C0501 HLA-B1502 HLA-C0303 Mamu-B1001 Mamu-B8701 Mamu-A20102 HLA-C0702 HLA-RT1A HLA-A0250 HLA-B7301 HLA-A0205 Mamu-A70103 Mamu-B6601 HLA-B2720 HLA-A3207 HLA-C0802 HLA-A6823 HLA-B7 HLA-A6601 HLA-A0207 HLA-A2 HLA-A11 HLA-A3215 HLA-B3701 HLA-E0103 HLA-BOLA601301 HLA-B4013 HLA-BOLAHD6 HLA-B5802 HLA-B1401 HLA-B5703 HLA-A0319 HLA-B8101 HLA-A0302</p> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [5]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">architecture_num_to_row</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"hyperparameters_architecture_num"</span><span class="p">)</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">df</span><span class="p">:</span> <span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> - -<span class="n">hyperparameters</span> <span class="o">=</span> <span class="p">[</span> - <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">architecture_num_to_row</span><span class="o">.</span><span class="n">columns</span> - <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"hyperparameters_"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">pandas</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span> - <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">architecture_num_to_row</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> - <span class="p">])</span><span class="o">.</span><span class="n">nunique</span><span class="p">()</span> <span class="o">></span> <span class="mi">1</span> -<span class="p">]</span> -<span class="n">architecture_num_to_hyperparameters</span> <span class="o">=</span> <span class="p">{}</span> -<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">architecture_num_to_row</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span> - <span class="n">architecture_num_to_hyperparameters</span><span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="n">hyperparameters_architecture_num</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span> - <span class="n">row</span><span class="p">[</span><span class="n">hyperparameters</span><span class="p">]</span><span class="o">.</span><span class="n">to_dict</span><span class="p">())</span> -</pre></div> - -</div> -</div> -</div> - -</div> -<div class="cell border-box-sizing text_cell rendered"> -<div class="prompt input_prompt"> -</div> -<div class="inner_cell"> -<div class="text_cell_render border-box-sizing rendered_html"> -<h1 id="Best-models">Best models<a class="anchor-link" href="#Best-models">¶</a></h1><p>This table gives the models most often selected for alleles with less than or equal to the given number of training samples.</p> - -</div> -</div> -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [6]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">result_df</span> <span class="o">=</span> <span class="p">[]</span> -<span class="n">cutoffs</span> <span class="o">=</span> <span class="p">[</span><span class="mi">100</span><span class="p">,</span> <span class="mi">500</span><span class="p">,</span> <span class="mi">1000</span><span class="p">,</span> <span class="n">numpy</span><span class="o">.</span><span class="n">inf</span><span class="p">]</span> -<span class="k">for</span> <span class="n">cutoff</span> <span class="ow">in</span> <span class="n">cutoffs</span><span class="p">:</span> - <span class="n">selected_rates</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span> - <span class="n">all_models_df</span><span class="o">.</span><span class="n">train_size</span> <span class="o"><=</span> <span class="n">cutoff</span> - <span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"hyperparameters_architecture_num"</span><span class="p">)</span><span class="o">.</span><span class="n">weight</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">ascending</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - <span class="n">best_architecture</span> <span class="o">=</span> <span class="n">selected_rates</span><span class="o">.</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> - <span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span> - <span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"hyperparameters_"</span><span class="p">,</span> <span class="s2">""</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="ow">in</span> - <span class="n">architecture_num_to_hyperparameters</span><span class="p">[</span><span class="n">best_architecture</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> - <span class="n">d</span><span class="p">[</span><span class="s2">"architecture selection rate (%)"</span><span class="p">]</span> <span class="o">=</span> <span class="n">selected_rates</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">best_architecture</span><span class="p">]</span> <span class="o">*</span> <span class="mi">100</span> - <span class="n">result_df</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> -<span class="n">result_df</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">result_df</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">cutoffs</span><span class="p">)</span> -<span class="n">result_df</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">"Training size cutoff"</span> -<span class="n">result_df</span><span class="o">.</span><span class="n">T</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[6]:</div> - -<div class="output_html rendered_html output_subarea output_execute_result"> -<div> -<table border="1" class="dataframe"> - <thead> - <tr style="text-align: right;"> - <th>Training size cutoff</th> - <th>100.0</th> - <th>500.0</th> - <th>1000.0</th> - <th>inf</th> - </tr> - </thead> - <tbody> - <tr> - <th>architecture selection rate (%)</th> - <td>3.27381</td> - <td>2.04545</td> - <td>2.27273</td> - <td>3.64583</td> - </tr> - <tr> - <th>architecture_num</th> - <td>112</td> - <td>81</td> - <td>112</td> - <td>27</td> - </tr> - <tr> - <th>dropout_probability</th> - <td>0.1</td> - <td>0</td> - <td>0.1</td> - <td>0.1</td> - </tr> - <tr> - <th>embedding_output_dim</th> - <td>8</td> - <td>8</td> - <td>8</td> - <td>8</td> - </tr> - <tr> - <th>fraction_negative</th> - <td>0.1</td> - <td>0</td> - <td>0.1</td> - <td>0</td> - </tr> - <tr> - <th>impute</th> - <td>True</td> - <td>True</td> - <td>True</td> - <td>False</td> - </tr> - <tr> - <th>layer_sizes</th> - <td>[64]</td> - <td>[12]</td> - <td>[64]</td> - <td>[12]</td> - </tr> - </tbody> -</table> -</div> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [7]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">all_scores</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">scores_auc</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span> -<span class="n">selected_scores</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">all_models_df</span><span class="o">.</span><span class="n">weight</span> <span class="o">></span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">scores_auc</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span> - -<span class="n">pyplot</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span> -<span class="n">seaborn</span><span class="o">.</span><span class="n">distplot</span><span class="p">(</span><span class="n">all_scores</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"All. Mean=</span><span class="si">%0.2f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">all_scores</span><span class="o">.</span><span class="n">mean</span><span class="p">())</span> -<span class="n">seaborn</span><span class="o">.</span><span class="n">distplot</span><span class="p">(</span><span class="n">selected_scores</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"Selected. Mean=</span><span class="si">%0.2f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">selected_scores</span><span class="o">.</span><span class="n">mean</span><span class="p">())</span> -<span class="c1">#seaborn.set_context('talk')</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'upper left'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="s2">"x-large"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">xmax</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"AUC"</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="s2">"x-large"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"AUCs across models and alleles"</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="s2">"xx-large"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[7]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x1177537b8></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -JCX1ZeLEySxc+Bg7d+4gJWU7f/7z3UyaNLnZJE0IIYTwpy7bUuWwde6klu093urV1pNv4eERTbad -d96FvPvuW3z22UoSEvo0u/8111zG8cefwD33/KXZ7fVbjpQaTnR0L4YPH0FwcHCTsiEhISxa9DRL -liziuuuuICQklMmTp3LjjX8E4IILLiYtbQ933XUrmqYxbJji9tvv4e9//yt5eblNjtceF110KUVF -RTz88F8wDINp02bwhz/cWrd98eIn2LRpI//73/sALFjwIM8//wwPPHAvlZWVjB07jqee+mfd+f3l -Lw/x9NNPcscdt1BdXc20aTO4+eY/HVWMQgghREfQjrZlwktmbm7LrTXNFO+wQI6sa81Q3hXExUXS -tvsnuhK5f4FL7l1gk/sXuOLiItuVDHTRlipJbIQQQggRWLpoUiWEEEII77W3h0caMXxJkiohhBCi -G1iXsxGXYXhV1mGzMSFh/JELijaRpEoIIYToBlyGgdt0e1fYu9xLtJFMqSCEEEII4QOSVAkhhBBC -+IAkVUIIIYQQPiBJlRBCCCGED0hSJYQQQgjhA100qTL9uLSN2+3m5Zdf4je/+TUzZ07izDNP4/77 -7yU7O8vrOh555AEWLLirzcduztdfryE391C793/mmcXcdNN1XpXNyTnAlCkTmD79FIqLi5ts//bb -tUyZMsFn5+YLLpeLRYv+xq9+NYv582fz7LNLWn3fYXFxMQ8+uID582dz7rnzePHF5xuUb2t9Qggh -uq8uO6VCW+bb8IX2ztnx/PNPs3btV9xyyx307z+AwsICli79N7///TW88sr/mn0nYEfJycnh3ntv -Z/nyN4iL693uetr6/j+bzca3337NGWfMb7B+zZrPsdm6Vt7+z38+zbp1P7Jw4RLKy8t58MEFRERE -cNllVzVb/p57bqOkpJi//e1JbDaNxx57mKqqKm644Q/tqk8IIUT31bW+8eqpnW+js5b2JnAff/wB -V155LSeddAoJCQkMHz6Shx56lPLycr7+eo1vL8oRmKZx1C9Ebo9x405ocq5ut5vvvlvLqFHHdXo8 -Lamurub999/mpptuZcSIUZxwwgSuv/5G3n77jWbLp6buZMuWTSxY8BCjRo1mxIhR3HHHvbz11utU -VVW2uT4hhBDdW5dtqQoUmmZjw4afmDVrDna7HYDg4BCWLXuF6OjounIrVnzE8uVLyc09RHLyQK6+ -+jomTpzcbJ3ff/8t//rXM2Rk7CMpqS8XX/xb5s07s277l19+xn/+s5TMzH307duPa6/9PaeeOoUL -LzwbTdO4/PKLufLKa7jyymvYvv1nnn76H+j6TuLj4znzzHO45JL/q0u+fvjhO557bgnZ2VmceOJJ -REf3avM1mDp1Os888yRVVVUEBwcDsHHjeuLi4unbtx8VFRV1ZY8Uz6pVK3jlleVkZu7D6XQyfvyJ -3HHHfURHR7Np0wYWLLiTG2+8hRdffJ6CgnzGjz+Re+65n+joaJYu/RfLlv27mXuksWTJP3E6g6iq -qmLcuOPrto0bN57Dhw+TnZ1FUlLfBvtlZ2cREhLCkCFD69YNGTKUmpoadu5MweFwtqk+IYQQ3VuX -bakKFBdffCmffPIh5503j0ceeYAVKz7i8OECkpL6EhYWDsCPP37PU0/9g2uvvYHly9/g7LPPY8GC -u9i+/ecm9aWl7WHBgjv59a8v5OWX3+SKK67hmWee5PPPVwNWsnL//fcyb958li9/g3nzzmTBgrvI -yNjHv//9H0zT5Kmn/sUll/wfhw8f5k9/uolTT53Cf//7Jn/84+28++5bvPrqcgAyMvZx991/YsaM -2bz00mscd9xYPv74/Tadv6ZpjBkzlrCwMH788fu69V999SXTp89sUPbw4YJW4/n55608+uiDXHrp -5bz22js8+ugTpKbqvPzy0ro6SkpK+PDD93jkkYUsWfI8O3em1G3/zW8u44MPVjZZ3n9/JaNHjyEv -7xDBwSF19wUgJqYXpmly6NDBJucWExNLVVUVxcVFdetycg4AUFh4uM31CSGE6N6kpeoo/fa3V9Cv -XzLvvfcWn322kk8//RhN0zj33PO5+ebb0DSNl19exiWX/B8zZswG4KyzzmXnzh288cYrPPjgow3q -e+21l5k7dx7z558DQGJiEtnZmbz++n+ZNWsO7777FlOmTOPCC38DwEUXXUplZSUVFRX07Gm1jEVF -RRESEsIrr/yHkSNH89vfXlFX17XX3sDixU9w6aWX89FH7zNkyDCuuOJqAC699HI2btxATU11m66B -ptmYPHkaa9euYerU6Zimydq1a3jyyWd57bWX68q9887/Wo0nKCiIO++8j9NOOx2A+PgEpkyZRlra -nro6TNPkpptuYejQYQCcdtoZ7NhhJachISGEhIS0GGdlZSXBwUEN1gUFWf+uqalpUn7UqNEkJvbl -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 -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [8]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">scores</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"allele"</span><span class="p">)</span><span class="o">.</span><span class="n">scores_auc</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">to_frame</span><span class="p">()</span><span class="o">.</span><span class="n">reset_index</span><span class="p">()</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s2">"scores_auc"</span><span class="p">,</span> <span class="n">ascending</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> -<span class="n">scores</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">training_sizes</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">scores</span><span class="o">.</span><span class="n">allele</span><span class="p">]</span><span class="o">.</span><span class="n">values</span> - -<span class="n">pyplot</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">30</span><span class="p">))</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Mean AUC over all models"</span><span class="p">)</span> -<span class="n">seaborn</span><span class="o">.</span><span class="n">barplot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="s2">"allele"</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="s2">"scores_auc"</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">scores</span><span class="p">,</span> <span class="n">orient</span><span class="o">=</span><span class="s2">"h"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">)</span> - -<span class="n">pyplot</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Mean AUC over all models"</span><span class="p">)</span> -<span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s2">"size"</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s2">"scores_auc"</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">scores</span><span class="p">,</span> <span class="n">logx</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[8]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre>(0.5, 1.0)</pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -vZK0Djdl2GO7k4DX2V4JIGk+sNj20cC1raA6A9p+/g8piepq4Be2N9S4NcD/N1InbK+T9Lik2ZQl -BYcDZ4/S14iIiIie1atJ61D92UvSnZTEcAg4A6CVsFbXARdJmmX7wWHttJYHbKQsBTjR9ipJ35T0 -Dcp61uW2v7yJviwCrqznL7N91wh9jYiIiOhpqYjVJQYGBoay5VVERMS219/fz4oVd5MPQ7fcllTE -6tWZ1q6TOsgRERHPjPzNnRiZae0SzWZzaOJrMMeWmBz1s2NLZfw6V8aus02O8ctM65bKTGsPmzp1 -KvnH05kydp0t49e5MnadLePXe5K0dolms0m+s9WZMnadLePXuTJ2nW1yjF+S5mdSktYuMTg4SKPR -mOhuREREdL2+vj6WLFk60d3oOT2TtNZKVLcCx9i+uu34t4Fv2j5xG19/T+B+4A22r63HpgAfBPYB -HgPeZPuBtnMuBFba/shY7TcaDbJ7QERERHSr7Sa6A8+wlcAxrReSXgjs8gxd+wTgEuDUtmN/DOxo -ey5wJqWiFpJ2l3QD8PpnqG8RERERk1rPzLRW9wLPlzTD9jpKydbPAM+TdCpwFCWJ/RlwJHAcJXHc -mVKa9VLgCGAv4Azbn5f0Y9t7Aki6Crjc9m0jXHsBcADwL5JeYPt7wP7AlwBs3yHpZTV2V+As4NVb -/TcQERER0YF6baYVSinWo+rzVwBfB6YCM20fansOsAPw8hqzq+3XAhcAi2wfBZxCmTmFcawCl3Qo -cJ/th4GPA4vrW7sBj7SFNiVtZ3tVrYyVFd4RERER9N5M6xClZOqHJP0AuI2SGG4ENtSZ0vXALEri -CnBPfVwDfL8+/zmwU33enlhOAZD0Xsos6hBwKLAQmF0/8t8R2LuWf10LzGg7fzvbG7fOrUZERER0 -j15LWrG9StJ04DTKOtJ+yoznEbbnSNoZ+BZPJaNjzaRuL2kX4EnKsgFsv6v1pqTdgX1tz2479mHg -eGA58EfAP0vaD7jv6d9hRERERPfpuaS1+hywwPb9kvqBDcB6Scvr+z8CnjvOti4BvgE8AKwa4f2/ -oCxJaPdR4JOUJHdQ0u31+AnD4iZ6A7qIiIiISSFlXLvEwMDAULa8ioiI2Pb6+/tZseJu8tWTLZcy -rj2sr69vorsQERHRE/I3d2JkprVLNJvNodWr1090N2ILzJw5nYxd58r4da6MXWebHOOXmdYtlZnW -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 -" -> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -62nBXREREelkHdXPqAV3RUREpJN1VHCbvyyIFtwVERGRTtLSrtKNpgV3RUREpJN1VHDTgrsiIiLS -yUIf3DSTVERERLpF6IObZpKKiIhItwj95ATNJBUREZFuEfrgVj9z1PM8crMlHn70NEefvoDrLbln -vYiIiEiohL6rtH4maW62xNAVv+KmblMRERHpNKEKbq7rcfTpC9dMRKiGs4cfPd1wf3WbioiISCcJ -VXB77Otnl5yIsG8wU7u9eiwiIiLSKUIV3F66NNlwPL+ipgV4RUREpJOFKrhdv6uPp0+N1I7nV9S0 -AK+IiIh0slAFt7e8+jqmpmZVURMREZGuFKrgFomooiYiIiLdK/TruImIiIh0CwU3ERERkZBQcBMR -EREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQ -cBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERER -kZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3ERERkZBQcBMREREJCQU3 -ERERkZBQcBMREREJCQU3ERERkZCIbXYDNovreRw7fpGhkRn2DWa47/BuIo6z2c0SERERWVSogpvr -ehx9+sK6hK1jxy/yhafOA3BqaByA19+xZ93aKiIiIrLeQhXcHvv62XULW0MjM0sei4iIiLSbUI1x -e+nSZMPxWsLWvsHMksciIiIi7SZUFbfrd/Xx9KmR2vFawtZ9h3cDNHS7ioiIiLSzlgY3Y4wD/D5w -BzALfNBae6bu/KuB3woOLwHvt9YWF3u+t7z6OqamZtclbEUcR2PaREREJFRa3VX6biBprb0X+GXg -Q/PO/yHwI9baNwCfAw4s9WSRiMN9h3ezbzDD0MgMx45fpOy6HH36Ag8/epqjT1/A9byWvBERERGR -zdbqrtL78QMZ1tonjDH3VE8YY24BrgI/Z4y5Dfi0tfb0ck947PhFHntyiJl8ma8+d5HPfPUl8sUK -iVgUe24M0OxQERER6Uytrrj1ARN1x2VjTPU1twOvA34HeCvwVmPMG5d7wqGRGWbyZaZyRfKFCiPj -s+Rm/eOZfFmzQ0VERKRjtbriNgn01h1HrLVu8PNV4Hlr7SkAY8zngHuALy31hIcObuNr3x7GcRzA -w4n467g5jkPZdTl0cBuDg71LPUVX07VZG12/1dO1Wxtdv7XR9Vs9Xbv20urgdgx4J/BXxpjXAs/U -nfeIONQAAAqySURBVDsDZI0xB4MJC68HHlruCQ/fsJXbrh/g+JmrxKIOpbJLPBYhEnG47foBDt+w -lZGRqZa8mbAbHOzVtVkDXb/V07VbG12/tdH1Wz1du7VpRehtdXD7JPCAMeZYcPygMea9QMZa+5Ax -5seAh40xAF+x1v7dck8YcRwefMchjh2/yLnL0+QLZXpSMfYPZrVtlYiIiHS0lgY3a60H/NS8m0/V -nf8ScGSlz6ulPERERKQbhWrnBBEREZFupuAmIiIiEhIKbiIiIiIhEaq9SgFcz+PY8YsN215pQoKI -iIh0g9AFt2PHL/KFp84DcGpoHNBOCSIiItIdQtdVOjQyg+d5TOdKjE7O8sTJYe1PKiIiIl0hdMFt -32CmtuVVoVhheDTPseMXN7tZIiIiIi0XuuB23+Hd7BzoIZmI0ptOkE3HtT+piIiIdIXQjXGLOA5H -Du1kZrZcu23fYGYTWyQiIiKyMUIX3MCvugENM0tFREREOl0og5u2vBIREZFuFLoxbiIiIiLdSsFN -REREJCQU3ERERERCQsFNREREJCRCOTlhJbS3qYiIiHSKjg9u//j0Bf72Ky9TLFdIxKJ4nscb7ty7 -2c0SERERWbGO7yr92rcv17bHmsoV+dq3L292k0RERERWpeODm4iIiEin6Pjg9ppDO+lNJ2p7m77m -0M7NbpKIiIjIqnT8GLf7D+/GQdtjiYiISPh1fHDT9lgiIiLSKUIf3LTch4iIiHSL0Ae3Y8cv8oWn -zgNwamgcQBU2ERER6Uihn5wwNDKz5LGIiIhIpwh9cNs3mFnyWERERKRThL6rtDpLVLNGRUREpNOF -Prhp1qiIiIh0i9AFN80iFRERkW4VuuCmWaQiIiLSrUI3OUGzSEVERKRbhS64aRapiIiIdKvQdZVq -FqmIiIh0q9BV3ERERES6VegqbpqcICIiIt0qdBU3TU4QERGRbhW64KbJCSIiItKtQtdVqskJIiIi -0q1CF9y0xZWIiIh0q9B1lYqIiIh0q1BV3B554mVOnrmqPUpFRESkK4UquH32Ky9SKrtaBkRERES6 -UqiCW5XneTxxcrhhgoKqbyIiItLpQhncZvJl/2u2rOqbiIiIdI1QTU54+703cMu+fnYO9JBNx2u3 -axFeERER6QahCm4PHDnAe996M0cO7Wy4XYvwioiISDcIZVepFuEVERGRbhTK4KZFeEVERKQbtTS4 -GWMc4PeBO4BZ4IPW2jN1538W+CBwObjpX1hrT7eyTSIiIiJh1eqK27uBpLX2XmPMEeBDwW1VrwI+ -YK19qsXtEBEREQm9Vk9OuB/4HIC19gngnnnnXwX8sjHmqDHm/2pxW0RERERCrdXBrQ+YqDsuG2Pq -X/Nh4CeBNwH3G2Pe3uL2iIiIiIRWq7tKJ4HeuuOItdatO/7v1tpJAGPMZ4C7gM8u8XzO4GDvEqdl -Obp+a6Prt3q6dmuj67c2un6rp2vXXlpdcTsGvB3AGPNa4JnqCWNMH/CsMSYdTGJ4M/DNFrdHRERE -JLQcz/Na9uR1s0oPBzc9iD+uLWOtfcgY8z7g3+DPOH3MWvsrLWuMiIiISMi1NLiJiIiIyPoJ1ZZX -IiIiIt1MwU1EREQkJBTcREREREIiFHuVLrd1VjczxsSAPwGuBxLAfwZOAH8KuMCz1tp/Gdz3x4Gf -AErAf7bWfsYYkwL+AtiBv3zLD1trr27w29h0xpgdwDeAtwIVdP2aEiyc/U+BOP7f0S+ja9eU4O/u -n+H/3S0DP45+95oS7MTzG9baNxljbmSN1yxY9eC3g/s+Yq391Q1/Uxto3vW7E/gd/N/BAvz/7d1t -iFRVHMfxr2lKxaqUPZAVSdEvhAitLE1dexBNgogCHzDJCkpMIjHLwiCKyggzEyyUwESTHjBMMLOS -WvOFRkZE+bcCfRNYVuITFML24pzRcd3d2U13Z+/O7/Nm9p65s9z5MXfmf+859x6mRcQfzq955dmV -tU0BHo2IEXm5Q7Mryhm3Y1NnAfNIU2dZMhXYFxGjgfHAElI+T0dEPXCGpLskXQjMAobn9V6SdCYw -A/g+v34lML8ab6Ka8g/om8CR3OT82kBSPTA875djgMtwdu0xAegZETcDzwMv4vwqkvQEsAzok5tO -R2ZLgUkRMQq4UdK1nfeOOlcz+S0CZkbErcBa4Enn17xmskPSEOCBsuUOz64ohVulqbNq2Xsc/wD0 -JB01DY2Ihty2ARgLDAO2RMTRfNPjn0lnMI9lm9e9vbM2vAt5lbTz/Ab0wPm11TjSvRg/AtYB63F2 -7bEL6JV7FPqRjridX2W/AHeXLV93CpndJqkO6B0Ru3P7Rrp3lk3zmxgRpXus9iL1ajm/5p2QnaTz -gBdItzUr6fDsilK4VZo6q2ZFxJGIOJw/AO8Dz5CKj5KDpPzqODHDQ6Qfi/L20ro1Q9L9wO8RsYnj -uZV/tpxfywaQ7st4L+lochXOrj0OAYOAncBbpO4q77sVRMRa0gFqyalkVmo70OR/9Du9W911NM0v -IvYCSBoBzARe4+TfXOfHidnlGmQ5MBs4XLZah2dXlOKn0tRZNU3SpcAXwIqIWEMa61FSB+wnZdi3 -SfvfnJhtad1aMh0YK2kz6ajoHeD8suedX8v+BDbmI8tdpCP18i8dZ9e6x4FPIkIc/+z1Lnve+bXN -qX7fNS16ay5LSRNJY1Qn5HGSzq+yocCVpN6ad4HBkhbSCdkVpXBrceqsWpf70zcCcyNiRW7eIWl0 -/vsOoAHYDoyU1FtSP+Bq4AdgKznb/NhADYmI+oi4JQ80/Q64D9jg/NpkC2kMB5IuBs4BPs9j38DZ -VfIXx4/A95O6qXY4v3b79lT214g4CPwjaVDuth5HDWUpaSrpTNuYiNiTm7fh/FrTIyK+iYhr8tjA -ScCPETGbTsiuEFeVkgZMjpX0dV6eXs2N6WLmAf2B+ZKeBRpJ/e1v5AGRPwEfRESjpMWkH9sepMG8 -/0paCqyQ1EC6omhKVd5F1zIHWOb8WpevlBolaRspkxnAbmC5s2uTRcDbkr4iXZX7FGm+ZufXPqdj -f30EWE06mfFpRGzv9HdRBbm773VgD7BWUiPwZUQ85/xa1eKUUxGxt6Oz85RXZmZmZgVRlK5SMzMz -s5rnws3MzMysIFy4mZmZmRWECzczMzOzgnDhZmZmZlYQLtzMzMzMCsKFm5nVHEnrJV1U7e0wM2sv -38fNzMzMrCCKMnOCmdn/ImkgsAo4mzSv5WPAGqCeNNvDeNKd0PsDAyKir6QbgIXAWcA+4OGy6YDM -zKrGXaVm1t09CHwcEcOAucBI8pQ1ETEvIoYANwF7gel56qRlwOSIuJ5UwC2vypabmTXhws3MurvP -gDmSVgEDgSWkOQTLLQc2R8SHwFXAFcA6STuAl4HLO29zzcxa5q5SM+vWImKrpMHAncBEYDplk0RL -mkPqIp2Wm3oCv0bE0Px8D8AXMphZl+AzbmbWrUlaAEyLiJXALGBo2XPjSV2pk8teshM4V9LIvPwQ -aYycmVnV+apSM+vWJF0CrAbqgKPAAuAVYAywiXSGbX9+bATuAS4AFgN9gAOkwm93J2+6mdlJXLiZ -mZmZFYS7Ss3MzMwKwoWbmZmZWUG4cDMzMzMrCBduZmZmZgXhws3MzMysIFy4mZmZmRWECzczMzOz -gnDhZmZmZlYQ/wGJNgKxqRN/kQAAAABJRU5ErkJggg== -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [9]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">scores</span> <span class="o">=</span> <span class="n">all_models_df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"hyperparameters_dropout_probability"</span><span class="p">)</span><span class="o">.</span><span class="n">scores_auc</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">to_frame</span><span class="p">()</span><span class="o">.</span><span class="n">reset_index</span><span class="p">()</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s2">"scores_auc"</span><span class="p">,</span> <span class="n">ascending</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> - -<span class="n">pyplot</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Dropout"</span><span class="p">)</span> -<span class="n">ax</span> <span class="o">=</span> <span class="n">seaborn</span><span class="o">.</span><span class="n">barplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s2">"hyperparameters_dropout_probability"</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s2">"scores_auc"</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">all_models_df</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[9]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre>(0.5, 1)</pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [10]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">count_impute</span> <span class="o">=</span> <span class="n">selected_models_df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"allele"</span><span class="p">)</span><span class="o">.</span><span class="n">hyperparameters_impute</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> - -<span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span><span class="n">training_sizes</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">alleles</span><span class="p">],</span> <span class="n">count_impute</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">alleles</span><span class="p">])</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">xmax</span><span class="o">=</span><span class="mi">10000</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mi">16</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Number of models (out of 16 total in each allele's ensemble)</span><span class="se">\n</span><span class="s2">that use imputation"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Training points for allele"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Num models"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[10]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x11e086dd8></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [11]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">impute_cums_df</span> <span class="o">=</span> <span class="n">selected_models_df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"allele"</span><span class="p">)</span><span class="o">.</span><span class="n">hyperparameters_impute</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">to_frame</span><span class="p">()</span> -<span class="n">impute_cums_df</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">training_sizes</span> -<span class="n">impute_cums_df</span> <span class="o">=</span> <span class="n">impute_cums_df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s2">"size"</span><span class="p">)</span> -<span class="n">impute_cums_df</span><span class="p">[</span><span class="s2">"cum_mean"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span> - <span class="n">impute_cums_df</span><span class="o">.</span><span class="n">hyperparameters_impute</span><span class="o">.</span><span class="n">cumsum</span><span class="p">()</span> <span class="o">/</span> <span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">impute_cums_df</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> -<span class="n">impute_cums_df</span> -<span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span><span class="s2">"size"</span><span class="p">,</span> <span class="s2">"cum_mean"</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">impute_cums_df</span><span class="p">,</span> <span class="n">fit_reg</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">logx</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xscale</span><span class="p">(</span><span class="s2">"log"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"IEDB Measurements"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Fraction of models using imputation"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span> - <span class="s2">"Fraction of best models for alleles with <= x measurements</span><span class="se">\n</span><span class="s2">"</span> - <span class="s2">"that use imputation"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[11]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x11977ab00></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [12]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">train_size</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">hyperparameters_dropout_probability</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">x_jitter</span><span class="o">=.</span><span class="mi">015</span><span class="p">,</span> - <span class="n">y_jitter</span><span class="o">=.</span><span class="mi">015</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Dropout rate of selected models"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Training points for allele"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Dropout rate"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[12]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x11f7f0c50></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -wM823LolEjK0oCTXdiCWKO8DWQ6W4+VDvCVybQeyede5+P/3yZveCooFE52JmSzf/MFFTx7FXZ7X -xc25DI3O1uRQjrx8hbFYOnAmlTAth+lEpupA+oMTE0XbRwfH+eG5GN0d0WCQ7+tpDX72t5dKpdnI -8FiCyXianOeQh8cSSz5vJXb2tPLCqQlypkXetIPPxnEcLk+m+Nxjp5c8I1pvYT+FYi2wkEM5JKV8 -R+ELUsqcEOI/AmtKHDIa1nFwcymVQlbLxdA1Qsa8gyp1HtWwK9QRzySzNEfd0JRtOzQVSM0P9HbU -dN6RiTnaWsIkUrlgtlTx+g5cnkxVfK+S+ORcxnW8WzqbOXpijB2bW+nb0kpzU4hdPW3ce2h7TfYV -Umk2MjSaCK6VN22GRuvjUAq9q65rOLYD7n/MzOV4/IURmiIGtuPwuhpnK42aTSkUG5mFHEp5WRMg -pXTWmvRKrQN9LRQ6Ect2lnXu9tYwiVS+aBYRDs3nKaJhg327u2hpCtPX08obbt/N1NTiVdn+zGGx -deABqlUiN4U1Mvlyp5LJWSRTeZKpfDDo3/+qncseRAvDUMlUnm8/P1K2MFgskeW3P/Z9phM5utoj -/OF776ApVEtar5hLkynaWsJAmInpFKlssey/ZTvMZUy+8exwzQ6lUWE/xbVBLbnKjchCd7jQo/6G -asMzdI2ot/iUpuGpAi9vtmPoGm+7ezfX9bajaW6orCVqsGNLK20tYbo7mmhvjdDSFObhN97Iaw7v -QNc1bMfhyWOX+dxjp3ny2GXsCjGtew9tp29LK2alpFEJ3e3l4pIAt9ywpeLr0bDOtu5mWpvnB/Sr -GUT9MFkylSOezDIeT5P2pGj89SHjiSzj8Qx5y2Y8nuH3/+aZq7oWuM6jmruNVVjpsho7NjczGU9z -eXKOyXiaHZsrKz4rFJX41NdP8oOT44zGUvzg5Dif+vrJ1TZpRVjocfCgEOJchdc1YOkxkDWGrs3P -GuxlzkQq0RQxOD86h+lAd3sTOdPi0HWbuXFXJ094IRQoz0s89fIVvnpkiGzexHHg6Ikx7ty/rSh2 -r2saTdEQdg2OrtrCW60tUVqbQsEsxOfQdd3sH9gchHkq2bgU/DDZl586h2U7WDkrcCShkLvoV6kN -U0solCjk7pt7OXUxzsXx5CKzt9pzIKdHZkhl3d+FadmcHpnhda/qW5Z9paj8zMbn4nhywe2NykIO -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 -CcX/A806CSYCWac5AAAAAElFTkSuQmCC -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [13]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">train_size</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">hyperparameters_embedding_output_dim</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">x_jitter</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> - <span class="n">y_jitter</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Embedding output dimensions of selected models"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Training points for allele"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Embedding output dimensions"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[13]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x11f7e65c0></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [14]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">train_size</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">hyperparameters_layer_sizes</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">x_jitter</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> - <span class="n">y_jitter</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Hidden layer size of selected models"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Training points for allele"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Hidden layer size"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[14]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x12214b940></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -AElFTkSuQmCC -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [15]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">seaborn</span><span class="o">.</span><span class="n">regplot</span><span class="p">(</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">hyperparameters_embedding_output_dim</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">selected_models_df</span><span class="o">.</span><span class="n">hyperparameters_layer_sizes</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> - <span class="n">x_jitter</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> - <span class="n">y_jitter</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">xmin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="n">ymin</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Hidden layer size vs. embedding output dims of selected models"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Embedding output dimensions"</span><span class="p">)</span> -<span class="n">pyplot</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Hidden layer size"</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt output_prompt">Out[15]:</div> - - -<div class="output_text output_subarea output_execute_result"> -<pre><matplotlib.text.Text at 0x12214b710></pre> -</div> - -</div> - -<div class="output_area"><div class="prompt"></div> - - -<div class="output_png output_subarea "> -<img src="data:image/png;base64,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 -kf8PCsz+fJ3oB8IAAAAASUVORK5CYII= -" -> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [16]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">log_path</span> <span class="o">=</span> <span class="n">get_path</span><span class="p">(</span><span class="s2">"models_class1_allele_specific_ensemble"</span><span class="p">,</span> <span class="s2">"GENERATE.sh"</span><span class="p">)</span> -<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span> - <span class="n">di</span><span class="o">.</span><span class="n">display_html</span><span class="p">(</span><span class="s2">"<h1>Model selection invocation</h1><pre></span><span class="si">%s</span><span class="s2"></pre>"</span> <span class="o">%</span> <span class="n">fd</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt"></div> - -<div class="output_html rendered_html output_subarea "> -<h1>Model selection invocation</h1><pre>#!/bin/bash - -if [[ $# -eq 0 ]] ; then - echo 'WARNING: This script is intended to be called with additional arguments to pass to mhcflurry-class1-allele-specific-cv-and-train' - echo 'See README.md' -fi - -set -e -set -x - -DOWNLOAD_NAME=models_class1_allele_specific_ensemble -SCRATCH_DIR=/tmp/mhcflurry-downloads-generation -SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") -export PYTHONUNBUFFERED=1 - -mkdir -p "$SCRATCH_DIR" -rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" -mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" - -# Send stdout and stderr to a logfile included with the archive. -exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") -exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) - -# Log some environment info -date -pip freeze -git rev-parse HEAD -git status - -cd $SCRATCH_DIR/$DOWNLOAD_NAME - -mkdir models - -cp $SCRIPT_DIR/models.py . -python models.py > models.json - -time mhcflurry-class1-allele-specific-ensemble-train \ - --ensemble-size 16 \ - --model-architectures models.json \ - --train-data "$(mhcflurry-downloads path data_combined_iedb_kim2014)/combined_human_class1_dataset.csv" \ - --min-samples-per-allele 20 \ - --out-manifest selected_models.csv \ - --out-model-selection-manifest all_models.csv \ - --out-models models \ - --verbose \ - "$@" - -bzip2 all_models.csv -cp $SCRIPT_ABSOLUTE_PATH . -tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * - -echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" -</pre> -</div> - -</div> - -</div> -</div> - -</div> -<div class="cell border-box-sizing code_cell rendered"> -<div class="input"> -<div class="prompt input_prompt">In [17]:</div> -<div class="inner_cell"> - <div class="input_area"> -<div class=" highlight hl-ipython3"><pre><span></span><span class="n">log_path</span> <span class="o">=</span> <span class="n">get_path</span><span class="p">(</span><span class="s2">"models_class1_allele_specific_ensemble"</span><span class="p">,</span> <span class="s2">"LOG.txt"</span><span class="p">)</span> -<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span> - <span class="n">lines</span> <span class="o">=</span> <span class="n">fd</span><span class="o">.</span><span class="n">readlines</span><span class="p">(</span><span class="mi">100000</span><span class="p">)</span> - <span class="n">di</span><span class="o">.</span><span class="n">display_html</span><span class="p">(</span><span class="s2">"<h1>Model selection log (beginning)</h1><pre></span><span class="si">%s</span><span class="s2"></pre>"</span> <span class="o">%</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">),</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> -</pre></div> - -</div> -</div> -</div> - -<div class="output_wrapper"> -<div class="output"> - - -<div class="output_area"><div class="prompt"></div> - -<div class="output_html rendered_html output_subarea "> -<h1>Model selection log (beginning)</h1><pre>+ date -Thu Mar 16 13:18:34 UTC 2017 -+ pip freeze -alabaster==0.7.9 -anaconda-clean==1.0 -anaconda-client==1.5.1 -anaconda-navigator==1.3.1 -appdirs==1.4.0 -argcomplete==1.0.0 -astroid==1.4.7 -astropy==1.2.1 -Babel==2.3.4 -backports.shutil-get-terminal-size==1.0.0 -beautifulsoup4==4.5.1 -biopython==1.68 -bitarray==0.8.1 -blaze==0.10.1 -bokeh==0.12.2 -boto==2.42.0 -bottle==0.12.13 -Bottleneck==1.1.0 -cffi==1.7.0 -chest==0.2.3 -click==6.6 -climate==0.4.6 -cloudpickle==0.2.1 -clyent==1.2.2 -colorama==0.3.7 -conda==4.2.9 -conda-build==2.0.2 -configobj==5.0.6 -contextlib2==0.5.3 -cryptography==1.5 -CVXcanon==0.1.1 -cvxpy==0.4.8 -cycler==0.10.0 -Cython==0.24.1 -cytoolz==0.8.0 -dask==0.11.0 -datacache==0.4.20 -datashape==0.5.2 -decorator==4.0.10 -dill==0.2.5 -docutils==0.12 -downhill==0.4.0 -dynd==0.7.3.dev1 -ecos==2.0.4 -et-xmlfile==1.0.1 -fancyimpute==0.1.0 -fastcache==1.0.2 -filelock==2.0.6 -Flask==0.11.1 -Flask-Cors==2.1.2 -gevent==1.1.2 -google-api-python-client==1.5.5 -greenlet==0.4.10 -gtfparse==0.0.6 -h5py==2.6.0 -HeapDict==1.0.0 -httplib2==0.9.2 -humanize==0.5.1 -idna==2.1 -imagesize==0.7.1 -ipdb==0.10.2 -ipykernel==4.5.0 -ipython==5.1.0 -ipython-genutils==0.1.0 -ipywidgets==5.2.2 -itsdangerous==0.24 -jdcal==1.2 -jedi==0.9.0 -Jinja2==2.8 -joblib==0.10.3 -jsonschema==2.5.1 -jupyter==1.0.0 -jupyter-client==4.4.0 -jupyter-console==5.0.0 -jupyter-core==4.2.0 -Keras==1.2.0 -knnimpute==0.0.1 --e git+git@github.com:hammerlab/kubeface.git@91fa80a571b9f870c4ec945b834a97fdf863fbc7#egg=kubeface -lazy-object-proxy==1.2.1 -llvmlite==0.13.0 -locket==0.2.0 -lxml==3.6.4 -MarkupSafe==0.23 -matplotlib==1.5.3 -memoized-property==1.0.3 --e git+git@github.com:hammerlab/mhcflurry.git@2925ce8d6c08e8ac0170504b06f1be384a0fc169#egg=mhcflurry -mhcnames==0.1.0 -mhctools==0.4.1 -mistune==0.7.3 -mock==2.0.0 -mpmath==0.19 -multipledispatch==0.4.8 -multiprocess==0.70.4 -nb-anacondacloud==1.2.0 -nb-conda==2.0.0 -nb-conda-kernels==2.0.0 -nbconvert==4.2.0 -nbformat==4.1.0 -nbpresent==3.0.2 --e git+git@github.com:hammerlab/neon.git@f343737d19e1b9509137bf63b9d291d2d8c8bcaf#egg=neon -networkx==1.11 -nltk==3.2.1 -nose==1.3.7 -notebook==4.2.3 -numba==0.28.1 -numexpr==2.6.1 -numpy==1.11.1 -oauth2client==4.0.0 -odo==0.5.0 -openpyxl==2.3.2 -pandas==0.18.1 -parse==1.6.6 -partd==0.3.6 -path.py==0.0.0 -pathlib2==2.1.0 -patsy==0.4.1 -pbr==1.10.0 -pep8==1.7.0 -pepdata==0.7.0 -pexpect==4.0.1 -pickleshare==0.7.4 -Pillow==3.3.1 -pkginfo==1.3.2 -plac==0.9.6 -ply==3.9 -progressbar33==2.4 -prompt-toolkit==1.0.3 -psutil==4.3.1 -ptyprocess==0.5.1 -py==1.4.31 -pyasn1==0.1.9 -pyasn1-modules==0.0.8 -pycosat==0.6.1 -pycparser==2.14 -pycrypto==2.6.1 -pycurl==7.43.0 -pyensembl==1.0.3 -pyflakes==1.3.0 -Pygments==2.1.3 -pylint==1.5.4 -pyopen==0.0.6 -pyOpenSSL==16.0.0 -pyparsing==2.1.4 -pytest==2.9.2 -python-dateutil==2.5.3 -pytz==2016.6.1 -PyVCF==0.6.8 -PyYAML==3.12 -pyzmq==15.4.0 -QtAwesome==0.3.3 -qtconsole==4.2.1 -QtPy==1.1.2 -redis==2.10.5 -requests==2.11.1 -rope-py3k==0.9.4.post1 -rsa==3.4.2 -ruamel-yaml===-VERSION -scikit-image==0.12.3 -scikit-learn==0.18.1 -scipy==0.18.1 -scs==1.2.6 -seaborn==0.7.1 -sercol==0.0.2 -serializable==0.1.1 -simplegeneric==0.8.1 -simplejson==3.10.0 -singledispatch==3.4.0.3 -six==1.10.0 -sklearn==0.0 -snowballstemmer==1.2.1 -sockjs-tornado==1.0.3 -Sphinx==1.4.6 -spyder==3.0.0 -SQLAlchemy==1.0.13 -statsmodels==0.6.1 -sympy==1.0 -tables==3.2.3.1 -terminado==0.6 -Theano==0.8.2 -tinytimer==0.0.0 -toolz==0.8.0 -tornado==4.4.1 -traitlets==4.3.0 -typechecks==0.0.2 -unicodecsv==0.14.1 -uritemplate==3.0.0 -varcode==0.5.11 -wcwidth==0.1.7 -Werkzeug==0.11.11 -widgetsnbextension==1.2.6 -wrapt==1.10.6 -xlrd==1.0.0 -XlsxWriter==0.9.3 -xlwt==1.1.2 -You are using pip version 8.1.2, however version 9.0.1 is available. -You should consider upgrading via the 'pip install --upgrade pip' command. -+ git rev-parse HEAD -2925ce8d6c08e8ac0170504b06f1be384a0fc169 -+ git status -On branch add-class1-ensemble -Your branch is up-to-date with 'origin/add-class1-ensemble'. -nothing to commit, working directory clean -+ cd /tmp/mhcflurry-downloads-generation/models_class1_allele_specific_ensemble -+ mkdir models -+ cp /home/tim/sinai/git/mhcflurry/downloads-generation/models_class1_allele_specific_ensemble/models.py . -+ python models.py -Using Theano backend. -/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. - "This module will be removed in 0.20.", DeprecationWarning) -Models: 162 -++ mhcflurry-downloads path data_combined_iedb_kim2014 -Using Theano backend. -/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. - "This module will be removed in 0.20.", DeprecationWarning) -+ mhcflurry-class1-allele-specific-ensemble-train --ensemble-size 16 --model-architectures models.json --train-data /home/tim/.local/share/mhcflurry/4/0.0.8/data_combined_iedb_kim2014//combined_human_class1_dataset.csv --min-samples-per-allele 20 --out-manifest selected_models.csv --out-model-selection-manifest all_models.csv --out-models models --verbose --parallel-backend kubeface --target-tasks 10000 --kubeface-backend kubernetes --kubeface-storage gs://kubeface-tim --kubeface-worker-image hammerlab/mhcflurry-misc:latest --kubeface-kubernetes-task-resources-memory-mb 6000 --kubeface-worker-path-prefix venv-py3/bin --kubeface-max-simultaneous-tasks 200 --kubeface-speculation-max-reruns 3 --kubeface-cache-key-prefix tim-note-tim-2017-03-12-16-37-22-27499bde -Using Theano backend. -/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. - "This module will be removed in 0.20.", DeprecationWarning) -To show stack trace, run: -kill -s USR1 992 -INFO:root:Running with arguments: Namespace(alleles=None, dask_scheduler=None, ensemble_size=16, kubeface_backend='kubernetes', kubeface_cache_key_prefix='tim-note-tim-2017-03-12-16-37-22-27499bde', kubeface_kubernetes_cluster=None, kubeface_kubernetes_image_pull_policy='Always', kubeface_kubernetes_retries=12, kubeface_kubernetes_task_resources_cpu=1, kubeface_kubernetes_task_resources_memory_mb=6000.0, kubeface_local_process_docker_command='docker', kubeface_max_simultaneous_tasks=200, kubeface_never_cleanup=False, kubeface_poll_seconds=30.0, kubeface_speculation_max_reruns=3, kubeface_speculation_percent=20, kubeface_speculation_runtime_percentile=99, kubeface_storage='gs://kubeface-tim', kubeface_wait_to_raise_task_exception=False, kubeface_worker_image='hammerlab/mhcflurry-misc:latest', kubeface_worker_kubeface_install_command='{pip} install https://github.com/hammerlab/kubeface/archive/master.zip', kubeface_worker_kubeface_install_policy='if-not-present', kubeface_worker_path_prefix='venv-py3/bin', kubeface_worker_pip='pip', kubeface_worker_pip_packages=[], max_models=None, min_samples_per_allele=20, model_architectures=<_io.TextIOWrapper name='models.json' mode='r' encoding='UTF-8'>, num_local_processes=None, num_local_threads=1, out_manifest='selected_models.csv', out_model_selection_manifest='all_models.csv', out_models_dir='models', parallel_backend='kubeface', quiet=False, target_tasks=10000, train_data='/home/tim/.local/share/mhcflurry/4/0.0.8/data_combined_iedb_kim2014//combined_human_class1_dataset.csv', verbose=True) -Using parallel backend: <Kubeface backend, client=<kubeface.client.Client object at 0x7fe5429fdac8>> -INFO:root:Read 162 model architectures -INFO:root:Loaded training data: Dataset(n=192550, alleles=['ELA-A1', 'Gogo-B0101', 'H-2-DB', 'H-2-DD', 'H-2-KB', 'H-2-KBM8', 'H-2-KD', 'H-2-KK', 'H-2-LD', 'H-2-LQ', 'HLA-A0101', 'HLA-A0201', 'HLA-A0202', 'HLA-A0203', 'HLA-A0204', 'HLA-A0205', 'HLA-A0206', 'HLA-A0207', 'HLA-A0210', 'HLA-A0211', 'HLA-A0212', 'HLA-A0216', 'HLA-A0217', 'HLA-A0219', 'HLA-A0250', 'HLA-A0301', 'HLA-A0302', 'HLA-A0319', 'HLA-A1', 'HLA-A11', 'HLA-A1101', 'HLA-A1102', 'HLA-A2', 'HLA-A2301', 'HLA-A24', 'HLA-A2402', 'HLA-A2403', 'HLA-A2501', 'HLA-A26', 'HLA-A2601', 'HLA-A2602', 'HLA-A2603', 'HLA-A2902', 'HLA-A3', 'HLA-A3/11', 'HLA-A3001', 'HLA-A3002', 'HLA-A3101', 'HLA-A3201', 'HLA-A3207', 'HLA-A3215', 'HLA-A3301', 'HLA-A6601', 'HLA-A6801', 'HLA-A6802', 'HLA-A6823', 'HLA-A6901', 'HLA-A7401', 'HLA-A8001', 'HLA-B0702', 'HLA-B0801', 'HLA-B0802', 'HLA-B0803', 'HLA-B1401', 'HLA-B1402', 'HLA-B1501', 'HLA-B1502', 'HLA-B1503', 'HLA-B1509', 'HLA-B1517', 'HLA-B1542', 'HLA-B1801', 'HLA-B27', 'HLA-B2701', 'HLA-B2702', 'HLA-B2703', 'HLA-B2704', 'HLA-B2705', 'HLA-B2706', 'HLA-B2710', 'HLA-B2720', 'HLA-B3501', 'HLA-B3503', 'HLA-B3508', 'HLA-B3701', 'HLA-B3801', 'HLA-B39', 'HLA-B3901', 'HLA-B40', 'HLA-B4001', 'HLA-B4002', 'HLA-B4013', 'HLA-B4201', 'HLA-B4202', 'HLA-B44', 'HLA-B4402', 'HLA-B4403', 'HLA-B4501', 'HLA-B4506', 'HLA-B4601', 'HLA-B4801', 'HLA-B51', 'HLA-B5101', 'HLA-B5201', 'HLA-B5301', 'HLA-B5401', 'HLA-B5701', 'HLA-B5702', 'HLA-B5703', 'HLA-B58', 'HLA-B5801', 'HLA-B5802', 'HLA-B60', 'HLA-B62', 'HLA-B7', 'HLA-B7301', 'HLA-B8', 'HLA-B8101', 'HLA-B8301', 'HLA-BOLA102101', 'HLA-BOLA200801', 'HLA-BOLA201201', 'HLA-BOLA402401', 'HLA-BOLA601301', 'HLA-BOLA601302', 'HLA-BOLAHD6', 'HLA-C0303', 'HLA-C0401', 'HLA-C0501', 'HLA-C0602', 'HLA-C0702', 'HLA-C0802', 'HLA-C1', 'HLA-C1203', 'HLA-C1402', 'HLA-C1502', 'HLA-C4', 'HLA-E0101', 'HLA-E0103', 'HLA-EQCA100101', 'HLA-RT1A', 'HLA-RT1BL', 'HLA-SLA10401', 'Mamu-A01', 'Mamu-A02', 'Mamu-A07', 'Mamu-A100101', 'Mamu-A100201', 'Mamu-A101101', 'Mamu-A11', 'Mamu-A20102', 'Mamu-A2201', 'Mamu-A2601', 'Mamu-A70103', 'Mamu-B01', 'Mamu-B01704', 'Mamu-B03', 'Mamu-B04', 'Mamu-B06502', 'Mamu-B08', 'Mamu-B1001', 'Mamu-B17', 'Mamu-B3901', 'Mamu-B52', 'Mamu-B6601', 'Mamu-B8301', 'Mamu-B8701', 'Patr-A0101', 'Patr-A0301', 'Patr-A0401', 'Patr-A0602', 'Patr-A0701', 'Patr-A0901', 'Patr-B0101', 'Patr-B0901', 'Patr-B1301', 'Patr-B1701', 'Patr-B2401']) -INFO:root:Filtered training dataset to alleles with >= 20 observations: Dataset(n=192177, alleles=['H-2-DB', 'H-2-DD', 'H-2-KB', 'H-2-KD', 'H-2-KK', 'H-2-LD', 'HLA-A0101', 'HLA-A0201', 'HLA-A0202', 'HLA-A0203', 'HLA-A0205', 'HLA-A0206', 'HLA-A0207', 'HLA-A0211', 'HLA-A0212', 'HLA-A0216', 'HLA-A0217', 'HLA-A0219', 'HLA-A0250', 'HLA-A0301', 'HLA-A0302', 'HLA-A0319', 'HLA-A11', 'HLA-A1101', 'HLA-A2', 'HLA-A2301', 'HLA-A2402', 'HLA-A2403', 'HLA-A2501', 'HLA-A2601', 'HLA-A2602', 'HLA-A2603', 'HLA-A2902', 'HLA-A3001', 'HLA-A3002', 'HLA-A3101', 'HLA-A3201', 'HLA-A3207', 'HLA-A3215', 'HLA-A3301', 'HLA-A6601', 'HLA-A6801', 'HLA-A6802', 'HLA-A6823', 'HLA-A6901', 'HLA-A8001', 'HLA-B0702', 'HLA-B0801', 'HLA-B0802', 'HLA-B0803', 'HLA-B1401', 'HLA-B1402', 'HLA-B1501', 'HLA-B1502', 'HLA-B1503', 'HLA-B1509', 'HLA-B1517', 'HLA-B1542', 'HLA-B1801', 'HLA-B2703', 'HLA-B2705', 'HLA-B2720', 'HLA-B3501', 'HLA-B3503', 'HLA-B3701', 'HLA-B3801', 'HLA-B3901', 'HLA-B4001', 'HLA-B4002', 'HLA-B4013', 'HLA-B4201', 'HLA-B4402', 'HLA-B4403', 'HLA-B4501', 'HLA-B4506', 'HLA-B4601', 'HLA-B4801', 'HLA-B5101', 'HLA-B5301', 'HLA-B5401', 'HLA-B5701', 'HLA-B5703', 'HLA-B5801', 'HLA-B5802', 'HLA-B7', 'HLA-B7301', 'HLA-B8101', 'HLA-B8301', 'HLA-BOLA601301', 'HLA-BOLAHD6', 'HLA-C0303', 'HLA-C0401', 'HLA-C0501', 'HLA-C0602', 'HLA-C0702', 'HLA-C0802', 'HLA-C1203', 'HLA-C1402', 'HLA-C1502', 'HLA-E0103', 'HLA-EQCA100101', 'HLA-RT1A', 'Mamu-A01', 'Mamu-A02', 'Mamu-A07', 'Mamu-A100101', 'Mamu-A100201', 'Mamu-A101101', 'Mamu-A11', 'Mamu-A20102', 'Mamu-A2201', 'Mamu-A2601', 'Mamu-A70103', 'Mamu-B01', 'Mamu-B01704', 'Mamu-B03', 'Mamu-B08', 'Mamu-B1001', 'Mamu-B17', 'Mamu-B3901', 'Mamu-B52', 'Mamu-B6601', 'Mamu-B8301', 'Mamu-B8701', 'Patr-A0101', 'Patr-A0301', 'Patr-A0401', 'Patr-A0701', 'Patr-A0901', 'Patr-B0101', 'Patr-B1301', 'Patr-B2401']) -INFO:root:Imputing: 16 tasks, imputation args: {'impute_min_observations_per_peptide': 3, 'imputer_args': {'n_imputations': 50, 'n_burn_in': 5, 'n_nearest_columns': 25}, 'impute_method': 'mice', 'impute_min_observations_per_allele': 3} -Job status available at: - https://storage.cloud.google.com/kubeface-tim/active::json::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.json [ gs://kubeface-tim/active::json::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.json ] - https://storage.cloud.google.com/kubeface-tim/active::html::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.html [ gs://kubeface-tim/active::html::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.html ] -WARNING:googleapiclient.discovery_cache:file_cache is unavailable when using oauth2client >= 4.0.0 -Traceback (most recent call last): - File "/home/tim/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 36, in autodetect - from google.appengine.api import memcache -ImportError: No module named 'google' - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/home/tim/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module> - from oauth2client.contrib.locked_file import LockedFile -ImportError: No module named 'oauth2client.contrib.locked_file' - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/home/tim/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module> - from oauth2client.locked_file import LockedFile -ImportError: No module named 'oauth2client.locked_file' - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/home/tim/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 41, in autodetect - from . import file_cache - File "/home/tim/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 41, in <module> - 'file_cache is unavailable when using oauth2client >= 4.0.0') -ImportError: file_cache is unavailable when using oauth2client >= 4.0.0 -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/discovery/v1/apis/storage/v1/rest -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000&alt=json&maxResults=100000 -INFO:oauth2client.transport:Attempting refresh to obtain initial access_token -INFO:root:Submitting 200 tasks -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000000+0+1489457655+1489457740++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000001+1+1489457864+1489457929++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000002+0+1489457663+1489457721++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000003+0+1489457666+1489457726++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000004+0+1489457670+1489457730++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000005+0+1489457673+1489457758++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000006+0+1489457677+1489457770++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000007+0+1489457680+1489457744++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000008+1+1489457864+1489457929++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000009+0+1489457688+1489457749++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000010+0+1489457692+1489457802++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000011+0+1489457696+1489457783++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000012+0+1489457700+1489457809++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000013+0+1489457704+1489457802++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000014+0+1489457708+1489457792++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000015+1+1489457864+1489457923++value -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: POST https://www.googleapis.com/upload/storage/v1/b/kubeface-tim/o?uploadType=multipart&alt=json -INFO:googleapiclient.discovery:URL being requested: POST https://www.googleapis.com/upload/storage/v1/b/kubeface-tim/o?uploadType=multipart&alt=json -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000000%2B0%2B1489457655%2B1489457740%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:21 2017 - * run time : 0:01:18.176892 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000000-700a7d3f - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000000 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000000+0+1489457655+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000001%2B1%2B1489457864%2B1489457929%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:17:49 2017 - * run time : 0:00:58.846496 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000001-ffcc73bc - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000001 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000001+1+1489457864+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000002%2B0%2B1489457663%2B1489457721%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:27 2017 - * run time : 0:00:52.098150 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000002-8d3af68e - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000002 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000002+0+1489457663+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000003%2B0%2B1489457666%2B1489457726%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:31 2017 - * run time : 0:00:53.772626 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000003-d1067c7f - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000003 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000003+0+1489457666+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000004%2B0%2B1489457670%2B1489457730%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:36 2017 - * run time : 0:00:53.499716 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000004-dc19071a - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000004 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000004+0+1489457670+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000005%2B0%2B1489457673%2B1489457758%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:38 2017 - * run time : 0:01:18.616956 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000005-839b9d82 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000005 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000005+0+1489457673+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000006%2B0%2B1489457677%2B1489457770%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:42 2017 - * run time : 0:01:26.611738 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000006-20b45486 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000006 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000006+0+1489457677+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000007%2B0%2B1489457680%2B1489457744%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:46 2017 - * run time : 0:00:56.961026 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000007-5eefd3f5 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000007 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000007+0+1489457680+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000008%2B1%2B1489457864%2B1489457929%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:17:49 2017 - * run time : 0:00:58.927556 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000008-524729ed - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000008 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000008+1+1489457864+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000009%2B0%2B1489457688%2B1489457749%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:53 2017 - * run time : 0:00:54.847812 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000009-502c6a6d - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000009 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000009+0+1489457688+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000010%2B0%2B1489457692%2B1489457802%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:14:57 2017 - * run time : 0:01:43.951529 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000010-1b765a46 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000010 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000010+0+1489457692+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000011%2B0%2B1489457696%2B1489457783%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:15:03 2017 - * run time : 0:01:19.163020 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000011-47f45acf - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000011 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000011+0+1489457696+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000012%2B0%2B1489457700%2B1489457809%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:15:07 2017 - * run time : 0:01:41.604208 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000012-2408acf0 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000012 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000012+0+1489457700+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000013%2B0%2B1489457704%2B1489457802%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:15:10 2017 - * run time : 0:01:30.512149 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000013-74fc3d7a - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000013 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000013+0+1489457704+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000014%2B0%2B1489457708%2B1489457792%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:15:15 2017 - * run time : 0:01:16.764111 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000014-be568f1b - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000014 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000014+0+1489457708+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o/result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3A000015%2B1%2B1489457864%2B1489457923%2B%2Bvalue?alt=media -DEBUG:root:Download 100%. -DEBUG:root:Result (success): - * result type : value - * start time : Tue Mar 14 02:17:49 2017 - * run time : 0:00:52.669978 - * hostname : tim-note-tim-2017-03-12-16-37-22-27499bde-000--000015-2dc3bbf2 - * platform : Linux-4.4.21+-x86_64-with-Ubuntu-14.04-trusty - * python version : 3.4.3 (default, Nov 17 2016, 01:08:31) - * [GCC 4.8.4] - * invocation arguments : venv-py3/bin/_kubeface-run-task - * gs://kubeface-tim/input::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000015 - * gs://kubeface-tim/result::tim-note-tim-2017-03-12-16-37-22-27499bde-000::000015+1+1489457864+{result_time}++{result_type} - * --verbose - * input size : 10.0 MiB - * result size : 956.0 B - * return value type : <class 'list'> -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=active%3A%3Ahtml%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.html&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=active%3A%3Ajson%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.json&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=done%3A%3Ahtml%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.html&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=done%3A%3Ajson%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.json&alt=json&maxResults=100000 -INFO:root:Marking job 'tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332' done: renaming active::html::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.html -> done::html::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.html -INFO:googleapiclient.discovery:URL being requested: POST https://www.googleapis.com/storage/v1/b/kubeface-tim/o/active%3A%3Ahtml%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.html/rewriteTo/b/kubeface-tim/o/done%3A%3Ahtml%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.html?alt=json -INFO:googleapiclient.discovery:URL being requested: DELETE https://www.googleapis.com/storage/v1/b/kubeface-tim/o/active%3A%3Ahtml%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.html? -INFO:root:Marking job 'tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332' done: renaming active::json::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.json -> done::json::tim-note-tim-2017-03-12-16-37-22-27499bde-000::node-master::dc8df332.json -INFO:googleapiclient.discovery:URL being requested: POST https://www.googleapis.com/storage/v1/b/kubeface-tim/o/active%3A%3Ajson%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.json/rewriteTo/b/kubeface-tim/o/done%3A%3Ajson%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.json?alt=json -INFO:googleapiclient.discovery:URL being requested: DELETE https://www.googleapis.com/storage/v1/b/kubeface-tim/o/active%3A%3Ajson%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-000%3A%3Anode-master%3A%3Adc8df332.json? -INFO:root:Imputation completed. -INFO:root:Training and scoring models: 9504 tasks (target was 10000), total work: 132 alleles * 16 ensemble size * 162 models = 342144, allele/models per task: (min=36 mean=36.000000 max=36) -Job status available at: - https://storage.cloud.google.com/kubeface-tim/active::json::tim-note-tim-2017-03-12-16-37-22-27499bde-001::node-master::bd30c322.json [ gs://kubeface-tim/active::json::tim-note-tim-2017-03-12-16-37-22-27499bde-001::node-master::bd30c322.json ] - https://storage.cloud.google.com/kubeface-tim/active::html::tim-note-tim-2017-03-12-16-37-22-27499bde-001::node-master::bd30c322.html [ gs://kubeface-tim/active::html::tim-note-tim-2017-03-12-16-37-22-27499bde-001::node-master::bd30c322.html ] -INFO:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000 -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDAwOTk5KzArMTQ4OTQ2OTY4MCsxNDg5NDczOTg4Kyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDAxOTk5KzArMTQ4OTQ4NDQxOCsxNDg5NDg2NjIwKyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDAyOTk5KzArMTQ4OTQ5OTU0MCsxNDg5NTAwMjU4Kyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDAzOTk5KzArMTQ4OTUxNDUxNSsxNDg5NTE1NzczKyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDA0OTk5KzArMTQ4OTUzNzY1MSsxNDg5NTM4NDQxKyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDA1OTkzKzArMTQ4OTU5ODE1MisxNDg5NTk5NjAzKyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDA2OTkzKzArMTQ4OTYxMjIxNisxNDg5NjE1MjA0Kyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDA3OTkzKzArMTQ4OTYyNjI5MisxNDg5NjI3MjU2Kyt2YWx1ZQ%3D%3D -INFO:googleapiclient.discovery:URL being requested: list_next https://www.googleapis.com/storage/v1/b/kubeface-tim/o?fields=nextPageToken%2Citems%28name%29&prefix=result%3A%3Atim-note-tim-2017-03-12-16-37-22-27499bde-001&alt=json&maxResults=100000&pageToken=ClxyZXN1bHQ6OnRpbS1ub3RlLXRpbS0yMDE3LTAzLTEyLTE2LTM3LTIyLTI3NDk5YmRlLTAwMTo6MDA4OTkzKzArMTQ4OTY0MDc5MSsxNDg5NjQxODkwKyt2YWx1ZQ%3D%3D -INFO:root:Submitting 200 tasks -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000000+0+1489458019+1489458400++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000001+0+1489458019+1489458434++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000002+0+1489458021+1489458422++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000003+0+1489458021+1489458476++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000004+0+1489458021+1489458540++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000005+0+1489458022+1489458562++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000006+0+1489458022+1489458629++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000007+0+1489458023+1489458656++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000008+0+1489458023+1489458869++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000009+0+1489458024+1489458596++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000010+0+1489595903+1489596458++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000011+0+1489458025+1489458441++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000012+0+1489458025+1489458467++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000013+0+1489458025+1489458503++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000014+0+1489458026+1489458515++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000015+0+1489458026+1489458633++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000016+0+1489458027+1489458556++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000017+0+1489458027+1489458634++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000018+0+1489458028+1489458658++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000019+0+1489458028+1489458958++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000020+0+1489458029+1489458591++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000021+0+1489458029+1489458813++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000022+0+1489595903+1489596632++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000023+0+1489458030+1489458505++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000024+0+1489458031+1489458523++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000025+0+1489458031+1489458547++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000026+0+1489595904+1489596627++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000027+0+1489458032+1489458651++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000028+0+1489458033+1489458723++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000029+0+1489458033+1489458772++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000030+0+1489458034+1489459085++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000031+0+1489458034+1489458677++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000032+0+1489458035+1489458961++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000033+0+1489458035+1489458625++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000034+0+1489458036+1489458532++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000035+0+1489458036+1489458589++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000036+0+1489458037+1489458619++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000037+0+1489595904+1489596492++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000038+0+1489458038+1489458744++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000039+0+1489458038+1489458958++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000040+0+1489595905+1489596441++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000041+0+1489458039+1489459572++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000042+0+1489458040+1489458866++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000043+0+1489458041+1489459228++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000044+0+1489595906+1489596703++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000045+0+1489458042+1489458602++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000046+0+1489595906+1489596653++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000047+0+1489458042+1489458736++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000048+0+1489458043+1489458855++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000049+0+1489458043+1489458868++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000050+0+1489458044+1489459058++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000051+0+1489458045+1489459204++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000052+0+1489458045+1489459723++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000053+0+1489458046+1489458939++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000054+0+1489458046+1489459355++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000055+0+1489458047+1489458660++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000056+0+1489458047+1489458625++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000057+0+1489458048+1489458664++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000058+0+1489458048+1489458779++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000059+0+1489458048+1489458991++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000060+0+1489595907+1489597567++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000061+0+1489458049+1489459214++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000062+0+1489595907+1489597108++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000063+0+1489458050+1489459831++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000064+0+1489595908+1489597561++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000065+0+1489458052+1489459628++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000066+0+1489458052+1489458700++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000067+0+1489458053+1489458746++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000068+0+1489458053+1489458764++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000069+1+1489649935+1489650676++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000070+0+1489458054+1489459238++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000071+0+1489458055+1489459195++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000072+0+1489458055+1489459311++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000073+0+1489458056+1489459636++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000074+0+1489458056+1489460483++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000075+0+1489458057+1489459463++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000076+0+1489458057+1489460044++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000077+0+1489458058+1489458802++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000078+0+1489458058+1489458831++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000079+0+1489458059+1489458924++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000080+0+1489595909+1489597328++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000081+0+1489458060+1489459267++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000082+1+1489649541+1489651104++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000083+0+1489458061+1489459426++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000084+0+1489458062+1489459630++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000085+0+1489458062+1489460680++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000086+0+1489458063+1489459519++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000087+0+1489458063+1489460252++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000088+0+1489458064+1489458834++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000089+0+1489458064+1489458960++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000090+0+1489595910+1489597719++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000091+0+1489458065+1489459041++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000092+0+1489458066+1489459377++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000093+0+1489458066+1489459268++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000094+1+1489649112+1489650749++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000095+0+1489458067+1489459895++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000096+0+1489458067+1489460869++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000097+0+1489458068+1489459671++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000098+0+1489458068+1489460449++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000099+0+1489458069+1489458549++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000100+0+1489595911+1489596353++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000101+0+1489595911+1489596327++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000102+0+1489458070+1489458642++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000103+0+1489458071+1489458742++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000104+0+1489458071+1489460003++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000105+0+1489458072+1489460432++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000106+0+1489458072+1489460360++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000107+0+1489458073+1489461423++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000108+0+1489458073+1489459744++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000109+0+1489458074+1489462692++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000110+0+1489458074+1489458948++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000111+0+1489458074+1489462203++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000112+0+1489458075+1489462657++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000113+0+1489458075+1489459352++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000114+0+1489458076+1489459170++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000115+0+1489458076+1489460944++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000116+0+1489458077+1489459340++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000117+0+1489458077+1489460231++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000118+0+1489458078+1489460638++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000119+0+1489458078+1489460697++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000120+0+1489458079+1489459698++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000121+0+1489458081+1489464019++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000122+0+1489458082+1489459067++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000123+0+1489458083+1489459098++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000124+0+1489458083+1489459346++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000125+0+1489458084+1489459511++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000126+0+1489458084+1489460475++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000127+0+1489458085+1489459904++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000128+0+1489458085+1489459917++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000129+0+1489458086+1489465379++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000130+0+1489458086+1489459792++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000131+0+1489458087+1489461125++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000132+0+1489458087+1489459758++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000133+0+1489458088+1489459424++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000134+0+1489458088+1489461160++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000135+0+1489458089+1489459631++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000136+0+1489458089+1489462651++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000137+0+1489458089+1489463343++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000138+0+1489458090+1489459677++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000139+0+1489458090+1489460631++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000140+0+1489458091+1489464476++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000141+0+1489458091+1489459731++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000142+0+1489458092+1489460031++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000143+0+1489458092+1489459741++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000144+0+1489458093+1489464063++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000145+0+1489458093+1489461520++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000146+0+1489458093+1489462194++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000147+0+1489458094+1489460258++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000148+0+1489458094+1489459444++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000149+0+1489458095+1489460788++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000150+0+1489458095+1489461183++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000151+0+1489458096+1489461212++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000152+0+1489458096+1489461615++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000153+0+1489458097+1489461864++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000154+0+1489458097+1489464987++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000155+0+1489458098+1489460949++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000156+0+1489458098+1489461545++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000157+0+1489458098+1489461130++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000158+0+1489458099+1489461456++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000159+0+1489458099+1489459654++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000160+0+1489458100+1489459550++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000161+0+1489458100+1489460440++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000162+0+1489458101+1489460927++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000163+0+1489458101+1489462167++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000164+0+1489458102+1489460262++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000165+0+1489458102+1489460918++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000166+0+1489458103+1489459525++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000167+0+1489458112+1489459825++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000168+0+1489458113+1489459516++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000169+0+1489458113+1489459856++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000170+0+1489458114+1489459656++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000171+0+1489458115+1489460286++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000172+0+1489458115+1489460216++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000173+0+1489458116+1489461338++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000174+0+1489458116+1489460060++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000175+0+1489458117+1489460829++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000176+0+1489458117+1489460440++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000177+0+1489458118+1489462512++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000178+0+1489458118+1489459587++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000179+0+1489458119+1489461929++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000180+0+1489458119+1489460111++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000181+0+1489458120+1489459974++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000182+0+1489458120+1489460400++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000183+0+1489458121+1489461809++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000184+0+1489458121+1489461880++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000185+0+1489458122+1489460176++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000186+0+1489458122+1489463550++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000187+0+1489458123+1489460379++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000188+0+1489458123+1489459415++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000189+0+1489458123+1489461261++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000190+0+1489458124+1489460594++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000191+0+1489458124+1489460791++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000192+0+1489458125+1489462264++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000193+0+1489458126+1489461229++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000194+0+1489458126+1489460700++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000195+0+1489458126+1489461467++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000196+0+1489458127+1489461427++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000197+0+1489458128+1489460984++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000198+0+1489458128+1489460369++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000199+0+1489458129+1489460011++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000200+0+1489458431+1489458925++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000201+0+1489458432+1489459877++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000202+0+1489458462+1489459267++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000203+0+1489458463+1489460501++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000204+0+1489458493+1489460057++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000205+0+1489458494+1489460351++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000206+0+1489458525+1489462540++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000207+0+1489458525+1489459254++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000208+0+1489458526+1489459525++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000209+0+1489458556+1489459467++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000210+0+1489458557+1489462883++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000211+0+1489458557+1489459122++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000212+0+1489458557+1489460878++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000213+0+1489458558+1489463175++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000214+0+1489458588+1489461622++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000215+0+1489458589+1489461340++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000216+0+1489458620+1489459603++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000217+0+1489458620+1489460853++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000218+0+1489458621+1489460535++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000219+0+1489458621+1489460341++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000220+0+1489458652+1489459237++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000221+0+1489458652+1489460268++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000222+0+1489458653+1489459870++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000223+0+1489458653+1489461243++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000224+0+1489458653+1489459707++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000225+0+1489458654+1489460605++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000226+0+1489458654+1489459590++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000227+0+1489458685+1489459604++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000228+0+1489458685+1489462983++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000229+0+1489458686+1489459701++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000230+0+1489458686+1489460851++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000231+0+1489458687+1489459413++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000232+0+1489458687+1489460586++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000233+0+1489458718+1489459448++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000234+0+1489458749+1489459606++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000235+0+1489458749+1489460541++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000236+0+1489458780+1489459678++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000237+0+1489458781+1489459860++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000238+0+1489458781+1489460537++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000239+0+1489458781+1489461773++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000240+0+1489458782+1489460351++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000241+0+1489458813+1489461391++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000242+0+1489458813+1489460298++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000243+0+1489458844+1489459914++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000244+0+1489458844+1489459683++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000245+0+1489458845+1489460611++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000246+0+1489458875+1489462491++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000247+0+1489458906+1489460183++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000248+0+1489458906+1489460638++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000249+0+1489458907+1489465041++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000250+0+1489458937+1489460986++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000251+0+1489458938+1489460314++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000252+0+1489458969+1489460935++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000253+0+1489458969+1489459822++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000254+0+1489458970+1489461192++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000255+0+1489458970+1489460899++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000256+0+1489458971+1489460860++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000257+0+1489459001+1489460429++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000258+0+1489459032+1489462464++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000259+0+1489459062+1489461346++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000260+0+1489459093+1489460789++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000261+0+1489459093+1489461614++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000262+0+1489459094+1489460419++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000263+0+1489459124+1489464016++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000264+0+1489459155+1489460363++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000265+0+1489459186+1489462876++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000266+0+1489459216+1489461356++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000267+0+1489459247+1489460143++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000268+0+1489459247+1489463170++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000269+0+1489459248+1489460951++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000270+0+1489459248+1489461126++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000271+0+1489459279+1489463130++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000272+0+1489459280+1489461692++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000273+0+1489459280+1489460944++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000274+0+1489459310+1489461449++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000275+0+1489459311+1489461706++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000276+0+1489459342+1489460699++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000277+0+1489459372+1489461760++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000278+0+1489459373+1489460833++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000279+0+1489459373+1489461744++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000280+0+1489459374+1489460955++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000281+0+1489459404+1489466817++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000282+0+1489459435+1489464774++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000283+0+1489459435+1489462883++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000284+0+1489459436+1489461553++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000285+0+1489459466+1489463958++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000286+0+1489459467+1489461781++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000287+0+1489459467+1489461059++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000288+0+1489459498+1489460715++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000289+0+1489459498+1489461807++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000290+0+1489459530+1489461549++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000291+0+1489459530+1489467193++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000292+0+1489459561+1489461609++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000293+0+1489459561+1489461793++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000294+0+1489459562+1489470429++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000295+0+1489459562+1489466141++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000296+0+1489459593+1489463045++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000297+0+1489459623+1489462060++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000298+0+1489459624+1489460237++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000299+0+1489459624+1489461582++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000300+0+1489459625+1489461420++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000301+0+1489459625+1489460967++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000302+0+1489459656+1489461143++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000303+0+1489459656+1489461899++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000304+0+1489459657+1489461990++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000305+0+1489459687+1489461698++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000306+0+1489459688+1489461239++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000307+0+1489459689+1489460797++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000308+0+1489459689+1489464727++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000309+0+1489459720+1489461921++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000310+0+1489459720+1489461844++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000311+0+1489459721+1489461255++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000312+0+1489459721+1489461862++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000313+0+1489459721+1489461143++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000314+0+1489459722+1489460608++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000315+0+1489459752+1489460863++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000316+0+1489459753+1489461305++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000317+0+1489459753+1489461080++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000318+0+1489459754+1489460993++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000319+0+1489459784+1489462420++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000320+0+1489459815+1489462019++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000321+0+1489459846+1489461131++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000322+0+1489459846+1489461432++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000323+0+1489459877+1489461071++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000324+0+1489459877+1489466127++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000325+0+1489459877+1489463792++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000326+0+1489459878+1489461192++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000327+0+1489459908+1489465753++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000328+0+1489459939+1489463234++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000329+0+1489459940+1489461722++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000330+0+1489459940+1489463715++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000331+0+1489459941+1489466134++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000332+0+1489460002+1489462115++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000333+0+1489460032+1489463008++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000334+0+1489460033+1489462221++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000335+0+1489460063+1489461636++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000336+0+1489460094+1489462406++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000337+0+1489460094+1489463155++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000338+0+1489460095+1489463464++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000339+0+1489460156+1489462669++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000340+0+1489460186+1489464537++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000341+0+1489460217+1489461693++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000342+0+1489460217+1489461078++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000343+0+1489460248+1489461718++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000344+0+1489460248+1489463691++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000345+0+1489460249+1489464702++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000346+0+1489460279+1489466194++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000347+0+1489460280+1489462252++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000348+0+1489460280+1489462679++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000349+0+1489460281+1489463338++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000350+0+1489460312+1489463423++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000351+0+1489460312+1489466139++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000352+0+1489460343+1489461567++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000353+0+1489460373+1489463040++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000354+0+1489460374+1489462086++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000355+0+1489460374+1489461508++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000356+0+1489460375+1489462151++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000357+0+1489460375+1489461795++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000358+0+1489460376+1489461811++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000359+0+1489460406+1489462189++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000360+0+1489460437+1489462732++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000361+0+1489460438+1489462751++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000362+0+1489460468+1489462740++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000363+0+1489460469+1489462119++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000364+0+1489460469+1489461845++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000365+0+1489460470+1489461930++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000366+0+1489460500+1489462283++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000367+0+1489460501+1489462114++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000368+0+1489460532+1489463354++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000369+0+1489460532+1489464241++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000370+0+1489460563+1489463763++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000371+0+1489460563+1489464682++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000372+0+1489460564+1489463069++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000373+0+1489460595+1489463420++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000374+0+1489460626+1489462476++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000375+0+1489460627+1489461669++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000376+0+1489460627+1489461739++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000377+0+1489460628+1489462690++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000378+0+1489460658+1489462958++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000379+0+1489460659+1489463224++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000380+0+1489460659+1489463576++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000381+0+1489460720+1489463354++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000382+0+1489460721+1489464660++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000383+0+1489460721+1489463038++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000384+0+1489460752+1489464495++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000385+0+1489460752+1489462627++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000386+0+1489460813+1489467029++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000387+0+1489460814+1489461976++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000388+0+1489460814+1489466797++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000389+0+1489460815+1489462657++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000390+0+1489460845+1489462745++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000391+0+1489460876+1489463007++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000392+0+1489460876+1489464013++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000393+0+1489460877+1489465761++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000394+0+1489460877+1489464147++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000395+0+1489460877+1489466287++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000396+0+1489460908+1489462448++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000397+0+1489460909+1489462779++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000398+0+1489460909+1489464407++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000399+0+1489460940+1489464875++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000400+0+1489460971+1489462720++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000401+0+1489460971+1489463610++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000402+0+1489460972+1489463361++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000403+0+1489460972+1489462261++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000404+0+1489460972+1489462362++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000405+0+1489460973+1489463671++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000406+0+1489461003+1489462305++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000407+0+1489461004+1489463390++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000408+0+1489461005+1489465235++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000409+0+1489461005+1489461994++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000410+0+1489461036+1489463564++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000411+0+1489461096+1489462659++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000412+0+1489461097+1489462567++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000413+0+1489461098+1489464166++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000414+0+1489461098+1489463177++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000415+0+1489461159+1489464328++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000416+0+1489461160+1489465001++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000417+0+1489461160+1489462994++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000418+0+1489461161+1489461903++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000419+0+1489461161+1489463730++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000420+0+1489461161+1489463854++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000421+0+1489461192+1489462422++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000422+0+1489461223+1489465175++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000423+0+1489461223+1489462167++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000424+0+1489461223+1489463329++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000425+0+1489461254+1489462726++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000426+0+1489461255+1489464227++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000427+0+1489461255+1489463434++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000428+0+1489461256+1489465876++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000429+0+1489461286+1489462817++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000430+0+1489461287+1489462344++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000431+0+1489461317+1489462364++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000432+0+1489461348+1489462905++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000433+0+1489461379+1489464705++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000434+0+1489461379+1489463804++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000435+0+1489461379+1489463515++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000436+0+1489461410+1489463225++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000437+0+1489461441+1489464736++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000438+0+1489461441+1489464152++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000439+0+1489461442+1489465996++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000440+0+1489461473+1489464533++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000441+0+1489461473+1489462714++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000442+0+1489461504+1489462752++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000443+0+1489461504+1489462591++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000444+0+1489461535+1489464057++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000445+0+1489461535+1489463552++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000446+0+1489461566+1489464037++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000447+0+1489461596+1489463830++value -INFO:root:Using existing result: result::tim-note-tim-2017-03-12-16-37-22-27499bde-001::000448+0+1489461597+1489465607++value -</pre> -</div> - -</div> - -</div> -</div> - -</div> - </div> - </div> -</body> -</html> diff --git a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.ipynb b/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.ipynb deleted file mode 100644 index 92b58a43cb8fdc5130a9d12cf82f370c0d79f473..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/models-summary/report.ipynb +++ /dev/null @@ -1,1093 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import warnings\n", - "warnings.simplefilter(\"ignore\")\n", - "\n", - "import mhcflurry\n", - "import numpy\n", - "import seaborn\n", - "import logging\n", - "import pandas\n", - "from os import environ\n", - "from matplotlib import pyplot\n", - "from mhcflurry.downloads import get_path\n", - "\n", - "% matplotlib inline\n", - "\n", - "import IPython.core.display as display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<script>jQuery(function() {if (jQuery(\"body.notebook_app\").length == 0) { jQuery(\".input_area\").toggle(); jQuery(\".prompt\").toggle();}});</script>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import IPython.core.display as di\n", - "\n", - "# This line will hide code by default when the notebook is exported as HTML\n", - "di.display_html('<script>jQuery(function() {if (jQuery(\"body.notebook_app\").length == 0) { jQuery(\".input_area\").toggle(); jQuery(\".prompt\").toggle(); jQuery(\"div.output_stderr\").toggle();}});</script>', raw=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# MHCflurry models\n", - "\n", - "## Class 1 allele specific ensemble models\n", - "\n", - "This report describes the models published with MHCflurry for Class I affinity prediction. These models were trained on the \"data_combined_iedb_kim2014\" affinity measurement dataset (mostly from IEDB) distributed with MHCflurry.\n", - "\n", - "Each allele's predictor is an ensemble of 16 models. The models were trained on a random 1/2 of the data for the allele and tested on the other half. The best performing model in terms of sum of AUC (at 500nM), F1, and Kendall Tau for each 50/50 split of the data was selected for inclusion in the ensemble." - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "all_models_df = pandas.read_csv(get_path(\"models_class1_allele_specific_ensemble\", \"all_models.csv.bz2\"))\n", - "all_models_df[\"hyperparameters_layer_sizes\"] = all_models_df[\"hyperparameters_layer_sizes\"].map(eval)\n", - "\n", - "full_training_data = mhcflurry.affinity_measurement_dataset.AffinityMeasurementDataset.from_csv(\n", - " get_path(\"data_combined_iedb_kim2014\", \"combined_human_class1_dataset.csv\"))\n", - "\n", - "training_sizes = full_training_data.to_dataframe().allele.value_counts()\n", - "\n", - "all_models_df[\"train_size\"] = training_sizes.ix[all_models_df.allele].values\n", - "\n", - "(ensemble_size,) = all_models_df.ensemble_size.value_counts().index\n", - "ensemble_size\n", - "\n", - "selected_models_df = all_models_df.ix[all_models_df.weight > 0]\n", - "selected_models_df.shape\n", - "\n", - "alleles = [x for x in training_sizes.sort_values().index if x in selected_models_df.allele.values]" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<h1>Models summary</h1>\n", - "<table>\n", - "<tr><td><b>Num Alleles</b></td><td>132</td></tr>\n", - "<tr><td><b>Ensemble size</b></td><td>16</td></tr>\n", - "<tr><td><b>Num architectures</b></td><td>162</td></tr>\n", - "<tr><td><b>Num selected models</b></td><td>2,112</td></tr>\n", - "<tr><td><b>Total models tested</b></td><td>342,144</td></tr>\n", - "<tr><td><b>Total training measurements</b></td><td>192,177</td></tr>\n", - "<tr><td><b>Training measurement per allele</b></td><td>min=26; max=12,357; median=721.5</td></tr>\n", - "</table>\n", - "<p><b>Alleles included: </b>HLA-A0201 HLA-A0301 HLA-A0203 HLA-A1101 H-2-KB HLA-A3101 HLA-A0206 HLA-A6802 H-2-DB HLA-A0101 HLA-B0702 HLA-A2601 HLA-B1501 HLA-A0202 HLA-A6801 HLA-A3301 HLA-B2705 HLA-B0801 HLA-A2402 HLA-B4001 HLA-B3501 HLA-B5801 HLA-B5101 HLA-B5701 HLA-A3001 HLA-B1801 HLA-A2902 Mamu-A01 HLA-A6901 HLA-A2301 HLA-B4402 Mamu-A100101 HLA-A3002 HLA-B4601 Mamu-B17 HLA-B3901 HLA-B5301 HLA-B1517 HLA-B4403 Mamu-A02 Mamu-B01704 Mamu-A11 HLA-A0219 HLA-A2403 HLA-B5401 HLA-A0212 HLA-A8001 Mamu-B03 HLA-A3201 Mamu-B08 H-2-KD HLA-A0211 HLA-B4501 HLA-B4002 HLA-B0802 HLA-A2501 HLA-A0216 Patr-B0101 Mamu-A101101 Mamu-B52 HLA-B4801 Mamu-B01 HLA-B2703 HLA-B1509 Patr-A0901 H-2-KK HLA-B1503 Mamu-A2201 Mamu-A07 Patr-A0701 HLA-A2602 H-2-DD Mamu-A100201 HLA-A2603 HLA-C0401 Patr-A0101 HLA-B3801 H-2-LD HLA-B0803 Mamu-B3901 Mamu-B8301 Patr-B2401 HLA-C0602 Patr-A0301 HLA-B1542 HLA-B4506 HLA-A0217 HLA-B8301 Patr-A0401 Patr-B1301 HLA-B3503 HLA-C1402 HLA-EQCA100101 HLA-B4201 Mamu-A2601 HLA-B1402 HLA-C1502 HLA-C0501 HLA-C1203 HLA-B1502 HLA-C0303 Mamu-B1001 Mamu-B8701 Mamu-A20102 HLA-C0702 HLA-RT1A HLA-A0250 HLA-B7301 HLA-A0205 Mamu-A70103 Mamu-B6601 HLA-B2720 HLA-C0802 HLA-A3207 HLA-B7 HLA-A6823 HLA-A6601 HLA-A0207 HLA-A2 HLA-A11 HLA-A3215 HLA-B3701 HLA-E0103 HLA-B4013 HLA-BOLA601301 HLA-BOLAHD6 HLA-B5802 HLA-B1401 HLA-B5703 HLA-A0319 HLA-A0302 HLA-B8101</p>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "training_sizes_for_included_alleles = training_sizes.ix[\n", - " training_sizes.index.isin(all_models_df.allele)\n", - "]\n", - "\n", - "lines = []\n", - "def row(label, value):\n", - " lines.append('<tr><td><b>%s</b></td><td>%s</td></tr>' % (label, value))\n", - "\n", - "lines.append('<h1>Models summary</h1>')\n", - "lines.append('<table>')\n", - "\n", - "row(\"Num Alleles\", \"{:,d}\".format(all_models_df.allele.nunique()))\n", - "row(\"Ensemble size\", \"{:,d}\".format(ensemble_size))\n", - "row(\"Num architectures\", \"{:,d}\".format(all_models_df.hyperparameters_architecture_num.nunique()))\n", - "row(\"Num selected models\", \"{:,d}\".format((all_models_df.weight > 0).sum()))\n", - "row(\"Total models tested\", \"{:,d}\".format(len(all_models_df)))\n", - "row(\"Total training measurements\", \"{:,d}\".format(training_sizes_for_included_alleles.sum()))\n", - "row(\"Training measurement per allele\",\n", - " \"min={:,g}; max={:,g}; median={:,g}\".format(\n", - " training_sizes_for_included_alleles.min(),\n", - " training_sizes_for_included_alleles.max(),\n", - " training_sizes_for_included_alleles.median()))\n", - "\n", - "\n", - "lines.append('</table>')\n", - "lines.append(\"<p><b>Alleles included: </b>%s</p>\" % \" \".join(\n", - " training_sizes_for_included_alleles.index))\n", - "\n", - "\n", - "di.display_html(\"\\n\".join(lines), raw=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "architecture_num_to_row = all_models_df.groupby(\"hyperparameters_architecture_num\").apply(lambda df: df.iloc[0])\n", - "\n", - "hyperparameters = [\n", - " x for x in architecture_num_to_row.columns\n", - " if x.startswith(\"hyperparameters_\") and pandas.Series([\n", - " str(item) for item in architecture_num_to_row[x]\n", - " ]).nunique() > 1\n", - "]\n", - "architecture_num_to_hyperparameters = {}\n", - "for _, row in architecture_num_to_row.iterrows():\n", - " architecture_num_to_hyperparameters[row.hyperparameters_architecture_num] = (\n", - " row[hyperparameters].to_dict())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Best models\n", - "\n", - "This table gives the models most often selected for alleles with less than or equal to the given number of training samples." - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>Training size cutoff</th>\n", - " <th>100.0</th>\n", - " <th>500.0</th>\n", - " <th>1000.0</th>\n", - " <th>inf</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>architecture_num</th>\n", - " <td>112</td>\n", - " <td>81</td>\n", - " <td>112</td>\n", - " <td>27</td>\n", - " </tr>\n", - " <tr>\n", - " <th>best architecture selected rate (%)</th>\n", - " <td>3.27381</td>\n", - " <td>2.04545</td>\n", - " <td>2.27273</td>\n", - " <td>3.64583</td>\n", - " </tr>\n", - " <tr>\n", - " <th>dropout_probability</th>\n", - " <td>0.1</td>\n", - " <td>0</td>\n", - " <td>0.1</td>\n", - " <td>0.1</td>\n", - " </tr>\n", - " <tr>\n", - " <th>embedding_output_dim</th>\n", - " <td>8</td>\n", - " <td>8</td>\n", - " <td>8</td>\n", - " <td>8</td>\n", - " </tr>\n", - " <tr>\n", - " <th>fraction_negative</th>\n", - " <td>0.1</td>\n", - " <td>0</td>\n", - " <td>0.1</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>impute</th>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>layer_sizes</th>\n", - " <td>[64]</td>\n", - " <td>[12]</td>\n", - " <td>[64]</td>\n", - " <td>[12]</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "Training size cutoff 100.000000 500.000000 1000.000000 \\\n", - "architecture_num 112 81 112 \n", - "best architecture selected rate (%) 3.27381 2.04545 2.27273 \n", - "dropout_probability 0.1 0 0.1 \n", - "embedding_output_dim 8 8 8 \n", - "fraction_negative 0.1 0 0.1 \n", - "impute True True True \n", - "layer_sizes [64] [12] [64] \n", - "\n", - "Training size cutoff inf \n", - "architecture_num 27 \n", - "best architecture selected rate (%) 3.64583 \n", - "dropout_probability 0.1 \n", - "embedding_output_dim 8 \n", - "fraction_negative 0 \n", - "impute False \n", - "layer_sizes [12] " - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result_df = []\n", - "cutoffs = [100, 500, 1000, numpy.inf]\n", - "for cutoff in cutoffs:\n", - " selected_rates = all_models_df.ix[\n", - " all_models_df.train_size <= cutoff\n", - " ].groupby(\"hyperparameters_architecture_num\").weight.mean().sort_values(ascending=False)\n", - " best_architecture = selected_rates.index[0]\n", - " d = dict(\n", - " (key.replace(\"hyperparameters_\", \"\"), value) for (key, value) in \n", - " architecture_num_to_hyperparameters[best_architecture].items())\n", - " d[\"architecture selection rate (%)\"] = selected_rates.ix[best_architecture] * 100\n", - " result_df.append(d)\n", - "result_df = pandas.DataFrame(result_df, index=cutoffs)\n", - "result_df.index.name = \"Training size cutoff\"\n", - "result_df.T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Full hyperparameters of best model" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'activation': 'tanh',\n", - " 'architecture_num': 27,\n", - " 'batch_normalization': True,\n", - " 'batch_size': 128,\n", - " 'dropout_probability': 0.1,\n", - " 'embedding_output_dim': 8,\n", - " 'fraction_negative': 0,\n", - " 'impute': False,\n", - " 'impute_method': 'mice',\n", - " 'impute_min_observations_per_allele': 3,\n", - " 'impute_min_observations_per_peptide': 3,\n", - " 'imputer_args': {'n_burn_in': 5,\n", - " 'n_imputations': 50,\n", - " 'n_nearest_columns': 25},\n", - " 'include_ms': True,\n", - " 'init': 'glorot_uniform',\n", - " 'kmer_size': 9,\n", - " 'layer_sizes': [12],\n", - " 'loss': 'mse',\n", - " 'max_ic50': 50000.0,\n", - " 'ms_decoy_affinity': 20000.0,\n", - " 'ms_hit_affinity': 1.0,\n", - " 'n_training_epochs': 250,\n", - " 'optimizer': 'rmsprop',\n", - " 'output_activation': 'sigmoid',\n", - " 'pretrain_decay': 'numpy.exp(-epoch)'}" - ] - }, - "execution_count": 112, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "best_hyperparameters = eval(\n", - " architecture_num_to_row.ix[result_df.ix[numpy.inf].architecture_num].hyperparameters)\n", - "best_hyperparameters" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x11b5ecd68>" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nJCX1ZeLEySxc+Bg7d+4gJWU7f/7z3UyaNLnZJE0IIYTwpy7bUuWwde6klu093urV1pNv4eERTbad\nd96FvPvuW3z22UoSEvo0u/8111zG8cefwD33/KXZ7fVbjpQaTnR0L4YPH0FwcHCTsiEhISxa9DRL\nliziuuuuICQklMmTp3LjjX8E4IILLiYtbQ933XUrmqYxbJji9tvv4e9//yt5eblNjtceF110KUVF\nRTz88F8wDINp02bwhz/cWrd98eIn2LRpI//73/sALFjwIM8//wwPPHAvlZWVjB07jqee+mfd+f3l\nLw/x9NNPcscdt1BdXc20aTO4+eY/HVWMQgghREfQjrZlwktmbm7LrTXNFO+wQI6sa81Q3hXExUXS\ntvsnuhK5f4FL7l1gk/sXuOLiItuVDHTRlipJbIQQQggRWLpoUiWEEEII77W3h0caMXxJkiohhBCi\nG1iXsxGXYXhV1mGzMSFh/JELijaRpEoIIYToBlyGgdt0e1fYu9xLtJFMqSCEEEII4QOSVAkhhBBC\n+IAkVUIIIYQQPiBJlRBCCCGED0hSJYQQQgjhA100qTL9uLSN2+3m5Zdf4je/+TUzZ07izDNP4/77\n7yU7O8vrOh555AEWLLirzcduztdfryE391C793/mmcXcdNN1XpXNyTnAlCkTmD79FIqLi5ts//bb\ntUyZMsFn5+YLLpeLRYv+xq9+NYv582fz7LNLWn3fYXFxMQ8+uID582dz7rnzePHF5xuUb2t9Qggh\nuq8uO6VCW+bb8IX2ztnx/PNPs3btV9xyyx307z+AwsICli79N7///TW88sr/mn0nYEfJycnh3ntv\nZ/nyN4iL693uetr6/j+bzca3337NGWfMb7B+zZrPsdm6Vt7+z38+zbp1P7Jw4RLKy8t58MEFRERE\ncNllVzVb/p57bqOkpJi//e1JbDaNxx57mKqqKm644Q/tqk8IIUT31bW+8eqpnW+js5b2JnAff/wB\nV155LSeddAoJCQkMHz6Shx56lPLycr7+eo1vL8oRmKZx1C9Ebo9x405ocq5ut5vvvlvLqFHHdXo8\nLamurub999/mpptuZcSIUZxwwgSuv/5G3n77jWbLp6buZMuWTSxY8BCjRo1mxIhR3HHHvbz11utU\nVVW2uT4hhBDdW5dtqQoUmmZjw4afmDVrDna7HYDg4BCWLXuF6OjounIrVnzE8uVLyc09RHLyQK6+\n+jomTpzcbJ3ff/8t//rXM2Rk7CMpqS8XX/xb5s07s277l19+xn/+s5TMzH307duPa6/9PaeeOoUL\nLzwbTdO4/PKLufLKa7jyymvYvv1nnn76H+j6TuLj4znzzHO45JL/q0u+fvjhO557bgnZ2VmceOJJ\nREf3avM1mDp1Os888yRVVVUEBwcDsHHjeuLi4unbtx8VFRV1ZY8Uz6pVK3jlleVkZu7D6XQyfvyJ\n3HHHfURHR7Np0wYWLLiTG2+8hRdffJ6CgnzGjz+Re+65n+joaJYu/RfLlv27mXuksWTJP3E6g6iq\nqmLcuOPrto0bN57Dhw+TnZ1FUlLfBvtlZ2cREhLCkCFD69YNGTKUmpoadu5MweFwtqk+IYQQ3VuX\nbakKFBdffCmffPIh5503j0ceeYAVKz7i8OECkpL6EhYWDsCPP37PU0/9g2uvvYHly9/g7LPPY8GC\nu9i+/ecm9aWl7WHBgjv59a8v5OWX3+SKK67hmWee5PPPVwNWsnL//fcyb958li9/g3nzzmTBgrvI\nyNjHv//9H0zT5Kmn/sUll/wfhw8f5k9/uolTT53Cf//7Jn/84+28++5bvPrqcgAyMvZx991/YsaM\n2bz00mscd9xYPv74/Tadv6ZpjBkzlrCwMH788fu69V999SXTp89sUPbw4YJW4/n55608+uiDXHrp\n5bz22js8+ugTpKbqvPzy0ro6SkpK+PDD93jkkYUsWfI8O3em1G3/zW8u44MPVjZZ3n9/JaNHjyEv\n7xDBwSF19wUgJqYXpmly6NDBJucWExNLVVUVxcVFdetycg4AUFh4uM31CSGE6N6kpeoo/fa3V9Cv\nXzLvvfcWn322kk8//RhN0zj33PO5+ebb0DSNl19exiWX/B8zZswG4KyzzmXnzh288cYrPPjgow3q\ne+21l5k7dx7z558DQGJiEtnZmbz++n+ZNWsO7777FlOmTOPCC38DwEUXXUplZSUVFRX07Gm1jEVF\nRRESEsIrr/yHkSNH89vfXlFX17XX3sDixU9w6aWX89FH7zNkyDCuuOJqAC699HI2btxATU11m66B\nptmYPHkaa9euYerU6Zimydq1a3jyyWd57bWX68q9887/Wo0nKCiIO++8j9NOOx2A+PgEpkyZRlra\nnro6TNPkpptuYejQYQCcdtoZ7NhhJachISGEhIS0GGdlZSXBwUEN1gUFWf+uqalpUn7UqNEkJvbl\n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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x125007be0>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "all_scores = all_models_df.scores_auc.dropna()\n", - "selected_scores = all_models_df.ix[all_models_df.weight > 0].scores_auc.dropna()\n", - "\n", - "pyplot.figure(figsize=(10, 5))\n", - "seaborn.distplot(all_scores, label=\"All. Mean=%0.2f\" % all_scores.mean())\n", - "seaborn.distplot(selected_scores, label=\"Selected. Mean=%0.2f\" % selected_scores.mean())\n", - "#seaborn.set_context('talk')\n", - "pyplot.legend(loc='upper left', fontsize=\"x-large\")\n", - "pyplot.xlim(xmin=0.5, xmax=1)\n", - "pyplot.xlabel(\"AUC\", fontsize=\"x-large\")\n", - "pyplot.title(\"AUCs across models and alleles\", fontsize=\"xx-large\")" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.5, 1.0)" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nvZK0Djdl2GO7k4DX2V4JIGk+sNj20cC1raA6A9p+/g8piepq4Be2N9S4NcD/N1InbK+T9Lik2ZQl\nBYcDZ4/S14iIiIie1atJ61D92UvSnZTEcAg4A6CVsFbXARdJmmX7wWHttJYHbKQsBTjR9ipJ35T0\nDcp61uW2v7yJviwCrqznL7N91wh9jYiIiOhpqYjVJQYGBoay5VVERMS219/fz4oVd5MPQ7fcllTE\n6tWZ1q6TOsgRERHPjPzNnRiZae0SzWZzaOJrMMeWmBz1s2NLZfw6V8aus02O8ctM65bKTGsPmzp1\nKvnH05kydp0t49e5MnadLePXe5K0dolms0m+s9WZMnadLePXuTJ2nW1yjF+S5mdSktYuMTg4SKPR\nmOhuREREdL2+vj6WLFk60d3oOT2TtNZKVLcCx9i+uu34t4Fv2j5xG19/T+B+4A22r63HpgAfBPYB\nHgPeZPuBtnMuBFba/shY7TcaDbJ7QERERHSr7Sa6A8+wlcAxrReSXgjs8gxd+wTgEuDUtmN/DOxo\ney5wJqWiFpJ2l3QD8PpnqG8RERERk1rPzLRW9wLPlzTD9jpKydbPAM+TdCpwFCWJ/RlwJHAcJXHc\nmVKa9VLgCGAv4Azbn5f0Y9t7Aki6Crjc9m0jXHsBcADwL5JeYPt7wP7AlwBs3yHpZTV2V+As4NVb\n/TcQERER0YF6baYVSinWo+rzVwBfB6YCM20fansOsAPw8hqzq+3XAhcAi2wfBZxCmTmFcawCl3Qo\ncJ/th4GPA4vrW7sBj7SFNiVtZ3tVrYyVFd4RERER9N5M6xClZOqHJP0AuI2SGG4ENtSZ0vXALEri\nCnBPfVwDfL8+/zmwU33enlhOAZD0Xsos6hBwKLAQmF0/8t8R2LuWf10LzGg7fzvbG7fOrUZERER0\nj15LWrG9StJ04DTKOtJ+yoznEbbnSNoZ+BZPJaNjzaRuL2kX4EnKsgFsv6v1pqTdgX1tz2479mHg\neGA58EfAP0vaD7jv6d9hRERERPfpuaS1+hywwPb9kvqBDcB6Scvr+z8CnjvOti4BvgE8AKwa4f2/\noCxJaPdR4JOUJHdQ0u31+AnD4iZ6A7qIiIiISSFlXLvEwMDAULa8ioiI2Pb6+/tZseJu8tWTLZcy\nrj2sr69vorsQERHRE/I3d2JkprVLNJvNodWr1090N2ILzJw5nYxd58r4da6MXWebHOOXmdYtlZnW\n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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11b990860>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nvWPV1iWYbPBTC+4+WfP4FeC2zfp5WnBXREREWllL9TNqwV0RERFpZS0V3BYuC6IFd0VERKSVNLSr\ndKtpwV0RERFpZS0V3LTgroiIiLSy0Ac3zSQVERGRdhH64KaZpCIiItIuQj85QTNJRUREpF2EPrjV\nzhz1PI9cvsiDD5/i0acv4Hor7lkvIiIiEiqh7yqtnUmayxc5d8WvuKnbVERERFpNqIKb63o8+vSF\nRRMRKuHswYdPzXu+uk1FRESklYQquD3yrTMrTkTYP5ip3l85FhEREWkVoQpur1yanHe8sKKmBXhF\nRESklYUquF29u5unTw5XjxdW1LQAr4iIiLSyUAW3t73+KrLZvCpqIiIi0pZCFdwiEVXUREREpH2F\nfh03ERERkXah4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYi\nIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh\n4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIi\nIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISEgpuIiIiIiGh4CYiIiISErHtbsB2cT2PY8cvcm54mv2D\nGe4+soeI42x3s0RERESWFarg5roejz59YVPC1rHjF/nSU+cBOHluHIB7b967aW0VERER2WyhCm6P\nfOvMpoWtc8PTKx6LiIiINJtQjXF75dLkvOONhK39g5kVj0VERESaTagqblfv7ubpk8PV442ErbuP\n7AGY1+0qIiIi0swaGtyMMQ7we8DNQB74kLX2dM3jrwd+Mzi8BHzAWltY7nxve/1VZLP5TQlbEcfR\nmDYREREJlUZ3lb4XSFpr7wJ+Gfjwgsf/APgxa+2bgC8AB1c6WSTicPeRPewfzHBueJpjxy9Scl0e\nffoCDz58ikefvoDreQ15IyIiIiLbrdFdpffgBzKstY8bY+6oPGCMuQEYAX7OGHMT8Flr7anVTnjs\n+EUeefIc0zMlvvHcRT73jVeYKZRJxKLYs2OAZoeKiIhIa2p0xa0bmKg5LhljKj9zAHgj8NvA24G3\nG2PevNoJzw1PMz1TIpsrMDNbZng8Ty7vH0/PlDQ7VERERFpWoytuk0BXzXHEWusGt0eAF621JwGM\nMV8A7gC+stIJDx/awTdfGMJxHMDDifjruDmOQ8l1OXxoB4ODXSudoq3p2myMrt/66dptjK7fxuj6\nragqFtkAAAq+SURBVJ+uXXNpdHA7Brwb+IQx5k7gmZrHTgOdxphDwYSFe4EHVjvhkWv6uOnqfo6f\nHiEWdSiWXOKxCJGIw01X93Pkmj6Gh7MNeTNhNzjYpWuzAbp+66drtzG6fhuj67d+unYb04jQ2+jg\n9mngPmPMseD4fmPM+4GMtfYBY8y/AB40xgB83Vr7d6udMOI43P+uwxw7fpGzl6eYmS3RkYpxYLBT\n21aJiIhIS2tocLPWesBPLbj7ZM3jXwGOrvW8WspDRERE2lGodk4QERERaWcKbiIiIiIhoeAmIiIi\nEhKh2qsUwPU8jh2/OG/bK01IEBERkXYQuuB27PhFvvTUeQBOnhsHtFOCiIiItIfQdZWeG57G8zym\nckVGJ/M8fmJI+5OKiIhIWwhdcNs/mKlueTVbKDM0OsOx4xe3u1kiIiIiDRe64Hb3kT3s6u8gmYjS\nlU7QmY5rf1IRERFpC6Eb4xZxHI4e3sV0vlS9b/9gZhtbJCIiIrI1QhfcwK+6AfNmloqIiIi0ulAG\nN215JSIiIu0odGPcRERERNqVgpuIiIhISCi4iYiIiISEgpuIiIhISIRycsJaaG9TERERaRUtH9y+\n9vQF/vbrr1IolUnEoniex5tu2bfdzRIRERFZs5bvKv3mC5er22NlcwW++cLl7W6SiIiIyLq0fHAT\nERERaRUtH9zecHgXXelEdW/TNxzetd1NEhEREVmXlh/jds+RPThoeywREREJv5YPbtoeS0RERFpF\n6IOblvsQERGRdhH64Hbs+EW+9NR5AE6eGwdQhU1ERERaUugnJ5wbnl7xWERERKRVhD647R/MrHgs\nIiIi0ipC31VamSWqWaMiIiLS6kIf3DRrVERERNpF6IKbZpGKiIhIuwpdcNMsUhEREWlXoZucoFmk\nIiIi0q5CF9w0i1RERETaVei6SjWLVERERNpV6CpuIiIiIu0qdBU3TU4QERGRdhW6ipsmJ4iIiEi7\nCl1w0+QEERERaVeh6yrV5AQRERFpV6ELbtriSkRERNpV6LpKRURERNpVqCpuDz3+KidOj2iPUhER\nEWlLoQpun//6yxRLrpYBERERkbYUquBW4Xkej58YmjdBQdU3ERERaXWhDG7TMyX/K19S9U1ERETa\nRqgmJ7zzrmu4YX8vu/o76EzHq/drEV4RERFpB6EKbvcdPcj73349Rw/vmne/FuEVERGRdhDKrlIt\nwisiIiLtKJTBTYvwioiISDtqaHAzxjjA7wE3A3ngQ9ba0zWP/yzwIeBycNe/tNaeamSbRERERMKq\n0RW39wJJa+1dxpijwIeD+ypuBz5orX2qwe0QERERCb1GT064B/gCgLX2ceCOBY/fDvyyMeZRY8z/\n1eC2iIiIiIRao4NbNzBRc1wyxtT+zAeBnwTeAtxjjHlng9sjIiIiElqN7iqdBLpqjiPWWrfm+H9a\naycBjDGfA24FPr/C+ZzBwa4VHpbV6PptjK7f+unabYyu38bo+q2frl1zaXTF7RjwTgBjzJ3AM5UH\njDHdwLPGmHQwieGtwBMNbo+IiIhIaDme5zXs5DWzSo8Ed92PP64tY619wBjzw8C/xZ9x+oi19lca\n1hgRERGRkGtocBMRERGRzROqLa9ERERE2pmCm4iIiEhIKLiJiIiIhEQo9ipdbeusdmaMiQF/DFwN\nJID/AjwP/AngAs9aa/9V8NwfB34CKAL/xVr7OWNMCvgLYCf+8i0/aq0d2eK3se2MMTuBbwP/f3v3\nGmJFGcdx/GveqPBC2YWsSIx+IURpZWleS9Ekiijwgkl2ocQkErMsDLpQGmFmgoUSmGjSBcMEMytJ\nzRcaGRHl3wr0TWBZiTcwDHvxPKvHddfdbd1zdvb8Pm/Wec6szPyY2fOfeZ6ZZwTwL86vUfKLs+8E\nOpLO0Y04u0bJ5+5S0rl7FHgYH3uNkmfimRMRwyX1ppmZ5bcezM/rro+IF8q+U2VUK7/rgAWkY/AI\nMCki/nB+dSvNrqRtAvBYRAzMyy2aXVHuuB2fOguYRZo6y5KJwN6IGAKMBhaS8nkmIoYCZ0m6S9JF\nwDRgQF7vFUkdgSnA9/n3lwGzK7ETlZS/QN8CDucm59cIkoYCA/J5OQy4HGfXFGOA9hFxC/Ai8DLO\nr0GSngQWA51z05nIbBEwLiIGAzdJurZ8e1RedeQ3H5gaEbcCq4CnnF/d6sgOSX2BB0qWWzy7ohRu\nDU2dVc3e58QB0J501dQvIjbltrXASKA/sDkijuaXHv9MuoN5PNu87ohybXgr8hrp5PkNaIfza6xR\npHcxfgysBtbg7JpiJ9Ah9yh0I11xO7+G/QLcXbJ8fTMyu01SF6BTROzK7eto21nWzm9sRNS8Y7UD\nqVfL+dXtpOwknQ+8RHqtWY0Wz64ohVtDU2dVrYg4HBGH8gHwAfAsqfiocYCUXxdOzvAg6cuitL1m\n3aoh6X7g94hYz4ncSo8t51e/HqT3Mt5LuppcjrNrioNAL2AH8Dapu8rnbgMiYhXpArVGczKradtf\n6//odma3uvWonV9E7AGQNBCYCrzOqd+5zo+Ts8s1yBJgOnCoZLUWz64oxU9DU2dVNUmXAV8CSyNi\nJWmsR40uwD5Shl1rtf/NydnWrFtNJgMjJW0gXRW9C1xQ8rnzq9+fwLp8ZbmTdKVe+kfH2Z3eE8Cn\nESFOHHudSj53fo3T3L93tYveqstS0ljSGNUxeZyk82tYP+BKUm/Ne0AfSfMoQ3ZFKdzqnTqr2uX+\n9HXAzIhYmpu3SxqS/307sAnYBgyS1ElSN+Bq4AdgCznb/HMTVSQihkbE8DzQ9DvgPmCt82uUzaQx\nHEi6BDgX+CKPfQNn15C/OHEFvo/UTbXd+TXZt805XyPiAHBEUq/cbT2KKspS0kTSnbZhEbE7N2/F\n+Z1Ou4j4JiKuyWMDxwE/RsR0ypBdIZ4qJQ2YHCnp67w8uZIb08rMAroDsyU9Bxwj9be/mQdE/gR8\nGBHHJC0gfdm2Iw3m/UfSImCppE2kJ4omVGQvWpcZwGLnd3r5SanBkraSMpkC7AKWOLtGmQ+8I2kj\n6ancp0nzNTu/pjkT5+ujwArSzYzPImJb2feiAnJ33xvAbmCVpGPAVxHxvPM7rXqnnIqIPS2dnae8\nMjMzMyuIonSVmpmZmVU9F25mZmZmBeHCzczMzKwgXLiZmZmZFYQLNzMzM7OCcOFmZmZmVhAu3Mys\n6khaI+niSm+HmVlT+T1uZmZmZgVRlJkTzMz+F0k9geXAOaR5LR8HVgJDSbM9jCa9Cb070CMiukq6\nEZgHnA3sBR4pmQ7IzKxi3FVqZm3dg8AnEdEfmAkMIk9ZExGzIqIvcDOwB5icp05aDIyPiBtIBdyS\nimy5mVktLtzMrK37HJghaTnQE1hImkOw1BJgQ0R8BFwF9AZWS9oOzAGuKN/mmpnVz12lZtamRcQW\nSX2AO4CxwGRKJomWNIPURTopN7UHfo2IfvnzdoAfZDCzVsF33MysTZM0F5gUEcuAaUC/ks9Gk7pS\nx5f8yg7gPEmD8vJDpDFyZmYV56dKzaxNk3QpsALoAhwF5gKvAsOA9aQ7bPvyz2PAPcCFwAKgM7Cf\nVPjtKvOmm5mdwoWbmZmZWUG4q9TMzMysIFy4mZmZmRWECzczMzOzgnDhZmZmZlYQLtzMzMzMCsKF\nm5mZmVlBuHAzMzMzKwgXbmZmZmYF8R9ZJvKPJa3c4gAAAABJRU5ErkJggg==\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x12da37128>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "scores = all_models_df.groupby(\"allele\").scores_auc.mean().to_frame().reset_index().sort_values(\"scores_auc\", ascending=False)\n", - "scores[\"size\"] = training_sizes.ix[scores.allele].values\n", - "\n", - "pyplot.figure(figsize=(10, 30))\n", - "pyplot.title(\"Mean AUC over all models\")\n", - "seaborn.barplot(y=\"allele\", x=\"scores_auc\", data=scores, orient=\"h\", color=\"black\")\n", - "\n", - "pyplot.figure(figsize=(10, 5))\n", - "pyplot.title(\"Mean AUC over all models\")\n", - "seaborn.regplot(x=\"size\", y=\"scores_auc\", data=scores, logx=True)\n", - "pyplot.xlim(xmin=0)\n", - "pyplot.ylim(ymin=0.5, ymax=1.0)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.5, 1)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x117545898>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "scores = all_models_df.groupby(\"hyperparameters_dropout_probability\").scores_auc.mean().to_frame().reset_index().sort_values(\"scores_auc\", ascending=False)\n", - "\n", - "pyplot.figure(figsize=(10, 5))\n", - "pyplot.title(\"Dropout\")\n", - "ax = seaborn.barplot(x=\"hyperparameters_dropout_probability\", y=\"scores_auc\", data=all_models_df)\n", - "pyplot.ylim(ymin=0.5, ymax=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x120f4c0b8>" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11f7077f0>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "count_impute = selected_models_df.groupby(\"allele\").hyperparameters_impute.sum()\n", - "\n", - "seaborn.regplot(training_sizes.ix[alleles], count_impute.ix[alleles])\n", - "pyplot.xlim(xmin=0, xmax=10000)\n", - "pyplot.ylim(ymin=0, ymax=16)\n", - "pyplot.title(\"Number of models (out of 16 total in each allele's ensemble)\\nthat use imputation\")\n", - "pyplot.xlabel(\"Training points for allele\")\n", - "pyplot.ylabel(\"Num models\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x120fb1518>" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x120dcf320>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "impute_cums_df = selected_models_df.groupby(\"allele\").hyperparameters_impute.mean().to_frame()\n", - "impute_cums_df[\"size\"] = training_sizes\n", - "impute_cums_df = impute_cums_df.sort_values(\"size\")\n", - "impute_cums_df[\"cum_mean\"] = (\n", - " impute_cums_df.hyperparameters_impute.cumsum() / (numpy.arange(len(impute_cums_df)) + 1))\n", - "impute_cums_df\n", - "seaborn.regplot(\"size\", \"cum_mean\", data=impute_cums_df, fit_reg=False, logx=True)\n", - "pyplot.xscale(\"log\")\n", - "pyplot.xlabel(\"IEDB Measurements\")\n", - "pyplot.ylabel(\"Fraction of models using imputation\")\n", - "pyplot.title(\n", - " \"Fraction of best models for alleles with <= x measurements\\n\"\n", - " \"that use imputation\")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x11e610da0>" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nhAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x120393550>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seaborn.regplot(\n", - " selected_models_df.train_size.values,\n", - " selected_models_df.hyperparameters_dropout_probability.values,\n", - " x_jitter=.015,\n", - " y_jitter=.015)\n", - "pyplot.xlim(xmin=0)\n", - "pyplot.ylim(ymin=0)\n", - "pyplot.title(\"Dropout rate of selected models\")\n", - "pyplot.xlabel(\"Training points for allele\")\n", - "pyplot.ylabel(\"Dropout rate\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x120db5f98>" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11e6162b0>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seaborn.regplot(\n", - " selected_models_df.train_size.values,\n", - " selected_models_df.hyperparameters_embedding_output_dim.values,\n", - " x_jitter=1,\n", - " y_jitter=1)\n", - "pyplot.xlim(xmin=0)\n", - "pyplot.ylim(ymin=0)\n", - "pyplot.title(\"Embedding output dimensions of selected models\")\n", - "pyplot.xlabel(\"Training points for allele\")\n", - "pyplot.ylabel(\"Embedding output dimensions\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x1203ab588>" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nsgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x1208414a8>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seaborn.regplot(\n", - " selected_models_df.train_size.values,\n", - " selected_models_df.hyperparameters_layer_sizes.map(lambda x: x[0]).values,\n", - " x_jitter=5,\n", - " y_jitter=5)\n", - "pyplot.xlim(xmin=0)\n", - "pyplot.ylim(ymin=0)\n", - "pyplot.title(\"Hidden layer size of selected models\")\n", - "pyplot.xlabel(\"Training points for allele\")\n", - "pyplot.ylabel(\"Hidden layer size\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x11e6cbe10>" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nSWg0Go2mJlpJaDQajaYmWkloNBqNpiZaSWg0Go2mJlpJaDQajaYmWkloNBqNpiZaSWg0Go2mJlpJ\naDQajab+7ainAAAgAElEQVQmWkloNBqNpiZaSWg0Go2mJlpJaDQajaYmWkloNBqNpiZaSWg0Go2m\nJlpJaDQajaYmWkloNBqNpiZaSWg0Go2mJlpJaDQajaYmWkloNBqNpiZaSWg0Go2mJpFGX0AIcTXw\nt1LKVwohzgf+DXCBZ6WU7/Pf8x7gvUAJ+Bsp5T2Nlkuj0Wg009NQS0II8UHgC0Dcf+pO4MNSypsA\nUwjxJiHEeuB3gGuAnwM+LoSINlIujUaj0dRHo91NzwO/GHp8uZRyp//3fcBrgKuAR6WUtpRyDDgC\n7GiwXBqNRqOpg4a6m6SU3xZCnB16ygj9nQLagFZgNPR8GlhVz/k7O1vPWMb5QMs5tywFOZeCjKDl\nnGuWipwzoeExiQrc0N+twAgwhlIWlc9PS39/au4kaxCdna1azjlkKci5FGQELedcs5TknAnznd30\ntBDiRv/vW4GdwE+B64UQMSHEKmAb8Ow8y6XRaDSaKsy3JfFHwBf8wPRB4JtSSk8I8RngUZQ76sNS\nyuI8y6XRaDSaKjRcSUgpjwPX+n8fAW6u8p67gLsaLYtGo9FoZoYuptNoNBpNTbSS0Gg0Gk1NtJLQ\naDQaTU2mjUkIIdYAfw+cD/wy8AngD6WUww2WTaPRaDQLTD2WxBdQaaodqAK4buA/GymURqPRaBYH\n9SiJc6WUnwdcKWVRSvkRYHOD5dJoNBrNIqAeJWH7RW4egBDiJUysnNZoNBrNMqWeOok/Bx4Gtgoh\nvoPq1vp/GimURqPRaBYH0yoJKeUPhBBPAVcDFvAb1NlbSaPRaDRLm3qym/YD7w1vBCSEeBq4rJGC\naTQajWbhqScm0Q7c5e8eF2DUerNGo9Folg/1xCT6gFcD3xBCXA68Hz+IrdFoNJrlTT2WhCGlHAJe\ni9qD+mEg0UihNBqNRrM4qEdJ7AeQUjpSyt8B7kZVX2s0Go1mmVNPdtPtFY+/gKrC1mg0Gs0yp6aS\nEEI8LaW8TAjhMh6DCALWnpTSarh0Go1Go1lQaioJKeVl/r+6U6xGo9EsQTzPxXE9SraH7bjYjseP\nnzq28e23XtRd7znqqZM4H3gF8FXgX1H1Eb8vpXx01pJrNBqNZg7xcD0P21aKoOQEf7uTUlFHUoUZ\n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\nAABJRU5ErkJggg==\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11fbc9c18>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seaborn.regplot(\n", - " selected_models_df.hyperparameters_embedding_output_dim.values,\n", - " selected_models_df.hyperparameters_layer_sizes.map(lambda x: x[0]).values,\n", - " x_jitter=5,\n", - " y_jitter=5)\n", - "pyplot.xlim(xmin=0)\n", - "pyplot.ylim(ymin=0)\n", - "pyplot.title(\"Hidden layer size vs. embedding output dims of selected models\")\n", - "pyplot.xlabel(\"Embedding output dimensions\")\n", - "pyplot.ylabel(\"Hidden layer size\")" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<h1>Model selection invocation</h1><pre>#!/bin/bash\n", - "\n", - "if [[ $# -eq 0 ]] ; then\n", - " echo 'WARNING: This script is intended to be called with additional arguments to pass to mhcflurry-class1-allele-specific-cv-and-train'\n", - " echo 'See README.md'\n", - "fi\n", - "\n", - "set -e\n", - "set -x\n", - "\n", - "DOWNLOAD_NAME=models_class1_allele_specific_ensemble\n", - "SCRATCH_DIR=/tmp/mhcflurry-downloads-generation\n", - "SCRIPT_ABSOLUTE_PATH=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)/$(basename \"${BASH_SOURCE[0]}\")\"\n", - "SCRIPT_DIR=$(dirname \"$SCRIPT_ABSOLUTE_PATH\")\n", - "export PYTHONUNBUFFERED=1\n", - "\n", - "mkdir -p \"$SCRATCH_DIR\"\n", - "rm -rf \"$SCRATCH_DIR/$DOWNLOAD_NAME\"\n", - "mkdir \"$SCRATCH_DIR/$DOWNLOAD_NAME\"\n", - "\n", - "# Send stdout and stderr to a logfile included with the archive.\n", - "exec > >(tee -ia \"$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt\")\n", - "exec 2> >(tee -ia \"$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt\" >&2)\n", - "\n", - "# Log some environment info\n", - "date\n", - "pip freeze\n", - "git rev-parse HEAD\n", - "git status\n", - "\n", - "cd $SCRATCH_DIR/$DOWNLOAD_NAME\n", - "\n", - "mkdir models\n", - "\n", - "cp $SCRIPT_DIR/models.py .\n", - "python models.py > models.json\n", - "\n", - "time mhcflurry-class1-allele-specific-ensemble-train \\\n", - " --ensemble-size 16 \\\n", - " --model-architectures models.json \\\n", - " --train-data \"$(mhcflurry-downloads path data_combined_iedb_kim2014)/combined_human_class1_dataset.csv\" \\\n", - " --min-samples-per-allele 20 \\\n", - " --out-manifest selected_models.csv \\\n", - " --out-model-selection-manifest all_models.csv \\\n", - " --out-models models \\\n", - " --verbose \\\n", - " \"$@\"\n", - "\n", - "bzip2 all_models.csv\n", - "cp $SCRIPT_ABSOLUTE_PATH .\n", - "tar -cjf \"../${DOWNLOAD_NAME}.tar.bz2\" *\n", - "\n", - "echo \"Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2\"\n", - "</pre>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "log_path = get_path(\"models_class1_allele_specific_ensemble\", \"GENERATE.sh\")\n", - "with open(log_path) as fd:\n", - " di.display_html(\"<h1>Model selection invocation</h1><pre>%s</pre>\" % fd.read(), raw=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<h1>Model selection log (beginning)</h1><pre>+ date\n", - "Thu Mar 16 13:18:34 UTC 2017\n", - "+ pip freeze\n", - "alabaster==0.7.9\n", - "anaconda-clean==1.0\n", - "anaconda-client==1.5.1\n", - "anaconda-navigator==1.3.1\n", - "appdirs==1.4.0\n", - "argcomplete==1.0.0\n", - "astroid==1.4.7\n", - "astropy==1.2.1\n", - "Babel==2.3.4\n", - "backports.shutil-get-terminal-size==1.0.0\n", - "beautifulsoup4==4.5.1\n", - "biopython==1.68\n", - "bitarray==0.8.1\n", - "blaze==0.10.1\n", - "bokeh==0.12.2\n", - "boto==2.42.0\n", - "bottle==0.12.13\n", - "Bottleneck==1.1.0\n", - "cffi==1.7.0\n", - "chest==0.2.3\n", - "click==6.6\n", - "climate==0.4.6\n", - "cloudpickle==0.2.1\n", - "clyent==1.2.2\n", - "colorama==0.3.7\n", - "conda==4.2.9\n", - "conda-build==2.0.2\n", - "configobj==5.0.6\n", - "contextlib2==0.5.3\n", - "cryptography==1.5\n", - "CVXcanon==0.1.1\n", - "cvxpy==0.4.8\n", - "cycler==0.10.0\n", - "Cython==0.24.1\n", - "cytoolz==0.8.0\n", - "dask==0.11.0\n", - "datacache==0.4.20\n", - "datashape==0.5.2\n", - "decorator==4.0.10\n", - "dill==0.2.5\n", - "docutils==0.12\n", - "downhill==0.4.0\n", - "dynd==0.7.3.dev1\n", - "ecos==2.0.4\n", - "et-xmlfile==1.0.1\n", - "fancyimpute==0.1.0\n", - "fastcache==1.0.2\n", - "filelock==2.0.6\n", - "Flask==0.11.1\n", - "Flask-Cors==2.1.2\n", - "gevent==1.1.2\n", - "google-api-python-client==1.5.5\n", - "greenlet==0.4.10\n", - "gtfparse==0.0.6\n", - "h5py==2.6.0\n", - "HeapDict==1.0.0\n", - "httplib2==0.9.2\n", - "humanize==0.5.1\n", - "idna==2.1\n", - "imagesize==0.7.1\n", - "ipdb==0.10.2\n", - "ipykernel==4.5.0\n", - "ipython==5.1.0\n", - "ipython-genutils==0.1.0\n", - "ipywidgets==5.2.2\n", - "itsdangerous==0.24\n", - "jdcal==1.2\n", - "jedi==0.9.0\n", - "Jinja2==2.8\n", - "joblib==0.10.3\n", - "jsonschema==2.5.1\n", - "jupyter==1.0.0\n", - "jupyter-client==4.4.0\n", - "jupyter-console==5.0.0\n", - "jupyter-core==4.2.0\n", - "Keras==1.2.0\n", - "knnimpute==0.0.1\n", - "-e git+git@github.com:hammerlab/kubeface.git@91fa80a571b9f870c4ec945b834a97fdf863fbc7#egg=kubeface\n", - "lazy-object-proxy==1.2.1\n", - "llvmlite==0.13.0\n", - "locket==0.2.0\n", - "lxml==3.6.4\n", - "MarkupSafe==0.23\n", - "matplotlib==1.5.3\n", - "memoized-property==1.0.3\n", - "-e git+git@github.com:hammerlab/mhcflurry.git@2925ce8d6c08e8ac0170504b06f1be384a0fc169#egg=mhcflurry\n", - "mhcnames==0.1.0\n", - "mhctools==0.4.1\n", - "mistune==0.7.3\n", - "mock==2.0.0\n", - "mpmath==0.19\n", - "multipledispatch==0.4.8\n", - "multiprocess==0.70.4\n", - "nb-anacondacloud==1.2.0\n", - "nb-conda==2.0.0\n", - "nb-conda-kernels==2.0.0\n", - "nbconvert==4.2.0\n", - "nbformat==4.1.0\n", - "nbpresent==3.0.2\n", - "-e git+git@github.com:hammerlab/neon.git@f343737d19e1b9509137bf63b9d291d2d8c8bcaf#egg=neon\n", - "networkx==1.11\n", - "nltk==3.2.1\n", - "nose==1.3.7\n", - "notebook==4.2.3\n", - "numba==0.28.1\n", - "numexpr==2.6.1\n", - "numpy==1.11.1\n", - "oauth2client==4.0.0\n", - "odo==0.5.0\n", - "openpyxl==2.3.2\n", - "pandas==0.18.1\n", - "parse==1.6.6\n", - "partd==0.3.6\n", - "path.py==0.0.0\n", - "pathlib2==2.1.0\n", - "patsy==0.4.1\n", - "pbr==1.10.0\n", - "pep8==1.7.0\n", - "pepdata==0.7.0\n", - "pexpect==4.0.1\n", - "pickleshare==0.7.4\n", - "Pillow==3.3.1\n", - "pkginfo==1.3.2\n", - "plac==0.9.6\n", - "ply==3.9\n", - "progressbar33==2.4\n", - "prompt-toolkit==1.0.3\n", - "psutil==4.3.1\n", - "ptyprocess==0.5.1\n", - "py==1.4.31\n", - "pyasn1==0.1.9\n", - "pyasn1-modules==0.0.8\n", - "pycosat==0.6.1\n", - "pycparser==2.14\n", - "pycrypto==2.6.1\n", - "pycurl==7.43.0\n", - "pyensembl==1.0.3\n", - "pyflakes==1.3.0\n", - "Pygments==2.1.3\n", - "pylint==1.5.4\n", - "pyopen==0.0.6\n", - "pyOpenSSL==16.0.0\n", - "pyparsing==2.1.4\n", - "pytest==2.9.2\n", - "python-dateutil==2.5.3\n", - "pytz==2016.6.1\n", - "PyVCF==0.6.8\n", - "PyYAML==3.12\n", - "pyzmq==15.4.0\n", - "QtAwesome==0.3.3\n", - "qtconsole==4.2.1\n", - "QtPy==1.1.2\n", - "redis==2.10.5\n", - "requests==2.11.1\n", - "rope-py3k==0.9.4.post1\n", - "rsa==3.4.2\n", - "ruamel-yaml===-VERSION\n", - "scikit-image==0.12.3\n", - "scikit-learn==0.18.1\n", - "scipy==0.18.1\n", - "scs==1.2.6\n", - "seaborn==0.7.1\n", - "sercol==0.0.2\n", - "serializable==0.1.1\n", - "simplegeneric==0.8.1\n", - "simplejson==3.10.0\n", - "singledispatch==3.4.0.3\n", - "six==1.10.0\n", - "sklearn==0.0\n", - "snowballstemmer==1.2.1\n", - "sockjs-tornado==1.0.3\n", - "Sphinx==1.4.6\n", - "spyder==3.0.0\n", - "SQLAlchemy==1.0.13\n", - "statsmodels==0.6.1\n", - "sympy==1.0\n", - "tables==3.2.3.1\n", - "terminado==0.6\n", - "Theano==0.8.2\n", - "tinytimer==0.0.0\n", - "toolz==0.8.0\n", - "tornado==4.4.1\n", - "traitlets==4.3.0\n", - "typechecks==0.0.2\n", - "unicodecsv==0.14.1\n", - "uritemplate==3.0.0\n", - "varcode==0.5.11\n", - "wcwidth==0.1.7\n", - "Werkzeug==0.11.11\n", - "widgetsnbextension==1.2.6\n", - "wrapt==1.10.6\n", - "xlrd==1.0.0\n", - "XlsxWriter==0.9.3\n", - "xlwt==1.1.2\n", - "You are using pip version 8.1.2, however version 9.0.1 is available.\n", - "You should consider upgrading via the 'pip install --upgrade pip' command.\n", - "+ git rev-parse HEAD\n", - "2925ce8d6c08e8ac0170504b06f1be384a0fc169\n", - "+ git status\n", - "On branch add-class1-ensemble\n", - "Your branch is up-to-date with 'origin/add-class1-ensemble'.\n", - "nothing to commit, working directory clean\n", - "+ cd /tmp/mhcflurry-downloads-generation/models_class1_allele_specific_ensemble\n", - "+ mkdir models\n", - "+ cp /home/tim/sinai/git/mhcflurry/downloads-generation/models_class1_allele_specific_ensemble/models.py .\n", - "+ python models.py\n", - "Using Theano backend.\n", - "/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n", - " \"This module will be removed in 0.20.\", DeprecationWarning)\n", - "Models: 162\n", - "++ mhcflurry-downloads path data_combined_iedb_kim2014\n", - "Using Theano backend.\n", - "/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n", - " \"This module will be removed in 0.20.\", DeprecationWarning)\n", - "+ mhcflurry-class1-allele-specific-ensemble-train --ensemble-size 16 --model-architectures models.json --train-data /home/tim/.local/share/mhcflurry/4/0.0.8/data_combined_iedb_kim2014//combined_human_class1_dataset.csv --min-samples-per-allele 20 --out-manifest selected_models.csv --out-model-selection-manifest all_models.csv --out-models models --verbose --parallel-backend kubeface --target-tasks 10000 --kubeface-backend kubernetes --kubeface-storage gs://kubeface-tim --kubeface-worker-image hammerlab/mhcflurry-misc:latest --kubeface-kubernetes-task-resources-memory-mb 6000 --kubeface-worker-path-prefix venv-py3/bin --kubeface-max-simultaneous-tasks 200 --kubeface-speculation-max-reruns 3 --kubeface-cache-key-prefix tim-note-tim-2017-03-12-16-37-22-27499bde\n", - "Using Theano backend.\n", - "/home/tim/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n", - " \"This module will be removed in 0.20.\", DeprecationWarning)\n", - "To show stack trace, run:\n", - "kill -s USR1 992\n", - "INFO:root:Running with arguments: Namespace(alleles=None, dask_scheduler=None, ensemble_size=16, kubeface_backend='kubernetes', kubeface_cache_key_prefix='tim-note-tim-2017-03-12-16-37-22-27499bde', kubeface_kubernetes_cluster=None, kubeface_kubernetes_image_pull_policy='Always', kubeface_kubernetes_retries=12, kubeface_kubernetes_task_resources_cpu=1, kubeface_kubernetes_task_resources_memory_mb=6000.0, kubeface_local_process_docker_command='docker', kubeface_max_simultaneous_tasks=200, kubeface_never_cleanup=False, kubeface_poll_seconds=30.0, kubeface_speculation_max_reruns=3, kubeface_speculation_percent=20, kubeface_speculation_runtime_percentile=99, kubeface_storage='gs://kubeface-tim', kubeface_wait_to_raise_task_exception=False, kubeface_worker_image='hammerlab/mhcflurry-misc:latest', kubeface_worker_kubeface_install_command='{pip} install https://github.com/hammerlab/kubeface/archive/master.zip', kubeface_worker_kubeface_install_policy='if-not-present', kubeface_worker_path_prefix='venv-py3/bin', kubeface_worker_pip='pip', kubeface_worker_pip_packages=[], max_models=None, min_samples_per_allele=20, model_architectures=<_io.TextIOWrapper name='models.json' mode='r' encoding='UTF-8'>, num_local_processes=None, num_local_threads=1, out_manifest='selected_models.csv', out_model_selection_manifest='all_models.csv', out_models_dir='models', parallel_backend='kubeface', quiet=False, target_tasks=10000, train_data='/home/tim/.local/share/mhcflurry/4/0.0.8/data_combined_iedb_kim2014//combined_human_class1_dataset.csv', verbose=True)\n", - "Using parallel backend: <Kubeface backend, client=<kubeface.client.Client object at 0x7fe5429fdac8>>\n", - "INFO:root:Read 162 model architectures\n", - "INFO:root:Loaded training data: Dataset(n=192550, alleles=['ELA-A1', 'Gogo-B0101', 'H-2-DB', 'H-2-DD', 'H-2-KB', 'H-2-KBM8', 'H-2-KD', 'H-2-KK', 'H-2-LD', 'H-2-LQ', 'HLA-A0101', 'HLA-A0201', 'HLA-A0202', 'HLA-A0203', 'HLA-A0204', 'HLA-A0205', 'HLA-A0206', 'HLA-A0207', 'HLA-A0210', 'HLA-A0211', 'HLA-A0212', 'HLA-A0216', 'HLA-A0217', 'HLA-A0219', 'HLA-A0250', 'HLA-A0301', 'HLA-A0302', 'HLA-A0319', 'HLA-A1', 'HLA-A11', 'HLA-A1101', 'HLA-A1102', 'HLA-A2', 'HLA-A2301', 'HLA-A24', 'HLA-A2402', 'HLA-A2403', 'HLA-A2501', 'HLA-A26', 'HLA-A2601', 'HLA-A2602', 'HLA-A2603', 'HLA-A2902', 'HLA-A3', 'HLA-A3/11', 'HLA-A3001', 'HLA-A3002', 'HLA-A3101', 'HLA-A3201', 'HLA-A3207', 'HLA-A3215', 'HLA-A3301', 'HLA-A6601', 'HLA-A6801', 'HLA-A6802', 'HLA-A6823', 'HLA-A6901', 'HLA-A7401', 'HLA-A8001', 'HLA-B0702', 'HLA-B0801', 'HLA-B0802', 'HLA-B0803', 'HLA-B1401', 'HLA-B1402', 'HLA-B1501', 'HLA-B1502', 'HLA-B1503', 'HLA-B1509', 'HLA-B1517', 'HLA-B1542', 'HLA-B1801', 'HLA-B27', 'HLA-B2701', 'HLA-B2702', 'HLA-B2703', 'HLA-B2704', 'HLA-B2705', 'HLA-B2706', 'HLA-B2710', 'HLA-B2720', 'HLA-B3501', 'HLA-B3503', 'HLA-B3508', 'HLA-B3701', 'HLA-B3801', 'HLA-B39', 'HLA-B3901', 'HLA-B40', 'HLA-B4001', 'HLA-B4002', 'HLA-B4013', 'HLA-B4201', 'HLA-B4202', 'HLA-B44', 'HLA-B4402', 'HLA-B4403', 'HLA-B4501', 'HLA-B4506', 'HLA-B4601', 'HLA-B4801', 'HLA-B51', 'HLA-B5101', 'HLA-B5201', 'HLA-B5301', 'HLA-B5401', 'HLA-B5701', 'HLA-B5702', 'HLA-B5703', 'HLA-B58', 'HLA-B5801', 'HLA-B5802', 'HLA-B60', 'HLA-B62', 'HLA-B7', 'HLA-B7301', 'HLA-B8', 'HLA-B8101', 'HLA-B8301', 'HLA-BOLA102101', 'HLA-BOLA200801', 'HLA-BOLA201201', 'HLA-BOLA402401', 'HLA-BOLA601301', 'HLA-BOLA601302', 'HLA-BOLAHD6', 'HLA-C0303', 'HLA-C0401', 'HLA-C0501', 'HLA-C0602', 'HLA-C0702', 'HLA-C0802', 'HLA-C1', 'HLA-C1203', 'HLA-C1402', 'HLA-C1502', 'HLA-C4', 'HLA-E0101', 'HLA-E0103', 'HLA-EQCA100101', 'HLA-RT1A', 'HLA-RT1BL', 'HLA-SLA10401', 'Mamu-A01', 'Mamu-A02', 'Mamu-A07', 'Mamu-A100101', 'Mamu-A100201', 'Mamu-A101101', 'Mamu-A11', 'Mamu-A20102', 'Mamu-A2201', 'Mamu-A2601', 'Mamu-A70103', 'Mamu-B01', 'Mamu-B01704', 'Mamu-B03', 'Mamu-B04', 'Mamu-B06502', 'Mamu-B08', 'Mamu-B1001', 'Mamu-B17', 'Mamu-B3901', 'Mamu-B52', 'Mamu-B6601', 'Mamu-B8301', 'Mamu-B8701', 'Patr-A0101', 'Patr-A0301', 'Patr-A0401', 'Patr-A0602', 'Patr-A0701', 'Patr-A0901', 'Patr-B0101', 'Patr-B0901', 'Patr-B1301', 'Patr-B1701', 'Patr-B2401'])\n", - "</pre>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "log_path = get_path(\"models_class1_allele_specific_ensemble\", \"LOG.txt\")\n", - "with open(log_path) as fd:\n", - " lines = fd.readlines(100000)\n", - " di.display_html(\"<h1>Model selection log (beginning)</h1><pre>%s</pre>\" % \"\".join(lines), raw=True)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [py3k]", - "language": "python", - "name": "Python [py3k]" - }, - "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.5.2" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/downloads-generation/models_class1_allele_specific_ensemble/models.py b/downloads-generation/models_class1_allele_specific_ensemble/models.py deleted file mode 100644 index 08be52528c05610c02e5808e0fde405d33306903..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_ensemble/models.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -from mhcflurry.class1_allele_specific_ensemble import HYPERPARAMETER_DEFAULTS -import json - -models = HYPERPARAMETER_DEFAULTS.models_grid( - impute=[False, True], - activation=["tanh"], - layer_sizes=[[12], [64], [128]], - embedding_output_dim=[8, 32, 64], - dropout_probability=[0, .1, .25], - fraction_negative=[0, .1, .2], - n_training_epochs=[250], - - # Imputation arguments - impute_method=["mice"], - imputer_args=[ - # Arguments specific to imputation method (mice) - {"n_burn_in": 5, "n_imputations": 50, "n_nearest_columns": 25} - ], - impute_min_observations_per_peptide=[3], - impute_min_observations_per_allele=[3]) - -sys.stderr.write("Models: %d\n" % len(models)) -print(json.dumps(models, indent=4)) diff --git a/downloads-generation/models_class1_allele_specific_single/GENERATE.sh b/downloads-generation/models_class1_allele_specific_single/GENERATE.sh deleted file mode 100755 index 93463556a3f946d77522ab590d9b76bdf033fc76..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single/GENERATE.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -if [[ $# -eq 0 ]] ; then - echo 'WARNING: This script is intended to be called with additional arguments to pass to mhcflurry-class1-allele-specific-cv-and-train' - echo 'At minimum you probably want to pass --dask-scheduler <IP:PORT> as training many models on one node is extremely ' - echo 'slow.' -fi - -set -e -set -x - -DOWNLOAD_NAME=models_class1_allele_specific_single -SCRATCH_DIR=/tmp/mhcflurry-downloads-generation -SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") -export PYTHONUNBUFFERED=1 - -mkdir -p "$SCRATCH_DIR" -rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" -mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" - -# Send stdout and stderr to a logfile included with the archive. -exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") -exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) - -# Log some environment info -date -# pip freeze -# git rev-parse HEAD -# git status - -cd $SCRATCH_DIR/$DOWNLOAD_NAME - -mkdir models - -cp $SCRIPT_DIR/models.py $SCRIPT_DIR/imputer.json . -python models.py > models.json - -time mhcflurry-class1-allele-specific-cv-and-train \ - --model-architectures models.json \ - --imputer-description imputer.json \ - --train-data "$(mhcflurry-downloads path data_combined_iedb_kim2014)/combined_human_class1_dataset.csv" \ - --min-samples-per-allele 200 \ - --out-cv-results cv.csv \ - --out-production-results production.csv \ - --out-models models \ - --verbose \ - "$@" - -cp $SCRIPT_ABSOLUTE_PATH . -tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * - -echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" diff --git a/downloads-generation/models_class1_allele_specific_single/README.md b/downloads-generation/models_class1_allele_specific_single/README.md deleted file mode 100644 index 0003e3cd699e1122401f2797060815a7ab768d00..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Class I allele-specific models (single) - -This download contains trained MHC Class I allele-specific MHCflurry models. The training data used is in the [data_combined_iedb_kim2014](../data_combined_iedb_kim2014) MHCflurry download. We first select network hyperparameters for each allele individually using cross validation over the models enumerated in [models.py](models.py). The best hyperparameter settings are selected via average of AUC (at 500nm), F1, and Kendall's Tau over the training folds. We then train the production models over the full training set using the selected hyperparameters. - -The training script supports multi-node parallel execution using the [kubeface](https://github.com/hammerlab/kubeface) librarie. - -To use kubeface, you should make a google storage bucket and pass it below with the --storage-prefix argument. - -To generate this download we run: - -``` -./GENERATE.sh \ - --cv-folds-per-task 10 \ - --backend kubernetes \ - --storage-prefix gs://kubeface \ - --worker-image hammerlab/mhcflurry:latest \ - --kubernetes-task-resources-memory-mb 10000 \ - --worker-path-prefix venv-py3/bin \ - --max-simultaneous-tasks 200 \ - -``` diff --git a/downloads-generation/models_class1_allele_specific_single/imputer.json b/downloads-generation/models_class1_allele_specific_single/imputer.json deleted file mode 100644 index f761431606102dd65adadb5dcdcf036a966bee9c..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single/imputer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "imputation_method_name": "mice", - "n_burn_in": 5, - "n_imputations": 50, - "n_nearest_columns": 25, - "min_observations_per_peptide": 5, - "min_observations_per_allele": 100 -} diff --git a/downloads-generation/models_class1_allele_specific_single/models.py b/downloads-generation/models_class1_allele_specific_single/models.py deleted file mode 100644 index 30f8e3d5e0a5cbdc3426147d118d3fd22edae304..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single/models.py +++ /dev/null @@ -1,15 +0,0 @@ -import sys -from mhcflurry.class1_allele_specific.train import HYPERPARAMETER_DEFAULTS -import json - -models = HYPERPARAMETER_DEFAULTS.models_grid( - impute=[False, True], - activation=["tanh"], - layer_sizes=[[12], [64], [128]], - embedding_output_dim=[8, 32, 64], - dropout_probability=[0, .1, .25], - fraction_negative=[0, .1, .2], - n_training_epochs=[250]) - -sys.stderr.write("Models: %d\n" % len(models)) -print(json.dumps(models, indent=4)) diff --git a/downloads-generation/models_class1_allele_specific_single_kim2014_only/GENERATE.sh b/downloads-generation/models_class1_allele_specific_single_kim2014_only/GENERATE.sh deleted file mode 100755 index 943cc6fcce0f71ff30923754771d1557bd507ab6..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single_kim2014_only/GENERATE.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -if [[ $# -eq 0 ]] ; then - echo 'WARNING: This script is intended to be called with additional arguments to pass to mhcflurry-class1-allele-specific-cv-and-train' - echo 'At minimum you probably want to pass --dask-scheduler <IP:PORT> as training many models on one node is extremely ' - echo 'slow.' -fi - -set -e -set -x - -DOWNLOAD_NAME=models_class1_allele_specific_single_kim2014_only -SCRATCH_DIR=/tmp/mhcflurry-downloads-generation -SCRIPT_ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -SCRIPT_DIR=$(dirname "$SCRIPT_ABSOLUTE_PATH") -export PYTHONUNBUFFERED=1 - -mkdir -p "$SCRATCH_DIR" -rm -rf "$SCRATCH_DIR/$DOWNLOAD_NAME" -mkdir "$SCRATCH_DIR/$DOWNLOAD_NAME" - -# Send stdout and stderr to a logfile included with the archive. -exec > >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt") -exec 2> >(tee -ia "$SCRATCH_DIR/$DOWNLOAD_NAME/LOG.txt" >&2) - -# Log some environment info -date -pip freeze -git rev-parse HEAD -git status - -cd $SCRATCH_DIR/$DOWNLOAD_NAME - -mkdir models - -cp $SCRIPT_DIR/models.py $SCRIPT_DIR/imputer.json . -python models.py > models.json - -time mhcflurry-class1-allele-specific-cv-and-train \ - --model-architectures models.json \ - --imputer-description imputer.json \ - --train-data "$(mhcflurry-downloads path data_kim2014)/bdata.2009.mhci.public.1.txt" \ - --test-data "$(mhcflurry-downloads path data_kim2014)/bdata.2013.mhci.public.blind.1.txt" \ - --min-samples-per-allele 50 \ - --out-cv-results cv.csv \ - --out-production-results production.csv \ - --out-models models \ - --verbose \ - "$@" - -cp $SCRIPT_ABSOLUTE_PATH . -tar -cjf "../${DOWNLOAD_NAME}.tar.bz2" * - -echo "Created archive: $SCRATCH_DIR/$DOWNLOAD_NAME.tar.bz2" diff --git a/downloads-generation/models_class1_allele_specific_single_kim2014_only/README.md b/downloads-generation/models_class1_allele_specific_single_kim2014_only/README.md deleted file mode 100644 index 6cecfebb82cf745063e5244b36877980801cb818..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single_kim2014_only/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Class I allele specific models (single) trained and tested in Kim 2014 dataset - -This is a reimplementation of the analysis in [Predicting Peptide-MHC Binding Affinities With Imputed Training Data](http://biorxiv.org/content/early/2016/05/22/054775). - diff --git a/downloads-generation/models_class1_allele_specific_single_kim2014_only/imputer.json b/downloads-generation/models_class1_allele_specific_single_kim2014_only/imputer.json deleted file mode 100644 index c17f86cc5c2ebecb0bfcf333cab86dbb8cf1b96a..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single_kim2014_only/imputer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "imputation_method_name": "mice", - "n_burn_in": 5, - "n_imputations": 50, - "n_nearest_columns": 25, - "min_observations_per_peptide": 2, - "min_observations_per_allele": 2 -} diff --git a/downloads-generation/models_class1_allele_specific_single_kim2014_only/models.py b/downloads-generation/models_class1_allele_specific_single_kim2014_only/models.py deleted file mode 100644 index 6375cd4510bfebadd4df529a6884c1eb1632f162..0000000000000000000000000000000000000000 --- a/downloads-generation/models_class1_allele_specific_single_kim2014_only/models.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys -from mhcflurry.class1_allele_specific.train import HYPERPARAMETER_DEFAULTS -import json - -models = HYPERPARAMETER_DEFAULTS.models_grid( - #impute=[False, True], - impute=[False], - activation=["tanh"], - layer_sizes=[[12], [64], [128]], - embedding_output_dim=[8, 32, 64], - dropout_probability=[0, .1, .25], - # fraction_negative=[0, .1, .2], - n_training_epochs=[250]) - -sys.stderr.write("Models: %d\n" % len(models)) -print(json.dumps(models, indent=4)) diff --git a/mhcflurry/__init__.py b/mhcflurry/__init__.py index bb50dabcd968bf7ce5460a0668b9bae8b5c322ca..4420dcbbfd919085e5bb9e82d0573f4ad11969a4 100644 --- a/mhcflurry/__init__.py +++ b/mhcflurry/__init__.py @@ -12,24 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .class1_allele_specific.class1_binding_predictor import ( +from .class1_affinity_prediction.class1_binding_predictor import ( Class1BindingPredictor) -from .prediction import predict -from .affinity_measurement_dataset import AffinityMeasurementDataset -from .class1_allele_specific_ensemble import Class1EnsembleMultiAllelePredictor -from .class1_allele_specific import Class1SingleModelMultiAllelePredictor -from .measurement_collection import MeasurementCollection -from . import parallelism +from .class1_affinity_prediction.multi_allele_predictor_ensemble import ( + MultiAllelePredictorEnsemble) __version__ = "0.2.0" __all__ = [ "Class1BindingPredictor", - "predict", - "parallelism", - "AffinityMeasurementDataset", - "Class1EnsembleMultiAllelePredictor", - "Class1SingleModelMultiAllelePredictor", - "MeasurementCollection", + "MultiAllelePredictorEnsemble", "__version__", ] diff --git a/mhcflurry/affinity_measurement_dataset.py b/mhcflurry/affinity_measurement_dataset.py deleted file mode 100644 index 724442193342e2bdd031edf86760acd148399f2f..0000000000000000000000000000000000000000 --- a/mhcflurry/affinity_measurement_dataset.py +++ /dev/null @@ -1,843 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function, division, absolute_import -from collections import defaultdict, OrderedDict -import logging - - -from six import string_types -import pandas as pd -import numpy as np -from typechecks import require_iterable_of -from sklearn.cross_validation import StratifiedKFold - -from .common import geometric_mean, groupby_indices, shuffle_split_list -from .dataset_helpers import ( - prepare_pMHC_affinity_arrays, - load_dataframe -) -from .peptide_encoding import fixed_length_index_encoding -from .imputation_helpers import ( - check_dense_pMHC_array, - prune_dense_matrix_and_labels, - dense_pMHC_matrix_to_nested_dict, - imputer_from_name -) - - -class AffinityMeasurementDataset(object): - """ - Peptide-MHC binding dataset with helper methods for constructing - different representations (arrays, DataFrames, dictionaries, &c). - - This class is specific for affinity measurements (IC50s), whereas the - MeasurementCollection class supports both affinitites and other - measurement types like mass spec hits. - - Design considerations: - - want to allow multiple measurements for each pMHC pair (which can - be dynamically combined) - - optional sample weights associated with each pMHC measurement - """ - def __init__(self, df): - """ - Constructs a AffinityMeasurementDataset from a pandas DataFrame with the following - columns: - - allele - - peptide - - affinity - - Also, there is an optional column: - - sample_weight - - If `sample_weight` is missing then it is filled with a default value - of 1.0 - - Parameters - ---------- - df : pandas.DataFrame - """ - columns = set(df.columns) - - for expected_column_name in {"allele", "peptide", "affinity"}: - if expected_column_name not in columns: - raise ValueError( - "Missing column '%s' from DataFrame" % - expected_column_name) - # make allele and peptide columns the index, and copy it - # so we can add a column without any observable side-effect in - # the calling code - df = df.set_index(["allele", "peptide"], drop=False) - - if "sample_weight" not in columns: - df["sample_weight"] = np.ones(len(df), dtype=float) - - self._df = df - self._alleles = np.asarray(df["allele"]) - self._peptides = np.asarray(df["peptide"]) - self._affinities = np.asarray(df["affinity"]) - self._sample_weights = np.asarray(df["sample_weight"]) - - def to_dataframe(self): - """ - Returns DataFrame representation of data contained in AffinityMeasurementDataset - """ - return self._df - - @property - def peptides(self): - """ - Array of peptides from pMHC measurements. - """ - return self._df["peptide"].values - - @property - def alleles(self): - """ - Array of MHC allele names from pMHC measurements. - """ - return self.to_dataframe()["allele"].values - - @property - def affinities(self): - """ - Array of affinities from pMHC measurements. - """ - return self.to_dataframe()["affinity"].values - - @property - def sample_weights(self): - """ - Array of sample weights for each pMHC measurement. - """ - return self.to_dataframe()["sample_weight"].values - - def __len__(self): - return len(self.to_dataframe()) - - def __str__(self): - return "AffinityMeasurementDataset(n=%d, alleles=%s)" % ( - len(self), list(sorted(self.unique_alleles()))) - - def __repr__(self): - return str(self) - - def __eq__(self, other): - """ - Two datasets are equal if they contain the same number of samples - with the same properties and values. - """ - if type(other) is not AffinityMeasurementDataset: - return False - elif len(self) != len(other): - return False - - columns = self.columns - if len(columns) != len(other.columns): - return False - elif set(columns) != set(other.columns): - return False - - # test for equality of the rows of the two DataFrames regardless - # of order - my_dict = self.allele_and_peptide_pair_to_row_dictionary() - other_dict = other.allele_and_peptide_pair_to_row_dictionary() - - if set(my_dict.keys()) != set(other_dict.keys()): - return False - - for key, my_row in my_dict.items(): - for column in columns: - if my_row[column] != other_dict[key][column]: - return False - return True - - def iterrows(self): - """ - Iterate over tuples containing: (allele, peptide), other_fields - for each pMHC measurement. - """ - return self.to_dataframe().iterrows() - - def allele_and_peptide_pair_to_row_dictionary(self): - """ - Returns a dictionary mapping (allele, peptide) pairs to rows. - """ - return {key: row for (key, row) in self.iterrows()} - - @property - def columns(self): - return self.to_dataframe().columns - - def unique_alleles(self): - """ - Returns the set of allele names contained in this AffinityMeasurementDataset. - """ - return set(self.alleles) - - def unique_peptides(self): - """ - Returns the set of peptide sequences contained in this AffinityMeasurementDataset. - """ - return set(self.peptides) - - def unique_allele_peptide_pairs(self): - """ - Returns set of every unique pMHC pairing in the dataset. - """ - return set(zip(self.alleles, self.peptides)) - - def groupby_allele(self): - """ - Yields a sequence of tuples of allele names with Datasets containing - entries just for that allele. - """ - for (allele_name, group_df) in self.to_dataframe().groupby("allele"): - yield (allele_name, AffinityMeasurementDataset(group_df)) - - def groupby_allele_dictionary(self): - """ - Returns dictionary mapping each allele name to a AffinityMeasurementDataset containing - only entries from that allele. - """ - return dict(self.groupby_allele()) - - def allele_counts_dictionary(self): - """ - Returns a dictionary mapping each allele name to the number of entries - associated with it. - """ - return { - allele_name: len(allele_dataset) - for allele_name, allele_dataset - in self.groupby_allele() - } - - def filter_alleles_by_count(self, min_peptides_per_allele=0): - return self.concat([ - allele_dataset - for (_, allele_dataset) - in self.groupby_allele() - if len(allele_dataset) >= min_peptides_per_allele]) - - def to_nested_dictionary(self, combine_fn=geometric_mean): - """ - Returns a dictionary mapping from allele name to a dictionary which - maps from peptide to measured value. Caution, this eliminates sample - weights! - - Parameters - ---------- - combine_fn : function - How to combine multiple measurements for the same pMHC complex. - Takes affinities and optional `weights` argument. - """ - allele_to_peptide_to_affinities_dict = defaultdict(dict) - allele_to_peptide_to_weights_dict = defaultdict(dict) - key_pairs = set([]) - for allele, peptide, affinity, weight in zip( - self.alleles, self.peptides, self.affinities, self.sample_weights): - # dictionary mapping each peptide to a list of affinities - if peptide not in allele_to_peptide_to_affinities_dict[allele]: - allele_to_peptide_to_affinities_dict[allele][peptide] = [affinity] - allele_to_peptide_to_weights_dict[allele][peptide] = [weight] - else: - allele_to_peptide_to_affinities_dict[allele][peptide].append(affinity) - allele_to_peptide_to_weights_dict[allele][peptide].append(weight) - key_pairs.add((allele, peptide)) - return { - allele: { - peptide: combine_fn( - allele_to_peptide_to_affinities_dict[allele][peptide], - allele_to_peptide_to_weights_dict[allele][peptide]) - for peptide in allele_to_peptide_to_affinities_dict[allele].keys() - } - for allele in allele_to_peptide_to_affinities_dict.keys() - } - - @classmethod - def from_sequences( - cls, - alleles, - peptides, - affinities, - sample_weights=None, - extra_columns={}): - """ - Parameters - ---------- - alleles : numpy.ndarray, pandas.Series, or list - Name of allele for that pMHC measurement - - peptides : numpy.ndarray, pandas.Series, or list - Sequence of peptide in that pMHC measurement. - - affinities : numpy.ndarray, pandas.Series, or list - Affinity value (typically IC50 concentration) for that pMHC - - sample_weights : numpy.ndarray of float, optional - - extra_columns : dict - Dictionary of any extra properties associated with a - pMHC measurement - """ - alleles, peptides, affinities, sample_weights = \ - prepare_pMHC_affinity_arrays( - alleles=alleles, - peptides=peptides, - affinities=affinities, - sample_weights=sample_weights) - df = pd.DataFrame() - df["allele"] = alleles - df["peptide"] = peptides - df["affinity"] = affinities - df["sample_weight"] = sample_weights - for column_name, column in extra_columns.items(): - if len(column) != len(alleles): - raise ValueError( - "Wrong length for column '%s', expected %d but got %d" % ( - column_name, - len(alleles), - len(column))) - df[column_name] = np.asarray(column) - return cls(df) - - @classmethod - def from_single_allele_dataframe(cls, allele_name, single_allele_df): - """ - Construct a AffinityMeasurementDataset from a single MHC allele's DataFrame - """ - df = single_allele_df.copy() - df["allele"] = allele_name - return cls(df) - - @classmethod - def from_nested_dictionary( - cls, - allele_to_peptide_to_affinity_dict): - """ - Given nested dictionaries mapping allele -> peptide -> affinity, - construct a AffinityMeasurementDataset with uniform sample weights. - """ - alleles = [] - peptides = [] - affinities = [] - for allele, allele_dict in allele_to_peptide_to_affinity_dict.items(): - for peptide, affinity in allele_dict.items(): - alleles.append(allele) - peptides.append(peptide) - affinities.append(affinity) - return cls.from_sequences( - alleles=alleles, - peptides=peptides, - affinities=affinities) - - @classmethod - def create_empty(cls): - """ - Returns an empty AffinityMeasurementDataset containing no pMHC entries. - """ - return cls.from_nested_dictionary({}) - - @classmethod - def from_single_allele_dictionary( - cls, - allele_name, - peptide_to_affinity_dict): - """ - Given a peptide->affinity dictionary for a single allele, - create a AffinityMeasurementDataset. - """ - return cls.from_nested_dictionary({allele_name: peptide_to_affinity_dict}) - - @classmethod - def from_csv( - cls, - filename, - sep=None, - allele_column_name=None, - peptide_column_name=None, - affinity_column_name=None): - df, allele_column_name, peptide_column_name, affinity_column_name = \ - load_dataframe( - filename=filename, - sep=sep, - allele_column_name=allele_column_name, - peptide_column_name=peptide_column_name, - affinity_column_name=affinity_column_name) - df = df.rename(columns={ - allele_column_name: "allele", - peptide_column_name: "peptide", - affinity_column_name: "affinity"}) - return cls(df) - - def get_allele(self, allele_name): - """ - Get AffinityMeasurementDataset for a single allele - """ - if allele_name not in self.unique_alleles(): - raise KeyError("Allele '%s' not found, available alleles: %s" % ( - allele_name, list(sorted(self.unique_alleles())))) - df = self.to_dataframe() - df_allele = df[df.allele == allele_name] - return self.__class__(df_allele) - - def get_alleles(self, allele_names): - """ - Restrict AffinityMeasurementDataset to several allele names. - """ - datasets = [] - for allele_name in allele_names: - datasets.append(self.get_allele(allele_name)) - return self.concat(datasets) - - @classmethod - def concat(cls, datasets): - """ - Concatenate several datasets into a single object. - """ - dataframes = [dataset.to_dataframe() for dataset in datasets] - return cls(pd.concat(dataframes)) - - def replace_allele(self, allele_name, new_dataset): - """ - Replace data for given allele with new entries. - """ - if allele_name not in self.unique_alleles(): - raise ValueError("Allele '%s' not found" % (allele_name,)) - df = self.to_dataframe() - df_without = df[df.allele != allele_name] - new_df = new_dataset.to_dataframe() - combined_df = pd.concat([df_without, new_df]) - return self.__class__(combined_df) - - def flatmap_peptides(self, peptide_fn): - """ - Create zero or more peptides from each pMHC entry. The affinity of all - new peptides is identical to the original, but sample weights are - divided across the number of new peptides. - - Parameters - ---------- - peptide_fn : function - Maps each peptide to a list of peptides. - """ - columns = self.to_dataframe().columns - new_data_dict = OrderedDict( - (column_name, []) - for column_name in columns - ) - if "original_peptide" not in new_data_dict: - create_original_peptide_column = True - new_data_dict["original_peptide"] = [] - - for (allele, peptide), row in self.iterrows(): - new_peptides = peptide_fn(peptide) - n = len(new_peptides) - weight = row["sample_weight"] - # we're either going to create a fresh original peptide column - # or extend the existing original peptide tuple that tracks - # the provenance of entries in the new AffinityMeasurementDataset - original_peptide = row.get("original_peptide") - if original_peptide is None: - original_peptide = () - elif isinstance(original_peptide, string_types): - original_peptide = (original_peptide,) - else: - original_peptide = tuple(original_peptide) - - for new_peptide in new_peptides: - for column_name in columns: - if column_name == "peptide": - new_data_dict["peptide"].append(new_peptide) - elif column_name == "sample_weight": - new_data_dict["sample_weight"].append(weight / n) - elif column_name == "original_peptide": - new_data_dict["original_peptide"] = original_peptide + (peptide,) - else: - new_data_dict[column_name].append(row[column_name]) - if create_original_peptide_column: - new_data_dict["original_peptide"].append((peptide,)) - df = pd.DataFrame(new_data_dict) - return self.__class__(df) - - def kmer_index_encoding( - self, - kmer_size=9, - allow_unknown_amino_acids=True): - """ - Encode peptides in this dataset using a fixed-length vector - representation. - - Parameters - ---------- - kmer_size : int - Length of encoding for each peptide - - allow_unknown_amino_acids : bool - If True, then extend shorter amino acids using "X" character, - otherwise fill in all possible combinations of real amino acids. - - Returns: - - 2d array of encoded kmers - - 1d array of affinity value corresponding to the source - peptide for each kmer - - sample_weights (1 / kmer count per peptide) - - indices of original peptides from which kmers were extracted - """ - if len(self.peptides) == 0: - return ( - np.empty((0, kmer_size), dtype=int), - np.empty((0,), dtype=float), - np.empty((0,), dtype=float), - np.empty((0,), dtype=int) - ) - - X_index, _, original_peptide_indices, counts = \ - fixed_length_index_encoding( - peptides=self.peptides, - desired_length=kmer_size, - start_offset_shorten=0, - end_offset_shorten=0, - start_offset_extend=0, - end_offset_extend=0, - allow_unknown_amino_acids=allow_unknown_amino_acids) - original_peptide_indices = np.asarray(original_peptide_indices) - - counts = np.asarray(counts) - kmer_affinities = self.affinities[original_peptide_indices] - kmer_sample_weights = self.sample_weights[original_peptide_indices] - - assert len(original_peptide_indices) == len(kmer_affinities) - assert len(counts) == len(kmer_affinities) - assert len(kmer_sample_weights) == len(kmer_affinities) - - # combine the original sample weights of varying length peptides - # with a 1/n_kmers factor for the number of kmers pulled out of each - # original peptide - combined_sample_weights = kmer_sample_weights * (1.0 / counts) - return X_index, kmer_affinities, combined_sample_weights, original_peptide_indices - - def to_dense_pMHC_affinity_matrix( - self, - min_observations_per_peptide=1, - min_observations_per_allele=1): - """ - Returns a tuple with a dense matrix of affinities, a dense matrix of - sample weights, a list of peptide labels for each row and a list of - allele labels for each column. - - Parameters - ---------- - min_observations_per_peptide : int - Drop peptide rows with fewer than this number of observed values. - - min_observations_per_allele : int - Drop allele columns with fewer than this number of observed values. - """ - allele_to_peptide_to_affinity_dict = self.to_nested_dictionary() - peptides_list = list(sorted(self.unique_peptides())) - peptide_order = {p: i for (i, p) in enumerate(peptides_list)} - n_peptides = len(peptides_list) - alleles_list = list(sorted(self.unique_alleles())) - allele_order = {a: i for (i, a) in enumerate(alleles_list)} - n_alleles = len(alleles_list) - shape = (n_peptides, n_alleles) - X = np.ones(shape, dtype=float) * np.nan - for (allele, allele_dict) in allele_to_peptide_to_affinity_dict.items(): - column_index = allele_order[allele] - for (peptide, affinity) in allele_dict.items(): - row_index = peptide_order[peptide] - X[row_index, column_index] = affinity - - check_dense_pMHC_array(X, peptides_list, alleles_list) - - # drop alleles and peptides with small amounts of data - return prune_dense_matrix_and_labels( - X, peptides_list, alleles_list, - min_observations_per_peptide=min_observations_per_peptide, - min_observations_per_allele=min_observations_per_allele) - - def slice(self, indices): - """ - Create a new AffinityMeasurementDataset by slicing through all columns of this dataset - with the given indices. - """ - indices = np.asarray(indices) - max_index = indices.max() - n_total = len(self) - if max_index >= len(self): - raise ValueError("Invalid index %d for AffinityMeasurementDataset of size %d" % ( - max_index, n_total)) - - df = self.to_dataframe() - df_subset = pd.DataFrame() - for column_name in df.columns: - df_subset[column_name] = np.asarray(df[column_name].values)[indices] - return self.__class__(df_subset) - - def random_split(self, n=None, stratify_fn=None): - """ - Randomly split the AffinityMeasurementDataset into smaller AffinityMeasurementDataset objects. - - Parameters - ---------- - n : int, optional - Size of the left split, half of the dataset if omitted. - - stratify_fn : function, optional - Function that takes a row and returns bool, stratifying sampling - into two groups. - - Returns a pair of AffinityMeasurementDataset objects. - """ - n_total = len(self) - if n is None: - n = n_total // 2 - elif n >= n_total: - raise ValueError( - "Training subset can't have more than %d samples (given n=%d)" % ( - n_total - 1, - n)) - - index_groups = groupby_indices( - iterable=(pair[1] for pair in self.iterrows()), - key_fn=stratify_fn if stratify_fn else lambda _: 0) - - fraction = float(n) / n_total - - left_indices = [] - right_indices = [] - - for _, group_indices in index_groups.items(): - left, right = shuffle_split_list(group_indices, fraction) - left_indices.extend(left) - right_indices.extend(right) - - left = self.slice(left_indices) - right = self.slice(right_indices) - return left, right - - def cross_validation_iterator( - self, - test_allele=None, - n_folds=3, - shuffle=True, - stratify_fn=None): - """ - Yields a sequence of training/test splits of this dataset. - - If test_allele is None then split across all pMHC entries, otherwise - only split the measurements of the specified allele (other alleles - will then always be included in the training datasets). - """ - - n_total = len(self) - if test_allele is None: - test_samples = self - test_sample_indices = np.arange(n_total) - elif test_allele not in self.unique_alleles(): - raise ValueError("Allele '%s' not in AffinityMeasurementDataset" % test_allele) - - else: - test_sample_indices = np.where(self.alleles == test_allele)[0] - test_samples = self.slice(test_sample_indices) - - n_test_samples = len(test_sample_indices) - - # for uniformity we're using StratifiedKFold even for regular CV - # but with a single label/category - if stratify_fn is None: - stratify_labels = [0] * n_test_samples - else: - stratify_labels = [ - stratify_fn(row) for (_, row) in test_samples.iterrows() - ] - - assert len(stratify_labels) == n_test_samples - - for _, test_indices_in_single_allele in StratifiedKFold( - y=stratify_labels, - n_folds=n_folds, - shuffle=shuffle): - test_data = test_samples.slice(test_indices_in_single_allele) - test_indices_across_alleles = test_sample_indices[test_indices_in_single_allele] - train_mask = np.ones(n_total, dtype=bool) - train_mask[test_indices_across_alleles] = False - train_data = self.slice(train_mask) - yield train_data, test_data - - def split_allele_randomly_and_impute_training_set( - self, - allele, - n_training_samples=None, - stratify_fn=None, - **kwargs): - """ - Split an allele into training and test sets, and then impute values - for peptides missing from the training set using data from other alleles - in this AffinityMeasurementDataset. - - (apologies for the wordy name, this turns out to be a common operation) - - Parameters - ---------- - allele : str - Name of allele - - n_training_samples : int, optional - Size of the training set to return for this allele. - - stratify_fn : function - Function mapping from rows of the AffinityMeasurementDataset to booleans for stratifying - by two groups. - - **kwargs : dict - Extra keyword arguments passed to AffinityMeasurementDataset.impute_missing_values - - Returns three AffinityMeasurementDataset objects: - - training set with original pMHC affinities for given allele - - larger imputed training set for given allele - - test set - """ - dataset_allele = self.get_allele(allele) - dataset_allele_train, dataset_allele_test = dataset_allele.random_split( - n=n_training_samples, stratify_fn=stratify_fn) - full_dataset_without_test_samples = self.difference(dataset_allele_test) - imputed_dataset = full_dataset_without_test_samples.impute_missing_values(**kwargs) - imputed_dataset_allele = imputed_dataset.get_allele(allele) - return dataset_allele_train, imputed_dataset_allele, dataset_allele_test - - def drop_allele_peptide_lists(self, alleles, peptides): - """ - Drop all allele-peptide pairs in the given lists. - - Parameters - ---------- - alleles : list of str - - peptides : list of str - - The two arguments are assumed to be the same length. - - Returns AffinityMeasurementDataset of equal or smaller size. - """ - if len(alleles) != len(peptides): - raise ValueError( - "Expected alleles to be same length (%d) as peptides (%d)" % ( - len(alleles), len(peptides))) - return self.drop_allele_peptide_pairs(list(zip(alleles, peptides))) - - def drop_allele_peptide_pairs(self, allele_peptide_pairs): - """ - Drop all allele-peptide tuple pairs in the given list. - - Parameters - ---------- - allele_peptide_pairs : list of (str, str) tuples - The two arguments are assumed to be the same length. - - Returns AffinityMeasurementDataset of equal or smaller size. - """ - require_iterable_of(allele_peptide_pairs, tuple) - keys_to_remove_set = set(allele_peptide_pairs) - remove_mask = np.array([ - (k in keys_to_remove_set) - for k in zip(self.alleles, self.peptides) - ]) - keep_mask = remove_mask == False - return self.slice(keep_mask) - - def difference(self, other_dataset): - """ - Remove all pMHC pairs in the other dataset from this one. - - Parameters - ---------- - other_dataset : AffinityMeasurementDataset - - Returns a new Dataset object of equal or lesser size. - """ - return self.drop_allele_peptide_lists( - alleles=other_dataset.alleles, - peptides=other_dataset.peptides) - - def intersection(self, other_dataset): - not_in_other = self.difference(other_dataset) - return self.difference(not_in_other) - - def impute_missing_values( - self, - imputation_method, - log_transform=True, - min_observations_per_peptide=1, - min_observations_per_allele=1): - """ - Synthesize new measurements for missing pMHC pairs using the given - imputation_method. - - Parameters - ---------- - imputation_method : object - Expected to have a method called `complete` which takes a 2d array - of floats and replaces some or all NaN values with synthetic - affinities. - - log_transform : bool - Transform affinities with to log10 values before imputation - (and then transform back afterward). - - min_observations_per_peptide : int - Drop peptide rows with fewer than this number of observed values. - - min_observations_per_allele : int - Drop allele columns with fewer than this number of observed values. - - Returns AffinityMeasurementDataset with original pMHC affinities and additional - synthetic samples. - """ - if isinstance(imputation_method, string_types): - imputation_method = imputer_from_name(imputation_method) - - X_incomplete, peptide_list, allele_list = self.to_dense_pMHC_affinity_matrix( - min_observations_per_peptide=min_observations_per_peptide, - min_observations_per_allele=min_observations_per_allele) - - if imputation_method is None: - logging.warn("No imputation method given") - # without an imputation method we should leave all the values - # incomplete and return an empty dataset - X_complete = np.ones_like(X_incomplete) * np.nan - else: - if log_transform: - X_incomplete = np.log(X_incomplete) - - if np.isnan(X_incomplete).sum() == 0: - # if all entries in the matrix are already filled in then don't - # try using an imputation algorithm since it might raise an - # exception. - logging.warn("No missing values, using original data instead of imputation") - X_complete = X_incomplete - else: - X_complete = imputation_method.complete(X_incomplete) - - if log_transform: - X_complete = np.exp(X_complete) - - allele_to_peptide_to_affinity_dict = dense_pMHC_matrix_to_nested_dict( - X=X_complete, - peptide_list=peptide_list, - allele_list=allele_list) - return self.from_nested_dictionary(allele_to_peptide_to_affinity_dict) diff --git a/mhcflurry/amino_acid.py b/mhcflurry/amino_acid.py index 3762a42ef054194278fe145ad1efaa70a154ea98..e5e59cf1acb5f84777fbd756b84448ad0ba62665 100644 --- a/mhcflurry/amino_acid.py +++ b/mhcflurry/amino_acid.py @@ -17,84 +17,10 @@ from __future__ import ( division, absolute_import, ) -import numpy as np +import collections +from copy import copy - -class Alphabet(object): - """ - Used to track the order of amino acids used for peptide encodings - """ - - def __init__(self, **kwargs): - self.letters_to_names = {} - for (k, v) in kwargs.items(): - self.add(k, v) - - def add(self, letter, name): - assert letter not in self.letters_to_names - assert len(letter) == 1 - self.letters_to_names[letter] = name - - def letters(self): - return list(sorted(self.letters_to_names.keys())) - - def names(self): - return [self.letters_to_names[k] for k in self.letters()] - - def index_dict(self): - return {c: i for (i, c) in enumerate(self.letters())} - - def copy(self): - return Alphabet(**self.letters_to_names) - - def __getitem__(self, k): - return self.letters_to_names[k] - - def __setitem__(self, k, v): - self.add(k, v) - - def __len__(self): - return len(self.letters_to_names) - - def index_encoding_list(self, peptides): - index_dict = self.index_dict() - return [ - [index_dict[amino_acid] for amino_acid in peptide] - for peptide in peptides - ] - - def index_encoding(self, peptides, peptide_length): - """ - Encode a set of equal length peptides as a matrix of their - amino acid indices. - """ - X = np.zeros((len(peptides), peptide_length), dtype=int) - index_dict = self.index_dict() - for i, peptide in enumerate(peptides): - for j, amino_acid in enumerate(peptide): - X[i, j] = index_dict[amino_acid] - return X - - def hotshot_encoding( - self, - peptides, - peptide_length): - """ - Encode a set of equal length peptides as a binary matrix, - where each letter is transformed into a length 20 vector with a single - element that is 1 (and the others are 0). - """ - shape = (len(peptides), peptide_length, 20) - index_dict = self.index_dict() - X = np.zeros(shape, dtype=bool) - for i, peptide in enumerate(peptides): - for j, amino_acid in enumerate(peptide): - k = index_dict[amino_acid] - X[i, j, k] = 1 - return X - - -common_amino_acids = Alphabet(**{ +COMMON_AMINO_ACIDS = collections.OrderedDict(sorted({ "A": "Alanine", "R": "Arginine", "N": "Asparagine", @@ -115,9 +41,9 @@ common_amino_acids = Alphabet(**{ "W": "Tryptophan", "Y": "Tyrosine", "V": "Valine", -}) -common_amino_acid_letters = common_amino_acids.letters() +}.items())) +COMMON_AMINO_ACIDS_WITH_UNKNOWN = copy(COMMON_AMINO_ACIDS) +COMMON_AMINO_ACIDS_WITH_UNKNOWN["X"] = "Unknown" -amino_acids_with_unknown = common_amino_acids.copy() -amino_acids_with_unknown.add("X", "Unknown") -amino_acids_with_unknown_letters = amino_acids_with_unknown.letters() +AMINO_ACID_INDEX = dict( + (letter, i) for (i, letter) in enumerate(COMMON_AMINO_ACIDS_WITH_UNKNOWN)) diff --git a/mhcflurry/antigen_presentation/presentation_component_models/mhcflurry_trained_on_hits.py b/mhcflurry/antigen_presentation/presentation_component_models/mhcflurry_trained_on_hits.py index 47be4dca4959cc169c4110ba0c6c17ecae9f696f..58d0101e32535a48083b26d23bd3243d547237ea 100644 --- a/mhcflurry/antigen_presentation/presentation_component_models/mhcflurry_trained_on_hits.py +++ b/mhcflurry/antigen_presentation/presentation_component_models/mhcflurry_trained_on_hits.py @@ -4,7 +4,7 @@ import pandas from numpy import log, exp, nanmean from ...affinity_measurement_dataset import AffinityMeasurementDataset -from ...class1_allele_specific import Class1BindingPredictor +from ...class1_affinity_prediction import Class1BindingPredictor from ...common import normalize_allele_name from .mhc_binding_component_model_base import MHCBindingComponentModelBase diff --git a/mhcflurry/class1_affinity_prediction/__init__.py b/mhcflurry/class1_affinity_prediction/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7deec3d17cba797bc79e69834d742929cf03d476 --- /dev/null +++ b/mhcflurry/class1_affinity_prediction/__init__.py @@ -0,0 +1,7 @@ +from __future__ import absolute_import + +from .class1_binding_predictor import Class1BindingPredictor + +__all__ = [ + 'Class1BindingPredictor', +] diff --git a/mhcflurry/class1_affinity_prediction/class1_binding_predictor.py b/mhcflurry/class1_affinity_prediction/class1_binding_predictor.py new file mode 100644 index 0000000000000000000000000000000000000000..4424aee9f6afb8137511d4d8deabe10aab8c791f --- /dev/null +++ b/mhcflurry/class1_affinity_prediction/class1_binding_predictor.py @@ -0,0 +1,636 @@ +import time +import os +import tempfile +import logging + +import numpy +import pandas + +import keras.models +import keras.layers.pooling +import keras.regularizers +from keras.layers import Input +import keras.layers.merge +from keras.layers.core import Dense, Flatten, Dropout, Reshape +from keras.layers.embeddings import Embedding +from keras.layers.normalization import BatchNormalization +from keras.callbacks import EarlyStopping +import keras.backend as K +import theano.tensor + +from mhcflurry.hyperparameters import HyperparameterDefaults + +from ..encodable_sequences import EncodableSequences +from ..regression_target import to_ic50, from_ic50 +from ..common import random_peptides, amino_acid_distribution + + + +class Class1BindingPredictor(object): + network_hyperparameter_defaults = HyperparameterDefaults( + kmer_size=15, + use_embedding=True, + embedding_input_dim=21, + embedding_output_dim=8, + pseudosequence_use_embedding=True, + pseudosequence_generate_weights=False, + extra_data_length=None, + extra_data_layer_sizes=(), + multiple_output_strategy=None, + multiple_output_activity_regularizer=1.0, + layer_sizes=[100, 32], + dense_layer_l1_regularization=0.0, + dense_layer_l2_regularization=0.0, + activation="tanh", + init="glorot_uniform", + output_activation="sigmoid", + dropout_probability=0.0, + batch_normalization=True, + embedding_init_method="glorot_uniform", + locally_connected=None, + concatenate_locally_connected_with_raw_embedding=False, + optimizer="rmsprop", + ) + + input_encoding_hyperparameter_defaults = HyperparameterDefaults( + left_edge=4, + right_edge=4) + + fit_hyperparameter_defaults = HyperparameterDefaults( + max_epochs=250, + validation_split=None, + early_stopping=False, + take_best_epoch=False, + random_negative_rate=0.0, + random_negative_constant=0, + random_negative_affinity_min=50000.0, + random_negative_affinity_max=50000.0, + random_negative_match_distribution=True, + random_negative_distribution_smoothing=0.0) + + early_stopping_hyperparameter_defaults = HyperparameterDefaults( + monitor='val_loss', + min_delta=0, + patience=0, + verbose=1, + mode='auto') + + hyperparameter_defaults = network_hyperparameter_defaults.extend( + input_encoding_hyperparameter_defaults).extend( + fit_hyperparameter_defaults).extend( + early_stopping_hyperparameter_defaults) + + def __init__(self, **hyperparameters): + self.hyperparameters = self.hyperparameter_defaults.with_defaults( + hyperparameters) + self.network = None + self.fit_history = None + self.fit_seconds = None + self.output_names = None + + def __getstate__(self): + result = dict(self.__dict__) + del result['network'] + result['fit_history'] = None + result['network_json'] = self.network.to_json() + result['network_weights'] = self.get_weights() + return result + + def __setstate__(self, state): + network_json = state.pop('network_json') + network_weights = state.pop('network_weights') + self.__dict__.update(state) + self.network = keras.models.model_from_json(network_json) + self.set_weights(network_weights) + + def get_weights(self): + """ + Returns weights, which can be passed to set_weights later. + """ + return [x.copy() for x in self.network.get_weights()] + + def set_weights(self, weights): + """ + Reset the model weights. + """ + self.network.set_weights(weights) + + def peptides_to_network_input(self, peptides): + encoder = EncodableSequences.create(peptides) + if self.hyperparameters['use_embedding']: + encoded = encoder.fixed_length_categorical_encoding( + max_length=self.hyperparameters['kmer_size'], + **self.input_encoding_hyperparameter_defaults.subselect( + self.hyperparameters)) + else: + encoded = encoder.fixed_length_one_hot_encoding( + max_length=self.hyperparameters['kmer_size'], + **self.input_encoding_hyperparameter_defaults.subselect( + self.hyperparameters)) + assert len(encoded) == len(peptides) + return encoded + + def pseudosequence_to_network_input(self, pseudosequences): + encoder = EncodableSequences.create(pseudosequences) + if self.hyperparameters['pseudosequence_use_embedding']: + encoded = encoder.categorical_encoding() + else: + encoded = encoder.one_hot_encoding() + assert len(encoded) == len(pseudosequences) + return encoded + + def fit( + self, + peptides, + affinities, + output_assignments, + allele_pseudosequences=None, + sample_weights=None, + verbose=1): + self.output_names = sorted(set(output_assignments)) + + encodable_peptides = EncodableSequences.create(peptides) + peptide_encoding = self.peptides_to_network_input(encodable_peptides) + peptide_to_encoding = dict( + zip(encodable_peptides.sequences, peptide_encoding)) + + length_counts = ( + pandas.Series(encodable_peptides.sequences) + .str.len().value_counts().to_dict()) + + num_random_negative = {} + for length in range(8, 16): + num_random_negative[length] = int( + length_counts.get(length, 0) * + self.hyperparameters['random_negative_rate'] + + self.hyperparameters['random_negative_constant']) + num_random_negative = pandas.Series(num_random_negative) + print("Random negative counts per length: %s" % ( + str(num_random_negative))) + + aa_distribution = None + if self.hyperparameters['random_negative_match_distribution']: + aa_distribution = amino_acid_distribution( + encodable_peptides.sequences, + smoothing=self.hyperparameters[ + 'random_negative_distribution_smoothing']) + print("Using amino acid distribution for random negative: %s" % ( + str(aa_distribution))) + + y_values = from_ic50(affinities) + assert numpy.isnan(y_values).sum() == 0, ( + numpy.isnan(y_values).sum()) + + if self.hyperparameters['multiple_output_strategy'] is not None: + network_output_names = self.output_names + y_df = pandas.DataFrame({ + 'y': y_values, + 'output_assignment': output_assignments, + }).pivot(values="y", columns="output_assignment") + y_df["peptide"] = encodable_peptides.sequences + y_df.groupby("peptide").mean() + network_output_names = self.output_names + + y_dict = dict((c, y_df[c].values) for c in y_df.columns) + x = numpy.stack( + y_df.peptide.map(peptide_to_encoding).values) + else: + network_output_names = ["output"] + y_dict = {'output': y_values} + x = peptide_encoding + + try: + callbacks = [] + if self.hyperparameters['take_best_epoch']: + weights_file_fd = tempfile.NamedTemporaryFile( + prefix="mhcflurry-model-checkpoint-", + suffix=".hdf5", + delete=False) + weights_file = weights_file_fd.name + print("Checkpointing to: %s" % weights_file) + weights_file_fd.close() + + checkpointer = keras.callbacks.ModelCheckpoint( + weights_file, + monitor="val_loss", + save_best_only=True, + save_weights_only=False) + callbacks.append(checkpointer) + else: + weights_file = None + + if self.hyperparameters['early_stopping']: + assert self.hyperparameters['validation_split'] > 0 + callback = EarlyStopping( + **self.early_stopping_hyperparameter_defaults.subselect( + self.hyperparameters)) + callbacks.append(callback) + + x_dict = { + 'peptide': x, + } + pseudosequence_length = None + if allele_pseudosequences is not None: + pseudosequences_input = self.pseudosequence_to_network_input( + allele_pseudosequences) + pseudosequence_length = len(pseudosequences_input[0]) + x_dict['pseudosequence'] = pseudosequences_input + + if self.network is None: + self.network = self.make_network( + output_names=network_output_names, + pseudosequence_length=pseudosequence_length, + **self.network_hyperparameter_defaults.subselect( + self.hyperparameters)) + + start = time.time() + if num_random_negative.sum() == 0: + self.fit_history = self.network.fit( + x_dict, + y_dict, + shuffle=True, + verbose=verbose, + epochs=self.hyperparameters['max_epochs'], + validation_split=self.hyperparameters['validation_split'], + sample_weight=sample_weights, + callbacks=callbacks) + else: + assert len(y_dict) == 1 + y_dict['output'] = numpy.concatenate([ + from_ic50( + numpy.random.uniform( + self.hyperparameters[ + 'random_negative_affinity_min'], + self.hyperparameters[ + 'random_negative_affinity_max'], + int(num_random_negative.sum()))), + y_dict['output'], + ]) + if sample_weights is not None: + sample_weights = numpy.concatenate([ + numpy.ones(int(num_random_negative.sum())), + sample_weights]) + val_losses = [] + min_val_loss_iteration = None + min_val_loss = None + + for i in range(self.hyperparameters['max_epochs']): + # TODO: handle pseudosequence here + assert len(x_dict) == 1 + random_negative_peptides_list = [] + for (length, count) in num_random_negative.items(): + random_negative_peptides_list.extend( + random_peptides( + count, + length=length, + distribution=aa_distribution)) + #peptide_lengths.extend([length] * count) + #peptide_lengths.extend([ + # len(s) for s in encodable_peptides.sequences + #]) + random_negative_peptides_encodable = ( + EncodableSequences.create( + random_negative_peptides_list)) + random_negative_peptides_encoding = ( + self.peptides_to_network_input( + random_negative_peptides_encodable)) + x_dict["peptide"] = numpy.concatenate([ + random_negative_peptides_encoding, x + ]) + print("Epoch %3d / %3d. Min val loss at epoch %s" % ( + i, + self.hyperparameters['max_epochs'], + min_val_loss_iteration)) + self.fit_history = self.network.fit( + x_dict, + y_dict, + shuffle=True, + verbose=verbose, + epochs=1, + validation_split=self.hyperparameters[ + 'validation_split'], + sample_weight=sample_weights, + callbacks=callbacks) + + if self.hyperparameters['validation_split']: + val_loss = self.fit_history.history['val_loss'][-1] + val_losses.append(val_loss) + + if min_val_loss is None or val_loss <= min_val_loss: + min_val_loss = val_loss + min_val_loss_iteration = i + + if self.hyperparameters['early_stopping']: + threshold = ( + min_val_loss_iteration + + self.hyperparameters['patience']) + if i > threshold: + print("Early stopping") + break + if weights_file is not None: + self.network.load_weights(weights_file) + self.fit_seconds = time.time() - start + + finally: + if weights_file is not None: + os.unlink(weights_file) + + def predict(self, peptides, allele_pseudosequences=None): + x_dict = { + 'peptide': self.peptides_to_network_input(peptides) + } + if allele_pseudosequences is not None: + pseudosequences_input = self.pseudosequence_to_network_input( + allele_pseudosequences) + x_dict['pseudosequence'] = pseudosequences_input + predictions_raw = numpy.array(self.network.predict(x_dict)) + if predictions_raw.ndim == 3: + predictions_raw = numpy.squeeze(predictions_raw, axis=2).T + + assert predictions_raw.shape == ( + len(peptides), + len(self.network.output_layers)), predictions_raw.shape + + result = dict( + (k.name, to_ic50(v)) + for (k, v) + in zip(self.network.output_layers, predictions_raw.T)) + + if set(result) != set(self.output_names): + # Simulate multiple outputs + assert set(result) == set(["output"]), set(result) + result = dict((k, result["output"]) for k in self.output_names) + return result + + @staticmethod + def make_network( + output_names, + pseudosequence_length, + kmer_size, + use_embedding, + embedding_input_dim, + embedding_output_dim, + pseudosequence_use_embedding, + pseudosequence_generate_weights, + extra_data_length, + extra_data_layer_sizes, + multiple_output_strategy, + multiple_output_activity_regularizer, + layer_sizes, + dense_layer_l1_regularization, + dense_layer_l2_regularization, + activation, + init, + output_activation, + dropout_probability, + batch_normalization, + embedding_init_method, + locally_connected, + concatenate_locally_connected_with_raw_embedding, + optimizer): + + if multiple_output_strategy is None: + assert len(output_names) == 1 + else: + assert multiple_output_strategy in ("simple", "bottleneck") + + if use_embedding: + peptide_input = Input( + shape=(kmer_size,), dtype='int32', name='peptide') + raw_embedding_layer = Embedding( + input_dim=embedding_input_dim, + output_dim=embedding_output_dim, + input_length=kmer_size, + embeddings_initializer=embedding_init_method)(peptide_input) + else: + peptide_input = Input( + shape=(kmer_size, 21), dtype='float32', name='peptide') + raw_embedding_layer = peptide_input + + inputs = [peptide_input] + + embedding_layer = raw_embedding_layer + + if locally_connected is not None: + for locally_connected_params in locally_connected: + embedding_layer = keras.layers.LocallyConnected1D( + **locally_connected_params)(embedding_layer) + if concatenate_locally_connected_with_raw_embedding: + embedding_layer = keras.layers.concatenate([ + Flatten()(raw_embedding_layer), + Flatten()(embedding_layer), + ]) + else: + embedding_layer = Flatten()(embedding_layer) + else: + embedding_layer = Flatten()(embedding_layer) + if batch_normalization: + embedding_layer = BatchNormalization()(embedding_layer) + if dropout_probability: + embedding_layer = Dropout(dropout_probability)(embedding_layer) + + if extra_data_length: + extra_info_input = Input( + shape=(extra_data_length,), dtype='float32', name='extra') + inputs.append(extra_info_input) + + for layer_size in extra_data_layer_sizes: + extra_info_input = Dense(layer_size, activation=activation)( + extra_info_input) + if batch_normalization: + extra_info_input = BatchNormalization()( + extra_info_input) + if dropout_probability > 0: + extra_info_input = Dropout(dropout_probability)( + extra_info_input) + x = keras.layers.concatenate([embedding_layer, extra_info_input]) + else: + x = embedding_layer + + if pseudosequence_length: + if pseudosequence_use_embedding: + pseudosequence_input = Input( + shape=(pseudosequence_length,), + dtype='int32', + name='pseudosequence') + pseudo_embedding_layer = Embedding( + input_dim=embedding_input_dim, + output_dim=embedding_output_dim, + input_length=pseudosequence_length, + embeddings_initializer=embedding_init_method)( + pseudosequence_input) + else: + pseudosequence_input = Input( + shape=(pseudosequence_length, 21), + dtype='float32', name='peptide') + pseudo_embedding_layer = pseudosequence_input + inputs.append(pseudosequence_input) + pseudo_embedding_layer = Flatten()(pseudo_embedding_layer) + + if pseudosequence_generate_weights: + pseudo_dense = Dense( + 32, activation="tanh")(pseudo_embedding_layer) + + num_filters = 7 + kernel_size = 3 + output_length = 11 + + pseudo_lc1_kernel_shape = (output_length * kernel_size * embedding_output_dim, num_filters) + pseudo_lc2_kernel_shape = (output_length * kernel_size * num_filters, num_filters) + + + pseudo_lc1_kernel = Dense(numpy.prod(pseudo_lc1_kernel_shape), activation="tanh")(pseudo_dense) + pseudo_lc1_bias = Dense(num_filters * 11, activation="tanh")(pseudo_dense) + pseudo_lc2_kernel = Dense(numpy.prod(pseudo_lc2_kernel_shape), activation="tanh")(pseudo_dense) + pseudo_lc2_bias = Dense(num_filters * 11, activation="tanh")(pseudo_dense) + pseudo_hidden_kernel = Dense(num_filters * 11 * 32, activation="tanh")(pseudo_dense) + pseudo_hidden_bias = Dense(32, activation="tanh")(pseudo_dense) + + pseudo_lc1_kernel = Reshape(pseudo_lc1_kernel_shape)(pseudo_lc1_kernel) + #pseudo_lc1_bias = Reshape((11, num_filters))(pseudo_lc1_bias) + pseudo_lc2_kernel = Reshape(pseudo_lc2_kernel_shape)(pseudo_lc2_kernel) + #pseudo_lc2_bias = Reshape((11, num_filters))(pseudo_lc2_bias) + pseudo_hidden_kernel = Reshape((num_filters * 11, 32))(pseudo_hidden_kernel) + + def make_peptide_tiles(input_tensor): + components = [] + for start in range(11): + components.append(K.flatten( + input_tensor[:, start : start + kernel_size])) + return K.concatenate(components, axis=0) + + print("Raw embedding layer", raw_embedding_layer) + peptide_tiles = keras.layers.Lambda( + make_peptide_tiles, + output_shape=(11 * kernel_size * embedding_output_dim,))( + raw_embedding_layer) + + def merger(inputs): + # TODO: A*b + c + print("inside merger", inputs) + kernel = inputs[0] + bias = inputs[1] + data = inputs[2] + print("kernel", kernel._keras_shape) + print("data", data._keras_shape) + _, kernel_size, filters = kernel._keras_shape + print(kernel_size, filters) + + #dots = [] + #for f in range(filters): + # dots.append(K.dot(data, kernel[:,:,f])))) + + #result = K.reshape(K.concatenate(dots), (-1, ) + #print("after dot", result._keras_shape) + #assert result._keras_shape[1:] == (), result._keras_shape + #result += K.reshape(bias, (1, output_length, filters)) + return result + + lc1_output = keras.layers.merge( + [pseudo_lc1_kernel, pseudo_lc1_bias, peptide_tiles], + mode=merger, + output_shape=(11 * num_filters,) + ) + print("merged", lc1_output._keras_shape) + lc1_output = keras.layers.Activation("relu")(lc1_output) + + #lc1_output_tiles = keras.layers.Lambda( + # make_peptide_tiles, + # output_shape=(11 * kernel_size * num_filters,))(lc1_output) + + #lc2_output = keras.layers.merge( + # [pseudo_lc1_kernel, pseudo_lc1_bias, lc1_output_tiles], + # mode=merger, + # output_shape=(11, num_filters) + #) + #lc2_output = keras.layers.Activation("relu")(lc2_output) + #lc2_output = Flatten()(lc2_output) + lc2_output = lc1_output + + #def dense_merger(inputs): + # print("inside dense merger", inputs) + # print([i._keras_shape for i in inputs]) + # return inputs[0] + + x = keras.layers.merge( + [pseudo_hidden_kernel, pseudo_hidden_bias, lc2_output], + mode=merger, + output_shape=(32, 1)) + x = keras.layers.Activation("relu")(x) + print("x shape", type(x), x._keras_shape) + else: + x = keras.layers.concatenate([ + x, pseudo_embedding_layer + ]) + + for layer_size in layer_sizes: + kernel_regularizer = None + l1 = dense_layer_l1_regularization + l2 = dense_layer_l2_regularization + if l1 > 0 or l2 > 0: + kernel_regularizer = keras.regularizers.l1_l2(l1, l2) + + x = Dense( + layer_size, + activation=activation, + kernel_regularizer=kernel_regularizer)(x) + if batch_normalization: + x = BatchNormalization()(x) + if dropout_probability > 0: + x = Dropout(dropout_probability)(x) + + outputs = [] + if multiple_output_strategy == "bottleneck": + print("x shape2", type(x), x._keras_shape) + bottleneck = Dense( + 1, + kernel_initializer=init, + activation="linear")(x) + + peptide_average = keras.layers.pooling.AveragePooling1D( + pool_size=1)(raw_embedding_layer) + peptide_average = Flatten()(peptide_average) + + peptide_and_bottleneck = keras.layers.concatenate([ + bottleneck, peptide_average + ]) + + for output_name in output_names: + nudge = Dense( + 8, + kernel_initializer=init, + activation=activation, + )(peptide_and_bottleneck) + + nudge = Dense( + 1, + kernel_initializer="zeros", + activity_regularizer=keras.regularizers.l2( + multiple_output_activity_regularizer))(nudge) + + output = keras.layers.add( + [bottleneck, nudge]) + output = keras.layers.Activation( + output_activation, name=output_name)(output) + outputs.append(output) + else: + for output_name in output_names: + output = Dense( + 1, + kernel_initializer=init, + activation=output_activation, + name=output_name)(x) + outputs.append(output) + model = keras.models.Model(inputs=inputs, outputs=outputs) + model.compile( + loss="mse" if len(output_names) == 1 else mse_loss_supporting_nans, + optimizer=optimizer) + return model + + +def mse_loss_supporting_nans(y_true, y_pred): + squared = K.square(y_pred - y_true) + loss = K.sum( + K.switch(theano.tensor.isnan(y_true), 0.0, squared), + axis=-1) + return loss diff --git a/mhcflurry/class1_allele_specific/cv_and_train_command.py b/mhcflurry/class1_affinity_prediction/cv_and_train_command.py similarity index 100% rename from mhcflurry/class1_allele_specific/cv_and_train_command.py rename to mhcflurry/class1_affinity_prediction/cv_and_train_command.py diff --git a/mhcflurry/class1_affinity_prediction/multi_allele_predictor_ensemble.py b/mhcflurry/class1_affinity_prediction/multi_allele_predictor_ensemble.py new file mode 100644 index 0000000000000000000000000000000000000000..4e8b965ca4ade19be20f44023591931fefbcdb54 --- /dev/null +++ b/mhcflurry/class1_affinity_prediction/multi_allele_predictor_ensemble.py @@ -0,0 +1,300 @@ +import collections +import pickle +import time +import hashlib +from os.path import join, exists + +import numpy +import pandas + +import mhcnames + +from ..encodable_sequences import EncodableSequences + +from .class1_binding_predictor import Class1BindingPredictor + + +class MultiAllelePredictorEnsemble(object): + def __init__( + self, + allele_to_allele_specific_models={}, + class1_pan_allele_models=[], + allele_to_pseudosequence=None, + manifest_df=None): + + if class1_pan_allele_models: + assert allele_to_pseudosequence, "Pseudosequences required" + + self.allele_to_allele_specific_models = ( + allele_to_allele_specific_models) + self.class1_pan_allele_models = class1_pan_allele_models + self.allele_to_pseudosequence = allele_to_pseudosequence + + if manifest_df is None: + manifest_df = pandas.DataFrame() + manifest_df["name"] = [] + manifest_df["allele"] = [] + manifest_df["hyperparameters"] = [] + manifest_df["history"] = [] + manifest_df["num_measurements"] = [] + manifest_df["random_negative_rate"] = [] + manifest_df["sources"] = [] + manifest_df["fit_seconds"] = [] + manifest_df["model"] = [] + self.manifest_df = manifest_df + + def save(self, models_dir, model_names_to_write=None): + num_models = len(self.class1_pan_allele_models) + sum( + len(v) for v in self.allele_to_allele_specific_models.values()) + assert len(self.manifest_df) == num_models, ( + "Manifest seems out of sync with models: %d vs %d entries" % ( + len(self.manifest_df), num_models)) + + if model_names_to_write is None: + # Write all models + models_names_to_write = self.manifest_df.model_name.values + + sub_manifest_df = self.manifest_df.ix[ + self.manifest_df.model_name.isin(models_names_to_write) + ] + + for (_, row) in sub_manifest_df.iterrows(): + model_path = join(models_dir, "%s.pickle" % row.name) + with open(join(model_path), 'wb') as fd: + pickle.dump(row.model, fd, protocol=2) + print("Wrote: %s" % model_path) + + write_manifest_df = self.manifest_df[[ + c for c in self.manifest_df.columns if c != "model" + ]] + manifest_path = join(models_dir, "manifest.csv") + write_manifest_df.to_csv(manifest_path, index=False) + print("Wrote: %s" % manifest_path) + + @staticmethod + def model_name(allele, num): + random_string = hashlib.sha1( + str(time.time()).encode()).hexdigest()[:16] + return "%s-%d-%s" % (allele, num, random_string) + + @staticmethod + def load(models_dir, max_models=None): + manifest_path = join(models_dir, "manifest.csv") + manifest_df = pandas.read_csv(manifest_path, nrows=max_models) + manifest_df["hyperparameters"] = manifest_df.hyperparameters.map(eval) + manifest_df["history"] = manifest_df.history.map(eval) + + allele_to_allele_specific_models = collections.defaultdict(list) + class1_pan_allele_models = [] + all_models = [] + for (_, row) in manifest_df.iterrows(): + model_path = join(models_dir, "%s.pickle" % row["name"]) + print("Loading model: %s" % model_path) + with open(model_path, 'rb') as fd: + model = pickle.load(fd) + if row.allele == "pan-class1": + class1_pan_allele_models.append(model) + else: + allele_to_allele_specific_models[row.allele].append(model) + all_models.append(model) + + manifest_df["model"] = all_models + + pseudosequences = None + if exists(join(models_dir, "pseudosequences.csv")): + pseudosequences = pandas.read_csv( + join(models_dir, "pseudosequences.csv"), + index_col="allele").to_dict() + + print( + "Loaded %d class1 pan allele predictors, %d pseudosequences, and " + "%d allele specific models: %s" % ( + len(class1_pan_allele_models), + len(pseudosequences) if pseudosequences else 0, + sum(len(v) for v in allele_to_allele_specific_models.values()), + ", ".join( + "%s (%d)" % (allele, len(v)) + for (allele, v) + in sorted(allele_to_allele_specific_models.items())))) + + result = MultiAllelePredictorEnsemble( + allele_to_allele_specific_models=allele_to_allele_specific_models, + class1_pan_allele_models=class1_pan_allele_models, + allele_to_pseudosequence=pseudosequences, + manifest_df=manifest_df) + return result + + def fit_allele_specific_predictors( + self, + n_models, + architecture_hyperparameters, + allele, + peptides, + affinities, + output_assignments=None, + models_dir_for_save=None, + verbose=1): + + allele = mhcnames.normalize_allele_name(allele) + models = self._fit_predictors( + n_models=n_models, + architecture_hyperparameters=architecture_hyperparameters, + peptide=peptides, + affinities=affinities, + output_assignments=output_assignments, + allele_pseudosequences=None, + verbose=verbose) + + models_list = [] + for (i, model) in enumerate(models): + name = self.model_name(allele, i) + models_list.append(model) # models is a generator + row = pandas.Series({ + "allele": allele, + "hyperparameters": architecture_hyperparameters, + "history": model.fit_history.history, + "name": name, + "num_measurements": len(peptides), + "fit_seconds": model.fit_seconds, + "model": model, + }).to_frame().T + self.manifest_df = pandas.concat( + [self.manifest_df, row], ignore_index=True) + if models_dir_for_save: + self.save(models_dir_for_save, model_names_to_write=[name]) + + if allele not in self.allele_to_allele_specific_models: + self.allele_to_allele_specific_models[allele] = [] + self.allele_to_allele_specific_models[allele].extend(models_list) + return models + + def fit_class1_pan_allele_models( + self, + n_models, + architecture_hyperparameters, + alleles, + peptides, + affinities, + output_assignments=None, + models_dir_for_save=None, + verbose=1): + + alleles = pandas.Series(alleles).map(mhcnames.normalize_allele_name) + allele_pseudosequences = alleles.map(self.allele_to_pseudosequence) + + models = self._fit_predictors( + n_models=n_models, + architecture_hyperparameters=architecture_hyperparameters, + peptides=peptides, + affinities=affinities, + output_assignments=output_assignments, + allele_pseudosequences=allele_pseudosequences) + + models_list = [] + for (i, model) in enumerate(models): + name = self.model_name("pan-class1", i) + models_list.append(model) # models is a generator + row = pandas.Series({ + "allele": "pan-class1", + "hyperparameters": architecture_hyperparameters, + "history": model.fit_history.history, + "name": name, + "num_measurements": len(peptides), + "fit_seconds": model.fit_seconds, + "model": model, + }).to_frame().T + self.manifest_df = pandas.concat( + [self.manifest_df, row], ignore_index=True) + if models_dir_for_save: + self.save(models_dir_for_save, model_names_to_write=[name]) + + self.class1_pan_allele_models.extend(models_list) + return models + + def _fit_predictors( + self, + n_models, + architecture_hyperparameters, + peptides, + affinities, + output_assignments, + allele_pseudosequences, + verbose=1): + + encodable_peptides = EncodableSequences.create(peptides) + if output_assignments is None: + output_assignments = ["output"] * len(encodable_peptides.sequences) + for i in range(n_models): + print("Training model %d / %d" % (i + 1, n_models)) + model = Class1BindingPredictor(**architecture_hyperparameters) + model.fit( + encodable_peptides, + affinities, + output_assignments=output_assignments, + allele_pseudosequences=allele_pseudosequences, + verbose=verbose) + yield model + + def predict( + self, + peptides, + alleles, + include_mean=True, + include_peptides_and_alleles=True): + input_df = pandas.DataFrame({ + 'peptide': peptides, + 'allele': alleles, + }) + input_df["allele"] = input_df.allele.map( + mhcnames.normalize_allele_name) + + result_dataframes = [] + + if self.class1_pan_allele_models: + allele_pseudosequences = input_df.allele.map( + self.allele_to_pseudosequence) + encodable_peptides = EncodableSequences.create( + input_df.peptide.values) + for model in self.class1_pan_allele_models: + result_df = pandas.DataFrame( + model.predict( + encodable_peptides, + allele_pseudosequences=allele_pseudosequences)) + result_dataframes.append(result_df) + + if self.allele_to_allele_specific_models: + for allele in input_df.allele.unique(): + mask = (input_df.allele == allele).values + allele_peptides = EncodableSequences.create( + input_df.ix[mask].peptide.values) + models = self.allele_to_allele_specific_models.get(allele, []) + for model in models: + result_df = pandas.DataFrame( + model.predict(allele_peptides), + index=input_df.index[mask].values) + result_dataframes.append(result_df) + + model_predictions = pandas.Panel( + dict(enumerate(result_dataframes)), + major_axis=input_df.index) + + # Geometric mean + log_means = numpy.log(model_predictions).mean(0) + first_columns = [] + if include_mean: + log_means["mean"] = log_means.mean(1) + first_columns.append("mean") + + result = numpy.exp(log_means) + + if include_peptides_and_alleles: + result["peptide"] = input_df.peptide.values + result["allele"] = input_df.allele.values + first_columns.append("allele") + first_columns.append("peptide") + + assert len(result) == len(peptides), result.shape + return result[ + list(reversed(first_columns)) + + [c for c in result.columns if c not in first_columns] + ] diff --git a/mhcflurry/class1_allele_specific/scoring.py b/mhcflurry/class1_affinity_prediction/scoring.py similarity index 100% rename from mhcflurry/class1_allele_specific/scoring.py rename to mhcflurry/class1_affinity_prediction/scoring.py diff --git a/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py b/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py new file mode 100644 index 0000000000000000000000000000000000000000..359cdaaab36b745a16b78d2d6af7ed1036d47e86 --- /dev/null +++ b/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py @@ -0,0 +1,357 @@ +""" +Train single allele models + +""" +import sys +import argparse +import json +import os +import pickle + +import pandas + +import mhcnames + + +from .class1_binding_predictor import Class1BindingPredictor +from ..common import random_peptides + + +def normalize_allele_name(s): + try: + return mhcnames.normalize_allele_name(s) + except Exception: + return "UNKNOWN" + + +parser = argparse.ArgumentParser(usage=__doc__) + +parser.add_argument( + "--data-csv", + help="Path to data csv") +parser.add_argument( + "--iedb-data-csv", + help="Path to IEDB mhc_ligand_full.csv") + +parser.add_argument( + "--out-models-dir", + help="Directory to write models and manifest") +parser.add_argument( + "--hyperparameters", + required=True, + help="JSON of hyperparameters") +parser.add_argument( + "--allele", + default=None, + nargs="+", + help="Alleles") +parser.add_argument( + "--min-measurements-per-category", + type=int, + default=500, + help="Alleles") +parser.add_argument( + "--min-measurements-per-allele", + type=int, + default=50, + help="Alleles") +parser.add_argument( + "--random-negative-rate", + type=float, + default=0.0) +parser.add_argument( + "--random-negative-fixed", + type=int, + default=0) +parser.add_argument( + "--pretrain", + action="store_true", + default=False) +parser.add_argument( + "--only-quantitative", + action="store_true", + default=False) +parser.add_argument( + "--verbose", + type=int, + default=1, + help="Alleles") + + +def add_random_negative_peptides( + df, + rate=1, + fixed=0, + affinity=50000.0, + weight=1.0, + lengths=range(8, 16)): + new_dfs = [df] + measurement_sources = df.measurement_source.unique() + (allele,) = df.allele.unique() + length_counts = df.peptide.str.len().value_counts().to_dict() + for length in lengths: + count = length_counts.get(length, 0) + desired = int((count * rate + fixed)) + print("Adding %d * %d + %d = %d random negative %d-mers" % ( + count, rate, fixed, desired, length)) + peptides = random_peptides(desired, length=length) + + for measurement_source in measurement_sources: + new_df = pandas.DataFrame({ + "allele": allele, + "peptide": peptides, + "measurement_type": "affinity", + "measurement_source": measurement_source, + "measurement_value": affinity, + "weight": weight, + }) + new_dfs.append(new_df) + result = pandas.concat(new_dfs, ignore_index=True) + print("Final result shape: %s" % str(result.shape)) + return result + + +def load_data_csv(filename, alleles): + df = pandas.read_csv(filename) + if alleles: + df = df.ix[df.allele.isin(alleles)] + return df + + +upper_thresholds = { + "Negative": 50000.0, + "Positive": 100.0, + "Positive-High": 50.0, + "Positive-Intermediate": 500.0, + "Positive-Low": 5000.0, +} + + +def load_iedb_data_csv( + iedb_csv, + alleles=None, + min_measurements_per_category=100, + min_measurements_per_allele=50, + include_qualitative=True): + iedb_df = pandas.read_csv(iedb_csv, skiprows=1) + print("Loaded iedb data: %s" % str(iedb_df.shape)) + iedb_df["allele"] = iedb_df["Allele Name"].map(normalize_allele_name) + print("Dropping un-parseable alleles: %s" % ", ".join( + iedb_df.ix[iedb_df.allele == "UNKNOWN"]["Allele Name"].unique())) + iedb_df = iedb_df.ix[iedb_df.allele != "UNKNOWN"] + + if not alleles: + print("Taking all alleles with %d measurements" % ( + min_measurements_per_allele)) + allele_counts = iedb_df.allele.value_counts() + alleles = list(allele_counts.ix[ + allele_counts > min_measurements_per_allele + ].index) + print("Selected alleles: %s" % ' '.join(alleles)) + + iedb_df = iedb_df.ix[ + iedb_df.allele.isin(alleles) + ] + print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) + + quantitative = iedb_df.ix[iedb_df["Units"] == "nM"] + print("Quantitative measurements: %d" % len(quantitative)) + + qualitative = iedb_df.ix[iedb_df["Units"] != "nM"].copy() + print("Qualitative measurements: %d" % len(qualitative)) + non_mass_spec_qualitative = qualitative.ix[ + (~qualitative["Method/Technique"].str.contains("mass spec")) + ].copy() + non_mass_spec_qualitative["Quantitative measurement"] = ( + non_mass_spec_qualitative["Qualitative Measure"].map(upper_thresholds)) + print("Qualitative measurements after dropping MS: %d" % ( + len(non_mass_spec_qualitative))) + + iedb_df = pandas.concat( + ( + ([quantitative]) + + ([non_mass_spec_qualitative] if include_qualitative else [])), + ignore_index=True) + + print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) + + print("Subselecting to valid peptides. Starting with: %d" % len(iedb_df)) + iedb_df["Description"] = iedb_df.Description.str.strip() + iedb_df = iedb_df.ix[ + iedb_df.Description.str.match("^[ACDEFGHIKLMNPQRSTVWY]+$") + ] + print("Now: %d" % len(iedb_df)) + + print("Subselecting to 8-to-15-mers") + iedb_df = iedb_df.ix[ + (iedb_df["Description"].str.len() >= 8) & + (iedb_df["Description"].str.len() <= 15) + ].copy() + print("IEDB measurements per allele:\n%s" % iedb_df.allele.value_counts()) + + print("Annotating last author and category") + iedb_df["last_author"] = iedb_df.Authors.map( + lambda x: ( + x.split(";")[-1] + .split(",")[-1] + .split(" ")[-1] + .strip() + .replace("*", ""))) + iedb_df["category"] = ( + iedb_df["last_author"] + " - " + iedb_df["Method/Technique"]) + + to_concat = [] + + for allele in alleles: + sub_df = iedb_df.ix[iedb_df.allele == allele] + top_categories = sub_df.category.value_counts().ix[ + sub_df.category.value_counts() > + min_measurements_per_category + ] + + top_categories = top_categories.index + + train_data = pandas.DataFrame() + train_data["peptide"] = sub_df.Description + train_data["measurement_value"] = sub_df[ + "Quantitative measurement" + ] + train_data["original_measurement_source"] = ( + sub_df.category.values) + + train_data["allele"] = sub_df["allele"] + train_data["measurement_type"] = "affinity" + train_data["measurement_source"] = [ + s if s in (top_categories) else "other" + for s in train_data.original_measurement_source + ] + train_data["weight"] = 1.0 + train_data = train_data.drop_duplicates().reset_index( + drop=True) + to_concat.append(train_data) + + return pandas.concat(to_concat, ignore_index=True) + + +def run(): + args = parser.parse_args(sys.argv[1:]) + + hyperparameters_lst = json.load(open(args.hyperparameters)) + if not isinstance(hyperparameters_lst, list): + hyperparameters_lst = [hyperparameters_lst] + print("Loaded hyperparameters list: %s" % str(hyperparameters_lst)) + + dfs = [] + if args.iedb_data_csv: + iedb_df = load_iedb_data_csv( + args.iedb_data_csv, + alleles=args.allele, + min_measurements_per_category=args.min_measurements_per_category, + include_qualitative=not args.only_quantitative) + dfs.append(iedb_df) + if args.data_csv: + extra_data_csv = load_data_csv( + args.data_csv, alleles=args.allele) + print("Loaded extra data csv: %s %s" % ( + args.data_csv, str(extra_data_csv.shape))) + dfs.append(extra_data_csv) + + df = pandas.concat(dfs, ignore_index=True) + print("Combined df: %s" % (str(df.shape))) + allele_counts = df.allele.value_counts() + alleles = list(allele_counts.ix[ + allele_counts > args.min_measurements_per_allele + ].index) + print("Selected alleles: %s" % ' '.join(alleles)) + + df = df.ix[df.allele.isin(alleles)] + + print("Combined allele-selected df: %s" % (str(df.shape))) + + manifest = pandas.DataFrame() + manifest["name"] = [] + manifest["hyperparameters_index"] = [] + manifest["model_group"] = [] + manifest["allele"] = [] + manifest["hyperparameters"] = [] + manifest["history"] = [] + manifest["num_measurements"] = [] + manifest["random_negative_rate"] = [] + manifest["random_negative_fixed"] = [] + manifest["sources"] = [] + manifest["fit_seconds"] = [] + + manifest_path = os.path.join(args.out_models_dir, "manifest.csv") + + for (h, hyperparameters) in enumerate(hyperparameters_lst): + n_models = hyperparameters.pop("n_models") + for model_group in range(n_models): + for (i, allele) in enumerate(alleles): + print( + "[%2d / %2d hyperparameters] " + "[%2d / %2d replicates] " + "[%4d / %4d alleles]: %s" % ( + h + 1, + len(hyperparameters_lst), + model_group + 1, + n_models, + i + 1, + len(alleles), allele)) + + train_data = df.ix[df.allele == allele] + + train_data_expanded = add_random_negative_peptides( + train_data, + rate=args.random_negative_rate, + fixed=args.random_negative_fixed) + + train_data_expanded = train_data_expanded.dropna().sample( + frac=1.0) + + print("Measurement sources:\n%s" % ( + train_data_expanded.measurement_source.value_counts())) + + model = Class1BindingPredictor( + verbose=args.verbose, + **hyperparameters) + + model.fit( + train_data_expanded.peptide.values, + train_data_expanded.measurement_value.values, + output_assignments=( + train_data_expanded.measurement_source.values)) + print("Done fitting in %0.2f sec" % model.fit_seconds) + + name = "%s-%d-%d" % ( + allele.replace("*", "_"), + h, + model_group) + + row = pandas.Series({ + "hyperparameters_index": h, + "model_group": model_group, + "allele": allele, + "hyperparameters": hyperparameters, + "history": model.fit_history.history, + "name": name, + "num_measurements": len(train_data), + "random_negative_rate": args.random_negative_rate, + "random_negative_fixed": args.random_negative_fixed, + "sources": train_data_expanded.measurement_source.unique(), + "fit_seconds": model.fit_seconds, + }).to_frame().T + manifest = pandas.concat([manifest, row], ignore_index=True) + print(manifest) + + manifest.to_csv(manifest_path, index=False) + print("Wrote: %s" % manifest_path) + + model_path = os.path.join( + args.out_models_dir, "%s.pickle" % name) + with open(model_path, 'wb') as fd: + pickle.dump(model, fd, protocol=2) + print("Wrote: %s" % model_path) + + +if __name__ == '__main__': + run() diff --git a/mhcflurry/class1_allele_specific/__init__.py b/mhcflurry/class1_allele_specific/__init__.py deleted file mode 100644 index 228b33d9b11be41a360acd50510c6038c1ed1730..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from __future__ import absolute_import - -from .class1_binding_predictor import Class1BindingPredictor -from .train import train_across_models_and_folds, AlleleSpecificTrainTestFold -from .cross_validation import cross_validation_folds -from .class1_single_model_multi_allele_predictor import ( - from_allele_name, - supported_alleles, - get_downloaded_predictor, - Class1SingleModelMultiAllelePredictor) - -__all__ = [ - 'Class1BindingPredictor', - 'AlleleSpecificTrainTestFold', - 'cross_validation_folds', - 'train_across_models_and_folds', - 'from_allele_name', - 'supported_alleles', - 'get_downloaded_predictor', - 'Class1SingleModelMultiAllelePredictor', -] diff --git a/mhcflurry/class1_allele_specific/class1_allele_specific_kmer_ic50_predictor_base.py b/mhcflurry/class1_allele_specific/class1_allele_specific_kmer_ic50_predictor_base.py deleted file mode 100644 index b309df00af2067a4db33b570555d2cab358a05f4..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/class1_allele_specific_kmer_ic50_predictor_base.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) - -from six import string_types - -from ..peptide_encoding import encode_peptides -from ..amino_acid import ( - amino_acids_with_unknown, - common_amino_acids -) -from ..ic50_predictor_base import IC50PredictorBase -from ..hyperparameters import HyperparameterDefaults - - -class Class1AlleleSpecificKmerIC50PredictorBase(IC50PredictorBase): - """ - Base class for all mhcflurry predictors which used fixed-length - k-mer representation of peptides and don't require scanning over - a longer sequence to find a binding core (like you might for Class II). - """ - hyperparameter_defaults = (HyperparameterDefaults( - kmer_size=9) - .extend(IC50PredictorBase.hyperparameter_defaults)) - - def __init__( - self, - name, - allow_unknown_amino_acids, - verbose, - **hyperparameters): - effective_hyperparameters = ( - self.hyperparameter_defaults.with_defaults(hyperparameters)) - IC50PredictorBase.__init__( - self, - name=name, - verbose=verbose, - **IC50PredictorBase.hyperparameter_defaults.subselect( - effective_hyperparameters)) - self.allow_unknown_amino_acids = allow_unknown_amino_acids - self.kmer_size = effective_hyperparameters["kmer_size"] - - def __repr__(self): - return ( - "%s(name=%s, max_ic50=%f, allow_unknown_amino_acids=%s, " - "kmer_size=%d)" % ( - self.__class__.__name__, - self.name, - self.max_ic50, - self.allow_unknown_amino_acids, - self.kmer_size)) - - def __str__(self): - return repr(self) - - @property - def amino_acids(self): - """ - Amino acid alphabet used for encoding peptides, may include - "X" if allow_unknown_amino_acids is True. - """ - if self.allow_unknown_amino_acids: - return amino_acids_with_unknown - else: - return common_amino_acids - - @property - def max_amino_acid_encoding_value(self): - return len(self.amino_acids) - - def encode_peptides(self, peptides): - return encode_peptides( - peptides, kmer_size=self.kmer_size, allow_unknown_amino_acids=self.allow_unknown_amino_acids) - - def predict_scores(self, peptides): - """ - Given a list of peptides of any length, returns an array of predicted - normalized affinity values. Unlike IC50, a higher value here - means a stronger affinity. Peptides of lengths other than 9 are - transformed into a set of k-mers either by deleting or inserting - amino acid characters. The prediction for a single peptides will be - the average of expanded k-mers. - """ - if isinstance(peptides, string_types): - raise TypeError("Input must be a list of peptides, not %s : %s" % ( - peptides, type(peptides))) - - encoded_peptides = self.encode_peptides(peptides) - return encoded_peptides.combine_predictions( - self.predict_scores_for_kmer_encoded_array(encoded_peptides.encoded_matrix)) - - def fit_dataset( - self, - dataset, - pretraining_dataset=None, - sample_censored_affinities=False, - **kwargs): - """ - Fit the model parameters on the given training data. - - Parameters - ---------- - dataset : AffinityMeasurementDataset - - pretraining_dataset : AffinityMeasurementDataset - - sample_censored_affinities : bool - If a column named 'inequality' is in the AffinityMeasurementDataset then every - peptide with a value of '>' on each training epoch, gets a - randomly sampled IC50 between its observed value and the - max_ic50 of the predictor. Default is False. - - **kwargs : dict - Extra arguments are passed on to the fit_encoded_kmer_arrays() - method. - """ - if len(dataset.unique_alleles()) > 1: - raise ValueError( - "Allele-specific predictor can't be trained on multi-allele " - "data: %s" % dataset) - - if pretraining_dataset and len(pretraining_dataset.unique_alleles()) > 1: - raise ValueError( - "Allele-specific predictor can't pretrain on data from multiple alleles: %s" % - (pretraining_dataset,)) - - X, ic50, sample_weights, original_peptide_indices = \ - dataset.kmer_index_encoding( - kmer_size=self.kmer_size, - allow_unknown_amino_acids=self.allow_unknown_amino_acids) - if pretraining_dataset is None: - X_pretrain = ic50_pretrain = sample_weights_pretrain = None - else: - X_pretrain, ic50_pretrain, sample_weights_pretrain, _ = \ - pretraining_dataset.kmer_index_encoding( - kmer_size=self.kmer_size, - allow_unknown_amino_acids=self.allow_unknown_amino_acids) - - if sample_censored_affinities and 'inequality' in dataset.columns: - df = dataset.to_dataframe() - inequalities = df["inequality"] - censored_mask_for_variable_length_peptides = (inequalities == ">") - censored_mask_for_kmers = censored_mask_for_variable_length_peptides[ - original_peptide_indices] - else: - censored_mask_for_kmers = None - - return self.fit_kmer_encoded_arrays( - X=X, - ic50=ic50, - sample_weights=sample_weights, - right_censoring_mask=censored_mask_for_kmers, - X_pretrain=X_pretrain, - ic50_pretrain=ic50_pretrain, - sample_weights_pretrain=sample_weights_pretrain, - **kwargs) diff --git a/mhcflurry/class1_allele_specific/class1_binding_predictor.py b/mhcflurry/class1_allele_specific/class1_binding_predictor.py deleted file mode 100644 index 31024b679e78ed058468fe480cfd73b9e216df52..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/class1_binding_predictor.py +++ /dev/null @@ -1,334 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Allele specific MHC Class I binding affinity predictor -""" -from __future__ import ( - print_function, - division, - absolute_import, -) - -import tempfile -import os - -import numpy as np - -import keras.models - -from ..feedforward import make_embedding_network -from .class1_allele_specific_kmer_ic50_predictor_base import ( - Class1AlleleSpecificKmerIC50PredictorBase, -) -from ..peptide_encoding import check_valid_index_encoding_array -from ..regression_target import MAX_IC50, ic50_to_regression_target -from ..training_helpers import ( - combine_training_arrays, - extend_with_negative_random_samples, -) -from ..regression_target import regression_target_to_ic50 -from ..hyperparameters import HyperparameterDefaults - - -class Class1BindingPredictor(Class1AlleleSpecificKmerIC50PredictorBase): - """ - Allele-specific Class I MHC binding predictor which uses - fixed-length (k-mer) index encoding for inputs and outputs - a value between 0 and 1 (where 1 is the strongest binder). - """ - - network_hyperparameter_defaults = HyperparameterDefaults( - embedding_output_dim=32, - layer_sizes=[64], - init="glorot_uniform", - loss="mse", - optimizer="rmsprop", - output_activation="sigmoid", - activation="tanh", - dropout_probability=0.0) - - fit_hyperparameter_defaults = HyperparameterDefaults( - n_training_epochs=250, - batch_size=128, - pretrain_decay="numpy.exp(-epoch)", - fraction_negative=0.0, - batch_normalization=True) - - hyperparameter_defaults = ( - Class1AlleleSpecificKmerIC50PredictorBase.hyperparameter_defaults - .extend(network_hyperparameter_defaults) - .extend(fit_hyperparameter_defaults)) - - def __init__( - self, - model=None, - name=None, - max_ic50=MAX_IC50, - allow_unknown_amino_acids=True, - kmer_size=9, - n_amino_acids=20, - verbose=False, - **hyperparameters): - Class1AlleleSpecificKmerIC50PredictorBase.__init__( - self, - name=name, - max_ic50=max_ic50, - allow_unknown_amino_acids=allow_unknown_amino_acids, - verbose=verbose, - kmer_size=kmer_size) - - specified_network_hyperparameters = ( - self.network_hyperparameter_defaults.subselect(hyperparameters)) - - effective_hyperparameters = ( - self.hyperparameter_defaults.with_defaults(hyperparameters)) - - if model is None: - model = make_embedding_network( - peptide_length=kmer_size, - n_amino_acids=n_amino_acids + int(allow_unknown_amino_acids), - **self.network_hyperparameter_defaults.subselect( - effective_hyperparameters)) - elif specified_network_hyperparameters: - raise ValueError( - "Do not specify network hyperparameters when passing a model. " - "Network hyperparameters specified: %s" - % " ".join(specified_network_hyperparameters)) - - self.hyperparameters = effective_hyperparameters - self.name = name - self.model = model - - def __getstate__(self): - result = dict(self.__dict__) - del result['model'] - result['model_json'] = self.model.to_json() - result['model_weights'] = self.get_weights() - return result - - def __setstate__(self, state): - model_bytes = model_json = model_weights = None - try: - model_bytes = state.pop('model_bytes') - except KeyError: - model_json = state.pop('model_json') - model_weights = state.pop('model_weights') - self.__dict__.update(state) - - if model_bytes is not None: - # Old format - fd = tempfile.NamedTemporaryFile(suffix='.hdf5', delete=False) - try: - fd.write(model_bytes) - - # HDF5 has issues when the file is open multiple times, so we close - # it here before loading it into keras. - fd.close() - self.model = keras.models.load_model(fd.name) - finally: - os.unlink(fd.name) - else: - self.model = keras.models.model_from_json(model_json) - self.set_weights(model_weights) - - def get_weights(self): - """ - Returns weights, which can be passed to set_weights later. - """ - return [x.copy() for x in self.model.get_weights()] - - def set_weights(self, weights): - """ - Reset the model weights. - """ - self.model.set_weights(weights) - - def fit_kmer_encoded_arrays( - self, - X, - ic50, - sample_weights=None, - right_censoring_mask=None, - X_pretrain=None, - ic50_pretrain=None, - sample_weights_pretrain=None, - n_random_negative_samples=None, - pretrain_decay=None, - n_training_epochs=None, - batch_size=None, - verbose=False): - """ - Train predictive model from index encoding of fixed length k-mer - peptides. - - Parameters - ---------- - X : array - Training data with shape (n_samples, n_dims) - - ic50 : array - Training IC50 values with shape (n_samples,) - - sample_weights : array - Weight of each training sample with shape (n_samples,) - - right_censoring_mask : array, optional - Boolean array which indicates whether each IC50 value is actually - right censored (a lower bound on the true value). Censored values - are transformed during training by sampling between the observed - and maximum values on each iteration. - - X_pretrain : array - Extra samples used for soft pretraining of the predictor, - should have same number of dimensions as X. - During training the weights of these samples will decay after - each epoch. - - ic50_pretrain : array - IC50 values for extra samples, shape - - pretrain_decay : int -> float function - decay function for pretraining, mapping epoch number to decay - factor - - sample_weights_pretrain : array - Initial weights for the rows of X_pretrain. If not specified then - initialized to ones. - - n_random_negative_samples : int - Number of random samples to generate as negative examples. - - n_training_epochs : int - - verbose : bool - - batch_size : int - """ - - # Apply defaults from hyperparameters - if n_random_negative_samples is None: - n_random_negative_samples = ( - int(self.hyperparameters["fraction_negative"] * len(ic50))) - - if pretrain_decay is None: - pretrain_decay = ( - lambda epoch: - eval( - self.hyperparameters["pretrain_decay"], - {'epoch': epoch, 'numpy': np})) - - if n_training_epochs is None: - n_training_epochs = self.hyperparameters["n_training_epochs"] - - if batch_size is None: - batch_size = self.hyperparameters["batch_size"] - - X_combined, ic50_combined, combined_weights, n_pretrain = \ - combine_training_arrays( - X, ic50, sample_weights, - X_pretrain, ic50_pretrain, sample_weights_pretrain) - - Y_combined = ic50_to_regression_target( - ic50_combined, max_ic50=self.max_ic50) - - # create a censored IC50 mask for all combined samples and then fill - # in the training censoring mask if it's given - right_censoring_mask_combined = np.zeros(len(Y_combined), dtype=bool) - if right_censoring_mask is not None: - right_censoring_mask = np.asarray(right_censoring_mask) - if len(right_censoring_mask.shape) != 1: - raise ValueError("Expected 1D censor mask, got shape %s" % ( - right_censoring_mask.shape,)) - if len(right_censoring_mask) != len(ic50): - raise ValueError( - "Wrong length for censoring mask, expected %d not %d" % ( - len(ic50), - len(right_censoring_mask))) - right_censoring_mask_combined[n_pretrain:] = right_censoring_mask - - n_censored = right_censoring_mask_combined.sum() - - total_pretrain_sample_weight = combined_weights[:n_pretrain].sum() - total_train_sample_weight = combined_weights[n_pretrain:].sum() - total_combined_sample_weight = ( - total_pretrain_sample_weight + total_train_sample_weight) - - for epoch in range(n_training_epochs): - decay_factor = pretrain_decay(epoch) - - # if the contribution of synthetic samples is less than a - # thousandth of the actual data, then stop using it - pretrain_contribution = total_pretrain_sample_weight * decay_factor - pretrain_fraction_contribution = ( - pretrain_contribution / total_combined_sample_weight) - - if n_censored > 0: - # shrink the output values by a uniform amount to some value - # between the lowest representable affinity and the observed - # censored value - Y_adjusted_for_censoring = Y_combined.copy() - Y_adjusted_for_censoring[right_censoring_mask_combined] *= ( - np.random.rand(n_censored)) - else: - Y_adjusted_for_censoring = Y_combined - - # only use synthetic data if it contributes at least 1/1000th of - # sample weight - if pretrain_fraction_contribution > 0.001: - combined_weights[:n_pretrain] *= decay_factor - X_curr_iter = X_combined - Y_curr_iter = Y_adjusted_for_censoring - weights_curr_iter = combined_weights - else: - X_curr_iter = X_combined[n_pretrain:] - Y_curr_iter = Y_adjusted_for_censoring[n_pretrain:] - weights_curr_iter = combined_weights[n_pretrain:] - - if n_random_negative_samples > 0: - X_curr_iter, Y_curr_iter, weights_curr_iter = \ - extend_with_negative_random_samples( - X_curr_iter, - Y_curr_iter, - weights_curr_iter, - n_random_negative_samples, - max_amino_acid_encoding_value=( - self.max_amino_acid_encoding_value)) - - self.model.fit( - X_curr_iter, - Y_curr_iter, - sample_weight=weights_curr_iter, - nb_epoch=1, - verbose=0, - batch_size=batch_size, - shuffle=True) - - def predict_scores_for_kmer_encoded_array(self, X): - """ - Given an encoded array of amino acid indices, returns a vector - of affinity scores (values between 0 and 1). - """ - X = check_valid_index_encoding_array( - X, - allow_unknown_amino_acids=self.allow_unknown_amino_acids) - return self.model.predict(X, verbose=False).flatten() - - def predict_ic50_for_kmer_encoded_array(self, X): - """ - Given an encoded array of amino acid indices, - returns a vector of IC50 predictions. - """ - scores = self.predict_scores_for_kmer_encoded_array(X) - return regression_target_to_ic50(scores, max_ic50=self.max_ic50) diff --git a/mhcflurry/class1_allele_specific/class1_single_model_multi_allele_predictor.py b/mhcflurry/class1_allele_specific/class1_single_model_multi_allele_predictor.py deleted file mode 100644 index 1dca8766306e3cc4faebfee478fc1dadf19176c7..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/class1_single_model_multi_allele_predictor.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -''' -Load predictors -''' -from __future__ import ( - print_function, - division, - absolute_import, -) -import pickle -from os.path import join - -import pandas - -from ..downloads import get_path -from ..common import normalize_allele_name, UnsupportedAllele - -CACHED_PREDICTOR = None - - -def from_allele_name(allele_name): - """ - Load a single-allele predictor. - - Parameters - ---------- - allele_name : class I allele name - - Returns - ---------- - Class1BindingPredictor - """ - return get_downloaded_predictor().predictor_for_allele(allele_name) - - -def supported_alleles(): - """ - Return a list of the names of the alleles for which there are trained - predictors in the default laoder. - """ - return get_downloaded_predictor().supported_alleles - - -def get_downloaded_predictor(): - """ - Return a Class1AlleleSpecificPredictorLoader that uses downloaded models. - """ - global CACHED_PREDICTOR - - # Some of the unit tests manipulate the downloads directory configuration - # so get_path here may return different results in the same Python process. - # For this reason we check the path and invalidate the loader if it's - # different. - path = get_path("models_class1_allele_specific_single") - if CACHED_PREDICTOR is None or path != CACHED_PREDICTOR.path: - CACHED_PREDICTOR = ( - Class1SingleModelMultiAllelePredictor - .load_from_download_directory(path)) - return CACHED_PREDICTOR - - -class Class1SingleModelMultiAllelePredictor(object): - """ - Factory for Class1BindingPredictor instances that are stored on disk - using this directory structure: - - production.csv - Manifest file giving information on all models - - models/ - directory of models with names given in the manifest file - MODEL-BAR.pickle - MODEL-FOO.pickle - ... - """ - - @staticmethod - def load_from_download_directory(directory): - return Class1SingleModelMultiAllelePredictor(directory) - - def __init__(self, path): - """ - Parameters - ---------- - path : string - Path to directory containing manifest and models - """ - self.path = path - self.path_to_models_csv = join(path, "production.csv") - self.df = pandas.read_csv(self.path_to_models_csv) - self.df.index = self.df["allele"] - self.supported_alleles = list(sorted(self.df.allele)) - self.predictors_cache = {} - - def predictor_for_allele(self, allele): - """ - Load a predictor for an allele. - - Parameters - ---------- - allele : class I allele name - - Returns - ---------- - Class1BindingPredictor - """ - allele = normalize_allele_name(allele) - if allele not in self.predictors_cache: - try: - predictor_name = self.df.ix[allele].predictor_name - except KeyError: - raise UnsupportedAllele( - "No models for allele '%s'. Alleles with models: %s" - " in models file: %s" % ( - allele, - ' '.join(self.supported_alleles), - self.path_to_models_csv)) - - model_path = join(self.path, "models", predictor_name + ".pickle") - with open(model_path, 'rb') as fd: - self.predictors_cache[allele] = pickle.load(fd) - return self.predictors_cache[allele] - - def predict(self, measurement_collection): - if (measurement_collection.df.measurement_type != "affinity").any(): - raise ValueError("Only affinity measurements supported") - - result = pandas.Series( - index=measurement_collection.df.index) - for (allele, sub_df) in measurement_collection.df.groupby("allele"): - result.loc[sub_df.index] = self.predict_for_allele( - allele, sub_df.peptide.values) - assert not result.isnull().any() - return result - - def predict_for_allele(self, allele, peptides): - predictor = self.predictor_for_allele(allele) - result = predictor.predict(peptides) - assert len(result) == len(peptides) - return result diff --git a/mhcflurry/class1_allele_specific/cross_validation.py b/mhcflurry/class1_allele_specific/cross_validation.py deleted file mode 100644 index c819bc4e69fb589324db01f98f84f20ad453552b..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/cross_validation.py +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) -import collections -import logging - -from pepdata.reduced_alphabet import make_alphabet_transformer, gbmr4 - -from .train import impute_and_select_allele, AlleleSpecificTrainTestFold -from ..parallelism import get_default_backend - -gbmr4_transformer = make_alphabet_transformer(gbmr4) - - -def default_projector(peptide): - """ - Given a peptide, return a list of projections for it. The projections are: - - the gbmr4 reduced representation - - for all positions in the peptide, the peptide with a "." replacing - the residue at that position - - Peptides with overlapping projections are considered similar when doing - cross validation. - - Parameters - ---------- - peptide : string - - Returns - ---------- - string list - """ - def projections(peptide, edit_distance=1): - if edit_distance == 0: - return set([peptide]) - return set.union(*[ - projections(p, edit_distance - 1) - for p in ( - peptide[0:i] + "." + peptide[(i + 1):] - for i in range(len(peptide))) - ]) - return sorted(projections(peptide)) + [gbmr4_transformer(peptide)] - - -def similar_peptides(set1, set2, projector=default_projector): - """ - Given two sets of peptides, return a list of the peptides whose reduced - representations are found in both sets. - - Parameters - ---------- - projector : (string -> string) or (string -> string list) - Function giving projection(s) of a peptide - - Returns - ---------- - string list of peptides which approximately overlap between the two input - sets. - """ - result = collections.defaultdict(lambda: ([], [])) - for (index, peptides) in enumerate([set1, set2]): - for peptide in peptides: - projections = projector(peptide) - if not isinstance(projections, list): - projections = [projections] - for projection in projections: - result[projection][index].append(peptide) - - common = set() - for (peptides1, peptides2) in result.values(): - if peptides1 and peptides2: - common.update(peptides1 + peptides2) - - return sorted(common) - - -def cross_validation_folds( - train_data, - alleles=None, - n_folds=3, - drop_similar_peptides=False, - imputer=None, - impute_kwargs={ - 'min_observations_per_peptide': 2, - 'min_observations_per_allele': 2, - }, - parallel_backend=None): - ''' - Split a AffinityMeasurementDataset into n_folds cross validation folds for each allele, - optionally performing imputation. - - Parameters - ----------- - train_data : mhcflurry.AffinityMeasurementDataset - - alleles : string list, optional - Alleles to run cross validation on. Default: all alleles in - train_data. - - n_folds : int, optional - Number of cross validation folds for each allele. - - drop_similar_peptides : boolean, optional - For each fold, remove peptides from the test data that are similar - to peptides in the train data. Similarity is defined as in the - similar_peptides function. - - imputer : fancyimpute.Solver, optional - Imputer to use. If not specified, no imputation is done. - - impute_kwargs : dict, optional - Additional kwargs to pass to mhcflurry.AffinityMeasurementDataset.impute_missing_values. - - parallel_backend : mhcflurry.parallelism.ParallelBackend, optional - Futures implementation to use for running on multiple threads, - processes, or nodes - - Returns - ----------- - list of AlleleSpecificTrainTestFold of length num alleles * n_folds - - ''' - if parallel_backend is None: - parallel_backend = get_default_backend() - - if alleles is None: - alleles = train_data.unique_alleles() - - result_folds = [] - imputation_args = [] - for allele in alleles: - logging.info("Allele: %s" % allele) - cv_iter = train_data.cross_validation_iterator( - allele, n_folds=n_folds, shuffle=True) - for (all_allele_train_split, full_test_split) in cv_iter: - peptides_to_remove = [] - if drop_similar_peptides: - peptides_to_remove = similar_peptides( - all_allele_train_split.get_allele(allele).peptides, - full_test_split.get_allele(allele).peptides - ) - - if peptides_to_remove: - # TODO: instead of dropping peptides, downweight the - # peptides which get grouped together - # For example, we could replace this code with - # test_peptides, test_peptide_weights = .... - test_split = full_test_split.drop_allele_peptide_lists( - [allele] * len(peptides_to_remove), - peptides_to_remove) - logging.info( - "After dropping similar peptides, test size %d->%d" % ( - len(full_test_split), len(test_split))) - else: - test_split = full_test_split - - if imputer is not None: - base_args = dict(impute_kwargs) - base_args.update(dict( - dataset=all_allele_train_split, - imputer=imputer, - allele=allele)) - imputation_args.append(base_args) - - train_split = all_allele_train_split.get_allele(allele) - fold = AlleleSpecificTrainTestFold( - imputed_train=None, # updated later - allele=allele, - train=train_split, - test=test_split) - result_folds.append(fold) - - if imputation_args: - assert len(imputation_args) == len(result_folds) - imputation_results = parallel_backend.map( - lambda kwargs: impute_and_select_allele(**kwargs), - imputation_args) - - # Here _replace is a method on named tuples that returns a new named - # tuple with the specified key set to the given value and all other - # key/values the same as the original. - return [ - result_fold._replace(imputed_train=imputation_result) - for (result_fold, imputation_result) in zip( - result_folds, imputation_results) - ] - return result_folds diff --git a/mhcflurry/class1_allele_specific/train.py b/mhcflurry/class1_allele_specific/train.py deleted file mode 100644 index cfc2234463ca6fe7e2aae6acca5fb98ac19fc248..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific/train.py +++ /dev/null @@ -1,355 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) -import collections -import logging -import time -import socket -import math - -import numpy -import pandas - -from .scoring import make_scores -from .class1_binding_predictor import Class1BindingPredictor -from ..hyperparameters import HyperparameterDefaults -from ..parallelism import get_default_backend - - -TRAIN_HYPERPARAMETER_DEFAULTS = HyperparameterDefaults(impute=False) -HYPERPARAMETER_DEFAULTS = ( - Class1BindingPredictor.hyperparameter_defaults - .extend(TRAIN_HYPERPARAMETER_DEFAULTS)) - - -AlleleSpecificTrainTestFold = collections.namedtuple( - "AlleleSpecificTrainTestFold", - "allele train imputed_train test") - - -def impute_and_select_allele(dataset, imputer, allele=None, **kwargs): - ''' - Run imputation and optionally filter to the specified allele. - - Useful as a parallelized task where we want to filter to the desired - data *before* sending the result back to the master process. - - Parameters - ----------- - dataset : mhcflurry.AffinityMeasurementDataset - - imputer : object or string - See AffinityMeasurementDataset.impute_missing_values - - allele : string [optional] - Allele name to subselect to after imputation - - **kwargs : passed on to dataset.impute_missing_values - - Returns - ----------- - list of dict - ''' - result = dataset.impute_missing_values(imputer, **kwargs) - - if allele is not None: - try: - result = result.get_allele(allele) - except KeyError: - result = None - return result - - -def train_and_test_one_model(model_description, folds, **kwargs): - ''' - Train one model on some number of folds. - - Parameters - ----------- - model_description : dict of model hyperparameters - - folds : list of AlleleSpecificTrainTestFold - - **kwargs : passed on to train_and_test_one_model_one_fold - - Returns - ----------- - list of dict giving the train and test results for each fold - ''' - logging.info("Training 1 model on %d folds: %s" % (len(folds), folds)) - - return [ - train_and_test_one_model_one_fold( - model_description, - fold.train, - fold.test, - fold.imputed_train, - **kwargs) - for fold in folds - ] - - -def train_and_test_one_model_one_fold( - model_description, - train_dataset, - test_dataset=None, - imputed_train_dataset=None, - return_train_scores=True, - return_predictor=False, - return_train_predictions=False, - return_test_predictions=False): - ''' - Task for instantiating, training, and testing one model on one fold. - - Parameters - ----------- - model_description : dict of model parameters - - train_dataset : mhcflurry.AffinityMeasurementDataset - AffinityMeasurementDataset to train on. Must include only one allele. - - test_dataset : mhcflurry.AffinityMeasurementDataset, optional - AffinityMeasurementDataset to test on. Must include only one allele. If not specified - no testing is performed. - - imputed_train_dataset : mhcflurry.AffinityMeasurementDataset, optional - Required only if model_description["impute"] == True - - return_train_scores : boolean - Calculate and include in the result dict the auc/f1/tau scores on the - training data. - - return_predictor : boolean - Calculate and include in the result dict the trained predictor. - - return_train_predictions : boolean - Calculate and include in the result dict the model predictions on the - train data. - - return_test_predictions : boolean - Calculate and include in the result dict the model predictions on the - test data. - - Returns - ----------- - dict - ''' - assert len(train_dataset.unique_alleles()) == 1, "Multiple train alleles" - allele = train_dataset.alleles[0] - if test_dataset is not None: - assert len(train_dataset.unique_alleles()) == 1, \ - "Multiple test alleles" - assert train_dataset.alleles[0] == allele, \ - "Wrong test allele %s != %s" % (train_dataset.alleles[0], allele) - if imputed_train_dataset is not None: - assert len(imputed_train_dataset.unique_alleles()) == 1, \ - "Multiple imputed train alleles" - assert imputed_train_dataset.alleles[0] == allele, \ - "Wrong imputed train allele %s != %s" % ( - imputed_train_dataset.alleles[0], allele) - - if model_description["impute"]: - assert imputed_train_dataset is not None - - # Make a predictor - model_params = dict(model_description) - fraction_negative = model_params.pop("fraction_negative") - impute = model_params.pop("impute") - n_training_epochs = model_params.pop("n_training_epochs") - pretrain_decay = model_params.pop("pretrain_decay") - batch_size = model_params.pop("batch_size") - max_ic50 = model_params.pop("max_ic50") - - logging.info( - "%10s train_size=%d test_size=%d impute=%s model=%s" % - (allele, - len(train_dataset), - len(test_dataset) if test_dataset is not None else 0, - impute, - model_description)) - - predictor = Class1BindingPredictor( - max_ic50=max_ic50, - **model_params) - - # Train predictor - fit_time = -time.time() - predictor.fit_dataset( - train_dataset, - pretrain_decay=lambda epoch: eval(pretrain_decay, { - 'epoch': epoch, 'numpy': numpy}), - pretraining_dataset=imputed_train_dataset if impute else None, - verbose=True, - batch_size=batch_size, - n_training_epochs=n_training_epochs, - n_random_negative_samples=int(fraction_negative * len(train_dataset))) - fit_time += time.time() - - result = { - 'fit_time': fit_time, - 'fit_host': socket.gethostname(), - } - - if return_predictor: - result['predictor'] = predictor - - if return_train_scores or return_train_predictions: - train_predictions = predictor.predict(train_dataset.peptides) - if return_train_scores: - result['train_scores'] = make_scores( - train_dataset.affinities, - train_predictions, - max_ic50=model_description["max_ic50"]) - if return_train_predictions: - result['train_predictions'] = train_predictions - - if test_dataset is not None: - test_predictions = predictor.predict(test_dataset.peptides) - result['test_scores'] = make_scores( - test_dataset.affinities, - test_predictions, - max_ic50=model_description["max_ic50"]) - if return_test_predictions: - result['test_predictions'] = test_predictions - logging.info("Training result: %s" % result) - return result - - -def train_across_models_and_folds( - folds, - model_descriptions, - cartesian_product_of_folds_and_models=True, - return_predictors=False, - folds_per_task=1, - parallel_backend=None): - ''' - Train and optionally test any number of models across any number of folds. - - Parameters - ----------- - folds : list of AlleleSpecificTrainTestFold - - model_descriptions : list of dict - Models to test - - cartesian_product_of_folds_and_models : boolean, optional - If true, then a predictor is treained for each fold and model - description. - If false, then len(folds) must equal len(model_descriptions), and - the i'th model is trained on the i'th fold. - - return_predictors : boolean, optional - Include the trained predictors in the result. - - parallel_backend : mhcflurry.parallelism.ParallelBackend, optional - Futures implementation to use for running on multiple threads, - processes, or nodes - - Returns - ----------- - pandas.DataFrame - ''' - if parallel_backend is None: - parallel_backend = get_default_backend() - - if cartesian_product_of_folds_and_models: - tasks_per_model = int(math.ceil(float(len(folds)) / folds_per_task)) - fold_index_groups = [[] for _ in range(tasks_per_model)] - index_group = 0 - for index in range(len(folds)): - fold_index_groups[index_group].append(index) - index_group += 1 - if index_group == len(fold_index_groups): - index_group = 0 - - task_model_and_fold_indices = [ - (model_num, group) - for group in fold_index_groups - for model_num in range(len(model_descriptions)) - ] - else: - assert len(folds) == len(model_descriptions), \ - "folds and models have different lengths and " \ - "cartesian_product_of_folds_and_models is False" - - task_model_and_fold_indices = [ - (num, [num]) - for num in range(len(folds)) - ] - - logging.info("Training %d architectures on %d folds = %d tasks." % ( - len(model_descriptions), len(folds), len(task_model_and_fold_indices))) - - def train_and_test_one_model_task(model_and_fold_nums_pair): - (model_num, fold_nums) = model_and_fold_nums_pair - return train_and_test_one_model( - model_descriptions[model_num], - [folds[i] for i in fold_nums], - return_predictor=return_predictors) - - task_results = parallel_backend.map( - train_and_test_one_model_task, - task_model_and_fold_indices) - - logging.info("Done.") - - results_dict = collections.OrderedDict() - - def column(key, value): - if key not in results_dict: - results_dict[key] = [] - results_dict[key].append(value) - - for ((model_num, fold_nums), task_results_for_folds) in zip( - task_model_and_fold_indices, task_results): - for (fold_num, task_result) in zip(fold_nums, task_results_for_folds): - fold = folds[fold_num] - model_description = model_descriptions[model_num] - - column("allele", fold.allele) - column("fold_num", fold_num) - column("model_num", model_num) - - column("train_size", len(fold.train)) - - column( - "test_size", - len(fold.test) if fold.test is not None else None) - - column( - "imputed_train_size", - len(fold.imputed_train) - if fold.imputed_train is not None else None) - - # Scores - for score_kind in ['train', 'test']: - field = "%s_scores" % score_kind - for (score, value) in task_result.pop(field, {}).items(): - column("%s_%s" % (score_kind, score), value) - - # Misc. fields - for (key, value) in task_result.items(): - column(key, value) - - # Model parameters - for (model_param, value) in model_description.items(): - column("model_%s" % model_param, value) - - results_df = pandas.DataFrame(results_dict) - return results_df diff --git a/mhcflurry/class1_allele_specific_ensemble/__init__.py b/mhcflurry/class1_allele_specific_ensemble/__init__.py deleted file mode 100644 index 4bc674059ab9c78731518cf12ea7aa7d5d4fba6b..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific_ensemble/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from .class1_ensemble_multi_allele_predictor import ( - Class1EnsembleMultiAllelePredictor, - get_downloaded_predictor, - supported_alleles, - HYPERPARAMETER_DEFAULTS) - -__all__ = [ - "Class1EnsembleMultiAllelePredictor", - "get_downloaded_predictor", - "supported_alleles", - "HYPERPARAMETER_DEFAULTS", -] diff --git a/mhcflurry/class1_allele_specific_ensemble/class1_ensemble_multi_allele_predictor.py b/mhcflurry/class1_allele_specific_ensemble/class1_ensemble_multi_allele_predictor.py deleted file mode 100644 index c3ec0ae7f4c5b874ea09b1527958f68979520436..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific_ensemble/class1_ensemble_multi_allele_predictor.py +++ /dev/null @@ -1,791 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -This module defines a multi-allele Class I affinity predictor, -Class1EnsembleMultiAllelePredictor, whose predictions are generated by an -ensemble of Class1BindingPredictor instances. -""" -from __future__ import ( - print_function, - division, - absolute_import, -) - -import pickle -import os -import math -import logging -import collections -import time -from functools import partial - -import numpy -import pandas - -from ..hyperparameters import HyperparameterDefaults -from ..class1_allele_specific import Class1BindingPredictor, scoring -from ..downloads import get_path -from ..common import normalize_allele_name, UnsupportedAllele -from .. import parallelism, common -from ..peptide_encoding import encode_peptides - - -MEASUREMENT_COLLECTION_HYPERPARAMETER_DEFAULTS = HyperparameterDefaults( - include_ms=True, - ms_hit_affinity=1.0, - ms_decoy_affinity=20000.0) - -IMPUTE_HYPERPARAMETER_DEFAULTS = HyperparameterDefaults( - impute_method='mice', - impute_min_observations_per_peptide=5, - impute_min_observations_per_allele=5, - imputer_args={"n_burn_in": 5, "n_imputations": 25}) - -HYPERPARAMETER_DEFAULTS = ( - HyperparameterDefaults( - impute=True, - architecture_num=None) - .extend(MEASUREMENT_COLLECTION_HYPERPARAMETER_DEFAULTS) - .extend(IMPUTE_HYPERPARAMETER_DEFAULTS) - .extend(Class1BindingPredictor.hyperparameter_defaults)) - - -CACHED_PREDICTOR = None -CACHED_PREDICTOR_PATH = None - - -def supported_alleles(): - """ - Return a list of the names of the alleles for which there are trained - predictors in the default laoder. - """ - return get_downloaded_predictor().supported_alleles - - -def get_downloaded_predictor(): - """ - Return a Class1AlleleSpecificPredictorLoader that uses downloaded models. - """ - global CACHED_PREDICTOR, CACHED_PREDICTOR_PATH - - # Some of the unit tests manipulate the downloads directory configuration - # so get_path here may return different results in the same Python process. - # For this reason we check the path and invalidate the loader if it's - # different. - path = get_path("models_class1_allele_specific_ensemble") - if CACHED_PREDICTOR_PATH != path: - CACHED_PREDICTOR_PATH = path - CACHED_PREDICTOR = ( - Class1EnsembleMultiAllelePredictor - .load_from_download_directory(path)) - return CACHED_PREDICTOR - - -class Class1EnsembleMultiAllelePredictor(object): - """ - Multi-allele affinity predictor that uses ensembles of allele-specific - models. - - The individual models are selected via hyperparameter selection over a fixed - universe of models. - - Metadata for the individual models, including hyperparameters and test - scores are stored in the "manifest_df" dataframe. This dataframe is generated - in fit() and saved to / loaded from a CSV file when saving and loading - models. The individual allele-specific models are stored as .pickle files in - a directory, and named according to the `model_name` column in the manifest - dataframe. They are loaded lazily as they are needed and cached in the - `allele_to_models` attribute. - """ - @staticmethod - def load_from_download_directory(directory): - """ - Instantiate a Class1EnsembleMultiAllelePredictor from a directory with - structure: - - selected_models.csv - Manifest file describing selected models - - models/ - Subdir with model pickle files - - Parameters - ----------- - directory : string - Path to directory - - Returns - ----------- - Class1EnsembleMultiAllelePredictor - """ - return Class1EnsembleMultiAllelePredictor.load_fit( - os.path.join(directory, "models"), - os.path.join(directory, "selected_models.csv"), - ) - - @staticmethod - def load_fit(path_to_models_dir, path_to_manifest): - """ - Instantiate a Class1EnsembleMultiAllelePredictor from the given manifest - file and models directory. - - Parameters - ----------- - path_to_models_dir : string - Path to models/ directory - - path_to_manifest : string - Path to manifest csv file - - Returns - ----------- - Class1EnsembleMultiAllelePredictor - """ - manifest_df = pandas.read_csv(path_to_manifest, index_col="model_name") - # Convert string-serialized dicts into Python objects. - manifest_df["hyperparameters"] = [ - eval(s) for s in manifest_df.hyperparameters - ] - hyperparameters_to_search = list(dict( - (row.hyperparameters_architecture_num, row.hyperparameters) - for (_, row) in manifest_df.iterrows() - ).values()) - (ensemble_size,) = list(manifest_df.ensemble_size.unique()) - assert ( - manifest_df.ix[manifest_df.weight > 0] - .groupby("allele") - .weight - .count() == ensemble_size).all() - result = Class1EnsembleMultiAllelePredictor( - ensemble_size=ensemble_size, - hyperparameters_to_search=hyperparameters_to_search) - result.manifest_df = manifest_df - result.allele_to_models = {} - result.models_dir = os.path.abspath(path_to_models_dir) - return result - - def __init__(self, ensemble_size, hyperparameters_to_search): - """ - Parameters - ----------- - ensemble_size : int - Number of models in each allele's ensemble - - hyperparameters_to_search : list of dict - List of model architectures to perform model selection over - """ - self.imputation_hyperparameters = None # None indicates no imputation - self.hyperparameters_to_search = [] - for (num, params) in enumerate(hyperparameters_to_search): - params = dict(params) - params["architecture_num"] = num - params = HYPERPARAMETER_DEFAULTS.with_defaults(params) - self.hyperparameters_to_search.append(params) - - if params['impute']: - imputation_args = IMPUTE_HYPERPARAMETER_DEFAULTS.subselect( - params) - if self.imputation_hyperparameters is None: - self.imputation_hyperparameters = imputation_args - if self.imputation_hyperparameters != imputation_args: - raise NotImplementedError( - "Only one set of imputation parameters is supported: " - "%s != %s" % ( - str(self.imputation_hyperparameters), - str(imputation_args))) - - self.ensemble_size = ensemble_size - self.manifest_df = None - self.allele_to_models = None - self.models_dir = None - - @property - def supported_alleles(self): - """ - List of alleles this predictor has models for. - """ - return list( - self.manifest_df.ix[self.manifest_df.weight > 0].allele.unique()) - - def description(self): - """ - Human readable description of this model. - - Returns - ----------- - str - """ - lines = [] - kvs = [] - - def kv(key, value): - kvs.append((key, value)) - - kv("ensemble size", self.ensemble_size) - kv("num architectures considered", - len(self.hyperparameters_to_search)) - if self.allele_to_models is not None: - kv("supported alleles", " ".join(self.supported_alleles)) - kv("models dir", self.models_dir) - - lines.append("%s Ensemble: %s" % ( - "Untrained" if self.allele_to_models is None else "Trained", - self)) - for (key, value) in kvs: - lines.append("* %s: %s" % (key, value)) - - if self.manifest_df is not None: - models_used = self.manifest_df.ix[self.manifest_df.weight > 0] - - ignored_properties = set(['hyperparameters', 'scores']) - lines.append("* Attributes common to all models:") - unique = None - for col in models_used.columns: - unique = models_used[col].map(str).unique() - if len(unique) == 1: - lines.append("\t%s: %s" % (col, unique[0])) - ignored_properties.add(col) - if unique is None: - lines.append("\t(none)") - - for (allele, manifest_rows) in models_used.groupby("allele"): - lines.append("***") - for (i, (name, row)) in enumerate(manifest_rows.iterrows()): - lines.append("* %s model %d: %s" % ( - allele, i + 1, name)) - for (k, v) in row.iteritems(): - if k not in ignored_properties: - lines.append("\t%s: %s" % (k, v)) - lines.append("") - return "\n".join(lines) - - def models_for_allele(self, allele): - """ - Return the single-allele models in the ensemble for the given allele. - - Parameters - ----------- - allele : str - - Returns - ----------- - list of Class1BindingPredictor instances - """ - allele = normalize_allele_name(allele) - if allele not in self.allele_to_models: - model_names = self.manifest_df.ix[ - (self.manifest_df.weight > 0) & - (self.manifest_df.allele == allele) - ].index - if len(model_names) == 0: - raise UnsupportedAllele( - "Unsupported allele: %s. Supported alleles: %s" % ( - allele, - ", ".join(self.supported_alleles))) - assert len(model_names) == self.ensemble_size - models = [] - for name in model_names: - filename = os.path.join( - self.models_dir, "%s.pickle" % name) - with open(filename, 'rb') as fd: - model = pickle.load(fd) - assert model.name == name - models.append(model) - self.allele_to_models[allele] = models - result = self.allele_to_models[allele] - assert len(result) == self.ensemble_size - return result - - def write_fit( - self, - models_dir=None, - selected_models_csv=None, - all_models_csv=None): - """ - Write the models and metadata to disk. - - Any arguments left unspecified result in the corresponding file not - being written. - - The manifest CSV has a 'weight' column. The weight is set to 1.0 for - selected models and 0.0 for non-selected models. - - Parameters - ----------- - models_dir : str, optional - Path to dir in which to write models. - - selected_models_csv : str, optional - Path to selected models manifest csv. Descriptions and scores for - the selected models are written here. - - all_models_csv : str, optional - Path to manifest csv. Descriptions and scores for all models, both - selected and unselected, are written here. - """ - if all_models_csv: - self.manifest_df.to_csv(all_models_csv) - logging.debug("Wrote: %s" % all_models_csv) - if selected_models_csv: - self.manifest_df.ix[ - self.manifest_df.weight > 0 - ].to_csv(selected_models_csv) - logging.debug("Wrote: %s" % selected_models_csv) - - if models_dir: - models_written = [] - for (allele, models) in self.allele_to_models.items(): - for model in models: - filename = os.path.join( - models_dir, "%s.pickle" % model.name) - with open(filename, 'wb') as fd: - pickle.dump(model, fd) - logging.debug("Wrote: %s" % filename) - models_written.append(model.name) - assert set(models_written) == set( - self.manifest_df.ix[self.manifest_df.weight > 0].index) - - def predict_measurement_collection(self, measurement_collection): - """ - Return affinity predictions for the (allele, peptide) pairs given in - the specified measurement collection. - - Parameters - ----------- - measurement_collection : MeasurementCollection - - Returns - ----------- - pandas.Series of predictions corresponding to each row in - measurement_collection.df. - """ - result = pandas.Series( - index=measurement_collection.df.index) - for (allele, sub_df) in measurement_collection.df.groupby("allele"): - result.loc[sub_df.index] = self.predict_for_allele( - allele, sub_df.peptide.values) - assert not result.isnull().any() - return result - - def predict_for_allele(self, allele, peptides): - """ - Return affinity predictions for a list of peptides on a single allele. - - Parameters - ----------- - allele : string - - peptides : list of string - - Returns - ----------- - numpy array of predictions for each peptide - """ - encoded = encode_peptides(peptides) - values = [ - model.predict(encoded) - for model in self.models_for_allele(allele) - ] - - # Geometric mean - result = numpy.exp(numpy.nanmean(numpy.log(values), axis=0)) - assert len(result) == len(peptides) - return result - - def fit( - self, - measurement_collection, - parallel_backend=None, - target_tasks=1): - """ - Fit the predictor for any number of alleles. This method supports - parallel execution and works as follows. - - (1) Split the dataset into `ensemble_size` random (test, train) splits. - Stratify by allele so each allele has about the same fraction of - points in each split. - (2) Run imputation on each split (if any models require imputation) - (3) For each allele and each split, perform model selection over all - len(hyperparameters_to_search) architectures to pick the best model. - - The final predictor for allele is then an ensemble of the - `ensemble_size` best models, which in general have different - hyperparameters. - - Parameters - ----------- - measurement_collection : MeasurementCollection - training data - - parallel_backend : mhcflurry.parallelism.ParallelBackend instance - Implementation to use for parallel execution - - target_tasks : int, optional - Approximate number of parallel tasks to split the work into - """ - if parallel_backend is None: - parallel_backend = parallelism.get_default_backend() - - # Unique name for this fit to be used in the model filenames. - fit_name = time.asctime().replace(" ", "_") - assert len(measurement_collection.df) > 0 - - # (1) Split the data - splits = measurement_collection.half_splits( - self.ensemble_size, random_state=0) - - # (2) perform imputation if necessary - if self.imputation_hyperparameters is not None: - logging.info("Imputing: %d tasks, imputation args: %s" % ( - len(splits), str(self.imputation_hyperparameters))) - imputed_trains = list(parallel_backend.map( - partial( - impute, parallel_backend, self.imputation_hyperparameters), - [train for (train, test) in splits])) - logging.info("Imputation completed.") - else: - logging.info("No imputation required.") - imputed_trains = None - - assert len(splits) == self.ensemble_size, len(splits) - - alleles = set(measurement_collection.df.allele.unique()) - - # (3) Train and select models - total_work = ( - len(alleles) * - self.ensemble_size * - len(self.hyperparameters_to_search)) - work_per_task = int(math.ceil(total_work / target_tasks)) - - # tasks is a list of tuples. Each tuple represents a task and is the - # arguments to the fit_and_test() top-level function. - tasks = [] - for (fold_num, (train_split, test_split)) in enumerate(splits): - assert len(train_split.df) > 0 - assert len(test_split.df) > 0 - - # For efficiency, we pass around RemoteObject references to the - # train and test data, so they are only uploaded once. - train_remote_object = parallel_backend.remote_object(train_split) - test_remote_object = parallel_backend.remote_object(test_split) - imputed_train_remote_object = None - if imputed_trains is not None: - imputed_train_remote_object = imputed_trains[fold_num] - - # Buffer of alleles and models to use in the next task. - task_allele_model_pairs = [] - - # This function appends a new task to the tasks list and resets - # the task_allele_model_pairs buffer. - def make_task(): - if task_allele_model_pairs: - tasks.append(( - parallel_backend, - fold_num, - train_remote_object, - imputed_train_remote_object, - test_remote_object, - list(task_allele_model_pairs))) - task_allele_model_pairs[:] = [] - - assert all( - allele in set(train_split.df.allele.unique()) - for allele in alleles), ( - "%s not in %s" % ( - alleles, set(train_split.df.allele.unique()))) - assert all( - allele in set(test_split.df.allele.unique()) - for allele in alleles), ( - "%s not in %s" % ( - alleles, set(test_split.df.allele.unique()))) - - # Loop through models and alleles and generate new tasks whenever - # the current task's work exceeds work_per_task. - for model in self.hyperparameters_to_search: - for allele in alleles: - task_allele_model_pairs.append((allele, model)) - if len(task_allele_model_pairs) > work_per_task: - make_task() - make_task() - assert not task_allele_model_pairs - - allele_models_per_task = numpy.array([ - len(task[-1]) for task in tasks - ]) - logging.info( - "Training and scoring models: %d tasks (target was %d), " - "total work: %d alleles * %d ensemble size * %d models = %d, " - "allele/models per task: (min=%d mean=%f max=%d)" % ( - len(tasks), - target_tasks, - len(alleles), - self.ensemble_size, - len(self.hyperparameters_to_search), - total_work, - allele_models_per_task.min(), - allele_models_per_task.max(), - allele_models_per_task.mean())) - - assert len(tasks) > 0 - results = parallel_backend.map(call_fit_and_test, tasks) - - # Iterate over results, keeping track of the best model seen so far for - # each (fold, allele) pair. - # Also track metadata for all models in manifest_rows, which will be - # used to generate the manifest dataframe. - - # fold number -> allele -> best model - results_per_fold = [ - {} - for _ in range(len(splits)) - ] - next_model_num = 1 - manifest_rows = [] - for result in results: - logging.debug("Received task result with %d items." % len(result)) - for item in result: - item['model_name'] = "%s.%d.%s" % ( - item['allele'], next_model_num, fit_name) - next_model_num += 1 - - scores = pandas.Series(item['scores']) - item['summary_score'] = scores.fillna(0).sum() - fold_results = results_per_fold[item['fold_num']] - allele = item['allele'] - current_best = float('-inf') - if allele in fold_results: - current_best = fold_results[allele]['summary_score'] - - if item['summary_score'] > current_best: - logging.info("Updating current best: %s" % str(item)) - fold_results[allele] = item - - manifest_entry = dict(item) - del manifest_entry['model'] - for key in ['hyperparameters', 'scores']: - for (sub_key, value) in item[key].items(): - manifest_entry["%s_%s" % (key, sub_key)] = value - manifest_rows.append(manifest_entry) - - assert len(manifest_rows) > 0 - manifest_df = pandas.DataFrame(manifest_rows) - manifest_df.index = manifest_df.model_name - del manifest_df["model_name"] - manifest_df["weight"] = 0.0 - manifest_df["ensemble_size"] = self.ensemble_size - - logging.info("Done collecting results.") - - self.allele_to_models = collections.defaultdict(list) - for fold_results in results_per_fold: - assert set(fold_results) == set(alleles), ( - "%s != %s" % (set(fold_results), set(alleles))) - for (allele, item) in fold_results.items(): - model = item['model'].value - model.name = item['model_name'] - self.allele_to_models[allele].append(model) - manifest_df.loc[model.name, "weight"] = 1.0 - - self.manifest_df = manifest_df - -def call_fit_and_test(args): - """ - Call fit_and_test with the given arguments and return the result. - - This top-level function exists as a convenience for parallel execution of - fit_and_test using a parallel map. - """ - return fit_and_test(*args) - - -def fit_and_test( - parallel_backend, - fold_num, - train_mc_remote_object, - imputed_mc_remote_object, - test_mc_remote_object, - allele_and_hyperparameter_pairs): - """ - Fit and test one or more models on one or more alleles. When running - parallel jobs, this function is the entry point for each task. - - The input measurement collections and output trained models are passed - as kubeface.RemoteObject instances instead of by value. This is an - optimization that enables the master node to upload each measurement - collection only once and run many tasks that use it. For the returned models, - it allows the master to download only the models that actually perform best. - - Parameters - ----------- - - parallel_backend : mhcflurry.parallelism.ParallelBackend instance - Implementation to use for parallel execution - - fold_num : int - Which split of the data is being fit. For an ensemble of size 16, - 0 <= fold_num < 16. - - train_mc_remote_object : kubeface.RemoteObject of MeasurementCollection - train MeasurementCollection - - imputed_mc_remote_object : kubeface.RemoteObject of MeasurementCollection - imputed (pre-training) MeasurementCollection - - test_mc_remote_object : kubeface.RemoteObject of MeasurementCollection - test MeasurementCollection - - allele_and_hyperparameter_pairs : list of (string, dict) pairs - The "work" of the task: the alleles and model hyperparameters to train - and evaluate. - - Returns - ----------- - list of dict giving scores, metadata, and remote objects pointing to the - trained models - """ - - logging.info( - "Fit and test: fold=%d train=%s,%s test=%s alleles/models [%d]=%s" % ( - fold_num, - train_mc_remote_object.value, - imputed_mc_remote_object, - test_mc_remote_object.value, - len(allele_and_hyperparameter_pairs), - "\n".join("Allele: %s, hyperparameters: %s" % ( - allele, hyperparameters) - for (allele, hyperparameters) - in allele_and_hyperparameter_pairs))) - - assert len(train_mc_remote_object.value.df) > 0 - assert len(test_mc_remote_object.value.df) > 0 - - train_mc_hash = common.dataframe_cryptographic_hash( - train_mc_remote_object.value.df) - - imputed_mc_hash = None - if imputed_mc_remote_object is not None: - imputed_mc_hash = common.dataframe_cryptographic_hash( - imputed_mc_remote_object.value.df) - test_mc_hash = common.dataframe_cryptographic_hash( - test_mc_remote_object.value.df) - - common_result_entries = { - 'fold_num': fold_num, - 'all_alleles_train_data_hash': train_mc_hash, - 'all_alleles_imputed_data_hash': imputed_mc_hash, - 'all_alleles_test_data_hash': test_mc_hash, - } - - results = [] - for (i, (allele, all_hyperparameters)) in enumerate( - allele_and_hyperparameter_pairs): - logging.info("Model %d / %d: allele=%s hyperparameters=%s" % ( - i + 1, - len(allele_and_hyperparameter_pairs), - allele, - str(all_hyperparameters))) - - start = time.time() - measurement_collection_hyperparameters = ( - MEASUREMENT_COLLECTION_HYPERPARAMETER_DEFAULTS.subselect( - all_hyperparameters)) - model_hyperparameters = ( - Class1BindingPredictor.hyperparameter_defaults.subselect( - all_hyperparameters)) - - train_dataset = ( - train_mc_remote_object - .value - .select_allele(allele) - .to_dataset(**measurement_collection_hyperparameters)) - if all_hyperparameters['impute'] and ( - allele in - imputed_mc_remote_object.value.alleles): - imputed_train_dataset = ( - imputed_mc_remote_object - .value - .select_allele(allele) - .to_dataset(**measurement_collection_hyperparameters)) - else: - imputed_train_dataset = None - test_dataset = ( - test_mc_remote_object - .value - .select_allele(allele) - .to_dataset(**measurement_collection_hyperparameters)) - - assert len(train_dataset) > 0 - assert len(test_dataset) > 0 - - model = Class1BindingPredictor(**model_hyperparameters) - - train_start = time.time() - model.fit_dataset( - train_dataset, - pretraining_dataset=imputed_train_dataset) - train_end = time.time() - predictions = model.predict(test_dataset.peptides) - test_end = time.time() - assert len(test_dataset.affinities) == len(predictions) - scores = scoring.make_scores( - test_dataset.affinities, predictions) - - result = dict(common_result_entries) - result.update({ - 'allele': allele, - 'hyperparameters': all_hyperparameters, - 'model': parallel_backend.remote_object(model), - 'scores': scores, - 'train_size': len(train_dataset), - 'test_size': len(test_dataset), - 'pretrain_size': ( - 0 if imputed_train_dataset is None - else len(imputed_train_dataset)), - 'train_time': train_end - train_start, - 'predict_time': test_end - train_end, - }) - results.append(result) - logging.info("Done training model in %0.2f sec" % ( - time.time() - start)) - return results - - -def impute(parallel_backend, hyperparameters, measurement_collection): - """ - Run imputation on a measurement collection and return the resulting - measurement collection. When running parallel jobs, this function is the - entry point for each imputation task. - - Parameters - ----------- - - parallel_backend : mhcflurry.parallelism.ParallelBackend instance - Implementation to use for parallel execution - - hyperparameters : dict - Imputation hyperparameters. See IMPUTE_HYPERPARAMETER_DEFAULTS. - - measurement_collection : MeasurementCollection - data to run imputation on - - Returns - ----------- - RemoteObject of MeasurementCollection - - the imputed data - """ - return parallel_backend.remote_object( - measurement_collection.impute(**hyperparameters)) \ No newline at end of file diff --git a/mhcflurry/class1_allele_specific_ensemble/train_command.py b/mhcflurry/class1_allele_specific_ensemble/train_command.py deleted file mode 100644 index cabe40cd962b6a595fe17052534238c270c1b26b..0000000000000000000000000000000000000000 --- a/mhcflurry/class1_allele_specific_ensemble/train_command.py +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -''' -Ensemble class1 allele-specific model selection and training script. - -Procedure - - N (ensemble size) times: - - Split full dataset (all alleles) into 50/50 train and test splits. - Stratify by allele. - - Perform imputation on train subset. - - For each allele and architecture, train and test on splits. - - The final predictor is an ensemble of the N best predictors for each - allele. - -The parallelization is primary intended to be used with an -alternative concurrent.futures Executor such as dask-distributed that supports -multi-node parallelization. Theano in particular seems to have deadlocks -when running with single-node parallelization. -''' -from __future__ import ( - print_function, - division, - absolute_import, -) -import sys -import argparse -import json -import logging -import os -import traceback -import signal - -from .. import parallelism -from ..affinity_measurement_dataset import AffinityMeasurementDataset - -from .class1_ensemble_multi_allele_predictor import ( - Class1EnsembleMultiAllelePredictor) -from ..measurement_collection import MeasurementCollection - -parser = argparse.ArgumentParser( - description=__doc__, - formatter_class=argparse.RawDescriptionHelpFormatter) - -parser.add_argument( - "--train-data", - metavar="X.csv", - required=True, - help="Training data") - -parser.add_argument( - "--model-architectures", - metavar="X.json", - type=argparse.FileType('r'), - required=True, - help="JSON file giving model architectures to assess in cross validation." - " Can be - to read from stdin") - -parser.add_argument( - "--alleles", - metavar="ALLELE", - nargs="+", - default=None, - help="Use only the specified alleles") - -parser.add_argument( - "--out-manifest", - metavar="X.csv", - help="Write descriptions of selected models to given file") - -parser.add_argument( - "--out-model-selection-manifest", - metavar="X.csv", - help="Write complete results of all models to the given file") - -parser.add_argument( - "--out-models-dir", - metavar="DIR", - help="Write production models to files in this dir") - -parser.add_argument( - "--max-models", - type=int, - metavar="N", - help="Use only the first N models") - -parser.add_argument( - "--ensemble-size", - type=int, - metavar="N", - required=True, - help="Number of models to use per allele") - -parser.add_argument( - "--target-tasks", - type=int, - metavar="N", - required=True, - help="Target number of tasks to submit") - -parser.add_argument( - "--min-samples-per-allele", - default=100, - metavar="N", - help="Don't train predictors for alleles with fewer than N samples. " - "Set to 0 to disable filtering. Default: %(default)s", - type=int) - -parser.add_argument( - "--quiet", - action="store_true", - default=False, - help="Output less info") - -parser.add_argument( - "--verbose", - action="store_true", - default=False, - help="Output more info") - -parser.add_argument( - "--dask-scheduler", - metavar="HOST:PORT", - help="Host and port of dask distributed scheduler") - -parser.add_argument( - "--parallel-backend", - choices=("local-threads", "local-processes", "kubeface", "dask"), - default="local-threads", - help="Backend to use, default: %(default)s") - -parser.add_argument( - "--num-local-processes", - metavar="N", - type=int, - help="Processes (exclusive with --dask-scheduler and --num-local-threads)") - -parser.add_argument( - "--num-local-threads", - metavar="N", - type=int, - default=1, - help="Threads (exclusive with --dask-scheduler and --num-local-processes)") - -try: - import kubeface - kubeface.Client.add_args(parser) -except ImportError: - logging.error("Kubeface support disabled, not installed.") - - -def run(argv=sys.argv[1:]): - # On sigusr1 print stack trace - print("To show stack trace, run:\nkill -s USR1 %d" % os.getpid()) - signal.signal(signal.SIGUSR1, lambda sig, frame: traceback.print_stack()) - - args = parser.parse_args(argv) - if args.verbose: - logging.root.setLevel(level="DEBUG") - elif not args.quiet: - logging.root.setLevel(level="INFO") - - logging.info("Running with arguments: %s" % args) - - # Set parallel backend - if args.parallel_backend == "dask": - backend = parallelism.DaskDistributedParallelBackend( - args.dask_scheduler) - elif args.parallel_backend == "kubeface": - backend = parallelism.KubefaceParallelBackend(args) - elif args.parallel_backend == "local-threads": - backend = parallelism.ConcurrentFuturesParallelBackend( - args.num_local_threads, - processes=False) - elif args.parallel_backend == "local-processes": - backend = parallelism.ConcurrentFuturesParallelBackend( - args.num_local_processes, - processes=True) - else: - assert False, args.parallel_backend - - parallelism.set_default_backend(backend) - print("Using parallel backend: %s" % backend) - go(args) - - -def go(args): - model_architectures = json.loads(args.model_architectures.read()) - logging.info("Read %d model architectures" % len(model_architectures)) - if args.max_models: - model_architectures = model_architectures[:args.max_models] - logging.info( - "Subselected to %d model architectures" % len(model_architectures)) - - train_dataset = AffinityMeasurementDataset.from_csv(args.train_data) - logging.info("Loaded training data: %s" % train_dataset) - - if args.alleles: - train_dataset = train_dataset.get_alleles(args.alleles) - logging.info( - "Filtered training dataset by allele to: %s" % train_dataset) - - if args.min_samples_per_allele: - train_dataset = train_dataset.filter_alleles_by_count( - args.min_samples_per_allele) - logging.info( - "Filtered training dataset to alleles with >= %d observations: %s" - % (args.min_samples_per_allele, train_dataset)) - - train_mc = MeasurementCollection.from_dataset(train_dataset) - model = Class1EnsembleMultiAllelePredictor( - args.ensemble_size, - model_architectures) - model.fit(train_mc, target_tasks=args.target_tasks) - logging.info("Done fitting.") - - model.write_fit( - selected_models_csv=args.out_manifest, - all_models_csv=args.out_model_selection_manifest, - models_dir=args.out_models_dir) diff --git a/mhcflurry/common.py b/mhcflurry/common.py index da205c34d910740c32fbe421df9c7ec485d50180..42aced01d520ecac3c05a4bdcb111107c0eb2c97 100644 --- a/mhcflurry/common.py +++ b/mhcflurry/common.py @@ -15,16 +15,18 @@ from __future__ import print_function, division, absolute_import from math import exp, log import itertools -from collections import defaultdict +import collections import logging import hashlib import time import sys from os import environ -import numpy as np +import numpy import pandas +from . import amino_acid + class UnsupportedAllele(Exception): pass @@ -110,7 +112,7 @@ def groupby_indices(iterable, key_fn=lambda x: x): Returns dictionary mapping unique values to list of indices that had those values. """ - index_groups = defaultdict(list) + index_groups = collections.defaultdict(list) for i, x in enumerate(key_fn(x) for x in iterable): index_groups[x].append(i) return index_groups @@ -240,3 +242,63 @@ def drop_nulls_and_warn(df, related_df_with_same_index_to_describe=None): new_df.shape, describe_nulls(df, related_df_with_same_index_to_describe))) return new_df + + +def from_ic50(ic50): + x = 1.0 - (numpy.log(ic50) / numpy.log(50000)) + return numpy.minimum( + 1.0, + numpy.maximum(0.0, x)) + + +def to_ic50(x): + return 50000.0 ** (1.0 - x) + + +def amino_acid_distribution(peptides, smoothing=0.0): + peptides = pandas.Series(peptides) + aa_counts = pandas.Series(peptides.map(collections.Counter).sum()) + normalized = aa_counts / aa_counts.sum() + if smoothing: + normalized += smoothing + normalized /= normalized.sum() + return normalized + + +def random_peptides(num, length=9, distribution=None): + """ + Generate random peptides (kmers). + + Parameters + ---------- + num : int + Number of peptides to return + + length : int + Length of each peptide + + distribution : pandas.Series + Maps 1-letter amino acid abbreviations to + probabilities. If not specified a uniform + distribution is used. + + Returns + ---------- + list of string + + """ + if num == 0: + return [] + if distribution is None: + distribution = pandas.Series( + 1, index=amino_acid.common_amino_acid_letters) + distribution /= distribution.sum() + + return [ + ''.join(peptide_sequence) + for peptide_sequence in + numpy.random.choice( + distribution.index, + p=distribution.values, + size=(int(num), int(length))) + ] diff --git a/mhcflurry/dataset_helpers.py b/mhcflurry/dataset_helpers.py deleted file mode 100644 index dc509371155e2efc8da51e50cef4e17996956e53..0000000000000000000000000000000000000000 --- a/mhcflurry/dataset_helpers.py +++ /dev/null @@ -1,278 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) - -from typechecks import require_instance -import numpy as np -import pandas as pd - -from .common import normalize_allele_name -from .peptide_encoding import ( - indices_to_hotshot_encoding, - fixed_length_index_encoding, - check_valid_index_encoding_array, -) - - -def check_pMHC_affinity_arrays(alleles, peptides, affinities, sample_weights): - """ - Make sure that we have the same number of peptides, affinity values, - and weights. - """ - require_instance(alleles, np.ndarray) - require_instance(peptides, np.ndarray) - require_instance(affinities, np.ndarray) - require_instance(sample_weights, np.ndarray) - - if len(alleles.shape) != 1: - raise ValueError("Expected 1d array of alleles but got shape %s" % ( - alleles.shape,)) - if len(peptides.shape) != 1: - raise ValueError("Expected 1d array of peptides but got shape %s" % ( - peptides.shape,)) - if len(affinities.shape) != 1: - raise ValueError( - "Expected 1d array of affinity values but got shape %s" % ( - alleles.shape,)) - if len(sample_weights.shape) != 1: - raise ValueError( - "Expected 1d array of sample weights but got shape %s" % ( - sample_weights.shape,)) - - n = len(alleles) - if len(peptides) != n: - raise ValueError( - "Expected %d peptides but got %d" % (n, len(peptides))) - if len(affinities) != n: - raise ValueError( - "Expected %d affinity values but got %d" % (n, len(affinities))) - if len(sample_weights) != n: - raise ValueError( - "Expected %d sample weights but got %d" % (n, len(sample_weights))) - - -def prepare_pMHC_affinity_arrays(alleles, peptides, affinities, sample_weights=None): - """ - Converts every sequence to an array and if sample_weights is missing then - create an array of ones. - """ - alleles = np.asarray(alleles) - peptides = np.asarray(peptides) - affinities = np.asarray(affinities) - if sample_weights is None: - sample_weights = np.ones(len(alleles), dtype=float) - check_pMHC_affinity_arrays( - alleles=alleles, - peptides=peptides, - affinities=affinities, - sample_weights=sample_weights) - return alleles, peptides, affinities, sample_weights - - -def infer_csv_separator(filename): - """ - Determine if file is separated by comma, tab, or whitespace. - Default to whitespace if the others are not detected. - - Returns (sep, delim_whitespace) - """ - for candidate in [",", "\t"]: - with open(filename, "r") as f: - for line in f: - if line.startswith("#"): - continue - if candidate in line: - return candidate, False - return None, True - -def load_dataframe( - filename, - sep=None, - allele_column_name=None, - peptide_column_name=None, - affinity_column_name=None, - filter_peptide_length=None, - normalize_allele_names=True): - """ - Load a dataframe of peptide-MHC affinity measurements - - filename : str - TSV filename with columns: - - 'species' - - 'mhc' - - 'peptide_length' - - 'sequence' - - 'meas' - - sep : str, optional - Separator in CSV file, default is to let Pandas infer - - allele_column_name : str, optional - Default behavior is to try {"mhc", "allele", "hla"} - - peptide_column_name : str, optional - Default behavior is to try {"sequence", "peptide", "peptide_sequence"} - - affinity_column_name : str, optional - Default behavior is to try {"meas", "ic50", "affinity", "aff"} - - filter_peptide_length : int, optional - Which length peptides to use (default=load all lengths) - - normalize_allele_names : bool - Normalize MHC names or leave them alone - - Returns: - - DataFrame - - peptide column name - - allele column name - - affinity column name - """ - if sep is None: - sep, delim_whitespace = infer_csv_separator(filename) - else: - delim_whitespace = False - - df = pd.read_csv( - filename, - sep=sep, - delim_whitespace=delim_whitespace, - engine="c") - - columns = set(df.keys()) - - if allele_column_name is None: - for candidate in ["mhc", "allele", "hla"]: - if candidate in columns: - allele_column_name = candidate - break - if allele_column_name is None: - raise ValueError( - "Couldn't find alleles, available columns: %s" % ( - columns,)) - - if peptide_column_name is None: - for candidate in ["sequence", "peptide", "peptide_sequence"]: - if candidate in columns: - peptide_column_name = candidate - break - if peptide_column_name is None: - raise ValueError( - "Couldn't find peptides, available columns: %s" % ( - columns,)) - - if affinity_column_name is None: - for candidate in ["meas", "ic50", "affinity"]: - if candidate in columns: - affinity_column_name = candidate - break - if affinity_column_name is None: - raise ValueError( - "Couldn't find affinity values, available columns: %s" % ( - columns,)) - if filter_peptide_length: - length_mask = df[peptide_column_name].str.len() == filter_peptide_length - df = df[length_mask] - df[allele_column_name] = df[allele_column_name].map(normalize_allele_name) - return df, allele_column_name, peptide_column_name, affinity_column_name - - -def encode_peptide_to_affinity_dict( - peptide_to_affinity_dict, - peptide_length=9, - flatten_binary_encoding=True, - allow_unknown_amino_acids=True): - """ - Given a dictionary mapping from peptide sequences to affinity values, return - both index and binary encodings of fixed length peptides, and - a vector of their affinities. - - Parameters - ---------- - peptide_to_affinity_dict : dict - Keys are peptide strings (of multiple lengths), each mapping to a - continuous affinity value. - - peptide_length : int - Length of vector encoding - - flatten_binary_encoding : bool - Should the binary encoding of a peptide be two-dimensional (9x20) - or a flattened 1d vector - - allow_unknown_amino_acids : bool - When extending a short vector to the desired peptide length, should - we insert every possible amino acid or a designated character "X" - indicating an unknown amino acid. - - Returns tuple with the following fields: - - kmer_peptides: fixed length peptide strings - - original_peptides: variable length peptide strings - - counts: how many fixed length peptides were made from this original - - X_index: index encoding of fixed length peptides - - X_binary: binary encoding of fixed length peptides - - Y: affinity values associated with original peptides - """ - raw_peptides = list(sorted(peptide_to_affinity_dict.keys())) - X_index, kmer_peptides, original_peptides, counts = \ - fixed_length_index_encoding( - peptides=raw_peptides, - desired_length=peptide_length, - start_offset_shorten=0, - end_offset_shorten=0, - start_offset_extend=0, - end_offset_extend=0, - allow_unknown_amino_acids=allow_unknown_amino_acids) - - n_samples = len(kmer_peptides) - - assert n_samples == len(original_peptides), \ - "Mismatch between # of samples (%d) and # of peptides (%d)" % ( - n_samples, len(original_peptides)) - assert n_samples == len(counts), \ - "Mismatch between # of samples (%d) and # of counts (%d)" % ( - n_samples, len(counts)) - assert n_samples == len(X_index), \ - "Mismatch between # of sample (%d) and index feature vectors (%d)" % ( - n_samples, len(X_index)) - X_index = check_valid_index_encoding_array(X_index, allow_unknown_amino_acids) - n_indices = 20 + allow_unknown_amino_acids - X_binary = indices_to_hotshot_encoding( - X_index, - n_indices=n_indices) - - assert X_binary.shape[0] == X_index.shape[0], \ - ("Mismatch between number of samples for index encoding (%d)" - " vs. binary encoding (%d)") % ( - X_binary.shape[0], - X_index.shape[0]) - - if flatten_binary_encoding: - # collapse 3D input into 2D matrix - n_binary_features = peptide_length * n_indices - X_binary = X_binary.reshape((n_samples, n_binary_features)) - - # easier to work with counts when they're an array instead of list - counts = np.array(counts) - - Y = np.array([peptide_to_affinity_dict[p] for p in original_peptides]) - assert n_samples == len(Y), \ - "Mismatch between # peptides %d and # regression outputs %d" % ( - n_samples, len(Y)) - return (kmer_peptides, original_peptides, counts, X_index, X_binary, Y) diff --git a/mhcflurry/encodable_sequences.py b/mhcflurry/encodable_sequences.py new file mode 100644 index 0000000000000000000000000000000000000000..15e7ced78df205e4a91d69b4d4aa3db0f1dd5827 --- /dev/null +++ b/mhcflurry/encodable_sequences.py @@ -0,0 +1,263 @@ +# Copyright (c) 2016. Mount Sinai School of Medicine +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import ( + print_function, + division, + absolute_import, +) + +import math + +import pandas +import numpy + +from . import amino_acid + + +def index_encoding(sequences, letter_to_index_dict): + """ + Given a sequence of n strings all of length k, return a k * n array where + the (i, j)th element is letter_to_index_dict[sequence[i][j]]. + + Parameters + ---------- + sequences : list of length n of strings of length k + letter_to_index_dict : dict : string -> int + + Returns + ------- + numpy.array of integers with shape (k, n) + """ + df = pandas.DataFrame(iter(s) for s in sequences) + result = df.replace(letter_to_index_dict) + return result.values + + +def one_hot_encoding(index_encoded, alphabet_size): + """ + Given an n * k array of integers in the range [0, alphabet_size), return + an n * k * alphabet_size array where element (i, k, j) is 1 if element + (i, k) == j in the input array and zero otherwise. + + Parameters + ---------- + index_encoded : numpy.array of integers with shape (n, k) + alphabet_size : int + + Returns + ------- + numpy.array of integers of shape (n, k, alphabet_size) + + """ + (num_sequences, sequence_length) = index_encoded.shape + result = numpy.zeros( + (num_sequences, sequence_length, alphabet_size), + dtype='int32') + for position in range(sequence_length): + result[:, position, index_encoded[:, position]] = 1 + return result + + +class EncodableSequences(object): + """ + Sequences of amino acids. + + This class caches various encodings of a list of sequences. + """ + unknown_character = "X" + + @classmethod + def create(klass, sequences): + """ + Factory that returns an EncodableSequences given a list of + strings. As a convenience, you can also pass it an EncodableSequences + instance, in which case the object is returned unchanged. + """ + if isinstance(sequences, klass): + return sequences + return klass(sequences) + + def __init__(self, sequences): + self.sequences = sequences + self.encoding_cache = {} + self.fixed_sequence_length = None + if sequences and all(len(s) == len(sequences[0]) for s in sequences): + self.fixed_sequence_length = len(sequences[0]) + + def __len__(self): + return len(self.sequences) + + def fixed_length_to_categorical(self): + """ + Returns a categorical encoding (i.e. integers 0 <= x < 21) of the + sequences, which must already be all the same length. + + Returns + ------- + numpy.array of integers + """ + cache_key = ("categorical",) + if cache_key not in self.encoding_cache: + assert self.fixed_sequence_length + self.encoding_cache[cache_key] = index_encoding( + self.sequences, amino_acid.AMINO_ACID_INDEX) + return self.encoding_cache[cache_key] + + def fixed_length_one_hot(self): + """ + Returns a binary one-hot encoding of the sequences, which must already + be all the same length. + + Returns + ------- + numpy.array of integers + """ + cache_key = ("one_hot",) + if cache_key not in self.encoding_cache: + assert self.fixed_sequence_length + encoded = self.categorical_encoding() + result = one_hot_encoding( + encoded, alphabet_size=len(amino_acid.AMINO_ACID_INDEX)) + self.encoding_cache[cache_key] = result + return self.encoding_cache[cache_key] + + def variable_length_to_fixed_length_categorical( + self, left_edge=4, right_edge=4, max_length=15): + """ + Encode variable-length sequences using a fixed-length encoding designed + for preserving the anchor positions of class I peptides. + + The sequences must be of length at least left_edge + right_edge, and at + most max_length. + + Parameters + ---------- + left_edge : int, size of fixed-position left side + right_edge : int, size of the fixed-position right side + max_length : sequence length of the resulting encoding + + Returns + ------- + numpy.array of integers with shape (num sequences, max_length) + """ + + cache_key = ( + "fixed_length_categorical", + left_edge, + right_edge, + max_length) + + if cache_key not in self.encoding_cache: + fixed_length_sequences = [ + self.sequence_to_fixed_length_string( + sequence, + left_edge=left_edge, + right_edge=right_edge, + max_length=max_length) + for sequence in self.sequences + ] + self.encoding_cache[cache_key] = index_encoding( + fixed_length_sequences, amino_acid.AMINO_ACID_INDEX) + return self.encoding_cache[cache_key] + + def variable_length_to_fixed_length_one_hot( + self, left_edge=4, right_edge=4, max_length=15): + """ + Encode variable-length sequences using a fixed-length encoding designed + for preserving the anchor positions of class I peptides. + + The sequences must be of length at least left_edge + right_edge, and at + most max_length. + + Parameters + ---------- + left_edge : int, size of fixed-position left side + right_edge : int, size of the fixed-position right side + max_length : sequence length of the resulting encoding + + Returns + ------- + binary numpy.array with shape (num sequences, max_length, 21) + """ + + cache_key = ( + "fixed_length_one_hot", + left_edge, + right_edge, + max_length) + + if cache_key not in self.encoding_cache: + encoded = self.fixed_length_categorical_encoding( + left_edge=left_edge, + right_edge=right_edge, + max_length=max_length) + result = one_hot_encoding( + encoded, alphabet_size=len(amino_acid.AMINO_ACID_INDEX)) + assert result.shape == ( + len(self.sequences), + encoded.shape[1], + len(amino_acid.AMINO_ACID_INDEX)) + self.encoding_cache[cache_key] = result + return self.encoding_cache[cache_key] + + @classmethod + def sequence_to_fixed_length_string( + klass, sequence, left_edge=4, right_edge=4, max_length=15): + """ + Transform a string of length at least left_edge + right_edge and at + most max_length into a string of length max_length using a scheme + designed to preserve the anchor positions of class I peptides. + + The first left_edge characters in the input always map to the first + left_edge characters in the output. Similarly for the last right_edge + characters. The middle characters are filled in based on the length, + with the X character filling in the blanks. + + For example, using defaults: + + AAAACDDDD -> AAAAXXXCXXXDDDD + + + Parameters + ---------- + sequence : string + left_edge : int + right_edge : int + max_length : int + + Returns + ------- + string of length max_length + + """ + assert len(klass.unknown_character) == 1 + assert len(sequence) >= left_edge + right_edge, sequence + assert len(sequence) <= max_length, sequence + + middle_length = max_length - left_edge - right_edge + + num_null = max_length - len(sequence) + num_null_left = int(math.ceil(num_null / 2)) + num_null_right = int(math.floor(num_null / 2)) + num_not_null_middle = middle_length - num_null + string_encoding = "".join([ + sequence[:left_edge], + klass.unknown_character * num_null_left, + sequence[left_edge:left_edge + num_not_null_middle], + klass.unknown_character * num_null_right, + sequence[-right_edge:], + ]) + assert len(string_encoding) == max_length + return string_encoding diff --git a/mhcflurry/feedforward.py b/mhcflurry/feedforward.py deleted file mode 100644 index f8296c28c9ce53db4cd7da4800748c0081f7f050..0000000000000000000000000000000000000000 --- a/mhcflurry/feedforward.py +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) - -from keras.models import Sequential -from keras.layers.core import Dense, Activation, Flatten, Dropout -from keras.layers.embeddings import Embedding -from keras.layers.normalization import BatchNormalization - -import theano - -theano.config.exception_verbosity = 'high' - - -def make_network( - input_size, - embedding_input_dim=None, - embedding_output_dim=None, - layer_sizes=[100], - activation="tanh", - init="glorot_uniform", - output_activation="sigmoid", - dropout_probability=0.0, - batch_normalization=True, - initial_embedding_weights=None, - embedding_init_method="glorot_uniform", - model=None, - optimizer="rmsprop", - loss="mse"): - - if model is None: - model = Sequential() - - if embedding_input_dim: - if not embedding_output_dim: - raise ValueError( - "Both embedding_input_dim and embedding_output_dim must be " - "set") - - if initial_embedding_weights: - n_rows, n_cols = initial_embedding_weights.shape - if n_rows != embedding_input_dim or n_cols != embedding_output_dim: - raise ValueError( - "Wrong shape for embedding: expected (%d, %d) but got " - "(%d, %d)" % ( - embedding_input_dim, embedding_output_dim, - n_rows, n_cols)) - model.add(Embedding( - input_dim=embedding_input_dim, - output_dim=embedding_output_dim, - input_length=input_size, - weights=[initial_embedding_weights], - dropout=dropout_probability)) - else: - model.add(Embedding( - input_dim=embedding_input_dim, - output_dim=embedding_output_dim, - input_length=input_size, - init=embedding_init_method, - dropout=dropout_probability)) - model.add(Flatten()) - - input_size = input_size * embedding_output_dim - - layer_sizes = (input_size,) + tuple(layer_sizes) - - for i, dim in enumerate(layer_sizes): - if i == 0: - # input is only conceptually a layer of the network, - # don't need to actually do anything - continue - - previous_dim = layer_sizes[i - 1] - - # hidden layer fully connected layer - model.add( - Dense( - input_dim=previous_dim, - output_dim=dim, - init=init)) - model.add(Activation(activation)) - - if batch_normalization: - model.add(BatchNormalization()) - - if dropout_probability > 0: - model.add(Dropout(dropout_probability)) - - # output - model.add(Dense( - input_dim=layer_sizes[-1], - output_dim=1, - init=init)) - model.add(Activation(output_activation)) - model.compile(loss=loss, optimizer=optimizer) - return model - - -def make_hotshot_network( - peptide_length=9, - n_amino_acids=20, - **kwargs): - """ - Construct a feed-forward neural network whose inputs are binary vectors - representing a "one-hot" or "hot-shot" encoding of a fixed length amino - acid sequence. - """ - return make_network(input_size=peptide_length * n_amino_acids, **kwargs) - - -def make_embedding_network( - peptide_length=9, - n_amino_acids=20, - embedding_output_dim=20, - **kwargs): - """ - Construct a feed-forward neural network whose inputs are vectors of integer - indices. - """ - return make_network( - input_size=peptide_length, - embedding_input_dim=n_amino_acids, - embedding_output_dim=embedding_output_dim, - **kwargs) diff --git a/mhcflurry/ic50_predictor_base.py b/mhcflurry/ic50_predictor_base.py deleted file mode 100644 index 38f6fa49e617cc6feb5c02211989572280fff72a..0000000000000000000000000000000000000000 --- a/mhcflurry/ic50_predictor_base.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) - -import numpy as np - -from .regression_target import regression_target_to_ic50, MAX_IC50 -from .affinity_measurement_dataset import AffinityMeasurementDataset -from .hyperparameters import HyperparameterDefaults - - -class IC50PredictorBase(object): - """ - Base class for all mhcflurry predictors which predict IC50 values - (using any representation of peptides) - """ - hyperparameter_defaults = HyperparameterDefaults(max_ic50=MAX_IC50) - - def __init__( - self, - name, - verbose=False, - max_ic50=hyperparameter_defaults.defaults["max_ic50"]): - self.name = name - self.max_ic50 = max_ic50 - self.verbose = verbose - - def __repr__(self): - return "%s(name=%s, max_ic50=%f)" % ( - self.__class__.__name__, - self.name, - self.max_ic50) - - def __str__(self): - return repr(self) - - def predict_scores(self, peptides, combine_fn=np.mean): - raise NotImplementedError( - "predict_scores expected to be implemented in sub-class") - - def predict(self, peptides): - """ - Predict IC50 affinities for peptides of any length - """ - scores = self.predict_scores(peptides) - return regression_target_to_ic50(scores, max_ic50=self.max_ic50) - - def fit_dictionary(self, peptide_to_ic50_dict, **kwargs): - """ - Fit the model parameters using the given peptide->IC50 dictionary, - all samples are given the same weight. - - Parameters - ---------- - peptide_to_ic50_dict : dict - Dictionary that maps peptides to IC50 values. - """ - dataset = AffinityMeasurementDataset.from_peptide_to_affinity_dictionary( - allele_name=self.name, - peptide_to_affinity_dict=peptide_to_ic50_dict) - return self.fit_dataset(dataset, **kwargs) - - def fit_sequences( - self, - peptides, - affinities, - sample_weights=None, - alleles=None, **kwargs): - if alleles is None: - alleles = [self.name] * len(peptides) - dataset = AffinityMeasurementDataset.from_sequences( - alleles=alleles, - peptides=peptides, - affinities=affinities, - sample_weights=sample_weights) - return self.fit_dataset(dataset, **kwargs) - - def fit_dataset(self, dataset, pretraining_dataset=None, *args, **kwargs): - raise NotImplementedError( - "fit_dataset expected to be implemented in sub-class") diff --git a/mhcflurry/imputation_helpers.py b/mhcflurry/imputation_helpers.py deleted file mode 100644 index b03d75e32e5fd96e9a36cb9bf9390ef3d3c01c7c..0000000000000000000000000000000000000000 --- a/mhcflurry/imputation_helpers.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import ( - print_function, - division, - absolute_import, -) -from collections import defaultdict - -import numpy as np -from fancyimpute.knn import KNN -from fancyimpute.iterative_svd import IterativeSVD -from fancyimpute.simple_fill import SimpleFill -from fancyimpute.soft_impute import SoftImpute -from fancyimpute.mice import MICE -from fancyimpute.biscaler import BiScaler - - -def check_dense_pMHC_array(X, peptide_list, allele_list): - if len(peptide_list) != len(set(peptide_list)): - raise ValueError("Duplicate peptides detected in peptide list") - if len(allele_list) != len(set(allele_list)): - raise ValueError("Duplicate alleles detected in allele list") - n_rows, n_cols = X.shape - if n_rows != len(peptide_list): - raise ValueError( - "Expected dense array with shape %s to have %d rows" % ( - X.shape, len(peptide_list))) - if n_cols != len(allele_list): - raise ValueError( - "Expected dense array with shape %s to have %d columns" % ( - X.shape, len(allele_list))) - - -def prune_dense_matrix_and_labels( - X, - peptide_list, - allele_list, - min_observations_per_peptide=1, - min_observations_per_allele=1): - """ - Filter the dense matrix of pMHC binding affinities according to - the given minimum number of row/column observations. - - Parameters - ---------- - X : numpy.ndarray - Incomplete dense matrix of pMHC affinity with n_peptides rows and - n_alleles columns. - - peptide_list : list of str - Expected to have n_peptides entries - - allele_list : list of str - Expected to have n_alleles entries - - min_observations_per_peptide : int - Drop peptide rows with fewer than this number of observed values. - - min_observations_per_allele : int - Drop allele columns with fewer than this number of observed values. - """ - observed_mask = np.isfinite(X) - n_observed_per_peptide = observed_mask.sum(axis=1) - too_few_peptide_observations = ( - n_observed_per_peptide < min_observations_per_peptide) - if too_few_peptide_observations.any(): - drop_peptide_indices = np.where(too_few_peptide_observations)[0] - keep_peptide_indices = np.where(~too_few_peptide_observations)[0] - print("Dropping %d peptides with <%d observations" % ( - len(drop_peptide_indices), - min_observations_per_peptide)) - X = X[keep_peptide_indices] - observed_mask = observed_mask[keep_peptide_indices] - peptide_list = [peptide_list[i] for i in keep_peptide_indices] - - n_observed_per_allele = observed_mask.sum(axis=0) - too_few_allele_observations = ( - n_observed_per_allele < min_observations_per_peptide) - if too_few_peptide_observations.any(): - drop_allele_indices = np.where(too_few_allele_observations)[0] - keep_allele_indices = np.where(~too_few_allele_observations)[0] - print("Dropping %d alleles with <%d observations: %s" % ( - len(drop_allele_indices), - min_observations_per_allele, - [allele_list[i] for i in drop_allele_indices])) - X = X[:, keep_allele_indices] - observed_mask = observed_mask[:, keep_allele_indices] - allele_list = [allele_list[i] for i in keep_allele_indices] - check_dense_pMHC_array(X, peptide_list, allele_list) - return X, peptide_list, allele_list - - -def dense_pMHC_matrix_to_nested_dict(X, peptide_list, allele_list): - """ - Converts a dense matrix of (n_peptides, n_alleles) floats to a nested - dictionary from allele -> peptide -> affinity. - """ - allele_to_peptide_to_ic50_dict = defaultdict(dict) - for row_index, peptide in enumerate(peptide_list): - for column_index, allele_name in enumerate(allele_list): - affinity = X[row_index, column_index] - if np.isfinite(affinity): - allele_to_peptide_to_ic50_dict[allele_name][peptide] = affinity - return allele_to_peptide_to_ic50_dict - - -def imputer_from_name(imputation_method_name, **kwargs): - """ - Helper function for constructing an imputation object from a name given - typically from a commandline argument. - """ - imputation_method_name = imputation_method_name.strip().lower() - if imputation_method_name == "mice": - kwargs["n_burn_in"] = kwargs.get("n_burn_in", 5) - kwargs["n_imputations"] = kwargs.get("n_imputations", 25) - kwargs["n_nearest_columns"] = kwargs.get("n_nearest_columns", 25) - return MICE(**kwargs) - elif imputation_method_name == "knn": - kwargs["k"] = kwargs.get("k", 3) - kwargs["orientation"] = kwargs.get("orientation", "columns") - kwargs["print_interval"] = kwargs.get("print_interval", 10) - return KNN(**kwargs) - elif imputation_method_name == "svd": - kwargs["rank"] = kwargs.get("rank", 10) - return IterativeSVD(**kwargs) - elif imputation_method_name in ("svt", "softimpute"): - kwargs["init_fill_method"] = kwargs.get("init_fill_method", "min") - kwargs["normalizer"] = kwargs.get("normalizer", BiScaler()) - return SoftImpute(**kwargs) - elif imputation_method_name == "mean": - return SimpleFill("mean", **kwargs) - elif imputation_method_name == "none": - return None - else: - raise ValueError( - "Invalid imputation method: %s" % imputation_method_name) diff --git a/mhcflurry/keras_layers/drop_mask.py b/mhcflurry/keras_layers/drop_mask.py deleted file mode 100644 index 8ea799ca15ec7f5561f71d721fe6619036c74401..0000000000000000000000000000000000000000 --- a/mhcflurry/keras_layers/drop_mask.py +++ /dev/null @@ -1,16 +0,0 @@ -from keras.layers import Layer - -class DropMask(Layer): - """ - Sometimes we know that a mask is always going to contain 1s (and never 0s) - due to e.g. slicing the beginning of a sequence with a known min length. - In that case it can be useful to drop the sequence mask and feed the - activations to a layer which does not support masking (e.g. Dense). - """ - supports_masking = True - - def call(self, x, mask): - return x - - def compute_mask(self, x, mask): - return None diff --git a/mhcflurry/keras_layers/masked_global_average_pooling.py b/mhcflurry/keras_layers/masked_global_average_pooling.py deleted file mode 100644 index 187cc9c862dfd4f3896c82680d249a6653350888..0000000000000000000000000000000000000000 --- a/mhcflurry/keras_layers/masked_global_average_pooling.py +++ /dev/null @@ -1,31 +0,0 @@ -import keras.layers -import keras.backend as K - -class MaskedGlobalAveragePooling1D(keras.layers.pooling._GlobalPooling1D): - """ - Takes an embedded representation of a sentence with dims - (n_samples, max_length, n_dims) - where each sample is masked to allow for variable-length inputs. - Returns a tensor of shape (n_samples, n_dims) after averaging across - time in a mask-sensitive fashion. - """ - supports_masking = True - - def call(self, x, mask): - expanded_mask = K.expand_dims(mask) - # zero embedded vectors which come from masked characters - x_masked = x * expanded_mask - # how many non-masked characters are in each row? - mask_counts = K.sum(mask, axis=-1) - # add up the vector representations along the time dimension - # the result should have dimension (n_samples, n_embedding_dims) - x_sums = K.sum(x_masked, axis=1) - # cast the number of non-zero elements to float32 and - # give it an extra dimension so it can broadcast properly in - # an elementwise divsion - counts_cast = K.expand_dims(K.cast(mask_counts, "float32")) - return x_sums / counts_cast - - def compute_mask(self, x, mask): - return None - diff --git a/mhcflurry/keras_layers/masked_global_max_pooling.py b/mhcflurry/keras_layers/masked_global_max_pooling.py deleted file mode 100644 index 5bec252a5a445cb691c9ed2503cc5402a3d7e0ad..0000000000000000000000000000000000000000 --- a/mhcflurry/keras_layers/masked_global_max_pooling.py +++ /dev/null @@ -1,24 +0,0 @@ -import keras.layers -import keras.backend as K - -class MaskedGlobalMaxPooling1D(keras.layers.pooling._GlobalPooling1D): - """ - Takes an embedded representation of a sentence with dims - (n_samples, max_length, n_dims) - where each sample is masked to allow for variable-length inputs. - Returns a tensor of shape (n_samples, n_dims) after averaging across - time in a mask-sensitive fashion. - """ - supports_masking = True - - def call(self, x, mask): - expanded_mask = K.expand_dims(mask) - # zero embedded vectors which come from masked characters - x_masked = x * expanded_mask - - # one flaw here is that we're returning max(0, max(x[:, i])) instead of - # max(x[:, i]) - return K.max(x_masked, axis=1) - - def compute_mask(self, x, mask): - return None diff --git a/mhcflurry/keras_layers/masked_slice.py b/mhcflurry/keras_layers/masked_slice.py deleted file mode 100644 index 022c7f79058763a878556adb42ad71971f02ff2b..0000000000000000000000000000000000000000 --- a/mhcflurry/keras_layers/masked_slice.py +++ /dev/null @@ -1,37 +0,0 @@ -import keras.layers - -class MaskedSlice(keras.layers.Lambda): - """ - Takes an embedded representation of a sentence with dims - (n_samples, max_length, n_dims) - where each sample is masked to allow for variable-length inputs. - Returns a tensor of shape (n_samples, n_dims) which are the first - and last vectors in each sentence. - """ - supports_masking = True - - def __init__( - self, - time_start, - time_end, - *args, - **kwargs): - assert time_start >= 0 - assert time_end >= 0 - self.time_start = time_start - self.time_end = time_end - super(MaskedSlice, self).__init__(*args, **kwargs) - - def call(self, x, mask): - return x[:, self.time_start:self.time_end, :] - - def compute_mask(self, x, mask): - return mask[:, self.time_start:self.time_end, :] - - def get_output_shape_for(self, input_shape): - assert len(input_shape) == 3 - output_shape = ( - input_shape[0], - self.time_end - self.time_start + 1, - input_shape[2]) - return output_shape diff --git a/mhcflurry/measurement_collection.py b/mhcflurry/measurement_collection.py deleted file mode 100644 index 3bcc686394082286a585657cab5c1d7d0153e5ee..0000000000000000000000000000000000000000 --- a/mhcflurry/measurement_collection.py +++ /dev/null @@ -1,217 +0,0 @@ -from sklearn.model_selection import StratifiedKFold -import pandas - -from .affinity_measurement_dataset import AffinityMeasurementDataset -from .imputation_helpers import imputer_from_name - -COLUMNS = [ - "allele", - "peptide", - "measurement_type", - "measurement_source", - "measurement_value", - "weight", -] - -MEASUREMENT_TYPES = [ - "affinity", - "ms_hit", -] - -MEASUREMENT_SOURCES = [ - "in_vitro_affinity_assay", - "imputed", - "ms_hit", - "ms_decoy", -] - - -class MeasurementCollection(object): - """ - A measurement collection is a set of observations for allele/peptide pairs. - A single measurement collection may have both MS hits and affinity measurements. - - This is more general than a AffinityMeasurementDataset since it supports MS hits. It is also - simpler, as the user is expected to manipulate the underlying dataframe. - Later we may want to retire AffinityMeasurementDataset or combine it with this class. - """ - - def __init__(self, df, check=True): - if check: - for col in COLUMNS: - assert col in df.columns, col - - for measurement_type in df.measurement_type.unique(): - assert measurement_type in MEASUREMENT_TYPES, measurement_type - self.df = df[COLUMNS] - self.alleles = set(df.allele) - - @staticmethod - def from_dataset(dataset): - """ - Given a AffinityMeasurementDataset, return a MeasurementCollection - """ - dataset_df = dataset.to_dataframe() - df = dataset_df.reset_index(drop=True)[["allele", "peptide"]].copy() - df["measurement_type"] = "affinity" - df["measurement_source"] = "in_vitro_affinity_assay" - df["measurement_value"] = dataset_df.affinity.values - df["weight"] = dataset_df.sample_weight.values - return MeasurementCollection(df) - - def select_measurement_type(self, kind): - """ - Return a new MeasurementCollection containing only measurements of the - given type. - - Parameters - ----------- - kind : string - "affinity" or "ms_hit" - - Returns - ----------- - MeasurementCollection instance - """ - if kind not in MEASUREMENT_TYPES: - raise ValueError( - "Unknown measurement type: %s. Supported types: %s" % ( - kind, ", ".join(MEASUREMENT_TYPES))) - return MeasurementCollection( - self.df.ix[self.df.measurement_type == kind], - check=False) - - def select_allele(self, allele): - """ - Return a new MeasurementCollection containing only observations for the - specified allele. - """ - assert isinstance(allele, str), type(allele) - assert len(self.df) > 0 - alleles = set(self.df.allele.unique()) - assert allele in alleles, "%s not in %s" % (allele, alleles) - return MeasurementCollection( - self.df.ix[self.df.allele == allele], - check=False) - - def half_splits(self, num, random_state=None): - """ - Split the MeasurementCollection into disjoint pairs of - MeasurementCollection instances, each containing half the observations. - - Parameters - ------------- - num : int - Number of pairs to return - - random_state : int, optional - - Returns - ------------- - list of (MeasurementCollection, MeasurementCollection) pairs - Each pair gives a disjoint train and test split. - """ - assert num > 0 - results = [] - while True: - cv = StratifiedKFold( - n_splits=2, - shuffle=True, - random_state=( - None if random_state is None - else random_state + len(results))) - stratification_groups = self.df.allele + self.df.measurement_type - #assert len(stratification_groups.unique()) > 1, ( - # stratification_groups.unique()) - (indices1, indices2) = next( - cv.split(self.df.values, stratification_groups)) - assert len(indices1) > 0 - assert len(indices2) > 0 - mc1 = MeasurementCollection(self.df.iloc[indices1], check=False) - mc2 = MeasurementCollection(self.df.iloc[indices2], check=False) - for pair in [(mc1, mc2), (mc2, mc1)]: - results.append(pair) - if len(results) == num: - return results - - def to_dataset( - self, - include_ms=False, - ms_hit_affinity=1.0, - ms_decoy_affinity=20000): - """ - Return a AffinityMeasurementDataset containing the observations in the collection. - Mass-spec data are converted to affinities according to - ms_hit_affinity and ms_decoy_affinity. - - Parameters - ------------- - include_ms : bool - If True then mass spec data is included; otherwise it is dropped - - ms_hit_affinity : float - nM affinity to assign to mass-spec hits (relevant only if - include_ms=True) - - ms_decoy_affinity : float - nM affinity to assign to mass-spec decoys (relevant only if - include_ms=True) - - Returns - ------------- - AffinityMeasurementDataset instance - """ - if include_ms: - dataset = AffinityMeasurementDataset(pandas.DataFrame({ - "allele": self.df.allele, - "peptide": self.df.peptide, - "affinity": [ - row.measurement_value if row.measurement_type == "affinity" - else ( - ms_hit_affinity if row.value > 0 - else ms_decoy_affinity) - for (_, row) in self.df.iterrows() - ], - "sample_weight": self.df.weight, - })) - else: - df = self.df.ix[ - (self.df.measurement_type == "affinity") & - (self.df.measurement_source == "in_vitro_affinity_assay") - ] - dataset = AffinityMeasurementDataset(pandas.DataFrame({ - "allele": df.allele, - "peptide": df.peptide, - "affinity": df.measurement_value, - "sample_weight": df.weight, - })) - return dataset - - def impute( - self, - impute_method="mice", - impute_log_transform=True, - impute_min_observations_per_peptide=1, - impute_min_observations_per_allele=1, - imputer_args={}): - """ - Return a new MeasurementCollection after applying imputation to - this collection. The imputed collection will have the - observations in the current collection plus the imputed data. - """ - assert len(self.df) > 0 - - dataset = self.to_dataset(include_ms=False) - assert len(dataset) > 0 - imputer = imputer_from_name(impute_method, **imputer_args) - result_df = dataset.impute_missing_values( - imputation_method=imputer, - log_transform=impute_log_transform, - min_observations_per_peptide=impute_min_observations_per_peptide, - min_observations_per_allele=impute_min_observations_per_allele - ).to_dataframe() - result_df["measurement_type"] = "affinity" - result_df["measurement_source"] = "imputed" - result_df["measurement_value"] = result_df.affinity - result_df["weight"] = result_df.sample_weight - return MeasurementCollection(result_df) diff --git a/mhcflurry/parallelism.py b/mhcflurry/parallelism.py deleted file mode 100644 index f89d17d82d3bf4198d5dc2aa80850f42d747ceaa..0000000000000000000000000000000000000000 --- a/mhcflurry/parallelism.py +++ /dev/null @@ -1,120 +0,0 @@ -import logging -from concurrent import futures - -DEFAULT_BACKEND = None - - -class RemoteObjectStub(object): - def __init__(self, value): - self.value = value - - -class ParallelBackend(object): - """ - Thin wrapper of futures implementations. Designed to support - concurrent.futures as well as dask.distributed's workalike implementation. - """ - def __init__(self, executor, module, verbose=1): - self.executor = executor - self.module = module - self.verbose = verbose - - def remote_object(self, value): - return RemoteObjectStub(value) - - -class KubefaceParallelBackend(ParallelBackend): - """ - ParallelBackend that uses kubeface - """ - def __init__(self, args): - from kubeface import Client # pylint: disable=import-error - self.client = Client.from_args(args) - - def map(self, func, iterable): - return self.client.map(func, iterable) - - def remote_object(self, value): - return self.client.remote_object(value) - - def __str__(self): - return "<Kubeface backend, client=%s>" % self.client - - -class DaskDistributedParallelBackend(ParallelBackend): - """ - ParallelBackend that uses dask.distributed - """ - def __init__(self, scheduler_ip_and_port, verbose=1): - from dask import distributed # pylint: disable=import-error - executor = distributed.Executor(scheduler_ip_and_port) - ParallelBackend.__init__(self, executor, distributed, verbose=verbose) - self.scheduler_ip_and_port = scheduler_ip_and_port - - def map(self, func, iterable): - fs = [ - self.executor.submit(func, arg) for arg in iterable - ] - return self.wait(fs) - - def wait(self, fs): - result_dict = {} - for finished_future in self.module.as_completed(fs): - result = finished_future.result() - logging.info("%3d / %3d tasks completed" % ( - len(result_dict), len(fs))) - result_dict[finished_future] = result - - return [result_dict[future] for future in fs] - - def __str__(self): - return "<Dask distributed backend, scheduler=%s, total_cores=%d>" % ( - self.scheduler_ip_and_port, - sum(self.executor.ncores().values())) - - -class ConcurrentFuturesParallelBackend(ParallelBackend): - """ - ParallelBackend that uses Python's concurrent.futures module. - Can use either threads or processes. - """ - def __init__(self, num_workers=1, processes=False, verbose=1): - if processes: - executor = futures.ProcessPoolExecutor(num_workers) - else: - executor = futures.ThreadPoolExecutor(num_workers) - ParallelBackend.__init__(self, executor, futures, verbose=verbose) - self.num_workers = num_workers - self.processes = processes - - def __str__(self): - return "<Concurrent futures %s parallel backend, num workers = %d>" % ( - ("processes" if self.processes else "threads"), self.num_workers) - - def map(self, func, iterable): - fs = [ - self.executor.submit(func, arg) for arg in iterable - ] - return self.wait(fs) - - def wait(self, fs): - result_dict = {} - for finished_future in self.module.as_completed(fs): - result = finished_future.result() - logging.info("%3d / %3d tasks completed" % ( - len(result_dict), len(fs))) - result_dict[finished_future] = result - - return [result_dict[future] for future in fs] - - -def set_default_backend(backend): - global DEFAULT_BACKEND - DEFAULT_BACKEND = backend - - -def get_default_backend(): - global DEFAULT_BACKEND - if DEFAULT_BACKEND is None: - set_default_backend(ConcurrentFuturesParallelBackend()) - return DEFAULT_BACKEND diff --git a/mhcflurry/peptide_encoding.py b/mhcflurry/peptide_encoding.py deleted file mode 100644 index 0738037160be0d716177a3b977cd2a6d1c836fcf..0000000000000000000000000000000000000000 --- a/mhcflurry/peptide_encoding.py +++ /dev/null @@ -1,407 +0,0 @@ -# Copyright (c) 2015. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function, division, absolute_import -import itertools -import logging - -import pandas -import numpy as np - -from .amino_acid import common_amino_acids, amino_acids_with_unknown - -common_amino_acid_letters = common_amino_acids.letters() - - -class KmerEncodedPeptides(object): - """ - Variable-length peptides encoded into a fixed length matrix using netmhc-style reduction to kmers (usually 9mers). - - Parameters - ---------- - peptides : str list - Peptide strings of any length - - encoded_matrix : int array of shape (R, k) - The encoded peptides. R >= len(peptides) is the number of kmers needed to represent the peptides. - If all peptides are length k then R == len(peptides). - - indices : int array of length R - peptides[indices[i]] gives the peptide that gave rise to row encoded_matrix[i] for all 0 < i < R. - - kmer_size : int - k (usually 9) - - allow_unknown_amino_acids : bool - """ - def __init__(self, peptides, encoded_matrix, indices, kmer_size, allow_unknown_amino_acids): - assert len(indices) == len(encoded_matrix) - assert len(peptides) == 0 or len(peptides) == max(indices) + 1 - self.encoded_matrix = encoded_matrix - self.kmer_size = kmer_size - self.allow_unknown_amino_acids = allow_unknown_amino_acids - self.peptides = peptides - self.indices = indices - self.unique_peptides = np.unique(peptides) - - def __len__(self): - return len(self.peptides) - - def combine_predictions(self, predictions): - assert len(predictions) == len(self.encoded_matrix) - assert len(predictions) == len(self.indices) - df = pandas.DataFrame({ - 'original_peptide_index': self.indices, - 'prediction': predictions, - }) - predictions_by_index = df.groupby("original_peptide_index").prediction.mean() - return predictions_by_index[np.arange(0, max(self.indices) + 1)].values - - -def encode_peptides(peptides, kmer_size=9, allow_unknown_amino_acids=True): - """ - Encode peptides of any length into KmerEncodedPeptides instance - - Parameters - ---------- - peptides : str list or KmerEncodedPeptides - Peptide strings of any length. For convenience, if a KmerEncodedPeptides instance is passed then it is returned. - - """ - if isinstance(peptides, KmerEncodedPeptides): - assert peptides.kmer_size == kmer_size - assert peptides.allow_unknown_amino_acids == allow_unknown_amino_acids - return peptides - - if len(peptides) == 0: - combined_matrix = np.zeros((0, kmer_size)) - indices = [] - else: - indices = [] - encoded_matrices = [] - for i, peptide in enumerate(peptides): - matrix, _, _, _ = fixed_length_index_encoding( - peptides=[peptide], - desired_length=kmer_size, - allow_unknown_amino_acids=allow_unknown_amino_acids) - encoded_matrices.append(matrix) - indices.extend([i] * len(matrix)) - combined_matrix = np.concatenate(encoded_matrices) - index_array = np.array(indices) - expected_shape = (len(index_array), kmer_size) - assert combined_matrix.shape == expected_shape, \ - "Expected shape %s but got %s" % ( - expected_shape, combined_matrix.shape) - - return KmerEncodedPeptides( - peptides, - combined_matrix, - index_array, - kmer_size=kmer_size, - allow_unknown_amino_acids=allow_unknown_amino_acids) - - - -def all_kmers(k, alphabet=common_amino_acid_letters): - """ - Generates all k-mer peptide sequences - - Parameters - ---------- - k : int - - alphabet : str | list of characters - """ - alphabets = [alphabet] * k - return [ - "".join(combination) - for combination - in itertools.product(*alphabets) - ] - - -class CombinatorialExplosion(Exception): - pass - - -def extend_peptide( - peptide, - desired_length, - start_offset, - end_offset, - insert_amino_acid_letters=common_amino_acid_letters): - """Extend peptide by inserting every possible amino acid combination - if we're trying to e.g. turn an 8mer into 9mers. - - Parameters - ---------- - peptide : str - - desired_length : int - - start_offset : int - How many characters (from the position before the start of the string) - to skip before inserting characters. - - - end_offset : int - Last character position from the end where we insert new characters, - where 0 is the position after the last character. - - insert_alphabet : str | list of character - """ - n = len(peptide) - assert n < desired_length, \ - "%s (length = %d) is too long! Must be shorter than %d" % ( - peptide, n, desired_length) - n_missing = desired_length - n - if n_missing > 3: - raise CombinatorialExplosion( - "Cannot transform %s of length %d into a %d-mer peptide" % ( - peptide, n, desired_length)) - return [ - peptide[:i] + extra + peptide[i:] - for i in range(start_offset, n - end_offset + 1) - for extra in all_kmers( - n_missing, - alphabet=insert_amino_acid_letters) - ] - - -def shorten_peptide( - peptide, - desired_length, - start_offset, - end_offset, - insert_amino_acid_letters=common_amino_acid_letters): - """Shorten peptide if trying to e.g. turn 10mer into 9mers - - Parameters - ---------- - - peptide : str - - desired_length : int - - start_offset : int - - end_offset : int - - alphabet : str | list of characters - """ - n = len(peptide) - assert n > desired_length, \ - "%s (length = %d) is too short! Must be longer than %d" % ( - peptide, n, desired_length) - n_skip = n - desired_length - assert n_skip > 0, \ - "Expected length of peptide %s %d to be greater than %d" % ( - peptide, n, desired_length) - end_range = n - end_offset - n_skip + 1 - return [ - peptide[:i] + peptide[i + n_skip:] - for i in range(start_offset, end_range) - ] - -def fixed_length_from_many_peptides( - peptides, - desired_length, - start_offset_extend=2, - end_offset_extend=1, - start_offset_shorten=2, - end_offset_shorten=0, - insert_amino_acid_letters=common_amino_acid_letters): - """ - Create a set of fixed-length k-mer peptides from a collection of varying - length peptides. - - Shorter peptides are filled in using all possible amino acids at any - insertion site between start_offset_shorten and -end_offset_shorten - where start_offset_extend=0 represents insertions before the string - and end_offset_extend=0 represents insertions after the string's ending. - - Longer peptides are shortened by deleting contiguous residues, starting - from start_offset_shorten and ending with -end_offset_shorten. Unlike - peptide extensions, the offsets for shortening a peptide range between - the first and last positions (rather than between the positions *before* - the string starts and the position *after*). - - We can recreate the methods from: - Accurate approximation method for prediction of class I MHC - affinities for peptides of length 8, 10 and 11 using prediction - tools trained on 9mers. - by Lundegaard et. al. (http://bioinformatics.oxfordjournals.org/content/24/11/1397) - with the following settings: - - desired_length = 9 - - start_offset_extend = 3 - - end_offset_extend = 2 - - start_offset_shorten = 3 - - end_offset_shorten = 1 - - Returns three lists: - - a list of fixed length peptides (all of length `desired_length`) - - a list of indices of the original peptides from which subsequences - were contracted or lengthened - - a list of counts for each fixed length peptide indicating the - number extracted from its corresponding shorter/longer peptide - - Example: - kmers, original, counts = fixed_length_from_many_peptides( - peptides=["ABC", "A"] - desired_length=2, - start_offset_extend=0, - end_offset_extend=0, - start_offset_shorten=0, - end_offset_shorten=0, - insert_amino_acid_letters="ABC") - kmers == ["BC", "AC", "AB", "AA", "BA", "CA", "AA", "AB", "AC"] - original == ["ABC", "ABC", "ABC", "A", "A", "A", "A", "A", "A"] - counts == [3, 3, 3, 6, 6, 6, 6, 6, 6] - - Parameters - ---------- - peptides : list of str - - desired_length : int - - start_offset_extend : int - - end_offset_extend : int - - start_offset_shorten : int - - end_offset_shorten : int - - insert_amino_acid_letters : str | list of characters - """ - all_fixed_length_peptides = [] - indices = [] - counts = [] - for i, peptide in enumerate(peptides): - n = len(peptide) - if n == desired_length: - fixed_length_peptides = [peptide] - elif n < desired_length: - try: - fixed_length_peptides = extend_peptide( - peptide=peptide, - desired_length=desired_length, - start_offset=start_offset_extend, - end_offset=end_offset_extend, - insert_amino_acid_letters=insert_amino_acid_letters) - except CombinatorialExplosion: - logging.warn( - "Peptide %s is too short to be extended to length %d" % ( - peptide, desired_length)) - continue - else: - fixed_length_peptides = shorten_peptide( - peptide=peptide, - desired_length=desired_length, - start_offset=start_offset_shorten, - end_offset=end_offset_shorten, - insert_amino_acid_letters=insert_amino_acid_letters) - n_fixed_length = len(fixed_length_peptides) - all_fixed_length_peptides.extend(fixed_length_peptides) - indices.extend([i] * n_fixed_length) - counts.extend([n_fixed_length] * n_fixed_length) - return all_fixed_length_peptides, indices, counts - - -def indices_to_hotshot_encoding(X, n_indices=None, first_index_value=0): - """ - Given an (n_samples, peptide_length) integer matrix - convert it to a binary encoding of shape: - (n_samples, peptide_length * n_indices) - """ - (n_samples, peptide_length) = X.shape - if not n_indices: - n_indices = X.max() - first_index_value + 1 - X_binary = np.zeros((n_samples, peptide_length * n_indices), dtype=bool) - for i, row in enumerate(X): - for j, xij in enumerate(row): - X_binary[i, n_indices * j + xij - first_index_value] = 1 - return X_binary.astype(float) - - -def fixed_length_index_encoding( - peptides, - desired_length, - start_offset_shorten=0, - end_offset_shorten=0, - start_offset_extend=0, - end_offset_extend=0, - allow_unknown_amino_acids=True): - """ - Take peptides of varying lengths, chop them into substrings of fixed - length and apply index encoding to these substrings. - - If a string is longer than the desired length, then it's reduced to - the desired length by deleting characters at all possible positions. When - positions at the start or end of a string should be exempt from deletion - then the number of exempt characters can be controlled via - `start_offset_shorten` and `end_offset_shorten`. - - If a string is shorter than the desired length then it is filled - with all possible characters of the alphabet at all positions. The - parameters `start_offset_extend` and `end_offset_extend` control whether - certain positions are excluded from insertion. The positions are - in a "inter-residue" coordinate system, where `start_offset_extend` = 0 - refers to the position *before* the start of a peptide and, similarly, - `end_offset_extend` = 0 refers to the position *after* the peptide. - - Returns tuple with the following fields: - - index encoded feature matrix X - - list of fixed length peptides - - list of "original" peptides of varying lengths - - list of integer counts indicating how many rows came from - that original peptide. - - When two rows are expanded out of a single original peptide, they will both - have a count of 2. These counts can be useful for down-weighting the - importance of multiple feature vectors which originate from the same sample. - """ - if allow_unknown_amino_acids: - insert_letters = ["X"] - index_encoding = amino_acids_with_unknown.index_encoding - else: - insert_letters = common_amino_acid_letters - index_encoding = common_amino_acids.index_encoding - - fixed_length, original_peptide_indices, counts = \ - fixed_length_from_many_peptides( - peptides=peptides, - desired_length=desired_length, - start_offset_shorten=start_offset_shorten, - end_offset_shorten=end_offset_shorten, - start_offset_extend=start_offset_extend, - end_offset_extend=end_offset_extend, - insert_amino_acid_letters=insert_letters) - X = index_encoding(fixed_length, desired_length) - return (X, fixed_length, original_peptide_indices, counts) - -def check_valid_index_encoding_array(X, allow_unknown_amino_acids=True): - X = np.asarray(X) - if len(X.shape) != 2: - raise ValueError("Expected 2d input, got array with shape %s" % ( - X.shape,)) - max_expected_index = 20 if allow_unknown_amino_acids else 19 - if X.max() > max_expected_index: - raise ValueError( - "Got index %d in peptide encoding, max expected %d" % ( - X.max(), - max_expected_index)) - return X - - diff --git a/mhcflurry/predict_command.py b/mhcflurry/predict_command.py index 05c4c8090de7966f81d5930880e962ea96009ede..2231c2a2f34f1cdba74acd6d92432b9567f1d811 100644 --- a/mhcflurry/predict_command.py +++ b/mhcflurry/predict_command.py @@ -46,7 +46,7 @@ import pandas import itertools from .downloads import get_path -from . import class1_allele_specific, class1_allele_specific_ensemble +from . import class1_affinity_prediction, class1_allele_specific_ensemble parser = argparse.ArgumentParser( description=__doc__, @@ -163,7 +163,7 @@ def run(argv=sys.argv[1:]): # them to download the models if needed. models_dir = get_path("models_class1_allele_specific_single") predictor = ( - class1_allele_specific + class1_affinity_prediction .class1_single_model_multi_allele_predictor .Class1SingleModelMultiAllelePredictor ).load_from_download_directory(models_dir) diff --git a/mhcflurry/prediction.py b/mhcflurry/prediction.py deleted file mode 100644 index 36e1f0e71534a3b92eb23d46c4dfa25d09fb33d0..0000000000000000000000000000000000000000 --- a/mhcflurry/prediction.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2015. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from collections import OrderedDict - -import pandas -import numpy - -from .class1_allele_specific_ensemble import class1_ensemble_multi_allele_predictor -from .common import normalize_allele_name, UnsupportedAllele -from .peptide_encoding import encode_peptides - - -def predict(alleles, peptides, predictor=None): - """ - Make predictions across all combinations of the specified alleles and - peptides. - - Parameters - ---------- - alleles : list of str - Names of alleles to make predictions for. - - peptides : list of str - Peptide amino acid sequences. - - predictor : Predictor to use. Defaults to downloaded Class1SingleModelMultiAllelePredictor. - - Returns DataFrame with columns "Allele", "Peptide", and "Prediction" - """ - if predictor is None: - predictor = class1_ensemble_multi_allele_predictor.get_downloaded_predictor() - - if len(peptides) == 0 or len(alleles) == 0: - return pandas.DataFrame(columns=["Peptide", "Allele", "Prediction"]) - - peptides = numpy.unique(peptides) - encoded_peptides = encode_peptides(peptides) - result_dfs = [] - result_df = pandas.DataFrame() - result_df["Peptide"] = peptides - for allele in alleles: - allele = normalize_allele_name(allele) - predictions = predictor.predict_for_allele(allele, encoded_peptides) - result_df = result_df.copy() - result_df["Allele"] = allele - result_df["Prediction"] = predictions - result_dfs.append(result_df) - return pandas.concat(result_dfs, ignore_index=True) diff --git a/mhcflurry/regression_target.py b/mhcflurry/regression_target.py index 66ca26cd81b0fd123ceea5f9a3c174552304706e..cbd572cc86a558fa61d8713846e3ccbfc6ac364c 100644 --- a/mhcflurry/regression_target.py +++ b/mhcflurry/regression_target.py @@ -12,40 +12,39 @@ # See the License for the specific language governing permissions and # limitations under the License. -import numpy as np +import numpy -MAX_IC50 = 50000.0 -def ic50_to_regression_target(ic50, max_ic50=MAX_IC50): +def from_ic50(ic50): """ - Transform IC50 inhibitory binding concentrations to affinity values between - [0,1] where 0 means a value greater or equal to max_ic50 and 1 means very - strong binder. - + Convert ic50s to regression targets in the range [0.0, 1.0]. + Parameters ---------- - ic50 : numpy.ndarray + ic50 : numpy.array of float + + Returns + ------- + numpy.array of float - max_ic50 : float - """ - log_ic50 = np.log(ic50) / np.log(max_ic50) - regression_target = 1.0 - log_ic50 - # clamp to values between 0, 1 - regression_target = np.maximum(regression_target, 0.0) - regression_target = np.minimum(regression_target, 1.0) - return regression_target - -def regression_target_to_ic50(y, max_ic50=MAX_IC50): """ - Transform values between [0,1] to IC50 inhibitory binding concentrations - between [1.0, infinity] + x = 1.0 - (numpy.log(ic50) / numpy.log(50000)) + return numpy.minimum( + 1.0, + numpy.maximum(0.0, x)) + +def to_ic50(x): + """ + Convert regression targets in the range [0.0, 1.0] to ic50s in the range + [0, 50000.0]. + Parameters ---------- - y : numpy.ndarray of float - - max_ic50 : float + x : numpy.array of float - Returns numpy.ndarray + Returns + ------- + numpy.array of float """ - return max_ic50 ** (1.0 - y) + return 50000.0 ** (1.0 - x) diff --git a/mhcflurry/training_helpers.py b/mhcflurry/training_helpers.py deleted file mode 100644 index 5a3be5c4cc61b6a09e5681980fd755b8382956d7..0000000000000000000000000000000000000000 --- a/mhcflurry/training_helpers.py +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright (c) 2016. Mount Sinai School of Medicine -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Helper functions for training predictors on fixed length encoding of peptides -along with vectors representing affinity and sample weights. - -Eventually we'll have to generalize or split this to work with sequence -inputs for RNN predictors. -""" - -from __future__ import ( - print_function, - division, - absolute_import, -) - -import numpy as np - -def check_encoded_array_shapes(X, Y, sample_weights): - """ - Check to make sure that the shapes of X, Y, and weights are all compatible. - This function differs from check_pMHC_affinity_array_lengths in that the - peptides are assumed to be encoded into a single 2d array of features X - and the data is either for a single allele or allele features are included - in X. - - Returns the numbers of rows and columns in X. - """ - if len(X.shape) != 2: - raise ValueError("Expected X to be 2d, got shape: %s" % (X.shape,)) - - if len(Y.shape) != 1: - raise ValueError("Expected Y to be 1d, got shape: %s" % (Y.shape,)) - - if len(sample_weights.shape) != 1: - raise ValueError("Expected weights to be 1d, got shape: %s" % ( - sample_weights.shape,)) - - n_samples, n_dims = X.shape - if len(Y) != n_samples: - raise ValueError("Mismatch between len(X) = %d and len(Y) = %d" % ( - n_samples, len(Y))) - - if len(sample_weights) != n_samples: - raise ValueError( - "Length of sample_weights (%d) doesn't match number of samples (%d)" % ( - len(sample_weights), - n_samples)) - - return n_samples, n_dims - -def combine_training_arrays( - X, - Y, - sample_weights, - X_pretrain, - Y_pretrain, - sample_weights_pretrain): - """ - Make sure the shapes of given training and pre-training data - conform with each other. Then concatenate the pre-training and the - training data. - - Returns (X_combined, Y_combined, weights_combined, n_pretrain_samples) - """ - X = np.asarray(X) - Y = np.asarray(Y) - if sample_weights is None: - sample_weights = np.ones_like(Y) - else: - sample_weights = np.asarray(sample_weights) - - n_samples, n_dims = check_encoded_array_shapes(X, Y, sample_weights) - - if X_pretrain is None or Y_pretrain is None: - X_pretrain = np.zeros((0, n_dims), dtype=X.dtype) - Y_pretrain = np.zeros((0,), dtype=Y.dtype) - else: - X_pretrain = np.asarray(X_pretrain) - Y_pretrain = np.asarray(Y_pretrain) - - if sample_weights_pretrain is None: - sample_weights_pretrain = np.ones_like(Y_pretrain) - else: - sample_weights_pretrain = np.asarray(sample_weights_pretrain) - - n_pretrain_samples, n_pretrain_dims = check_encoded_array_shapes( - X_pretrain, Y_pretrain, sample_weights_pretrain) - - X_combined = np.vstack([X_pretrain, X]) - Y_combined = np.concatenate([Y_pretrain, Y]) - combined_weights = np.concatenate([ - sample_weights_pretrain, - sample_weights, - ]) - return X_combined, Y_combined, combined_weights, n_pretrain_samples - - -def extend_with_negative_random_samples( - X, Y, weights, n_random_negative_samples, max_amino_acid_encoding_value): - """ - Extend training data with randomly generated negative samples. Assumes that - X is an integer array of amino acid indices for fixed length peptides. - - Parameters - ---------- - X : numpy.ndarray - 2d array of integer amino acid encodings - - Y : numpy.ndarray - 1d array of regression targets - - weights : numpy.ndarray - 1d array of sample weights (must be same length as X and Y) - - n_random_negative_samples : int - Number of random negative samplex to create - - max_amino_acid_encoding_value : int - Typically 20 for the standard set of amino acids or 21 if we're - including the null character "X" used to extend 8mers into 9mers - - Returns X, Y, weights (extended with random negative samples) - """ - assert len(X) == len(Y) == len(weights) - if n_random_negative_samples == 0: - return X, Y, weights - n_cols = X.shape[1] - X_random = np.random.randint( - low=0, - high=max_amino_acid_encoding_value, - size=(n_random_negative_samples, n_cols)).astype(X.dtype) - Y_random = np.zeros(n_random_negative_samples, dtype=float) - weights_random = np.ones(n_random_negative_samples, dtype=float) - X_with_negative = np.vstack([X, X_random]) - Y_with_negative = np.concatenate([Y, Y_random]) - weights_with_negative = np.concatenate([ - weights, - weights_random]) - assert len(X_with_negative) == len(X) + n_random_negative_samples - assert len(Y_with_negative) == len(Y) + n_random_negative_samples - assert len(weights_with_negative) == len(weights) + n_random_negative_samples - return X_with_negative, Y_with_negative, weights_with_negative diff --git a/requirements.txt b/requirements.txt index 9b6ae49d48bfaef191ec9d09c91ba3cd354907ba..757af4268dcdedeaf01b97c2da943f96541f2099 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,8 @@ numpy>= 1.11 pandas>=0.13.1 appdirs -theano==0.8.2 -keras==1.2.0 -fancyimpute>=0.0.12 +theano +keras scikit-learn h5py typechecks diff --git a/setup.py b/setup.py index e4853dddd2ff8a74a43c18cdb1a04fcaa722b8b3..42f50f456e7681ccd930fdeec785af26ea4d2e17 100644 --- a/setup.py +++ b/setup.py @@ -52,9 +52,8 @@ if __name__ == '__main__': 'numpy>=1.11', 'pandas>=0.13.1', 'appdirs', - 'theano==0.8.2', - 'keras==1.2.0', - 'fancyimpute>=0.0.12', + 'theano', + 'keras', 'scikit-learn', 'h5py', 'typechecks', @@ -79,10 +78,9 @@ if __name__ == '__main__': 'console_scripts': [ 'mhcflurry-downloads = mhcflurry.downloads_command:run', 'mhcflurry-predict = mhcflurry.predict_command:run', - 'mhcflurry-class1-allele-specific-ensemble-train = ' - 'mhcflurry.class1_allele_specific_ensemble.train_command:run', - 'mhcflurry-class1-allele-specific-cv-and-train = ' - 'mhcflurry.class1_allele_specific.cv_and_train_command:run', + 'mhcflurry-class1-train-allele-specific-models = ' + 'mhcflurry.class1_affinity_prediction.' + 'train_allele_specific_models_command:run', ] }, classifiers=[ @@ -101,7 +99,6 @@ if __name__ == '__main__': long_description=readme, packages=[ 'mhcflurry', - 'mhcflurry.class1_allele_specific', - 'mhcflurry.class1_allele_specific_ensemble', + 'mhcflurry.class1_affinity_prediction', ], ) diff --git a/test/test_class1_allele_specific_cv_and_train_command.py b/test/test_class1_allele_specific_cv_and_train_command.py index eb722ffeee727a9f3a09389dc6ea77bf89ed70fb..29e4e491aec486e4b46f02f9b80ec5f260d53709 100644 --- a/test/test_class1_allele_specific_cv_and_train_command.py +++ b/test/test_class1_allele_specific_cv_and_train_command.py @@ -9,9 +9,9 @@ from os import mkdir, environ import pandas -from mhcflurry.class1_allele_specific import cv_and_train_command -from mhcflurry import downloads, predict, class1_allele_specific -from mhcflurry.class1_allele_specific.train import HYPERPARAMETER_DEFAULTS +from mhcflurry.class1_affinity_prediction import cv_and_train_command +from mhcflurry import downloads, predict, class1_affinity_prediction +from mhcflurry.class1_affinity_prediction.train import HYPERPARAMETER_DEFAULTS try: import kubeface @@ -116,7 +116,7 @@ def verify_trained_models(base_temp_dir): data["prediction"] = predict( data.allele, data.peptide, - predictor=class1_allele_specific.get_downloaded_predictor() + predictor=class1_affinity_prediction.get_downloaded_predictor() ).Prediction print(data) mean_binder = data.ix[data.binder].prediction.mean() diff --git a/test/test_cross_validation.py b/test/test_cross_validation.py index fdcd160f97a6e36d057138fa7857714badebe80c..dd5777074b73fad7e01339bd8169a0cdb6c11a20 100644 --- a/test/test_cross_validation.py +++ b/test/test_cross_validation.py @@ -7,11 +7,11 @@ import fancyimpute from mhcflurry.downloads import get_path -from mhcflurry.class1_allele_specific import ( +from mhcflurry.class1_affinity_prediction import ( cross_validation_folds, train_across_models_and_folds) -from mhcflurry.class1_allele_specific.train import ( +from mhcflurry.class1_affinity_prediction.train import ( HYPERPARAMETER_DEFAULTS) from mhcflurry.affinity_measurement_dataset import AffinityMeasurementDataset diff --git a/test/test_ensemble.py b/test/test_ensemble.py index 24ea46c9f04b68ef367740e34603daaff3f94cb6..210989e3f6db36d0c51dad47504814b3bf6ce515 100644 --- a/test/test_ensemble.py +++ b/test/test_ensemble.py @@ -14,7 +14,7 @@ from nose.tools import eq_ from . import make_random_peptides -from mhcflurry.class1_allele_specific import scoring +from mhcflurry.class1_affinity_prediction import scoring from mhcflurry.measurement_collection import MeasurementCollection from mhcflurry.class1_allele_specific_ensemble import train_command from mhcflurry.affinity_measurement_dataset import AffinityMeasurementDataset diff --git a/test/test_hyperparameters.py b/test/test_hyperparameters.py index afce49f8ff574f6123d6fc8c4c9839d01f12c9e6..a840bbf7b458e3c3c7fa3cb0f0eafdab9c834c57 100644 --- a/test/test_hyperparameters.py +++ b/test/test_hyperparameters.py @@ -1,6 +1,6 @@ from numpy.testing import assert_equal -from mhcflurry.class1_allele_specific import Class1BindingPredictor +from mhcflurry.class1_affinity_prediction import Class1BindingPredictor def test_all_combinations_of_hyperparameters(): diff --git a/test/test_known_class1_epitopes.py b/test/test_known_class1_epitopes.py index a1c35794c94aa0421bef39ba64cc2778717ee5b3..50685d0afc2517e49670fb68e68a92af27a417b3 100644 --- a/test/test_known_class1_epitopes.py +++ b/test/test_known_class1_epitopes.py @@ -15,12 +15,12 @@ import cProfile import mhcflurry -import mhcflurry.class1_allele_specific +import mhcflurry.class1_affinity_prediction import mhcflurry.class1_allele_specific_ensemble predictors = [ - mhcflurry.class1_allele_specific.get_downloaded_predictor(), + mhcflurry.class1_affinity_prediction.get_downloaded_predictor(), mhcflurry.class1_allele_specific_ensemble.get_downloaded_predictor(), ] diff --git a/test/test_serialization.py b/test/test_serialization.py index 494f558497afb31b0d957ef55e273983050d2592..98870bb89eb0b66fb565aa06f039757bfe3f7f1a 100644 --- a/test/test_serialization.py +++ b/test/test_serialization.py @@ -1,7 +1,7 @@ import pickle import numpy as np -from mhcflurry.class1_allele_specific import Class1BindingPredictor +from mhcflurry.class1_affinity_prediction import Class1BindingPredictor def test_predict_after_saving_model_to_disk():