Commit b14838e3 by Mustafa Tekpinar

Updated the documentation.

parent 8d766d4d
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 1d56d17901c6f429146d20c07a73dc21
config: 22c71542c2e9339759d7f2af8f251cf8
tags: 645f666f9bcd5a90fca523b33c5a78b7
......@@ -29,13 +29,13 @@ file in fasta format:
.. code:: bash
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta
If you don’t have wget, you can try the same command with curl:
.. code:: bash
curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta >aliBLAT.fasta
Please verify that the aliBLAT.fasta file is in the folder.
......@@ -43,7 +43,7 @@ Now, we will download the PDB (Protein Databank) file for BLAT:
.. code:: bash
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/blat-af2.pdb
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/blat-af2.pdb
Single point mutation calculations
----------------------------------
......@@ -81,7 +81,7 @@ In this step, we will use only evolutionary information from an MSA file:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta
After a few minutes of calculation, you must see at least two files named
BLAT_normPred_evolCombi.txt and BLAT_normPred_evolCombi.png. You have
......@@ -93,7 +93,7 @@ evolutionary information:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
--pdbfile blat-af2.pdb \
--normweightmode sstjetormax
......@@ -113,13 +113,13 @@ structural information. First, let's do it without structural information:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
-m Stiffler_2015_BLAT_ECOLX.mut
You can include structural information in the following way:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
--pdbfile blat-af2.pdb \
--normweightmode sstjetormax \
-m Stiffler_2015_BLAT_ECOLX.mut
......
......@@ -22,20 +22,115 @@ ESGEMME has the following external dependencies:
These tools should be installed to be able to use ESGEMME.
Getting the source code and preparing the environment:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Preparation of the environment and installation of ESGEMME
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Download the ESGEMME source code from
http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME. Define and export the
environment variable ESGEMME_PATH=/path-to-ESGEMME-directory/
Step by step installation on Ubuntu 22.04
Prepare your environment and install the required packages:
.. code:: bash
sudo apt-get update --fix-missing && \
sudo apt-get install -y --no-install-recommends apt-utils && \
sudo apt-get install -y software-properties-common && \
sudo apt-get install -y autotools-dev && \
sudo apt-get install -y automake && \
sudo apt-get install -y build-essential && \
sudo apt-get install -y python3-dev && \
sudo apt-get install -y python3-pip && \
sudo apt-get install -y r-base r-base-core && \
sudo apt-get install -y muscle && \
sudo apt-get install -y default-jre && \
sudo apt-get install -y ncbi-blast+ && \
sudo apt-get install -y nano && \
sudo apt-get install -y less && \
sudo apt-get install -y wget && \
sudo apt-get install csh && \
sudo apt-get install -y hmmer && \
sudo apt-get install -y libboost-all-dev && \
sudo apt-get clean && \
sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
#Dssp installation
If you are using Ubuntu 20.04, you can install dssp by the following command
.. code:: bash
sudo apt-get install dssp
Otherwise, you can install it from the source by the following commands.
Please note that default dssp in Ubuntu 22.04 is not working properly.
.. code:: bash
export ESGEMME_PATH=/path-to-ESGEMME-directory/
wget https://github.com/cmbi/dssp/archive/refs/heads/master.zip && \
unzip -o master.zip && cd dssp-master/ && \
./autogen.sh && \
./configure && \
make && \
sudo make install && \
sudo ln -s /usr/local/bin/mkdssp /usr/local/bin/dssp && \
cd ../ && \
sudo rm -rf dssp-master/ && \
sudo rm -f master.zip
#HHSUITE installation
.. code:: bash
wget https://github.com/soedinglab/hh-suite/releases/download/v3.3.0/hhsuite-3.3.0-AVX2-Linux.tar.gz && \
mkdir hhsuite && \
mv hhsuite-3.3.0-AVX2-Linux.tar.gz hhsuite/ && \
cd hhsuite && \
tar xvfz hhsuite-3.3.0-AVX2-Linux.tar.gz && \
rm -f hhsuite-3.3.0-AVX2-Linux.tar.gz
#Add it to your path permanently inside .bashrc or .profile or .bash_profile
Check the location of hhsuite folder and add it to your path
In my case it was in /home/tekpinar/research/lcqb folder. Therefore, I added the following line
to my .profile file.
PATH="/home/tekpinar/research/lcqb/hhsuite/bin:/home/tekpinar/research/lcqb/hhsuite/scripts:$PATH"
Then
source ~/.profile
#
cd ESGEMME
#Download ESGEMME from http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME repository and go inside the ESGEMME folder.!
.. code:: bash
cd ESGEMME
Configuring default.conf file
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Inside ESGEMME folder, there is an important file called default.conf.
Inside ESGEMME/esgemme folder, there is an important file called default.conf.
This file contains essential parameters of ESGEMME, such as paths of
external parts, default internal parameters. etc. You have to correct the Software section of this
file according to your system.
.. code:: bash
pip3 install -e . &&\
cd ../
#Installing the required R packages
.. code:: bash
sudo Rscript -e 'install.packages("seqinr", repos="http://cran.us.r-project.org", dependencies=TRUE)'
#Installing secondary programs such as ev_couplings to obtain MSA files.
.. code:: bash
wget https://github.com/debbiemarkslab/plmc/archive/refs/heads/master.zip && \
unzip -o master.zip && \
cd plmc-master && \
make all-openmp32 && \
sudo cp bin/plmc /usr/local/bin/ && \
cd ../ && \
rm -rf master.zip plmc-master
/* Compatability shim for jQuery and underscores.js.
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
* Copyright Sphinx contributors
* Released under the two clause BSD licence
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
......
......@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
......@@ -324,17 +324,17 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
......@@ -375,6 +375,7 @@ div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
......@@ -384,6 +385,7 @@ div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
......@@ -609,6 +611,25 @@ ul.simple p {
margin-bottom: 0;
}
/* Docutils 0.17 and older (footnotes & citations) */
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
/* Docutils 0.18+ (footnotes & citations) */
aside.footnote > span,
div.citation > span {
float: left;
......@@ -633,6 +654,8 @@ div.citation > p:last-of-type:after {
clear: both;
}
/* Footnotes & citations ends */
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
......@@ -645,6 +668,10 @@ dl.field-list > dt {
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4,19 +4,12 @@
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
......@@ -26,10 +19,72 @@ const _ready = (callback) => {
};
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.highlightSearchWords();
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
......@@ -72,6 +127,51 @@ const Documentation = {
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords: () => {
const highlight =
new URLSearchParams(window.location.search).get("highlight") || "";
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:Documentation.hideSearchWords()">' +
Documentation.gettext("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
const url = new URL(window.location);
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
......@@ -110,11 +210,15 @@ const Documentation = {
)
return;
const blacklistedElements = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
if (!event.shiftKey) {
switch (event.key) {
......@@ -136,6 +240,10 @@ const Documentation = {
event.preventDefault();
}
break;
case "Escape":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.hideSearchWords();
event.preventDefault();
}
}
......
......@@ -10,5 +10,5 @@ var DOCUMENTATION_OPTIONS = {
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
ENABLE_SEARCH_SHORTCUTS: false,
};
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -5,7 +5,7 @@
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
......
......@@ -4,7 +4,7 @@
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
......@@ -57,14 +57,14 @@ const _removeChildren = (element) => {
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const _displayItem = (item, highlightTerms, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
const [docName, title, anchor, descr] = item;
let listItem = document.createElement("li");
let requestUrl;
......@@ -82,12 +82,13 @@ const _displayItem = (item, searchTerms) => {
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
const params = new URLSearchParams();
params.set("highlight", [...highlightTerms].join(" "));
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.href = linkUrl + "?" + params.toString() + anchor;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
listItem.appendChild(document.createElement("span")).innerText =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
......@@ -95,7 +96,7 @@ const _displayItem = (item, searchTerms) => {
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
Search.makeSearchSummary(data, searchTerms, highlightTerms)
);
});
Search.output.appendChild(listItem);
......@@ -115,14 +116,15 @@ const _finishSearch = (resultCount) => {
const _displayNextItem = (
results,
resultCount,
highlightTerms,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
_displayItem(results.pop(), highlightTerms, searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
() => _displayNextItem(results, resultCount, highlightTerms, searchTerms),
5
);
}
......@@ -153,8 +155,10 @@ const Search = {
_pulse_status: -1,
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const htmlElement = document
.createRange()
.createContextualFragment(htmlString);
_removeChildren(htmlElement.querySelectorAll(".headerlink"));
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
......@@ -235,12 +239,6 @@ const Search = {
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
......@@ -268,10 +266,6 @@ const Search = {
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
......@@ -280,40 +274,6 @@ const Search = {
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
......@@ -360,7 +320,7 @@ const Search = {
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
_displayNextItem(results, results.length, highlightTerms, searchTerms);
},
/**
......@@ -441,8 +401,8 @@ const Search = {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const filenames = Search._index.filenames;
const titles = Search._index.titles;
const scoreMap = new Map();
......@@ -539,15 +499,16 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
* of stemmed words, highlightWords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
makeSearchSummary: (htmlText, keywords, highlightWords) => {
const text = Search.htmlToText(htmlText).toLowerCase();
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.map((k) => text.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
......@@ -555,9 +516,13 @@ const Search = {
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
let summary = document.createElement("div");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
summary.innerText = top + text.substr(startWithContext, 240).trim() + tail;
highlightWords.forEach((highlightWord) =>
_highlightText(summary, highlightWord, "highlighted")
);
return summary;
},
......
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define('underscore', factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
var current = global._;
var exports = global._ = factory();
exports.noConflict = function () { global._ = current; return exports; };
}()));
}(this, (function () {
// Underscore.js 1.13.1
// https://underscorejs.org
// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
// Current version.
var VERSION = '1.13.1';
// Establish the root object, `window` (`self`) in the browser, `global`
// on the server, or `this` in some virtual machines. We use `self`
// instead of `window` for `WebWorker` support.
var root = typeof self == 'object' && self.self === self && self ||
typeof global == 'object' && global.global === global && global ||
Function('return this')() ||
{};
// Save bytes in the minified (but not gzipped) version:
var ArrayProto = Array.prototype, ObjProto = Object.prototype;
var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
// Create quick reference variables for speed access to core prototypes.
var push = ArrayProto.push,
slice = ArrayProto.slice,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
// Modern feature detection.
var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
supportsDataView = typeof DataView !== 'undefined';
// All **ECMAScript 5+** native function implementations that we hope to use
// are declared here.
var nativeIsArray = Array.isArray,
nativeKeys = Object.keys,
nativeCreate = Object.create,
nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
// Create references to these builtin functions because we override them.
var _isNaN = isNaN,
_isFinite = isFinite;
// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
// The largest integer that can be represented exactly.
var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
// Some functions take a variable number of arguments, or a few expected
// arguments at the beginning and then a variable number of values to operate
// on. This helper accumulates all remaining arguments past the function’s
// argument length (or an explicit `startIndex`), into an array that becomes
// the last argument. Similar to ES6’s "rest parameter".
function restArguments(func, startIndex) {
startIndex = startIndex == null ? func.length - 1 : +startIndex;
return function() {
var length = Math.max(arguments.length - startIndex, 0),
rest = Array(length),
index = 0;
for (; index < length; index++) {
rest[index] = arguments[index + startIndex];
}
switch (startIndex) {
case 0: return func.call(this, rest);
case 1: return func.call(this, arguments[0], rest);
case 2: return func.call(this, arguments[0], arguments[1], rest);
}
var args = Array(startIndex + 1);
for (index = 0; index < startIndex; index++) {
args[index] = arguments[index];
}
args[startIndex] = rest;
return func.apply(this, args);
};
}
// Is a given variable an object?
function isObject(obj) {
var type = typeof obj;
return type === 'function' || type === 'object' && !!obj;
}
// Is a given value equal to null?
function isNull(obj) {
return obj === null;
}
// Is a given variable undefined?
function isUndefined(obj) {
return obj === void 0;
}
// Is a given value a boolean?
function isBoolean(obj) {
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
}
// Is a given value a DOM element?
function isElement(obj) {
return !!(obj && obj.nodeType === 1);
}
// Internal function for creating a `toString`-based type tester.
function tagTester(name) {
var tag = '[object ' + name + ']';
return function(obj) {
return toString.call(obj) === tag;
};
}
var isString = tagTester('String');
var isNumber = tagTester('Number');
var isDate = tagTester('Date');
var isRegExp = tagTester('RegExp');
var isError = tagTester('Error');
var isSymbol = tagTester('Symbol');
var isArrayBuffer = tagTester('ArrayBuffer');
var isFunction = tagTester('Function');
// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
var nodelist = root.document && root.document.childNodes;
if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
isFunction = function(obj) {
return typeof obj == 'function' || false;
};
}
var isFunction$1 = isFunction;
var hasObjectTag = tagTester('Object');
// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
// In IE 11, the most common among them, this problem also applies to
// `Map`, `WeakMap` and `Set`.
var hasStringTagBug = (
supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
),
isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
var isDataView = tagTester('DataView');
// In IE 10 - Edge 13, we need a different heuristic
// to determine whether an object is a `DataView`.
function ie10IsDataView(obj) {
return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
}
var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
// Is a given value an array?
// Delegates to ECMA5's native `Array.isArray`.
var isArray = nativeIsArray || tagTester('Array');
// Internal function to check whether `key` is an own property name of `obj`.
function has$1(obj, key) {
return obj != null && hasOwnProperty.call(obj, key);
}
var isArguments = tagTester('Arguments');
// Define a fallback version of the method in browsers (ahem, IE < 9), where
// there isn't any inspectable "Arguments" type.
(function() {
if (!isArguments(arguments)) {
isArguments = function(obj) {
return has$1(obj, 'callee');
};
}
}());
var isArguments$1 = isArguments;
// Is a given object a finite number?
function isFinite$1(obj) {
return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
}
// Is the given value `NaN`?
function isNaN$1(obj) {
return isNumber(obj) && _isNaN(obj);
}
// Predicate-generating function. Often useful outside of Underscore.
function constant(value) {
return function() {
return value;
};
}
// Common internal logic for `isArrayLike` and `isBufferLike`.
function createSizePropertyCheck(getSizeProperty) {
return function(collection) {
var sizeProperty = getSizeProperty(collection);
return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
}
}
// Internal helper to generate a function to obtain property `key` from `obj`.
function shallowProperty(key) {
return function(obj) {
return obj == null ? void 0 : obj[key];
};
}
// Internal helper to obtain the `byteLength` property of an object.
var getByteLength = shallowProperty('byteLength');
// Internal helper to determine whether we should spend extensive checks against
// `ArrayBuffer` et al.
var isBufferLike = createSizePropertyCheck(getByteLength);
// Is a given value a typed array?
var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
function isTypedArray(obj) {
// `ArrayBuffer.isView` is the most future-proof, so use it when available.
// Otherwise, fall back on the above regular expression.
return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
}
var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
// Internal helper to obtain the `length` property of an object.
var getLength = shallowProperty('length');
// Internal helper to create a simple lookup structure.
// `collectNonEnumProps` used to depend on `_.contains`, but this led to
// circular imports. `emulatedSet` is a one-off solution that only works for
// arrays of strings.
function emulatedSet(keys) {
var hash = {};
for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
return {
contains: function(key) { return hash[key]; },
push: function(key) {
hash[key] = true;
return keys.push(key);
}
};
}
// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
// be iterated by `for key in ...` and thus missed. Extends `keys` in place if
// needed.
function collectNonEnumProps(obj, keys) {
keys = emulatedSet(keys);
var nonEnumIdx = nonEnumerableProps.length;
var constructor = obj.constructor;
var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
// Constructor is a special case.
var prop = 'constructor';
if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
while (nonEnumIdx--) {
prop = nonEnumerableProps[nonEnumIdx];
if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
keys.push(prop);
}
}
}
// Retrieve the names of an object's own properties.
// Delegates to **ECMAScript 5**'s native `Object.keys`.
function keys(obj) {
if (!isObject(obj)) return [];
if (nativeKeys) return nativeKeys(obj);
var keys = [];
for (var key in obj) if (has$1(obj, key)) keys.push(key);
// Ahem, IE < 9.
if (hasEnumBug) collectNonEnumProps(obj, keys);
return keys;
}
// Is a given array, string, or object empty?
// An "empty" object has no enumerable own-properties.
function isEmpty(obj) {
if (obj == null) return true;
// Skip the more expensive `toString`-based type checks if `obj` has no
// `.length`.
var length = getLength(obj);
if (typeof length == 'number' && (
isArray(obj) || isString(obj) || isArguments$1(obj)
)) return length === 0;
return getLength(keys(obj)) === 0;
}
// Returns whether an object has a given set of `key:value` pairs.
function isMatch(object, attrs) {
var _keys = keys(attrs), length = _keys.length;
if (object == null) return !length;
var obj = Object(object);
for (var i = 0; i < length; i++) {
var key = _keys[i];
if (attrs[key] !== obj[key] || !(key in obj)) return false;
}
return true;
}
// If Underscore is called as a function, it returns a wrapped object that can
// be used OO-style. This wrapper holds altered versions of all functions added
// through `_.mixin`. Wrapped objects may be chained.
function _$1(obj) {
if (obj instanceof _$1) return obj;
if (!(this instanceof _$1)) return new _$1(obj);
this._wrapped = obj;
}
_$1.VERSION = VERSION;
// Extracts the result from a wrapped and chained object.
_$1.prototype.value = function() {
return this._wrapped;
};
// Provide unwrapping proxies for some methods used in engine operations
// such as arithmetic and JSON stringification.
_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
_$1.prototype.toString = function() {
return String(this._wrapped);
};
// Internal function to wrap or shallow-copy an ArrayBuffer,
// typed array or DataView to a new view, reusing the buffer.
function toBufferView(bufferSource) {
return new Uint8Array(
bufferSource.buffer || bufferSource,
bufferSource.byteOffset || 0,
getByteLength(bufferSource)
);
}
// We use this string twice, so give it a name for minification.
var tagDataView = '[object DataView]';
// Internal recursive comparison function for `_.isEqual`.
function eq(a, b, aStack, bStack) {
// Identical objects are equal. `0 === -0`, but they aren't identical.
// See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
if (a === b) return a !== 0 || 1 / a === 1 / b;
// `null` or `undefined` only equal to itself (strict comparison).
if (a == null || b == null) return false;
// `NaN`s are equivalent, but non-reflexive.
if (a !== a) return b !== b;
// Exhaust primitive checks
var type = typeof a;
if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
return deepEq(a, b, aStack, bStack);
}
// Internal recursive comparison function for `_.isEqual`.
function deepEq(a, b, aStack, bStack) {
// Unwrap any wrapped objects.
if (a instanceof _$1) a = a._wrapped;
if (b instanceof _$1) b = b._wrapped;
// Compare `[[Class]]` names.
var className = toString.call(a);
if (className !== toString.call(b)) return false;
// Work around a bug in IE 10 - Edge 13.
if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
if (!isDataView$1(b)) return false;
className = tagDataView;
}
switch (className) {
// These types are compared by value.
case '[object RegExp]':
// RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
case '[object String]':
// Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
// equivalent to `new String("5")`.
return '' + a === '' + b;
case '[object Number]':
// `NaN`s are equivalent, but non-reflexive.
// Object(NaN) is equivalent to NaN.
if (+a !== +a) return +b !== +b;
// An `egal` comparison is performed for other numeric values.
return +a === 0 ? 1 / +a === 1 / b : +a === +b;
case '[object Date]':
case '[object Boolean]':
// Coerce dates and booleans to numeric primitive values. Dates are compared by their
// millisecond representations. Note that invalid dates with millisecond representations
// of `NaN` are not equivalent.
return +a === +b;
case '[object Symbol]':
return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
case '[object ArrayBuffer]':
case tagDataView:
// Coerce to typed array so we can fall through.
return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
}
var areArrays = className === '[object Array]';
if (!areArrays && isTypedArray$1(a)) {
var byteLength = getByteLength(a);
if (byteLength !== getByteLength(b)) return false;
if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
areArrays = true;
}
if (!areArrays) {
if (typeof a != 'object' || typeof b != 'object') return false;
// Objects with different constructors are not equivalent, but `Object`s or `Array`s
// from different frames are.
var aCtor = a.constructor, bCtor = b.constructor;
if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
isFunction$1(bCtor) && bCtor instanceof bCtor)
&& ('constructor' in a && 'constructor' in b)) {
return false;
}
}
// Assume equality for cyclic structures. The algorithm for detecting cyclic
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
// Initializing stack of traversed objects.
// It's done here since we only need them for objects and arrays comparison.
aStack = aStack || [];
bStack = bStack || [];
var length = aStack.length;
while (length--) {
// Linear search. Performance is inversely proportional to the number of
// unique nested structures.
if (aStack[length] === a) return bStack[length] === b;
}
// Add the first object to the stack of traversed objects.
aStack.push(a);
bStack.push(b);
// Recursively compare objects and arrays.
if (areArrays) {
// Compare array lengths to determine if a deep comparison is necessary.
length = a.length;
if (length !== b.length) return false;
// Deep compare the contents, ignoring non-numeric properties.
while (length--) {
if (!eq(a[length], b[length], aStack, bStack)) return false;
}
} else {
// Deep compare objects.
var _keys = keys(a), key;
length = _keys.length;
// Ensure that both objects contain the same number of properties before comparing deep equality.
if (keys(b).length !== length) return false;
while (length--) {
// Deep compare each member
key = _keys[length];
if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
}
}
// Remove the first object from the stack of traversed objects.
aStack.pop();
bStack.pop();
return true;
}
// Perform a deep comparison to check if two objects are equal.
function isEqual(a, b) {
return eq(a, b);
}
// Retrieve all the enumerable property names of an object.
function allKeys(obj) {
if (!isObject(obj)) return [];
var keys = [];
for (var key in obj) keys.push(key);
// Ahem, IE < 9.
if (hasEnumBug) collectNonEnumProps(obj, keys);
return keys;
}
// Since the regular `Object.prototype.toString` type tests don't work for
// some types in IE 11, we use a fingerprinting heuristic instead, based
// on the methods. It's not great, but it's the best we got.
// The fingerprint method lists are defined below.
function ie11fingerprint(methods) {
var length = getLength(methods);
return function(obj) {
if (obj == null) return false;
// `Map`, `WeakMap` and `Set` have no enumerable keys.
var keys = allKeys(obj);
if (getLength(keys)) return false;
for (var i = 0; i < length; i++) {
if (!isFunction$1(obj[methods[i]])) return false;
}
// If we are testing against `WeakMap`, we need to ensure that
// `obj` doesn't have a `forEach` method in order to distinguish
// it from a regular `Map`.
return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
};
}
// In the interest of compact minification, we write
// each string in the fingerprints only once.
var forEachName = 'forEach',
hasName = 'has',
commonInit = ['clear', 'delete'],
mapTail = ['get', hasName, 'set'];
// `Map`, `WeakMap` and `Set` each have slightly different
// combinations of the above sublists.
var mapMethods = commonInit.concat(forEachName, mapTail),
weakMapMethods = commonInit.concat(mapTail),
setMethods = ['add'].concat(commonInit, forEachName, hasName);
var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
var isWeakSet = tagTester('WeakSet');
// Retrieve the values of an object's properties.
function values(obj) {
var _keys = keys(obj);
var length = _keys.length;
var values = Array(length);
for (var i = 0; i < length; i++) {
values[i] = obj[_keys[i]];
}
return values;
}
// Convert an object into a list of `[key, value]` pairs.
// The opposite of `_.object` with one argument.
function pairs(obj) {
var _keys = keys(obj);
var length = _keys.length;
var pairs = Array(length);
for (var i = 0; i < length; i++) {
pairs[i] = [_keys[i], obj[_keys[i]]];
}
return pairs;
}
// Invert the keys and values of an object. The values must be serializable.
function invert(obj) {
var result = {};
var _keys = keys(obj);
for (var i = 0, length = _keys.length; i < length; i++) {
result[obj[_keys[i]]] = _keys[i];
}
return result;
}
// Return a sorted list of the function names available on the object.
function functions(obj) {
var names = [];
for (var key in obj) {
if (isFunction$1(obj[key])) names.push(key);
}
return names.sort();
}
// An internal function for creating assigner functions.
function createAssigner(keysFunc, defaults) {
return function(obj) {
var length = arguments.length;
if (defaults) obj = Object(obj);
if (length < 2 || obj == null) return obj;
for (var index = 1; index < length; index++) {
var source = arguments[index],
keys = keysFunc(source),
l = keys.length;
for (var i = 0; i < l; i++) {
var key = keys[i];
if (!defaults || obj[key] === void 0) obj[key] = source[key];
}
}
return obj;
};
}
// Extend a given object with all the properties in passed-in object(s).
var extend = createAssigner(allKeys);
// Assigns a given object with all the own properties in the passed-in
// object(s).
// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
var extendOwn = createAssigner(keys);
// Fill in a given object with default properties.
var defaults = createAssigner(allKeys, true);
// Create a naked function reference for surrogate-prototype-swapping.
function ctor() {
return function(){};
}
// An internal function for creating a new object that inherits from another.
function baseCreate(prototype) {
if (!isObject(prototype)) return {};
if (nativeCreate) return nativeCreate(prototype);
var Ctor = ctor();
Ctor.prototype = prototype;
var result = new Ctor;
Ctor.prototype = null;
return result;
}
// Creates an object that inherits from the given prototype object.
// If additional properties are provided then they will be added to the
// created object.
function create(prototype, props) {
var result = baseCreate(prototype);
if (props) extendOwn(result, props);
return result;
}
// Create a (shallow-cloned) duplicate of an object.
function clone(obj) {
if (!isObject(obj)) return obj;
return isArray(obj) ? obj.slice() : extend({}, obj);
}
// Invokes `interceptor` with the `obj` and then returns `obj`.
// The primary purpose of this method is to "tap into" a method chain, in
// order to perform operations on intermediate results within the chain.
function tap(obj, interceptor) {
interceptor(obj);
return obj;
}
// Normalize a (deep) property `path` to array.
// Like `_.iteratee`, this function can be customized.
function toPath$1(path) {
return isArray(path) ? path : [path];
}
_$1.toPath = toPath$1;
// Internal wrapper for `_.toPath` to enable minification.
// Similar to `cb` for `_.iteratee`.
function toPath(path) {
return _$1.toPath(path);
}
// Internal function to obtain a nested property in `obj` along `path`.
function deepGet(obj, path) {
var length = path.length;
for (var i = 0; i < length; i++) {
if (obj == null) return void 0;
obj = obj[path[i]];
}
return length ? obj : void 0;
}
// Get the value of the (deep) property on `path` from `object`.
// If any property in `path` does not exist or if the value is
// `undefined`, return `defaultValue` instead.
// The `path` is normalized through `_.toPath`.
function get(object, path, defaultValue) {
var value = deepGet(object, toPath(path));
return isUndefined(value) ? defaultValue : value;
}
// Shortcut function for checking if an object has a given property directly on
// itself (in other words, not on a prototype). Unlike the internal `has`
// function, this public version can also traverse nested properties.
function has(obj, path) {
path = toPath(path);
var length = path.length;
for (var i = 0; i < length; i++) {
var key = path[i];
if (!has$1(obj, key)) return false;
obj = obj[key];
}
return !!length;
}
// Keep the identity function around for default iteratees.
function identity(value) {
return value;
}
// Returns a predicate for checking whether an object has a given set of
// `key:value` pairs.
function matcher(attrs) {
attrs = extendOwn({}, attrs);
return function(obj) {
return isMatch(obj, attrs);
};
}
// Creates a function that, when passed an object, will traverse that object’s
// properties down the given `path`, specified as an array of keys or indices.
function property(path) {
path = toPath(path);
return function(obj) {
return deepGet(obj, path);
};
}
// Internal function that returns an efficient (for current engines) version
// of the passed-in callback, to be repeatedly applied in other Underscore
// functions.
function optimizeCb(func, context, argCount) {
if (context === void 0) return func;
switch (argCount == null ? 3 : argCount) {
case 1: return function(value) {
return func.call(context, value);
};
// The 2-argument case is omitted because we’re not using it.
case 3: return function(value, index, collection) {
return func.call(context, value, index, collection);
};
case 4: return function(accumulator, value, index, collection) {
return func.call(context, accumulator, value, index, collection);
};
}
return function() {
return func.apply(context, arguments);
};
}
// An internal function to generate callbacks that can be applied to each
// element in a collection, returning the desired result — either `_.identity`,
// an arbitrary callback, a property matcher, or a property accessor.
function baseIteratee(value, context, argCount) {
if (value == null) return identity;
if (isFunction$1(value)) return optimizeCb(value, context, argCount);
if (isObject(value) && !isArray(value)) return matcher(value);
return property(value);
}
// External wrapper for our callback generator. Users may customize
// `_.iteratee` if they want additional predicate/iteratee shorthand styles.
// This abstraction hides the internal-only `argCount` argument.
function iteratee(value, context) {
return baseIteratee(value, context, Infinity);
}
_$1.iteratee = iteratee;
// The function we call internally to generate a callback. It invokes
// `_.iteratee` if overridden, otherwise `baseIteratee`.
function cb(value, context, argCount) {
if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
return baseIteratee(value, context, argCount);
}
// Returns the results of applying the `iteratee` to each element of `obj`.
// In contrast to `_.map` it returns an object.
function mapObject(obj, iteratee, context) {
iteratee = cb(iteratee, context);
var _keys = keys(obj),
length = _keys.length,
results = {};
for (var index = 0; index < length; index++) {
var currentKey = _keys[index];
results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
}
return results;
}
// Predicate-generating function. Often useful outside of Underscore.
function noop(){}
// Generates a function for a given object that returns a given property.
function propertyOf(obj) {
if (obj == null) return noop;
return function(path) {
return get(obj, path);
};
}
// Run a function **n** times.
function times(n, iteratee, context) {
var accum = Array(Math.max(0, n));
iteratee = optimizeCb(iteratee, context, 1);
for (var i = 0; i < n; i++) accum[i] = iteratee(i);
return accum;
}
// Return a random integer between `min` and `max` (inclusive).
function random(min, max) {
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
}
// A (possibly faster) way to get the current timestamp as an integer.
var now = Date.now || function() {
return new Date().getTime();
};
// Internal helper to generate functions for escaping and unescaping strings
// to/from HTML interpolation.
function createEscaper(map) {
var escaper = function(match) {
return map[match];
};
// Regexes for identifying a key that needs to be escaped.
var source = '(?:' + keys(map).join('|') + ')';
var testRegexp = RegExp(source);
var replaceRegexp = RegExp(source, 'g');
return function(string) {
string = string == null ? '' : '' + string;
return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
};
}
// Internal list of HTML entities for escaping.
var escapeMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#x27;',
'`': '&#x60;'
};
// Function for escaping strings to HTML interpolation.
var _escape = createEscaper(escapeMap);
// Internal list of HTML entities for unescaping.
var unescapeMap = invert(escapeMap);
// Function for unescaping strings from HTML interpolation.
var _unescape = createEscaper(unescapeMap);
// By default, Underscore uses ERB-style template delimiters. Change the
// following template settings to use alternative delimiters.
var templateSettings = _$1.templateSettings = {
evaluate: /<%([\s\S]+?)%>/g,
interpolate: /<%=([\s\S]+?)%>/g,
escape: /<%-([\s\S]+?)%>/g
};
// When customizing `_.templateSettings`, if you don't want to define an
// interpolation, evaluation or escaping regex, we need one that is
// guaranteed not to match.
var noMatch = /(.)^/;
// Certain characters need to be escaped so that they can be put into a
// string literal.
var escapes = {
"'": "'",
'\\': '\\',
'\r': 'r',
'\n': 'n',
'\u2028': 'u2028',
'\u2029': 'u2029'
};
var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
function escapeChar(match) {
return '\\' + escapes[match];
}
// In order to prevent third-party code injection through
// `_.templateSettings.variable`, we test it against the following regular
// expression. It is intentionally a bit more liberal than just matching valid
// identifiers, but still prevents possible loopholes through defaults or
// destructuring assignment.
var bareIdentifier = /^\s*(\w|\$)+\s*$/;
// JavaScript micro-templating, similar to John Resig's implementation.
// Underscore templating handles arbitrary delimiters, preserves whitespace,
// and correctly escapes quotes within interpolated code.
// NB: `oldSettings` only exists for backwards compatibility.
function template(text, settings, oldSettings) {
if (!settings && oldSettings) settings = oldSettings;
settings = defaults({}, settings, _$1.templateSettings);
// Combine delimiters into one regular expression via alternation.
var matcher = RegExp([
(settings.escape || noMatch).source,
(settings.interpolate || noMatch).source,
(settings.evaluate || noMatch).source
].join('|') + '|$', 'g');
// Compile the template source, escaping string literals appropriately.
var index = 0;
var source = "__p+='";
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
index = offset + match.length;
if (escape) {
source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
} else if (interpolate) {
source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
} else if (evaluate) {
source += "';\n" + evaluate + "\n__p+='";
}
// Adobe VMs need the match returned to produce the correct offset.
return match;
});
source += "';\n";
var argument = settings.variable;
if (argument) {
// Insure against third-party code injection. (CVE-2021-23358)
if (!bareIdentifier.test(argument)) throw new Error(
'variable is not a bare identifier: ' + argument
);
} else {
// If a variable is not specified, place data values in local scope.
source = 'with(obj||{}){\n' + source + '}\n';
argument = 'obj';
}
source = "var __t,__p='',__j=Array.prototype.join," +
"print=function(){__p+=__j.call(arguments,'');};\n" +
source + 'return __p;\n';
var render;
try {
render = new Function(argument, '_', source);
} catch (e) {
e.source = source;
throw e;
}
var template = function(data) {
return render.call(this, data, _$1);
};
// Provide the compiled source as a convenience for precompilation.
template.source = 'function(' + argument + '){\n' + source + '}';
return template;
}
// Traverses the children of `obj` along `path`. If a child is a function, it
// is invoked with its parent as context. Returns the value of the final
// child, or `fallback` if any child is undefined.
function result(obj, path, fallback) {
path = toPath(path);
var length = path.length;
if (!length) {
return isFunction$1(fallback) ? fallback.call(obj) : fallback;
}
for (var i = 0; i < length; i++) {
var prop = obj == null ? void 0 : obj[path[i]];
if (prop === void 0) {
prop = fallback;
i = length; // Ensure we don't continue iterating.
}
obj = isFunction$1(prop) ? prop.call(obj) : prop;
}
return obj;
}
// Generate a unique integer id (unique within the entire client session).
// Useful for temporary DOM ids.
var idCounter = 0;
function uniqueId(prefix) {
var id = ++idCounter + '';
return prefix ? prefix + id : id;
}
// Start chaining a wrapped Underscore object.
function chain(obj) {
var instance = _$1(obj);
instance._chain = true;
return instance;
}
// Internal function to execute `sourceFunc` bound to `context` with optional
// `args`. Determines whether to execute a function as a constructor or as a
// normal function.
function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
var self = baseCreate(sourceFunc.prototype);
var result = sourceFunc.apply(self, args);
if (isObject(result)) return result;
return self;
}
// Partially apply a function by creating a version that has had some of its
// arguments pre-filled, without changing its dynamic `this` context. `_` acts
// as a placeholder by default, allowing any combination of arguments to be
// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
var partial = restArguments(function(func, boundArgs) {
var placeholder = partial.placeholder;
var bound = function() {
var position = 0, length = boundArgs.length;
var args = Array(length);
for (var i = 0; i < length; i++) {
args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
}
while (position < arguments.length) args.push(arguments[position++]);
return executeBound(func, bound, this, this, args);
};
return bound;
});
partial.placeholder = _$1;
// Create a function bound to a given object (assigning `this`, and arguments,
// optionally).
var bind = restArguments(function(func, context, args) {
if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
var bound = restArguments(function(callArgs) {
return executeBound(func, bound, context, this, args.concat(callArgs));
});
return bound;
});
// Internal helper for collection methods to determine whether a collection
// should be iterated as an array or as an object.
// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
var isArrayLike = createSizePropertyCheck(getLength);
// Internal implementation of a recursive `flatten` function.
function flatten$1(input, depth, strict, output) {
output = output || [];
if (!depth && depth !== 0) {
depth = Infinity;
} else if (depth <= 0) {
return output.concat(input);
}
var idx = output.length;
for (var i = 0, length = getLength(input); i < length; i++) {
var value = input[i];
if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
// Flatten current level of array or arguments object.
if (depth > 1) {
flatten$1(value, depth - 1, strict, output);
idx = output.length;
} else {
var j = 0, len = value.length;
while (j < len) output[idx++] = value[j++];
}
} else if (!strict) {
output[idx++] = value;
}
}
return output;
}
// Bind a number of an object's methods to that object. Remaining arguments
// are the method names to be bound. Useful for ensuring that all callbacks
// defined on an object belong to it.
var bindAll = restArguments(function(obj, keys) {
keys = flatten$1(keys, false, false);
var index = keys.length;
if (index < 1) throw new Error('bindAll must be passed function names');
while (index--) {
var key = keys[index];
obj[key] = bind(obj[key], obj);
}
return obj;
});
// Memoize an expensive function by storing its results.
function memoize(func, hasher) {
var memoize = function(key) {
var cache = memoize.cache;
var address = '' + (hasher ? hasher.apply(this, arguments) : key);
if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
return cache[address];
};
memoize.cache = {};
return memoize;
}
// Delays a function for the given number of milliseconds, and then calls
// it with the arguments supplied.
var delay = restArguments(function(func, wait, args) {
return setTimeout(function() {
return func.apply(null, args);
}, wait);
});
// Defers a function, scheduling it to run after the current call stack has
// cleared.
var defer = partial(delay, _$1, 1);
// Returns a function, that, when invoked, will only be triggered at most once
// during a given window of time. Normally, the throttled function will run
// as much as it can, without ever going more than once per `wait` duration;
// but if you'd like to disable the execution on the leading edge, pass
// `{leading: false}`. To disable execution on the trailing edge, ditto.
function throttle(func, wait, options) {
var timeout, context, args, result;
var previous = 0;
if (!options) options = {};
var later = function() {
previous = options.leading === false ? 0 : now();
timeout = null;
result = func.apply(context, args);
if (!timeout) context = args = null;
};
var throttled = function() {
var _now = now();
if (!previous && options.leading === false) previous = _now;
var remaining = wait - (_now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = _now;
result = func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
throttled.cancel = function() {
clearTimeout(timeout);
previous = 0;
timeout = context = args = null;
};
return throttled;
}
// When a sequence of calls of the returned function ends, the argument
// function is triggered. The end of a sequence is defined by the `wait`
// parameter. If `immediate` is passed, the argument function will be
// triggered at the beginning of the sequence instead of at the end.
function debounce(func, wait, immediate) {
var timeout, previous, args, result, context;
var later = function() {
var passed = now() - previous;
if (wait > passed) {
timeout = setTimeout(later, wait - passed);
} else {
timeout = null;
if (!immediate) result = func.apply(context, args);
// This check is needed because `func` can recursively invoke `debounced`.
if (!timeout) args = context = null;
}
};
var debounced = restArguments(function(_args) {
context = this;
args = _args;
previous = now();
if (!timeout) {
timeout = setTimeout(later, wait);
if (immediate) result = func.apply(context, args);
}
return result;
});
debounced.cancel = function() {
clearTimeout(timeout);
timeout = args = context = null;
};
return debounced;
}
// Returns the first function passed as an argument to the second,
// allowing you to adjust arguments, run code before and after, and
// conditionally execute the original function.
function wrap(func, wrapper) {
return partial(wrapper, func);
}
// Returns a negated version of the passed-in predicate.
function negate(predicate) {
return function() {
return !predicate.apply(this, arguments);
};
}
// Returns a function that is the composition of a list of functions, each
// consuming the return value of the function that follows.
function compose() {
var args = arguments;
var start = args.length - 1;
return function() {
var i = start;
var result = args[start].apply(this, arguments);
while (i--) result = args[i].call(this, result);
return result;
};
}
// Returns a function that will only be executed on and after the Nth call.
function after(times, func) {
return function() {
if (--times < 1) {
return func.apply(this, arguments);
}
};
}
// Returns a function that will only be executed up to (but not including) the
// Nth call.
function before(times, func) {
var memo;
return function() {
if (--times > 0) {
memo = func.apply(this, arguments);
}
if (times <= 1) func = null;
return memo;
};
}
// Returns a function that will be executed at most one time, no matter how
// often you call it. Useful for lazy initialization.
var once = partial(before, 2);
// Returns the first key on an object that passes a truth test.
function findKey(obj, predicate, context) {
predicate = cb(predicate, context);
var _keys = keys(obj), key;
for (var i = 0, length = _keys.length; i < length; i++) {
key = _keys[i];
if (predicate(obj[key], key, obj)) return key;
}
}
// Internal function to generate `_.findIndex` and `_.findLastIndex`.
function createPredicateIndexFinder(dir) {
return function(array, predicate, context) {
predicate = cb(predicate, context);
var length = getLength(array);
var index = dir > 0 ? 0 : length - 1;
for (; index >= 0 && index < length; index += dir) {
if (predicate(array[index], index, array)) return index;
}
return -1;
};
}
// Returns the first index on an array-like that passes a truth test.
var findIndex = createPredicateIndexFinder(1);
// Returns the last index on an array-like that passes a truth test.
var findLastIndex = createPredicateIndexFinder(-1);
// Use a comparator function to figure out the smallest index at which
// an object should be inserted so as to maintain order. Uses binary search.
function sortedIndex(array, obj, iteratee, context) {
iteratee = cb(iteratee, context, 1);
var value = iteratee(obj);
var low = 0, high = getLength(array);
while (low < high) {
var mid = Math.floor((low + high) / 2);
if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
}
return low;
}
// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
function createIndexFinder(dir, predicateFind, sortedIndex) {
return function(array, item, idx) {
var i = 0, length = getLength(array);
if (typeof idx == 'number') {
if (dir > 0) {
i = idx >= 0 ? idx : Math.max(idx + length, i);
} else {
length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
}
} else if (sortedIndex && idx && length) {
idx = sortedIndex(array, item);
return array[idx] === item ? idx : -1;
}
if (item !== item) {
idx = predicateFind(slice.call(array, i, length), isNaN$1);
return idx >= 0 ? idx + i : -1;
}
for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
if (array[idx] === item) return idx;
}
return -1;
};
}
// Return the position of the first occurrence of an item in an array,
// or -1 if the item is not included in the array.
// If the array is large and already in sort order, pass `true`
// for **isSorted** to use binary search.
var indexOf = createIndexFinder(1, findIndex, sortedIndex);
// Return the position of the last occurrence of an item in an array,
// or -1 if the item is not included in the array.
var lastIndexOf = createIndexFinder(-1, findLastIndex);
// Return the first value which passes a truth test.
function find(obj, predicate, context) {
var keyFinder = isArrayLike(obj) ? findIndex : findKey;
var key = keyFinder(obj, predicate, context);
if (key !== void 0 && key !== -1) return obj[key];
}
// Convenience version of a common use case of `_.find`: getting the first
// object containing specific `key:value` pairs.
function findWhere(obj, attrs) {
return find(obj, matcher(attrs));
}
// The cornerstone for collection functions, an `each`
// implementation, aka `forEach`.
// Handles raw objects in addition to array-likes. Treats all
// sparse array-likes as if they were dense.
function each(obj, iteratee, context) {
iteratee = optimizeCb(iteratee, context);
var i, length;
if (isArrayLike(obj)) {
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
var _keys = keys(obj);
for (i = 0, length = _keys.length; i < length; i++) {
iteratee(obj[_keys[i]], _keys[i], obj);
}
}
return obj;
}
// Return the results of applying the iteratee to each element.
function map(obj, iteratee, context) {
iteratee = cb(iteratee, context);
var _keys = !isArrayLike(obj) && keys(obj),
length = (_keys || obj).length,
results = Array(length);
for (var index = 0; index < length; index++) {
var currentKey = _keys ? _keys[index] : index;
results[index] = iteratee(obj[currentKey], currentKey, obj);
}
return results;
}
// Internal helper to create a reducing function, iterating left or right.
function createReduce(dir) {
// Wrap code that reassigns argument variables in a separate function than
// the one that accesses `arguments.length` to avoid a perf hit. (#1991)
var reducer = function(obj, iteratee, memo, initial) {
var _keys = !isArrayLike(obj) && keys(obj),
length = (_keys || obj).length,
index = dir > 0 ? 0 : length - 1;
if (!initial) {
memo = obj[_keys ? _keys[index] : index];
index += dir;
}
for (; index >= 0 && index < length; index += dir) {
var currentKey = _keys ? _keys[index] : index;
memo = iteratee(memo, obj[currentKey], currentKey, obj);
}
return memo;
};
return function(obj, iteratee, memo, context) {
var initial = arguments.length >= 3;
return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
};
}
// **Reduce** builds up a single result from a list of values, aka `inject`,
// or `foldl`.
var reduce = createReduce(1);
// The right-associative version of reduce, also known as `foldr`.
var reduceRight = createReduce(-1);
// Return all the elements that pass a truth test.
function filter(obj, predicate, context) {
var results = [];
predicate = cb(predicate, context);
each(obj, function(value, index, list) {
if (predicate(value, index, list)) results.push(value);
});
return results;
}
// Return all the elements for which a truth test fails.
function reject(obj, predicate, context) {
return filter(obj, negate(cb(predicate)), context);
}
// Determine whether all of the elements pass a truth test.
function every(obj, predicate, context) {
predicate = cb(predicate, context);
var _keys = !isArrayLike(obj) && keys(obj),
length = (_keys || obj).length;
for (var index = 0; index < length; index++) {
var currentKey = _keys ? _keys[index] : index;
if (!predicate(obj[currentKey], currentKey, obj)) return false;
}
return true;
}
// Determine if at least one element in the object passes a truth test.
function some(obj, predicate, context) {
predicate = cb(predicate, context);
var _keys = !isArrayLike(obj) && keys(obj),
length = (_keys || obj).length;
for (var index = 0; index < length; index++) {
var currentKey = _keys ? _keys[index] : index;
if (predicate(obj[currentKey], currentKey, obj)) return true;
}
return false;
}
// Determine if the array or object contains a given item (using `===`).
function contains(obj, item, fromIndex, guard) {
if (!isArrayLike(obj)) obj = values(obj);
if (typeof fromIndex != 'number' || guard) fromIndex = 0;
return indexOf(obj, item, fromIndex) >= 0;
}
// Invoke a method (with arguments) on every item in a collection.
var invoke = restArguments(function(obj, path, args) {
var contextPath, func;
if (isFunction$1(path)) {
func = path;
} else {
path = toPath(path);
contextPath = path.slice(0, -1);
path = path[path.length - 1];
}
return map(obj, function(context) {
var method = func;
if (!method) {
if (contextPath && contextPath.length) {
context = deepGet(context, contextPath);
}
if (context == null) return void 0;
method = context[path];
}
return method == null ? method : method.apply(context, args);
});
});
// Convenience version of a common use case of `_.map`: fetching a property.
function pluck(obj, key) {
return map(obj, property(key));
}
// Convenience version of a common use case of `_.filter`: selecting only
// objects containing specific `key:value` pairs.
function where(obj, attrs) {
return filter(obj, matcher(attrs));
}
// Return the maximum element (or element-based computation).
function max(obj, iteratee, context) {
var result = -Infinity, lastComputed = -Infinity,
value, computed;
if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
obj = isArrayLike(obj) ? obj : values(obj);
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value != null && value > result) {
result = value;
}
}
} else {
iteratee = cb(iteratee, context);
each(obj, function(v, index, list) {
computed = iteratee(v, index, list);
if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
result = v;
lastComputed = computed;
}
});
}
return result;
}
// Return the minimum element (or element-based computation).
function min(obj, iteratee, context) {
var result = Infinity, lastComputed = Infinity,
value, computed;
if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
obj = isArrayLike(obj) ? obj : values(obj);
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value != null && value < result) {
result = value;
}
}
} else {
iteratee = cb(iteratee, context);
each(obj, function(v, index, list) {
computed = iteratee(v, index, list);
if (computed < lastComputed || computed === Infinity && result === Infinity) {
result = v;
lastComputed = computed;
}
});
}
return result;
}
// Sample **n** random values from a collection using the modern version of the
// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
// If **n** is not specified, returns a single random element.
// The internal `guard` argument allows it to work with `_.map`.
function sample(obj, n, guard) {
if (n == null || guard) {
if (!isArrayLike(obj)) obj = values(obj);
return obj[random(obj.length - 1)];
}
var sample = isArrayLike(obj) ? clone(obj) : values(obj);
var length = getLength(sample);
n = Math.max(Math.min(n, length), 0);
var last = length - 1;
for (var index = 0; index < n; index++) {
var rand = random(index, last);
var temp = sample[index];
sample[index] = sample[rand];
sample[rand] = temp;
}
return sample.slice(0, n);
}
// Shuffle a collection.
function shuffle(obj) {
return sample(obj, Infinity);
}
// Sort the object's values by a criterion produced by an iteratee.
function sortBy(obj, iteratee, context) {
var index = 0;
iteratee = cb(iteratee, context);
return pluck(map(obj, function(value, key, list) {
return {
value: value,
index: index++,
criteria: iteratee(value, key, list)
};
}).sort(function(left, right) {
var a = left.criteria;
var b = right.criteria;
if (a !== b) {
if (a > b || a === void 0) return 1;
if (a < b || b === void 0) return -1;
}
return left.index - right.index;
}), 'value');
}
// An internal function used for aggregate "group by" operations.
function group(behavior, partition) {
return function(obj, iteratee, context) {
var result = partition ? [[], []] : {};
iteratee = cb(iteratee, context);
each(obj, function(value, index) {
var key = iteratee(value, index, obj);
behavior(result, value, key);
});
return result;
};
}
// Groups the object's values by a criterion. Pass either a string attribute
// to group by, or a function that returns the criterion.
var groupBy = group(function(result, value, key) {
if (has$1(result, key)) result[key].push(value); else result[key] = [value];
});
// Indexes the object's values by a criterion, similar to `_.groupBy`, but for
// when you know that your index values will be unique.
var indexBy = group(function(result, value, key) {
result[key] = value;
});
// Counts instances of an object that group by a certain criterion. Pass
// either a string attribute to count by, or a function that returns the
// criterion.
var countBy = group(function(result, value, key) {
if (has$1(result, key)) result[key]++; else result[key] = 1;
});
// Split a collection into two arrays: one whose elements all pass the given
// truth test, and one whose elements all do not pass the truth test.
var partition = group(function(result, value, pass) {
result[pass ? 0 : 1].push(value);
}, true);
// Safely create a real, live array from anything iterable.
var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
function toArray(obj) {
if (!obj) return [];
if (isArray(obj)) return slice.call(obj);
if (isString(obj)) {
// Keep surrogate pair characters together.
return obj.match(reStrSymbol);
}
if (isArrayLike(obj)) return map(obj, identity);
return values(obj);
}
// Return the number of elements in a collection.
function size(obj) {
if (obj == null) return 0;
return isArrayLike(obj) ? obj.length : keys(obj).length;
}
// Internal `_.pick` helper function to determine whether `key` is an enumerable
// property name of `obj`.
function keyInObj(value, key, obj) {
return key in obj;
}
// Return a copy of the object only containing the allowed properties.
var pick = restArguments(function(obj, keys) {
var result = {}, iteratee = keys[0];
if (obj == null) return result;
if (isFunction$1(iteratee)) {
if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
keys = allKeys(obj);
} else {
iteratee = keyInObj;
keys = flatten$1(keys, false, false);
obj = Object(obj);
}
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
var value = obj[key];
if (iteratee(value, key, obj)) result[key] = value;
}
return result;
});
// Return a copy of the object without the disallowed properties.
var omit = restArguments(function(obj, keys) {
var iteratee = keys[0], context;
if (isFunction$1(iteratee)) {
iteratee = negate(iteratee);
if (keys.length > 1) context = keys[1];
} else {
keys = map(flatten$1(keys, false, false), String);
iteratee = function(value, key) {
return !contains(keys, key);
};
}
return pick(obj, iteratee, context);
});
// Returns everything but the last entry of the array. Especially useful on
// the arguments object. Passing **n** will return all the values in
// the array, excluding the last N.
function initial(array, n, guard) {
return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
}
// Get the first element of an array. Passing **n** will return the first N
// values in the array. The **guard** check allows it to work with `_.map`.
function first(array, n, guard) {
if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
if (n == null || guard) return array[0];
return initial(array, array.length - n);
}
// Returns everything but the first entry of the `array`. Especially useful on
// the `arguments` object. Passing an **n** will return the rest N values in the
// `array`.
function rest(array, n, guard) {
return slice.call(array, n == null || guard ? 1 : n);
}
// Get the last element of an array. Passing **n** will return the last N
// values in the array.
function last(array, n, guard) {
if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
if (n == null || guard) return array[array.length - 1];
return rest(array, Math.max(0, array.length - n));
}
// Trim out all falsy values from an array.
function compact(array) {
return filter(array, Boolean);
}
// Flatten out an array, either recursively (by default), or up to `depth`.
// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
function flatten(array, depth) {
return flatten$1(array, depth, false);
}
// Take the difference between one array and a number of other arrays.
// Only the elements present in just the first array will remain.
var difference = restArguments(function(array, rest) {
rest = flatten$1(rest, true, true);
return filter(array, function(value){
return !contains(rest, value);
});
});
// Return a version of the array that does not contain the specified value(s).
var without = restArguments(function(array, otherArrays) {
return difference(array, otherArrays);
});
// Produce a duplicate-free version of the array. If the array has already
// been sorted, you have the option of using a faster algorithm.
// The faster algorithm will not work with an iteratee if the iteratee
// is not a one-to-one function, so providing an iteratee will disable
// the faster algorithm.
function uniq(array, isSorted, iteratee, context) {
if (!isBoolean(isSorted)) {
context = iteratee;
iteratee = isSorted;
isSorted = false;
}
if (iteratee != null) iteratee = cb(iteratee, context);
var result = [];
var seen = [];
for (var i = 0, length = getLength(array); i < length; i++) {
var value = array[i],
computed = iteratee ? iteratee(value, i, array) : value;
if (isSorted && !iteratee) {
if (!i || seen !== computed) result.push(value);
seen = computed;
} else if (iteratee) {
if (!contains(seen, computed)) {
seen.push(computed);
result.push(value);
}
} else if (!contains(result, value)) {
result.push(value);
}
}
return result;
}
// Produce an array that contains the union: each distinct element from all of
// the passed-in arrays.
var union = restArguments(function(arrays) {
return uniq(flatten$1(arrays, true, true));
});
// Produce an array that contains every item shared between all the
// passed-in arrays.
function intersection(array) {
var result = [];
var argsLength = arguments.length;
for (var i = 0, length = getLength(array); i < length; i++) {
var item = array[i];
if (contains(result, item)) continue;
var j;
for (j = 1; j < argsLength; j++) {
if (!contains(arguments[j], item)) break;
}
if (j === argsLength) result.push(item);
}
return result;
}
// Complement of zip. Unzip accepts an array of arrays and groups
// each array's elements on shared indices.
function unzip(array) {
var length = array && max(array, getLength).length || 0;
var result = Array(length);
for (var index = 0; index < length; index++) {
result[index] = pluck(array, index);
}
return result;
}
// Zip together multiple lists into a single array -- elements that share
// an index go together.
var zip = restArguments(unzip);
// Converts lists into objects. Pass either a single array of `[key, value]`
// pairs, or two parallel arrays of the same length -- one of keys, and one of
// the corresponding values. Passing by pairs is the reverse of `_.pairs`.
function object(list, values) {
var result = {};
for (var i = 0, length = getLength(list); i < length; i++) {
if (values) {
result[list[i]] = values[i];
} else {
result[list[i][0]] = list[i][1];
}
}
return result;
}
// Generate an integer Array containing an arithmetic progression. A port of
// the native Python `range()` function. See
// [the Python documentation](https://docs.python.org/library/functions.html#range).
function range(start, stop, step) {
if (stop == null) {
stop = start || 0;
start = 0;
}
if (!step) {
step = stop < start ? -1 : 1;
}
var length = Math.max(Math.ceil((stop - start) / step), 0);
var range = Array(length);
for (var idx = 0; idx < length; idx++, start += step) {
range[idx] = start;
}
return range;
}
// Chunk a single array into multiple arrays, each containing `count` or fewer
// items.
function chunk(array, count) {
if (count == null || count < 1) return [];
var result = [];
var i = 0, length = array.length;
while (i < length) {
result.push(slice.call(array, i, i += count));
}
return result;
}
// Helper function to continue chaining intermediate results.
function chainResult(instance, obj) {
return instance._chain ? _$1(obj).chain() : obj;
}
// Add your own custom functions to the Underscore object.
function mixin(obj) {
each(functions(obj), function(name) {
var func = _$1[name] = obj[name];
_$1.prototype[name] = function() {
var args = [this._wrapped];
push.apply(args, arguments);
return chainResult(this, func.apply(_$1, args));
};
});
return _$1;
}
// Add all mutator `Array` functions to the wrapper.
each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
var method = ArrayProto[name];
_$1.prototype[name] = function() {
var obj = this._wrapped;
if (obj != null) {
method.apply(obj, arguments);
if ((name === 'shift' || name === 'splice') && obj.length === 0) {
delete obj[0];
}
}
return chainResult(this, obj);
};
});
// Add all accessor `Array` functions to the wrapper.
each(['concat', 'join', 'slice'], function(name) {
var method = ArrayProto[name];
_$1.prototype[name] = function() {
var obj = this._wrapped;
if (obj != null) obj = method.apply(obj, arguments);
return chainResult(this, obj);
};
});
// Named Exports
var allExports = {
__proto__: null,
VERSION: VERSION,
restArguments: restArguments,
isObject: isObject,
isNull: isNull,
isUndefined: isUndefined,
isBoolean: isBoolean,
isElement: isElement,
isString: isString,
isNumber: isNumber,
isDate: isDate,
isRegExp: isRegExp,
isError: isError,
isSymbol: isSymbol,
isArrayBuffer: isArrayBuffer,
isDataView: isDataView$1,
isArray: isArray,
isFunction: isFunction$1,
isArguments: isArguments$1,
isFinite: isFinite$1,
isNaN: isNaN$1,
isTypedArray: isTypedArray$1,
isEmpty: isEmpty,
isMatch: isMatch,
isEqual: isEqual,
isMap: isMap,
isWeakMap: isWeakMap,
isSet: isSet,
isWeakSet: isWeakSet,
keys: keys,
allKeys: allKeys,
values: values,
pairs: pairs,
invert: invert,
functions: functions,
methods: functions,
extend: extend,
extendOwn: extendOwn,
assign: extendOwn,
defaults: defaults,
create: create,
clone: clone,
tap: tap,
get: get,
has: has,
mapObject: mapObject,
identity: identity,
constant: constant,
noop: noop,
toPath: toPath$1,
property: property,
propertyOf: propertyOf,
matcher: matcher,
matches: matcher,
times: times,
random: random,
now: now,
escape: _escape,
unescape: _unescape,
templateSettings: templateSettings,
template: template,
result: result,
uniqueId: uniqueId,
chain: chain,
iteratee: iteratee,
partial: partial,
bind: bind,
bindAll: bindAll,
memoize: memoize,
delay: delay,
defer: defer,
throttle: throttle,
debounce: debounce,
wrap: wrap,
negate: negate,
compose: compose,
after: after,
before: before,
once: once,
findKey: findKey,
findIndex: findIndex,
findLastIndex: findLastIndex,
sortedIndex: sortedIndex,
indexOf: indexOf,
lastIndexOf: lastIndexOf,
find: find,
detect: find,
findWhere: findWhere,
each: each,
forEach: each,
map: map,
collect: map,
reduce: reduce,
foldl: reduce,
inject: reduce,
reduceRight: reduceRight,
foldr: reduceRight,
filter: filter,
select: filter,
reject: reject,
every: every,
all: every,
some: some,
any: some,
contains: contains,
includes: contains,
include: contains,
invoke: invoke,
pluck: pluck,
where: where,
max: max,
min: min,
shuffle: shuffle,
sample: sample,
sortBy: sortBy,
groupBy: groupBy,
indexBy: indexBy,
countBy: countBy,
partition: partition,
toArray: toArray,
size: size,
pick: pick,
omit: omit,
first: first,
head: first,
take: first,
initial: initial,
last: last,
rest: rest,
tail: rest,
drop: rest,
compact: compact,
flatten: flatten,
without: without,
uniq: uniq,
unique: uniq,
union: union,
intersection: intersection,
difference: difference,
unzip: unzip,
transpose: unzip,
zip: zip,
object: object,
range: range,
chunk: chunk,
mixin: mixin,
'default': _$1
};
// Default Export
// Add all of the Underscore functions to the wrapper object.
var _ = mixin(allExports);
// Legacy Node.js API.
_._ = _;
return _;
})));
//# sourceMappingURL=underscore-umd.js.map
!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
// Underscore.js 1.13.1
// https://underscorejs.org
// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
......
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
......@@ -57,7 +57,6 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html">Analyzing and Modifying the ESGEMME Output</a></li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html#raw-esgemme-scores-and-their-interpretation">Raw ESGEMME Scores and Their Interpretation</a></li>
<li class="toctree-l1"><a class="reference internal" href="input-preparation.html">Preparing Your Own Input</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
</ul>
......@@ -97,8 +96,8 @@ commands.</p>
<p>Let’s start our favorite terminal app.</p>
<p>You must create a folder called docker-tutorial and go to that empty
folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir<span class="w"> </span>docker-tutorial
<span class="nb">cd</span><span class="w"> </span>docker-tutorial
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir docker-tutorial
<span class="nb">cd</span> docker-tutorial
</pre></div>
</div>
</section>
......@@ -107,35 +106,35 @@ folder:</p>
<p>Let’s download the sample data provided in the ESGEMME repository for
this exercise. First, we will download the multiple sequence alignment
file in fasta format:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget<span class="w"> </span>http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta
</pre></div>
</div>
<p>If you don’t have wget, you can try the same command with curl:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>curl<span class="w"> </span>http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta &gt;aliBLAT.fasta
</pre></div>
</div>
<p>Please verify that the aliBLAT.fasta file is in the folder.</p>
<p>Now, we will download the PDB (Protein Databank) file for BLAT:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget<span class="w"> </span>http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/blat-af2.pdb
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/blat-af2.pdb
</pre></div>
</div>
</section>
<section id="single-point-mutation-calculations">
<h2>Single point mutation calculations<a class="headerlink" href="#single-point-mutation-calculations" title="Permalink to this heading"></a></h2>
<p>In order to make sure that the docker is installed:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>docker<span class="w"> </span>-h
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo docker -h
</pre></div>
</div>
<p>If it shows you a list of options, you are on a good track. On MacOS,
you may not need ‘sudo’ word before the docker command at all.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>docker<span class="w"> </span>run<span class="w"> </span>-ti<span class="w"> </span>--rm<span class="w"> </span>--mount<span class="w"> </span><span class="nv">type</span><span class="o">=</span>bind,source<span class="o">=</span><span class="nv">$PWD</span>,target<span class="o">=</span>/home/tekpinar/research/myexample<span class="w"> </span><span class="se">\</span>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo docker run -ti --rm --mount <span class="nv">type</span><span class="o">=</span>bind,source<span class="o">=</span><span class="nv">$PWD</span>,target<span class="o">=</span>/home/tekpinar/research/myexample <span class="se">\</span>
tekpinar/esgemme-docker:v1.3.0
</pre></div>
</div>
<p>You are in the container (your virtual operating system) now. You
created a folder called myexample in your container with the previous
command. Let’s change to that folder.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>../myexample/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> ../myexample/
</pre></div>
</div>
<p>When you check the data in that folder with ‘ls’ command, you are
......@@ -145,7 +144,7 @@ docker container are pointing to the same place.</p>
<section id="obtaining-the-entire-single-point-mutation-landscape">
<h3>Obtaining the entire single point mutation landscape<a class="headerlink" href="#obtaining-the-entire-single-point-mutation-landscape" title="Permalink to this heading"></a></h3>
<p>In this step, we will use only evolutionary information from an MSA file:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span><span class="nv">$ESGEMME_PATH</span>/esgemme.py<span class="w"> </span>aliBLAT.fasta<span class="w"> </span>-r<span class="w"> </span>input<span class="w"> </span>-f<span class="w"> </span>aliBLAT.fasta
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>esgemme aliBLAT.fasta -r input -f aliBLAT.fasta
</pre></div>
</div>
<p>After a few minutes of calculation, you must see at least two files named
......@@ -154,9 +153,9 @@ the entire single point mutational landscape of BLAT protein in these
files.</p>
<p>If you want to utilize structural information (highly recommended) as well as
evolutionary information:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span><span class="nv">$ESGEMME_PATH</span>/esgemme.py<span class="w"> </span>aliBLAT.fasta<span class="w"> </span>-r<span class="w"> </span>input<span class="w"> </span>-f<span class="w"> </span>aliBLAT.fasta<span class="w"> </span><span class="se">\</span>
--pdbfile<span class="w"> </span>blat-af2.pdb<span class="w"> </span><span class="se">\</span>
--normweightmode<span class="w"> </span>sstjetormax
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>esgemme aliBLAT.fasta -r input -f aliBLAT.fasta <span class="se">\</span>
--pdbfile blat-af2.pdb <span class="se">\</span>
--normweightmode sstjetormax
</pre></div>
</div>
</section>
......@@ -166,19 +165,19 @@ evolutionary information:</p>
you have to prepare a mut file. The format is a simple text file and
each line contains a single point mutation such as D26A….
Fortunately, we have an example mut in data folder of ESGEMME repository.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget<span class="w"> </span>http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/master/data/Stiffler_2015_BLAT_ECOLX.mut
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/master/data/Stiffler_2015_BLAT_ECOLX.mut
</pre></div>
</div>
<p>Similar to the previous step, there are two possible ways to do the calculations: with or without
structural information. First, let’s do it without structural information:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span><span class="nv">$ESGEMME_PATH</span>/esgemme.py<span class="w"> </span>aliBLAT.fasta<span class="w"> </span>-r<span class="w"> </span>input<span class="w"> </span>-f<span class="w"> </span>aliBLAT.fasta<span class="w"> </span><span class="se">\</span>
-m<span class="w"> </span>Stiffler_2015_BLAT_ECOLX.mut
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>esgemme aliBLAT.fasta -r input -f aliBLAT.fasta <span class="se">\</span>
-m Stiffler_2015_BLAT_ECOLX.mut
</pre></div>
</div>
<p>You can include structural information in the following way:
.. code:: bash</p>
<blockquote>
<div><p>python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta –pdbfile blat-af2.pdb –normweightmode sstjetormax -m Stiffler_2015_BLAT_ECOLX.mut</p>
<div><p>esgemme aliBLAT.fasta -r input -f aliBLAT.fasta –pdbfile blat-af2.pdb –normweightmode sstjetormax -m Stiffler_2015_BLAT_ECOLX.mut</p>
</div></blockquote>
<p>You will have BLAT_normPred_evolCombi.txt file in your folder. However, the output
format is completely different from the entire mutational landscape scanning file.
......
......@@ -10,11 +10,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
......
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
......@@ -98,7 +98,7 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="installation.html#installing-the-dependencies">Installing the dependencies:</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#getting-the-source-code-and-preparing-the-environment">Getting the source code and preparing the environment:</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#preparation-of-the-environment-and-installation-of-esgemme">Preparation of the environment and installation of ESGEMME</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#configuring-default-conf-file">Configuring default.conf file</a></li>
</ul>
</li>
......
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
......@@ -46,7 +46,6 @@
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="docker.html">Using ESGEMME via Docker</a></li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html">Analyzing and Modifying the ESGEMME Output</a></li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html#raw-esgemme-scores-and-their-interpretation">Raw ESGEMME Scores and Their Interpretation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Preparing Your Own Input</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#preparing-your-input-msa-and-pdb-with-colabfold">Preparing Your Input MSA and PDB with Colabfold</a></li>
</ul>
......@@ -109,25 +108,25 @@ We have to clean those gaps. We can do that with a GUI program like Ugene
or Jalview. However, it is a labor intensive procedure. Here, I will use a
small tool that I developed and added to the ESGEMME docker image that I created.</p></li>
<li><p>Start the docker image with the following command:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>docker<span class="w"> </span>run<span class="w"> </span>-ti<span class="w"> </span>--rm<span class="w"> </span>--mount<span class="w"> </span><span class="nv">type</span><span class="o">=</span>bind,source<span class="o">=</span><span class="nv">$PWD</span>,target<span class="o">=</span>/home/tekpinar/research/myexample<span class="w"> </span><span class="se">\</span>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo docker run -ti --rm --mount <span class="nv">type</span><span class="o">=</span>bind,source<span class="o">=</span><span class="nv">$PWD</span>,target<span class="o">=</span>/home/tekpinar/research/myexample <span class="se">\</span>
tekpinar/esgemme-docker:v1.3.0
</pre></div>
</div>
</li>
<li><p>Now, change the directory to myexample folder.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>../myexample/
ls<span class="w"> </span>-l
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> ../myexample/
ls -l
</pre></div>
</div>
<p>We are supposed to see our a3m and pdb files in this folder.</p>
</li>
<li><p>Let’s use a small script from hhsuite to convert a3m file to fasta format.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>reformat.pl<span class="w"> </span>a3m<span class="w"> </span>fas<span class="w"> </span>AKE.a3m<span class="w"> </span>AKE.fasta
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>reformat.pl a3m fas AKE.a3m AKE.fasta
</pre></div>
</div>
</li>
<li><p>Final step and we are there:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>demust<span class="w"> </span>removegaps<span class="w"> </span>-i<span class="w"> </span>AKE.fasta<span class="w"> </span>-o<span class="w"> </span>AKE_nogaps.fasta
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>demust removegaps -i AKE.fasta -o AKE_nogaps.fasta
</pre></div>
</div>
</li>
......
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
......@@ -45,11 +45,10 @@
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="docker.html">Using ESGEMME via Docker</a></li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html">Analyzing and Modifying the ESGEMME Output</a></li>
<li class="toctree-l1"><a class="reference internal" href="analysis.html#raw-esgemme-scores-and-their-interpretation">Raw ESGEMME Scores and Their Interpretation</a></li>
<li class="toctree-l1"><a class="reference internal" href="input-preparation.html">Preparing Your Own Input</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#installing-the-dependencies">Installing the dependencies:</a></li>
<li class="toctree-l2"><a class="reference internal" href="#getting-the-source-code-and-preparing-the-environment">Getting the source code and preparing the environment:</a></li>
<li class="toctree-l2"><a class="reference internal" href="#preparation-of-the-environment-and-installation-of-esgemme">Preparation of the environment and installation of ESGEMME</a></li>
<li class="toctree-l2"><a class="reference internal" href="#configuring-default-conf-file">Configuring default.conf file</a></li>
</ul>
</li>
......@@ -101,21 +100,91 @@ steps required to install it from the source.</p>
</ul>
<p>These tools should be installed to be able to use ESGEMME.</p>
</section>
<section id="getting-the-source-code-and-preparing-the-environment">
<h2>Getting the source code and preparing the environment:<a class="headerlink" href="#getting-the-source-code-and-preparing-the-environment" title="Permalink to this heading"></a></h2>
<p>Download the ESGEMME source code from
<a class="reference external" href="http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME">http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME</a>. Define and export the
environment variable ESGEMME_PATH=/path-to-ESGEMME-directory/</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">ESGEMME_PATH</span><span class="o">=</span>/path-to-ESGEMME-directory/
<section id="preparation-of-the-environment-and-installation-of-esgemme">
<h2>Preparation of the environment and installation of ESGEMME<a class="headerlink" href="#preparation-of-the-environment-and-installation-of-esgemme" title="Permalink to this heading"></a></h2>
<p>Step by step installation on Ubuntu 22.04</p>
<p>Prepare your environment and install the required packages:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo apt-get update --fix-missing <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y --no-install-recommends apt-utils <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y software-properties-common <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y autotools-dev <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y automake <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y build-essential <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y python3-dev <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y python3-pip <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y r-base r-base-core <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y muscle <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y default-jre <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y ncbi-blast+ <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y nano <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y less <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y wget <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install csh <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y hmmer <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get install -y libboost-all-dev <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo apt-get clean <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
</pre></div>
</div>
<p>#Dssp installation
If you are using Ubuntu 20.04, you can install dssp by the following command
.. code:: bash</p>
<blockquote>
<div><p>sudo apt-get install dssp</p>
</div></blockquote>
<p>Otherwise, you can install it from the source by the following commands.
Please note that default dssp in Ubuntu 22.04 is not working properly.
.. code:: bash</p>
<blockquote>
<div><p>wget <a class="reference external" href="https://github.com/cmbi/dssp/archive/refs/heads/master.zip">https://github.com/cmbi/dssp/archive/refs/heads/master.zip</a> &amp;&amp; unzip -o master.zip &amp;&amp; cd dssp-master/ &amp;&amp; ./autogen.sh &amp;&amp; ./configure &amp;&amp; make &amp;&amp; sudo make install &amp;&amp; sudo ln -s /usr/local/bin/mkdssp /usr/local/bin/dssp &amp;&amp; cd ../ &amp;&amp; sudo rm -rf dssp-master/ &amp;&amp; sudo rm -f master.zip</p>
</div></blockquote>
<p>#HHSUITE installation
.. code:: bash</p>
<blockquote>
<div><p>wget <a class="reference external" href="https://github.com/soedinglab/hh-suite/releases/download/v3.3.0/hhsuite-3.3.0-AVX2-Linux.tar.gz">https://github.com/soedinglab/hh-suite/releases/download/v3.3.0/hhsuite-3.3.0-AVX2-Linux.tar.gz</a> &amp;&amp; mkdir hhsuite &amp;&amp; mv hhsuite-3.3.0-AVX2-Linux.tar.gz hhsuite/ &amp;&amp; cd hhsuite &amp;&amp; tar xvfz hhsuite-3.3.0-AVX2-Linux.tar.gz &amp;&amp; rm -f hhsuite-3.3.0-AVX2-Linux.tar.gz</p>
</div></blockquote>
<p>#Add it to your path permanently inside .bashrc or .profile or .bash_profile
Check the location of hhsuite folder and add it to your path
In my case it was in /home/tekpinar/research/lcqb folder. Therefore, I added the following line
to my .profile file.
PATH=”/home/tekpinar/research/lcqb/hhsuite/bin:/home/tekpinar/research/lcqb/hhsuite/scripts:$PATH”</p>
<p>Then
source ~/.profile</p>
<p>#</p>
<blockquote>
<div><p>cd ESGEMME</p>
</div></blockquote>
<p>#Download ESGEMME from <a class="reference external" href="http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME">http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME</a> repository and go inside the ESGEMME folder.!
.. code:: bash</p>
<blockquote>
<div><p>cd ESGEMME</p>
</div></blockquote>
</section>
<section id="configuring-default-conf-file">
<h2>Configuring default.conf file<a class="headerlink" href="#configuring-default-conf-file" title="Permalink to this heading"></a></h2>
<p>Inside ESGEMME folder, there is an important file called default.conf.
<p>Inside ESGEMME/esgemme folder, there is an important file called default.conf.
This file contains essential parameters of ESGEMME, such as paths of
external parts, default internal parameters. etc. You have to correct the Software section of this
file according to your system.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip3 install -e . <span class="o">&amp;&amp;</span><span class="se">\</span>
<span class="nb">cd</span> ../
</pre></div>
</div>
<p>#Installing the required R packages
.. code:: bash</p>
<blockquote>
<div><p>sudo Rscript -e ‘install.packages(“seqinr”, repos=”<a class="reference external" href="http://cran.us.r-project.org">http://cran.us.r-project.org</a>”, dependencies=TRUE)’</p>
</div></blockquote>
<p>#Installing secondary programs such as ev_couplings to obtain MSA files.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget https://github.com/debbiemarkslab/plmc/archive/refs/heads/master.zip <span class="o">&amp;&amp;</span> <span class="se">\</span>
unzip -o master.zip <span class="o">&amp;&amp;</span> <span class="se">\</span>
<span class="nb">cd</span> plmc-master <span class="o">&amp;&amp;</span> <span class="se">\</span>
make all-openmp32 <span class="o">&amp;&amp;</span> <span class="se">\</span>
sudo cp bin/plmc /usr/local/bin/ <span class="o">&amp;&amp;</span> <span class="se">\</span>
<span class="nb">cd</span> ../ <span class="o">&amp;&amp;</span> <span class="se">\</span>
rm -rf master.zip plmc-master
</pre></div>
</div>
</section>
</section>
......
......@@ -11,11 +11,11 @@
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
......
Search.setIndex({"docnames": ["analysis", "docker", "index", "input-preparation", "installation"], "filenames": ["analysis.rst", "docker.rst", "index.rst", "input-preparation.rst", "installation.rst"], "titles": ["Analyzing and Modifying the ESGEMME Output", "Using ESGEMME via Docker", "Welcome to esgemme\u2019s documentation!", "Preparing Your Own Input", "Installation"], "terms": {"By": 0, "default": [0, 2], "follow": [1, 3, 4], "file": [0, 1, 2, 3], "myprot_normpred_evolepi": [], "txt": [0, 1], "myprot_normpred_evolind": [], "myprot_normpred_evolcombi": 0, "The": [0, 1, 3], "most": 0, "import": 4, "i": [0, 1, 3, 4], "valu": 0, "interest": [0, 1, 3], "ar": [0, 1, 3, 4], "normal": [], "predict": [0, 4], "normpr": [], "each": 1, "contain": [0, 1, 3, 4], "20": 0, "x": [], "n": [], "matrix": [], "where": [0, 3], "number": 0, "posit": [], "column": [0, 3], "queri": [], "sequenc": [1, 3], "If": [0, 1, 4], "user": 4, "provid": 1, "her": [], "hi": [], "own": 2, "list": [1, 3], "mutat": [2, 3], "onli": [0, 1, 4], "global": [], "epistat": 0, "model": 3, "run": [2, 3], "2": 0, "first": 1, "one": [], "second": 1, "effect": [], "you": [0, 1, 3, 4], "need": 1, "have": [0, 1, 3, 4], "instal": [1, 2], "your": [0, 1, 2, 4], "machin": 1, "can": [0, 1, 3], "consult": 1, "page": [1, 2], "thi": [0, 1, 3, 4], "http": [1, 3, 4], "doc": 1, "com": [1, 3, 4], "am": 1, "assum": 1, "some": 1, "basic": 1, "familiar": 1, "linux": [1, 4], "unix": 1, "maco": 1, "termin": [1, 3], "command": [1, 3], "let": [1, 3], "": [1, 3], "start": [1, 3], "our": [1, 3, 4], "favorit": 1, "app": 1, "must": 1, "creat": [1, 3], "folder": [1, 3, 4], "call": [0, 1, 4], "tutori": 1, "go": [1, 3], "empti": 1, "mkdir": 1, "cd": [1, 3], "download": [1, 4], "sampl": 1, "repositori": 1, "exercis": 1, "we": [0, 1, 3, 4], "align": [1, 3], "fasta": [1, 3], "format": [0, 1, 3], "wget": 1, "gitlab": [1, 4], "lcqb": [1, 4], "upmc": [1, 4], "fr": [1, 4], "tekpinar": [1, 3, 4], "blob": [1, 3], "master": 1, "aliblat": 1, "don": 1, "t": 1, "try": 1, "same": [0, 1], "curl": 1, "pleas": [1, 3], "verifi": 1, "now": [1, 3], "pdb": [1, 2], "protein": [0, 1, 3], "databank": 1, "blat": 1, "af2": 1, "In": 1, "order": [0, 1], "make": [1, 3], "sure": [1, 3], "sudo": [1, 3], "h": 1, "show": 1, "option": 1, "good": 1, "track": 1, "On": 1, "mai": 1, "word": 1, "befor": [1, 3], "all": [0, 1, 3], "ti": [1, 3], "rm": [1, 3], "mount": [1, 3], "type": [1, 3], "bind": [1, 3], "sourc": [1, 2, 3], "pwd": [1, 3], "target": [1, 3], "home": [1, 3], "research": [1, 3], "myexampl": [1, 3], "v1": [1, 3], "3": [1, 3, 4], "0": [0, 1, 3], "virtual": 1, "oper": 1, "system": [1, 4], "previou": 1, "chang": [0, 1, 3], "when": 1, "check": [0, 1], "l": [0, 1, 3], "suppos": [1, 3], "see": [0, 1, 3], "host": 1, "place": 1, "step": [1, 3, 4], "evolutionari": [1, 4], "inform": 1, "from": [1, 3, 4], "an": [1, 3, 4], "msa": [0, 1, 2], "python": [0, 1, 4], "esgemme_path": [1, 4], "py": 1, "r": [0, 1, 4], "f": 1, "after": 1, "few": [1, 3], "minut": [1, 3], "least": 1, "two": 1, "name": [0, 1], "blat_normpred_evolcombi": 1, "png": 1, "want": [0, 1, 3], "util": 1, "structur": [1, 3, 4], "highli": 1, "recommend": [1, 4], "well": [0, 1], "pdbfile": 1, "normweightmod": 1, "sstjetormax": 1, "bunch": 1, "prepar": [0, 1, 2], "mut": 1, "simpl": 1, "text": 1, "line": 1, "d26a": 1, "fortun": 1, "raw": [1, 2], "stiffler_2015_blat_ecolx": 1, "similar": 1, "possibl": 1, "wai": 1, "do": [1, 3], "without": 1, "m": 1, "includ": 1, "code": [1, 2], "bash": 1, "howev": [0, 1, 3], "output": [1, 2], "complet": 1, "differ": 1, "scan": 1, "its": [1, 4], "separ": 1, "space": 1, "addit": 1, "won": 1, "like": [1, 3], "case": [0, 1], "sometim": 1, "doubl": 1, "tripl": 1, "perform": 1, "e26d": 1, "y44r": 1, "e56n": 1, "a77f": 1, "h94v": 1, "impact": [0, 1, 3], "As": [0, 1], "colon": 1, "charact": 1, "us": [0, 2, 3, 4], "via": 2, "docker": [2, 3, 4], "requir": [2, 3, 4], "get": 2, "exampl": [2, 3], "input": 2, "data": 2, "singl": 2, "point": 2, "calcul": 2, "multipl": [2, 3], "sever": 2, "job": 2, "analyz": 2, "colabfold": 2, "depend": [2, 3], "environ": 2, "configur": 2, "conf": 2, "index": [2, 4], "modul": 2, "search": 2, "understand": 3, "certain": 3, "doe": [0, 3], "gap": 3, "quickest": 3, "method": 3, "obtain": 3, "both": 3, "web": [3, 4], "site": [3, 4], "colab": 3, "googl": 3, "github": 3, "sokrypton": 3, "main": 3, "alphafold2": 3, "ipynb": 3, "sign": 3, "gmail": 3, "account": 3, "click": 3, "connect": 3, "button": 3, "top": 3, "right": 3, "hand": 3, "side": 3, "clean": 3, "query_sequ": 3, "box": 3, "past": 3, "For": 3, "me": 3, "select": [2, 3], "adenyl": 3, "kinas": 3, "ak": 3, "my": 3, "www": [3, 4], "rcsb": 3, "org": [3, 4], "entri": 3, "4ake": 3, "displai": 3, "jobnam": 3, "someth": 3, "more": [0, 3], "sens": 3, "menu": 3, "bar": 3, "notebook": 3, "edit": 3, "view": 3, "insert": 3, "runtim": 3, "tool": [3, 4], "help": 3, "process": 3, "take": 3, "hour": 3, "size": 3, "It": [0, 3, 4], "give": 3, "a3m": 3, "up": 3, "5": 3, "put": 3, "directori": [3, 4], "unfortun": 3, "those": 3, "gui": 3, "program": 3, "ugen": 3, "jalview": 3, "labor": 3, "intens": 3, "procedur": 3, "here": [3, 4], "small": 3, "develop": 3, "ad": [0, 3], "esgemm": [3, 4], "imag": [0, 3, 4], "script": 3, "hhsuit": 3, "convert": 3, "reformat": 3, "pl": 3, "fa": 3, "final": 3, "demust": 3, "removegap": 3, "o": 3, "ake_nogap": 3, "congratul": 3, "ii": 3, "myprotein": 3, "implement": 4, "ha": 4, "been": 4, "test": 4, "sinc": [0, 4], "mani": 4, "determin": 4, "come": 4, "extern": 4, "joint": 4, "tree": 4, "jet2": 4, "java": 4, "naccess": 4, "bioinf": 4, "manchest": 4, "ac": 4, "uk": 4, "muscl": 4, "drive5": 4, "seqinr": 4, "packag": 4, "cran": 4, "project": 4, "html": 4, "dssp": 4, "secondari": 4, "These": 4, "should": [0, 4], "abl": 4, "defin": 4, "export": 4, "variabl": 4, "path": 4, "insid": 4, "essenti": 4, "paramet": 4, "part": 4, "intern": 4, "etc": 4, "correct": 4, "softwar": 4, "section": 4, "accord": 4, "There": 0, "hardcod": 0, "limit": 0, "rang": 0, "between": 0, "12": 0, "gener": 0, "lower": 0, "mean": 0, "while": 0, "close": 0, "ani": 0, "signific": 0, "note": 0, "deleteri": 0, "alwai": 0, "combin": 0, "independ": 0, "three": 0, "myprot": 0, "short": 0, "row": 0, "amino": 0, "acid": 0, "alphabet": 0, "horizont": 0, "easi": 0, "read": 0, "difficult": 0, "find": 0, "myprot_normpred_evolcombitranspos": 0, "impli": 0, "transpos": 0, "version": 0, "result": 0, "easier": 0, "just": 0, "correspond": 0, "oranges_r": 0, "matplotlib": 0, "color": 0, "map": 0, "colormap": 0, "turbo_r": 0, "fanci": 0, "look": 0, "dure": 0, "argument": 0, "accept": 0, "contribut": 0, "add": 0, "verbos": 0, "true": 0, "a2c": 0, "6": 0, "23": 0, "a2d": 0, "1": 0, "d286f": 0, "modifi": 2, "score": 2, "Their": 2, "interpret": 2, "entir": 2, "landscap": 2}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"analyz": 0, "esgemm": [0, 1, 2], "output": 0, "us": 1, "via": 1, "docker": 1, "requir": 1, "get": [1, 4], "exampl": 1, "input": [1, 3], "data": 1, "singl": [0, 1], "point": [0, 1], "mutat": [0, 1], "calcul": [0, 1], "obtain": 1, "entir": [0, 1], "landscap": [0, 1], "predict": 1, "effect": 1, "subset": 1, "multipl": [0, 1], "run": 1, "sever": 1, "job": 1, "welcom": 2, "": 2, "document": 2, "content": 2, "indic": 2, "tabl": 2, "prepar": [3, 4], "your": 3, "own": 3, "msa": 3, "pdb": 3, "colabfold": 3, "instal": 4, "depend": 4, "sourc": 4, "code": 4, "environ": 4, "configur": 4, "default": 4, "conf": 4, "file": 4, "modifi": 0, "raw": 0, "score": 0, "Their": 0, "interpret": 0, "select": 0}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Using ESGEMME via Docker": [[1, "using-esgemme-via-docker"]], "Requirements": [[1, "requirements"]], "Getting the example input data": [[1, "getting-the-example-input-data"]], "Single point mutation calculations": [[1, "single-point-mutation-calculations"]], "Obtaining the entire single point mutation landscape": [[1, "obtaining-the-entire-single-point-mutation-landscape"]], "Predicting the effect of a subset of single point mutations": [[1, "predicting-the-effect-of-a-subset-of-single-point-mutations"]], "Multiple point mutation calculations": [[1, "multiple-point-mutation-calculations"]], "Running several jobs using docker": [[1, "running-several-jobs-using-docker"]], "Welcome to esgemme\u2019s documentation!": [[2, "welcome-to-esgemme-s-documentation"]], "Contents:": [[2, null]], "Indices and tables": [[2, "indices-and-tables"]], "Preparing Your Own Input": [[3, "preparing-your-own-input"]], "Preparing Your Input MSA and PDB with Colabfold": [[3, "preparing-your-input-msa-and-pdb-with-colabfold"]], "Installation": [[4, "installation"]], "Installing the dependencies:": [[4, "installing-the-dependencies"]], "Getting the source code and preparing the environment:": [[4, "getting-the-source-code-and-preparing-the-environment"]], "Configuring default.conf file": [[4, "configuring-default-conf-file"]], "Analyzing and Modifying the ESGEMME Output": [[0, "analyzing-and-modifying-the-esgemme-output"]], "Raw ESGEMME Scores and Their Interpretation": [[0, "raw-esgemme-scores-and-their-interpretation"]], "Entire Single Point Mutation Landscape Calculations": [[0, "entire-single-point-mutation-landscape-calculations"]], "Selected Single Point or Multiple Point Mutation Calculations": [[0, "selected-single-point-or-multiple-point-mutation-calculations"]]}, "indexentries": {}})
\ No newline at end of file
Search.setIndex({"docnames": ["analysis", "docker", "index", "input-preparation", "installation"], "filenames": ["analysis.rst", "docker.rst", "index.rst", "input-preparation.rst", "installation.rst"], "titles": ["Analyzing and Modifying the ESGEMME Output", "Using ESGEMME via Docker", "Welcome to esgemme\u2019s documentation!", "Preparing Your Own Input", "Installation"], "terms": {"There": 0, "hardcod": 0, "limit": 0, "howev": [0, 1, 3], "valu": 0, "rang": 0, "between": 0, "12": 0, "2": 0, "gener": 0, "The": [0, 1, 3], "lower": 0, "mean": 0, "impact": [0, 1, 3], "while": 0, "close": 0, "0": [0, 1, 3, 4], "doe": [0, 3], "have": [0, 1, 3, 4], "ani": 0, "signific": 0, "we": [0, 1, 3, 4], "should": [0, 4], "note": [0, 4], "most": 0, "ar": [0, 1, 3, 4], "deleteri": 0, "alwai": 0, "case": [0, 1, 4], "By": 0, "default": [0, 2], "onli": [0, 1, 4], "combin": 0, "independ": 0, "epistat": 0, "three": 0, "file": [0, 1, 2, 3], "myprot_normpred_evolcombi": 0, "txt": [0, 1], "myprot": 0, "short": 0, "name": [0, 1], "msa": [0, 1, 2, 4], "your": [0, 1, 2, 4], "protein": [0, 1, 3], "contain": [0, 1, 3, 4], "20": [0, 4], "row": 0, "amino": 0, "acid": 0, "alphabet": 0, "order": [0, 1], "l": [0, 3], "column": [0, 3], "where": [0, 3], "number": 0, "interest": [0, 1, 3], "sinc": [0, 4], "thi": [0, 1, 3, 4], "horizont": 0, "easi": 0, "read": 0, "r": [0, 1, 4], "python": [0, 4], "difficult": 0, "find": 0, "you": [0, 1, 3, 4], "myprot_normpred_evolcombitranspos": 0, "As": [0, 1], "impli": 0, "transpos": 0, "version": 0, "result": 0, "It": [0, 3, 4], "easier": 0, "just": 0, "check": [0, 1, 4], "correspond": 0, "prepar": [0, 1, 2], "imag": [0, 3, 4], "oranges_r": 0, "matplotlib": 0, "color": 0, "map": 0, "can": [0, 1, 3, 4], "chang": [0, 1, 3], "ad": [0, 3, 4], "colormap": 0, "turbo_r": 0, "more": [0, 3], "fanci": 0, "look": 0, "dure": 0, "call": [0, 1, 4], "argument": 0, "accept": 0, "all": [0, 1, 3, 4], "If": [0, 1, 4], "want": [0, 1, 3], "see": [0, 1, 3], "contribut": 0, "well": [0, 1], "add": [0, 4], "verbos": 0, "true": [0, 4], "us": [0, 2, 3, 4], "predict": [0, 4], "same": [0, 1], "format": [0, 1, 3], "a2c": 0, "6": 0, "23": 0, "a2d": 0, "1": 0, "d286f": 0, "need": 1, "instal": [1, 2], "machin": 1, "consult": 1, "follow": [1, 3, 4], "page": [1, 2], "http": [1, 3, 4], "doc": 1, "com": [1, 3, 4], "i": [1, 3, 4], "am": 1, "assum": 1, "some": 1, "basic": 1, "familiar": 1, "linux": [1, 4], "unix": 1, "maco": 1, "termin": [1, 3], "command": [1, 3, 4], "let": [1, 3], "s": [1, 3, 4], "start": [1, 3], "our": [1, 3, 4], "favorit": 1, "app": 1, "must": 1, "creat": [1, 3], "folder": [1, 3, 4], "tutori": 1, "go": [1, 3, 4], "empti": 1, "mkdir": [1, 4], "cd": [1, 3, 4], "download": [1, 4], "sampl": 1, "provid": 1, "repositori": [1, 4], "exercis": 1, "first": 1, "sequenc": [1, 3], "align": [1, 3], "fasta": [1, 3], "wget": [1, 4], "gitlab": [1, 4], "lcqb": [1, 4], "upmc": [1, 4], "fr": [1, 4], "tekpinar": [1, 3, 4], "raw": [1, 2], "8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936": 1, "aliblat": 1, "don": 1, "t": 1, "try": 1, "curl": 1, "pleas": [1, 3, 4], "verifi": 1, "now": [1, 3], "pdb": [1, 2], "databank": 1, "blat": 1, "af2": 1, "In": [1, 4], "make": [1, 3, 4], "sure": [1, 3], "sudo": [1, 3, 4], "h": 1, "show": 1, "list": [1, 3, 4], "option": 1, "good": 1, "track": 1, "On": 1, "mai": 1, "word": 1, "befor": [1, 3], "ti": [1, 3], "rm": [1, 3, 4], "mount": [1, 3], "type": [1, 3], "bind": [1, 3], "sourc": [1, 3, 4], "pwd": [1, 3], "target": [1, 3], "home": [1, 3, 4], "research": [1, 3, 4], "myexampl": [1, 3], "v1": [1, 3], "3": [1, 3, 4], "virtual": 1, "oper": 1, "system": [1, 4], "previou": 1, "when": 1, "ls": [1, 3], "suppos": [1, 3], "host": 1, "place": 1, "step": [1, 3, 4], "evolutionari": [1, 4], "inform": 1, "from": [1, 3, 4], "an": [1, 3, 4], "esgemme_path": [], "py": [], "f": [1, 4], "after": 1, "few": [1, 3], "minut": [1, 3], "least": 1, "two": 1, "blat_normpred_evolcombi": 1, "png": 1, "util": [1, 4], "structur": [1, 3, 4], "highli": 1, "recommend": [1, 4], "pdbfile": 1, "normweightmod": 1, "sstjetormax": 1, "bunch": 1, "mut": 1, "simpl": 1, "text": 1, "each": 1, "line": [1, 4], "d26a": 1, "fortun": 1, "master": [1, 4], "stiffler_2015_blat_ecolx": 1, "similar": 1, "possibl": 1, "wai": 1, "do": [1, 3], "without": 1, "m": 1, "includ": 1, "code": [1, 4], "bash": [1, 4], "output": [1, 2], "complet": 1, "differ": 1, "scan": 1, "its": [1, 4], "separ": 1, "space": 1, "addit": 1, "won": 1, "like": [1, 3], "sometim": 1, "doubl": 1, "tripl": 1, "perform": 1, "e26d": 1, "y44r": 1, "e56n": 1, "a77f": 1, "h94v": 1, "second": 1, "colon": 1, "charact": 1, "via": 2, "docker": [2, 3, 4], "requir": [2, 3, 4], "get": [2, 4], "exampl": [2, 3], "input": 2, "data": 2, "singl": 2, "point": 2, "mutat": [2, 3], "calcul": 2, "multipl": [2, 3], "run": [2, 3], "sever": 2, "job": 2, "analyz": 2, "modifi": 2, "score": 2, "Their": 2, "interpret": 2, "entir": 2, "landscap": 2, "select": [2, 3], "own": 2, "colabfold": 2, "depend": [2, 3], "environ": 2, "configur": 2, "conf": 2, "index": [2, 4], "modul": 2, "search": 2, "understand": 3, "certain": 3, "gap": 3, "quickest": 3, "method": 3, "obtain": [3, 4], "both": 3, "web": [3, 4], "site": [3, 4], "colab": 3, "googl": 3, "github": [3, 4], "sokrypton": 3, "blob": 3, "main": 3, "alphafold2": 3, "ipynb": 3, "sign": 3, "gmail": 3, "account": 3, "click": 3, "connect": 3, "button": 3, "top": 3, "right": 3, "hand": 3, "side": 3, "clean": [3, 4], "query_sequ": 3, "box": 3, "past": 3, "For": 3, "me": 3, "adenyl": 3, "kinas": 3, "ak": 3, "my": [3, 4], "www": [3, 4], "rcsb": 3, "org": [3, 4], "entri": 3, "4ake": 3, "displai": 3, "jobnam": 3, "someth": 3, "sens": 3, "menu": 3, "bar": 3, "notebook": 3, "edit": 3, "view": 3, "insert": 3, "runtim": 3, "tool": [3, 4], "help": 3, "process": 3, "take": 3, "hour": 3, "size": 3, "give": 3, "a3m": 3, "up": 3, "5": 3, "model": 3, "put": 3, "directori": 3, "unfortun": 3, "those": 3, "gui": 3, "program": [3, 4], "ugen": 3, "jalview": 3, "labor": 3, "intens": 3, "procedur": 3, "here": [3, 4], "small": 3, "develop": 3, "esgemm": 3, "script": [3, 4], "hhsuit": [3, 4], "convert": 3, "reformat": 3, "pl": 3, "fa": 3, "final": 3, "demust": 3, "removegap": 3, "o": [3, 4], "ake_nogap": 3, "congratul": 3, "ii": 3, "myprotein": 3, "implement": 4, "ha": 4, "been": 4, "test": 4, "mani": 4, "determin": 4, "user": 4, "come": 4, "extern": 4, "joint": 4, "tree": 4, "jet2": 4, "java": 4, "naccess": 4, "bioinf": 4, "manchest": 4, "ac": 4, "uk": 4, "muscl": 4, "drive5": 4, "seqinr": 4, "packag": 4, "cran": 4, "project": 4, "html": 4, "dssp": 4, "secondari": 4, "These": 4, "abl": 4, "defin": [], "export": [], "variabl": [], "path": 4, "insid": 4, "import": 4, "essenti": 4, "paramet": 4, "part": 4, "intern": 4, "etc": 4, "correct": 4, "softwar": 4, "section": 4, "accord": 4, "ubuntu": 4, "22": 4, "04": 4, "apt": 4, "updat": 4, "fix": 4, "miss": 4, "y": 4, "properti": 4, "common": 4, "autotool": 4, "dev": 4, "automak": 4, "build": 4, "python3": 4, "pip": 4, "base": 4, "core": 4, "jre": 4, "ncbi": 4, "blast": 4, "nano": 4, "less": 4, "csh": 4, "hmmer": 4, "libboost": 4, "rf": 4, "var": 4, "lib": 4, "tmp": 4, "otherwis": 4, "work": 4, "properli": 4, "cmbi": 4, "archiv": 4, "ref": 4, "head": 4, "zip": 4, "unzip": 4, "autogen": 4, "sh": 4, "ln": 4, "usr": 4, "local": 4, "bin": 4, "mkdssp": 4, "soedinglab": 4, "hh": 4, "suit": 4, "releas": 4, "v3": 4, "avx2": 4, "tar": 4, "gz": 4, "mv": 4, "xvfz": 4, "perman": 4, "bashrc": 4, "profil": 4, "bash_profil": 4, "locat": 4, "wa": 4, "therefor": 4, "Then": 4, "rscript": 4, "e": 4, "repo": 4, "ev_coupl": 4, "pip3": 4, "debbiemarkslab": 4, "plmc": 4, "openmp32": 4, "cp": 4}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"analyz": 0, "modifi": 0, "esgemm": [0, 1, 2, 4], "output": 0, "raw": 0, "score": 0, "Their": 0, "interpret": 0, "entir": [0, 1], "singl": [0, 1], "point": [0, 1], "mutat": [0, 1], "landscap": [0, 1], "calcul": [0, 1], "select": 0, "multipl": [0, 1], "us": 1, "via": 1, "docker": 1, "requir": 1, "get": 1, "exampl": 1, "input": [1, 3], "data": 1, "obtain": 1, "predict": 1, "effect": 1, "subset": 1, "run": 1, "sever": 1, "job": 1, "welcom": 2, "s": 2, "document": 2, "content": 2, "indic": 2, "tabl": 2, "prepar": [3, 4], "your": 3, "own": 3, "msa": 3, "pdb": 3, "colabfold": 3, "instal": 4, "depend": 4, "sourc": [], "code": [], "environ": 4, "configur": 4, "default": 4, "conf": 4, "file": 4}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
\ No newline at end of file
;; Common Lisp style file for xindy
;; style file for xindy
;; filename: LatinRules.xdy
;;
;; Please note that this data file deliberately uses strings
;; with single non-ascii bytes. This is intentional and
;; follows the usage observed in similar xindy support files.
;;
;; It is based upon xindy's files lang/general/utf8.xdy and
;; lang/general/utf8-lang.xdy which implement
;; "a general sorting order for Western European languages".
;; "a general sorting order for Western European languages"
;;
;; The aim for Sphinx is to be able to index in a Cyrillic document
;; also terms using the Latin alphabets, inclusive of letters
......@@ -18,7 +14,7 @@
;;
;; So here we use only 0o266 or higher bytes.
;; (Ŋ, ŋ, IJ, and ij are absent from
;; lang/general/utf8.xdy and not included here.)
;; lang/general/utf8.xdy and not included here)
;; Contributed by the Sphinx team, 2018.
(define-letter-group "A" :prefixes ("¶"))
......
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\babel@aux[2]{}
\@nameuse{bbl@beforestart}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
......@@ -63,11 +64,12 @@
\newlabel{installation::doc}{{4}{9}{Installation}{chapter.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}Installing the dependencies:}{9}{section.4.1}\protected@file@percent }
\newlabel{installation:installing-the-dependencies}{{4.1}{9}{Installing the dependencies:}{section.4.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.2}Getting the source code and preparing the environment:}{9}{section.4.2}\protected@file@percent }
\newlabel{installation:getting-the-source-code-and-preparing-the-environment}{{4.2}{9}{Getting the source code and preparing the environment:}{section.4.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.3}Configuring default.conf file}{9}{section.4.3}\protected@file@percent }
\newlabel{installation:configuring-default-conf-file}{{4.3}{9}{Configuring default.conf file}{section.4.3}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {5}Indices and tables}{11}{chapter.5}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4.2}Preparation of the environment and installation of ESGEMME}{9}{section.4.2}\protected@file@percent }
\newlabel{installation:preparation-of-the-environment-and-installation-of-esgemme}{{4.2}{9}{Preparation of the environment and installation of ESGEMME}{section.4.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.3}Configuring default.conf file}{10}{section.4.3}\protected@file@percent }
\newlabel{installation:configuring-default-conf-file}{{4.3}{10}{Configuring default.conf file}{section.4.3}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {5}Indices and tables}{13}{chapter.5}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{index:indices-and-tables}{{5}{11}{Indices and tables}{chapter.5}{}}
\newlabel{index:indices-and-tables}{{5}{13}{Indices and tables}{chapter.5}{}}
\gdef \@abspage@last{17}
# Fdb version 3
["makeindex esgemme.idx"] 1685453958 "esgemme.idx" "esgemme.ind" "esgemme" 1686237775
"esgemme.idx" 1686237775 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex"
["makeindex esgemme.idx"] 1685453958 "esgemme.idx" "esgemme.ind" "esgemme" 1687357098
"esgemme.idx" 1687357098 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex"
(generated)
"esgemme.ilg"
"esgemme.ind"
["pdflatex"] 1686237775 "esgemme.tex" "esgemme.pdf" "esgemme" 1686237775
"/etc/texmf/web2c/texmf.cnf" 1685303669 475 c0e671620eb5563b2130f56340a5fde8 ""
["pdflatex"] 1687357098 "esgemme.tex" "esgemme.pdf" "esgemme" 1687357098
"/etc/texmf/web2c/texmf.cnf" 1686915816 475 c0e671620eb5563b2130f56340a5fde8 ""
"/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 ""
"/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 ""
"/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df ""
......@@ -29,70 +29,70 @@
"/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b ""
"/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 ""
"/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf" 1496785618 7008 9ff5fdcc865b01beca2b0fe4a46231d4 ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def" 1581719732 87344 ec128793fb5196bbcc1741e5366ddac1 ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1581719732 18844 909add1631725af40d27125357ea816e ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def" 1581719732 15529 e761dc130df77f0ce9717a25d1b52a95 ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1580769195 5220 42a6518b499d20676051f269c61f4d9a ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1643231327 147419 2058c0f5e6893b19c8f3ce95d177646c ""
"/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1643231327 5233 d5e383ed66bf272b71b1a90b596e21c6 ""
"/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b ""
"/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 ""
"/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b ""
"/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e ""
"/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1573336935 6902 30fdaf7dc5636b8e3afa306210c45cae ""
"/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1583617216 6501 4011d89d9621e0b0901138815ba5ff29 ""
"/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb ""
"/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed ""
"/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 ""
"/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 ""
"/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1576624944 13807 952b0226d4efca026f0e19dd266dcc22 ""
"/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1576624883 18552 1e1cc7b75da0dfaacce7cdcb27d306bf ""
"/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1600895880 17859 4409f8f50cd365c68e684407e5350b1b ""
"/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 ""
"/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty" 1593379760 20089 80423eac55aa175305d35b49e04fe23b ""
"/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c ""
"/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff ""
"/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1523134290 2211 ca7ce284ab93c8eecdc6029dc5ccbd73 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1523134290 4161 7f6eb9092061a11f87d08ed13515b48d ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1580683321 85660 baee036978c7a91f4e2bba43f05e5945 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1523134290 4116 32e6abd27229755a83a8b7f18e583890 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1523134290 2432 8ff93b1137020e8f21930562a874ae66 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1622667781 2222 da905dc1db75412efd2d8f67739f0596 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1622667781 4173 bc0410bcccdff806d6132d3c1ef35481 ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1636758526 87648 07fbb6e9169e00cb2a2f40b31b2dbf3c ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1636758526 4128 8eea906621b6639f7ba476a472036bbe ""
"/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1636758526 2444 926f379cc60fcf0c6e3fee2223b4370d ""
"/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d ""
"/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1580683321 3140 3b501b609b11ff7320ce1a19dbac0e3b ""
"/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1581632200 4947 0c2888dd88121ae675fc6e82213623ba ""
"/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1580683321 5050 8933a39ad74377accd18991c5eb90c58 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1580683321 1940 dd4f2aa11c89855a3c47d09758782ba5 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1580683321 23082 a0e9a5941c744eda6abe56770037a201 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1580683321 8446 9874cccac5fee462272c582807dbbf56 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1581112666 2821 2c0928feafd5527387e29a1af774d030 ""
"/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty" 1579038678 6078 f1cb470c9199e7110a27851508ed7a5c ""
"/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1622581934 3137 2366459cfce784001c7405ed16a872fb ""
"/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty" 1636758526 3034 3bfb87122e6fa8758225c0dd3cbaceba ""
"/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty" 1636758526 2462 754d6b31b2ab5a09bb72c348ace2ec75 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1622581934 4946 461cc78f6f26901410d9f1d725079cc6 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1622581934 5049 969aec05d5f39c43f8005910498fcf90 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1636758526 1939 e44505a18ba4edebb8b70993e32c6350 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1636758526 23203 8fbc410e29d3fd675970d5f9698c9c11 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1636758526 8448 96f18c76bf608a36ee6fbf021ac1dd32 ""
"/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1622581934 2894 55431114fc0e491ecee275edafd6c881 ""
"/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 ""
"/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1215522782 2883 427a7f7cb58418a0394dbd85c80668f6 ""
"/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1612650595 3574 ddc11a0ae1c579d351ed20d2319ad422 ""
"/usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 ""
"/usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 ""
"/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty" 1579991017 10793 d0af3aa11e27ae35ba4685b17597b122 ""
"/usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty" 1449445679 9937 7eb94c47265a0108f7a319db3c3b58b0 ""
"/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce ""
"/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1548974385 11128 a53805799bebfed6358fc1658a18e41f ""
"/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1578950756 43158 eb6545ca94a288335910480ca6755b55 ""
"/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1612734021 17086 7ed8cbc4d361ec87392817e0dd4f65ec ""
"/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1640123156 44023 c6f2f55a2bb9630fba10bfd488a5addd ""
"/usr/share/texlive/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d ""
"/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f ""
"/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 ""
"/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1515537368 17334 520b9b85ad8a2a48eda3f643e27a5179 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1580683321 16932 04729abe63b66ec59ea56edcd722b058 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1580683321 9067 1b996612394a52e1efe89c8bfe8a5892 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1580683321 2590 e3b24ff953e5b58d924f163d25380312 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1580683321 3976 d7fa7d81d2870d509d25b17d0245e735 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1601931164 19103 48d29b6e2a64cb717117ef65f107b404 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty" 1639603921 7197 eb6c1ebf41667a05cb50c23c19d5e8bc ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1622581934 18399 7e40f80366dffb22c0e7b70517db5cb4 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1636758526 7996 a8fb260d598dcaf305a7ae7b9c3e3229 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1622581934 2671 4de6781a30211fe0ea4c672e4a2a8166 ""
"/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1636758526 4009 187ea2dc3194cd5a76cd99a8d7a6c4d0 ""
"/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1579642962 50630 3d9728faf8630190cf601ce2cbe470d9 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1579642962 238752 60dd338d71b6a4ab2192131f73dc908b ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1579642962 13244 0070bcab7b5a88187847128d22faf4d8 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1579642962 14134 32b36577d311ddb6522413c7581ee968 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1579642962 122447 2f3bff59bea0a0fa94e11cc69e0f3066 ""
"/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1575152344 22520 c4c2dab203104295e1e618be7e5c0f5b ""
"/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def" 1580854751 25404 9d60f463a00d154207ec0048dee27cf0 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1623096352 49890 0bb76a5b745d92e86aed6f3f93e334f0 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def" 1623096352 1777 940b1aa83773bc035eb882e8d6842769 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1623096352 230915 97a8817f13de4e61bbc3592cb2caa995 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1612734870 13242 133e617c5eebffdd05e421624022b267 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1623096352 14132 c9404e8e78123ef0d1007c34d1d6da51 ""
"/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1623096352 117004 86586f287ddfad919a0a4bd68934277a ""
"/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1602274869 22521 d2fceb764a442a2001d257ef11db7618 ""
"/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1642022539 29921 f0f4f870357ebfb8fe58ed9ed4ee9b92 ""
"/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af ""
"/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 ""
"/usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 ""
......@@ -101,25 +101,21 @@
"/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e ""
"/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1575152444 3822 b53c749cd81352b4679a35b0dafefb95 ""
"/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty" 1536789184 2757 ea00cb4f4e9abc702916f74d3812ef67 ""
"/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1579802043 4151 bd592f37b856f80e699388b77e72d753 ""
"/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty" 1574631863 19963 36fd8e818f9f0f32e2db8413d4970122 ""
"/usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def" 1454715303 1168 efb94e82cc1584d4f62679f3487b5339 ""
"/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg" 1454715303 1920 2185073db458618f4a8a794158cf3681 ""
"/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty" 1566333938 27385 9f8042f65ac74237c472dbae6e437f90 ""
"/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1615762720 4288 94714aa7f535440f33181fec52a31963 ""
"/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 ""
"/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575674187 9715 b051d5b493d9fe5f4bc251462d039e5f ""
"/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b ""
"/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1571259403 48596 2b6a95da931c07a430b1a61904aaa42d ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1580683321 12560 ce3f59ceae9d9a27bfe037d6bf1d903c ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1580683321 12133 b1e3e65b69714dbfcc5e6c0b19d66b50 ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty" 1580683321 31532 04852e45d7c17cb384689d2f83b628d3 ""
"/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1625518490 48833 3b7b4cfab1a3d15596bfd3772a77ab65 ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1636758526 12694 6c23725d50ab9d1e2d3ce482c58ffcf3 ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1636758526 12892 3ffe092fc7f5d1cb9866f1bcb071d0d6 ""
"/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty" 1636758526 32262 2bb622a0aa56c4a7a5cbdfe9d122c15a ""
"/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd" 1137111002 1324 7b6c95370a64cd8c7620cbefefb53dba ""
"/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e ""
"/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 ""
"/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 ""
"/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 ""
"/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1463002160 55589 34128738f682d033422ca125f82e5d62 ""
"/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e ""
"/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1635798903 56029 3f7889dab51d620aa43177c391b7b190 ""
"/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1644012257 39432 7155514e09a3d69036fac785183a21c2 ""
"/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ec.enc" 1529098226 2457 aaabbccba4df2a7f7371410ee4e075a3 ""
"/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc" 1529098226 3124 3813fd4c981d99822890a2861b0d274c ""
"/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm" 1480098718 11796 b7bc3db132e822d2872ea50ba8fa7cc0 ""
......@@ -137,39 +133,38 @@
"/usr/share/texmf/tex/latex/tex-gyre/tgheros.sty" 1480098840 2130 2b41e80713f78d339e74c19d96fe70a1 ""
"/usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty" 1480098840 2211 af9b7d12507105a58a3e8e926996b827 ""
"/usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd" 1480098840 1160 de7b1cf70edab73c9f1704df2a9fdbbd ""
"/usr/share/texmf/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e ""
"/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1685303937 128028 f533b797fba58d231669ea19e894e23e ""
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1685506326 4791332 2906fb9114dfe18bf39728f7349fcfef ""
"esgemme.aux" 1686237775 6348 1244a872c7c4ec4cff5b0c77dffc5bc7 "pdflatex"
"/usr/share/texmf/web2c/texmf.cnf" 1644012257 39432 7155514e09a3d69036fac785183a21c2 ""
"/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1686916200 128028 f533b797fba58d231669ea19e894e23e ""
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1686916204 1405647 c55a0c388547b619d75d774fd8f2cdb7 ""
"esgemme.aux" 1687357098 6419 c32f711de29f755f1a8f1c5ee6077663 "pdflatex"
"esgemme.ind" 1686042164 0 d41d8cd98f00b204e9800998ecf8427e "makeindex esgemme.idx"
"esgemme.out" 1686237775 4671 f9636305672cbaa8157655b3e9e85a68 "pdflatex"
"esgemme.tex" 1686237774 18623 4ac2337e82ebd23f53589270d0e67939 ""
"esgemme.toc" 1686237775 1853 2379c1748ec7d176d556041991ae769a "pdflatex"
"sphinx.sty" 1686042164 44560 f9fbf51072c954d129c9bd5284cc4ccf ""
"sphinxhighlight.sty" 1686237774 7490 72d023191655734567e0798eade2a1f7 ""
"sphinxlatexadmonitions.sty" 1686042164 10989 c38302e64c2bb47779f086869b246760 ""
"esgemme.out" 1687357098 4691 484d3d84b85998e14ab085f1c3f73044 "pdflatex"
"esgemme.tex" 1687357097 23117 9962c0bbb1479fce569fa124d2a8ac13 ""
"esgemme.toc" 1687357098 1865 658ec1920d49935d82736b327430eefc "pdflatex"
"sphinx.sty" 1657784170 12780 919e6ba449302e2597e7722681a087c6 ""
"sphinxhighlight.sty" 1687357097 6679 76d10c62e0f0661410b46f5db6118e26 ""
"sphinxlatexadmonitions.sty" 1657784170 6238 2d867d769abf3f72abc17ef52adff78b ""
"sphinxlatexcontainers.sty" 1686042164 901 d3a3a1b7b2547f47ade2499350b5c420 ""
"sphinxlatexgraphics.sty" 1686042164 4840 a9578332b6f3b35e198751fb632c9b79 ""
"sphinxlatexindbibtoc.sty" 1686042164 2066 b93f8504d02f6337fde3074b179de55e ""
"sphinxlatexlists.sty" 1686042164 5139 c2de2a1d98d3c6ceedfe46505abd3c07 ""
"sphinxlatexliterals.sty" 1686042164 46048 2b66269d0ecf11768a14b5de4ddf9051 ""
"sphinxlatexliterals.sty" 1657784170 35719 daaa4295be807130a5df36ead18b83fa ""
"sphinxlatexnumfig.sty" 1686042164 4532 3633caf84afa1a98e1a060b7868202bb ""
"sphinxlatexobjects.sty" 1686042164 9067 1f9a0f04e0268b8abeb7d37165057523 ""
"sphinxlatexshadowbox.sty" 1686042164 5066 97a2be0d1dfdc98548b7461f1949b95f ""
"sphinxlatexstyleheadings.sty" 1686042164 3445 a1582a5f3b336dcffa71b5ca3d8fc31f ""
"sphinxlatexobjects.sty" 1657784170 9066 e76a2bc206b95eeeabf9b0331cad3113 ""
"sphinxlatexshadowbox.sty" 1657784170 3885 01355157c5580b34ec18031ea7a5e0e0 ""
"sphinxlatexstyleheadings.sty" 1657784170 3253 144b82f37e9d225d888cce45c19b8ed4 ""
"sphinxlatexstylepage.sty" 1686042164 3064 abce6c3018a84afee0afb08a431944ea ""
"sphinxlatexstyletext.sty" 1686042164 8232 280fdc24a7889c35e545cd62e6cba921 ""
"sphinxlatextables.sty" 1686042164 57830 16f2773b765508003aec5d08680f39b9 ""
"sphinxlatexstyletext.sty" 1657784170 6177 c18841ce3fafc366cd3b145f8faa4c37 ""
"sphinxlatextables.sty" 1657784170 21848 2827eb0b11b99b185a8b77317d3e131c ""
"sphinxmanual.cls" 1686042164 4241 7b0d7a37df7b5715fb0dbd585c52ecdb ""
"sphinxmessages.sty" 1686237774 745 3f5fcd6cdd7964ed608767954a8ced6f ""
"sphinxmessages.sty" 1687357097 745 3f5fcd6cdd7964ed608767954a8ced6f ""
"sphinxoptionsgeometry.sty" 1686042164 2061 47bb34b8ed8a78823eb0c886abfb9f4d ""
"sphinxoptionshyperref.sty" 1686042164 1094 79beb8b8a3f10784f8cce804e0f9d3aa ""
"sphinxpackageboxes.sty" 1686042164 36615 1d74c63e665ede6c648fa08c42ea70fb ""
"sphinxpackagefootnote.sty" 1686042164 15254 d93f70cf000a9adb198015bf1b2f136c ""
"sphinxpackagefootnote.sty" 1657784170 15217 dd26fe418b6fb1b26b18f042a7f43d40 ""
(generated)
"esgemme.toc"
"esgemme.pdf"
"esgemme.aux"
"esgemme.log"
"esgemme.idx"
"esgemme.log"
"esgemme.out"
"esgemme.pdf"
"esgemme.toc"
......@@ -5,244 +5,1014 @@ INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf
INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt
INPUT esgemme.tex
OUTPUT esgemme.log
INPUT ./sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT sphinxmanual.cls
INPUT ./sphinxmanual.cls
INPUT sphinxmanual.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap
OUTPUT esgemme.pdf
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/switch.def
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
INPUT ./sphinx.sty
INPUT ./sphinx.sty
INPUT sphinx.sty
INPUT ./sphinx.sty
INPUT ./sphinx.sty
INPUT ./sphinx.sty
INPUT ./sphinx.sty
INPUT ./sphinx.sty
INPUT sphinx.sty
INPUT ./sphinx.sty
INPUT sphinx.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT ./sphinxoptionshyperref.sty
INPUT sphinxoptionshyperref.sty
INPUT ./sphinxoptionshyperref.sty
INPUT sphinxoptionshyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT ./sphinxoptionsgeometry.sty
INPUT sphinxoptionsgeometry.sty
INPUT ./sphinxoptionsgeometry.sty
INPUT sphinxoptionsgeometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT ./sphinxlatexgraphics.sty
INPUT sphinxlatexgraphics.sty
INPUT ./sphinxlatexgraphics.sty
INPUT sphinxlatexgraphics.sty
INPUT sphinxpackageboxes.sty
INPUT sphinxpackageboxes.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT ./sphinxlatexadmonitions.sty
INPUT sphinxlatexadmonitions.sty
INPUT ./sphinxlatexadmonitions.sty
INPUT sphinxlatexadmonitions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT ./sphinxlatexliterals.sty
INPUT sphinxlatexliterals.sty
INPUT ./sphinxlatexliterals.sty
INPUT sphinxlatexliterals.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
INPUT ./sphinxlatexshadowbox.sty
INPUT sphinxlatexshadowbox.sty
INPUT ./sphinxlatexshadowbox.sty
INPUT sphinxlatexshadowbox.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
INPUT ./sphinxlatexcontainers.sty
INPUT sphinxlatexcontainers.sty
INPUT ./sphinxlatexcontainers.sty
INPUT sphinxlatexcontainers.sty
INPUT ./sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT sphinxhighlight.sty
INPUT ./sphinxhighlight.sty
INPUT sphinxhighlight.sty
INPUT ./sphinxlatextables.sty
INPUT sphinxlatextables.sty
INPUT ./sphinxlatextables.sty
INPUT sphinxlatextables.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
INPUT ./sphinxlatexnumfig.sty
INPUT sphinxlatexnumfig.sty
INPUT ./sphinxlatexnumfig.sty
INPUT sphinxlatexnumfig.sty
INPUT ./sphinxlatexlists.sty
INPUT sphinxlatexlists.sty
INPUT ./sphinxlatexlists.sty
INPUT sphinxlatexlists.sty
INPUT ./sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT sphinxpackagefootnote.sty
INPUT ./sphinxpackagefootnote.sty
INPUT sphinxpackagefootnote.sty
INPUT ./sphinxlatexindbibtoc.sty
INPUT sphinxlatexindbibtoc.sty
INPUT ./sphinxlatexindbibtoc.sty
INPUT sphinxlatexindbibtoc.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
INPUT ./sphinxlatexstylepage.sty
INPUT sphinxlatexstylepage.sty
INPUT ./sphinxlatexstylepage.sty
INPUT sphinxlatexstylepage.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
INPUT ./sphinxlatexstyleheadings.sty
INPUT sphinxlatexstyleheadings.sty
INPUT ./sphinxlatexstyleheadings.sty
INPUT sphinxlatexstyleheadings.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
INPUT ./sphinxlatexstyletext.sty
INPUT sphinxlatexstyletext.sty
INPUT ./sphinxlatexstyletext.sty
INPUT sphinxlatexstyletext.sty
INPUT ./sphinxlatexobjects.sty
INPUT sphinxlatexobjects.sty
INPUT ./sphinxlatexobjects.sty
INPUT sphinxlatexobjects.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
INPUT ./sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT sphinxmessages.sty
INPUT ./sphinxmessages.sty
INPUT sphinxmessages.sty
OUTPUT esgemme.idx
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
INPUT esgemme.aux
INPUT esgemme.aux
OUTPUT esgemme.aux
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT ./esgemme.aux
INPUT esgemme.aux
INPUT esgemme.aux
OUTPUT esgemme.aux
INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT ./esgemme.out
INPUT esgemme.out
INPUT ./esgemme.out
INPUT esgemme.out
INPUT ./esgemme.out
INPUT esgemme.out
INPUT ./esgemme.out
INPUT esgemme.out
INPUT ./esgemme.out
INPUT ./esgemme.out
OUTPUT esgemme.out
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm
......@@ -252,26 +1022,34 @@ INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap
INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
......@@ -280,6 +1058,7 @@ INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm
INPUT ./esgemme.toc
INPUT esgemme.toc
INPUT esgemme.toc
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmb.tfm
......@@ -292,6 +1071,8 @@ INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm
OUTPUT esgemme.toc
INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd
INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm
INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xbtt.tfm
......@@ -299,8 +1080,13 @@ INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm
INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd
INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ts1-qtmr.tfm
INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm
INPUT ./esgemme.ind
INPUT esgemme.ind
INPUT ./esgemme.ind
INPUT esgemme.ind
INPUT esgemme.aux
INPUT ./esgemme.out
......
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2023.5.31) 8 JUN 2023 17:22
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex 2023.6.16) 21 JUN 2023 16:18
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**esgemme.tex
(./esgemme.tex
LaTeX2e <2020-02-02> patch level 2
L3 programming layer <2020-02-14> (./sphinxmanual.cls
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-01-21> (./sphinxmanual.cls
Document Class: sphinxmanual 2019/12/01 v2.3.0 Document class (Sphinx manual)
(/usr/share/texlive/texmf-dist/tex/latex/base/report.cls
Document Class: report 2019/12/20 v1.4l Standard LaTeX document class
Document Class: report 2021/10/04 v1.4n Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
)
\c@part=\count167
\c@chapter=\count168
\c@section=\count169
\c@subsection=\count170
\c@subsubsection=\count171
\c@paragraph=\count172
\c@subparagraph=\count173
\c@figure=\count174
\c@table=\count175
File: size10.clo 2021/10/04 v1.4n Standard LaTeX file (size option)
)
\c@part=\count185
\c@chapter=\count186
\c@section=\count187
\c@subsection=\count188
\c@subsubsection=\count189
\c@paragraph=\count190
\c@subparagraph=\count191
\c@figure=\count192
\c@table=\count193
\abovecaptionskip=\skip47
\belowcaptionskip=\skip48
\bibindent=\dimen134
\bibindent=\dimen138
)
LaTeX Info: Redefining \and on input line 35.
)
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2018/08/11 v1.3c Input encoding file
\inpenc@prehook=\toks14
\inpenc@posthook=\toks15
Package: inputenc 2021/02/14 v1.3d Input encoding file
\inpenc@prehook=\toks16
\inpenc@posthook=\toks17
)
defining Unicode char U+00A0 (decimal 160)
defining Unicode char U+2500 (decimal 9472)
......@@ -40,68 +40,68 @@ Package: inputenc 2018/08/11 v1.3c Input encoding file
defining Unicode char U+2572 (decimal 9586)
(/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
Package: cmap 2008/03/06 v1.0h CMap support: searchable PDF
Package: cmap 2021/02/06 v1.0j CMap support: searchable PDF
)
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2020/02/11 v2.0o Standard LaTeX package
Package: fontenc 2021/04/29 v2.0v Standard LaTeX package
<<t1.cmap>>)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2020/01/20 v2.17e AMS math features
Package: amsmath 2021/10/15 v2.17l AMS math features
\@mathmargin=\skip49
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2000/06/29 v2.01 AMS text
Package: amstext 2021/08/26 v2.01 AMS text
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks16
\ex@=\dimen135
\@emptytoks=\toks18
\ex@=\dimen139
))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen136
\pmbraise@=\dimen140
)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 2016/03/08 v2.02 operator names
)
\inf@bad=\count176
LaTeX Info: Redefining \frac on input line 227.
\uproot@=\count177
\leftroot@=\count178
LaTeX Info: Redefining \overline on input line 389.
\classnum@=\count179
\DOTSCASE@=\count180
LaTeX Info: Redefining \ldots on input line 486.
LaTeX Info: Redefining \dots on input line 489.
LaTeX Info: Redefining \cdots on input line 610.
\Mathstrutbox@=\box45
\strutbox@=\box46
\big@size=\dimen137
LaTeX Font Info: Redeclaring font encoding OML on input line 733.
LaTeX Font Info: Redeclaring font encoding OMS on input line 734.
\macc@depth=\count181
\c@MaxMatrixCols=\count182
Package: amsopn 2021/08/26 v2.02 operator names
)
\inf@bad=\count194
LaTeX Info: Redefining \frac on input line 234.
\uproot@=\count195
\leftroot@=\count196
LaTeX Info: Redefining \overline on input line 399.
\classnum@=\count197
\DOTSCASE@=\count198
LaTeX Info: Redefining \ldots on input line 496.
LaTeX Info: Redefining \dots on input line 499.
LaTeX Info: Redefining \cdots on input line 620.
\Mathstrutbox@=\box50
\strutbox@=\box51
\big@size=\dimen141
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
\macc@depth=\count199
\c@MaxMatrixCols=\count266
\dotsspace@=\muskip16
\c@parentequation=\count183
\dspbrk@lvl=\count184
\tag@help=\toks17
\row@=\count185
\column@=\count186
\maxfields@=\count187
\andhelp@=\toks18
\eqnshift@=\dimen138
\alignsep@=\dimen139
\tagshift@=\dimen140
\tagwidth@=\dimen141
\totwidth@=\dimen142
\lineht@=\dimen143
\@envbody=\toks19
\c@parentequation=\count267
\dspbrk@lvl=\count268
\tag@help=\toks19
\row@=\count269
\column@=\count270
\maxfields@=\count271
\andhelp@=\toks20
\eqnshift@=\dimen142
\alignsep@=\dimen143
\tagshift@=\dimen144
\tagwidth@=\dimen145
\totwidth@=\dimen146
\lineht@=\dimen147
\@envbody=\toks21
\multlinegap=\skip50
\multlinetaggap=\skip51
\mathdisplay@stack=\toks20
LaTeX Info: Redefining \[ on input line 2859.
LaTeX Info: Redefining \] on input line 2860.
\mathdisplay@stack=\toks22
LaTeX Info: Redefining \[ on input line 2938.
LaTeX Info: Redefining \] on input line 2939.
)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
......@@ -115,46 +115,40 @@ LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
))
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
Package: babel 2020/02/14 3.40 The Babel package
(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def
File: switch.def 2020/02/14 3.40 Babel switching mechanism
)
(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
Language: english 2017/06/06 v3.3r English support from the babel system
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
File: babel.def 2020/02/14 3.40 Babel common definitions
\babel@savecnt=\count188
\U@D=\dimen144
Package: babel 2022/01/26 3.70 The Babel package
\babel@savecnt=\count272
\U@D=\dimen148
\l@unhyphenated=\language3
(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def)
\bbl@readstream=\read2
\bbl@dirlevel=\count189
)
Package babel Info: \l@british = using hyphenrules for english
(babel) (\language0) on input line 82.
Package babel Info: \l@UKenglish = using hyphenrules for english
(babel) (\language0) on input line 83.
Package babel Info: \l@canadian = using hyphenrules for english
(babel) (\language0) on input line 102.
Package babel Info: \l@australian = using hyphenrules for english
(babel) (\language0) on input line 105.
Package babel Info: \l@newzealand = using hyphenrules for english
(babel) (\language0) on input line 108.
\bbl@dirlevel=\count273
(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
Language: english 2017/06/06 v3.3r English support from the babel system
Package babel Info: Hyphen rules for 'british' set to \l@english
(babel) (\language0). Reported on input line 82.
Package babel Info: Hyphen rules for 'UKenglish' set to \l@english
(babel) (\language0). Reported on input line 83.
Package babel Info: Hyphen rules for 'canadian' set to \l@english
(babel) (\language0). Reported on input line 102.
Package babel Info: Hyphen rules for 'australian' set to \l@english
(babel) (\language0). Reported on input line 105.
Package babel Info: Hyphen rules for 'newzealand' set to \l@english
(babel) (\language0). Reported on input line 108.
))
(/usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty
Package: tgtermes 2009/09/27 v1.2 TeX Gyre Termes as default roman family
(/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty
Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO)
Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks21
\KV@toks@=\toks23
)
(/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO)
Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
)
(/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
......@@ -171,32 +165,39 @@ Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters)
\py=\skip56
\pyy=\skip57
\pxx=\skip58
\c@AlphaCnt=\count190
\c@AlphaDecCnt=\count191
\c@AlphaCnt=\count274
\c@AlphaDecCnt=\count275
) (./sphinx.sty
Package: sphinx 2023/03/19 v6.2.0 LaTeX package (Sphinx markup)
Package: sphinx 2021/01/27 v4.0.0 LaTeX package (Sphinx markup)
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
Package: xcolor 2021/10/31 v2.13 LaTeX color extensions (UK)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 225.
Package xcolor Info: Driver file: pdftex.def on input line 227.
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352.
Package xcolor Info: Model `RGB' extended on input line 1364.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
)
File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex
)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1352.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1356.
Package xcolor Info: Model `RGB' extended on input line 1368.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1370.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1371.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1372.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1373.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1374.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1375.
)
\sphinxverbatimsep=\dimen149
\sphinxverbatimborder=\dimen150
\sphinxshadowsep=\dimen151
\sphinxshadowsize=\dimen152
\sphinxshadowrule=\dimen153
\spx@notice@border=\dimen154
(./sphinxoptionshyperref.sty
File: sphinxoptionshyperref.sty 2021/01/27 hyperref
) (./sphinxoptionsgeometry.sty
......@@ -207,51 +208,46 @@ Package: textcomp 2020/02/02 v2.0n Standard LaTeX package
)
(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count192
\float@exts=\toks22
\float@box=\box47
\@float@everytoks=\toks23
\@floatcapt=\box48
\c@float@type=\count276
\float@exts=\toks24
\float@box=\box52
\@float@everytoks=\toks25
\@floatcapt=\box53
)
(/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
\wrapoverhang=\dimen145
\WF@size=\dimen146
\c@WF@wrappedlines=\count193
\WF@box=\box49
\WF@everypar=\toks24
\wrapoverhang=\dimen155
\WF@size=\dimen156
\c@WF@wrappedlines=\count277
\WF@box=\box54
\WF@everypar=\toks26
Package: wrapfig 2003/01/31 v 3.6
)
(/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
Package: capt-of 2009/12/29 v0.2 standard captions outside of floats
)
(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi)
\c@tracingmulticols=\count194
\mult@box=\box50
\multicol@leftmargin=\dimen147
\c@unbalance=\count195
\c@collectmore=\count196
\doublecol@number=\count197
\multicoltolerance=\count198
\multicolpretolerance=\count199
\full@width=\dimen148
\page@free=\dimen149
\premulticols=\dimen150
\postmulticols=\dimen151
Package: multicol 2021/10/28 v1.9b multicolumn formatting (FMi)
\c@tracingmulticols=\count278
\mult@box=\box55
\multicol@leftmargin=\dimen157
\c@unbalance=\count279
\c@collectmore=\count280
\doublecol@number=\count281
\multicoltolerance=\count282
\multicolpretolerance=\count283
\full@width=\dimen158
\page@free=\dimen159
\premulticols=\dimen160
\postmulticols=\dimen161
\multicolsep=\skip59
\multicolbaselineskip=\skip60
\partial@page=\box51
\last@line=\box52
\maxbalancingoverflow=\dimen152
\mult@rightbox=\box53
\mult@grightbox=\box54
\mult@gfirstbox=\box55
\mult@firstbox=\box56
\@tempa=\box57
\@tempa=\box58
\@tempa=\box59
\@tempa=\box60
\@tempa=\box61
\partial@page=\box56
\last@line=\box57
\maxbalancingoverflow=\dimen162
\mult@rightbox=\box58
\mult@grightbox=\box59
\mult@firstbox=\box60
\mult@gfirstbox=\box61
\@tempa=\box62
\@tempa=\box63
\@tempa=\box64
......@@ -284,109 +280,66 @@ Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi)
\@tempa=\box91
\@tempa=\box92
\@tempa=\box93
\c@minrows=\count266
\c@columnbadness=\count267
\c@finalcolumnbadness=\count268
\last@try=\dimen153
\multicolovershoot=\dimen154
\multicolundershoot=\dimen155
\mult@nat@firstbox=\box94
\colbreak@box=\box95
\mc@col@check@num=\count269
\@tempa=\box94
\@tempa=\box95
\@tempa=\box96
\@tempa=\box97
\c@minrows=\count284
\c@columnbadness=\count285
\c@finalcolumnbadness=\count286
\last@try=\dimen163
\multicolovershoot=\dimen164
\multicolundershoot=\dimen165
\mult@nat@firstbox=\box98
\colbreak@box=\box99
\mc@col@check@num=\count287
)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 105.
Package graphics Info: Driver file: pdftex.def on input line 107.
)
\Gin@req@height=\dimen156
\Gin@req@width=\dimen157
\Gin@req@height=\dimen166
\Gin@req@width=\dimen167
)
(./sphinxlatexgraphics.sty
File: sphinxlatexgraphics.sty 2021/01/27 graphics
\spx@image@maxheight=\dimen158
\spx@image@box=\box96
) (./sphinxpackageboxes.sty
Package: sphinxpackageboxes 2023/03/19 v6.2.0 advanced colored boxes
(/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty
Package: pict2e 2019/08/20 v0.3c Improved picture commands (HjG,RN,JT)
(/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg
File: pict2e.cfg 2016/02/05 v0.1u pict2e configuration for teTeX/TeXLive
)
Package pict2e Info: Driver file: pdftex.def on input line 119.
Package pict2e Info: Driver file for pict2e: p2e-pdftex.def on input line 121.
(/usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def
File: p2e-pdftex.def 2016/02/05 v0.1u Driver-dependant file (RN,HjG,JT)
)
\pIIe@GRAPH=\toks25
\@arclen=\dimen159
\@arcrad=\dimen160
\@tempdimd=\dimen161
)
(/usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty
Package: ellipse 2004/11/05 v1.0 .dtx ellipse file
)
\spx@tempboxa=\box97
\spx@tempboxb=\box98
\spx@boxes@border=\dimen162
\spx@boxes@border@top=\dimen163
\spx@boxes@border@right=\dimen164
\spx@boxes@border@bottom=\dimen165
\spx@boxes@border@left=\dimen166
\spx@boxes@padding@top=\dimen167
\spx@boxes@padding@right=\dimen168
\spx@boxes@padding@bottom=\dimen169
\spx@boxes@padding@left=\dimen170
\spx@boxes@shadow@xoffset=\dimen171
\spx@boxes@shadow@yoffset=\dimen172
\spx@boxes@radius@topleft@x=\dimen173
\spx@boxes@radius@topright@x=\dimen174
\spx@boxes@radius@bottomright@x=\dimen175
\spx@boxes@radius@bottomleft@x=\dimen176
\spx@boxes@radius@topleft@y=\dimen177
\spx@boxes@radius@topright@y=\dimen178
\spx@boxes@radius@bottomright@y=\dimen179
\spx@boxes@radius@bottomleft@y=\dimen180
)
(./sphinxlatexadmonitions.sty
File: sphinxlatexadmonitions.sty 2023/03/19 admonitions
\spx@image@maxheight=\dimen168
\spx@image@box=\box100
) (./sphinxlatexadmonitions.sty
File: sphinxlatexadmonitions.sty 2021/01/27 admonitions
(/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks
\OuterFrameSep=\skip61
\fb@frw=\dimen181
\fb@frh=\dimen182
\FrameRule=\dimen183
\FrameSep=\dimen184
)
\spx@notice@border=\dimen185
)
\fb@frw=\dimen169
\fb@frh=\dimen170
\FrameRule=\dimen171
\FrameSep=\dimen172
))
(./sphinxlatexliterals.sty
File: sphinxlatexliterals.sty 2023/04/01 code-blocks and parsed literals
File: sphinxlatexliterals.sty 2021/12/06 code-blocks and parsed literals
(/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
Package: fancyvrb 2020/01/13 v3.5 verbatim text (tvz,hv)
\FV@CodeLineNo=\count270
Package: fancyvrb 2021/12/21 4.1b verbatim text (tvz,hv)
\FV@CodeLineNo=\count288
\FV@InFile=\read3
\FV@TabBox=\box99
\c@FancyVerbLine=\count271
\FV@StepNumber=\count272
\FV@TabBox=\box101
\c@FancyVerbLine=\count289
\FV@StepNumber=\count290
\FV@OutFile=\write3
)
(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
Package: alltt 1997/06/16 v2.0g defines alltt environment
Package: alltt 2021/01/29 v2.0g defines alltt environment
)
(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba
......@@ -395,113 +348,88 @@ tim
(/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
Package: needspace 2010/09/12 v1.3d reserve vertical space
)
\sphinxcontinuationbox=\box100
\sphinxvisiblespacebox=\box101
\sphinxVerbatim@TitleBox=\box102
\sphinxVerbatim@ContentsBox=\box103
\sphinxcontinuationbox=\box102
\sphinxvisiblespacebox=\box103
\sphinxVerbatim@TitleBox=\box104
\sphinxVerbatim@ContentsBox=\box105
\spx@scratchbox=\box106
)
(./sphinxlatexshadowbox.sty
File: sphinxlatexshadowbox.sty 2023/03/19 sphinxShadowBox
File: sphinxlatexshadowbox.sty 2021/01/27 sphinxShadowBox
) (./sphinxlatexcontainers.sty
File: sphinxlatexcontainers.sty 2021/05/03 containers
)
(./sphinxhighlight.sty
Package: sphinxhighlight 2022/06/30 stylesheet for highlighting with pygments
Package: sphinxhighlight 2016/05/29 stylesheet for highlighting with pygments
) (./sphinxlatextables.sty
File: sphinxlatextables.sty 2022/08/15 tables
File: sphinxlatextables.sty 2021/01/27 tables
(/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
Package: tabulary 2014/06/11 v0.10 tabulary package (DPC)
(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
Package: array 2019/08/31 v2.4l Tabular extension package (FMi)
\col@sep=\dimen186
\ar@mcellbox=\box104
\extrarowheight=\dimen187
\NC@list=\toks26
Package: array 2021/10/04 v2.5f Tabular extension package (FMi)
\col@sep=\dimen173
\ar@mcellbox=\box107
\extrarowheight=\dimen174
\NC@list=\toks27
\extratabsurround=\skip62
\backup@length=\skip63
\ar@cellbox=\box105
\ar@cellbox=\box108
)
\TY@count=\count273
\TY@linewidth=\dimen188
\tymin=\dimen189
\tymax=\dimen190
\TY@tablewidth=\dimen191
\TY@count=\count291
\TY@linewidth=\dimen175
\tymin=\dimen176
\tymax=\dimen177
\TY@tablewidth=\dimen178
)
(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
Package: longtable 2020/01/07 v4.13 Multi-page Table package (DPC)
Package: longtable 2021-09-01 v4.17 Multi-page Table package (DPC)
\LTleft=\skip64
\LTright=\skip65
\LTpre=\skip66
\LTpost=\skip67
\LTchunksize=\count274
\LTcapwidth=\dimen192
\LT@head=\box106
\LT@firsthead=\box107
\LT@foot=\box108
\LT@lastfoot=\box109
\LT@cols=\count275
\LT@rows=\count276
\c@LT@tables=\count277
\c@LT@chunks=\count278
\LT@p@ftn=\toks27
\LTchunksize=\count292
\LTcapwidth=\dimen179
\LT@head=\box109
\LT@firsthead=\box110
\LT@foot=\box111
\LT@lastfoot=\box112
\LT@gbox=\box113
\LT@cols=\count293
\LT@rows=\count294
\c@LT@tables=\count295
\c@LT@chunks=\count296
\LT@p@ftn=\toks28
)
(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages
\@vwid@box=\box110
\sift@deathcycles=\count279
\@vwid@loff=\dimen193
\@vwid@roff=\dimen194
)
\sphinx@TY@tablewidth=\dimen195
(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
Package: colortbl 2020/01/04 v1.0e Color table columns (DPC)
\everycr=\toks28
\minrowclearance=\skip68
)
\rownum=\count280
(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty
Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
\heavyrulewidth=\dimen196
\lightrulewidth=\dimen197
\cmidrulewidth=\dimen198
\belowrulesep=\dimen199
\belowbottomsep=\dimen256
\aboverulesep=\dimen257
\abovetopsep=\dimen258
\cmidrulesep=\dimen259
\cmidrulekern=\dimen260
\defaultaddspace=\dimen261
\@cmidla=\count281
\@cmidlb=\count282
\@aboverulesep=\dimen262
\@belowrulesep=\dimen263
\@thisruleclass=\count283
\@lastruleclass=\count284
\@thisrulewidth=\dimen264
))
\@vwid@box=\box114
\sift@deathcycles=\count297
\@vwid@loff=\dimen180
\@vwid@roff=\dimen181
)
\sphinx@TY@tablewidth=\dimen182
)
(./sphinxlatexnumfig.sty
File: sphinxlatexnumfig.sty 2021/01/27 numbering
) (./sphinxlatexlists.sty
File: sphinxlatexlists.sty 2021/12/20 lists
\spx@lineitemlabel=\toks29
)
\c@sphinxscope=\count285
\c@sphinxscope=\count298
(./sphinxpackagefootnote.sty
Package: sphinxpackagefootnote 2022/08/15 v5.3.0 Sphinx custom footnotehyper pa
Package: sphinxpackagefootnote 2022/02/12 v4.5.0 Sphinx custom footnotehyper pa
ckage (Sphinx team)
\FNH@notes=\box111
\FNH@notes=\box115
\FNH@toks=\toks30
\FNH@width=\dimen265
\c@sphinxfootnotemark=\count286
\FNH@width=\dimen183
\c@sphinxfootnotemark=\count299
) (./sphinxlatexindbibtoc.sty
File: sphinxlatexindbibtoc.sty 2021/01/27 index, bib., toc
(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
Package: makeidx 2014/09/29 v1.0m Standard LaTeX package
Package: makeidx 2021/10/04 v1.0m Standard LaTeX package
))
(./sphinxlatexstylepage.sty
File: sphinxlatexstylepage.sty 2021/01/27 page styling
......@@ -514,41 +442,41 @@ Rollback for package 'parskip' requested -> version 'v1'.
Package: parskip 2001/04/09 non-zero parskip adjustments
))
(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
Package: fancyhdr 2019/01/31 v3.10 Extensive control of page headers and footer
s
\f@nch@headwidth=\skip69
\f@nch@O@elh=\skip70
\f@nch@O@erh=\skip71
\f@nch@O@olh=\skip72
\f@nch@O@orh=\skip73
\f@nch@O@elf=\skip74
\f@nch@O@erf=\skip75
\f@nch@O@olf=\skip76
\f@nch@O@orf=\skip77
Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and foote
rs
\f@nch@headwidth=\skip68
\f@nch@O@elh=\skip69
\f@nch@O@erh=\skip70
\f@nch@O@olh=\skip71
\f@nch@O@orh=\skip72
\f@nch@O@elf=\skip73
\f@nch@O@erf=\skip74
\f@nch@O@olf=\skip75
\f@nch@O@orf=\skip76
))
(./sphinxlatexstyleheadings.sty
File: sphinxlatexstyleheadings.sty 2023/02/11 headings
File: sphinxlatexstyleheadings.sty 2021/01/27 headings
(/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
Package: titlesec 2019/10/16 v2.13 Sectioning titles
\ttl@box=\box112
\beforetitleunit=\skip78
\aftertitleunit=\skip79
\ttl@plus=\dimen266
\ttl@minus=\dimen267
Package: titlesec 2021/07/05 v2.14 Sectioning titles
\ttl@box=\box116
\beforetitleunit=\skip77
\aftertitleunit=\skip78
\ttl@plus=\dimen184
\ttl@minus=\dimen185
\ttl@toksa=\toks31
\titlewidth=\dimen268
\titlewidthlast=\dimen269
\titlewidthfirst=\dimen270
\titlewidth=\dimen186
\titlewidthlast=\dimen187
\titlewidthfirst=\dimen188
))
(./sphinxlatexstyletext.sty
File: sphinxlatexstyletext.sty 2023/03/26 text styling
File: sphinxlatexstyletext.sty 2021/12/06 text styling
) (./sphinxlatexobjects.sty
File: sphinxlatexobjects.sty 2022/01/13 documentation environments
\sphinxsignaturesep=\skip80
\py@argswidth=\skip81
\lineblockindentation=\skip82
\DUlineblockindent=\skip83
\sphinxsignaturesep=\skip79
\py@argswidth=\skip80
\lineblockindentation=\skip81
\DUlineblockindent=\skip82
))
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
Package: geometry 2020/01/02 v5.9 Page Geometry
......@@ -557,26 +485,26 @@ Package: geometry 2020/01/02 v5.9 Page Geometry
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
Package: iftex 2019/11/07 v1.0c TeX engine tests
Package: iftex 2020/03/06 v1.0d TeX engine tests
))
\Gm@cnth=\count287
\Gm@cntv=\count288
\c@Gm@tempcnt=\count289
\Gm@bindingoffset=\dimen271
\Gm@wd@mp=\dimen272
\Gm@odd@mp=\dimen273
\Gm@even@mp=\dimen274
\Gm@layoutwidth=\dimen275
\Gm@layoutheight=\dimen276
\Gm@layouthoffset=\dimen277
\Gm@layoutvoffset=\dimen278
\Gm@cnth=\count300
\Gm@cntv=\count301
\c@Gm@tempcnt=\count302
\Gm@bindingoffset=\dimen189
\Gm@wd@mp=\dimen190
\Gm@odd@mp=\dimen191
\Gm@even@mp=\dimen192
\Gm@layoutwidth=\dimen193
\Gm@layoutheight=\dimen194
\Gm@layouthoffset=\dimen195
\Gm@layoutvoffset=\dimen196
\Gm@dimlist=\toks32
)
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
Package: hyperref 2020/01/14 v7.00d Hypertext links for LaTeX
Package: hyperref 2021-06-07 v7.00m Hypertext links for LaTeX
(/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty
Package: pdftexcmds 2019/11/24 v0.31 Utility functions of pdfTeX for LuaTeX (HO
(/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO
)
(/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty
......@@ -601,47 +529,50 @@ Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
(/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty
Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
)
\@linkdim=\dimen279
\Hy@linkcounter=\count290
\Hy@pagecounter=\count291
\@linkdim=\dimen197
\Hy@linkcounter=\count303
\Hy@pagecounter=\count304
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
File: pd1enc.def 2020/01/14 v7.00d Hyperref: PDFDocEncoding definition (HO)
File: pd1enc.def 2021-06-07 v7.00m Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
)
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
File: hyperref-langpatches.def 2021-06-07 v7.00m Hyperref: patches for babel la
nguages
)
(/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
)
(/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty
Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
)
\Hy@SavedSpaceFactor=\count292
\pdfmajorversion=\count293
Package hyperref Info: Option `unicode' set `true' on input line 4421.
\Hy@SavedSpaceFactor=\count305
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
File: puenc.def 2020/01/14 v7.00d Hyperref: PDF Unicode definition (HO)
File: puenc.def 2021-06-07 v7.00m Hyperref: PDF Unicode definition (HO)
Now handling font encoding PU ...
... no UTF-8 mapping file for font encoding PU
)
Package hyperref Info: Option `colorlinks' set `true' on input line 4421.
Package hyperref Info: Option `breaklinks' set `true' on input line 4421.
Package hyperref Info: Hyper figures OFF on input line 4547.
Package hyperref Info: Link nesting OFF on input line 4552.
Package hyperref Info: Hyper index ON on input line 4555.
Package hyperref Info: Plain pages OFF on input line 4562.
Package hyperref Info: Backreferencing OFF on input line 4567.
Package hyperref Info: Option `unicode' set `true' on input line 4073.
Package hyperref Info: Option `colorlinks' set `true' on input line 4073.
Package hyperref Info: Option `breaklinks' set `true' on input line 4073.
Package hyperref Info: Hyper figures OFF on input line 4192.
Package hyperref Info: Link nesting OFF on input line 4197.
Package hyperref Info: Hyper index ON on input line 4200.
Package hyperref Info: Plain pages OFF on input line 4207.
Package hyperref Info: Backreferencing OFF on input line 4212.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4800.
\c@Hy@tempcnt=\count294
Package hyperref Info: Bookmarks ON on input line 4445.
\c@Hy@tempcnt=\count306
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip17
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
LaTeX Info: Redefining \url on input line 5159.
\XeTeXLinkMargin=\dimen280
LaTeX Info: Redefining \url on input line 4804.
\XeTeXLinkMargin=\dimen198
(/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
......@@ -650,37 +581,39 @@ Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
)
))
\Fld@menulength=\count295
\Field@Width=\dimen281
\Fld@charsize=\dimen282
Package hyperref Info: Hyper figures OFF on input line 6430.
Package hyperref Info: Link nesting OFF on input line 6435.
Package hyperref Info: Hyper index ON on input line 6438.
Package hyperref Info: backreferencing OFF on input line 6445.
Package hyperref Info: Link coloring ON on input line 6448.
Package hyperref Info: Link coloring with OCG OFF on input line 6455.
Package hyperref Info: PDF/A mode OFF on input line 6460.
LaTeX Info: Redefining \ref on input line 6500.
LaTeX Info: Redefining \pageref on input line 6504.
(/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty
Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO)
)
\Hy@abspage=\count296
\c@Item=\count297
\c@Hfootnote=\count298
\Fld@menulength=\count307
\Field@Width=\dimen199
\Fld@charsize=\dimen256
Package hyperref Info: Hyper figures OFF on input line 6076.
Package hyperref Info: Link nesting OFF on input line 6081.
Package hyperref Info: Hyper index ON on input line 6084.
Package hyperref Info: backreferencing OFF on input line 6091.
Package hyperref Info: Link coloring ON on input line 6094.
Package hyperref Info: Link coloring with OCG OFF on input line 6101.
Package hyperref Info: PDF/A mode OFF on input line 6106.
LaTeX Info: Redefining \ref on input line 6146.
LaTeX Info: Redefining \pageref on input line 6150.
(/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty
Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi
package with kernel methods
)
\Hy@abspage=\count308
\c@Item=\count309
\c@Hfootnote=\count310
)
Package hyperref Info: Driver (autodetected): hpdftex.
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
File: hpdftex.def 2020/01/14 v7.00d Hyperref driver for pdfTeX
File: hpdftex.def 2021-06-07 v7.00m Hyperref driver for pdfTeX
(/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty
Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO)
Package atveryend Info: \enddocument detected (standard20110627).
(/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty
Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac
kage
with kernel methods
)
\Fld@listcount=\count299
\c@bookmark@seq@number=\count300
\Fld@listcount=\count311
\c@bookmark@seq@number=\count312
(/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
......@@ -691,7 +624,7 @@ Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
86.
)
\Hy@SectionHShift=\skip84
\Hy@SectionHShift=\skip83
)
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
Package: hypcap 2016/05/16 v1.12 Adjusting the anchors of captions (HO)
......@@ -704,49 +637,50 @@ Package: sphinxmessages 2019/01/04 v2.0 Localized LaTeX macros (Sphinx team)
Writing index file esgemme.idx
(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
File: l3backend-pdfmode.def 2020-02-03 L3 backend support: PDF mode
\l__kernel_color_stack_int=\count301
\l__pdf_internal_box=\box113
LaTeX Font Info: Trying to load font information for T1+qtm on input line 70
.
(/usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
File: t1qtm.fd 2009/09/25 v1.2 font definition file for T1/qtm
)
(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2022-01-12 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count313
\l__pdf_internal_box=\box117
)
(./esgemme.aux)
\openout1 = `esgemme.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 73.
LaTeX Font Info: ... okay on input line 73.
LaTeX Font Info: Trying to load font information for T1+qtm on input line 73
.
(/usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd
File: t1qtm.fd 2009/09/25 v1.2 font definition file for T1/qtm
)
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 70.
LaTeX Font Info: ... okay on input line 70.
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count302
\scratchdimen=\dimen283
\scratchbox=\box114
\nofMPsegments=\count303
\nofMParguments=\count304
\scratchcounter=\count314
\scratchdimen=\dimen257
\scratchbox=\box118
\nofMPsegments=\count315
\nofMParguments=\count316
\everyMPshowfont=\toks33
\MPscratchCnt=\count305
\MPscratchDim=\dimen284
\MPnumerator=\count306
\makeMPintoPDFobject=\count307
\MPscratchCnt=\count317
\MPscratchDim=\dimen258
\MPnumerator=\count318
\makeMPintoPDFobject=\count319
\everyMPtoPDFconversion=\toks34
) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
......@@ -757,7 +691,7 @@ Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
\c@literalblock=\count308
\c@literalblock=\count320
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
......@@ -793,10 +727,9 @@ e
* \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
\AtBeginShipoutBox=\box115
Package hyperref Info: Link coloring ON on input line 73.
Package hyperref Info: Link coloring ON on input line 70.
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section
(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
......@@ -804,29 +737,29 @@ Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
)
\c@section@level=\count309
\c@section@level=\count321
)
LaTeX Info: Redefining \ref on input line 73.
LaTeX Info: Redefining \pageref on input line 73.
LaTeX Info: Redefining \nameref on input line 73.
LaTeX Info: Redefining \ref on input line 70.
LaTeX Info: Redefining \pageref on input line 70.
LaTeX Info: Redefining \nameref on input line 70.
(./esgemme.out) (./esgemme.out)
\@outlinefile=\write5
\openout5 = `esgemme.out'.
Package hyperref Info: Option `pageanchor' set `false' on input line 81.
LaTeX Font Info: Trying to load font information for T1+qhv on input line 81
Package hyperref Info: Option `pageanchor' set `false' on input line 78.
LaTeX Font Info: Trying to load font information for T1+qhv on input line 78
.
(/usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd
File: t1qhv.fd 2009/09/25 v1.2 font definition file for T1/qhv
)<<ot1.cmap>><<oml.cmap>><<oms.cmap>><<omx.cmap>>
LaTeX Font Info: Trying to load font information for U+msa on input line 81.
LaTeX Font Info: Trying to load font information for U+msa on input line 78.
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Trying to load font information for U+msb on input line 81.
LaTeX Font Info: Trying to load font information for U+msb on input line 78.
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
......@@ -847,14 +780,14 @@ File: umsb.fd 2013/01/14 v3.01 AMS symbols B
]
Chapter 1.
LaTeX Font Info: Trying to load font information for T1+txtt on input line 1
11.
08.
(/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd
File: t1txtt.fd 2000/12/15 v3.1
) [1
]
LaTeX Font Info: Font shape `T1/txtt/b/n' in size <10> not available
(Font) Font shape `T1/txtt/bx/n' tried instead on input line 160.
(Font) Font shape `T1/txtt/bx/n' tried instead on input line 157.
[2] [3]
[4
......@@ -867,34 +800,33 @@ Chapter 3.
] [8]
Chapter 4.
LaTeX Font Info: Trying to load font information for TS1+qtm on input line 4
74.
71.
(/usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd
File: ts1qtm.fd 2009/09/25 v1.2 font definition file for TS1/qtm
) [9
] [10
]
Underfull \hbox (badness 5490) in paragraph at lines 550--552
\T1/qtm/m/n/10 master/ && ./au-to-gen.sh && ./con-fig-ure && make && sudo make
in-stall && sudo ln -s
[]
[10] [11] [12
]
Chapter 5.
(./esgemme.ind)
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 547.
[11]
Package atveryend Info: Empty hook `AfterLastShipout' on input line 547.
(./esgemme.aux)
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 547.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 547.
(./esgemme.ind) [13] (./esgemme.aux)
Package rerunfilecheck Info: File `esgemme.out' has not changed.
(rerunfilecheck) Checksum: F9636305672CBAA8157655B3E9E85A68;4671.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 547.
(rerunfilecheck) Checksum: 484D3D84B85998E14AB085F1C3F73044;4691.
)
Here is how much of TeX's memory you used:
15105 strings out of 483183
228681 string characters out of 5966292
499733 words of memory out of 5000000
29689 multiletter control sequences out of 15000+600000
580415 words of font info for 63 fonts, out of 8000000 for 9000
14619 strings out of 480247
232773 string characters out of 5896151
571746 words of memory out of 5000000
32154 multiletter control sequences out of 15000+600000
520188 words of font info for 68 fonts, out of 8000000 for 9000
15 hyphenation exceptions out of 8191
38i,11n,51p,432b,613s stack positions out of 5000i,500n,10000p,200000b,80000s
70i,11n,76p,563b,568s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc}{/usr/share/texmf/fonts/
enc/dvips/tex-gyre/q-ec.enc}</usr/share/texlive/texmf-dist/fonts/type1/public/a
msfonts/cm/cmmi5.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts
......@@ -903,10 +835,10 @@ e/texmf/fonts/type1/public/tex-gyre/qhvbi.pfb></usr/share/texmf/fonts/type1/pub
lic/tex-gyre/qtmb.pfb></usr/share/texmf/fonts/type1/public/tex-gyre/qtmr.pfb></
usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xbtt.pfb></usr/share/
texlive/texmf-dist/fonts/type1/public/txfonts/t1xtt.pfb>
Output written on esgemme.pdf (15 pages, 152415 bytes).
Output written on esgemme.pdf (17 pages, 157441 bytes).
PDF statistics:
243 PDF objects out of 1000 (max. 8388607)
210 compressed objects within 3 object streams
49 named destinations out of 1000 (max. 500000)
255 PDF objects out of 1000 (max. 8388607)
219 compressed objects within 3 object streams
51 named destinations out of 1000 (max. 500000)
173 words of extra memory for PDF output out of 10000 (max. 10000000)
......@@ -14,6 +14,6 @@
\BOOKMARK [1][-]{section.3.1}{\376\377\000P\000r\000e\000p\000a\000r\000i\000n\000g\000\040\000Y\000o\000u\000r\000\040\000I\000n\000p\000u\000t\000\040\000M\000S\000A\000\040\000a\000n\000d\000\040\000P\000D\000B\000\040\000w\000i\000t\000h\000\040\000C\000o\000l\000a\000b\000f\000o\000l\000d}{chapter.3}% 14
\BOOKMARK [0][-]{chapter.4}{\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n}{}% 15
\BOOKMARK [1][-]{section.4.1}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000t\000h\000e\000\040\000d\000e\000p\000e\000n\000d\000e\000n\000c\000i\000e\000s\000:}{chapter.4}% 16
\BOOKMARK [1][-]{section.4.2}{\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000s\000o\000u\000r\000c\000e\000\040\000c\000o\000d\000e\000\040\000a\000n\000d\000\040\000p\000r\000e\000p\000a\000r\000i\000n\000g\000\040\000t\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000:}{chapter.4}% 17
\BOOKMARK [1][-]{section.4.2}{\376\377\000P\000r\000e\000p\000a\000r\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000a\000n\000d\000\040\000i\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000E\000S\000G\000E\000M\000M\000E}{chapter.4}% 17
\BOOKMARK [1][-]{section.4.3}{\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000i\000n\000g\000\040\000d\000e\000f\000a\000u\000l\000t\000.\000c\000o\000n\000f\000\040\000f\000i\000l\000e}{chapter.4}% 18
\BOOKMARK [0][-]{chapter.5}{\376\377\000I\000n\000d\000i\000c\000e\000s\000\040\000a\000n\000d\000\040\000t\000a\000b\000l\000e\000s}{}% 19
......@@ -10,9 +10,6 @@
%% let collapsible pdf bookmarks panel have high depth per default
\PassOptionsToPackage{bookmarksdepth=5}{hyperref}
\PassOptionsToPackage{booktabs}{sphinx}
\PassOptionsToPackage{colorrows}{sphinx}
\PassOptionsToPackage{warn}{textcomp}
\usepackage[utf8]{inputenc}
\ifdefined\DeclareUnicodeCharacter
......@@ -64,7 +61,7 @@
\title{esgemme}
\date{Jun 08, 2023}
\date{Jun 21, 2023}
\release{1.3.0}
\author{Mustafa Tekpinar}
\newcommand{\sphinxlogo}{\vbox{}}
......@@ -109,8 +106,8 @@ You must create a folder called docker\sphinxhyphen{}tutorial and go to that emp
folder:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
mkdir\PYG{+w}{ }docker\PYGZhy{}tutorial
\PYG{n+nb}{cd}\PYG{+w}{ }docker\PYGZhy{}tutorial
mkdir docker\PYGZhy{}tutorial
\PYG{n+nb}{cd} docker\PYGZhy{}tutorial
\end{sphinxVerbatim}
......@@ -122,14 +119,14 @@ this exercise. First, we will download the multiple sequence alignment
file in fasta format:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
wget\PYG{+w}{ }http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta
\end{sphinxVerbatim}
\sphinxAtStartPar
If you don’t have wget, you can try the same command with curl:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
curl\PYG{+w}{ }http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta \PYGZgt{}aliBLAT.fasta
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -139,7 +136,7 @@ Please verify that the aliBLAT.fasta file is in the folder.
Now, we will download the PDB (Protein Databank) file for BLAT:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
wget\PYG{+w}{ }http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/blat\PYGZhy{}af2.pdb
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/blat\PYGZhy{}af2.pdb
\end{sphinxVerbatim}
......@@ -149,7 +146,7 @@ wget\PYG{+w}{ }http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/blat
In order to make sure that the docker is installed:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
sudo\PYG{+w}{ }docker\PYG{+w}{ }\PYGZhy{}h
sudo docker \PYGZhy{}h
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -157,7 +154,7 @@ If it shows you a list of options, you are on a good track. On MacOS,
you may not need ‘sudo’ word before the docker command at all.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
sudo\PYG{+w}{ }docker\PYG{+w}{ }run\PYG{+w}{ }\PYGZhy{}ti\PYG{+w}{ }\PYGZhy{}\PYGZhy{}rm\PYG{+w}{ }\PYGZhy{}\PYGZhy{}mount\PYG{+w}{ }\PYG{n+nv}{type}\PYG{o}{=}bind,source\PYG{o}{=}\PYG{n+nv}{\PYGZdl{}PWD},target\PYG{o}{=}/home/tekpinar/research/myexample\PYG{+w}{ }\PYG{l+s+se}{\PYGZbs{}}
sudo docker run \PYGZhy{}ti \PYGZhy{}\PYGZhy{}rm \PYGZhy{}\PYGZhy{}mount \PYG{n+nv}{type}\PYG{o}{=}bind,source\PYG{o}{=}\PYG{n+nv}{\PYGZdl{}PWD},target\PYG{o}{=}/home/tekpinar/research/myexample \PYG{l+s+se}{\PYGZbs{}}
tekpinar/esgemme\PYGZhy{}docker:v1.3.0
\end{sphinxVerbatim}
......@@ -167,7 +164,7 @@ created a folder called myexample in your container with the previous
command. Let’s change to that folder.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{n+nb}{cd}\PYG{+w}{ }../myexample/
\PYG{n+nb}{cd} ../myexample/
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -183,7 +180,7 @@ docker container are pointing to the same place.
In this step, we will use only evolutionary information from an MSA file:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
python\PYG{+w}{ }\PYG{n+nv}{\PYGZdl{}ESGEMME\PYGZus{}PATH}/esgemme.py\PYG{+w}{ }aliBLAT.fasta\PYG{+w}{ }\PYGZhy{}r\PYG{+w}{ }input\PYG{+w}{ }\PYGZhy{}f\PYG{+w}{ }aliBLAT.fasta
esgemme aliBLAT.fasta \PYGZhy{}r input \PYGZhy{}f aliBLAT.fasta
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -197,9 +194,9 @@ If you want to utilize structural information (highly recommended) as well as
evolutionary information:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
python\PYG{+w}{ }\PYG{n+nv}{\PYGZdl{}ESGEMME\PYGZus{}PATH}/esgemme.py\PYG{+w}{ }aliBLAT.fasta\PYG{+w}{ }\PYGZhy{}r\PYG{+w}{ }input\PYG{+w}{ }\PYGZhy{}f\PYG{+w}{ }aliBLAT.fasta\PYG{+w}{ }\PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}\PYGZhy{}pdbfile\PYG{+w}{ }blat\PYGZhy{}af2.pdb\PYG{+w}{ }\PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}\PYGZhy{}normweightmode\PYG{+w}{ }sstjetormax
esgemme aliBLAT.fasta \PYGZhy{}r input \PYGZhy{}f aliBLAT.fasta \PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}\PYGZhy{}pdbfile blat\PYGZhy{}af2.pdb \PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}\PYGZhy{}normweightmode sstjetormax
\end{sphinxVerbatim}
......@@ -212,7 +209,7 @@ each line contains a single point mutation such as D26A….
Fortunately, we have an example mut in data folder of ESGEMME repository.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
wget\PYG{+w}{ }http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/master/data/Stiffler\PYGZus{}2015\PYGZus{}BLAT\PYGZus{}ECOLX.mut
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/master/data/Stiffler\PYGZus{}2015\PYGZus{}BLAT\PYGZus{}ECOLX.mut
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -220,8 +217,8 @@ Similar to the previous step, there are two possible ways to do the calculations
structural information. First, let’s do it without structural information:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
python\PYG{+w}{ }\PYG{n+nv}{\PYGZdl{}ESGEMME\PYGZus{}PATH}/esgemme.py\PYG{+w}{ }aliBLAT.fasta\PYG{+w}{ }\PYGZhy{}r\PYG{+w}{ }input\PYG{+w}{ }\PYGZhy{}f\PYG{+w}{ }aliBLAT.fasta\PYG{+w}{ }\PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}m\PYG{+w}{ }Stiffler\PYGZus{}2015\PYGZus{}BLAT\PYGZus{}ECOLX.mut
esgemme aliBLAT.fasta \PYGZhy{}r input \PYGZhy{}f aliBLAT.fasta \PYG{l+s+se}{\PYGZbs{}}
\PYGZhy{}m Stiffler\PYGZus{}2015\PYGZus{}BLAT\PYGZus{}ECOLX.mut
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -230,7 +227,7 @@ You can include structural information in the following way:
\begin{quote}
\sphinxAtStartPar
python \$ESGEMME\_PATH/esgemme.py aliBLAT.fasta \sphinxhyphen{}r input \sphinxhyphen{}f aliBLAT.fasta \textendash{}pdbfile blat\sphinxhyphen{}af2.pdb \textendash{}normweightmode sstjetormax \sphinxhyphen{}m Stiffler\_2015\_BLAT\_ECOLX.mut
esgemme aliBLAT.fasta \sphinxhyphen{}r input \sphinxhyphen{}f aliBLAT.fasta \textendash{}pdbfile blat\sphinxhyphen{}af2.pdb \textendash{}normweightmode sstjetormax \sphinxhyphen{}m Stiffler\_2015\_BLAT\_ECOLX.mut
\end{quote}
\sphinxAtStartPar
......@@ -415,7 +412,7 @@ small tool that I developed and added to the ESGEMME docker image that I created
Start the docker image with the following command:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
sudo\PYG{+w}{ }docker\PYG{+w}{ }run\PYG{+w}{ }\PYGZhy{}ti\PYG{+w}{ }\PYGZhy{}\PYGZhy{}rm\PYG{+w}{ }\PYGZhy{}\PYGZhy{}mount\PYG{+w}{ }\PYG{n+nv}{type}\PYG{o}{=}bind,source\PYG{o}{=}\PYG{n+nv}{\PYGZdl{}PWD},target\PYG{o}{=}/home/tekpinar/research/myexample\PYG{+w}{ }\PYG{l+s+se}{\PYGZbs{}}
sudo docker run \PYGZhy{}ti \PYGZhy{}\PYGZhy{}rm \PYGZhy{}\PYGZhy{}mount \PYG{n+nv}{type}\PYG{o}{=}bind,source\PYG{o}{=}\PYG{n+nv}{\PYGZdl{}PWD},target\PYG{o}{=}/home/tekpinar/research/myexample \PYG{l+s+se}{\PYGZbs{}}
tekpinar/esgemme\PYGZhy{}docker:v1.3.0
\end{sphinxVerbatim}
......@@ -424,8 +421,8 @@ tekpinar/esgemme\PYGZhy{}docker:v1.3.0
Now, change the directory to myexample folder.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{n+nb}{cd}\PYG{+w}{ }../myexample/
ls\PYG{+w}{ }\PYGZhy{}l
\PYG{n+nb}{cd} ../myexample/
ls \PYGZhy{}l
\end{sphinxVerbatim}
\sphinxAtStartPar
......@@ -436,7 +433,7 @@ We are supposed to see our a3m and pdb files in this folder.
Let’s use a small script from hhsuite to convert a3m file to fasta format.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
reformat.pl\PYG{+w}{ }a3m\PYG{+w}{ }fas\PYG{+w}{ }AKE.a3m\PYG{+w}{ }AKE.fasta
reformat.pl a3m fas AKE.a3m AKE.fasta
\end{sphinxVerbatim}
\item {}
......@@ -444,7 +441,7 @@ reformat.pl\PYG{+w}{ }a3m\PYG{+w}{ }fas\PYG{+w}{ }AKE.a3m\PYG{+w}{ }AKE.fasta
Final step and we are there:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
demust\PYG{+w}{ }removegaps\PYG{+w}{ }\PYGZhy{}i\PYG{+w}{ }AKE.fasta\PYG{+w}{ }\PYGZhy{}o\PYG{+w}{ }AKE\PYGZus{}nogaps.fasta
demust removegaps \PYGZhy{}i AKE.fasta \PYGZhy{}o AKE\PYGZus{}nogaps.fasta
\end{sphinxVerbatim}
\end{enumerate}
......@@ -503,26 +500,130 @@ dssp for secondary structure prediction.
These tools should be installed to be able to use ESGEMME.
\section{Getting the source code and preparing the environment:}
\label{\detokenize{installation:getting-the-source-code-and-preparing-the-environment}}
\section{Preparation of the environment and installation of ESGEMME}
\label{\detokenize{installation:preparation-of-the-environment-and-installation-of-esgemme}}
\sphinxAtStartPar
Step by step installation on Ubuntu 22.04
\sphinxAtStartPar
Download the ESGEMME source code from
\sphinxurl{http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME}. Define and export the
environment variable ESGEMME\_PATH=/path\sphinxhyphen{}to\sphinxhyphen{}ESGEMME\sphinxhyphen{}directory/
Prepare your environment and install the required packages:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{n+nb}{export}\PYG{+w}{ }\PYG{n+nv}{ESGEMME\PYGZus{}PATH}\PYG{o}{=}/path\PYGZhy{}to\PYGZhy{}ESGEMME\PYGZhy{}directory/
sudo apt\PYGZhy{}get update \PYGZhy{}\PYGZhy{}fix\PYGZhy{}missing \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y \PYGZhy{}\PYGZhy{}no\PYGZhy{}install\PYGZhy{}recommends apt\PYGZhy{}utils \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y software\PYGZhy{}properties\PYGZhy{}common \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y autotools\PYGZhy{}dev \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y automake \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y build\PYGZhy{}essential \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y python3\PYGZhy{}dev \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y python3\PYGZhy{}pip \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y r\PYGZhy{}base r\PYGZhy{}base\PYGZhy{}core \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y muscle \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y default\PYGZhy{}jre \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y ncbi\PYGZhy{}blast+ \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y nano \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y less \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y wget \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install csh \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y hmmer \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get install \PYGZhy{}y libboost\PYGZhy{}all\PYGZhy{}dev \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo apt\PYGZhy{}get clean \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo rm \PYGZhy{}rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
\end{sphinxVerbatim}
\sphinxAtStartPar
\#Dssp installation
If you are using Ubuntu 20.04, you can install dssp by the following command
.. code:: bash
\begin{quote}
\sphinxAtStartPar
sudo apt\sphinxhyphen{}get install dssp
\end{quote}
\sphinxAtStartPar
Otherwise, you can install it from the source by the following commands.
Please note that default dssp in Ubuntu 22.04 is not working properly.
.. code:: bash
\begin{quote}
\sphinxAtStartPar
wget \sphinxurl{https://github.com/cmbi/dssp/archive/refs/heads/master.zip} \&\& unzip \sphinxhyphen{}o master.zip \&\& cd dssp\sphinxhyphen{}master/ \&\& ./autogen.sh \&\& ./configure \&\& make \&\& sudo make install \&\& sudo ln \sphinxhyphen{}s /usr/local/bin/mkdssp /usr/local/bin/dssp \&\& cd ../ \&\& sudo rm \sphinxhyphen{}rf dssp\sphinxhyphen{}master/ \&\& sudo rm \sphinxhyphen{}f master.zip
\end{quote}
\sphinxAtStartPar
\#HHSUITE installation
.. code:: bash
\begin{quote}
\sphinxAtStartPar
wget \sphinxurl{https://github.com/soedinglab/hh-suite/releases/download/v3.3.0/hhsuite-3.3.0-AVX2-Linux.tar.gz} \&\& mkdir hhsuite \&\& mv hhsuite\sphinxhyphen{}3.3.0\sphinxhyphen{}AVX2\sphinxhyphen{}Linux.tar.gz hhsuite/ \&\& cd hhsuite \&\& tar xvfz hhsuite\sphinxhyphen{}3.3.0\sphinxhyphen{}AVX2\sphinxhyphen{}Linux.tar.gz \&\& rm \sphinxhyphen{}f hhsuite\sphinxhyphen{}3.3.0\sphinxhyphen{}AVX2\sphinxhyphen{}Linux.tar.gz
\end{quote}
\sphinxAtStartPar
\#Add it to your path permanently inside .bashrc or .profile or .bash\_profile
Check the location of hhsuite folder and add it to your path
In my case it was in /home/tekpinar/research/lcqb folder. Therefore, I added the following line
to my .profile file.
PATH=”/home/tekpinar/research/lcqb/hhsuite/bin:/home/tekpinar/research/lcqb/hhsuite/scripts:\$PATH”
\sphinxAtStartPar
Then
source \textasciitilde{}/.profile
\sphinxAtStartPar
\#
\begin{quote}
\sphinxAtStartPar
cd ESGEMME
\end{quote}
\sphinxAtStartPar
\#Download ESGEMME from \sphinxurl{http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME} repository and go inside the ESGEMME folder.!
.. code:: bash
\begin{quote}
\sphinxAtStartPar
cd ESGEMME
\end{quote}
\section{Configuring default.conf file}
\label{\detokenize{installation:configuring-default-conf-file}}
\sphinxAtStartPar
Inside ESGEMME folder, there is an important file called default.conf.
Inside ESGEMME/esgemme folder, there is an important file called default.conf.
This file contains essential parameters of ESGEMME, such as paths of
external parts, default internal parameters. etc. You have to correct the Software section of this
file according to your system.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
pip3 install \PYGZhy{}e . \PYG{o}{\PYGZam{}\PYGZam{}}\PYG{l+s+se}{\PYGZbs{}}
\PYG{n+nb}{cd} ../
\end{sphinxVerbatim}
\sphinxAtStartPar
\#Installing the required R packages
.. code:: bash
\begin{quote}
\sphinxAtStartPar
sudo Rscript \sphinxhyphen{}e ‘install.packages(“seqinr”, repos=”\sphinxurl{http://cran.us.r-project.org}”, dependencies=TRUE)’
\end{quote}
\sphinxAtStartPar
\#Installing secondary programs such as ev\_couplings to obtain MSA files.
\begin{sphinxVerbatim}[commandchars=\\\{\}]
wget https://github.com/debbiemarkslab/plmc/archive/refs/heads/master.zip \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
unzip \PYGZhy{}o master.zip \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
\PYG{n+nb}{cd} plmc\PYGZhy{}master \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
make all\PYGZhy{}openmp32 \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
sudo cp bin/plmc /usr/local/bin/ \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
\PYG{n+nb}{cd} ../ \PYG{o}{\PYGZam{}\PYGZam{}} \PYG{l+s+se}{\PYGZbs{}}
rm \PYGZhy{}rf master.zip plmc\PYGZhy{}master
\end{sphinxVerbatim}
\chapter{Indices and tables}
\label{\detokenize{index:indices-and-tables}}\begin{itemize}
......
\babel@toc {english}{}
\babel@toc {english}{}\relax
\contentsline {chapter}{\numberline {1}Using ESGEMME via Docker}{1}{chapter.1}%
\contentsline {section}{\numberline {1.1}Requirements}{1}{section.1.1}%
\contentsline {section}{\numberline {1.2}Getting the example input data}{1}{section.1.2}%
......@@ -15,6 +15,6 @@
\contentsline {section}{\numberline {3.1}Preparing Your Input MSA and PDB with Colabfold}{7}{section.3.1}%
\contentsline {chapter}{\numberline {4}Installation}{9}{chapter.4}%
\contentsline {section}{\numberline {4.1}Installing the dependencies:}{9}{section.4.1}%
\contentsline {section}{\numberline {4.2}Getting the source code and preparing the environment:}{9}{section.4.2}%
\contentsline {section}{\numberline {4.3}Configuring default.conf file}{9}{section.4.3}%
\contentsline {chapter}{\numberline {5}Indices and tables}{11}{chapter.5}%
\contentsline {section}{\numberline {4.2}Preparation of the environment and installation of ESGEMME}{9}{section.4.2}%
\contentsline {section}{\numberline {4.3}Configuring default.conf file}{10}{section.4.3}%
\contentsline {chapter}{\numberline {5}Indices and tables}{13}{chapter.5}%
......@@ -6,7 +6,7 @@
%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{sphinx}[2023/03/19 v6.2.0 LaTeX package (Sphinx markup)]
\ProvidesPackage{sphinx}[2021/01/27 v4.0.0 LaTeX package (Sphinx markup)]
% provides \ltx@ifundefined
% (many packages load ltxcmds: graphicx does for pdftex and lualatex but
......@@ -17,7 +17,6 @@
%% for deprecation warnings
\newcommand\sphinxdeprecationwarning[4]{% #1 the deprecated macro or name,
% #2 = when deprecated, #3 = when removed, #4 = additional info
{% limit scope of \spx@tempa, \AtEndDocument works even if nested.
\edef\spx@tempa{\detokenize{#1}}%
\ltx@ifundefined{sphinx_depr_\spx@tempa}{%
\global\expandafter\let\csname sphinx_depr_\spx@tempa\endcsname\spx@tempa
......@@ -29,117 +28,27 @@
\@spaces- and removed at Sphinx #3.^^J
#4^^J****}}%
}{% warning already emitted (at end of latex log), don't repeat
}%
}% end of scope limiting group for \spx@tempa
}
%% important build warnings use an undefined reference to induce latexmk
%% into complaining (once per warning) at very end of console output
\newcommand\sphinxbuildwarning[1]{%
\ifcsname sphinx_emitted_#1\endcsname
\else
\global\expandafter\let\csname sphinx_emitted_#1\endcsname\@empty
\AtEndDocument{\hbox{% should the printing of text be made conditional on
% some boolean?
\bfseries\color{red}%
\@nameuse{sphinx_buildwarning_#1}%
% place an undefined reference deliberately
\let\nfss@text\@gobble % no ??
\ref{!!\@nameuse{sphinx_buildwarning_#1}}%
}}%
\fi
}
\@namedef{sphinx_buildwarning_coloursyntax}{%
The colours whose definition used xcolor syntax were set to white
as xcolor was not found; check the latex log warnings for details}
\@namedef{sphinx_buildwarning_colorblend}{%
Command \string\sphinxcolorblend\space seen but ignored in tables
as xcolor was not found; check the latex log warnings for details}
\@namedef{sphinx_buildwarning_badtitlesec}{%
Your system has titlesec version 2.10.1 which causes disappearance
of section numbers; check the latex log warning for details}
\@namedef{sphinx_buildwarning_booktabs}{%
Some tables with booktabs class (check latex log) but booktabs
package not loaded; add its loading to the latex preamble}%
\@namedef{sphinx_buildwarning_badfootnotes}{%
Footnote rendering may have had problems, due to extra package or
document class; check latex log for instructions}%
}}
%% OPTION HANDLING
%
% We generally first handle options then load packages, but we need
% \definecolor from xcolor/color to handle the options.
% We first handle options then load packages, but we need \definecolor from
% xcolor/color.
% MEMO: xcolor \fcolorbox coloured boxes render better in some PDF viewers
% than with color package \fcolorbox. Since 1.6.3, Sphinx uses only its own
% custom variant of \fcolorbox when handling code-blocks. But \fcolorbox
% appears also in Pygmentize output mark-up. Also, since 5.3.0, 'sphinxsetup'
% color options get a richer input syntax if Sphinx knows xcolor is loaded,
% and the \sphinxcolorblend (for tables) is made available only if xcolor is
% loaded.
% FIXME: we should \RequirePackage{xcolor} always now
% The xcolor package draws better fcolorboxes around verbatim code
\IfFileExists{xcolor.sty}{
% Should Sphinx load xcolor with its dvipsnames and svgnames options?
\RequirePackage{xcolor}
}{
\RequirePackage{color}
}
% the \colorlet of xcolor (if at all loaded) is overkill for most internal use
\newcommand{\sphinxcolorlet}[2]
{\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname
\csname\@backslashchar color@#2\endcsname }
% (5.3.0) Allow colour options to use both the \definecolor and the \colorlet
% syntaxes, for example VerbatimColor={gray}{0.9} or VerbatimColor=red!10
% In the latter case we need the real \colorlet from xcolor package.
\def\spx@defineorletcolor#1{%
\def\spx@definedcolor{{#1}}%
\futurelet\spx@token\spx@defineorlet}
\def\spx@defineorlet{%
\ifx\spx@token\bgroup
\expandafter\spx@definecolor\else\expandafter\spx@colorlet\fi}
\def\spx@colorlet#1\relax{\expandafter\colorlet\spx@definedcolor{#1}}
\def\spx@definecolor{\expandafter\definecolor\spx@definedcolor}
%
\@ifpackageloaded{xcolor}%
{}%
{% xcolor not loaded because it was not found in the LaTeX installation
\def\spx@colorlet#1\relax{%
\sphinxbuildwarning{coloursyntax}%
\PackageWarning{sphinx}{%
Sorry, the #1 syntax requires package xcolor,\MessageBreak
which was not found on your TeX/LaTeX installation.\MessageBreak
\@spaces\expandafter\@firstofone\spx@definedcolor\MessageBreak
will be set to white}%
\expandafter\definecolor\spx@definedcolor{rgb}{1,1,1}%
}% end of redefinition of \spx@colorlet
}% end of xcolor not found branch
% Handle options via "kvoptions" (later loaded by hyperref anyhow)
\RequirePackage{kvoptions}
\SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix
% Optional usage of booktabs package for tables
\DeclareBoolOption[false]{booktabs}
\DeclareBoolOption[false]{borderless}
\DeclareBoolOption[true]{booktabscolorgaps}
\DeclareVoidOption{booktabsnogaps}{%
\ifx\@nodocument\relax
% in body
\expandafter\@firstofone
\else
% in preamble, wait for at begin document
\expandafter\AtBeginDocument
\fi
{\ifdefined\abovetopsep % silently do nothing if booktabs not loaded
\abovetopsep\z@\belowrulesep\z@\aboverulesep\z@\belowbottomsep\z@
\fi
}%
}
% Coloured table rows
\DeclareBoolOption[false]{colorrows}
% Sphinx legacy text layout: 1in margins on all four sides
\ifx\@jsc@uplatextrue\@undefined
\DeclareStringOption[1in]{hmargin}
......@@ -159,10 +68,30 @@ will be set to white}%
\define@key{sphinx}{bookmarksdepth}{\AtBeginDocument{\hypersetup{bookmarksdepth=#1}}}
\AtBeginDocument{\define@key{sphinx}{bookmarksdepth}{\hypersetup{bookmarksdepth=#1}}}
% \DeclareBoolOption[false]{usespart}% not used
% INFO: the keys for padding and border widths were extended at 5.1.0,
% and legacy names for user interface were kept, but their definitions
% are delayed further down. The legacy internally used dimen registers
% \sphinxverbatimborder and \sphinxverbatimsep got removed at 6.2.0.
% dimensions, we declare the \dimen registers here.
\newdimen\sphinxverbatimsep
\newdimen\sphinxverbatimborder
\newdimen\sphinxshadowsep
\newdimen\sphinxshadowsize
\newdimen\sphinxshadowrule
% \DeclareStringOption is not convenient for the handling of these dimensions
% because we want to assign the values to the corresponding registers. Even if
% we added the code to the key handler it would be too late for the initial
% set-up and we would need to do initial assignments explicitly. We end up
% using \define@key directly.
% verbatim
\sphinxverbatimsep=\fboxsep
\define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax}
\sphinxverbatimborder=\fboxrule
\define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax}
% topic boxes
\sphinxshadowsep =5pt
\define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax}
\sphinxshadowsize=4pt
\define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax}
\sphinxshadowrule=\fboxrule
\define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax}
% verbatim
\DeclareBoolOption[true]{verbatimwithframe}
\DeclareBoolOption[true]{verbatimwrapslines}
\DeclareBoolOption[false]{verbatimforcewraps}
......@@ -180,37 +109,19 @@ will be set to white}%
\DeclareStringOption % must use braces to hide the brackets
[{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]%
{verbatimcontinued}
% topic boxes
%
% 5.1.0 added new keys for configuration. The legacy keys shadowsep,
% shadowsize, shadowrule were kept for backward compatibility. Unfortunately
% this had bugs due to typos, which got fixed later at 6.1.2.
%
% All configuration is now to be found in the "CSS" section below.
%
% \sphinxshadowsep, \sphinxshadowsize, \sphinxshadowrule \dimen registers
% became at 5.1.0 either no-op or, for the latter, were used under an aliased
% name. They got removed at 6.2.0.
%
% notices/admonitions
%
% 5.1.0 added much customizability to warning, caution, attention, danger and
% error types of notices via an enhanced sphinxheavybox environment.
%
% 6.2.0 added the possibility to use the same kind of rendering also for
% note, hint, important, and tip.
%
% Legacy user interface for options was kept working. All of it is handled in
% the "CSS" section below.
%
% These 6.2.0 added booleans serve internally. There is no reason for user to
% know about them, except if it is desired to toggle mid-way in the document
% whether note, hint, important, and tip should use the "lightbox" or the
% "heavybox" rendering.
\DeclareBoolOption[false]{heavynote}
\DeclareBoolOption[false]{heavyhint}
\DeclareBoolOption[false]{heavyimportant}
\DeclareBoolOption[false]{heavytip}
% the dimensions for notices/admonitions are kept as macros and assigned to
% \spx@notice@border at time of use, hence \DeclareStringOption is ok for this
\newdimen\spx@notice@border
\DeclareStringOption[0.5pt]{noteborder}
\DeclareStringOption[0.5pt]{hintborder}
\DeclareStringOption[0.5pt]{importantborder}
\DeclareStringOption[0.5pt]{tipborder}
\DeclareStringOption[1pt]{warningborder}
\DeclareStringOption[1pt]{cautionborder}
\DeclareStringOption[1pt]{attentionborder}
\DeclareStringOption[1pt]{dangerborder}
\DeclareStringOption[1pt]{errorborder}
% footnotes
\DeclareStringOption[\mbox{ }]{AtStartFootnote}
% we need a public macro name for direct use in latex file
......@@ -221,561 +132,41 @@ will be set to white}%
\DeclareStringOption[\sffamily\bfseries]{HeaderFamily}
% colours
% same problems as for dimensions: we want the key handler to use \definecolor.
% first, some colours with no prefix, for backward compatibility
% first, some colours with no prefix, for backwards compatibility
\newcommand*{\sphinxDeclareColorOption}[2]{%
% set the initial default; only \definecolor syntax for defaults!
\definecolor{#1}#2%
% set the key handler to accept both \definecolor and \colorlet syntax
\define@key{sphinx}{#1}{\spx@defineorletcolor{#1}##1\relax}%
\define@key{sphinx}{#1}{\definecolor{#1}##1}%
}%
\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}}
\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}}
\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}}
\sphinxDeclareColorOption{VerbatimColor}{{gray}{0.95}}
\sphinxDeclareColorOption{VerbatimBorderColor}{{RGB}{32,32,32}}
% all other colours will be named with a "sphinx" prefix
\sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}}
\sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}}
% now the colours defined with "sphinx" prefix in their names
\newcommand*{\sphinxDeclareSphinxColorOption}[2]{%
% set the initial default; only \definecolor syntax for defaults!
% set the initial default
\definecolor{sphinx#1}#2%
% set the key handler to accept both \definecolor and \colorlet syntax
\define@key{sphinx}{#1}{\spx@defineorletcolor{sphinx#1}##1\relax}%
}%
% table row colors
\sphinxDeclareSphinxColorOption{TableRowColorHeader}{{gray}{0.86}}
\sphinxDeclareSphinxColorOption{TableRowColorOdd}{{gray}{0.92}}
\sphinxDeclareSphinxColorOption{TableRowColorEven}{{gray}{0.98}}
% if not set, the "Merge" colour will keep in sync with the "Row" colour
\def\sphinxTableMergeColorHeader{sphinxTableRowColorHeader}
\define@key{sphinx}{TableMergeColorHeader}{%
\spx@defineorletcolor{sphinxTableMergeColorHeader}#1\relax
\def\sphinxTableMergeColorHeader{sphinxTableMergeColorHeader}%
}%
\def\sphinxTableMergeColorOdd{sphinxTableRowColorOdd}
\define@key{sphinx}{TableMergeColorOdd}{%
\spx@defineorletcolor{sphinxTableMergeColorOdd}#1\relax
\def\sphinxTableMergeColorOdd{sphinxTableMergeColorOdd}%
}%
\def\sphinxTableMergeColorEven{sphinxTableRowColorEven}
\define@key{sphinx}{TableMergeColorEven}{%
\spx@defineorletcolor{sphinxTableMergeColorEven}#1\relax
\def\sphinxTableMergeColorEven{sphinxTableMergeColorEven}%
% set the key handler. The "value" ##1 must be acceptable by \definecolor.
\define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}%
}%
% Default color chosen to be as in minted.sty LaTeX package!
\sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}}
% admonition boxes, "light" style
% border color defaults to black
% at 6.2.0 also background color is possible, but it then triggers
% usage of the "sphinxheavybox" from sphinxlatexadmonitions.sty.
\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{noteBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{hintBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{importantBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{tipBgColor}{{rgb}{1,1,1}}
% admonition boxes, "heavy" style
% border color defaults to black and background color to white
% As long as the color are not explicitly set via user options,
% the sphinxpackageboxes.sty code will actually not use them anyhow.
\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}}
% BgColor should have been from the start BackgroundColor for better
% match with CSS property names, but this is legacy interface
% which is too late to change because the internal color names
% and not only the option names have been documented at user level.
\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}}
%%%%%%%%
%
% Additions of CSS-like keys at 5.1.0 (and possibility of rounded boxes)
% -----------------------------------
%
% These CSS-named alikes allow to configure 4 border widths, 4 padding seps, 4
% corner radii, optional shadow, border color, background color, shadow color.
%
% In future, an alternative user interface will perhaps be provided to parse
% genuine CSS, but this will be easier to do in Python than in LaTeX.
%
% Refactoring (and extension) at 6.2.0
% ------------------------------------
%
% 6.2.0 batch defines in one go all auxiliaries for code-blocks, topics, and
% admonitions. The needed steps to maintain the legacy option names working
% and to set some specific defaults are handled in a second step.
%
% This allowed to:
%
% - associate these CSS-named options also to note, hint, important, and tip
% which thus can access the full customizability of sphinxheavybox if they use
% it.
%
% - provide a \sphinxbox command for boxing inline text elements with the same
% full customizability.
%
% The \dimen's \sphinxverbatimborder, \sphinxverbatimsep, \sphinxshadowsep,
% \sphinxshadowsize, and \sphinxshadowrule, which had been deprecated have
% finally been removed entirely. No more \dimen register is used here only
% storage in macros.
%
\def\spxstring@none{none}
\def\spxstring@clone{clone}
%
% Border keys
%
\def\spx@tempa#1{% #1 = macro prefix
\expandafter\spx@tempb
\csname #1border\expandafter\endcsname
\csname #1border@top\expandafter\endcsname
\csname #1border@right\expandafter\endcsname
\csname #1border@bottom\expandafter\endcsname
\csname #1border@left\expandafter\endcsname
\csname if#1border@open\expandafter\endcsname
\csname #1border@opentrue\expandafter\endcsname
\csname #1border@openfalse\endcsname
}%
\def\spx@tempb #1#2#3#4#5#6#7#8#9{% #9 = option prefix
\define@key{sphinx}{#9border-top-width}{\def#2{##1}}%
\define@key{sphinx}{#9border-right-width}{\def#3{##1}}%
\define@key{sphinx}{#9border-bottom-width}{\def#4{##1}}%
\define@key{sphinx}{#9border-left-width}{\def#5{##1}}%
\define@key{sphinx}{#9border-width}{%
\def#1{##1}% MEMO: not immediately expanded, should this be changed?
\def#2{#1}\let#3#2\let#4#2\let#5#2%
}%
\newif#6%
\define@key{sphinx}{#9box-decoration-break}%
{\begingroup\edef\spx@tempa{##1}\expandafter\endgroup
\ifx\spx@tempa\spxstring@clone#8\else#7\fi}%
\spx@tempc{#9}% option prefix
}
\def\spx@tempc #1#2{% #1 = option prefix, #2 = legacy option name
% keep legacy option names as aliases to new-named options
\expandafter\let\csname KV@sphinx@#2\expandafter\endcsname
\csname KV@sphinx@#1border-width\endcsname
% init border-width (fetches next argument)
\csname KV@sphinx@#1border-width\endcsname
}
% MEMO: prior to 6.2.0 the \fboxrule value (0.4pt, a priori) was frozen here via
% a \dimen assignment done immediately. Now it remains \fboxrule until being used.
% macro prefix option prefix legacy option init value
\spx@tempa{spx@pre@} {pre_} {verbatimborder} \fboxrule
\spx@tempa{spx@topic@} {div.topic_} {shadowrule} \fboxrule
\spx@tempa{spx@note@} {div.note_} {noteborder} {0.5pt}
\spx@tempa{spx@hint@} {div.hint_} {hintborder} {0.5pt}
\spx@tempa{spx@important@}{div.important_}{importantborder}{0.5pt}
\spx@tempa{spx@tip@} {div.tip_} {tipborder} {0.5pt}
\spx@tempa{spx@warning@} {div.warning_} {warningborder} {1pt}
\spx@tempa{spx@caution@} {div.caution_} {cautionborder} {1pt}
\spx@tempa{spx@attention@}{div.attention_}{attentionborder}{1pt}
\spx@tempa{spx@danger@} {div.danger_} {dangerborder} {1pt}
\spx@tempa{spx@error@} {div.error_} {errorborder} {1pt}
% this one new at 6.2.0: (we do not create a "legacy name" for it)
\spx@tempa{spx@box@} {box_} {box_border-width}\fboxrule
% Set default box-decoration-break style for codeblocks to slice
\spx@pre@border@opentrue % new default at 6.0.0: slice, not clone
% 6.2.0 has added support for box-decoration-break=slice to all
% other directives, formerly the option setting was ignored for them.
% Padding keys
%
\def\spx@tempa#1{%
\expandafter\spx@tempb
\csname #1padding\expandafter\endcsname
\csname #1padding@top\expandafter\endcsname
\csname #1padding@right\expandafter\endcsname
\csname #1padding@bottom\expandafter\endcsname
\csname #1padding@left\endcsname
}%
\def\spx@tempb #1#2#3#4#5#6{% #6 = option prefix
\define@key{sphinx}{#6padding-top}{\def#2{##1}}%
\define@key{sphinx}{#6padding-right}{\def#3{##1}}%
\define@key{sphinx}{#6padding-bottom}{\def#4{##1}}%
\define@key{sphinx}{#6padding-left}{\def#5{##1}}%
\define@key{sphinx}{#6padding}{%
\def#1{##1}%
\def#2{#1}\let#3#2\let#4#2\let#5#2%
}%
% initialization (will fetch "init" argument next):
\csname KV@sphinx@#6padding\endcsname
}
% MEMO: prior to 6.2.0 the \fboxsep value (3pt, a priori) was frozen here via
% a \dimen assignment done immediately. Now it remains \fboxsep until being used.
% #1 macro prefix #6 option prefix init value
\spx@tempa{spx@pre@} {pre_} \fboxsep
\spx@tempa{spx@topic@} {div.topic_} {5pt}
% MEMO: prior to 6.2.0, "note" type admonitions used sphinxlightbox automatically
% and had no interface to set the padding parameters needed by sphinxheavybox.
% At 6.2.0 they acquired such interface and the default is set as for legacy
% default of "warning" type. I hesitated using \fboxsep, but if I did I would
% then need to explain how to change "note etc..." into behaving exactly
% as "warning etc...", which goes via the \dimexpr here which is too scary to
% put sanely into documentation.
\spx@tempa{spx@note@} {div.note_} {\dimexpr.6\baselineskip-\spx@note@border\relax}
\spx@tempa{spx@hint@} {div.hint_} {\dimexpr.6\baselineskip-\spx@hint@border\relax}
\spx@tempa{spx@important@}{div.important_} {\dimexpr.6\baselineskip-\spx@important@border\relax}
\spx@tempa{spx@tip@} {div.tip_} {\dimexpr.6\baselineskip-\spx@tip@border\relax}
% MEMO: prior to 5.1.0 padding was not separately customizable from border
% width for warning type admonitions. The below keeps the legacy behavior of a
% constant borderwidth+padding. The dim expression is not evaluated yet, only
% at time of use (so that it dynamically adapts to the border width setting).
% MEMO: I could use everywhere \spx@notice@border, as sphinxadmonition environment
% configures it to hold the \spx@<type>@border value.
\spx@tempa{spx@warning@} {div.warning_} {\dimexpr.6\baselineskip-\spx@warning@border\relax}
\spx@tempa{spx@caution@} {div.caution_} {\dimexpr.6\baselineskip-\spx@caution@border\relax}
\spx@tempa{spx@attention@}{div.attention_} {\dimexpr.6\baselineskip-\spx@attention@border\relax}
\spx@tempa{spx@danger@} {div.danger_} {\dimexpr.6\baselineskip-\spx@danger@border\relax}
\spx@tempa{spx@error@} {div.error_} {\dimexpr.6\baselineskip-\spx@error@border\relax}
\spx@tempa{spx@box@} {box_} \fboxsep
% define legacy verbatimsep key as alias of pre_padding key
\expandafter\let\expandafter\KV@sphinx@verbatimsep\csname KV@sphinx@pre_padding\endcsname
% define legacy shadowsep key as alias of div.topic_padding key
\expandafter\let\expandafter\KV@sphinx@shadowsep\csname KV@sphinx@div.topic_padding\endcsname
% Corner radii keys
%
% Prior to 6.2.0, the "rounded box" branch obeyed the 4 radii but ignored
% the separate border widths and used only the border-width setting.
% Now, all 4 + 4 parameters are obeyed.
\def\spx@tempa#1{% #1 = macro prefix
\expandafter\spx@tempb
\csname #1radius@topleft\expandafter\endcsname
\csname #1radius@topright\expandafter\endcsname
\csname #1radius@bottomright\expandafter\endcsname
\csname #1radius@bottomleft\endcsname
}%
\def\spx@tempb #1#2#3#4#5{% #5 = option prefix
\define@key{sphinx}{#5border-top-left-radius}{\def#1{##1}}%
\define@key{sphinx}{#5border-top-right-radius}{\def#2{##1}}%
\define@key{sphinx}{#5border-bottom-right-radius}{\def#3{##1}}%
\define@key{sphinx}{#5border-bottom-left-radius}{\def#4{##1}}%
\define@key{sphinx}{#5border-radius}{\def#1{##1}\let#2#1\let#3#1\let#4#1}%
\csname KV@sphinx@#5border-radius\endcsname % fetches next argument
}
% The init value for corner radius in code-blocks was \z@ (i.e. 0pt) prior
% to 6.0.0., then 3pt, then \fboxsep at 6.2.0 as padding is \fboxsep,
% and \fboxsep=3pt per default (also with platex).
% macro prefix option prefix init value
\spx@tempa{spx@pre@} {pre_} \fboxsep
\spx@tempa{spx@topic@} {div.topic_} \z@
\spx@tempa{spx@note@} {div.note_} \z@
\spx@tempa{spx@hint@} {div.hint_} \z@
\spx@tempa{spx@important@}{div.important_} \z@
\spx@tempa{spx@tip@} {div.tip_} \z@
\spx@tempa{spx@warning@} {div.warning_} \z@
\spx@tempa{spx@caution@} {div.caution_} \z@
\spx@tempa{spx@attention@}{div.attention_} \z@
\spx@tempa{spx@danger@} {div.danger_} \z@
\spx@tempa{spx@error@} {div.error_} \z@
\spx@tempa{spx@box@} {box_} \fboxsep
% Shadow keys
%
% Prior to 6.2.0, an "inset" shadow caused the rendering to ignore
% rounded corners. Starting with 6.2.0, an "inset" shadow is simply
% ignored (not implemented) if any of the corner radii is positive,
% rather than forcing a rectangle+inset shadow output.
\def\spx@tempa#1{%
\expandafter\spx@tempb
\csname if#1withshadow\expandafter\endcsname
\csname if#1insetshadow\endcsname
}%
\def\spx@tempb#1#2{\newif#1\newif#2}%
% macro prefix
\spx@tempa{spx@pre@}
\spx@tempa{spx@topic@}
\spx@tempa{spx@note@}
\spx@tempa{spx@hint@}
\spx@tempa{spx@important@}
\spx@tempa{spx@tip@}
\spx@tempa{spx@warning@}
\spx@tempa{spx@caution@}
\spx@tempa{spx@attention@}
\spx@tempa{spx@danger@}
\spx@tempa{spx@error@}
\spx@tempa{spx@box@}
%
\def\spx@tempa#1{% #1 = macro prefix
\expandafter\spx@tempb
\csname #1withshadowtrue\expandafter\endcsname
\csname #1withshadowfalse\expandafter\endcsname
\csname #1insetshadowtrue\expandafter\endcsname
\csname #1insetshadowfalse\expandafter\endcsname
\csname #1shadow@setter\expandafter\endcsname
\csname #1shadow@xoffset\expandafter\endcsname
\csname #1shadow@yoffset\endcsname
}%
\def\spx@tempb#1#2#3#4#5#6#7#8{% #8 = option prefix
\define@key{sphinx}{#8box-shadow}{#5##1 {} {} \@nnil}%
\def#5##1 ##2 ##3 ##4\@nnil{%
\begingroup\edef\spx@tempa{##1}\expandafter\endgroup
\ifx\spx@tempa\spxstring@none
#2%
% MEMO: at 5.1.0 and up to 6.2.0, an \edef with \number\dimexpr was
% used here. Since 6.2.0, expansion is delayed to time of use as for
% the other dimensions handled above. This is synched with an added
% encapsulation in \dimexpr...\relax by the "setup" from
% sphinxpackageboxes.sty. An induced regression had to be fixed in
% the sphinxShadowBox environment as it was using in an \ifdim the
% \spx@topic@shadow@yoffset macro, now holding by default 4pt+\z@
% rather than an already digested 262144sp. The +\z@ is in case ##2
% is empty.
\else #1%
\def#6{##1}\def#7{##2+\z@}%
\if\relax\detokenize{##3}\relax#4\else#3\fi
\fi
}%
#5none {} {} \@nnil % no shadow by default (except for topic, see below)
}
\spx@tempa{spx@pre@} {pre_}
\spx@tempa{spx@topic@} {div.topic_}
% This corresponds to the legacy parameters of ShadowBox
\spx@topic@shadow@setter 4pt 4pt {} \@nnil
\spx@tempa{spx@note@} {div.note_}
\spx@tempa{spx@hint@} {div.hint_}
\spx@tempa{spx@important@}{div.important_}
\spx@tempa{spx@tip@} {div.tip_}
\spx@tempa{spx@warning@} {div.warning_}
\spx@tempa{spx@caution@} {div.caution_}
\spx@tempa{spx@attention@}{div.attention_}
\spx@tempa{spx@danger@} {div.danger_}
\spx@tempa{spx@error@} {div.error_}
\spx@tempa{spx@box@} {box_}
% Support for legacy shadowsize (topic/contents)
% This definition was broken due to a typo at 5.1.0 and got fixed at 6.1.2
% MEMO: at 6.2.0 this no longer does \number\dimexpr in an \edef. Reason is to
% keep in sync with div.topic_box-shadow handling of xoffset and yoffset.
% Attention in particular to \ifdim context, we add a \dimexpr to the one here.
\define@key{sphinx}{shadowsize}{%
\def\spx@topic@shadow@xoffset{#1}%
\let\spx@topic@shadow@yoffset\spx@topic@shadow@xoffset
\ifdim\dimexpr\spx@topic@shadow@xoffset=\z@
\spx@topic@withshadowfalse
\else
\spx@topic@withshadowtrue
\spx@topic@insetshadowfalse
\fi
}%
% Color keys
% (four of them: border, background, shadow and the text color)
%
% Some problems due to legacy naming scheme which had diverging conventions
% for code-blocks (VerbatimBorderColor, VerbatimColor) and admonitions
% (sphinxwarningBorderColor, sphinxwarningBgColor, etc...) regarding the
% internal names of the used colors. Unfortunately VerbatimColor and for
% example sphinxwarningBgColor are also documented at user level, they are not
% only internally used.
%
% For topic directive, "legacy" (by this I mean Sphinx around 2016-2017 after
% my first additions to LaTeX) had no interface for colors, so I could change
% some internals with no breakage during 5.x up to 6.2.0. So topic
% (shadowbox) could be unified with admonitions (sphinxheavybox), and the
% "set-up" macros could all be moved into a single one in the
% sphinxpackageboxes.sty file, with only one argument holding the directive
% type.
%
% It was then needed only for sphinxlatexliterals.sty to let its
% \spx@verb@boxes@fcolorbox@setup incorporate some extra adjustment.
%
% We associate a boolean to each color, so that the box code can
% decide to insert a \color command or consider it is not needed.
\def\spx@tempa#1{%
\expandafter\spx@tempb
\csname if#1withshadowcolor\expandafter\endcsname
\csname if#1withbordercolor\expandafter\endcsname
\csname if#1withbackgroundcolor\expandafter\endcsname
\csname if#1withtextcolor\endcsname
}%
\def\spx@tempb#1#2#3#4{\newif#1\newif#2\newif#3\newif#4}%
% macro prefix
\spx@tempa{spx@pre@}
\spx@tempa{spx@topic@}
\spx@tempa{spx@note@}
\spx@tempa{spx@hint@}
\spx@tempa{spx@important@}
\spx@tempa{spx@tip@}
\spx@tempa{spx@warning@}
\spx@tempa{spx@caution@}
\spx@tempa{spx@attention@}
\spx@tempa{spx@danger@}
\spx@tempa{spx@error@}
\spx@tempa{spx@box@}
%
\def\spx@tempa#1{% #1 = macro prefix
\expandafter\spx@tempb
\csname #1withbordercolortrue\expandafter\endcsname
\csname #1withbackgroundcolortrue\expandafter\endcsname
\csname #1withshadowcolortrue\expandafter\endcsname
\csname #1withtextcolortrue\endcsname
}
\def\spx@tempb#1#2#3#4#5#6{% #5 = option prefix, #6 = color name prefix
\define@key{sphinx}{#5border-TeXcolor}%
{#1\spx@defineorletcolor{#6BorderColor}##1\relax}%
\define@key{sphinx}{#5background-TeXcolor}%
{#2\spx@defineorletcolor{#6BgColor}##1\relax}%
\define@key{sphinx}{#5box-shadow-TeXcolor}%
{#3\spx@defineorletcolor{#6ShadowColor}##1\relax}%
\define@key{sphinx}{#5TeXcolor}%
{#4\spx@defineorletcolor{#6TextColor}##1\relax}%
}
% macro prefix option prefix color name prefix
\spx@tempa{spx@pre@} {pre_} {Verbatim}
% (memo: internal VerbatimShadowColor was formerly sphinxVerbatimShadowColor)
% internal legacy color name is VerbatimColor not VerbatimBgColor, so redefine:
\define@key{sphinx}{pre_background-TeXcolor}%
{\spx@pre@withbackgroundcolortrue\spx@defineorletcolor{VerbatimColor}#1\relax}%
\spx@pre@withbordercolortrue % 6.0.0 VerbatimBorderColor {RGB}{32,32,32}
\spx@pre@withbackgroundcolortrue % 6.0.0 VerbatimColor {gray}{0.95}
% Keep legacy option names working
\expandafter\let\expandafter\KV@sphinx@VerbatimBorderColor
\csname KV@sphinx@pre_border-TeXcolor\endcsname
\expandafter\let\expandafter\KV@sphinx@VerbatimColor
\csname KV@sphinx@pre_background-TeXcolor\endcsname
% (6.2.0 modified some internal namings for the colors of topic boxes)
% macro prefix option prefix color name prefix
\spx@tempa{spx@topic@} {div.topic_} {sphinxtopic}% (no legacy interface)
\spx@tempa{spx@note@} {div.note_} {sphinxnote}
\spx@tempa{spx@hint@} {div.hint_} {sphinxhint}
\spx@tempa{spx@important@}{div.important_} {sphinximportant}
\spx@tempa{spx@tip@} {div.tip_} {sphinxtip}
\spx@tempa{spx@warning@} {div.warning_} {sphinxwarning}
\spx@tempa{spx@caution@} {div.caution_} {sphinxcaution}
\spx@tempa{spx@attention@}{div.attention_} {sphinxattention}
\spx@tempa{spx@danger@} {div.danger_} {sphinxdanger}
\spx@tempa{spx@error@} {div.error_} {sphinxerror}
\spx@tempa{spx@box@} {box_} {sphinxbox}
% Keep legacy sphinxsetup color options interface for "strong" admonitions
\def\spx@tempa#1#2{% #1 = option prefix, #2 = legacy option prefix
\expandafter\let\csname KV@sphinx@#2BorderColor\expandafter\endcsname
\csname KV@sphinx@#1border-TeXcolor\endcsname
\expandafter\let\csname KV@sphinx@#2BgColor\expandafter\endcsname
\csname KV@sphinx@#1background-TeXcolor\endcsname
}
\spx@tempa{div.warning_} {warning}
\spx@tempa{div.caution_} {caution}
\spx@tempa{div.attention_} {attention}
\spx@tempa{div.danger_} {danger}
\spx@tempa{div.error_} {error}
% Keep legacy sphinxsetup <type>BorderColor for <type>=note, hint, ...
% which will not trigger sphinxheavybox
% Add "legacy" hintTextColor etc... that will not trigger sphinxheavybox
\def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy option prefix
\expandafter\let\csname KV@sphinx@#2BorderColor\expandafter\endcsname
\csname KV@sphinx@#1border-TeXcolor\endcsname
\expandafter\let\csname KV@sphinx@#2TextColor\expandafter\endcsname
\csname KV@sphinx@#1TeXcolor\endcsname
}
\spx@tempa{div.note_} {note}
\spx@tempa{div.hint_} {hint}
\spx@tempa{div.important_} {important}
\spx@tempa{div.tip_} {tip}
% The TeXextras key
%
\def\spx@tempa#1{% #1 = macro prefix
\expandafter\spx@tempb\csname #1TeXextras\endcsname
}
\def\spx@tempb#1#2{% #2 = option prefix
\define@key{sphinx}{#2TeXextras}{\def#1{##1}}%
}
% macro prefix option prefix
\spx@tempa{spx@pre@} {pre_}
\spx@tempa{spx@topic@} {div.topic_}
\spx@tempa{spx@note@} {div.note_}
\spx@tempa{spx@hint@} {div.hint_}
\spx@tempa{spx@important@}{div.important_}
\spx@tempa{spx@tip@} {div.tip_}
\spx@tempa{spx@warning@} {div.warning_}
\spx@tempa{spx@caution@} {div.caution_}
\spx@tempa{spx@attention@}{div.attention_}
\spx@tempa{spx@danger@} {div.danger_}
\spx@tempa{spx@error@} {div.error_}
\spx@tempa{spx@box@} {box_}
% Add "legacy" hintTeXextras etc... that will not trigger sphinxheavybox
\def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy option prefix
\expandafter\let\csname KV@sphinx@#2TeXextras\expandafter\endcsname
\csname KV@sphinx@#1TeXextras\endcsname
}
\spx@tempa{div.note_} {note}
\spx@tempa{div.hint_} {hint}
\spx@tempa{div.important_} {important}
\spx@tempa{div.tip_} {tip}
% For note type admonitions, redefine all CSS-like named options to trigger
% the "heavybox" path.
%
% MEMO: the noteBorderColor and noteborder legacy options have already been
% re-created and they do not trigger the "heavybox" as their meaning will not
% be modified in the loop below contrarily to their CSS counterparts
% div.note_border-TeXcolor and div.note_border-width, and to the noteBgColor
% etc... which are handled below.
%
% This goes via rather hardcore TeX here.
\def\spx@tempa#1{\if\relax#1\expandafter\@gobble
\else
\toks@{##1}%
\expandafter\def\csname KV@sphinx@div.note_#1\expandafter\endcsname
\the\toks0\expandafter{%
\csname spx@opt@heavynotetrue\expandafter\expandafter\expandafter\endcsname
\csname KV@sphinx@div.note_#1\endcsname{##1}}%
\expandafter\def\csname KV@sphinx@div.hint_#1\expandafter\endcsname
\the\toks0\expandafter{%
\csname spx@opt@heavyhinttrue\expandafter\expandafter\expandafter\endcsname
\csname KV@sphinx@div.hint_#1\endcsname{##1}}%
\expandafter\def\csname KV@sphinx@div.important_#1\expandafter\endcsname
\the\toks0\expandafter{%
\csname spx@opt@heavyimportanttrue\expandafter\expandafter\expandafter\endcsname
\csname KV@sphinx@div.important_#1\endcsname{##1}}%
\expandafter\def\csname KV@sphinx@div.tip_#1\expandafter\endcsname
\the\toks0\expandafter{%
\csname spx@opt@heavytiptrue\expandafter\expandafter\expandafter\endcsname
\csname KV@sphinx@div.tip_#1\endcsname{##1}}%
\fi
\spx@tempa
}
\spx@tempa{border-width}%
{border-top-width}{border-right-width}{border-bottom-width}{border-left-width}%
{box-decoration-break}%
{padding}%
{padding-top}{padding-right}{padding-bottom}{padding-left}%
{border-radius}%
{border-top-left-radius}{border-top-right-radius}%
{border-bottom-right-radius}{border-bottom-left-radius}%
{box-shadow}%
{border-TeXcolor}{background-TeXcolor}{box-shadow-TeXcolor}{TeXcolor}%
{TeXextras}%
\relax
% Now we add at 6.2.0 <type>BgColor et al. options which will trigger the
% "heavybox" as they are \let to the div.<type>_background-TeXColor option
% which has already been enhanced to set the boolean for rendering via
% "heavybox". This is in contrast with legacy <type>BorderColor,
% and with the new <type>TeXcolor and <type>TeXextras.
\def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy style option prefix
\expandafter\let\csname KV@sphinx@#2BgColor\expandafter\endcsname
\csname KV@sphinx@#1background-TeXcolor\endcsname
}
\spx@tempa{div.note_} {note}
\spx@tempa{div.hint_} {hint}
\spx@tempa{div.important_} {important}
\spx@tempa{div.tip_} {tip}
\newif\ifspx@opt@box@addstrut
\expandafter\def\csname KV@sphinx@box_addstrut\endcsname#1{%
\csname spx@opt@box@addstrut#1\endcsname
}
\expandafter\def\csname KV@sphinx@box_addstrut@default\endcsname{%
\spx@opt@box@addstruttrue
}
\DeclareDefaultOption{\@unknownoptionerror}
\ProcessKeyvalOptions*
......@@ -784,9 +175,6 @@ will be set to white}%
\DisableKeyvalOption{sphinx}{numfigreset}
\DisableKeyvalOption{sphinx}{nonumfigreset}
\DisableKeyvalOption{sphinx}{mathnumfig}
\DisableKeyvalOption{sphinx}{booktabs}
\DisableKeyvalOption{sphinx}{borderless}
\DisableKeyvalOption{sphinx}{rowcolors}
% FIXME: this is unrelated to an option, move this elsewhere
% To allow hyphenation of first word in narrow contexts; no option,
% customization to be done via 'preamble' key
......@@ -794,7 +182,7 @@ will be set to white}%
% No need for the \hspace{0pt} trick (\hskip\z@skip) with luatex
\ifdefined\directlua\let\sphinxAtStartPar\@empty\fi
% user interface: options can be changed midway in a document!
\newcommand\sphinxsetup{\setkeys{sphinx}}
\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}}
%% MISCELLANEOUS CONTEXT
......@@ -877,63 +265,6 @@ will be set to white}%
%% FRAMED ENVIRONMENTS
%
% \sphinxbox added at 6.2.0, its definition is in sphinxpackageboxes.
%
% Alias all \sphinxsetup "box_" keys to become \sphinxboxsetup no-prefix keys
\@tfor\x:={border-width}%
{border-top-width}{border-right-width}{border-bottom-width}{border-left-width}%
{box-decoration-break}% This one is actually useless, as \sphinxbox
% creates an unbreakable horizontal box, not a breakable vertical
% box. And as is well-known it is very complicated (not to say
% impossible) to create in LaTeX breakable horizontal boxes. No
% package offers them. See the complications for the support of
% verbatimforcewraps in sphinxlatexliterals.sty or see the source
% code of the soul or soulutf8 packages.
{padding}%
{padding-top}{padding-right}{padding-bottom}{padding-left}%
{border-radius}%
{border-top-left-radius}{border-top-right-radius}%
{border-bottom-right-radius}{border-bottom-left-radius}%
{box-shadow}%
{border-TeXcolor}{background-TeXcolor}{box-shadow-TeXcolor}{TeXcolor}%
{TeXextras}{addstrut}{addstrut@default}%
\do{\expandafter\let\csname KV@sphinxbox@\x\expandafter\endcsname
\csname KV@sphinx@box_\x\endcsname}
% Let \sphinxboxsetup also prepare a "reset", which will be used by nested
% boxes; currently and by laziness this is implemented simply by accumulating
% all passed options inside some storage, in the order they were given, rather
% than saving the box would-be parameters. Advantage is that this will not
% have to be modified if additional keys are added in future (e.g. for
% elliptic corners). Storing obeys TeX groups. (these details would be
% relevant only for some genuine independent LaTeX package and manual user
% authored mark-up, not Sphinx auto mark-up).
\newcommand\sphinxboxsetup[1]{%
\setkeys{sphinxbox}{#1}%
\expandafter\def\expandafter\spx@boxes@sphinxbox@defaults\expandafter
{\spx@boxes@sphinxbox@defaults,#1}%
}
\def\spx@boxes@sphinxbox@reset{%
\begingroup\def\x{\endgroup\setkeys{sphinxbox}}%
\expandafter\x\expandafter{\spx@boxes@sphinxbox@defaults}%
}
% Some of these defaults got already set. But we now list them all explicitly
% for a complete initial configuration of reset storage.
%
\let\spx@boxes@sphinxbox@defaults\@gobble
\sphinxboxsetup{%
border-width=\fboxrule,% <-not really needed to avoid EOL space
padding=\fboxsep,% but done here out of habit
border-radius=\fboxsep,%
box-shadow=none,%
% As xcolor is perhaps not loaded we can not use background-TeXcolor=VerbatimColor
% which would not be compatible with \definecolor syntax.
border-TeXcolor={RGB}{32,32,32},% the default VerbatimBorderColor
background-TeXcolor={gray}{0.95},% the default VerbatimColor
box-shadow-TeXcolor={rgb}{0,0,0},%
TeXextras={},%
addstrut=false% (a final comma here would not hurt)
}%
\RequirePackage{sphinxpackageboxes}
\input{sphinxlatexadmonitions.sty}
\input{sphinxlatexliterals.sty}
\input{sphinxlatexshadowbox.sty}
......
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{sphinxhighlight}[2022/06/30 stylesheet for highlighting with pygments]
\ProvidesPackage{sphinxhighlight}[2016/05/29 stylesheet for highlighting with pygments]
% Its contents depend on pygments_style configuration variable.
......@@ -103,27 +103,4 @@
\def\PYGZrb{]}
\makeatother
% Sphinx redefinitions
% Originally to obtain a straight single quote via package textcomp, then
% to fix problems for the 5.0.0 inline code highlighting (captions!).
% The \text is from amstext, a dependency of sphinx.sty. It is here only
% to avoid build errors if for some reason expansion is in math mode.
\def\PYGZbs{\text\textbackslash}
\def\PYGZus{\_}
\def\PYGZob{\{}
\def\PYGZcb{\}}
\def\PYGZca{\text\textasciicircum}
\def\PYGZam{\&}
\def\PYGZlt{\text\textless}
\def\PYGZgt{\text\textgreater}
\def\PYGZsh{\#}
\def\PYGZpc{\%}
\def\PYGZdl{\$}
\def\PYGZhy{\sphinxhyphen}% defined in sphinxlatexstyletext.sty
\def\PYGZsq{\text\textquotesingle}
\def\PYGZdq{"}
\def\PYGZti{\text\textasciitilde}
\makeatletter
% use \protected to allow syntax highlighting in captions
\protected\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+{\PYG@do{#2}}}
\makeatother
\renewcommand\PYGZsq{\textquotesingle}
%% NOTICES AND ADMONITIONS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexadmonitions.sty}[2023/03/19 admonitions]
\ProvidesFile{sphinxlatexadmonitions.sty}[2021/01/27 admonitions]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - sphinxseealso environment added at 6.1.0
%
% - sphinxadmonition (environment)
% This is a dispatch supporting
%
% - note, hint, important, tip (via sphinxlightbox)
% (also optionally via sphinxheavybox since 6.2.0)
% - warning, caution, attention, danger, error (via sphinxheavybox)
%
% Each sphinx<notice name> environment can be redefined by user.
......@@ -19,22 +16,13 @@
% settings, cf sphinx docs (latex customization).
%
% Requires:
\RequirePackage{sphinxpackageboxes}
\RequirePackage{framed}% used by sphinxheavybox
%
% Dependencies (they do not need to be defined at time of loading):
%
% - of course the various colour and dimension options handled via sphinx.sty
%
% - \sphinxstrong (for sphinxlightbox and sphinxheavybox)
% - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty
%
% - \savenotes/\spewnotes from sphinxpackagefootnote (for sphinxheavybox)
%
% - \sphinxstylenotetitle, ..., \sphinxstylewarningtitle, etc... which are used by
% default in the corresponding sphinx<notice> environments to replace at 6.2.0
% formerly hard-coded \sphinxstrong{#1}<space>
% Their definitions are in sphinxlatexstyletext.sty.
% Provides: (also in sphinxlatexliterals.sty)
\providecommand*\sphinxvspacefixafterfrenchlists{%
......@@ -42,17 +30,11 @@
}
% Some are quite plain
\newenvironment{sphinxseealso}[1]{\sphinxstyleseealsotitle{#1}}{}
% This \dimen register is a legacy relic from Sphinx 1.5 which is used now
% only for sphinxlightbox. It is set in the sphinxadmonition environment.
\newdimen\spx@notice@border
% the spx@notice@bordercolor etc are set in the sphinxadmonition environment
\newenvironment{sphinxlightbox}{%
\par
\noindent{\color{spx@notice@bordercolor}%
\rule{\linewidth}{\spx@notice@border}}%
\par\nobreak
\rule{\linewidth}{\spx@notice@border}}\par\nobreak
{\parskip\z@skip\noindent}%
}
{%
......@@ -64,98 +46,44 @@
\rule[\dimexpr.4\baselineskip-\spx@notice@border\relax]
{\linewidth}{\spx@notice@border}}\hss}\allowbreak
}% end of sphinxlightbox environment definition
% note/hint/important/tip notices
%
% Since 1.5 these environments are named individually to allow user to
% redefine them entirely.
%
% The Sphinx definitions were done like this, prior to 6.2.0:
%
% \newenvironment{sphinxhint}[1]
% {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
%
% The more complex definition below will branch to sphinxheavybox if a certain
% boolean associated to the notice type is true. This boolean is set to true
% whenever a CSS-named alike options for the notice type has been used in
% sphinxsetup. The old coding as above would still work, with the new options
% being then simply ignored. A user redefinition will probably either use
% directly sphinxlightbox or sphinxheavybox or something else, with no need to
% test the boolean.
%
% 6.2.0 also adds one layer of mark-up via \sphinxnotetitle etc..., because
% the former \sphinxstrong{#1}<space> used a too generic \sphinxstrong. But
% perhaps the #1 should be passed over to sphinx{light,heavy}box as parameter.
% Unfortunately replacing these environments with one-parameter environments
% would be potentially a breaking change. Anyway, sphinxpackageboxes.sty does not
% provide a "titled" box; the caption of code-blocks is handled by extra
% code in sphinxVerbatim.
% may be renewenvironment'd by user for complete customization
\newenvironment{sphinxnote}[1]
{\edef\spx@env{sphinx\ifspx@opt@heavynote heavy\else light\fi box}%
\expandafter\begin\expandafter{\spx@env}\sphinxstylenotetitle{#1}}
{\expandafter\end\expandafter{\spx@env}}
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinxhint}[1]
{\edef\spx@env{sphinx\ifspx@opt@heavyhint heavy\else light\fi box}%
\expandafter\begin\expandafter{\spx@env}\sphinxstylehinttitle{#1}}
{\expandafter\end\expandafter{\spx@env}}
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinximportant}[1]
{\edef\spx@env{sphinx\ifspx@opt@heavyimportant heavy\else light\fi box}%
\expandafter\begin\expandafter{\spx@env}\sphinxstyleimportanttitle{#1}}
{\expandafter\end\expandafter{\spx@env}}
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinxtip}[1]
{\edef\spx@env{sphinx\ifspx@opt@heavytip heavy\else light\fi box}%
\expandafter\begin\expandafter{\spx@env}\sphinxstyletiptitle{#1}}
{\expandafter\end\expandafter{\spx@env}}
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
% or just use the package options
% these are needed for common handling by notice environment of lightbox
% and heavybox but they are currently not used by lightbox environment
% and there is consequently no corresponding package option
\definecolor{sphinxnoteBgColor}{rgb}{1,1,1}
\definecolor{sphinxhintBgColor}{rgb}{1,1,1}
\definecolor{sphinximportantBgColor}{rgb}{1,1,1}
\definecolor{sphinxtipBgColor}{rgb}{1,1,1}
% warning/caution/attention/danger/error get more distinction
%
% Others get more distinction
% Code adapted from framed.sty's "snugshade" environment.
% Nesting works (inner frames do not allow page breaks).
\newenvironment{sphinxheavybox}{\par
% 6.2.0 allows to not have to distinguish here between warning type notices
% which always use sphinxheavybox or note type notices which might use it.
% (MEMO: it is not a problem here if there is no sphinx<type>ShadowColor,
% as it used only if set)
\spx@boxes@fcolorbox@setup{\spx@noticetype}%
% Those are used by sphinxVerbatim if the \ifspx@inframed boolean is true
\setlength{\FrameRule}{0.5\dimexpr\spx@boxes@border@top+\spx@boxes@border@bottom\relax}%
% MEMO: prior to 5.1.0 \FrameSep was determined as 0.6\baselineskip -
% \FrameRule, and there was no possibility for user to adjust padding.
% Then \fcolorbox was used with \fboxrule set to \FrameRule and \fboxsep
% set to \FrameSep.
% The 5.1.0 default calculation of padding parameters maintains PDF output
% identical to legacy behaviour, as long as padding is not set by user.
\setlength{\FrameSep}{0.5\dimexpr\spx@boxes@padding@top+\spx@boxes@padding@bottom\relax}%
% "setup" macro has prepared the \spx@boxes@... dimen registers
\setlength{\FrameRule}{\spx@notice@border}%
\setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax}
\advance\spx@image@maxheight
-\dimexpr\spx@boxes@border@top+\spx@boxes@border@bottom
+\spx@boxes@padding@top+\spx@boxes@padding@bottom
-\dimexpr2\FrameRule
+2\FrameSep
+\baselineskip\relax % will happen again if nested, needed indeed!
% MEMO: the next comment is before boxing was extended to allow padding and
% multiple border-widths, not to mention shadows...
% configure framed.sty's parameters to obtain same vertical spacing
% as for "light" boxes. We need for this to manually insert parskip glue and
% revert a skip done by framed before the frame.
\ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
\vspace{\FrameHeightAdjust}
% copied/adapted from framed.sty's snugshade
% but now using in place of \fcolorbox the Sphinx sophisticated own
\def\FrameCommand##1{%
\hskip\@totalleftmargin
% "setup" macro MUST have been called before
\spx@boxes@fcolorbox{##1}%
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
}%
% 6.2.0 adds support for div.<notice type>_box-decoration-break=slice.
% (it is yet undecided if slice style should inhibit a bottom shadow)
\csname ifspx@\spx@noticetype @border@open\endcsname
\def\FirstFrameCommand
{\spx@boxes@fcolorbox@setup@openbottom\FrameCommand}%
\def\MidFrameCommand
{\spx@boxes@fcolorbox@setup@openboth \FrameCommand}%
\def\LastFrameCommand
{\spx@boxes@fcolorbox@setup@opentop \FrameCommand}%
\fi
\def\FrameCommand##1{\hskip\@totalleftmargin
\fboxsep\FrameSep \fboxrule\FrameRule
\fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}%
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
\savenotes
% use a minipage if we are already inside a framed environment
\ifspx@inframed
......@@ -175,11 +103,9 @@
\let\@listdepth\@mplistdepth \@mplistdepth\z@
\@minipagerestore
\@setminipage }%
\color@begingroup % workaround to an upstream framed.sty bug
}
{%
\par\unskip
\color@endgroup % matches the \color@begingroup
\@minipagefalse
\endMakeFramed
\ifspx@inframed\end{minipage}\fi
......@@ -188,55 +114,35 @@
% arrange for similar spacing below frame as for "light" boxes.
\vskip .4\baselineskip
}% end of sphinxheavybox environment definition
% - Since 1.5 these environments are named individually to allow user to
% redefine them entirely.
%
% - Since 5.1.0, sphinxheavybox is more versatile and four border widths, four
% padding widths, four corner radii, optional shadow, and three colors can all
% be modified via CSS-named alike options.
%
% - Since 6.2.0, also note/hint/important/tip notices can use these options
% and then they go automatically via sphinxheavybox. If only the legacy options
% are used, they keep using sphinxlightbox.
%
% - Since 6.2.0, \sphinxwarningtitle etc... add one level of mark-up (they
% expand to \sphinxstrong{#1}<space> which was former hard-coded mark-up).
% Example:
% \renewcommand{\sphinxwarningtitle}[1]{\textbf{#1}\par\smallskip
% {\color{sphinxwarningBorderColor}\hrule height1pt}\smallskip}
% may be renewenvironment'd by user for complete customization
\newenvironment{sphinxwarning}[1]
{\begin{sphinxheavybox}\sphinxstylewarningtitle{#1}}{\end{sphinxheavybox}}
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxcaution}[1]
{\begin{sphinxheavybox}\sphinxstylecautiontitle{#1}}{\end{sphinxheavybox}}
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxattention}[1]
{\begin{sphinxheavybox}\sphinxstyleattentiontitle{#1}}{\end{sphinxheavybox}}
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxdanger}[1]
{\begin{sphinxheavybox}\sphinxstyledangertitle{#1}}{\end{sphinxheavybox}}
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxerror}[1]
{\begin{sphinxheavybox}\sphinxstyleerrortitle{#1}}{\end{sphinxheavybox}}
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
% or just use package options
% the \colorlet of xcolor (if at all loaded) is overkill for our use case
\newcommand{\sphinxcolorlet}[2]
{\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname
\csname\@backslashchar color@#2\endcsname }
% the main dispatch for all types of notices
\newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading
% can't use #1 directly in definition of end part
\def\spx@noticetype {#1}%
% those next three are a remnant of legacy code; they are not used at
% all by sphinxheavybox, and their usage could be disposed of by sphinxlightbox
% but we keep for backward compatibility and also because it may be simpler
% for user redefinitions to employ for example "spx@notice@bgcolor" and not
% the more bulky "sphinx\spx@noticetype BgColor".
% set parameters of heavybox/lightbox
\sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}%
\sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}%
\spx@notice@border \dimexpr\csname spx@#1@border\endcsname\relax
% trigger the sphinx<type> environment, #2=heading is passed as argument
\begin{sphinx#1}{#2}%
% 6.2.0 support of div.<type>_TeX{color,extras} options
\csname ifspx@\spx@noticetype @withtextcolor\endcsname
\color{sphinx\spx@noticetype TextColor}%
\fi
\csname spx@\spx@noticetype @TeXextras\endcsname
}
% workaround some LaTeX "feature" of \end command (can't use "sphinx#1" here)
{\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp}
\spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax
% start specific environment, passing the heading as argument
\begin{sphinx#1}{#2}}
% workaround some LaTeX "feature" of \end command
{\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp}
\endinput
%% LITERAL BLOCKS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexliterals.sty}[2023/04/01 code-blocks and parsed literals]
\ProvidesFile{sphinxlatexliterals.sty}[2021/12/06 code-blocks and parsed literals]
% Provides support for this output mark-up from Sphinx latex writer:
%
......@@ -32,8 +32,6 @@
% - alltt
% - upquote
% - needspace
% - sphinxpackageboxes
\RequirePackage{sphinxpackageboxes}
% also in sphinxlatexadmonitions.sty:
% This is a workaround to a "feature" of French lists, when literal block
......@@ -52,8 +50,8 @@
% 4- while still allowing expansion of Pygments latex mark-up
% Other aspects such as framing, caption handling, codeline wrapping are
% added on top of it. We should stop using fancyvrb and implement
% 1, 2, 3, 4 by own Sphinx fully native Verbatim. This would greatly simplify
% in particular wrapping long code lines in a way allowing page breaks.
% 1, 2, 3, 4 by own Sphinx fully native Verbatim. This would allow to solve
% limitations with wrapped long code line not allowing page break.
\RequirePackage{fancyvrb}
% For parsed-literal blocks.
\RequirePackage{alltt}
......@@ -94,141 +92,77 @@
\newif\ifsphinxverbatimwithminipage \sphinxverbatimwithminipagefalse
% Framing macro for use with framed.sty's \FrameCommand
% MEMO: the sophisticated code in \spx@fcolorbox/\spx@CustomFBox
% is here for good reasons
% - be responsive to indented list environments in the manner of
% the "framed" (\fbox) and "shaded" (\colorbox) environments of
% framed.sty; indeed code here is an evolution related to \fcolorbox
% - attach non-detachable continuation hints above/below frame
% - draw the frame and fill the background color in a manner avoiding
% problems in some pdf viewers
% - do background coloring differently from color.sty/xcolor.sty macros
% (even core internal ones) to work around issues at page breaks
% as the framed contents are split into chunks with possibly unpaired
% "color push" or "color pop"
% About the produced output:
% - it obeys current indentation,
% - frame with 4 padding parameters and 4 border-width parameters
% - the contents use the full available text width, limited by indentation,
% - #1 = will be typeset above frame, in a non detachable way,
% - #2 = will be typeset below frame, in a non detachable way,
% - #3 = will be typeset within the frame.
% #1 and #2 are expected to be already typeset \hbox'es.
% #3 are the contents, and in the context of usage of fancyvrb+framed,
% it will arrive here already transformed into horizontal boxes,
% interline penalties and glues.
%
\long\def\spx@verb@FrameCommand #1#2#3{%
% The \spx@verb@boxes@fcolorbox@setup MUST have been executed beforehand.
% These \hskips are for fancyvrb.sty measuring and will make the
% framing "adapt" to an indented context.
% - frame is \fboxsep separated from the contents,
% - the contents use the full available text width,
% - #1 = color of frame, #2 = color of background,
% - #3 = above frame, #4 = below frame, #5 = within frame,
% - #3 and #4 must be already typeset boxes; they must issue \normalcolor
% or similar, else, they are under scope of color #1
\long\def\spx@fcolorbox #1#2#3#4#5{%
\hskip\@totalleftmargin
\hskip-\spx@boxes@border@left\hskip-\spx@boxes@padding@left
\spx@verb@fcolorbox {#1}{#2}{#3}%
\hskip-\spx@boxes@padding@right\hskip-\spx@boxes@border@right
\hskip-\fboxsep\hskip-\fboxrule
% use of \color@b@x here is compatible with both xcolor.sty and color.sty
\color@b@x {\color{#1}\spx@CustomFBox{#3}{#4}}{\color{#2}}{#5}%
\hskip-\fboxsep\hskip-\fboxrule
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
}%
\long\def\spx@verb@fcolorbox #1#2#3{%
% The \spx@verb@boxes@fcolorbox@setup MUST have been executed beforehand.
%
% MEMO: in the context of framed.sty this will always expand inside some
% \hbox isolated from other code, so we can use \box\z@, \box\tw@,...
% with no need of extra group.
%
% MEMO: this code was originally using \color@b@x but the latter has
% problematic features regarding color in a context like here where #3
% may contain an unbalanced "color push".
%
\setbox\z@\hbox{#3}%
\edef\spx@verb@fcolorbox@width@sp
{\number\dimexpr\wd\z@+\spx@boxes@border@left
+\spx@boxes@padding@left
+\spx@boxes@padding@right
+\spx@boxes@border@right\relax sp}%
\vbox{#1% continuation hint attached above frame, uses \spx@verb@fcolorbox@width@sp
% the boxes@fcolorbox constructs an \hbox with bbox containing the border
% \spx@verb@boxes@fcolorbox@setup MUST have been executed beforehand.
\spx@boxes@fcolorbox{\box\z@}%
% This \nointerlineskip to maintain legacy spacing when a \hrule was
% formerly last prior item in vertical list. TODO: remove this at 6.0.0 ?
\nointerlineskip
#2% continuation hint attached below frame, uses \spx@verb@fcolorbox@width@sp
}% end of \vbox
}%
\def\spx@verb@fcolorbox@put@c#1{% hide width from framed.sty measuring
\moveright.5\dimexpr\spx@verb@fcolorbox@width@sp\hb@xt@\z@{\hss#1\hss}%
}%
\def\spx@verb@fcolorbox@put@r#1{% right align with contents, width hidden
\moveright\dimexpr\spx@verb@fcolorbox@width@sp-%
\spx@boxes@padding@right-%
\spx@boxes@border@right\hb@xt@\z@{\hss#1}%
}%
\def\spx@verb@fcolorbox@put@l#1{% left align with contents, width hidden
\moveright\dimexpr\spx@boxes@border@left+%
\spx@boxes@padding@left\hb@xt@\z@{#1\hss}%
% #1 = for material above frame, such as a caption or a "continued" hint
% #2 = for material below frame, such as a caption or "continues on next page"
% #3 = actual contents, which will be typeset with a background color
\long\def\spx@CustomFBox#1#2#3{%
\begingroup
\setbox\@tempboxa\hbox{{#3}}% inner braces to avoid color leaks
\vbox{#1% above frame
% draw frame border _latest_ to avoid pdf viewer issue
\kern\fboxrule
\hbox{\kern\fboxrule
\copy\@tempboxa
\kern-\wd\@tempboxa\kern-\fboxrule
\vrule\@width\fboxrule
\kern\wd\@tempboxa
\vrule\@width\fboxrule}%
\kern-\dimexpr\ht\@tempboxa+\dp\@tempboxa+\fboxrule\relax
\hrule\@height\fboxrule
\kern\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
\hrule\@height\fboxrule
#2% below frame
}%
\endgroup
}%
\def\spx@fcolorbox@put@c#1{% hide width from framed.sty measuring
\moveright\dimexpr\fboxrule+.5\wd\@tempboxa\hb@xt@\z@{\hss#1\hss}%
}%
\def\spx@fcolorbox@put@r#1{% right align with contents, width hidden
\moveright\dimexpr\fboxrule+\wd\@tempboxa-\fboxsep\hb@xt@\z@{\hss#1}%
}%
\def\spx@fcolorbox@put@l#1{% left align with contents, width hidden
\moveright\dimexpr\fboxrule+\fboxsep\hb@xt@\z@{#1\hss}%
}%
%
\def\sphinxVerbatim@Continued{%
\csname spx@verb@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname
{{\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}%
}%
\def\sphinxVerbatim@Continues{%
\csname spx@verb@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname
{{\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}%
}%
\def\sphinxVerbatim@Title{%
\spx@verb@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}%
}%
\def\sphinxVerbatim@Continued
{\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname
{\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}%
\def\sphinxVerbatim@Continues
{\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname
{\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}%
\def\sphinxVerbatim@Title
{\spx@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}}%
\let\sphinxVerbatim@Before\@empty
\let\sphinxVerbatim@After\@empty
% Defaults are redefined in document preamble according to language
\newcommand*\literalblockcontinuedname{continued from previous page}%
\newcommand*\literalblockcontinuesname{continues on next page}%
%
\def\sphinxVerbatim@FrameCommand{%
\spx@verb@FrameCommand\sphinxVerbatim@Before\sphinxVerbatim@After
}%
\def\sphinxVerbatim@FirstFrameCommand{%
\ifspx@pre@border@open
\spx@boxes@fcolorbox@setup@openbottom
\fi
\spx@verb@FrameCommand\sphinxVerbatim@Before\sphinxVerbatim@Continues
}%
\def\sphinxVerbatim@MidFrameCommand{%
\ifspx@pre@border@open
\spx@boxes@fcolorbox@setup@openboth
\fi
\spx@verb@FrameCommand\sphinxVerbatim@Continued\sphinxVerbatim@Continues
}%
\def\sphinxVerbatim@LastFrameCommand{%
\ifspx@pre@border@open
\spx@boxes@fcolorbox@setup@opentop
\fi
\spx@verb@FrameCommand\sphinxVerbatim@Continued\sphinxVerbatim@After
}%
%
\def\spx@verb@boxes@fcolorbox@setup{%
% Prepares usage of \spx@boxes@fcolorbox
% Extras to remap legacy color names VerbatimBorderColor and VerbatimColor
% to a common naming scheme with admonitions (and topic directive), as
% expected by \spx@boxes@fcolorbox@setup from sphinxpackageboxes.sty.
\sphinxcolorlet{sphinxpreBorderColor}{VerbatimBorderColor}%
\sphinxcolorlet{sphinxpreBgColor}{VerbatimColor}%
% This VerbatimShadowColor is not a legacy name nor user documented but is
% an outcome of sphinx.sty batch definitions for CSS option support.
\sphinxcolorlet{sphinxpreShadowColor}{VerbatimShadowColor}%
\spx@boxes@fcolorbox@setup{pre}%
\ifspx@opt@verbatimwithframe
\else
\spx@boxes@border@top\z@
\spx@boxes@border@right\z@
\spx@boxes@border@bottom\z@
\spx@boxes@border@left\z@
\spx@boxes@border\z@
% MEMO: rounded corners still make sense in presence of a background
% color, so we do not force the fcolorbox@rectangle here
\fi
}%
\def\spx@verbatimfcolorbox{\spx@fcolorbox{VerbatimBorderColor}{VerbatimColor}}%
\def\sphinxVerbatim@FrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@After}%
\def\sphinxVerbatim@FirstFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@Continues}%
\def\sphinxVerbatim@MidFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@Continues}%
\def\sphinxVerbatim@LastFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@After}%
% For linebreaks inside Verbatim environment from package fancyvrb.
\newbox\sphinxcontinuationbox
......@@ -264,8 +198,7 @@
\def\sphinx@verbatim@nolig@list {\do \`}%
% Some characters . , ; ? ! / are neither pygmentized nor "tex-escaped".
% This macro makes them "active" and they will insert potential linebreaks.
% Not compatible with math mode (cf \sphinxunactivateextras, which uses
% these lists to make sure activated characters get de-activated).
% Not compatible with math mode (cf \sphinxunactivateextras).
\newcommand*\sphinxbreaksbeforeactivelist {}% none
\newcommand*\sphinxbreaksafteractivelist {\do\.\do\,\do\;\do\?\do\!\do\/}
\newcommand*\sphinxbreaksviaactive {%
......@@ -318,7 +251,7 @@
\def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}%
}
\newcommand*{\sphinxverbatimsmallskipamount}{\smallskipamount}
% serves to implement line highlighting
% serves to implement line highlighting and line wrapping
\newcommand\sphinxFancyVerbFormatLine[1]{%
\expandafter\sphinx@verbatim@checkifhl\expandafter{\the\FV@CodeLineNo}%
\ifin@
......@@ -327,120 +260,26 @@
\sphinxVerbatimFormatLine{#1}%
\fi
}%
\let\spx@original@set@color\set@color
\newcommand\sphinxVerbatimHighlightLine[1]{%
% This is morally a \colorbox (with a \fboxsep which would be 0pt)
% but some issues of potential colour disappearance at pagebreaks
% require workaround such as the one done here.
\leavevmode
% MEMO: usage of original \colorbox would insert a \set@color here
% and this then places a "color pop" at the end of the \box\z@.
% But this could pair erroneously with an unmatched "color push"
% as #1 is maybe only a part (already hboxed) of a codeline
% if (default) verbatimwrapslines=true
% (cf \spx@verb@@PreProcessLine; refs: #8686)
% MEMO: formerly we did something with \fboxsep in relation to the LaTeX
% bug graphics/4524 for \colorbox, but as we don't use \colorbox...
\setbox\z@\hb@xt@\linewidth{\strut#1\hss}%
% MEMO: \colorbox would lead to \color{sphinxVerbatimHighlightColor}
% plus \color@block, which results in doubled (a color.sty feature)
% color command send to device driver and more importantly has
% a "color pop" which will be after \box\z@. We avoid that for reasons
% mentioned above.
{%
\def\set@color{\let\set@color\spx@original@set@color}%
% will only set \current@color and delay the \set@color to \color@block
% as this all happens inside fancyvrb nested \hbox'es.
\color{sphinxVerbatimHighlightColor}%
% will use \current@color and pop it **before** \box\z@
\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@
}%
% we added a group only for \FV@RightListNumber not be influenced by the
% \current@color, if \fvset has been used to set numbers to the right.
}%
% MEMO: fancyvrb has options obeytabs and tabsize. Anyhow tab characters
% do not make it to the tex file, they have been converted to spaces earlier.
% But, if this was not the case, the support would be implemented here via
% \newcommand\sphinxVerbatimFormatLine[1]{\FV@ObeyTabs{\strut #1}}%
\newcommand\sphinxVerbatimFormatLine[1]{\strut#1}%
% MEMO: if verbatimwrapslines is set to true (default) the #1 above is
% simply \box\spx@tempboxb, from the next two macros.
% The next two macros are a deep hack of fancyvrb.sty core line processing in
% order to wrap too long lines, either at spaces and natural break-points,
% (soft wrap) or optionally at any character (hard wrap). This requires deep
% hack to work around the \hbox'es wrappers of fancyvrb.sty as they would
% prevent page breaks. Formerly Sphinx obtained wrapping by inserting the
% material into a vertical box (which was later again boxed -- twice -- by
% fancyvrb thinking it was a single line...) but this was incompatible with
% allowing page breaks (refs: #8686).
% We use core TeX techniques to pre-process a paragraph then recover its
% constituents lines (as boxes, not as tokens) and hand them over to original
% fancyvrb line process. It is mandatory to update \FV@ProcessLine and
% \@tempboxa globally to get fancyvrb internals into working to our
% satisfaction.
% This will get disrupted if anything adding vertical penalties or glues
% is activated via some \vadjust from inside the Pygmentized code lines.
\def\spx@verb@@ProcessLines{%
\unskip
\unpenalty
\setbox\spx@tempboxb\lastbox
\ifvoid\spx@tempboxb\else
{\spx@verb@@ProcessLines}%
\FV@ProcessLine{\box\spx@tempboxb}%
\global\let\FV@ProcessLine\FV@ProcessLine
\global\setbox\@tempboxa=\box\@tempboxa
\aftergroup\spx@verb@@InhibitLineNumber
\fi
}%
\def\spx@verb@@InhibitLineNumber{%
\let\FV@LeftListNumber\relax
\let\FV@RightListNumber\relax
\edef\sphinxrestorefboxsep{\fboxsep\the\fboxsep\relax}%
\fboxsep0pt\relax % cf LaTeX bug graphics/4524
\colorbox{sphinxVerbatimHighlightColor}%
{\sphinxrestorefboxsep\sphinxVerbatimFormatLine{#1}}%
% no need to restore \fboxsep here, as this ends up in a \hbox from fancyvrb
}%
% \sphinxVerbatimFormatLine will be set locally to one of those two:
\newcommand\sphinxVerbatimFormatLineWrap{%
\hsize\linewidth
\ifspx@opt@verbatimforcewraps
\expandafter\spx@verb@FormatLineForceWrap
\else\expandafter\spx@verb@FormatLineWrap
\fi
}%
% This will replace fancyvrb's \FV@@PreProcessLine
% Instead of boxing \FV@Line (which contains the Pygmentized line tokens), we
% first typeset it in a vertical box of the suitable width (taking into
% account nested lists) to activate the TeX built-in paragraph builder, then
% we recover individual lines as horizontal boxes and feed them to fancyvrb
% native line processing (which may add line numbers). The interline
% penalties and vertical glue to maintain baseline distance will be added
% again by this process so in recursive \spx@verb@@ProcessLines which starts
% from bottom and makes its way up to first part of the wrapped line we do not
% need to worry about them. An additional initial measuring step is needed if
% user issued verbatimforcewraps=true, which elaborates on the same technique.
% If hard wraps get activated, they get implemented via hacked \PYG macros.
\def\spx@verb@@PreProcessLine{%
\FV@StepLineNo
\FV@Gobble
\def\spx@verb@FV@Line{\FV@Line}%
\ifspx@opt@verbatimforcewraps
\spx@verb@DecideIfWillDoForceWrap
\fi
% MEMO: \everypar{} was issued earlier (and due to \@setminipage
% would have been only \@minipagefalse\everypar{} otherwise).
\setbox\spx@tempboxa=\vtop{\hsize\linewidth
\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}%
\long\def\spx@verb@FormatLineWrap#1{%
\vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
\doublehyphendemerits\z@\finalhyphendemerits\z@
% MEMO: fancyvrb has options obeytabs and tabsize. Anyhow tab characters
% do not make it to the tex file, they have been converted to spaces earlier.
% But, if this was not the case, the support would be implemented here via
% \FV@ObeyTabs{\strut\spx@verb@FV@Line\strut}%
% And one would need a similar change in the measuring phase done by
% \spx@verb@DecideIfWillDoForceWrap
\strut\spx@verb@FV@Line\strut
% MEMO: since LaTeX 2021-06-01, there might be some hooks executed at
% start and end of paragraphs (in future: PDF tagging), but we need an
% explicit \par here for that. Else the kernel hooks at start of paragraph
% are executed but not the ones at its end.
\par
}%
\setbox\spx@tempboxa=\vtop{\unvbox\spx@tempboxa
\setbox\spx@tempboxb\lastbox
{\spx@verb@@ProcessLines}%
\FV@ProcessLine{\box\spx@tempboxb}%
\global\let\FV@ProcessLine\FV@ProcessLine
\global\setbox\@tempboxa=\box\@tempboxa
}%
\unvbox\spx@tempboxa
\strut #1\strut}%
}%
%
% The normal line wrapping allows breaks at spaces and ascii non
......@@ -479,9 +318,6 @@
% box does not store in an accessible way what was the maximal
% line-width during paragraph building.
%
% MEMO: in future use perhaps rather \RawNoindent/\RawParEnd, but
% ltpara (LaTeX 2021-06-01) is not yet in final form (June 2022).
%
% Avoid LaTeX 2021 alteration of \@@par which potentially could break our
% measurement step (typically if the para/after hook is configured to use
% \vspace). Of course, breakage could happen only from user or package
......@@ -506,51 +342,52 @@
% character widths, or if the min width plus verbatimmaxunderfull character
% widths is inferior to linewidth, then we apply the "force wrapping" with
% potential line break at each character, else we don't.
\long\def\spx@verb@DecideIfWillDoForceWrap{%
\long\def\spx@verb@FormatLineForceWrap#1{%
% \spx@image@box is a scratch box register that we can use here
\global\let\spx@verb@maxwidth\z@
\global\let\spx@verb@minwidth\linewidth
\setbox\spx@tempboxa
\setbox\spx@image@box
\vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
\doublehyphendemerits\z@\finalhyphendemerits\z@
\spx@everypar{}\noindent\strut\FV@Line\strut\spx@par
\spx@everypar{}\noindent\strut #1\strut\spx@par
\spx@verb@getwidths}%
\ifdim\spx@verb@maxwidth>
\dimexpr\linewidth+\spx@opt@verbatimmaxoverfull\fontcharwd\font`X \relax
% The \expandafter is due to \spx@verb@wrapPYG requiring to "see" the TeX tokens
% from the pygmentize output.
\def\spx@verb@FV@Line{\expandafter\spx@verb@wrapPYG\FV@Line\spx@verb@wrapPYG}%
\spx@verb@FormatLineWrap{\spx@verb@wrapPYG #1\spx@verb@wrapPYG}%
\else
\ifdim\spx@verb@minwidth<
\dimexpr\linewidth-\spx@opt@verbatimmaxunderfull\fontcharwd\font`X \relax
\def\spx@verb@FV@Line{\expandafter\spx@verb@wrapPYG\FV@Line\spx@verb@wrapPYG}%
\fi
\fi
\spx@verb@FormatLineWrap{\spx@verb@wrapPYG #1\spx@verb@wrapPYG}%
\else
\spx@verb@FormatLineWrap{#1}%
\fi\fi
}%
% auxiliary paragraph dissector to get max and min widths
% but minwidth must not take into account the last line
\newbox\spx@scratchbox
\def\spx@verb@getwidths {%
\unskip\unpenalty
\setbox\spx@tempboxb\lastbox
\ifvoid\spx@tempboxb
\setbox\spx@scratchbox\lastbox
\ifvoid\spx@scratchbox
\else
\setbox\spx@tempboxb\hbox{\unhbox\spx@tempboxb}%
\ifdim\spx@verb@maxwidth<\wd\spx@tempboxb
\xdef\spx@verb@maxwidth{\number\wd\spx@tempboxb sp}%
\setbox\spx@scratchbox\hbox{\unhbox\spx@scratchbox}%
\ifdim\spx@verb@maxwidth<\wd\spx@scratchbox
\xdef\spx@verb@maxwidth{\number\wd\spx@scratchbox sp}%
\fi
\expandafter\spx@verb@getwidths@loop
\fi
}%
\def\spx@verb@getwidths@loop {%
\unskip\unpenalty
\setbox\spx@tempboxb\lastbox
\ifvoid\spx@tempboxb
\setbox\spx@scratchbox\lastbox
\ifvoid\spx@scratchbox
\else
\setbox\spx@tempboxb\hbox{\unhbox\spx@tempboxb}%
\ifdim\spx@verb@maxwidth<\wd\spx@tempboxb
\xdef\spx@verb@maxwidth{\number\wd\spx@tempboxb sp}%
\setbox\spx@scratchbox\hbox{\unhbox\spx@scratchbox}%
\ifdim\spx@verb@maxwidth<\wd\spx@scratchbox
\xdef\spx@verb@maxwidth{\number\wd\spx@scratchbox sp}%
\fi
\ifdim\spx@verb@minwidth>\wd\spx@tempboxb
\xdef\spx@verb@minwidth{\number\wd\spx@tempboxb sp}%
\ifdim\spx@verb@minwidth>\wd\spx@scratchbox
\xdef\spx@verb@minwidth{\number\wd\spx@scratchbox sp}%
\fi
\expandafter\spx@verb@getwidths@loop
\fi
......@@ -671,23 +508,15 @@
{\sphinxVerbatim@Title\nointerlineskip
\kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace
% if no frame (code-blocks inside table cells), remove
% the top padding (better visually)
\ifspx@opt@verbatimwithframe\else
% but we must now check if there is a background color
% MEMO: "fcolorbox@setup" will have been done by time of use
\ifspx@boxes@withbackgroundcolor\else-\spx@boxes@padding@top\fi
\fi
% the "verbatimsep" whitespace from the top (better visually)
\ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
% caption package adds \abovecaptionskip vspace, remove it
\spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}%
\else
\vskip\sphinxverbatimsmallskipamount
\def\sphinxVerbatim@After
{\nointerlineskip\kern\dimexpr\dp\strutbox
\ifspx@opt@verbatimwithframe\else
% but we must now check if there is a background color
% MEMO: "fcolorbox@setup" will have been done by time of use
\ifspx@boxes@withbackgroundcolor\else-\spx@boxes@padding@bottom\fi
\fi
\ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
\spx@ifcaptionpackage{-\abovecaptionskip}{}\relax
\sphinxVerbatim@Title}%
\fi
......@@ -704,29 +533,33 @@
\fi
\global\let\sphinxLiteralBlockLabel\empty
\global\let\sphinxVerbatimTitle\empty
% the "FrameCommand"'s are also responsible to attach the "Title".
\fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder
\ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi
\let\FrameCommand \sphinxVerbatim@FrameCommand
% those will also check status of the pre_box-decoration-break option
\let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand
\let\MidFrameCommand \sphinxVerbatim@MidFrameCommand
\let\LastFrameCommand \sphinxVerbatim@LastFrameCommand
%
\ifspx@opt@verbatimhintsturnover\else
\let\sphinxVerbatim@Continued\@empty
\let\sphinxVerbatim@Continues\@empty
\fi
% initialization for \spx@boxes@fcolorbox from sphinxpackageboxes.sty
% it will take into account status of verbatimwithframe Boolean
\spx@verb@boxes@fcolorbox@setup
\ifspx@opt@verbatimwrapslines
% deep hack into fancyvrb's internal processing of input lines
\let\FV@@PreProcessLine\spx@verb@@PreProcessLine
% space character will allow line breaks
% fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes.
% This customization wraps each line from the input in a \vtop, thus
% allowing it to wrap and display on two or more lines in the latex output.
% - The codeline counter will be increased only once.
% - The wrapped material will not break across pages, it is impossible
% to achieve this without extensive rewrite of fancyvrb.
% - The (not used in sphinx) obeytabs option to Verbatim is
% broken by this change (showtabs and tabspace work).
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap
\let\FV@Space\spx@verbatim@space
% allow breaks at special characters using \PYG... macros.
% Allow breaks at special characters using \PYG... macros.
\sphinxbreaksatspecials
% breaks at punctuation characters . , ; ? ! and / (needs catcode activation)
% Breaks at punctuation characters . , ; ? ! and / (needs catcode activation)
\fvset{codes*=\sphinxbreaksviaactive}%
\else % end of conditional code for wrapping long code lines
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap
\fi
\let\FancyVerbFormatLine\sphinxFancyVerbFormatLine
\VerbatimEnvironment
......@@ -771,47 +604,20 @@
\ifspx@opt@verbatimwrapslines
\let\verbatim@nolig@list \sphinx@verbatim@nolig@list
\fi
% optimization: as codelines will be handled inside boxes, \everypar is
% never reset, and it issues \@minipagefalse repeatedly (from \@setminipage).
% As fancyvrb Verbatim will do \@minipagefalse itself, let's simplify things.
\everypar{}%
\color@begingroup % protect against color leaks (upstream framed.sty bug)
\ifspx@pre@withtextcolor\color{VerbatimTextColor}\fi % mostly shadowed by
% Pygments highlighting anyhow
\spx@pre@TeXextras
% will fetch its optional arguments if any
\OriginalVerbatim
}%
}
{%
\endOriginalVerbatim
\color@endgroup % matches the \color@begingroup
\ifspx@inframed
\egroup % finish \sphinxVerbatim@ContentsBox vbox
\nobreak % update page totals
%%%%
% MEMO (2022/07/09, while preparing 5.1.0 LaTeX CSS-style sphinxsetup options)
% This test will systematically cause to abandon framing if the code-block
% is near bottom of a warning-type notice which TeX has not yet decided whether
% it fits on current page and which is near bottom of page. Indeed the
% \pagetotal will already be very near \pagegoal. This is probably a not
% intended behaviour, and perhaps the whole thing should be removed? Indeed
% the result is surprising then because the notice will be split, code-block
% will be on page 2 and will have no background-color, no border.
\ifdim\dimexpr
\ht\sphinxVerbatim@ContentsBox+
\ifdim\dimexpr\ht\sphinxVerbatim@ContentsBox+
\dp\sphinxVerbatim@ContentsBox+
\ht\sphinxVerbatim@TitleBox+
\dp\sphinxVerbatim@TitleBox+
% 6.2.0 uses here the dimen registers from sphinxpackageboxes.sty,
% they got setup by \spx@verb@boxes@fcolorbox@setup
\spx@boxes@padding@top+
\spx@boxes@padding@bottom+
\ifspx@opt@verbatimwithframe \spx@boxes@border@top+
\spx@boxes@border@bottom+\fi
2\fboxsep+2\fboxrule+
% try to account for external frame parameters
% MEMO: this is because the sphinxheavybox (for warning admonitions)
% environment sets \FrameSep and \FrameRule
% TODO: fix this bad implicit dependency
\FrameSep+\FrameRule+
% Usage here of 2 baseline distances is empirical.
% In border case where code-block fits barely in remaining space,
......@@ -838,7 +644,7 @@
\advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage
}%
\unvbox\sphinxVerbatim@ContentsBox
% the \@minipagefalse is superfluous, actually.
% some of this may be superfluous:
\par\unskip\@minipagefalse\endMakeFramed
\end{minipage}%
\fi
......@@ -985,12 +791,6 @@
% Hence \sphinx@do@noligs will be removed, or rather replaced with code
% inserting discretionaries, as they allow a continuation symbol on start of
% next line to achieve common design with code-blocks.
% TODO: do the above TODO!
% Extend \sphinxunactivateextras for \sphinxhref as the latter may
% actually be in the scope of \sphinxupquote and does a \scantokens
% of its own.
\expandafter\def\expandafter\sphinxunactivateextras\expandafter
{\sphinxunactivateextras\verbatim@nolig@list}%
\let\do@noligs\sphinx@do@noligs
\@noligs\endlinechar\m@ne\everyeof{}% (<- in case inside \sphinxhref)
\expandafter\scantokens
......
......@@ -119,7 +119,7 @@
\pysig@restore@itemsep@and@parskip
}
%
% Use a \parbox to accommodate long argument list in signatures
% Use a \parbox to accomodate long argument list in signatures
% LaTeX did not imagine that an \item label could need multi-line rendering
\newlength{\py@argswidth}
\newcommand{\py@sigparams}[2]{%
......
%% TOPIC AND CONTENTS BOXES
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexshadowbox.sty}[2023/03/19 sphinxShadowBox]
\ProvidesFile{sphinxlatexshadowbox.sty}[2021/01/27 sphinxShadowBox]
% Provides support for this output mark-up from Sphinx latex writer:
%
......@@ -16,58 +16,48 @@
%
% Requires:
\RequirePackage{framed}
\RequirePackage{sphinxpackageboxes}
% At 5.1.0 the code formerly here in a definition of \spx@ShadowFBox has been
% refactored to hand over to a more powerful \spx@boxes@fcolorbox provided by
% file sphinxpackageboxes.sty, it can draw rounded corners and add a background
% color.
% Again based on use of "framed.sty", this allows breakable framed boxes.
\long\def\spx@ShadowFBox#1{%
\leavevmode\begingroup
% first we frame the box #1
\setbox\@tempboxa
\hbox{\vrule\@width\sphinxshadowrule
\vbox{\hrule\@height\sphinxshadowrule
\kern\sphinxshadowsep
\hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}%
\kern\sphinxshadowsep
\hrule\@height\sphinxshadowrule}%
\vrule\@width\sphinxshadowrule}%
% Now we add the shadow, like \shadowbox from fancybox.sty would do
\dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax
\hbox{\vbox{\offinterlineskip
\hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule
% add shadow on right side
\lower\sphinxshadowsize
\hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}%
}%
\kern-\dimen@ % shift back vertically to bottom of frame
% and add shadow at bottom
\moveright\sphinxshadowsize
\vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}%
}%
% move left by the size of right shadow so shadow adds no width
\kern-\sphinxshadowsize
}%
\endgroup
}
% At 6.2.0, \spx@ShadowFBox is so much simplified that it is now not
% separately defined but directly incorporated into the \FrameCommand
% definition done by sphinxShadowBox environment below.
% Use framed.sty \MakeFramed/\endMakeFramed to allow page breaks for topic
% boxes. Originally Sphinx used \shadowbox from fancybox.sty but it did not
% allow pagebreaks (which was problematic for "contents" directive if there
% are many subsections).
%
% Docutils does not allow topic to be nested within topics or other body
% elements. But the LaTeX code here does allow it:
%
% - a topic inside another topic would be rendered in a minipage (thus not
% allowing pagebreaks). Its external frame would adapt perfectly to
% the *current (smaller) width for text*.
%
% - a topic inside (nested) lists or quote environments would have its frame
% take the *full width* of the page, but its text contents on the other hand
% would obey exactly the current indentation plus inner separation. This is
% in contrast with the framing used for literal blocks, also based, but in a
% more sophisticated way on usage of \MakeFramed/\endMakeFramed, and
% adjusting to current text indentation.
% use framed.sty to allow page breaks in frame+shadow
% works well inside Lists and Quote-like environments
% produced by ``topic'' directive (or local contents)
% could nest if LaTeX writer authorized it
\newenvironment{sphinxShadowBox}
{%
\spx@boxes@fcolorbox@setup{topic}%
% we will use the dimen registers from sphinxpackageboxes.sty which now hold
% the values from options related to topic/contents
% MEMO: \spx@boxes@fcolorbox creates an \hbox but does not quit vertical
% mode; but in context of framed.sty's \FrameCommand TeX is already
% in restricted horizontal mode, so no need for a \leavevmode here.
\def\FrameCommand {\spx@boxes@fcolorbox}%
% 6.2.0 adds support for div.topic_box-decoration-break=slice.
% (it is yet undecided if slice style should inhibit a bottom shadow)
\ifspx@topic@border@open
\def\FirstFrameCommand
{\spx@boxes@fcolorbox@setup@openbottom\FrameCommand}%
\def\MidFrameCommand
{\spx@boxes@fcolorbox@setup@openboth \FrameCommand}%
\def\LastFrameCommand
{\spx@boxes@fcolorbox@setup@opentop \FrameCommand}%
\fi
{\def\FrameCommand {\spx@ShadowFBox }%
\advance\spx@image@maxheight
-\dimexpr\spx@boxes@border@top+\spx@boxes@border@bottom
+\spx@boxes@padding@top+\spx@boxes@padding@bottom
+\ifdim\spx@boxes@shadow@yoffset<\z@-\fi\spx@boxes@shadow@yoffset
-\dimexpr2\sphinxshadowrule
+2\sphinxshadowsep
+\sphinxshadowsize
+\baselineskip\relax
% configure framed.sty not to add extra vertical spacing
\ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
......@@ -83,7 +73,7 @@
% use a minipage if we are already inside a framed environment
\ifspx@inframed\begin{minipage}{\linewidth}\fi
\MakeFramed {\spx@inframedtrue
% framed.sty puts into "\width" the added width (padding+border widths)
% framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule)
% adjust \hsize to what the contents must use
\advance\hsize-\width
% adjust LaTeX parameters to behave properly in indented/quoted contexts
......@@ -96,15 +86,9 @@
\@minipagerestore
\@setminipage
}%
\color@begingroup % workaround upstream framed.sty bug
\ifspx@topic@withtextcolor
\color{sphinxtopicTextColor}%
\fi
\spx@topic@TeXextras
}%
{% insert the "endminipage" code
\par\unskip
\color@endgroup % matches the \color@begingroup
\@minipagefalse
\endMakeFramed
\ifspx@inframed\end{minipage}\fi
......
%% TITLES
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexstyleheadings.sty}[2023/02/11 headings]
\ProvidesFile{sphinxlatexstyleheadings.sty}[2021/01/27 headings]
\RequirePackage[nobottomtitles*]{titlesec}
\@ifpackagelater{titlesec}{2016/03/15}%
......@@ -25,7 +25,6 @@
******** and Sphinx could not patch it, perhaps because your local ...|^^J%
******** copy is already fixed without a changed release date. .......|^^J%
******** If not, you must update titlesec! ...........................|}}%
\sphinxbuildwarning{badtitlesec}%
\fi
}%
}{}
......@@ -36,15 +35,13 @@
{\py@TitleColor\thesection}{0.5em}{\py@TitleColor}
\titleformat{\subsection}{\large\py@HeaderFamily}%
{\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}
% \normalsize added as work-around to a lualatex-ja upstream problem
% https://osdn.net/projects/luatex-ja/ticket/47321
\titleformat{\subsubsection}{\normalsize\py@HeaderFamily}%
\titleformat{\subsubsection}{\py@HeaderFamily}%
{\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}
% By default paragraphs (and subsubsections) will not be numbered because
% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2
\titleformat{\paragraph}{\normalsize\py@HeaderFamily}%
\titleformat{\paragraph}{\py@HeaderFamily}%
{\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}
\titleformat{\subparagraph}{\normalsize\py@HeaderFamily}%
\titleformat{\subparagraph}{\py@HeaderFamily}%
{\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}
......
%% TEXT STYLING
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexstyletext.sty}[2023/03/26 text styling]
\ProvidesFile{sphinxlatexstyletext.sty}[2021/12/06 text styling]
% Basically everything here consists of macros which are part of the latex
% markup produced by the Sphinx latex writer
% But those arise rather from the default definitions of the respective
% latex environments done in sphinxlatexadmonitions.sty
\def\sphinxstylenotetitle #1{\sphinxstrong{#1} }
\let\sphinxstylehinttitle \sphinxstylenotetitle % #1 holds the localized notice name
\let\sphinxstyleimportanttitle\sphinxstylenotetitle % followed by a colon
\let\sphinxstyletiptitle \sphinxstylenotetitle
\let\sphinxstylewarningtitle \sphinxstylenotetitle
\let\sphinxstylecautiontitle \sphinxstylenotetitle
\let\sphinxstyleattentiontitle\sphinxstylenotetitle
\let\sphinxstyledangertitle \sphinxstylenotetitle
\let\sphinxstyleerrortitle \sphinxstylenotetitle
\def\sphinxstyleseealsotitle#1{\sphinxstrong{#1}\par\nopagebreak}
%
% A utility to remove a final colon. Removing last token is not easy in
% LaTeX, and there are additional complications:
% - some languages will make the : "active" in document body,
% - the generic admonition ends up using "note", so for \sphinxnotetitle to
% use it safely, the utility has to allow an input not having any final colon.
% - a bit far-fetched but maybe there is more than one colon inside the input
% (possible from a generic admonition title).
% Hence the scary code.
\def\sphinxremovefinalcolon#1{% #1 is the "active" : TeX token
\protected\def\sphinxremovefinalcolon ##1{%
% complications due to : possibly "active"
\begingroup\ifnum\catcode`:=\active
\def\x####1#1\relax{####1}%
\else\def\x####1:\relax{####1}\fi
\expandafter\endgroup\x##1\relax
% trick to let \x work also if input ##1 has no ending colon
\@gobblefour#1\relax:\relax\relax\relax
}%
}% end of wrapper to inject active :
\begingroup\catcode`:\active\expandafter\endgroup\sphinxremovefinalcolon:
% See doc/latex.rst for an example.
% Some custom font markup commands.
\protected\def\sphinxstrong#1{\textbf{#1}}
\protected\def\sphinxcode#1{\texttt{#1}}
......@@ -54,8 +19,6 @@
\protected\def\sphinxaccelerator#1{\underline{#1}}
\protected\def\sphinxcrossref#1{\emph{#1}}
\protected\def\sphinxtermref#1{\emph{#1}}
\protected\def\sphinxsamedocref#1{\emph{#1}}
\protected\def\sphinxparam#1{\emph{#1}}
% \optional is used for ``[, arg]``, i.e. desc_optional nodes.
\long\protected\def\sphinxoptional#1{%
{\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}
......@@ -76,7 +39,6 @@
\protected\def\sphinxstyleothertitle #1{\textbf{#1}}
\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip}
% \text.. commands do not allow multiple paragraphs
% attention, this one is not self-delimiting
\protected\def\sphinxstyletheadfamily {\sffamily}
\protected\def\sphinxstyleemphasis #1{\emph{#1}}
\protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}}
......@@ -84,8 +46,8 @@
\protected\def\sphinxstyleliteralstrong#1{\sphinxbfcode{#1}}
\protected\def\sphinxstyleabbreviation #1{\textsc{#1}}
\protected\def\sphinxstyleliteralintitle#1{\sphinxcode{#1}}
\newcommand*\sphinxstylecodecontinued[1]{{\footnotesize(#1)}}%
\newcommand*\sphinxstylecodecontinues[1]{{\footnotesize(#1)}}%
\newcommand*\sphinxstylecodecontinued[1]{\footnotesize(#1)}%
\newcommand*\sphinxstylecodecontinues[1]{\footnotesize(#1)}%
% figure legend comes after caption and may contain arbitrary body elements
\newenvironment{sphinxlegend}{\par\small}{\par}
% reduce hyperref "Token not allowed in a PDF string" warnings on PDF builds
......@@ -105,9 +67,7 @@
\let\sphinxemail \@firstofone
\let\sphinxcrossref \@firstofone
\let\sphinxtermref \@firstofone
\let\sphinxsamedocref\@firstofone
\let\sphinxhyphen\sphinxhyphenforbookmarks
\def\PYG#1#2{#2}% (can not yet appear in section titles, but perhaps in future)
}}
% Special characters
......
%% TABLES (WITH SUPPORT FOR MERGED CELLS OF GENERAL CONTENTS)
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatextables.sty}[2022/08/15 tables]%
\ProvidesFile{sphinxlatextables.sty}[2021/01/27 tables]%
% Provides support for this output mark-up from Sphinx latex writer
% and table templates:
......@@ -25,31 +25,12 @@
% - \sphinxtablestrut
% - \sphinxthecaptionisattop
% - \sphinxthelongtablecaptionisattop
% - \sphinxhline
% - \sphinxcline
% - \sphinxvlinecrossing
% - \sphinxfixclines
% - \sphinxtoprule
% - \sphinxmidrule
% - \sphinxbottomrule
% - \sphinxtableatstartofbodyhook
% - \sphinxtableafterendhook
% - \sphinxthistablewithglobalstyle
% - \sphinxthistablewithbooktabsstyle
% - \sphinxthistablewithborderlessstyle
% - \sphinxthistablewithstandardstyle
% - \sphinxthistablewithcolorrowsstyle
% - \sphinxthistablewithnocolorrowsstyle
% - \sphinxthistablewithvlinesstyle
% - \sphinxthistablewithnovlinesstyle
%
% Executes \RequirePackage for:
%
% - tabulary
% - longtable
% - varwidth
% - colortbl
% - booktabs if 'booktabs' in latex_table_style
%
% Extends tabulary and longtable via patches and custom macros to support
% merged cells possibly containing code-blocks in complex tables
......@@ -62,13 +43,9 @@
% X or S (Sphinx) may have meanings if some table package is loaded hence
% \X was chosen to avoid possibility of conflict
\newcolumntype{\X}[2]{p{\dimexpr
(\linewidth-\spx@arrayrulewidth)*#1/#2-\tw@\tabcolsep-\spx@arrayrulewidth\relax}}
(\linewidth-\arrayrulewidth)*#1/#2-\tw@\tabcolsep-\arrayrulewidth\relax}}
\newcolumntype{\Y}[1]{p{\dimexpr
#1\dimexpr\linewidth-\spx@arrayrulewidth\relax-\tw@\tabcolsep-\spx@arrayrulewidth\relax}}
% \spx@arrayrulewidth is used internally and its meaning will be set according
% to the table type; no extra user code should modify it. In particular any
% \setlength{\spx@arrayrulewidth}{...} may break all of LaTeX... (really...)
\def\spx@arrayrulewidth{\arrayrulewidth}% 5.3.0, to be adjusted by each table
#1\dimexpr\linewidth-\arrayrulewidth\relax-\tw@\tabcolsep-\arrayrulewidth\relax}}
% using here T (for Tabulary) feels less of a problem than the X could be
\newcolumntype{T}{J}%
% For tables allowing pagebreaks
......@@ -190,11 +167,6 @@
\unexpanded\expandafter{\@vwid@setup}}%
}%
% NOTA BENE: since the multicolumn and multirow code was written Sphinx
% decided to prefix non public internal macros by \spx@ and in fact all
% such macros here should now be prefixed by \spx@table@, but doing the
% update is delayed to later. (written at 5.3.0)
%%%%%%%%%%%%%%%%%%%%%
% --- MULTICOLUMN ---
% standard LaTeX's \multicolumn
......@@ -236,16 +208,6 @@
% \arrayrulewidth space for each column separation in its estimate of available
% width).
%
% Update at 5.3.0: code uses \spx@arrayrulewidth which is kept in sync with the
% table column specification (aka preamble):
% - no | in preamble: \spx@arrayrulewidth -> \z@
% - at least a | in the preamble: \spx@arrayrulewidth -> \arrayrulewidth
% This is used for computation of merged cells widths. Mixed preambles using
% at least a | but not using it for all columns (as can be obtained via the
% tabularcolumns directive) may cause some merged cells contents to be slightly
% shifted to the left as they assume merged columns are | separated where in
% fact they perhaps are not.
%
% TN. 1b: as Sphinx multicolumn uses neither \omit nor \span, it can not
% (easily) get rid of extra macros from >{...} or <{...} between columns. At
% least, it has been made compatible with colortbl's \columncolor.
......@@ -267,19 +229,7 @@
% Sphinx generates no nested tables, and if some LaTeX macro uses internally a
% tabular this will not have a \sphinxstartmulticolumn within it!
%
% 5.3.0 adds a check for multirow as single-row multi-column will allow a row
% colour but multi-row multi-column should not.
% Attention that this assumes \sphinxstartmulticolumn is always followed
% in latex mark-up either by \sphinxmultirow or \begin (from \begin{varwidth}).
\def\sphinxstartmulticolumn#1#2{%
\ifx\sphinxmultirow#2%
\gdef\spx@table@hackCT@inmergedcell{\spx@table@hackCT@nocolor}%
\else
\global\let\spx@table@hackCT@inmergedcell\spx@@table@hackCT@inmergedcell
\fi
\sphinx@startmulticolumn{#1}#2%
}%
\def\sphinx@startmulticolumn{%
\def\sphinxstartmulticolumn{%
\ifx\equation$% $ tabulary's first pass
\expandafter\sphinx@TYI@start@multicolumn
\else % either not tabulary or tabulary's second pass
......@@ -335,21 +285,32 @@
\else
% if in an l, r, c type column, try and hope for the best
\xdef\sphinx@tempb{\the\dimexpr(\ifx\TY@final\@undefined\linewidth\else
\sphinx@TY@tablewidth\fi-\spx@arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\spx@arrayrulewidth\relax}%
\sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\arrayrulewidth\relax}%
\fi
\noindent\kern\sphinx@tempb\relax
\xdef\sphinx@multiwidth
{\the\dimexpr\sphinx@multiwidth+\sphinx@tempb+\tw@\tabcolsep+\spx@arrayrulewidth}%
\spx@table@hackCT@fixcolorpanel
% silence a | column separator in our merged cell
\spx@table@hackCT@inhibitvline
% prevent column colours to interfere with our multi-column but allow row
% colour (we can't obey a \cellcolor as it has not be seen yet at this stage)
\spx@table@hackCT@inmergedcell&\relax
{\the\dimexpr\sphinx@multiwidth+\sphinx@tempb+\tw@\tabcolsep+\arrayrulewidth}%
% hack the \vline and the colortbl macros
\sphinx@hack@vline\sphinx@hack@CT&\relax
% repeat
\expandafter\sphinx@multispan\expandafter{\the\numexpr#1-\@ne}%
}%
% packages like colortbl add group levels, we need to "climb back up" to be
% able to hack the \vline and also the colortbl inserted tokens. This creates
% empty space whether or not the columns were | separated:
\def\sphinx@hack@vline{\ifnum\currentgrouptype=6\relax
\kern\arrayrulewidth\arrayrulewidth\z@\else\aftergroup\sphinx@hack@vline\fi}%
\def\sphinx@hack@CT{\ifnum\currentgrouptype=6\relax
\let\CT@setup\sphinx@CT@setup\else\aftergroup\sphinx@hack@CT\fi}%
% It turns out \CT@row@color is not expanded contrarily to \CT@column@color
% during LaTeX+colortbl preamble preparation, hence it would be possible for
% \sphinx@CT@setup to discard only the column color and choose to obey or not
% row color and cell color. It would even be possible to propagate cell color
% to row color for the duration of the Sphinx multicolumn... the (provisional?)
% choice has been made to cancel the colortbl colours for the multicolumn
% duration.
\def\sphinx@CT@setup #1\endgroup{\endgroup}% hack to remove colour commands
\def\sphinx@multispan@end#1{%
% first, trace back our steps horizontally
\noindent\kern-\dimexpr\sphinx@multiwidth\relax
......@@ -359,12 +320,11 @@
\else
\xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+
(\ifx\TY@final\@undefined\linewidth\else
\sphinx@TY@tablewidth\fi-\spx@arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\spx@arrayrulewidth\relax}%
\sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\arrayrulewidth\relax}%
\fi
% last cell of the multi-column
\aftergroup\spx@table@hackCT@fixcolorpanel
\aftergroup\spx@table@hackCT@inmergedcell
% we need to remove colour set-up also for last cell of the multi-column
\aftergroup\sphinx@hack@CT
}%
\newcommand*\sphinxcolwidth[2]{%
% this dimension will always be used for varwidth, and serves as maximum
......@@ -385,8 +345,8 @@
\linewidth
\else
% l, c, r columns. Do our best.
\dimexpr(\linewidth-\spx@arrayrulewidth)/#2-
\tw@\tabcolsep-\spx@arrayrulewidth\relax
\dimexpr(\linewidth-\arrayrulewidth)/#2-
\tw@\tabcolsep-\arrayrulewidth\relax
\fi
\else % in tabulary
\ifx\equation$%$% first pass
......@@ -397,8 +357,8 @@
\linewidth % in a L, R, C, J column or a p, \X, \Y ...
\else
% we have hacked \TY@final to put in \sphinx@TY@tablewidth the table width
\dimexpr(\sphinx@TY@tablewidth-\spx@arrayrulewidth)/#2-
\tw@\tabcolsep-\spx@arrayrulewidth\relax
\dimexpr(\sphinx@TY@tablewidth-\arrayrulewidth)/#2-
\tw@\tabcolsep-\arrayrulewidth\relax
\fi
\fi
\fi
......@@ -408,125 +368,7 @@
% \sphinxcolwidth will use this only inside LaTeX's standard \multicolumn
\def\sphinx@multiwidth #1#2{\dimexpr % #1 to gobble the \@gobble (!)
(\ifx\TY@final\@undefined\linewidth\else\sphinx@TY@tablewidth\fi
-\spx@arrayrulewidth)*#2-\tw@\tabcolsep-\spx@arrayrulewidth\relax}%
% \spx@table@hackCT@inhibitvline
% packages like colortbl add group levels, we need to "climb back up" to be
% able to hack the \vline and also the colortbl inserted tokens. The hack
% sets the \arrayrulewidth to \z@ to inhibit a | separator at right end
% of the cell, if present (our code does not use \omit so can not avoid the
% \vline insertion, but setting its width to zero makes it do nothing).
% Some subtlety with colour panels must be taken care of.
\def\spx@table@hackCT@inhibitvline{\ifnum\currentgrouptype=6\relax
\kern\spx@arrayrulewidth % will be compensated by extra colour panel left overhang
\arrayrulewidth\z@% trick to inhibit the {\vrule width \arrayrulewidth}
\else\aftergroup\spx@table@hackCT@inhibitvline\fi}%
% hacking around colour matters
% Sphinx 1.6 comment:
% It turns out \CT@row@color is not expanded contrarily to \CT@column@color
% during LaTeX+colortbl preamble preparation, hence it would be possible for
% \CT@setup to discard only the column color and choose to obey or not
% row color and cell color. It would even be possible to propagate cell color
% to row color for the duration of the Sphinx multicolumn... the (provisional?)
% choice has been made to cancel the colortbl colours for the multicolumn
% duration.
% Sphinx 5.3.0 comment:
% - colortbl has no mechanism to disable colour background in a given cell:
% \cellcolor triggers one more \color, but has no possibility to revert
% a previously emitted \color, only to override it via an additional \color
% - prior to 5.3.0, Sphinx did not officially support colour in tables,
% but it did have a mechanism to protect merged cells from being partly
% covered by colour panels at various places. At 5.3.0 this mechanism
% is relaxed a bit to allow row colour for a single-row merged cell.
%
% fixcolorpanel
\def\spx@table@hackCT@fixcolorpanel{\ifnum\currentgrouptype=6\relax
\edef\spx@table@leftcolorpanelextra
% \edef as \arrayrulewidth will be set to \z@ next,
% hence also \spx@arrayrulewidth...
{\sphinxcolorpanelextraoverhang+\the\spx@arrayrulewidth}%
\else\aftergroup\spx@table@hackCT@fixcolorpanel\fi}%
%
% inmergedcell
% \spx@table@hackCT@inmergedcell will be locally set to either this
% \spx@@table@hackCT@inmergedcell or to \spx@table@hackCT@nocolor
% "\let\spx@original@CT@setup\CT@setup" is done after loading colortbl
\def\spx@@table@hackCT@inmergedcell{\ifnum\currentgrouptype=6\relax
\let\CT@setup\spx@CT@setup@inmergedcell
\else\aftergroup\spx@@table@hackCT@inmergedcell\fi
}%
\newif\ifspx@table@inmergedcell
\def\spx@CT@setup@inmergedcell #1\endgroup{%
% - obey only row color and disable effect of \sphinxcolorblend
% - turn on the inmergedcell boolean to signal to \CT@row@color
\spx@original@CT@setup
\spx@table@inmergedcelltrue % needed by \CT@row@color
% deactivate effect of \sphinxcolorblend if it happened at all
\ifdefined\blendcolors\blendcolors{}\fi
\CT@row@color
\CT@do@color
\global\let\CT@cell@color\relax
\endgroup
}%
%
% nocolor
\def\spx@table@hackCT@nocolor{\ifnum\currentgrouptype=6\relax
% sadly \CT@column@color is possibly already expanded so we can't
% simply do \let\CT@column@color\relax etc...
% admittedly we could perhaps hack \CT@color but well
\let\CT@setup\spx@CT@setup@nocolor
\else\aftergroup\spx@table@hackCT@nocolor\fi
}
\def\spx@CT@setup@nocolor#1\endgroup{%
\global\let\CT@cell@color\relax
% the above fix was added at 5.3.0
% formerly a \cellcolor added by a raw latex directive in the merged cell
% would have caused colour to apply to the *next* cell after the merged
% one; we don't support \cellcolor from merged cells contents anyhow.
\endgroup}
%
% norowcolor
\def\spx@table@hackCT@norowcolor{%
% a bit easier although merged cells complicate the matter as they do need
% to keep the rowcolor; and we can't know yet if we are in a merged cell
\ifnum\currentgrouptype=6\relax
\ifx\CT@row@color\relax
\else
\let\spx@saved@CT@row@color\CT@row@color
\def\CT@row@color{%
\ifspx@table@inmergedcell\expandafter\spx@saved@CT@row@color\fi
}%
\fi
\else\aftergroup\spx@table@hackCT@norowcolor\fi
}
%
% \sphinxcolorblend
\def\spx@table@hackCT@colorblend{%
\ifnum\currentgrouptype=6\relax
\expandafter\blendcolors\spx@colorblendparam
% merged cells will do a \blendcolors{} to cancel the effet
% we can not know here yet if in merged cell as the boolean
% \ifspx@table@inmergedcell is not yet updated
\else
\aftergroup\spx@table@hackCT@colorblend
\fi
}
\def\sphinxcolorblend#1{\gdef\spx@colorblendparam{{#1}}\spx@table@hackCT@colorblend}
% Either xcolor.sty exists on user system and has been loaded by sphinx.sty,
% or it does not exist, so we can use \@ifpackageloaded without delaying.
\@ifpackageloaded{xcolor}%
{}%
{\def\sphinxcolorblend#1{%
\PackageWarning{sphinx}{This table uses \string\sphinxcolorblend\space
but xcolor is not in\MessageBreak
the TeX/LaTeX installation, the command will be\MessageBreak
ignored in this and the next tables}%
\global\let\sphinxcolorblend\@gobble
\sphinxbuildwarning{colorblend}%
}%
}
-\arrayrulewidth)*#2-\tw@\tabcolsep-\arrayrulewidth\relax}%
%%%%%%%%%%%%%%%%%%
% --- MULTIROW ---
......@@ -548,22 +390,9 @@
% that the table rows have the needed height. The needed mark-up is done
% by LaTeX writer, which has its own id for the merged cells.
%
% The colour issue is "solved" by clearing colour panels in all cells,
% The colour issue is solved by clearing colour panels in all cells,
% whether or not the multirow is single-column or multi-column.
%
% MEMO at 5.3.0: to allow a multirow cell in a single column to react to
% \columncolor correctly, it seems only way is that the contents
% are inserted by bottom cell (this is mentioned in multirow.sty doc, too).
% Sphinx could at Python level "move" the contents to that cell. But the
% mechanism used here via \sphinxtablestrut to enlarge rows to make room for
% the contents if needed becomes more challenging yet, because \sphinxtablestrut
% mark-up will be parsed by TeX *before* it sees the contents of the merged
% cell.. So it seems the best way would be to actually store the contents into
% some owned-by-Sphinx box storage which needs to be globally allocated to
% that usage ; then we need multiple such boxes, say at least 5 to cover
% 99% or use case. Or perhaps some trick with storing in a \vbox and recovering
% via some \vsplit but this becomes complicated... perhaps in future.
%
% In passing we obtain baseline alignements across rows (only if
% \arraystretch is 1, as LaTeX's does not obey \arraystretch in "p"
% multi-line contents, only first and last line...)
......@@ -581,15 +410,6 @@
\setbox\z@\hbox\bgroup\aftergroup\sphinx@@multirow\strut
}%
\def\sphinx@@multirow {%
% MEMO: we could check status of \CT@cell@color here, but unfortunately we
% can't know the exact height which will be covered by the cells in total
% (it may be more than our \box\z@ dimensions). We could use an \fcolorbox
% wrapper on \box\z@ but this will not extend precisely to the bottom rule.
%
% Only solution if we want to obey a raw \cellcolor, or a \columncolor, seems
% to delay unboxing the gathered contents as part of the bottom row with
% a suitable vertical adjustment...
%
% The contents, which is a varwidth environment, has been captured in
% \box0 (a \hbox).
% We have with \sphinx@cellid an assigned unique id. The goal is to give
......@@ -655,592 +475,7 @@
\@width\z@
\endgroup
% we need this to avoid colour panels hiding bottom parts of multirow text
\spx@table@hackCT@nocolor
\sphinx@hack@CT
}%
%%%%%%%%%%%%%%%%%%
% --- STYLING ---
%
%
% Support for colour in table
%
% Core LaTeX package (very old, part of texlive-latex-base on Debian distr.)
% providing \columncolor, \rowcolor, \cellcolor and \arrayrulecolor.
\RequirePackage{colortbl}
\let\spx@original@CT@setup\CT@setup
% LaTeX's \cline has **strong** deficiencies
% ******************************************
% We work around them via an added \sphinxfixclines{number of columns} in the
% table mark-up, and also extra mark-up \sphinxvlinecrossing{col no} for
% crossings not contiguous to any cline. To fix the gap at left extremity of a
% \cline, we redefine the core LaTeX \c@line because this avoids adjoining a
% small square with potential PDF viewer anti-aliasing issues. We waited
% after loading colortbl because it also redefines \c@line for it to obey the
% colour set by \arrayrulecolor.
% MEMO: booktabs package does *not* redefine \@cline so we are safe here.
\def\@cline#1-#2\@nil{%
\omit
\@multicnt#1%
\advance\@multispan\m@ne
\ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
\@multicnt#2%
\advance\@multicnt-#1%
\advance\@multispan\@ne
{\CT@arc@
% start of Sphinx modification
\ifnum#1>\@ne\kern-\spx@arrayrulewidth\fi% fix gap at join with vertical lines
% end of Sphinx modification
% Comments:
%
% If we had the information whether the previous column ended with a | or
% not, we could decide what to do here. Alternatively the mark-up could
% use either original \cline or the one modified as here depending on case.
% One wonders why LaTeX does not provide itself the alternative as a
% complement to \cline, to use on case by case basis.
% Here we handle both at same time via using the \spx@arrayrulewidth which
% will be \z@ if no | at all so will induce here nothing.
%
% As a result Sphinx basically supports well only tables having either all
% columns |-separated, or no | at all, as it uses \spx@arrayrrulewidth in
% all columns (here and in multicolumn code).
%
% We also considered a method not modifying \c@line but it requires too
% much extra mark-up from Python LaTeX writer and/or extra LaTeX coding.
% back to LaTeX+colortbl code
\leaders\hrule\@height\arrayrulewidth\hfill}%
\cr
% the last one will need to be compensated, this is job of \sphinxclines
\noalign{\vskip-\arrayrulewidth}%
}
\def\spx@table@fixvlinejoin{%
{\CT@arc@ % this is the color command set up by \arrayrulecolor
\vrule\@height\arrayrulewidth
% side remark: LaTeX has only a single \arrayrulewidth for all kinds
% for cell borders in table, horizontal or vertical...
\@depth\z@
\@width\spx@arrayrulewidth
}%
}
% Sphinx LaTeX writer issues one such for each vertical line separating two
% contiguous multirow cells; i.e. those crossings which can are not already
% taken care of by our modified at left extremity \cline.
% One could imagine a more \...crossingS (plural) receiving a comma delimited
% list, which would simplify the mark-up but this would complexify both the
% Python and the LaTeX coding.
\def\sphinxtablevlinecrossing#1{%
\sphinxtabledecrementrownum
\omit
\@multispan{#1}%
\hfill
\spx@table@fixvlinejoin
\cr
\noalign{\vskip-\arrayrulewidth}%
}
% This "fixclines" is also needed if no \sphinxcline emitted and is useful
% even in extreme case with no \sphinxvlinecrossing either, to give correct
% height to multirow extending across all table width assuming other rows are
% separated generally by an \hline, so as to keep coherent line spacing.
%
% It is designed to work ok even if no | separators are in the table (because
% \spx@table@fixvlinejoin uses \spx@arrayrulewidth which is \z@ in that case).
\def\sphinxtablefixclines#1{% #1 is the number of columns of the table
\sphinxtabledecrementrownum
\omit
\spx@table@fixvlinejoin% unneeded if first \cline started at column 1 but does
% not hurt; fills small gap at left-bordered table
\@multispan{#1}%
\hfill
\spx@table@fixvlinejoin% fill small gap at right-bordered table
\cr
% this final one does NO \vskip-\arrayrulewidth... that's the whole point
}
%%%% end of \cline workarounds
%
% - passing option "table" to xcolor also loads colortbl but we needed to
% load color or xcolor prior to the handling of the options
%
% - the \rowcolors command from [table]{xcolor} has various problems:
%
% * it is rigid and does not out-of-the-box allow a more complex scheme
% such as colorA+colorB+colorC+colorB+colorC+colorB+colorC... suitable to
% distinguish a header row.
%
% * its code does not export the used colour, an information which we may
% need for example to colourize the rule via \arrayrulecolor in the
% appropriate manner, for example to colourize the booktabs induced vertical
% whitespace to avoid gaps (if one wants to).
%
% * incompatibility with tabulary: the output depends on parity of total
% number of rows!
%
% * problems with longtable: the caption will receive a background colour
% panel, if we do not deactivate the \rowcolors action during definition of
% the headers and footers; this requires extra mark-up. Besides if we
% deactivate using \hiderowcolors during header and footer formation, the
% parity of the body rows is shifted, \rownum is even, not odd, at first body
% row. And setting \rownum at start of first body row is too late for
% influencing the colour.
%
% * it has a global impact and must be reset at each table. We can not
% issue it only once and it provides no public interface (without @) to
% cancel its effect conveniently (\hiderowcolors can only be used from
% *inside* a table.)
%
% * its core mechanism which increments the row count is triggered
% if a \cline is encountered... so this offsets the alternating colours...
% ... or not if there are two \cline's in the row...
% (as we will use same mechanism we have to correct this increment).
%
% So we need our own code.
% Provide \rownum and rownum LaTeX counter (code copied from colortbl v1.0f)
\ltx@ifundefined{rownum}{%
\ltx@ifundefined{c@rownum}%
{\newcount\rownum\let\c@rownum\rownum}%
{\let\rownum\c@rownum}%
}%
{\let\c@rownum\rownum}
\providecommand\therownum{\arabic{rownum}}
% extra overhang for color panels to avoid visual artifacts in pdf viewers
% (particularly if borderless)
\def\sphinxcolorpanelextraoverhang{0.1pt}
\def\spx@table@leftcolorpanelextra {\sphinxcolorpanelextraoverhang}
\def\spx@table@rightcolorpanelextra{\sphinxcolorpanelextraoverhang}
% the macro to which \CT@row@color will be set for coloured rows, serves both
% in header and body, the colours must have been defined at time of use
\def\spx@table@CT@row@color{\ifspx@table@inmergedcell
\CT@color{sphinxTableMergeColor}%
\else
\CT@color{sphinxTableRowColor}%
\fi
\@tempdimb\dimexpr\col@sep+\spx@table@leftcolorpanelextra\relax
\@tempdimc\dimexpr\col@sep+\spx@table@rightcolorpanelextra\relax
}%
% used by itself this will influence a single row if \CT@everycr is the
% colortbl one, to influences all rows the \CT@everycr must be modified (see
% below)
\def\sphinxrowcolorON {\global\let\CT@row@color\spx@table@CT@row@color}%
% this one turns off row colours until the next \sphinxrowcolorON
\def\sphinxrowcolorOFF{\global\let\CT@row@color\relax}%
% this one inhibits the row colour in one cell only (can be used as
% >{\sphinxnorowcolor} for turning off row colours in a given column)
\def\sphinxnorowcolor{\spx@table@hackCT@norowcolor}%
% \sphinxtoprule (or rather \sphinxtabletoprulehook) will be modified by
% the colorrows class to execute this one:
\def\spx@table@@toprule@rowcolorON{%
\noalign{%
% Because of tabulary 2-pass system, the colour set-up at end of table
% would contaminate the header colours at start of table, so must reset
% them here. We want all header rows to obey same colours, so we don't
% use original \CT@everycr which sets \CT@row@color to \relax.
\global\CT@everycr{\the\everycr}%
\global\sphinxcolorlet{sphinxTableRowColor}{sphinxTableRowColorHeader}%
\global\sphinxcolorlet{sphinxTableMergeColor}{\sphinxTableMergeColorHeader}%
\sphinxrowcolorON
}%
}%
% \sphinxtableatstartofbodyhook will be modified by colorrows class to
% execute this one; it starts the alternating colours and triggers increment
% or \rownum count at each new row (the xcolor base method for \rowcolors)
\def\spx@table@@startbodycolorrows{%
\noalign{%
\global\CT@everycr{% Nota Bene: in a longtable with \hline the \everycr is
% done two extra times! but 2 is even, so this is ok
\noalign{\global\advance\rownum\@ne % the xcolor \rowcolors base trick
% MEMO: colortbl \CT@row@color is expanded *after* the cell contents have been
% gathered and measured, so it can't be used to expose e.g. the colour to the
% cell contents macro code. Of course if it is known how the colour is chosen
% the procedure could be done from inside the cell. Simpler to expose the colour
% in a public name sphinxTableRowColor at start of the row in this \noalign.
\sphinxSwitchCaseRowColor\rownum
}%
\the\everycr
}%
\global\rownum\@ne % is done from inside table so ok with tabulary two passes
\sphinxSwitchCaseRowColor\rownum % set up color for the first body row
\sphinxrowcolorON % has been done from \sphinxtoprule location but let's do
% it again in case \sphinxtabletoprulehook has been used
% to inhibit colours in the header rows
}% end of noalign contents
}
% set the colours according to row parity; a priori #1 is \rownum, but
% the macro has been designed to be usable in user level added code
\def\sphinxSwitchCaseRowColor#1{%
\ifodd#1\relax
\global\sphinxcolorlet{sphinxTableRowColor}{sphinxTableRowColorOdd}%
\global\sphinxcolorlet{sphinxTableMergeColor}{\sphinxTableMergeColorOdd}%
\else
\global\sphinxcolorlet{sphinxTableRowColor}{sphinxTableRowColorEven}%
\global\sphinxcolorlet{sphinxTableMergeColor}{\sphinxTableMergeColorEven}%
\fi
}
% each \cline or \cmidrule (booktabs) consumes one \cr, offsetting the \rownum
% parity; so this macro serves to compensate and must be added to each such
% \cline or \cmidrule (see below)
\def\spx@table@@decrementrownum{\noalign{\global\advance\rownum\m@ne}}
\let\sphinxtabledecrementrownum\@empty
% \sphinxtableafterendhook will be modified by colorrows class to execute
% this after the table
\def\spx@table@resetcolortbl{%
\sphinxrowcolorOFF
\spx@table@reset@CTeverycr
% this last bit is done in order for the \sphinxbottomrule from the "foot"
% longtable template to be able to use same code as the \sphinxbottomrule
% at end of table body; see \sphinxbooktabsspecialbottomrule code
\global\rownum\z@
}
\def\spx@table@reset@CTeverycr{%
% we should probably be more cautious and not hard-code here the colortbl
% set-up; so the macro is defined without @ to fac
\global\CT@everycr{\noalign{\global\let\CT@row@color\relax}\the\everycr}%
}
% At last the style macros \sphinxthistablewithstandardstyle etc...
% They are executed before the table environments in a scope limiting
% wrapper "savenotes" environment.
%
% 0) colour support is enacted via adding code to three hooks:
% - \sphinxtabletoprulehook (implicit from \sphinxtoprule expansion)
% - \sphinxtableatstartofbodyhook (explicit from table templates)
% - \sphinxtableafterendhook (explicit from table templates)
% additionally special adjustment must be made in \sphinxcline
%
\def\sphinxtoprule{\spx@toprule\sphinxtabletoprulehook}
% \spx@toprule is what is defined by the standard, booktabs and borderless
% styles.
% The colorrows class will prepend \spx@table@toprule@rowcolorON into
% \sphinxtabletoprulehook which a priori is \@empty but can contain user added
% extra code, and is executed after \spx@toprule.
\let\sphinxtabletoprulehook \@empty
\let\sphinxtableatstartofbodyhook\@empty
\let\sphinxtableafterendhook \@empty
%
% 1) we manage these three hooks in a way allowing a custom user extra wrapper
% environment from a container class to use them as entry point for some
% custom code. The container code is done first, prior to table templates.
% So, the style macros will *prepend* the needed color-code to the existing
% custom user code, so the custom user code can override them. The custom
% user code should not redefine any of the 3 \sphinxtable...hook macros via a
% \global\def, but their contents can use \gdef. In fact they probably need
% to for the first two hooks which are executed from inside the table and
% a priori need their code to be in a \noalign which limits scope.
%
% 2) the table templates and LaTeX writer code make it so that only
% one of either
% \sphinxthistablewithcolorrowsstyle,
% or \sphinxthistablewithnocolorrowsstyle
% will be inserted explicitly depending on local :class: for table.
% The global 'colorrows' style in latex_table_style translates at bottom
% of this file into code for inserting \sphinxthistablewithcolorrowsstyle
% at end of \sphinxthistablewithglobalstyle. So it is impossible
% to have first \sphinxthistablewithnocolorrowsstyle, then
% \sphinxthistablewithcolorrowsstyle. Nevertheless we have written
% the code so that in this case colorrows would indeed activate (except
% if it was already executed before as it self-annihilates).
% standard style
\def\sphinxthistablewithstandardstyle{%
% Those two are produced by the latex writer
\def\sphinxhline {\hline}%
% \sphinxtabledecrementrownum is a no-op which is redefined by colorrows
% to correct the \rownum increment induced by \cline in colorrows regime
\def\sphinxcline {\sphinxtabledecrementrownum\cline}%
% LaTeX's \cline needs fixing
\let\sphinxvlinecrossing\sphinxtablevlinecrossing
\let\sphinxfixclines \sphinxtablefixclines
% Those three are inserted by the table templates
\def\spx@toprule {\hline}%
\def\sphinxmidrule {\hline}%
\def\sphinxbottomrule {\hline}%
% Do not tamper with this internal
\def\spx@arrayrulewidth{\arrayrulewidth}%
}
% booktabs style
% The \@xcmidrule patch below will do beyond its main stuff
% \sphinxadjustcmidrulebelowsep
% Indeed the poor booktabs spacing with \cmidrule (if \sphinxbooktabscmidrule
% defined below is overwritten to use it) is quite awful. Do
% \let\sphinxadjustcmidrulebelowsep\empty
% if you prefer booktabs defaults.
\def\sphinxadjustcmidrulebelowsep{\belowrulesep=\aboverulesep}
\AtBeginDocument{% patch booktabs to avoid extra vertical space from
% consecutive \sphinxcline, if defined to use \cmidrule
\ifdefined\@xcmidrule
\let\spx@original@@xcmidrule\@xcmidrule
\def\@xcmidrule{\sphinxadjustcmidrulebelowsep
% if we don't do that, two \sphinxcline in the same row
% will cause the second short rule to be shifted down
\ifx\@tempa\sphinxcline\let\@tempa\cmidrule\fi
\spx@original@@xcmidrule}%
\fi
}
% wrappers to allow customization, e.g. via a container class
% the top, mid, bottom definitions are in fact overwritten (later, below)
% byt more complex ones needed to handle booktabs+colorrows context
\def\sphinxbooktabstoprule {\toprule}
\def\sphinxbooktabsmidrule {\midrule}
\def\sphinxbooktabsbottomrule{\bottomrule}
%
\let\sphinxbooktabscmidrule \@gobble % i.e. draw no short rules at all!
% You can redefine this to use \cmidrule with various options, such
% as \cmidrule(lr), but:
% Attention, if you want this to use \cmidrule (or \cline) you must,
% if the table uses row colours,
% also include the \sphinxtabledecrementrownum token like e.g. this
% \def\sphinxbooktabscmidrule{\sphinxtabledecrementrownum\cmidrule(lr)}
% and it must be first due to internals of the \cmidrule usage of \futurelet.
\def\sphinxthistablewithbooktabsstyle{%
\let\sphinxhline\@empty % there is no wrapper macro here so if you want to change that
% you will have to redefine \sphinxthistablewithbooktabsstyle
\def\sphinxcline {\sphinxbooktabscmidrule}% defaults to give \@gobble
\let\sphinxvlinecrossing\@gobble % no | in a booktabs-style table !
\let\sphinxfixclines \@gobble % should not be used with booktabs + \cmidrule
\def\spx@toprule {\sphinxbooktabstoprule}%
\def\sphinxmidrule {\sphinxbooktabsmidrule}%
\def\sphinxbottomrule{\sphinxbooktabsbottomrule}%
\def\spx@arrayrulewidth{\z@}%
}
\AtBeginDocument{\@ifpackageloaded{booktabs}%
{}%
{\def\sphinxthistablewithbooktabsstyle{%
\PackageWarning{sphinx}{%
Add \string\usepackage{booktabs} to the preamble to allow\MessageBreak
local use of booktabs table style}%
\sphinxbuildwarning{booktabs}%
\sphinxthistablewithstandardstyle
}}%
}%
% borderless style
\def\sphinxthistablewithborderlessstyle{%
\let\sphinxhline \@empty
\let\sphinxcline \@gobble
\let\sphinxvlinecrossing\@gobble
\let\sphinxfixclines \@gobble
\let\spx@toprule \@empty
\let\sphinxmidrule \@empty
\let\sphinxbottomrule \@empty
\def\spx@arrayrulewidth{\z@}%
}%
% colorrows style
%
\let\sphinxifthistablewithcolorrowsTF\@secondoftwo
\def\sphinxthistablewithcolorrowsstyle{%
\let\sphinxifthistablewithcolorrowsTF\@firstoftwo
% this is defined to auto-silence itself (in the surrounding scope-limiting
% environment) after one execution ("colorrows" can never follow "nocolorrows")
\let\sphinxthistablewithcolorrowsstyle\@empty
%
\let\spx@table@toprule@rowcolorON \spx@table@@toprule@rowcolorON
\let\spx@table@startbodycolorrows \spx@table@@startbodycolorrows
\let\sphinxtabledecrementrownum \spx@table@@decrementrownum
% Is it the best choice to "prepend" to existing code there?
\spx@prepend\spx@table@toprule@rowcolorON\to\sphinxtabletoprulehook
\spx@prepend\spx@table@startbodycolorrows\to\sphinxtableatstartofbodyhook
%
% this one is not set to \@empty by nocolorrows, because it looks harmless
% to execute it always, as it simply resets to standard colortbl state after
% the table; so we don't need an @@ version for this one
\spx@prepend\spx@table@resetcolortbl\to\sphinxtableafterendhook
}
\def\spx@prepend#1\to#2{% attention about using this only with #2 "storage macro"
\toks@{#1}%
\toks@\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks@#2}%
\edef#2{\the\toks@}%
}%
\def\sphinxthistablewithnocolorrowsstyle{%
\let\sphinxifthistablewithcolorrowsTF\@secondoftwo
% rather than trying to remove the code added by 'colorrows' style, we
% simply make it no-op, without even checking if really it was activated.
\let\spx@table@toprule@rowcolorON\@empty
\let\spx@table@startbodycolorrows\@empty
\let\sphinxtabledecrementrownum \@empty
% we don't worry about \sphinxtableafterendhook as the \spx@table@resetcolortbl
% done at end can not do harm; and we could also have not bothered with the
% \sphinxtabledecrementrownum as its \rownum decrement, if active, is harmless
% in non-colorrows context
}
% (not so easy) implementation of the booktabscolorgaps option. This option
% defaults to true and is not officially documented, as already colorrows is
% only opt-in, so it is there only as a "turn-off" switch, but if nobody
% complains in next few months, it will probably be removed altogether at
% 6.0.0. The reason it exists is because of longtable aspeces described
% below.
%
% As it is used via \sphinxsetup booktabscolorgaps status is not known here
% and may change locally. So it must be implemented via delayed or
% conditional code.
%
% We do not know the order of execution of \sphinxthistablewithbooktabsstyle
% versus \sphinxthistablewithcolorrows: if booktabs is global option it
% will be executed first; but if colorrows is global option and not booktabs
% then colorrows will be executed first via \sphinxthistablewithglobalstyle
%
% Modifying things from locations such as \sphinxtabletoprulehook which are
% executed within the table is not convenient as it must use \global
% but then we would have to undo this after the table.
%
% So what we do is to prepare booktabs specific macros to incorporate
% a conditional to check the colorrows status. We must each time check
% both if colorrows is activated and if colorgaps is. We do this via
% macros without @ so they can be used easily in customization code.
% When and if booktabscolorgaps option is removed, we can then replace
% \sphinxifbooktabswithcolorgapsTF by \sphinxifthistablewithcolorrowsTF
\def\sphinxifbooktabswithcolorgapsTF{%
\if1\ifspx@opt@booktabscolorgaps
\sphinxifthistablewithcolorrowsTF{1}{0}%
\else0\fi
\expandafter\@firstoftwo
\else\expandafter\@secondoftwo
\fi
}
% as this is done without "@" it can be relatively easily be overwritten
% by user in customization code
\def\sphinxbooktabstoprule{%
\sphinxifbooktabswithcolorgapsTF
{\sphinxbooktabsspecialtoprule}%
{\toprule}%
}%
\def\sphinxbooktabscolorgapsoverhang{0.1pt}% avoid pixel/rounding effects
% auxiliary fork
\long\def\spx@table@crazyfork
#1\endfirsthead\endhead\sphinxtableatstartofbodyhook#2#3\@nil{#2}
% we fetch the next token to check if there is a header or not
% this is a bit fragile as it relies on the table templates
% and it assumes this token #1 is never braced...
% let's make this \long in case #1 is \par (should not be)
\long\def\sphinxbooktabsspecialtoprule\sphinxtabletoprulehook#1{%
\specialrule{\heavyrulewidth}{\abovetopsep}{\z@}%
% this macro contains colour init code (and defines sphinxTableRowColor)
\sphinxtabletoprulehook
% unfortunately colortbl provides no way to save/restore the
% \arrayrulecolor status, we have to code it ourselves
\noalign{\global\let\spx@@saved@CT@arc@\CT@arc@
% \@declaredcolor is not \long. Although #1 can probably never be \par with
% our templates, let's be cautious and not use the creazyfork inside the \color
\spx@table@crazyfork
% this crazy code checks if #1 is one of \endfirsthead, \endhead or
% \sphinxtableatstartofbodyhook, as criterion for table with no header
#1\endhead\sphinxtableatstartofbodyhook\@secondoftwo
\endfirsthead#1\sphinxtableatstartofbodyhook\@secondoftwo
\endfirsthead\endhead#1\@secondoftwo
\endfirsthead\endhead\sphinxtableatstartofbodyhook\@firstoftwo
\@nil
{\gdef\CT@arc@{\color{sphinxTableRowColor}}}%
{\gdef\CT@arc@{\color{sphinxTableRowColorOdd}}}%
}% end of \noalign
% \specialrule uses \noalign itself
\specialrule{\dimexpr\belowrulesep+\sphinxbooktabscolorgapsoverhang\relax}%
{\z@}{-\sphinxbooktabscolorgapsoverhang}%
\noalign{\global\let\CT@arc@\spx@@saved@CT@arc@}%
#1% let's not forget to re-insert this #1 in token stream
% fortunately longtable's \endfirsthead/\endhead are not delimiters but
% are really tokens awaiting expansion...
}%
\def\sphinxbooktabsmidrule{%
\sphinxifbooktabswithcolorgapsTF
{\sphinxbooktabsspecialmidrule}%
{\midrule}%
}%
\def\sphinxbooktabsspecialmidrule{%
\noalign{\global\let\spx@@saved@CT@arc@\CT@arc@
\gdef\CT@arc@{\color{sphinxTableRowColor}}% this is RowColorHeader
}%
\specialrule{\dimexpr\aboverulesep+\sphinxbooktabscolorgapsoverhang\relax\relax}%
{-\sphinxbooktabscolorgapsoverhang}{\z@}%
\noalign{\global\let\CT@arc@\spx@@saved@CT@arc@}%
\specialrule{\lightrulewidth}{\z@}{\z@}%
\noalign{\gdef\CT@arc@{\color{sphinxTableRowColorOdd}}}%
\specialrule{\dimexpr\belowrulesep+\sphinxbooktabscolorgapsoverhang\relax\relax}%
{\z@}{-\sphinxbooktabscolorgapsoverhang}%
\noalign{\global\let\CT@arc@\spx@@saved@CT@arc@}%
}%
\def\sphinxbooktabsbottomrule{%
\sphinxifbooktabswithcolorgapsTF
{\sphinxbooktabsspecialbottomrule}%
{\bottomrule}%
}%
% The colour here is already updated because of the \\ before so we must
% execute again the colour selection code, but this is not too complicated.
% What is annoying though is that \sphinxbottomrule in the longtable context
% appears both in the "foot" part and after the last body row. For the first
% occurrence the \rownum could be arbitrary if it had not been reset by each
% table using it via the \sphinxtableafterendhook (see above). This avoids
% having to modify the longtable template. But as \rownum is thus 0 in the
% "foot", the \sphinxSwitchCaseRowColor has to know how to handle negative
% inputs (in fact the -1 value), the Sphinx definition has no issue with that
% but any redefinition must be aware of this constraint.
\def\sphinxbooktabsspecialbottomrule{%
\noalign{\global\let\spx@@saved@CT@arc@\CT@arc@
\sphinxSwitchCaseRowColor{\numexpr\rownum-\@ne\relax}%
\gdef\CT@arc@{\color{sphinxTableRowColor}}%
}%
\specialrule{\dimexpr\aboverulesep+\sphinxbooktabscolorgapsoverhang\relax}%
{-\sphinxbooktabscolorgapsoverhang}{\z@}%
\noalign{\global\let\CT@arc@\spx@@saved@CT@arc@}%
\specialrule{\heavyrulewidth}{\z@}{\belowbottomsep}%
}%
%
% MEMO: with longtable \sphinxtoprule, \sphinxmidrule and \sphinxbottomrule
% are evaluated at time of constructing the headers and footers as boxes
% (already typeset material and expanded macros; \sphinxbottomrule is also
% evaluated at very end of table body, i.e. "normally"). So the used colour
% to fill the booktabs gaps is decided during the headers and footers
% construction by longtable. Actually they are expanded twice: in firsthead
% then in head, respectively in foot and lastfoot. But in current design the
% header row colours are fixed, not alternating, so there is at least no
% coherence issue there.
% The \spx@arrayrulewidth is used for some complex matters of merged
% cells size computations.
% tabularcolumns argument will override any global or local style and
% trigger the appropriate adjustment of \spx@arrayrulewidth.
% Notice that this will be bad if the table uses booktabs style
% but anyhow table with booktabs should not use any | separator.
\def\sphinxthistablewithvlinesstyle{%
\def\spx@arrayrulewidth{\arrayrulewidth}%
\let\sphinxvlinecrossing\sphinxtablevlinecrossing
\let\sphinxfixclines \sphinxtablefixclines
}%
\def\sphinxthistablewithnovlinesstyle{%
\def\spx@arrayrulewidth{\z@}%
\let\sphinxvlinecrossing\@gobble
% let's not bother to modify \sphinxfixclines, it works fine and is
% useful in standard style + no vline (only hlines and clines);
% besides, only one of vline or novline style macro is executed
}%
% default is the standard style
\def\sphinxthistablewithglobalstyle{\sphinxthistablewithstandardstyle}
\ifspx@opt@booktabs
\RequirePackage{booktabs}
\def\sphinxthistablewithglobalstyle{\sphinxthistablewithbooktabsstyle}
\fi
\ifspx@opt@borderless
\def\sphinxthistablewithglobalstyle{\sphinxthistablewithborderlessstyle}
\fi
% colorrows appends to the current globalstyle (standard, booktabs, or borderless)
\ifspx@opt@colorrows % let the globalstyle trigger the colorrows style on top of it
\expandafter\def\expandafter\sphinxthistablewithglobalstyle\expandafter
{\sphinxthistablewithglobalstyle
\sphinxthistablewithcolorrowsstyle
}
\fi
\endinput
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{sphinxpackagefootnote}%
[2022/08/15 v5.3.0 Sphinx custom footnotehyper package (Sphinx team)]
[2022/02/12 v4.5.0 Sphinx custom footnotehyper package (Sphinx team)]
%%
%% Package: sphinxpackagefootnote
%% Version: based on footnotehyper.sty 2021/02/04 v1.1d
......@@ -338,7 +338,6 @@
}%
% slight reformulation for Sphinx
\def\FNH@bad@makefntext@alert{%
\sphinxbuildwarning{badfootnotes}%
\PackageWarningNoLine{sphinxpackagefootnote}%
{Footnotes will be sub-optimal, sorry. This is due to the document class or^^J
some package modifying macro \string\@makefntext.^^J
......
......@@ -29,13 +29,13 @@ file in fasta format:
.. code:: bash
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta
If you don’t have wget, you can try the same command with curl:
.. code:: bash
curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/aliBLAT.fasta
curl http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/aliBLAT.fasta >aliBLAT.fasta
Please verify that the aliBLAT.fasta file is in the folder.
......@@ -43,7 +43,7 @@ Now, we will download the PDB (Protein Databank) file for BLAT:
.. code:: bash
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/blob/master/data/blat-af2.pdb
wget http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME/raw/8d766d4d11af0e93c9da8fc2c5cc1bfc457d2936/data/blat-af2.pdb
Single point mutation calculations
----------------------------------
......@@ -81,7 +81,7 @@ In this step, we will use only evolutionary information from an MSA file:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta
After a few minutes of calculation, you must see at least two files named
BLAT_normPred_evolCombi.txt and BLAT_normPred_evolCombi.png. You have
......@@ -93,7 +93,7 @@ evolutionary information:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
--pdbfile blat-af2.pdb \
--normweightmode sstjetormax
......@@ -113,13 +113,13 @@ structural information. First, let's do it without structural information:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
-m Stiffler_2015_BLAT_ECOLX.mut
You can include structural information in the following way:
.. code:: bash
python $ESGEMME_PATH/esgemme.py aliBLAT.fasta -r input -f aliBLAT.fasta \
esgemme aliBLAT.fasta -r input -f aliBLAT.fasta \
--pdbfile blat-af2.pdb \
--normweightmode sstjetormax \
-m Stiffler_2015_BLAT_ECOLX.mut
......
......@@ -22,20 +22,115 @@ ESGEMME has the following external dependencies:
These tools should be installed to be able to use ESGEMME.
Getting the source code and preparing the environment:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Preparation of the environment and installation of ESGEMME
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Download the ESGEMME source code from
http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME. Define and export the
environment variable ESGEMME_PATH=/path-to-ESGEMME-directory/
Step by step installation on Ubuntu 22.04
Prepare your environment and install the required packages:
.. code:: bash
sudo apt-get update --fix-missing && \
sudo apt-get install -y --no-install-recommends apt-utils && \
sudo apt-get install -y software-properties-common && \
sudo apt-get install -y autotools-dev && \
sudo apt-get install -y automake && \
sudo apt-get install -y build-essential && \
sudo apt-get install -y python3-dev && \
sudo apt-get install -y python3-pip && \
sudo apt-get install -y r-base r-base-core && \
sudo apt-get install -y muscle && \
sudo apt-get install -y default-jre && \
sudo apt-get install -y ncbi-blast+ && \
sudo apt-get install -y nano && \
sudo apt-get install -y less && \
sudo apt-get install -y wget && \
sudo apt-get install csh && \
sudo apt-get install -y hmmer && \
sudo apt-get install -y libboost-all-dev && \
sudo apt-get clean && \
sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
#Dssp installation
If you are using Ubuntu 20.04, you can install dssp by the following command
.. code:: bash
sudo apt-get install dssp
Otherwise, you can install it from the source by the following commands.
Please note that default dssp in Ubuntu 22.04 is not working properly.
.. code:: bash
export ESGEMME_PATH=/path-to-ESGEMME-directory/
wget https://github.com/cmbi/dssp/archive/refs/heads/master.zip && \
unzip -o master.zip && cd dssp-master/ && \
./autogen.sh && \
./configure && \
make && \
sudo make install && \
sudo ln -s /usr/local/bin/mkdssp /usr/local/bin/dssp && \
cd ../ && \
sudo rm -rf dssp-master/ && \
sudo rm -f master.zip
#HHSUITE installation
.. code:: bash
wget https://github.com/soedinglab/hh-suite/releases/download/v3.3.0/hhsuite-3.3.0-AVX2-Linux.tar.gz && \
mkdir hhsuite && \
mv hhsuite-3.3.0-AVX2-Linux.tar.gz hhsuite/ && \
cd hhsuite && \
tar xvfz hhsuite-3.3.0-AVX2-Linux.tar.gz && \
rm -f hhsuite-3.3.0-AVX2-Linux.tar.gz
#Add it to your path permanently inside .bashrc or .profile or .bash_profile
Check the location of hhsuite folder and add it to your path
In my case it was in /home/tekpinar/research/lcqb folder. Therefore, I added the following line
to my .profile file.
PATH="/home/tekpinar/research/lcqb/hhsuite/bin:/home/tekpinar/research/lcqb/hhsuite/scripts:$PATH"
Then
source ~/.profile
#
cd ESGEMME
#Download ESGEMME from http://gitlab.lcqb.upmc.fr/tekpinar/ESGEMME repository and go inside the ESGEMME folder.!
.. code:: bash
cd ESGEMME
Configuring default.conf file
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Inside ESGEMME folder, there is an important file called default.conf.
Inside ESGEMME/esgemme folder, there is an important file called default.conf.
This file contains essential parameters of ESGEMME, such as paths of
external parts, default internal parameters. etc. You have to correct the Software section of this
file according to your system.
.. code:: bash
pip3 install -e . &&\
cd ../
#Installing the required R packages
.. code:: bash
sudo Rscript -e 'install.packages("seqinr", repos="http://cran.us.r-project.org", dependencies=TRUE)'
#Installing secondary programs such as ev_couplings to obtain MSA files.
.. code:: bash
wget https://github.com/debbiemarkslab/plmc/archive/refs/heads/master.zip && \
unzip -o master.zip && \
cd plmc-master && \
make all-openmp32 && \
sudo cp bin/plmc /usr/local/bin/ && \
cd ../ && \
rm -rf master.zip plmc-master
......@@ -86,20 +86,12 @@ if ((normWeightMode=="max")){
}
}else if (normWeightMode=="tjetormax"){
print("Using tjetormax")
print("Using tjetormax with inverse CV")
for (row in 1:nrow(jet)) {
if(sum(colnames(jet)=="traceMax")==1){
if((jet[row, "traceMax"]>jet[row, "pc"]) & (jet[row, "traceMax"]>jet[row, "cv"])){
trace<-append(trace, jet[row, "traceMax"])
}else{
trace<-append(trace, max((jet[row, "traceMax"]+jet[row, "pc"])/2.0, max((jet[row, "traceMax"]+jet[row, "cv"])/2.0, (jet[row, "pc"]+jet[row, "cv"])/2.0 )))
}
trace<-append(trace, max((jet[row, "traceMax"]+jet[row, "pc"])/2.0, max((jet[row, "traceMax"]+1.0-jet[row, "cv"])/2.0, (jet[row, "pc"]+1.0-jet[row, "cv"])/2.0 )))
}else{
if((jet[row, "trace"]>jet[row, "pc"]) & (jet[row, "trace"]>jet[row, "cv"])){
trace<-append(trace, jet[row, "trace"])
}else{
trace<-append(trace, max((jet[row, "trace"]+jet[row, "pc"])/2.0, max((jet[row, "trace"]+jet[row, "cv"])/2.0, (jet[row, "pc"]+jet[row, "cv"])/2.0 )))
}
trace<-append(trace, max((jet[row, "trace"]+jet[row, "pc"])/2.0, max((jet[row, "trace"]+1.0-jet[row, "cv"])/2.0, (jet[row, "pc"]+1.0-jet[row, "cv"])/2.0 )))
}
}
}else{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment