Commit c61a156f authored by adrien's avatar adrien
Browse files

Create gh-pages branch via GitHub

parents
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>Pyblast by a-slide</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
</head>
<body>
<section class="page-header">
<h1 class="project-name">Pyblast</h1>
<h2 class="project-tagline">Simple and lightweight Python 2.7 wrapper module for NCBI BLAST+</h2>
<a href="https://github.com/a-slide/pyBlast" class="btn">View on GitHub</a>
<a href="https://github.com/a-slide/pyBlast/zipball/master" class="btn">Download .zip</a>
<a href="https://github.com/a-slide/pyBlast/tarball/master" class="btn">Download .tar.gz</a>
</section>
<section class="main-content">
<h1>
<a id="pyblast-01" class="anchor" href="#pyblast-01" aria-hidden="true"><span class="octicon octicon-link"></span></a>pyBlast 0.1</h1>
<p><strong>Simple and lightweight Python 2.7 wrapper module for NCBI BLAST+</strong></p>
<p><strong>Creation : 2015/05/18</strong></p>
<p><strong>Last update : 2015/05/22</strong></p>
<h2>
<a id="blasthit" class="anchor" href="#blasthit" aria-hidden="true"><span class="octicon octicon-link"></span></a>BlastHit</h2>
<p>Python object representing a hit found by blastn. The object contains the following public fields:</p>
<ul>
<li>id: Auto incremented unique identifier [INT]</li>
<li>q_id: Query sequence name [STR]</li>
<li>s_id: Subject sequence name [STR]</li>
<li>identity: % of identity in the hit [FLOAT 0:100]</li>
<li>length: length of the hit [INT &gt;=0]</li>
<li>mis: Number of mismatch in the hit [INT &gt;=0]</li>
<li>gap: Number of gap in the hit [INT &gt;=0]</li>
<li>q_start: Hit start position of the query sequence [INT &gt;=0]</li>
<li>q_end: Hit end position of the query sequence [INT &gt;=0]</li>
<li>s_start: Hit start position of the subject sequence [INT &gt;=0]</li>
<li>s_end: Hit end position of the subject sequence [INT &gt;=0]</li>
<li>evalue: E value of the alignment [FLOAT &gt;=0]</li>
<li>bscore: Bit score of the alignment[FLOAT &gt;=0]</li>
<li>q_seq: Sequence of the query aligned on the subject sequence [STR]</li>
<li>q_orient: Orientation of the query sequence [+ or -]</li>
<li>s_orient: Orientation of the subject sequence [+ or -]</li>
</ul>
<p>The validity of numeric value is checked upon instantiation. Invalid values will raise assertion errors.</p>
<h2>
<a id="blastn" class="anchor" href="#blastn" aria-hidden="true"><span class="octicon octicon-link"></span></a>Blastn</h2>
<p>This class contain the wrapper for Blastn and require the installation of ncbi Blast+ 2.2.28+.</p>
<h3>
<a id="setup-blastn-object-create-subject-database" class="anchor" href="#setup-blastn-object-create-subject-database" aria-hidden="true"><span class="octicon octicon-link"></span></a>Setup Blastn object: Create subject database</h3>
<p>Upon instantiation, a database is created from the user-provided subject sequence. Database files are created in a temporary directory.
The following parameters can be customized at Blastn objects instantiation</p>
<ul>
<li>ref_path: Path to the reference fasta file (not gzipped). Mandatory</li>
<li>makeblastdb_exec: Path of the makeblastdb executable. Default = "makeblastdb"</li>
<li>makeblastdb_opt: makeblastdb command line options as a string. Default = ""</li>
<li>dbtype: Molecule type of target db ('nucl', 'prot'). Default = "nucl"</li>
<li>input_type: type of the data specified in input_file ('asn1_bin', 'asn1_txt', 'blastdb', 'fasta'). Default = "fasta"</li>
</ul>
<p>To ensure a proper database files deletion at the end of the execution it is possible to call the object using the <code>with</code> statement.
Alternatively you can call the <code>rm_db</code> method at the end of the Blastn usage.</p>
<p><strong>Code</strong></p>
<pre><code>with Blastn(ref_path="./subject.fa") as blastn:
print (blastn)
</code></pre>
<p><strong>Output</strong></p>
<pre><code>CREATE DATABASE: makeblastdb -dbtype nucl -input_type fasta -in subject.fa -out /tmp/tmpihszgZ/subject
MAKEBLASTDB CLASS Parameters list
db_basename subject
db_dir /tmp/tmpihszgZ
db_path /tmp/tmpihszgZ/subject
dbtype nucl
input_type fasta
makeblastdb_exec makeblastdb
makeblastdb_opt
ref_path subject.fa
Cleaning up blast DB files for "subject"
</code></pre>
<h3>
<a id="calling-blastn-object-perform-blastn-and-return-a-list-of-hits" class="anchor" href="#calling-blastn-object-perform-blastn-and-return-a-list-of-hits" aria-hidden="true"><span class="octicon octicon-link"></span></a>Calling Blastn object: Perform Blastn and return a list of hits</h3>
<p>The Blastn object can then be directly called, as many time as desired, with query fasta files, that can contain several sequences.
The method will automatically call blastn in a multiprocessing fashion, using as many threads as possible.
The following parameters can be customized at Blastn objects calling:</p>
<ul>
<li>query_path: Path to a fasta file containing the query sequences (not gzipped). Mandatory</li>
<li>blast_exec: Path of the blast executable. By Default blastn will be used. Default = "blastn"</li>
<li>blastn_opt: Blastn command line options as a string. Default = ""</li>
<li>task: Type of blast to be performed ('blastn' 'blastn-short' 'dc-megablast' 'megablast' 'rmblastn'). Default = "dc-megablast"</li>
<li>evalue: E Value cuttoff to retain alignments. Default = 1</li>
<li>best_query_hit: find and return only the best hit per query. Default = False</li>
</ul>
<p>A list containing 1 BlastHit object for each query hit found in the subject will be returned, except if not hit were found in which situation 'None' will be returned.
If the best_query_hit flag was set to True, Only the best hit per query sequence from the query file will be returned.</p>
<p><strong>Code</strong></p>
<pre><code>with Blastn(ref_path="./subject.fa") as blastn:
hit_list = blastn(query_path="./query.fa")
for hit in hit_list:
print (hit)
</code></pre>
<p><strong>Output</strong></p>
<pre><code>CREATE DATABASE: makeblastdb -dbtype nucl -input_type fasta -in ./subject.fa -out /tmp/tmp1ZBlfT/subject
MAKE BLAST: blastn -num_threads 4 -task dc-megablast -evalue 1 -outfmt "6 std qseq" -dust no -query ./query.fa -db /tmp/tmp1ZBlfT/subject
2 hits found
HIT 0 Query query1:0-48(+)
Subject subject:19-67(+)
Lenght : 48 Identity : 100.0% Evalue : 2e-23 Bit score : 87.8
Aligned query seq : GCATGCTCGATCAGTAGCTCTCAGTACGCATACGCTAGCATCACGACT
HIT 1 Query query2:0-48(+)
Subject subject:89-137(+)
Lenght : 48 Identity : 100.0% Evalue : 2e-23 Bit score : 87.8
Aligned query seq : CGCATCGACTCGATCTGATCAGCTCACAGTCAGCATCAGCTACGATCA
Cleaning up blast DB files for "subject"
</code></pre>
<h2>
<a id="testing-pyblast-module" class="anchor" href="#testing-pyblast-module" aria-hidden="true"><span class="octicon octicon-link"></span></a>Testing pyBlast module</h2>
<p>The module can be easily tested thanks to pytest</p>
<ul>
<li>Install pytest with pip <code>pip instal pytest</code>
</li>
<li>Run test with py.test-2.7 -v</li>
</ul>
<p>Example of output if successful. Please note than some tests might fail due to the random sampling of DNA sequences, and uncertainties of Blastn algorithm.</p>
<pre><code>========================================== test session starts ===========================================
platform linux2 -- Python 2.7.5 -- py-1.4.27 -- pytest-2.7.0 -- /usr/bin/python
rootdir: /home/adrien/Programming/Python/pyBlast, inifile:
collected 21 items
test_pyBlast.py::test_BlastHit[4.16866907958-57-98-69-88-12-100-43-1.40452897105-47.3666242716] PASSED
test_pyBlast.py::test_BlastHit[-1-7-10-20-73-54-25-45-98.7921480151-45.2397166228] xfail
test_pyBlast.py::test_BlastHit[8.92741377413--1-100-36-34-33-14-71-18.8547135761-97.6604693294] xfail
test_pyBlast.py::test_BlastHit[10.5987790458-46--1-45-78-81-86-86-73.8740266727-56.887410005] xfail
test_pyBlast.py::test_BlastHit[66.8213911219-62-48--1-91-10-60-20-88.7850139735-81.7901609219] xfail
test_pyBlast.py::test_BlastHit[86.6626174287-29-83-34--1-53-57-68-17.9799756069-7.83036609495] xfail
test_pyBlast.py::test_BlastHit[5.23985331666-43-85-33-7--1-14-3-74.2130782704-88.9289495285] xfail
test_pyBlast.py::test_BlastHit[75.6935977321-8-78-68-10-39--1-74-44.1447867052-22.5203082483] xfail
test_pyBlast.py::test_BlastHit[39.8692596061-60-5-49-77-9-31--1-2.59963139531-46.3133849683] xfail
test_pyBlast.py::test_BlastHit[15.7192632366-24-92-1-64-82-83-90--1-75.5540618409] xfail
test_pyBlast.py::test_BlastHit[18.6627439886-34-57-60-5-45-26-40-77.7840842678--1] xfail
test_pyBlast.py::test_Blastn[blastn-Queries from Subject] PASSED
test_pyBlast.py::test_Blastn[blastn-Random queries] xfail
test_pyBlast.py::test_Blastn[blastn-short-Queries from Subject] PASSED
test_pyBlast.py::test_Blastn[blastn-short-Random queries] xfail
test_pyBlast.py::test_Blastn[dc-megablast-Queries from Subject] PASSED
test_pyBlast.py::test_Blastn[dc-megablast-Random queries] xfail
test_pyBlast.py::test_Blastn[megablast-Queries from Subject] PASSED
test_pyBlast.py::test_Blastn[megablast-Random queries] xfail
test_pyBlast.py::test_Blastn[rmblastn-Queries from Subject] PASSED
test_pyBlast.py::test_Blastn[rmblastn-Random queries] xfail
================================== 6 passed, 15 xfailed in 5.91 seconds ==================================
</code></pre>
<h2>
<a id="dependencies" class="anchor" href="#dependencies" aria-hidden="true"><span class="octicon octicon-link"></span></a>Dependencies</h2>
<ul>
<li><a href="http://blast.ncbi.nlm.nih.gov/Blast.cgi?PAGE_TYPE=BlastDocs&amp;DOC_TYPE=Download">ncbi Blast+ 2.2.28+</a></li>
<li>
<a href="http://pytest.org/latest/">python package pytest</a>: <code>pip instal pytest</code>
</li>
</ul>
<h2>
<a id="authors-and-contact" class="anchor" href="#authors-and-contact" aria-hidden="true"><span class="octicon octicon-link"></span></a>Authors and Contact</h2>
<p>Adrien Leger - 2015</p>
<ul>
<li>
<a href="mailto:adrien.leger@gmail.com">adrien.leger@gmail.com</a> - <a href="mailto:adrien.leger@inserm.fr">adrien.leger@inserm.fr</a> - <a href="mailto:adrien.leger@univ-nantes.fr">adrien.leger@univ-nantes.fr</a>
</li>
<li><a href="https://github.com/a-slide">Github</a></li>
<li><a href="http://www.atlantic-gene-therapies.fr/">Atlantic Gene Therapies - INSERM 1089</a></li>
</ul>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/a-slide/pyBlast">Pyblast</a> is maintained by <a href="https://github.com/a-slide">a-slide</a>.</span>
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
</footer>
</section>
</body>
</html>
{"name":"Pyblast","tagline":"Simple and lightweight Python 2.7 wrapper module for NCBI BLAST+","body":"# pyBlast 0.1\r\n\r\n**Simple and lightweight Python 2.7 wrapper module for NCBI BLAST+**\r\n\r\n**Creation : 2015/05/18**\r\n\r\n**Last update : 2015/05/22**\r\n\r\n## BlastHit\r\n\r\nPython object representing a hit found by blastn. The object contains the following public fields:\r\n\r\n* id: Auto incremented unique identifier [INT]\r\n* q_id: Query sequence name [STR]\r\n* s_id: Subject sequence name [STR]\r\n* identity: % of identity in the hit [FLOAT 0:100]\r\n* length: length of the hit [INT >=0]\r\n* mis: Number of mismatch in the hit [INT >=0]\r\n* gap: Number of gap in the hit [INT >=0]\r\n* q_start: Hit start position of the query sequence [INT >=0]\r\n* q_end: Hit end position of the query sequence [INT >=0]\r\n* s_start: Hit start position of the subject sequence [INT >=0]\r\n* s_end: Hit end position of the subject sequence [INT >=0]\r\n* evalue: E value of the alignment [FLOAT >=0]\r\n* bscore: Bit score of the alignment[FLOAT >=0]\r\n* q_seq: Sequence of the query aligned on the subject sequence [STR]\r\n* q_orient: Orientation of the query sequence [+ or -]\r\n* s_orient: Orientation of the subject sequence [+ or -]\r\n\r\nThe validity of numeric value is checked upon instantiation. Invalid values will raise assertion errors.\r\n\r\n## Blastn\r\n\r\nThis class contain the wrapper for Blastn and require the installation of ncbi Blast+ 2.2.28+.\r\n\r\n### Setup Blastn object: Create subject database\r\n\r\nUpon instantiation, a database is created from the user-provided subject sequence. Database files are created in a temporary directory.\r\nThe following parameters can be customized at Blastn objects instantiation\r\n* ref_path: Path to the reference fasta file (not gzipped). Mandatory\r\n* makeblastdb_exec: Path of the makeblastdb executable. Default = \"makeblastdb\"\r\n* makeblastdb_opt: makeblastdb command line options as a string. Default = \"\"\r\n* dbtype: Molecule type of target db ('nucl', 'prot'). Default = \"nucl\"\r\n* input_type: type of the data specified in input_file ('asn1_bin', 'asn1_txt', 'blastdb', 'fasta'). Default = \"fasta\"\r\n\r\nTo ensure a proper database files deletion at the end of the execution it is possible to call the object using the `with` statement.\r\nAlternatively you can call the `rm_db` method at the end of the Blastn usage.\r\n\r\n**Code**\r\n```\r\nwith Blastn(ref_path=\"./subject.fa\") as blastn:\r\n print (blastn)\r\n```\r\n**Output**\r\n```\r\nCREATE DATABASE: makeblastdb -dbtype nucl -input_type fasta -in subject.fa -out /tmp/tmpihszgZ/subject\r\n\r\nMAKEBLASTDB CLASS\tParameters list\r\n\tdb_basename\tsubject\r\n\tdb_dir\t/tmp/tmpihszgZ\r\n\tdb_path\t/tmp/tmpihszgZ/subject\r\n\tdbtype\tnucl\r\n\tinput_type\tfasta\r\n\tmakeblastdb_exec\tmakeblastdb\r\n\tmakeblastdb_opt\t\r\n\tref_path\tsubject.fa\r\n\r\nCleaning up blast DB files for \"subject\"\r\n```\r\n\r\n### Calling Blastn object: Perform Blastn and return a list of hits\r\n\r\nThe Blastn object can then be directly called, as many time as desired, with query fasta files, that can contain several sequences.\r\nThe method will automatically call blastn in a multiprocessing fashion, using as many threads as possible.\r\nThe following parameters can be customized at Blastn objects calling:\r\n\r\n* query_path: Path to a fasta file containing the query sequences (not gzipped). Mandatory\r\n* blast_exec: Path of the blast executable. By Default blastn will be used. Default = \"blastn\"\r\n* blastn_opt: Blastn command line options as a string. Default = \"\"\r\n* task: Type of blast to be performed ('blastn' 'blastn-short' 'dc-megablast' 'megablast' 'rmblastn'). Default = \"dc-megablast\"\r\n* evalue: E Value cuttoff to retain alignments. Default = 1\r\n* best_query_hit: find and return only the best hit per query. Default = False\r\n\r\nA list containing 1 BlastHit object for each query hit found in the subject will be returned, except if not hit were found in which situation 'None' will be returned. \r\nIf the best_query_hit flag was set to True, Only the best hit per query sequence from the query file will be returned.\r\n\r\n**Code**\r\n```\r\nwith Blastn(ref_path=\"./subject.fa\") as blastn:\r\n hit_list = blastn(query_path=\"./query.fa\")\r\n for hit in hit_list:\r\n print (hit)\r\n```\r\n**Output**\r\n```\r\nCREATE DATABASE: makeblastdb -dbtype nucl -input_type fasta -in ./subject.fa -out /tmp/tmp1ZBlfT/subject\r\n\r\nMAKE BLAST: blastn -num_threads 4 -task dc-megablast -evalue 1 -outfmt \"6 std qseq\" -dust no -query ./query.fa -db /tmp/tmp1ZBlfT/subject\r\n\r\n\t2 hits found\r\nHIT 0\tQuery\tquery1:0-48(+)\r\n\tSubject\tsubject:19-67(+)\r\n\tLenght : 48\tIdentity : 100.0%\tEvalue : 2e-23\tBit score : 87.8\r\n\tAligned query seq : GCATGCTCGATCAGTAGCTCTCAGTACGCATACGCTAGCATCACGACT\r\n\r\nHIT 1\tQuery\tquery2:0-48(+)\r\n\tSubject\tsubject:89-137(+)\r\n\tLenght : 48\tIdentity : 100.0%\tEvalue : 2e-23\tBit score : 87.8\r\n\tAligned query seq : CGCATCGACTCGATCTGATCAGCTCACAGTCAGCATCAGCTACGATCA\r\n\r\nCleaning up blast DB files for \"subject\"\r\n```\r\n\r\n\r\n## Testing pyBlast module\r\n\r\nThe module can be easily tested thanks to pytest\r\n\r\n* Install pytest with pip `pip instal pytest`\r\n* Run test with py.test-2.7 -v\r\n\r\nExample of output if successful. Please note than some tests might fail due to the random sampling of DNA sequences, and uncertainties of Blastn algorithm.\r\n```\r\n========================================== test session starts ===========================================\r\nplatform linux2 -- Python 2.7.5 -- py-1.4.27 -- pytest-2.7.0 -- /usr/bin/python\r\nrootdir: /home/adrien/Programming/Python/pyBlast, inifile: \r\ncollected 21 items \r\n\r\ntest_pyBlast.py::test_BlastHit[4.16866907958-57-98-69-88-12-100-43-1.40452897105-47.3666242716] PASSED\r\ntest_pyBlast.py::test_BlastHit[-1-7-10-20-73-54-25-45-98.7921480151-45.2397166228] xfail\r\ntest_pyBlast.py::test_BlastHit[8.92741377413--1-100-36-34-33-14-71-18.8547135761-97.6604693294] xfail\r\ntest_pyBlast.py::test_BlastHit[10.5987790458-46--1-45-78-81-86-86-73.8740266727-56.887410005] xfail\r\ntest_pyBlast.py::test_BlastHit[66.8213911219-62-48--1-91-10-60-20-88.7850139735-81.7901609219] xfail\r\ntest_pyBlast.py::test_BlastHit[86.6626174287-29-83-34--1-53-57-68-17.9799756069-7.83036609495] xfail\r\ntest_pyBlast.py::test_BlastHit[5.23985331666-43-85-33-7--1-14-3-74.2130782704-88.9289495285] xfail\r\ntest_pyBlast.py::test_BlastHit[75.6935977321-8-78-68-10-39--1-74-44.1447867052-22.5203082483] xfail\r\ntest_pyBlast.py::test_BlastHit[39.8692596061-60-5-49-77-9-31--1-2.59963139531-46.3133849683] xfail\r\ntest_pyBlast.py::test_BlastHit[15.7192632366-24-92-1-64-82-83-90--1-75.5540618409] xfail\r\ntest_pyBlast.py::test_BlastHit[18.6627439886-34-57-60-5-45-26-40-77.7840842678--1] xfail\r\ntest_pyBlast.py::test_Blastn[blastn-Queries from Subject] PASSED\r\ntest_pyBlast.py::test_Blastn[blastn-Random queries] xfail\r\ntest_pyBlast.py::test_Blastn[blastn-short-Queries from Subject] PASSED\r\ntest_pyBlast.py::test_Blastn[blastn-short-Random queries] xfail\r\ntest_pyBlast.py::test_Blastn[dc-megablast-Queries from Subject] PASSED\r\ntest_pyBlast.py::test_Blastn[dc-megablast-Random queries] xfail\r\ntest_pyBlast.py::test_Blastn[megablast-Queries from Subject] PASSED\r\ntest_pyBlast.py::test_Blastn[megablast-Random queries] xfail\r\ntest_pyBlast.py::test_Blastn[rmblastn-Queries from Subject] PASSED\r\ntest_pyBlast.py::test_Blastn[rmblastn-Random queries] xfail\r\n\r\n================================== 6 passed, 15 xfailed in 5.91 seconds ==================================\r\n```\r\n\r\n## Dependencies\r\n\r\n* [ncbi Blast+ 2.2.28+](http://blast.ncbi.nlm.nih.gov/Blast.cgi?PAGE_TYPE=BlastDocs&DOC_TYPE=Download)\r\n* [python package pytest](http://pytest.org/latest/): `pip instal pytest`\r\n\r\n## Authors and Contact\r\n\r\nAdrien Leger - 2015\r\n\r\n* <adrien.leger@gmail.com> - <adrien.leger@inserm.fr> - <adrien.leger@univ-nantes.fr>\r\n* [Github](https://github.com/a-slide)\r\n* [Atlantic Gene Therapies - INSERM 1089](http://www.atlantic-gene-therapies.fr/)\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
\ No newline at end of file
/*
Copyright 2014 GitHub Inc.
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.
*/
.pl-c /* comment */ {
color: #969896;
}
.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
.pl-s .pl-v /* string variable */ {
color: #0086b3;
}
.pl-e /* entity */,
.pl-en /* entity.name */ {
color: #795da3;
}
.pl-s .pl-s1 /* string source */,
.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
color: #333;
}
.pl-ent /* entity.name.tag */ {
color: #63a35c;
}
.pl-k /* keyword, storage, storage.type */ {
color: #a71d5d;
}
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
.pl-s /* string */,
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
.pl-sr /* string.regexp */,
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
color: #183691;
}
.pl-v /* variable */ {
color: #ed6a43;
}
.pl-id /* invalid.deprecated */ {
color: #b52a1d;
}
.pl-ii /* invalid.illegal */ {
background-color: #b52a1d;
color: #f8f8f8;
}
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
color: #63a35c;
font-weight: bold;
}
.pl-ml /* markup.list */ {
color: #693a17;
}
.pl-mh /* markup.heading */,
.pl-mh .pl-en /* markup.heading entity.name */,
.pl-ms /* meta.separator */ {
color: #1d3e81;
font-weight: bold;
}
.pl-mq /* markup.quote */ {
color: #008080;
}
.pl-mi /* markup.italic */ {
color: #333;
font-style: italic;
}
.pl-mb /* markup.bold */ {
color: #333;
font-weight: bold;
}
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
background-color: #ffecec;
color: #bd2c00;
}
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
background-color: #eaffea;
color: #55a532;
}
.pl-mdr /* meta.diff.range */ {
color: #795da3;
font-weight: bold;
}
.pl-mo /* meta.output */ {
color: #1d3e81;
}
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.